Skip to content

SummerZm/Note

Repository files navigation

Introduction

Preview

对基础进行建设收益是最高的 -- 身体,人文,数学, 英语,基础工具

  • 理科基础【原理/思维】:数学知识 - 自然科学物质运行规律【学科之子】

    • 微积分 - 研究变化
    • 概率论 -
    • 线性代数 -
    • 离散数学 -
  • 工科基础【实践/经验】:框架意识 - 可拓展,可维护,简单,层次

    • 设计模式
    • 工具熟练度
    • 知识面的广度
    • 实际经验
  • 文科基础【沟通/价值】:认知能力 - 自科是第一生产力,人文定义社会价值

    • 沟通能力 - 英语等
    • 持续输出 - 细心,耐心, 专注
    • 价值取向 - 坚固的心理精神内核
  • Leafxu

    • A. 逐渐的发现,解决不同问题要有不同的思维模式,要进入状态去解决问题才能有所成长,有所积累。
    • B. 解决算法问题和工程问题时,思维活动,模式,状态,表达方式,出发点是不同。
    • C. 当面对问题时,要定位分析,养成然后快速的进入状态。
    • D. 解决问题时,确定立足点,有取又舍,方案要能自园其说。
  • 编程理解

    • 工程工具 [make/cmake/configure]
    • 语言熟练度 [c/c++]
    • 专业知识 [math/audio/video]
    • 工程思想 [design method]
  • 健康身体:根本载体

  • 编程学习成长指标

    • 研究中间层哲学
    • 执着于源码的编写,写好看的代码,那么应该去研究语言或语言工具的表达艺术。
    • 使用某个库的API,那么熟悉英文,看懂术语
    • 执迷于懂源码的处理逻辑,那么应该去了解其背后的数学原理以及应用场景,还有历史
    • 计算机是一门语言,重构要点之一就是用计算机言语好好说话

编程与阅读

  • 关注聚焦问题【方向/产出/积累】
  • 读懂文档头文件等【沟通/理解/抽象】-不要钻牛角尖
  • 基本功/专业背景知识【数理基石】
  • 了解熟悉工具【提高效率/讨生活】

