从2月26日至今,已经过去半个月的时间了,目前简历已经定型了,之后只需要修改项目即可。
我目前的工作可以总结为以下几点。
- 项目相关
- 刷题相关
- 八股文相关
项目相关
目前我的简历上存在三个项目,其中一个是本科毕业设计,一个是软件著作权项目,一个是github上的项目。目前这几个项目不太行,需要修改如下:
- 动手搭建一个基于Reactor架构的Web服务器,这个项目目前github上很多,这需要理解其中含义,动手写一遍即可。
- 基于Protobuf的RPC通信框架,这个需要了解Protobuf和RPC的知识。
- IM即时通讯后端服务器部分。
刷题相关
目前了解的常用的数据结构:
- 数组: 动态数组(vector的扩容和缩容)
- 链表: 双向链表、循环链表
- 栈: 单调栈(栈顶元素是最大的,栈中元素单调有序)
- 队列: 双端队列、单调队列、优先队列(完全二叉堆、删除堆顶下滤、新增元素上滤、建堆Floyd)
- 二叉树: 二叉搜索树(二叉排序树BST)、平衡二叉树(AVL、左旋,右旋,左右旋,右左旋)
- 图: 最短路径(找到两个点之间的权值最小的路径)、最小生成树(可在连通图中找到权值最小的链接每个点的路径,即生成树)、并查集(检查图中是否有环)、树状数组(logn的求区间和)、线段树
目前了解的常用的算法:
- 动态规划、01背包、完全背包、多重背包、混合背包
- N皇后(栈和回溯)
- 最小生成树的算法(Prim算法和Kruskal算法)
- tarjan求有向图的强连通分量
- 二叉树的前中后序遍历
- DFS(递归和栈的方式)
- BFS(队列的方式)
- 双指针
- 滑动窗口
- KMP
- 十大排序算法(快速排序、堆排序、计数排序、希尔排序、桶排序、基数排序、插入排序、选择排序、冒泡排序、归并排序)
八股文相关
计算机网络
OSI七层模型和TCP/IP四层模型
数据链路层协议Ethernet
网络层协议 IP协议的包头Header
了解了TCP的三次握手和四次挥手, TCP的包头、
了解了UDP协议
了解了HTTP协议是无状态的协议,HTTP有请求和响应不同的头部,请求的方式分为get、post、put、delete、head、option等,剩下的那些我也不知道,响应的状态码分为1xx,2xx,3xx,4xx,5xx, 1xx表示临时的响应, 2xx表示成功,3xx表示重定向、4xx表示客户端异常、5xx表示服务器异常。
操作系统
了解了进程和线程的区别
并发和并行、同步和异步
进程的创建fork(), 僵尸进程(子进程退出,但是父进程没有处理子进程的退出)和孤儿进程(父进程退出了,子进程还没有退出,会被init进程收养)
文件描述符fd
IO多路复用 select、poll、epoll
Reactor模式、Proactor模式
用户态(用户空间)和内核态(内核空间)(32位操作系统一个进程分配4G虚拟内存,1G内核,3G用户) 数据段data,未初始化数据段bss,代码段txt等
数据库
Mysql
Mysql的基础还不熟悉,更不要说还有Mysql的底层知识不同的引擎还有B+树什么的,都没看。
Mysql的常用命令
- 创建数据库、数据表 create database [name]; create table [table_name] (字段名 类型 键类型);
- 插入数据 insert into [table_name] (字段名) values(值);
- 更新数据
- 删除数据
- 修改表(增加新的字段)
- 分组查询 select * from [table_name] group by [字段] having [条件,聚合函数,比如count(*) > 2]
- 联合查询 left join、 inner join、right join
- 创建索引在某一个字段上 create index index_name on table_name (column_name)
Redis
Redis我就下好了,但是还没有怎么使用过。知道了常用的数据类型,额,好像又忘了,现在完全想不起来了,好像有str、zset啥的。这一块得再看看。Redis本来是单线程的Reactor模式,后来6.0之后可以使用多线程了,这个地方还不是很了解。
Nginx
Nginx好像是多进程的Web服务器,以前用过,但是主要就是用来放SpringBoot的项目,没怎么深入了解过底层,挺火的,这个可以在其他了解过后再了解。
Spring和SpringBoot
Spring和SpringBoot的八股文我得看看了,谁让我简历上还写了这个...