这里记录一些网上面经中的面试常用问题以及解决方法
以下问题的答案仅代表本人个人观点。
-
指针和引用
答:具体详见:指针和引用
-
const 关键字的含义及作用
答:具体详见:const及作用
-
虚函数,虚函数表,虚函数表是共用的吗
-
malloc 和 new 的区别
答:详见,malloc和new的区别
-
说一下虚函数表,为什么析构函数是虚函数,不这样会怎么样
-
虚函数和纯虚函数有什么区别,分贝应用在哪些场合
-
虚继承,多继承
-
子类析构会不会调用父类的析构函数,执行顺序是什么
-
string 的 length 和 size 一样吗
-
string 是怎么增长的
-
面向对象三大特性
-
手写一个 string_to_float
-
迭代器失效,map 和 vector 遍历时怎么解决失效
-
代码在内存中的分布区域有哪些,宏定义在哪个区域,堆栈的区别
-
程序的内存分布
-
多态和重载是什么
-
现在 C++ 发行到了哪个版本,c++11 有哪些新特性
-
STL 中的 map 和 unordered_map 的复杂度和区别
-
给 1 亿个数求字典序第 k 大(字典树)
-
链表拆分,翻转,合并
-
手写二分查找和简单的二维数组搜索
-
二叉树转单链表(前序遍历)
-
旋转数组查找
答:剑指offer原题,旋转数组的最小数字
-
堆排序,画图并说明过程
-
求后面第一个比当前数大的数(用栈),leetcode 原题
-
数组量量元素异或,求异或最大值(01 字典树)
-
快速排序,希尔排序和快速排序的区别,快排什么情况下复杂度最高
-
8 个球找重量不一样的怎么称
-
n 个有序链表,合成一个
-
字符串 A,B ,在 A 中删除 B 中出现过的字符
-
用 shell 或 c++ 实现,对于一个文件,取出带 A 关键字的行的最后一个字符串,统计重复度。
-
整数数组
A[n]
,元素取值范围在[l,u]
之间,排序,时间复杂度要为线性,稳定排序,桶排 -
二叉树知道后序遍历求前序遍历
-
插入排序和选择排序
-
map 的底层红黑树,除了 map 这些关联容器还知道什么查询元素的数据结构?
-
对于 unordered_map 说一下哈希如何解决冲突,线性探测法为什么快
-
如何评价一个算法的优劣
-
100 万个数据找 top k ,判断一个数是不是 2 的幂,两个单链表的公共节点
-
最短路算法,迪杰斯特拉算法和弗洛伊德算法的区别有哪些
-
B 树和 B+ 树的区别
答:B和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。
B+ 树的优点在于:
由于B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性。因此访问叶子节点上关联的数据也具有更好的缓存命中率。 B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。 但是B树也有优点,其优点在于,由于B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。
-
TCP 和 UDP 的区别
答:详见,TCP和UDP区别
-
TCP 的三次握手和四次挥手和超时重传,画出 3 次握手,为什么一定要 3 次,两次会有啥后果
答:详见,TCP的3次握手4次挥手.md
-
TCP 的拥塞控制
-
说一下计算机网络的分层。
答:一图胜千言。
-
Cookie 由哪些部分组成
-
session 怎么使用
-
动态网页是怎么实现的
-
cgi 是什么,全称是什么
-
一次浏览器访问网页的过程中用到哪些东西,这个过程中操作系统参与了哪些部分
-
端口是干什么用的
-
HTTP 状态码中,502 和 504 有什么区别?
- 锁的设计,(1 亿个对象,100 个线程,怎么加锁)
- epoll 和 select 的区别
- epoll 的底层实现
- epoll 用于同步还是异步
- 异步非阻塞 I/O 是什么样的模型,别的模型呢
- 水平触发和边缘触发
- 线程池的实现
- 进程和线程的区别,公用部分和独立部分
- 怎么查看进程占用的内存
- 为什么线程更快
- 线程安全知道哪些方法
- 互斥锁和条件变量,会带来资源竞争,有没有什么解决办法
- 讲几个 Shell 命令
- 堆和栈的区别
- 线程怎么访问互相的栈
- 系统变慢的原因是什么?从内存角度分析
- 线程、进程间通讯
- 图形界面的进程优先级
- 查看 shell 命令花了多少时间
- 操作系统由哪些部分组成
- 32 位系统为什么只有 4G 内存,内核再高地址还是在低地址,32位系统可以用 8G 内存条吗
- Linux 发行到哪个版本了,你用 Centos 还是 ubuntu ,为什么
- Linux 查看内存使用的命令是哪个?查看负载的命令呢
- 操作系统中的 PV 操作是做什么用的,能否举个例子。
- 什么是页式存储?
- SQL 语句,查询两个数据表中 ID 相同的信息
- 36 匹马 6 个跑道无秒表选前 3 ,最少跑几轮