后端面试进阶指南目录 https://xiaozhuanlan.com/topic/2167809435
小林coding:https://www.cnblogs.com/xiaolincoding/ 强烈推荐
C++浅拷贝与深拷贝
- 系统默认是浅拷贝,当数据成员没有指针时,其实就是没有内存资源时,浅拷贝是可行的;但有指针时,用浅拷贝会使两个类中的两个指针指向同一个地址,当对象快结束时,会调用两次析构函数,使指针悬空。
- 深拷贝时会把开辟新内存把指针指向的对象也拷贝出来。
A(const A& _A) : size(_A.size){
data = new int[size];
} // 深拷贝
软连接与硬链接
- 硬链接:硬链接与源文件都指向同一个inode,是文件的不同入口,想要删除文件需要把所有硬链接和源文件都删除。对目录不能创建硬链接。
- 软连接:windows的快捷方式就是软连接,软连接是创建个新的inode,存着一个block,block存着源文件路径名,是和源文件不同的文件,文件类型也不同。如果源文件没了,软连接依然存在,只是无法访问源文件。
用nullptr不用NULL
- null在c++中就是无类型的0,而nullptr不是整型类别,也不是指针类型,但能转换成任意指针类型。
从键盘按下字符到它出现在显示器的过程详解 (存疑)
- 键盘被按下后,产生了硬件中断信号。
- 计算机高级中断控制器(IOAPIC)选择CPU处理核心以及软件中断编号,并发送给中断描述符表(IDT)处理。
- 计算机根据IDT选择中断处理函数。
- 处理函数处理并通知端口驱动获取按键的信息。
- 端口驱动将数据封装,以IRP(I/O request package)形式传递给上层处理程序。
- 等待输入的进程获得数据,处理并交给目标进程。
- 目标进程显示输入。
另个解释:https://blog.csdn.net/bingjing12345/article/details/7830710
TCP 和 HTTP 中的 KeepAlive 机制总结:
https://xie.infoq.cn/article/398b82c2b4300f928108ac605
SEND和RECV优缺点
如果 SYN 半连接队列已满,只能丢弃连接吗?
https://www.cnblogs.com/xiaolincoding/p/12995358.html
这里给出几种防御 SYN 攻击的方法:
- 增大半连接队列;
- 开启 tcp_syncookies 功能
- 减少 SYN+ACK 重传次数:加快处于 SYN_REVC 状态的 TCP 连接断开。
InnoDB与MyISAM有哪些区别呢?
https://blog.csdn.net/qq_41453285/article/details/107813140
如何用通俗易懂的话来解释非对称加密?
联合索引
https://segmentfault.com/a/1190000015416513
Utf8编码
话说进程和线程
https://www.bilibili.com/video/BV1H541187UH?from=search&seid=692598712846930104
https://www.bilibili.com/video/BV1KD4y1U7Rr?from=search&seid=7668303275125709327
进程:进程控制块pcb pcb有个指针,存储当前进程页目录的物理地址,页目录里存着指针,指向页表,页表存储着物理内存页的起始地址。两级页表可以寻址1024*1024*4KB = 4GB 内存空间大小。线性地址32位,10位是在页目录中选择一个页表,10位在页表中选择一个物理内存页,12位是物理内存页的偏移量。
进程先向操作系统申请内存地址,linux中通过进程对应的task_struct找到记录内存分配的链表,每个链表记录该进程已经分配的一段连续内存地址空间。但真正进行映射要到进程访问这段内存时才会进行。Cup中的内存管理单元(MMU)负责线性地址到物理地址转换,该进程页目录的物理地址会保存到特定的寄存器,cup会把已经转换的地址关系存放在TLB中,需要转换地址时先去tlb查找,找不到去查页表写入tlb。切换进程时,页目录地址会改变,之前的TLB缓存会失效需要重新查询页表,这也是进程切换代价比较高的一个重要原因。
而线程共享进程的虚拟地址空间,tlb缓存不会失效。
进程拥有的资源包括:内存空间中的代码、数据等;I/O 资源;文件;处理机等。
线程资源:线程控制块tcb
为何引入进程:为了程序的并发执行
四个范式
Mysql的MyISAM与innoDB
- Innodb是数据和索引不分离的,myisam是索引存放的是数据的地址。
- Innodb要有主键,sam可以没有。
- Innodb有行级锁,支持事务,支持外键
- Myisam优点是存储空间更大,支持全文索引。
面向报文(udp)面向字节流(TCP)
- 面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片,降低效率。若太短,会是IP太小。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这也就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。 DNS 视频面试
- 面向字节流的话,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送。如果应用程序一次只发送一个字节,TCP也可以等待积累有足够多的字节后再构成报文段发送出去。 文件传输
Redo log的机制
https://www.jianshu.com/p/336e4995b9b8
分布式储存的哈希一致性:
https://segmentfault.com/a/1190000021199728
分布式存储的一致性 两段提交:
https://segmentfault.com/a/1190000012534071
一篇文章讲透分布式存储
https://zhuanlan.zhihu.com/p/55964292
什么时候使用指针?什么时候使用引用?什么时候应该按值传递?
https://blog.csdn.net/hbtj_1216/article/details/56843014
通过虚函数表调用虚函数与通过虚函数表(绕过访问权限控制)
https://blog.csdn.net/iicy266/article/details/11906807