https://blog.nowcoder.net/zhuanlan/v0E5P0
http://www.cyc2018.xyz/#%E7%AE%97%E6%B3%95
面经:https://blog.csdn.net/qq_43763344/article/details/104863383
C++
- new和malloc的区别*
new→operator new(size)→malloc(size)->构造函数:https://blog.csdn.net/qq_38646470/article/details/79824464 - 深浅拷贝问题,如何解决,浅拷贝应用场景,深拷贝应用场景。
浅拷贝:写时复制
浅拷贝应用场景:智能指针
深拷贝应用场景:拷贝构造函数 - vector和list的区别,应用场景
vertor顺序存储,随机性好,查询方便,插入删除不方便。
list链式存储,插入删除方便 - map的底层实现,插入和删除的时间复杂度,红黑树的结构构是什么样子的,为什么map用红黑树而不用AVL树或者二叉搜索树
map底层红黑树:插入和删除2和3,查找O(log2),红黑树的五大特征,红黑树是弱平衡二叉查找树、删除、插入和查找都稳定 - C++的异常有哪些,如何捕获
指针指向异常、基类对象强制转换到派生类时引发异常、数组越界异常、
C++异常是以继承的方式展现出来的,exception只是一个抽象类,通过虚函数的方式来进行继承,可以达到C++多态的效果。直接可以使用父类指针或者引用来捕获异常。
try{}catch(exception& bt){bt.what()}
https://blog.csdn.net/weixin_43796685/article/details/104742507 - 哪些类内成员函数可以是虚函数,哪些不能是
不能是虚函数的成员函数有:静态成员函数,内联成员函数,构造函数。
没有什么函数需要硬性规定为虚函数,一般析构函数会被定义为虚函数 - 如何使用C语言实现C++的封装、继承、多态 https://blog.csdn.net/qq_36782456/article/details/71597699
封装:通过struct。数据和操作的封装,操作通过函数指针void (*pf)(int)
继承:通过组合,即A声明为struct B的变量
多态:使用函数指针,A中有一个函数指针,B组合A,B将A的指针指向新的函数,再通过指针调用B的时候就是B的函数了 - STL中经常使用的容器,使用时需要注意哪些地方;
vector :初始化指定大小,不然会引起频繁的内存扩展、erase没有删除内存、全部清空vector().swap(vecNum);vector< bool>出错 - 智能指针用的多吗?智能指针是怎么实现的? weak point怎么实现的
- unique_ptr https://www.cnblogs.com/wxquare/p/4759020.html
- 虚函数了解吗,虚函数指针是在什么时候初始化的(编译)
- 写一个map的删除函数。红黑树删除
- 虚函数
- vector和哪一种数据结构相似,list和哪个数据结构相似
- 使用vector要注意的问题,list和vector的优缺点
- map讲一讲
- vector用过吗?仿函数是什么?迭代器失效原理,为什么会失效?
仿函数:重载了operator() 的实现某种功能的类
仿函数: https://www.cnblogs.com/WPF-342201/p/12976624.html - 在使用容器的时候,如何分配内存空间?
- 浅拷贝和深拷贝,所有的对象都是多个对象使用一个资源吗?深拷贝是一个对象占用一个资源?
浅拷贝问题:如果有指针,进行了浅拷贝,只是多了几个指向本地址的指针,析构的时候对指针进行释放,则会多次释放同意空间。
解决浅拷贝:重载“=”操作符和拷贝赋值函数,https://blog.csdn.net/zanda_/article/details/80151092 - static关键字
- const使用方法及常用的使用场景
- map容器,底层原理,key可以重复吗?
- 二叉树的了解?普通二叉树、AVL树、红黑树
- 进程间的通信方式
- delete和delete[]的区别
- 如何定位内存泄漏?如何定位内存泄漏的代码?
如何定位内存泄漏,用ps和kill ttps://blog.csdn.net/yvhqbat/article/details/51966906
定位内存泄漏代码?:记录申请和释放次数?
操作系统
-
linux下的进程通信方式,线程通信方式:https://worthsen.blog.csdn.net/article/details/78527115?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=1328627.24862.16154678910000155&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
管道:有名和无名
信号量:PV操作
信号:触发机制
消息队列:消息链表、存放在内核中
共享内存:映射同一块地址
socket:不同进程中线程:临界区、互斥量、信号量、信号(事件)
-
进程和线程的区别,使用场景
-
如何使用管道实现双向通信 https://blog.csdn.net/lxj362343/article/details/114401686
-
服务器模型和网络架构:一问一答CS模型、多线程服务器程序、基于事件驱动的服务器模型
https://blog.csdn.net/a236209186/article/details/60959434 -
为什么共享内存时最快的通信方式,共享内存的通信是同步的吗
进程通信的几种方式比较https://worthsen.blog.csdn.net/article/details/78527115?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=1328627.24862.16154678910000155&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control -
如何实现共享内存的同步通信,信号量 while循环
-
上下文切换 https://blog.csdn.net/DLUTBruceZhang/article/details/10062105?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
-
select和epoll的区别,以及应用场景
select可以用于服务器之间的通信和转发,因为会一直有消息,使用链表比建造红黑树和链表快。如果是大量的连接使用epoll会更好 -
epoll的水平触发(level_triggered)和边缘触发(Edge_triggered),如果边缘触发一次没有读完缓冲区,并且缓冲区一直没有满要怎么办,如何将剩下的数据读完
select和poll都是水平触发,epoll两个都支持
使用非阻塞 fd ,read 不会阻塞,read 过程中可以继续去查看 epoll 中的事件。
https://www.cnblogs.com/fchy822/p/8857254.html -
内存泄漏如何检测 https://blog.csdn.net/daaikuaichuan/article/details/80874436
-
智能指针解决了什么问题,shared_ptr 存在什么问题
-
进程调度的方式 非抢占式 和抢占式(优先权原则、短作业优先、时间偏原则)
非抢占式 切换原因:正在执行的进程执行完毕或异常、执行中的进程因提出IO请求而暂停、通信或同步过程中执行了某种操作(wait bloack等)
https://blog.csdn.net/u011774517/article/details/61418550 -
多进程和多线程的区别
-
怎么看进程使用情况–top详情 https://blog.csdn.net/xujiamin0022016/article/details/89072116
-
上下文切换(用户态和内核态)https://blog.csdn.net/dingshuo168/article/details/106198218/
-
线程怎么实现内存共享,会发生什冲突?如果死锁了,怎么解开??如果你用锁怎么实现,系统方面的。
-
Linux 查找指定大小和名字的文件 find -size XG -name na
数据库
-
MySQL的事务是什么,特性有什么
-
数据库的特性和事务,四种隔离机制都是什么
-
mysql的搜索引擎,以及这两中搜索引擎的区别和应用场景
https://www.cnblogs.com/hcfinal/p/10431230.html -
mysql的四种特性,隔离机制,脏读、幻读都是啥
-
mysql的索引底层实现,为什么用B+树实现,而不用B树和查找树
-
mysql中常用的锁结构和应用场景 https://blog.csdn.net/weixin_31342203/article/details/113658247
-
如何处理高并发情况下的mysql情况 https://blog.csdn.net/isoleo/article/details/51516989?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=1328655.11453.16158820620685995&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
分库、分表、分布式
分库分表:由单点分布到多点数据库中,从而降低单点数据库的压力
集群方案:解决DB宕机带来的单点DB不能访问
读写分离:极大限度提高了应用中read数据的速度和并发量、无法解决高写入压力分表:按号段分、按hash取模分、在认证库中保存数据库配置
-
负载均衡
负载均衡(Load Balance),其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行。在负载均衡中可以分为两种方式,硬件方式与软件方式。硬件负载均衡主要是有F5、思科,在软件方式主要包括http重定向、DNS重定向、反向代理、NAT转换等。
负载均衡器:直接作用域交换机 -
MySQL能支持多大的数据量?与表结构有关,表结构简单就能存储更多数据
-
redis数据结构、字符串
-
redis的单线程
-
redis的hash
计算机网络
- TCP的三次握手,为什么要三次握手
两次握手会导致迟来的消息又开启一个线程 - 在浏览器输入一个www.qq.com后,到用户看到的完整界面,发生了什么
DNS协议解析IP、TCP连接、HTTP发送get消息、消息到 传输层、网络层、数据链路层、物理层传输、服务器接收消息、返回html文本、释放tcp连接、浏览浏览器显示html内容 - TCP四次挥手:
- HTTP报文格式是怎么样的,都实现了哪些请求(GET POST)
请求头(请求方法、URL、协议版本)、请求头部(头部字段、值)、空行、请求体
get请求:请求指定页面信息、返回实体主体
post请求:向指定资源提交数据进行处理请求。数据被包含在请求体里面、post可能会导致新的资源的建立和已有资源的修改
put 从客户端向服务器删除指定的页面
https://www.cnblogs.com/weibanggang/p/9454581.html - 对网络安全有多少了解 https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/343664?fr=aladdin
- https 加密算法,https的主要流程 https://www.cnblogs.com/chengdabelief/p/6714052.html
- 网络安全,XSS是什么,DDos是什么。如何解决这些问题
数据结构与算法
-
将一下堆排序和快排序的基本逻辑
堆排序:具有以下性质的完全二叉树:每个结点的值都大于或等于左右孩纸结点的值称为大堆顶。每个结点的值都小于等于左右孩子的值称为小堆顶。https://www.cnblogs.com/chengxiao/p/6129630.html
堆排序的基本思想:将待排序序列构造成一个大堆顶,此时整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余的n-1个元素重新构造成一个堆,这样就会得到n个元素的次小值。如此反复,便能得到一个有序序列了。
步骤一 构造初始堆。将无序序列构造成一个大堆顶(升序采用大堆顶,降序采用小堆顶)
步骤二:将堆顶元素与末尾元素进行交换,使得末尾元素最大。然后继续调整堆,再将堆顶元素与末尾元素交换,得到第二大元素。如此反复进行交换、重建交换。
快排: -
在数组中选择一个基准值(通常为数组第一个)
-
将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边
-
将集装数左右两边的数组,不断重复以上两个过程,直到只有一个元素,即为全部有序
-
在这其中排序算法中,哪些是稳定排序,哪些是不稳定排序,哪些需要额外的空间
稳定的排序算法:冒泡排序、插入排序、归并排序、计数排序
不稳定:希尔排序、选择排序、快速排序、堆排序
额外空间:快速排序(logn)和归并排序O(n) -
红黑树和AVL树的区别
-
快排的时间复杂度,快排中需要注意什么问题
情景题
- 在一个几十G的大文件中,如何快速查找指定的QQ
- Linux在磁盘上中找一个2G的名字为test的文件要如何进行
- 索引算法,动态规划算法了解