目前的learning plan

必须掌握的基础知识,主要分为数据结构、算法、操作系统、数据库、前端等。不定期更新

数据结构

  • 堆栈
  • 队列
  • 数组
    • 完全二叉树:除了最后一层以外,其余层必满;最后一层可以是满,如果不满,则节点必须集中在左边
    • 最大堆:1.必须是完全二叉树 2.节点的值必须大于左右子树的值
    • 二叉搜索树:左孩子比父母小,右孩子比父母大。
    • avl树:一种平衡二叉搜索树,并且任意节点的孩子节点高度差最大为1.
    • 平衡因子:某节点的平衡因子是该节点左子树的高度减右子树的高度(avl只能是0,1,-1
    • 红黑树:

      节点是红色或黑色。
      根是黑色。
      每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)
      从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。

算法

  • 排序
  • 查找
  • hash
  • 算法思想-递归
  • 算法思想-贪心
  • 算法思想-回溯
  • 算法思想-分支
  • 算法思想-动态规划

数据库

  • 索引
  • 视图
  • 触发器
  • 范式
  • 存储过程
  • 事物
  • B+树
  • E-R图
  • 3.10补充-mysql、mongodb

操作系统

  • 并发性(concurrence)

    在一个系统(或者一段时间)中,有多个同时执行的程序进行计算,并且它们之间存在潜在的交互。优点:资源利用率高、程序设计更简化、程序响应更快、系统性能更高;缺点:存在并发性的系统会有不同的程序运行路径,所以系统的处理结果会有不确定性。

  • 进程(process)、线程(thread)

    一个应用程序包含一个或多个相互协作的进程。

      进程:一块包含一些资源的内存区域,组成为一段一定大小(4GB)的线性内存空间。
    
      线程:进程中包含的一个或多个执行单元,无内存空间,只有指针、栈、寄存器、数据区。
    

    一个程序至少有一个进程,一个进程至少有一个线程。进程和线程都是系统(程序)的执行单元。
    差别:进程具有独立的地址空间(供它包含的线程访问),线程没有,所以如果一个进程崩溃,在保护模式下不会对其他进程产生影响;而一个线程死掉就等于整个进程死掉(多进程程序比多线程程序健壮),但是进程切换时耗费的资源多,效率差。

  • 异步、同步处理、阻塞和非阻塞

      同步调用:调用之后就能得到结果
      异步调用:调用之后需要其他方法(状态、通知、回调函数)来得到结果。
      同步线程:两个线程的步调要一致,如果二者运行速度不一样,则快的等慢的(快的阻塞一下等慢的)。
      异步线程:两个线程的步调不一致,各自独立运行。
      同步I/O:不发送成功或失败状态,一直等待。
      异步I/O:输入/输出时立即返回成功或失败的状态。
    

    阻塞:进程或线程停止。

      阻塞I/O:资源不可用时(输入/输出未完成,I/O一直阻塞,直到完成。
      非阻塞I/O:资源不可用超过一定时间后,直接结束本次I/O。
    
  • 调度、死锁

    死锁:两个或多个执行单元之间相互等待对方结束而引起阻塞的情况。

      例:T1有R1的访问权、T2有R2的访问权。
          T1想访问R2,同时T2想访问R1,此时T1和T2都要等待对方给出权限,形成死锁。
    
  • 存储器管理
  • 文件管理
  • IO阻塞
  • 用户态、核心态

nodejs

express框架、es6、es7

前端框架

react、vuejs、angularjs

IOS开发