1.讲项目
2.数据结构:
-链表、数组相关的区别及应用场景
内存和逻辑结构
链表:不需要内存中连续空间,插入删除方便,只需要移动指针;不知道数据元素有多少的时候,需要多次插入删除的时候
数组:需要内存连续空间,查找方便;
-贪心算法和动态规划
https://www.cnblogs.com/Joezzz/p/9716193.html
两者推导算法,都是分解成子问题来求解的,都有最优子问题的解
贪心算法:总是选择当前最优的解当做最终解,有时候不能保证局部最优解就是全局最优解;具体,是从根节点开始,选取最优子树(那种显而易见的),之后在最优子树下选择最优的子树……
动态规划:本质是穷举,只是保留每个局部最优解,根据全部的最优解找到最终的最优解;从叶子节点向上走;
-贪心算法在拿纸币时的思路
总是选择最优的,为什么这个问题适合用贪心算法呢,因为最大的面额可以分解为小面额,所以每次拿最大的面额一定是最优的;
用贪心算法需要满足某种规律,比如倍数关系;
二叉搜索树的应用场景
哈夫曼编码(哈夫曼树,最小加权路径);路由器;B+树文件系统;
B+,B树
B树其实是多路二叉树(根结点有两个子结点,其他结点子结点不止两个)平衡排序树
B树:有序数组+平衡多叉树; B+树:有序数组链表+平衡多叉树; B*树:一棵丰满的B+树
其他复习:
拓扑排序:目的是对于不稳定排序的一种解决方法:稳定排序法
对于先后顺序优一定的执念,比如:对于大一选了这门课,大二才能选另一门课这样的
其他排序方法:
最短路径:
Dijksstra:是典型的单源最短路径算法,主要用于计算某个点到另一个点的最短路径
算法思路:对一个有向图,求A到D的最短路径,准备一个集合S(已求取最短路径的定点集合),U(未求取最短路径的定点集合)
(1)首先将起点所连通的点中选取最短加权路径的点,加入S中,U中删除;
(2)在S集合中的点所连通的点中选取最短路径(除了已经选过的)的对应点加入集合S,U中删除;
(3)重复步骤二直到所有的点均在S中;
弗洛伊德算法:用于解决任意两点之间的最短距离算法
最小生成树:包含n个顶点,但是只有n-1条边,再加一条边就成环
克鲁斯特算法:
(1)将所有的边排序
(2)每次选择最小的边,边连接的两个点是不同的树(这里将每个顶点单独看做是n棵树)
(3)直到所有的顶点在一棵树
Prim算法:
感觉和迪杰斯特拉算法有点像
(1)将所有的顶点摆好,选路径最小的一条连接
(2)只要不成环,连接到所有的就行
https://blog.csdn.net/a2392008643/article/details/81781766
两个栈实现队列
两个队列实现栈
3.计算机网络
TCP三次握手四次挥手;
https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc(如有违规,烦请联系删除)
4.I/O编程
NIO做了什么优化
5.数据库
-InnoDB有什么优势和其他的索引引擎比
数据库事务
原子性(操作的一致性,不会因为数据库故障发生不一致的情况)、隔离性(事务的执行不受其他事务的影响)、一致性(并行执行的操作和顺序执行的操作结果一样)、持久性(已提交的事务保证对数据库的改变不会被丢失)
其中:
一致性、隔离性:主要通过并发控制
原子性、持久性:主要通过日志恢复技术实现;