如何学习?

  • 没有落到实处的知识理论在社会中无法创造价值;
  • 与自己领域无关的知识也许很璀璨迷人,但对于自己的物质生活,帮助有限,性价比低;
  • 给自己提问题,只写简答代码块和自己领域相关的代码;
  • 先成为一个独立完整的人,然后在自己选方向上不懈努力,不惧挑战,展现自己;不要在分支太过深入,要在合适地方停下来;
  • 这样战线才不会拉的太广太长;不要被太多的媒体鼓吹搞得太焦虑;
  • 重点应该是:工作,基础,爱好;
  • 维护自己的思维导图树:想法树,学习树,历史树,成长树,目标树,技能树
  • 学习一门新课
    1. 理论性与实践性知识【对于真正重要的、思想性东西放在平时零敲碎打,那么肯定是事倍功半,甚至适得其反。】

      # 在具备基础之后,学习任何新东西,都要抓住主线,突出重点。
      # 对于关键理论的学习,要集中精力,速战速决。旁枝末节和非本质性的知识内容,完全可以留给实践去零敲碎打。
      #
      # 原因: 【任何一个高级的知识内容,其中都只有一小部分是有思想创新、有重大影响的,而其它很多东西都是琐碎的、非本质的】
      #
      # 正确做法:【集中学习时必须把握住真正重要那部分,把其它东西留给实践】
      # A. 对于重点知识,只有集中学习其理论,才能确保体系性、连贯性、正确性,而对于那些旁枝末节,只有边干边学能够让你了解它们的真实价值是大是小,才能让你留下更生动的印象。
      # B. 如果你把精力用错了地方,比如用集中大块的时间来学习那些本来只需要查查手册就可以明白的小技巧,而对于真正重要的、思想性东西放在平时零敲碎打,那么肯定是事倍功半,甚至适得其反。 
      #
      # 例子:
      # 操作系统,应该把精力主要放在进程管理与调度、内存管理、并发编程与同步、高效的IO等等,而不要过于投入到初始化(从 BIOS 加载引导扇区、设置 GDT、进入保护模式)这种一次性任务上。
      # 对于在用户态写服务程序的人来说,弄清楚为什么要打开 PC 上的 A20 地址线真的有用处吗?(这不过是个历史包袱罢了。)
    2. 知识层次分明【有的人学着学着成了语言专家,反而忘了自己原本是要解决问题来的】

      # 我认为一个司机的技能主要体现在各种道路条件和天气状况下都能安全驾驶(城市道路、高速公路、乡间公路 X 晴、雨、雪、雾),平安到达目的地。
      # 作为一名司机,了解汽车运行的基本原理当然是好事,可以有助于更好地驾驶和排除一些常见故障。
      # 但不宜喧宾夺主,只要你不真正从事汽车设计工作,你再怎么研究发动机、传动、转向,也不可能比汽车厂的工程师强,毕竟这是人家的全职工作。
      # 钻研汽车构造超过一定程度之后,对开好车就没多大影响了,成了个人兴趣爱好。“有的人学着学着成了语言专家,反而忘了自己原本是要解决问题来的。”(语出孟岩 快速掌握一个语言最常用的50%)
    3. 不沉迷于过时知识

      #
      # 对于并发编程来说,掌握 mutex、condition variable 的正确用法,避免误用(例如防止 busy-waiting 和 data race)、避免性能 pitfalls,是一般服务端程序员应该掌握的知识。
      # 而如何实现高效的 mutex 则是 libc 和 kernel 开发者应该关心的事,随着硬件的发展(CPU 与内存之间互联方式的改变、核数的增加),最优做法也随之改变。
      # 【如果你不能持续跟进这一领域的发展,那么你深入钻研之后掌握的知识到了几年之后可能反而成为累赘,当年针对当时硬件的最优特殊做法(好比说定制了自己的 mutex 或 lock-free 数据结构)】
      # 在几年后有可能反而会拖低性能。还不如按最清晰的方式写代码,利用好语言和库的现成同步设施,让编译器和 libc 的作者去操心“与时俱进”的事。
      # 
    4. 如果要记住结论,一定要同时记住前提和适用条件

      # 《Linux内核源码情景分析》上分析内核使用 GDT/LDT 表项的状况,得出进程数不超过 4090 的结论。如果你打算记住这个结论,一定要记住这是在 Linux 2.4.0 内核,32-bit Intel x86 平台上成立
      # 新版的内核和其他硬件平台很可能不成立。看完书后千万不要张口就来“书上说 Linux 的最大进程数是 4090”。
      # 
      # 一个 Linux 进程最多创建 300 余个线程,这个结论成立的条件是 3GB 用户空间,线程栈为 10M 或 8M。在 64-bit 下不成立。
      #
      # Reactor 模式只能支持不超过64个handle,这个结论成立的条件是Windows下使用 WaitForMultipleObjects 函数实现的WFMO_Reactor,对于Linux下使用 poll/epoll 实现的 Reactor 则无此限制。
      #
    5. 分层的学习

      # 1. 论文层次:行文思路和验证技巧
      # 2. 理论模型:前提条件�和结论
      # 3. 实践层面:具体项目和环境部署

Todo list

  • 计算机演化图谱

    # 计算机的本质是: 数据的输入,输出,处理.
    # 1. 计算机图谱第一张:一个黑匣子;上面标示着数据处理,还有数据输入输出的两个箭头.
    # 2. 不断的完善黑匣子往上不断的补充CPU,内存,硬盘;标示上引入的理由和要解决的问题.
  • 数学学科发展历史图谱

  • 程序常见问题思维导图:语言层面(工具),网络层面(系统/协议/api),逻辑层面(设计模式)

  • 音视频学习知识图谱

# 2021-03-17 短期计划
# A. 熟悉: webrtc, openmcu.
# B. 通过 Mplayer, FFmpeg 了解各种音视频封装格式.
# C. C网络库了解熟悉.

Directories intro

