面试准备内容

操作系统:进程和线程

1.进程是资源分配最小单位,线程是程序执行最小单位。

2.进程有自己的独立地址空间,每启动一个进程,系统就要为他分配地址空间,建立数据表来维护代码段,数据段,堆栈段,这种操作非常昂贵。

   线程共享进程中的数据,使用相同的地址空间,所以切换线程和创建线程的花销小很多。

3.线程之间通信更方便,因为他们共享全局变量,静态变量等数据。而进程间通信则需要IPC进行通讯。IPC主要是管道,socket,系统IPC(消息队列,信号,共享存储)三种。

4.多进程程序更健壮,因为进程间相互独立。而多线程程序,如果一个线程崩溃,那么进程就会崩溃。

操作系统:实现LRU的缓存数据结构

简单暴力就撸个平衡树/使用 c++ 的set

或者撸个堆/ 使用c++的优先队列

复杂度都能保证logn

操作系统:用户态和内核态

操作系统对程序的执行权限进行分级,分为用户态和内核态

用户态相较于内核态有较低的执行权限,因为要避免用户程序崩溃导致系统崩溃

内核态相当于介于硬件与应用之间的层,可以执行任何cpu指令,也可以引用任何内存地址,包括外围设备, 例如硬盘, 网卡,权限等级最高。

用户态权利有限。比如内存分配中部分内存是仅为内核态使用的,用户态应用不允许访问那些内存,只能访问自己申请到的内存

状态抓换:

...

计组:一个现代的处理器1s能执行多少次简单的mov指令

一个mov指令消耗一个时钟周期,简单来讲,执行次数与cpu的主频有关

数据库:mysql数据如何恢复到任意时间点

恢复到任意时间点以做定时的全量备份,以及备份增量的binlog为前提

恢复到任意时间点首先将全量备份恢复之后,再在此基础上回访增加的binlog直至特定的时间点

计网:三次握手和四次挥手 

三次握手:

1.client:我要连接

2.server:我知道你要连接了。我要连接

3.client:我也知道你要连接了。双方都建立连接

四次挥手:

1.client:我没话说了

2.server:我知道你没话说了,听爹说话

3.server:爹也没话说了

4.client:爹知道了,断吧

问:为什么要三次握手?为什么要四次挥手?

三次握手的必要:

一个场景,client发的数据包滞留,很久之后 到达server,server建立连接等待client发数据,client不理他,浪费server资源

四次挥手必要:

关闭双向通道,缺少最后一次挥手会导致如果第三次挥手的数据包丢失,client一直等待关闭,而又了第四次挥手,server一直收不到第四次挥手的数据包,就会重新发第三次挥手,直至对方成功收到

c++的一些特性:

nullptr代替NULL,区分NULL和0,不然会引起重载特性混乱

auto,foreach不多说

lambda表达式,用于匿名函数

11的线程库?

算法:平衡树,堆,快排

我们课内学的平衡树是AVL,保证左右子树高度差不超过1

自己平时喜欢写treap/splay,没用过拓展库里的平衡树,据说很好用,略

堆,课内新学了O(n)建堆的方法,但我自己喜欢用STL的优先队列,其他略

快排习惯用STL的sort,手写快排的话,O(1)额外空间的写法不太好记,我一般都写O(n)额外空间的写法,蠢但好理解

 做过的项目:我寻思不会对django和ssm框架有兴趣,不如问web服务器的细节

实现的功能:

解析POST和GET方法+返回请求的资源页面(使用cgi完成动态交互)+处理几个错误

实现的很简陋,每有一个连接过来,就会fork一个子进程来处理这个连接,连接关闭后进程结束

解析方法,交互,处理错误,我全忘了

两个web框架真的仅限于用过了,一些开发工作?不太好考察?github上是团队项目也不好说

算法题:(Ali好像真的蛮喜欢链表的

1.给定一个数组和一个数,返回两个数组的索引,这两个索引指向的元素之和等于给定的数?

hashmap/手写hash,空间时间都是O(n)。没想到hashmap居然是O(n)的

2.逆序输出单链表

可能有环就快慢指针判环,然后直接递归

3.删除无环单向链表的倒数第n个元素,返回头指针

开个fistr指针先next个100次

开个second指针赋成原链表的表头

一起next,等first指到结尾,就把second的next的指针指向自己的next->next即可

其他内容:

c++的线程池

拥塞控制

编译原理

原文地址:https://www.cnblogs.com/ytytzzz/p/11189215.html