《网络》
在浏览器中输入url,回车发生了什么
DNS的分级查找
3次握手都发送了什么数据包
设计路由表查找算法,满足最长匹配,(前缀树,根据需求不同设计4层的或32层的)
硬链接、符号链接的区别
如何处理粘包
ARP协议介绍,ARP表建立的过程
五层网络模型介绍一下,同时介绍一下每一层有哪些协议
http协议,connection选项的作用
IO模型有哪些
用的最多的应该算IO多路复用模型,讲讲它的优缺点
条件变量应用场景
ARP协议是干什么的,属于哪一层
阻塞与非阻塞,IO模型
http长连接短连接说一下
路由器是哪一层的,有什么功能,路由寻址怎么找的,路由表存了什么
ping协议会发生什么事情(当时以为问ICMP,结果下面引导到了dns)
dns协议,让后udp还是tcp
http response里面都有哪些内容(大概说了一部分)
B 树的特点,B 树与B树的区别
get/post 区别
HTTP 怎么建立连接
计算机开机后如何让这台机器联网,说一下mac地址找IP,然后ping测试
了解DHCP协议么
http的报文格式 ,说几个头部
http和https的区别? https加密实现?
错误的状态码
状态码 502是什么?
HTTP协议有状态吗?
cookie和session的作用和工作方式说一下。
HTTPS加密流程说一下,证书是怎么工作的
- TCP报文组成
https://zhuanlan.zhihu.com/p/130209221 - TCP为什么要进行握手 三次握手,四次挥手,TIME_WAIT状态的作用,时长为什么是2MSL,建立连接的时候只握手两次会有什么问题。
https://zhuanlan.zhihu.com/p/86426969 - 服务器大量处于TIME_WAIT状态,可能的原因,造成什么影响,怎么解决那大量处于close_wait呢
https://zhuanlan.zhihu.com/p/152120241 - TCP已经有了保活为什么还要有心跳包 , TCP长连接(Keepalive) https://www.cnblogs.com/fengbohello/p/4250177.html
- TCP为什么可靠
https://zhuanlan.zhihu.com/p/130730913
syn中的序号是固定的吗?这个序号的最大值是多少
socket编程的常见流程,accept调用什么时候会阻塞。 - backlog的作用,编程中应该设置为多大
https://blog.csdn.net/chenmo187J3X1/article/details/90573748 - syn队列和accept队列 那listen函数的backlog参数是什么意思
https://zhuanlan.zhihu.com/p/87437843
syn_cookie原理 - TCP UDP区别,介绍一下拥塞控制,丢包时为什么阈值会减半
https://zhuanlan.zhihu.com/p/76023663
tcp和udp可以绑定到同一个端口吗?如何实现
socket编程的流程,accept调用和三次握手的关系,accept什么时候会阻塞,accept队列是由谁维护的 - TCP拥塞控制
https://zhuanlan.zhihu.com/p/97709686
TCP了解多少,那什么时候会收到RST报文段,四次挥手 - 有哪些协议是基于 TCP 的,哪些是基于 UDP 的
TCP:HTTP,FTP,SMTP,TENET,
UDP:BOOTP,DHCP,NTP,TFTP,SNMP
DNS可以基于TCP,也可以基于UDP
- IP分片的危害?
https://www.cnblogs.com/glacierh/p/3653442.html - 为什么选择 IP 层负责分片(因为网络层几乎只有IP协议,更纯粹效率高)
https://www.zhihu.com/question/22181709 - TCP滑动窗口
https://zhuanlan.zhihu.com/p/60893857
三次握手过程中有哪些不安全性
udp报文什么时候乱序,为社么乱序
可不可以三次挥手(可以,server不发包的时候给一条FIN=1的ACK)?
三次握手期间除了建立连接,还有互相交换什么信息?(窗口大小)
Tcp四次挥手,为什么要有Time-Wait的两个往返时间?如果有大量的Time-Wait会占用哪些资源?最应该的care的资源是什么?(端口号)
tcp四次挥手过程?最后为什么等待2msls,TCP的TIME_WAIT出现在哪一端?作用是什么?
《C++基础》
- 哈夫曼树原理
- 哈夫曼编码
- C++4个cast的区别
- 智能指针用处
- 智能指针sharedptr和weakptr
- shared_ptr 线程安全(不安全),仅仅是引用计数(线程安全)如何实现的,原子操作的原理
- STL 迭代器什么情况下会失效,各个容器都说一下
- 虚继承的实现原理,多态的实现原理,编译器是怎么使用虚继承解决菱形继承的问题的
- 动态数组如何实现?给他介绍了一下vector的实现。为什么扩容时是2倍。
- 没有连续空间如何实现?给他介绍了一下deque的实现。
- 数据结构堆
- 什么函数可以被声明为虚函数(不能的有静态函数、构造函数、友元函数、普通函数、内敛函数)
- 析构函数可以抛出异常吗
析构函数中不建议抛出异常,这是因为析构函数的调用表示一个对象的销毁(包括对象所占有的资源的释放),如果此时抛出异常,对象将游离在内存之中,对象所占用的资源也将得不到释放
- 析构函数什么时候需要被定义为虚函数
- 成员初始化列表概念,可以在成员初始化列表中初始化父类成员吗?为什么(重复初始化了)
- vector resize和reserve
- 什么是内存泄漏,如何发现,内存泄漏怎么调试,valgrind怎么用
https://zhuanlan.zhihu.com/p/235495167
https://zhuanlan.zhihu.com/p/111556601 - 如何调试多线程程序(主要靠打印日志)
- malloc和new的区别,free和delete。new一定会用到malloc吗?重载operator new
https://blog.csdn.net/nie19940803/article/details/76358673
https://blog.csdn.net/u014303647/article/details/80328317 - 野指针的产生,危害,段错误怎么发生的?使用悬空指针一定会段错误吗?什么时候会,什么时候不会
段错误:当程序试图访问不允许访问的内存位置
https://blog.csdn.net/ybhuangfugui/article/details/106435406
https://blog.csdn.net/qq_40927789/article/details/80686723 -
多线程单线程区别,多线程一定比单线程快吗?
服务器程序阻塞IO怎么设计?知道早期Apache怎么做的吗? - static关键字
- sizeof,#progma pack(1) 作用 , struct内存对齐
- C++内存模型,常量存储区,静态变量和全局变量
- map用find和[]的区别
- 函数对象或仿函数
- auto怎么实现
- 讲一讲this指针
- unique_ptr怎么实现,独占,数组等
- 在main函数中定义了a和b两个int变量,调用sum函数求其和,说一下其压栈过程
- 虚函数调用和普通函数调用,效率谁快
- 数组和链表的区别
区别一:物理地址存储的连续性
数组的元素在内存中是连续存放的。
链表的元素在内存中不一定是连续存放的,通常是不连续的。
区别二:访问速度
数组的访问速度很快,因为数组可以根据数组可以根据下标进行快速定位。
链表的访问速度较慢,因为链表访问元素需要移动指针。
区别三:添加、删减元素速度
数组的元素增删速度较慢,因为需要移动大量的元素。
链表的元素增删速度较快,因为只需要修改指针即可。
#include
包含文件的时候,尖括号和双引号有什么区别,如果双引号中是库文件的话,会发生什么
#include <>
格式:引用标准库头文件,编译器从标准库目录开始搜索
#incluce ""
格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索
- C++中struct和class当作类使用时的区别
- STL中map和unordered_map的应用场景区别
- 看过STL源码吗说一说map的实现,红黑树的介绍
- C++与python有什么区别
- C++11里面auto有什么用,不给初始值可以吗(不可以)
- volatile有什么用(但在c++中多线程未必有用)
-
const和#define的区别
堆和栈的区别
懒汉式和饿汉式模式有什么不好之处
那map的插入效率是多少呢
基于比较的查找,最好的性能上logn,还有什么查找能突破这个限制
排序算法里面最好的性能上nlogn,能突破这个限制吗 - 构造函数中是否能抛出异常(可能内存泄漏)
https://zhuanlan.zhihu.com/p/137374314 - inline内联函数是否可以递归(可以但是没用了)
https://blog.csdn.net/zuoside__lord/article/details/80354223 - 内敛函数和宏的区别
1、内联函数在编译时展开,而宏在预编译时展开
2、在编译时,内联函数直接被嵌入到目标代码中去,宏只是一个简单文本替换。
3、内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,
5、宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性。
说说哈希表的实现方式以及怎么解决哈希冲突
https://zhuanlan.zhihu.com/p/45430524
https://zhuanlan.zhihu.com/p/95984718C++11了解多少
nullptr, auto, 范围for循环, 初始化列表,尖括号>, Lambda 表达式
https://blog.csdn.net/jiange_zh/article/details/79356417
- 左值右值的区别
左值:有名字的变量(对象),可以被赋值,可以在多条语句中使用。
右值:没有名字的临时变量(对象),不能被赋值,只能在一条语句中出现。
https://blog.csdn.net/weixin_36691991/article/details/88623482
- 内存4G,malloc申请4.1G会发生什么 (不行)
OS给每个进程理论上都’分配’了2^32B的空间(逻辑空间),这个逻辑空间的大小与实际内存大小和外存大小都没有关系,只由计算机的地址结构决定(也即是CPU地址寄存器的位数)
- 内存4G,已经有其他进程申请了2.5G了,此时malloc申请4G,会发生什么(可以)
https://www.cnblogs.com/clover-toeic/p/3754433.html - 聊一聊C++debug模式的和release模式
https://www.cnblogs.com/yymn/p/4454438.html - 通过内存越界修改其他作用域中的变量
char buffer[32] = "quantum6";
buffer[33] = 0x01;
buffer[34] = 0x00;
buffer[35] = 0x00;
buffer[36] = 0x00;
int* p = nullptr;
p = (int*)&buffer[33];
- extern作用,在函数内可以使用么(不行)
对变量而言,如果你想在本源文件中使用另一个源文件的变量(注意:此时这个变量应该是全局变量,定义它的位置是在所有函数之外),就需要在使用前用extern声明该变量,或者在头文件中用extern声明该变量;
对函数而言,如果你想在本源文件中使用另一个源文件的函数(注意:此时这个函数应该是全局函数,定义它的位置是在所有函数之外),就需要在使用前用声明该函数,声明函数加不加extern都没关系,所以在头文件中函数可以不用加extern。
- extern int a 不需要建立存储空间,其中 变量a是在别的文件中定义的。
- 个人习惯提高代码可读性, 头文件中用extern,因为头文件不能定义一个变量
- 头文件为什么不能定义变量
注意:但类的定义,和const变量, inline函数实体可以在头文件定义
https://www.cnblogs.com/xxiaoye/p/3956847.html
- vector迭代器作用
模板使得算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型。
- 动态库和静态库,运行时不想加载某个动态库的内容怎么办
https://zhuanlan.zhihu.com/p/242471856 - 动态库的静态/动态链接,动态库和静态库区别,如何再运行时调用动态库
注意动态库中的.lib文件叫导入库和静态库.lib完全不同
https://blog.csdn.net/qq_25408423/article/details/81289823?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242
c++多线程的通信(全局变量(互斥量)和条件量)
https://blog.csdn.net/qq_28234213/article/details/75000342new和malloc分配内存出错时的状态
new 失败是抛出异常的,malloc返回一个NULL指针.
- 堆栈溢出的原因
1.函数调用层次太深。函数递归调用时,系统要在栈中不断保存函数调用时的现场和产生的变量,如果递归调用太深,就会造成栈溢出,这时递归无法返回。再有,当函数调用层次过深时也可能导致栈无法容纳这些调用的返回地址而造成栈溢出。
2.动态申请空间使用之后没有释放。由于C语言中没有垃圾资源自动回收机制,因此,需要程序主动释放已经不再使用的动态地址空间。申请的动态空间使用的是堆空间,动态空间使用不会造成堆溢出。
3.数组访问越界。C语言没有提供数组下标越界检查,如果在程序中出现数组下标访问超出数组范围,在运行过程中可能会内存访问错误。
4.指针非法访问。指针保存了一个非法的地址,通过这样的指针访问所指向的地址时会产生内存访问错误。
extrern c作用,底层原因
https://www.cnblogs.com/xiangtingshen/p/10980055.html三种成员函数的调用方式
//www.greatytc.com/p/5ad194a0e1cfb+树的特点 B+树和普通的B树和用平衡树有什么区别?为什么不用后两种树。
https://zhuanlan.zhihu.com/p/130482609C++函数指针的概念和作用。
//www.greatytc.com/p/4c0c5de30ee5简述BST树、AVL树、红黑树、字典树,及其应用场景
https://www.zhihu.com/question/30527705/answer/1663740519一次性哈希有了解过吗?
一致性哈希和普通哈希有什么区别?
https://zhuanlan.zhihu.com/p/158869817
https://www.sohu.com/a/239283928_463994C++中,一个空的类对象占多少字节,如果里面有一个char,一个int,一个虚函数,占多少字节。
空类占1个字节,因为对象是有地址的 (占位符),这个地址里边保存的是1个字节才能去地址。
后面的占4+4+4 = 12字节, 因为类也内存对齐
C++菱形继承是怎么解决的,什么情况下菱形继承会出现问题。
1.二义性 2.数据的冗余
https://blog.csdn.net/sssssuuuuu666/article/details/75736954
《操作系统》
- 乐观锁和悲观锁
https://zhuanlan.zhihu.com/p/40211594 - 银行家算法避免死锁
https://zhuanlan.zhihu.com/p/47861673
select poll epoll 区别以及各自的应用场景 - 什么是select poll epoll
https://zhuanlan.zhihu.com/p/129089001 - 生产者消费者模型linux系统代码
https://blog.csdn.net/lvxin15353715790/article/details/89143121
页面置换算法
虚拟内存是什么和存在的意义?
死锁是什么?和如何解决死锁问题?
select poll epoll(讲了区别,epoll底层数据结构,ET、LT)
解释一下内存池的概念
- Linux IO模型,哪些属于同步IO,哪些属于异步IO
五种IO模型包括:阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO。
https://zhuanlan.zhihu.com/p/115912936
epoll的底层实现,红黑树了解多少
进程和线程的区别
进程虚拟地址空间,mmap映射和动态链接库在哪个位置
fork,vfork,clone的关系,clone是为了创建线程的吗?
调用malloc时会立即分配物理内存吗?页表中一定会对应物理页框吗?swap交换空间
linux中基本的操作命令,一个日志文件很大,vim打开很费时间,怎么快速搜索某个内容
查看端口号情况
查看进程id、内存使用情况等
查看打开的文件or描述符
常用哪些linux命令,查看线程用哪个命令,会用vim吗
epoll的机制,什么时候用ET
怎么查看端口号占用情况
有一个日志文件,里面每一行都有ip、time、context等信息,怎么查询某个ip有多少个
线程安全队列该怎么实现,说了一下生产者消费者模型
如果不用锁怎么实现,说的自旋锁忙等待
调用fork,发生了些什么事情
32位机器,一个程序可以用的内存有多少
shell脚本了解吗
互斥锁会有一些性能开销,不想用怎么办
什么时候会发生死锁在代码实现上怎么解决死锁呢
有些线程处于死锁状态了,怎么在另一个线程中检测出来
那一个线程可以访问另一个线程的线程栈吗,会发生什么
链表了解吗,跳表呢
进程虚拟地址空间划分,分别存储什么
线程栈通常是多少
协程了解吗
死锁(死锁条件、避免死锁、死锁检测、死锁预防)
僵尸进程?僵尸进程和孤儿进程区别是什么?孤儿进程如何善终?进程的状态(逻辑状态和ps指令看到的状态分别回答)
虚拟内存是什么用途,如何实现
讲一下共享内存的实现。
父子进程间共享哪些资源。
多线程之间共享哪些资源。
缓存机制有了解吗?缓存的替换策略有哪些,说一下。
缺页中断是什么?
换页算法有哪些?
fork函数介绍一下,怎么用?fork的时候内存是怎么变化的?
epoll的边缘触发和水平触发了解吗?分别说一下特点和区别。
阻塞队列具体是怎么实现的,怎么优化它。(锁的粒度以及不空的时候读不加锁)
进程虚拟地址空间布局
进程间通讯的方式
进程调度算法
进程间通信机制
了解共享内存吗(说了下虚拟页面到物理页帧的映射),后问如果这两个进程都终止了,共享内存还在吗
互斥锁和读写锁有什么区别
自旋锁是什么,怎么实现的
低地址到高地址说一下进程的虚拟地址空间
共享库的映射区是做什么的,讲了下mmap映射到文件对象,设置为有效位无效,访问时再按需调页
进程虚拟地址空间分布
linux中CPU调度怎么做的
操作系统内存分配与释放
这个进程队列是什么队列
进程状态都有哪些,怎么转换
说一下进程线程,fork和vfork
fork时内存空间发生了哪些变化
设计一个内存池,满足内存申请、内存释放以及内存碎片管理等基本功能
作业调度的几种方式。
负载均衡的算法你了解哪些?项目中的负载均衡是怎么实现的。
进程间通讯的方式,未命名管道和命名管道的区别
《数据库》
- 数据库基础
http://datawhale.club/c/team-learning/IntroductionToSQL/13
mysql中innodb和myisam的区别,行锁的实现原理
redis可以做什么,mysql buffer pool 可以做缓存吗?
mysql join有哪些,笛卡尔积
如何优化一条sql的查询语句
msyql有哪些索引
说一下数据库索引,然后说一下索引的优缺点
redis都有哪些数据类型
索引的使用条件 优化 最左原则
sql语句查询每个班级的平均分,查询班级平均分 排名前三的班。
覆盖索引了解吗?
单列索引,如果查询的字段不是主键,一定会搜索两次吗?
事务的隔离界别,说一下幻读
文件里面 两亿个数,找到最大100个的
系统的文件日志,几千万条,怎么找出出现最多的ip地址。
mysql有哪些引擎,优劣。备份怎么实现。
主键索引和普通索引有什么区别。
查询慢怎么优化。
mysql中索引为什么会增加查询速度,索引的内部怎么实现?
《手撕代码》
- 算法题:最长不重复子串
- 实现strcpy
实现快排
实现非递归后序遍历二叉树
归并排序的过程 - 实现pow,最佳的时间复杂度是多少
- 给定a=1,b=2,不给定其他变量,怎么交换它们俩的值
算法题:根据前序遍历序列和中序遍历序列求出后续遍历序列
算法题:strcmp - 算法题:二分查找firstK
算法题:给定一个BST,和一个Key,删除这棵BST中Key所在的节点
二分查找复杂度是多少,实现一下最基本的二分查找,更改一下题目,做一下变种题(12345 变为 45123) - 反转链表
- topk问题说思路、时间复杂度
拓扑排序
链表的归并排序
约瑟夫环 - 合并两个有序链表
手写memmove函数
手写一个socket客户端和服务端。
手写4条sql(like,in,or,between)
lunux awk命令,文件排序命令 - 手写一个泛型函数。
手撕代码:实现一个LRU缓存机制,按照访问频率保存,要求存储和读取时间为O(1);
代码题:单链表判断是否有环?若有环如何判断环的入口。
记录了10T的请求记录,找出前100个高频访问用户。 - 如何判断二叉树是二叉搜索树(中序遍历判断是否比前一个大)
- 单链表如何排序,时间复杂度,怎么推导的
https://blog.csdn.net/qq_38790716/article/details/101193694 - 写一个函数,判断是否是质数
https://blog.csdn.net/weixin_33971205/article/details/94138357?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5.control&dist_request_id=01a3c774-1f45-4042-a0e9-bc7e447520f6&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5.control - 三数之和
- 最长公共字符串长度 最长公共序列长度
最长公共子串和最长公共子序列GodSunshine的博客-CSDN博客最长公共子串 - 手写单例模式
-
三角形数组路径最大和
120. 三角形最小路径和 - 力扣(LeetCode) (leetcode-cn.com) - 中位数
- 打家劫舍
leetcode-note/动态规划.md at master · liuwentao1992/leetcode-note (github.com)