Time Cost
纳秒级 cpu计算cache访问
10~100纳秒级 cpu访问内存
微秒级 内存读取1M数据
百微秒级 1.SSD读取1M数据; 2.局域网ping; 3.Redis一次查询
毫秒级 机械硬盘读取1M数据
10~100ms 1.域网ping; 2.局域网数据库查询
秒级 访问网站

Dir: Algorithm

编程就是在 同步,异步, 并发, 时间/空间限制不同场景下使用 判断,分支,循环对数据进行存储,分析,修改

  • 概念解释
    1. 数据结构:构建合适数据结构用于简洁高效的操作数据

      • 例如:环形数组
      • 难点:需求明确/逻辑严谨/接口设计相关经验
    2. 数据处理:数据和数据存储结构的修改

      • 例如:一维结构[array]改变成二维结构[set/map/tree/queue/heap];
      • 例如:双指针去重
      • 难点:熟悉API。
    3. 数据分析:寻找数据特性,根据特性进行数据处理

      • 例如:简单数据特性 - 顺序、前N个、等等
      • 例如:复杂数据特性 - 符合某种规则, 异位词、共同树祖先、等等
      • 难点:寻找重复子问题;思维/逻辑严谨
      • 备注:一些简单数据分析问题,在数据处理时就已经被解决了
File Comment
[Dir] Base 目录:基础数据结构实现
[Dir] Leafxu 目录:算法笔记,心得,总结
[Dir] Structure 目录:构建合适数据结构用于简洁高效的操作数据
Note.md 构建简洁高效便于操作的数据结构注意点和一些实现
[Dir] Process 目录:数据和数据存储结构的修改
common.md 常见的数据处理转换代码模板
[Dir] Analize 目录:寻找数据特性,根据特性进行数据处理
qList.md 常见数据分析问题思路
[Dir] Leetcode 目录:Leetcode题目
[Dir] Leetcode/Array 目录:数组题目
1. Rotate.cpp 旋转/环形mod数组 - 数据结构
2. FizzBuzz.cpp 使用map映射-数据处理
3. Remove-duplicates-from-sorted-array.cpp 双指针去重 - 数据处理
4. groupAnagrams.cpp Array->Map 转换成方便处理(统计)的数据 - 数据处理&分析
5. valid-anagrams.cpp 比较数据是否具有共性 - 数据分析
6. container-with-most-water.cpp 双指针夹逼法 - 二次方程降维 - 数据分析
7. move-zeroes.cpp 快慢指针 - 归类一定顺序的数据 - 数据分析
[Dir] Leetcode/Heap 目录:堆题目
top-k-frequent-elements.cpp 一维数组转二维Map结构 - 数据处理
[Dir] Leetcode/Tree 目录:树题目

Dir: Architecture

File Comment
1_MicroPrespective.md 宏观架构
2_smallestComputer.md 最简计算机需求分析
3_operationSystemApi.md 最简计算机需求分析
4_mutilTask.md 最简计算机需求分析
5_processSyn.md 最简计算机需求分析
6_security.md 最简计算机需求分析
7_desktopDev.md 最简计算机需求分析
8_MVC.md 最简计算机需求分析
9_Web.md 最简计算机需求分析
10_Drawing.md 最简计算机需求分析

Dir: Audio

File Comment
info.md 音频基础知识
Audio.md PCM音频数据处理
Resample.md 声音重采样基础知识
simplest_acc_parser.md ACC码流解析

Dir: C

From 《C expert》

File Comment
chapter01 C语言发展历史
chapter02-problem C语言设计上先天缺陷
chapter03-pointer C语言指针声明
chapter04-value C语言赋值本质&数组
chapter05-compiler C语言编译链接相关问题
chapter06-stack C语言堆栈与异常处理实现
chapter07-history 计算机cpu发展历史&内存表示速记
chapter08-typecast C语言不同标准下类型转化处理不同
chapter09-array C语言数组传参
chapter10-volatile C语言使用内存中而不是寄存器的数据&可见性&互斥性
chapter11-crlf C语言回车换行&文件打开方式
chapter12-num 整型存储方式
chapter13-mutilfile 可执行文件的分布
chapter14-variable C语言静态变量的使用
chapter15-thread C语言线程安全与可重入
chapter16-segfault C语言段错误排查
chapter17-tips C语言技巧

