TedQin


  • Home

  • Categories

  • Archives

  • Tags

目前的learning plan

Posted on 2018-07-15 | In 基础知识

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

数据结构

  • 表
  • 堆栈
  • 队列
  • 数组
  • 树

    • 完全二叉树:除了最后一层以外,其余层必满;最后一层可以是满,如果不满,则节点必须集中在左边
    • 最大堆: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开发

《深入浅出NodeJS》读书笔记

Posted on 2018-07-15 | In node.js

第一章

  • Node

    Node:“一个强制不共享任何资源的单线程、单进程系统,通过协议构建不同的node来形成一个大型的网路应用,每一个node为一个节点”,这是书中给的解释原文

  • 非阻塞I/O

    书中多次提到的概念,我理解的非阻塞就是线程或进程的停止,

  • 特点
  •   1.异步
      2.事件(随意绑定事件),时间绑定轻量级、松耦合
      3.回调函数    
    
  • Ajax请求:快速动态刷新网页,不刷新,直接更新参数

读完第一章以后,觉得云里雾里,这本书对于没有JS基础的人来说有点头疼。不过能肯定的是nodejs是一门异步I/O的语言,和python等编程习惯不一样,需要适应。

至此,我决定先啃《js高级程序设计第三版》这本书,对js有一定的了解以后再来学习nodejs。

第二章

C/S模式:客户/服务器模式,例如微信等
B/S模式:浏览器/服务器模式,例如各种web应用

  • CommonJS规范:

    相比于python的import,JAVA的类文件等,js是没有模块引入机制的,只能通过<script>标签这种杂乱的方式引入代码。在nodejs未出现之前,js只能用于前端,只有Rhino等后端javascript运行环境来作为小工具。node这么多年发展以来,已经形成了一套响应的规范,也就是CommonJS规范。

      1.模块引用:var math = require('math');
      2.模块定义:export.add = function(){...;return sum};
                 export.increment = function(val){};
      3.模块标识:
    
  • node模块实现:

    node引入模块需要3个步骤:路径分析、文件定位、编译执行,其中系统自带的模块为核心模块,直接随node启动时加载进内存,加载速度快;用户自定义的模块称为文件模块,在运行时动态加载,慢。

      1.路径分析:require('标识符');//分析标识符,标识符主要分为:
          *核心模块,如http、fs、path等。
          *.或..等相对路径文件模块
          *以/开始的绝对路径文件模块
          *非路径形式的文件模块,如自定义的connect模块
              (自定义模块非核心模块和路径形式的模块,分析速度最慢)
    
      2.文件定位:
          *扩展名分析:模块文件可以不带扩展名,自动按.js、.json、.node顺序补全。
          *目标分析和包:
      3.模块编译
          *核心模块一般为C/C++或javascript编译,所有的都转换为C/C++然后编译
      4.内建模块:全由C/C++编译的模块,使用:
          process.binding('标识符')
          来进行导出
    
  • 包与NPM:

      "package.json":包含包的所有信息(版本、名称、作者等)
      NPM已经是一个包共享平台,实现第三方模块的发布、安装和依赖。
    
  • 前后端共用模块:

    前端规范:AMD规范、CMD规范

      1.AMD规范定义的模块需要用define:
      define(function(){...})
    
      2.CMD规范申明时要指定所有的依赖
    

第三章

tips:js异步

回调函数复习

Promise()

  • resolve():

      pending->fulfilled  
      pending->rejected
    
  • reject()

123
Ted Qin

Ted Qin

Output is the best input

22 posts
13 categories
12 tags
GitHub DouBan ZhiHu
© 2017 - 2019 Ted Qin