北京旷视科技后台C++面经
1、top命令中的cup利用率
Cpu(s)表示的是 所有用户进程占用整个cpu的平均值,由于每个核心占用的百分比不同,所以按平均值来算比较有参考意义。而%CPU显示的是进程占用一个核的百分比,而不是整个cpu(12核)的百分比,有时候可能大于100,那是因为该进程启用了多线程占用了多个核心,所以有时候我们看该值得时候会超过100%,但不会超过总核数*100。
2、爬虫线程设计
抓取,解析,下载分别是N,1, N,第一个和第三个是IO密集型,第二个是计算密集型的。
3、CPU平均负载率
4、单链表逆置
5、free命令中的 buffer和cache分别表示什么
页高速缓存(cache)是Linux内核实现的一种主要磁盘缓存。它主要用来减少对磁盘的I/O操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理 内存的访问。
buffers是用来缓冲块设备做的,它只记录文件系统的元数据(metadata)以及 tracking in-flight pages,而cached是用来给文件做缓冲。更通俗一点说:buffers主要用来存放目录里面有什么内容,文件的属性以及权限等等。而cached直接用来记忆我们打开过的文件和程序。
6、寄存器是在CPU中的(内存预取是放在那里的)
内存,交换区(虚拟内存),cache, 寄存器,寄存器位于CPU,用于计算
cache是比一般RAM(内存)更加快速的RAM
内存缓冲是放在cache里边的,
7、找到数组中被删除的元素是哪个
8、tcp三次握手、4次挥手
9、服务器断电和断网,客户端是否能够感知,怎样感知
心跳包
10、a1,a2,a3,…,an中每次可以删除1,最后能够剩下那个最小的数是?
11、父进程fork子进程的时候,内存是否也会随之增长
表面看起来fork()创建子进程子进程拷贝了父进程的地址空间其实不然 刚调用完fork()之后,子进程只是拥有一份和父进程相同的页表,其中页表中指向RAM代码段的部分是不会改变的,而指向数据段,堆段,栈段的会在我们将要改变父子进程各自的这部分内容时,才会将要操作的部分进行部分复制
12、一个宿主机可以运行两个操作系统不一样的docker吗?
于运维而言,每个虚拟机是有独立的操作系统内核的,而在一台机器上的容器是共享该机器的操作系统内核的;每一台虚拟机有一个独立的ip地址,这点和物理机没有区别,容器由于使用架构的不同,可能运维人员并不太关心容器自身的ip,例如在k8s平台上运维人员关注的是pord的ip,甚至是service ip基本没有人会去关注容器自身的ip,所以不行。
13、IP地址字典中查找?
14、free和malloc中的内存碎片管理
可以用内存池来解决这个问题。