Dir: C++

File Comment
intro.txt C++简介
Exception.txt C++异常
inherit.txt C++继承
Note.txt C++问题集
reload.txt C++重载操作符
template.txt C++模板编程

Dir: History

File Comment
History_computerTheory 计算机数学理论历史
History_math_part1 中世纪前数学史
History_math_part2 中世纪~费马数学史

Dir: Hardware

File Comment
Latency.md 延时

Dir: Live555

File Comment
[Dir] [Image] Live555结构图
[Dir] [Sink]

Dir: SQL

File Comment
[Dir] Intro SQL 基本概念简介
intro.md SQL 整体框架背景相关知识
base.md SQL 基本常用命令
join.md SQL 连接介绍
mysql-log.md mysql redo-log and bin-log
stored-procdure.md SQL 存储过程简介
transaction.md SQL 事务级别异常整体介绍
view.md SQL 视图简介
[Dir] Optimization SQL 优化相关
intro.md mysql 性能优化思路
index.md mysql 实现原理详细介绍
lock.md mysql 锁机制与MVVC机制介绍
NF.md SQL 范式理论简介
optimizer.md mysql 查询优化器介绍
storage.md mysql 数据存储原理
[Dir] Practice SQL 实践介绍
master_slave_sync.md mysql 主从一致简介
recovery.md mysql 数据恢复介绍

Dir: Math

File Comment
sequence 数列知识大杂烩

Dir: English

File Comment
[Dir] Grammar 英语语法

Dir: Linux

File Comment
[Dir] CPU 上下文相关概念
[Dir] Disk 文件系统,磁盘IO相关概念
[Dir] Memory 内存指标相关知识
[Dir] Network 网络性能,nat相关知识
[Dir] Other 动态追踪内核,性能优化知识

Dir: Web

Web 通信相关

  • Http 通信中安全问题
  • Web 应用层无状态通信相关问题
File Comment
[Dir] Auth Some web auth question.
token 构建简洁高效便于操作的数据结构注意点和一些实现
[Dir] TLS Some about ssl.
ssl_tls.md 构建简洁高效便于操作的数据结构注意点和一些实现
[Dir] Http Some about http question.
intro.md Get Post 数据包结构封装
[Dir] Openssl Something about openssl
android/openssl 库/二进制文件
arm/openssl 库/二进制文件
[doc] 用例文档
src 测试用例

Dir: OS

操作系统/底层硬件层面相关概念

  • 总线通信的一些问题方案概念
File Comment
[CPU.md CPU简介

Dir: Experience

工作设计总结

File Comment
C.md C语言泛型编程与工程思想
Debug.md 没有Rebuild导致的问题
Design.md 接口设计相关问题
Version/InfoProtocol.md 协议中的版本号
NatQuestion.md openmcu局域网穿透问题

Dir: Video

File Comment
[Dir]Application 音视频相关应用
[Dir]Openmcu Openmcu介绍
classInfo Openmcu 类结构信息
FrameWorkInfo.md Openmcu 框架信息
Question.md Openmcu 问题处理
[Dir]Transfer 音视频传输
[Dir]flv flv简介
flv flv封装格式
[Dir]ps 多媒体ps流简介
intro.md 多媒体ps流简介
[Dir]rtp (多媒体rtp流简介
rtp.md 多媒体rtp流简介
[Dir]SDP (多媒体SDP简介
intro.md 多媒体SDP协议简介
[Dir]SIP (多媒体SIP协议流简介
SipIntro.md 多媒体SIP协议流简介
[Dir]Code 音视频编码
[Dir]H264 H264简介
H264Info.md H264封装格式
nal.md NAL数据包格式
simplest_h264_parser.md h264码流解析
libx264_commadline.md H264命令行工具信息
libx264_intro.md x264源代码简单分析:概述
libx264_trunk.md 主干部分代码简介
libx264_trunk1.md libx264主干接口代码调用
libx264_trunk2.md libx264主干接口代码调用2
[Dir]Base 音视频基础
[Dir]YUV (多媒体YUV简介
Readme.md 视频YUV数据简介

LeafxuZm

About

工作经验/学习储备

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published