5.21 一面
自我介绍后没聊项目,直接问基础知识,答案为查询资料后复盘。
操作系统
Q:Linux中输入echo命令发生了什么?
A:shell命令分为内建命令和外部命令。内建命令是shell解释程序内建的,直接调用函数执行,不需要派生新的进程。外部命令分为二进制代码或shell脚本,会通过fork调用创建一个新的进程来执行命令,默认shell会等待直到该进程结束。其中二进制命令会调用exec系列函数执行,取代子shell,脚本会在子shell中运行。echo是内建命令,会被shell直接执行。(面试官说从进程角度讲,应该是想问外部命令)
Q:父进程fork()创建子进程?
A:fork()函数通过系统调用创建一个和父进程几乎完全相同的子进程,系统先给新进程分配资源,然后将父进程的所有值复制到新进程中,相当于克隆了一个进程。fork()在父子进程中均有返回值,父进程中返回子进程的进程ID,子进程中fork返回0,如果发生错误fork返回一个负值。
Q:僵尸进程与孤儿进程?
A:如果子进程结束后,父进程没有调用wait或waitpid获取子进程的结束状态,那么子进程的进程描述符就任会存在与系统中,这种进程就是僵尸进程。如果父进程在子进程结束之前就先结束了,那么子进程就会成为孤儿进程,被init(1号)进程所收养,进行孤儿进程的状态收集。
Q:进程的地址空间分配?
A:在32位linux内核地址空间中,0~3G为用户空间,3~4G为内核空间。用户空间从低地址到高地址依次为程序段、初始化数据、未初始化数据、堆、共享库、栈。
Q:堆和栈的特点?
A:堆存储动态内存分配,需要程序员手动分配与释放,会有内存碎片,以链表的方式连接可用内存空间。存储局部、临时变量、函数的返回指针,控制函数的调用的返回,栈的分配与释放由编译器自动完成,类似于数据结构中的栈,不会产生内存碎片,效率比堆要高。
还问了一些其他的,但不太记得了。
计算机网络
Q:从输入url到显示网页的过程?
Q:经历了七层网络架构中的哪几层?
A:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
Q:ARP协议?
Q:HTTP与HTTPS协议的区别?为什么需要HTTPS?
A:HTTP以明文的方式进行信息的传输,且不会验证对方的身份,是非常不安全的。HTTP适用了SSL/TLS协议对信息进行加密处理。HTTP默认端口是80,HTTPS是443。HTTPS响应速度更慢,更耗费服务器资源。
Q:HTTPS比HTTP多几次数据传输?
A:多四次数据传输。处理三次握手外还要进行SSL连接。1.首先客户端向服务端发送Client Hello,包含客户端的协议版本、支持的加密算法、压缩算法、生成的随机数等。2.客户端向服务器端发送加密方法、协议版本、证书信息、公钥等。3.客户端验证服务器端并发送经过公钥加密后的随机字符串。4.服务器端确认加密传输并完成SSL握手
Q:流量控制和拥塞控制?
Q:慢启动属于什么控制?如果没有慢启动会怎样?
数据库
Q:MySQL如何进行范围查询?
Q:select * from t where b = "aa" 和 select id from t where b = "aa" 索引使用上有什么区别?(id为主键索引,b为普通索引)
算法
Q:查找无序数组中的中位数?
Q:排序算法有哪些?对应复杂度?
A:冒泡排序、插入排序、选择排序为O(n2),希尔排序的复杂度与步长选取有关,使用二次幂为O(n1.5),快速排序、归并排序为O(nlogn),计数排序、桶排序为O(n+k),基数排序为O(nk),k为桶的大小。
Q:影响快排效率的因素与解决方法?
Q:什么样的数据分布不适合用快排?
Q:实际应用场景中如果数据量非常大的情况下使用什么排序算法?
A:快排是目前实际最常应用的排序算法,常数因子小,速度较快。
Q:不同的排序算法适用哪些不同的场景?
A:在数据量比较小的时候适合用插入排序、选择排序,数据量比较大的时候适合用快排,如果需要排序后的稳定性可以用归并排序,快排和归并排序递归到一定深度后可直接使用插入排序。堆排序不需要递归和额外的存储空间,适合数据量非常大的场合。
Q:手撕代码:带有next和rand指针链表的深拷贝
5.25 二面
Q:TCP Nagle算法?
A:如果包长度达到MMS,则允许发送;如果包含FIN,则允许发送;如果设置了TCP_NODELAY,则允许发送;若发送出去的小数据包(小于MMS)均被确认,则允许发送;发生了超时(一般为200ms),则立即发送。
Q:如何解决粘包?
A:禁用Nagle算法;使用PUSH标志;自定协议分为封包和解包两个过程,增加包头包含数据的大小信息。
Q:CLOSE_WAIT状态过多的原因及解决办法?
Q:Cache替换策略?
A:LRU把访问时间最旧的替换;MRU把访问时间最新的淘汰,适用于循环访问模式;LFU按访问频次替换;FIFO先进先出
Q:MySQL缓冲池污染及解决?
A:当一个SQL语句要批量扫描大量数据时,可能导致把缓冲区中的所有页都替换出去,导致大量热数据被换出,MySQL性能急剧下降,这种情况较缓存池污染。为了解决该问题,MySQL将LRU链表分为新生代和老生代,他们首尾相连,新加入缓存的数据会被插入到老生代的头部,只有该数据被访问过,且在缓存中停留了一定的阈值时间后,才会被移动到新生代头部。
Q:进程上下文切换的开销?
A:切换虚拟地址空间、切换CPU上下文、切换内核栈
Q:函数调用时是如何压栈的?
A:先将参数从右至左压栈,然后压入函数的返回地址,再压入上一栈帧中的EBP基址指针,之后压入被调函数中的局部变量和临时变量。
Q:write(fd, "1234")函数的调用过程?
A:操作系统查找页缓存,若未命中,则产生缺页异常,然后创建页缓存,将对应内容从磁盘写入页缓存。若命中则将用户传入的内容写入页缓存。页被修改后成为脏页,操作系统有两种机制将脏页写入磁盘,一是用户手动调用fsync(),二是由pdflush进程定时将脏页写会磁盘。
5.27 三面
Q:讲一个项目
Q:写一个SQL:读者借书打标签,简单设计一下表结构,查询一本书被打最多的前10个标签
Q:做一道题(困难题,gg)
6.3 一面
Q:讲一个项目
Q:如果要应用到其他领域怎么样?你负责的具体内容?你觉得项目有哪些难点?考虑过实际应用吗?(项目相关)
Q:C++程序编译运行的存储空间管理?
Q:堆和栈的区别?
Q:C++中堆的分配与删除产生的碎片化问题怎么解决?
Q:Hashmap实现原理?查询复杂度?
Q:死锁的产生条件?
Q:进程的状态?
Q:线程的状态,与进程的区别?
Q:OSI七层协议和TCP/IP四层协议?
Q:输入网址后发生了什么?
Q:HTTP报文的格式?
A:请求行(响应行),请求头部(响应头部),空白行,请求体(响应数据)
Q:HTTP状态码?
Q:数据库索引类型及对应优缺点?
Q:【智力题】1000瓶酒,一瓶有毒,10只老鼠,喝毒酒后七天发作,如何在第八天前找出毒酒?
A:给酒编号后,每一瓶酒可以对应一个10位二进制数,让对应位为1的老鼠喝该酒,最后可以根据死的老鼠确定为1的位置,得到酒的编号。
Q:【算法题】两个已排序数组(从小到大)的第k小元素.数组分别记为A(长度m)和B(长度n),