八股文笔记

1 死锁产生场景?
答:死锁产生四个必要条件:互斥,占有且等待,不可强占,环路等待。工作中遇到场景:1 多把锁上锁顺序构成环路等待,2 遇到while()死循环,3 callback函数未返回。
2 vector底层实现?
答:它是连续线性动态空间,有三个迭代器构成,一个指向头,一个指向尾,还有个指向目前可用的空间尾。当申请空间不足时,它会去其他地方申请一块是原来两倍的buff,并把当前buff也拷贝过去。
3 STL空间配置器?
答:二级配置器。当申请内存小于128bytes,去第二级配置器 memory pool 拿内存,当大于128 bytes 采用第一级配置器malloc拿内存;
4 set底层实现?
答:底层采用RB-Tree实现,关键字的简单集合,每个元素只包含关键字。
5 map,mutimap,unordered_map底层实现?
答:map,mutimap采用RB-Tree,unordered_map采用哈希表。
6 C++多态的实现方式?
答:多态概念:同一函数名字具有多种函数实体,根据实际对象决定调用哪一个函数。继承加虚函数实现多态,静态多态就是函数重写,动态多态父类子类拥有同样的函数,运行期间决定调用哪一个。
7 struct 对齐问题?
答:比如32位的CPU一次能读取4个字节,为了保证效率,结构体以后每个成员偏移地址要求min(四字节,成员本身大小)倍数;结构体总长度要求是min(四字节,最大成员大小)倍数。
8 B树与B+树区别?
答:balance tree,非叶子节点可以拥有很多个子节点,每个节点都存放索引和数据。而B+树 非叶子节点只存储索性,且叶子节点还有指向下一节点的指针。
9 内联函数与宏的异同?
答:都是在编译阶段将代码插入函数中,减少函数调用开销。不同的是内联函数是函数,而宏只是机械替换。
10 如何解决哈希冲突?
答:哈希冲突不同的key算出的地址是一样的。解决冲突办法:线性探测,二次探测,再哈希,拉链法。
11 UDP 和 TCP区别?
答:从头部携带信息剖析他们区别,UDP 头部信息只有8个字节,分别是源地址,目的地址,数据长度,检验和各占两个字节。TCP头部至少需要20个字节,最多60个。分别是:
源地址,目的地址:记录IP;序号:传输字节流编号;确认号:序号+1;首部长:4 * 4位头部值;标志位(6bit):URG紧急指针是否有效,ACK确认号是否有效,PSH是否从缓冲立即读走,RST重连字段,SYN 连接字段,FIN 断连字段,窗口:告知对方自己缓冲还能接受多少数据。
12 为什么握手三次,挥手四次?
答:握手三次让双方确认准备好状态,挥手四次将ACK和FIN分两次发送了,目的确保数据接受完成了。
13 解释超时重传,RTO,RTT?
答:超时重传:长时间未收到确认报文重新发送;RTO:重传间隔,超过一定重传次数停止重传。RTT:发送数据到得到响应的时间间隔。
14 lambda 表达式?
答:在c++11被引入,用来创建临时的匿名可调用对象,以简化代码编写。它一般以[]开始,以{}结束,花括号里面就像函数实体那样。
15 Reactor 和 Proactor的区别?
答:Reactor用于实现同步IO多路分发,注册文件描述符就绪事件,被动处理发送过来的事件。Proactor用于实现异步IO多路分发,注册文件描述符完成事件,主动发起异步调用,然后循环检测完成事件。
16 select,poll,epoll之间的区别?
答:多路复用,阻塞IO,直到有数据可读或可写才真正的调用IO操作。select
监视文件数有限制,一般为1024个;内核/用户空间拷贝开销大;返回的是一组句柄,需要遍历才知道具体哪个文件描述符;水平触发,如果描述符没被处理,下次接收到的值还是回被标记。poll没有监视文件数量的限制,其他三个缺点依然存在。epoll没有select那些缺点。
17 命令模式?
答:发送方向接收方发送命令,实现两者之间解偶。比如:sql语句,开关命名都可以理解为命令模式的应用。
18 http存在的相关安全问题?
答:通信使用明文不加密,信息可能被窃听;不验证对方身份,可能遭遇伪装;无法证明报文完整性,内容可能被篡改。https是披着ssl外壳的http,它采用公钥私钥方式进行加密,通过第三方机构验证对方身份。
19 cookie和session的区别?
答:http是无状态协议,使用cookie来记录管理session(会话),以弥补http不记录状态的缺陷。
20 路由选择算法?
答:静态路由算法(迪杰斯特拉算法,扩散法),动态路由算法(距离向量路由算法,SPF);
21 计数排序,桶排序,基数排序?
答:计数排序:假设排序范围为0~100,那么开辟100个空间,然后将待排序数分别在开辟空间中计录出现次数;桶牌:计数排序升级版,将数据放入有限个范围区间的桶中,然后对每个桶进行排序;基排:桶排升级版,先将个位放入桶中,保证个位有序,然后将十位放入桶中,此时十位有序,一直到最高位,然后依次取桶中数,此时得到的数据是有序的。
22 sql语句?
答:INSERT,DELETE,UPDATE,SELECT增删改查。
23 输入一个URL执行过程?
答:域名解析>发送http请求>建立tcp连接>ip寻址>封装成帧>…>浏览器渲染。
24 递归?
答:明确函数定义,寻找问题与子问题关系。
25 map和unordered_map区别及使用场景?
答:map基于红黑树,存储元素是有序的,复杂度取决于树的高度,很稳定;unordered_map()基于散列表,复杂度取决于散列函数产生冲突多少,大多时间是稳定的。对有序性,操作时间稳定性有要求的场景使用map,其余场景都使用unordered_map。
26 top命令
答:前面五行显示系统整体信息(系统内存,cpu使用),后面显示各进程信息(关注cpu,mem占比,改变NI值可以修改进程优先级)。输入大写字母M按内存使用排序,输入P按CPU使用排序。
27 策略模式
答:定义一组算法,并将算法封装起来,并且使它们之间可以互换(算法互换)。
28 linux线程三种调度方式:
答:1)OTHER,轮询非实时,按时间片调度;2)FIFO 实时,直到有更高优先级才能被抢占;3) RR实时,在FIFO基础上增加了一个时间片。
29 存放一张4k ARBG需要多大内存?
答:31M

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值