写点什么

学习总结 - 架构师训练营 - 第八周

发布于: 2020 年 07 月 29 日



时间复杂度、空间复杂度

P问题:能在多项式时间复杂度内解决的问题

NP问题:能在多项式时间复杂度内验证的问题

NP-hard问题: 一类NP问题的解法

NP完全问题:是NP-hard问题,也是NP问题



  • 数据结构

数组:

连续空间、相同类型 ->随机查找快、增删慢

链表:

零散空间、指针指向下一个数据 ->随机查找慢、增删快

数组+链表:

数组中保存链表的头结点

Hash表:Key计算hashcode,从数组中查找

Hash冲突:形成链表

栈:

后进先出的线性表

数组、链表都能实现

队列:

先进先出

消息队列

应用:

由近及远查找符合条件的人:好友入队,出队列时,把好友的好友入队

搜索最短路径:搜索起点到终点的最小步数(路径的步长一致)

树:

二叉排序树

->(不平衡退化为链表)->

平衡二叉排序树:左右子树深度差不超过1。查找效率高

->(旋转恢复平衡,代价大)->

红黑树:增删效率高、查找效率差

根为黑色、叶子为黑色空节点NIL

不会出现连续的红色、

任何节点到其叶子节点的路径上黑色节点数相同

->(染色和旋转,最多三次)



跳表:

有序链表 - 创建上层稀疏的链表

查找时,从稀疏的链表开始查找



  • 算法:

穷举算法

递归算法:可能栈溢出

贪心算法:每一步的当前最优解,不一定是全局最优解

迪杰斯特拉算法:计算起点到每个节点的最短路径

动态规划:分治,子任务之间有关联(公共子问题)

遗传算法:得到的不是最优解

背包问题:

基因编码(0未选择,1选择)与染色体(基因组合)

适应函数(总价值最大)与控制参数(不能超过总重量)

选择算法(根据适应值选择可以遗传的染色体及繁殖次数)

交叉遗传(不同的交叉点,染色体变动)、突变

收敛:如果连续几代都没有更强的染色体



  • 网络模型



发送:层层封包

接收:层层解包



http:队头堵塞



  • Socket - 是支持TCP/IP协议的网络通信的基本操作单元。

主线程:负责建立连接

多线程:一个连接 - 一个Socket - 一个线程

线程池:减少创建线程的开销



  • Java NIO

Channel :对应socket连接

Selector选择器 -- 检查Channel通道的事件 -- 执行selectionkey操作(write/read/accept/connect)

  • 系统I/O复用

select/poll:轮询所有的socket

epoll:设备就绪后执行回调函数,将自己加入就绪链表;epoll遍历就绪链表



  • 数据库

连接器:建立连接比较消耗时间;

语法分析器:

语义分析与优化器:复杂嵌套的SQL进行语义转化

执行计划:



B-/B+树:

B+树的所有数据都在叶子节点上。主要用来构建索引

聚簇索引:B+树;数据库记录和索引存储在一起。Mysql主键。

非聚簇索引:B+树;数据库记录主键和索引存储在一起。



谨慎使用索引:

索引的修改会消耗较长的时间;

索引的修改会阻塞数据库的所有操作(增删改查)

删除不用的索引,避免开销;

小数据类型创建索引。



用户头像

还未添加个人签名 2020.04.13 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
请添加“极客大学架构师训练营标签”,便于分类~
2020 年 08 月 03 日 14:26
回复
没有更多了
学习总结 - 架构师训练营 - 第八周