-
项目。问的比较详细,如何调试的
-
C++新内容:
-
智能指针:三个指针大概的说了一下添加链接描述
-
unique_ptr相较于shared_ptr有什么优势?这个当时没答上来,只是说独占资源。
-
weak_ptr是怎么用的,说了use_account可以观测计数,然后weak_ptr可以调用lock函数获取一个shared_ptr对象,从而操作这个资源。
-
问C++11除了智能指针还有什么新特性,我说右值引用,其实还有auto类型以及lambda表达式。
-
一个类当中的各个变量,分别存储在什么位置:有初始值的变量(成员变量或者全局变量)——在堆里,对象本身在堆里或常量池中,没有初始值的变量(形参)——在栈中,类的静态变量——在方法区,new出来的——在自由存储区,这个可以是堆也可以是静态存储区
-
虚函数表存在常量区中,虚函数本身在代码段
-
malloc/free分配的空间除了在堆里面还可以在别的地方么?不知道
-
计算机网络:
-
TCP和UDP的区别;为什么UDP快;1.现在光纤传输丢包率本身低;2.TCP头部大,且为了可靠性需要连接以及一系列的机制,丢包的时候需要缓存和重传;3.UDP自定义重传,有包就发,而TCP要按序接收。
-
TCP粘包问题:多个数据包被连续存储于连续的缓存中,在对数据包进行读取时由于无法确定发生方的发送边界;回想nagle算法为了避免糊涂窗口,需要等一个大包再发。 处理方式: 1.每次发固定长的包 2.在包末尾加界定符(注意要对这些字符本身做转码或者转移操作避免误结束)。3.包头+包体:包头定长,含有一个字段描述接下来的包有多大。用总长度减去固定包头长度即可得到数据长度。
-
进程的相关问题,进程间的通信:不会
-
代码题:简单二分查找
-
https://leetcode-cn.com/problems/koko-eating-bananas/
附加:
同门的面试题:
-
用户态和内核态以及如何从用户态转内核态:一般的操作系统对执行权限进行分级,分别为用户态和内核态。内核态相当于一个介于硬件与应用之间的层,内核有ring 0的权限,可以执行任何cpu指令,也可以引用任何内存地址,包括外围设备, 例如硬盘, 网卡,权限等级最高。用户态则权利有限,例如在内存分配中,有一部分内存是仅为内核态使用的,用户态code则不允许访问那些内存地址,每个进程只允许访问自己申请到的内存。而且不允许访问外围设备。另外在执行cpu指令的时候也可以被高优先级抢占。状态转换:1.系统调用:这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使 用操作系统提供的服务程序完成工作,具体方式与中断类似:以fork为例,fork的系统调用号是2,就把2放到eax里,然后int 0x80软中断调用处理函数,在中断向量表中查找90找到对应的中断处理程序,然后调用系统调用表,查表2执行系统调用,执行完了返回用户态。 2.异常:出错,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。3:外围设备中断(硬中断) 外设请求CPU响应中断信号,执行中断处理程序,自然发生用户态到内核态的切换。
-
线程与进程之间的区别 ,见我博客添加链接描述
:进程是资源分配的基本单位,而线程是CPU调度的基本单位。
2.1地址空间:线程共享一个进程的地址空间,而进程之间是独立的;
2.2资源:线程共享进程的资源(代码数据空间,CP