Skip to content

Latest commit

 

History

History

面试常用问题

面试常用问题

这里记录一些网上面经中的面试常用问题以及解决方法

以下问题的答案仅代表本人个人观点。

C++

  1. 指针和引用

    答:具体详见:指针和引用

  2. const 关键字的含义及作用

    答:具体详见:const及作用

  3. 虚函数,虚函数表,虚函数表是共用的吗

  4. malloc 和 new 的区别

    答:详见,malloc和new的区别

  5. 说一下虚函数表,为什么析构函数是虚函数,不这样会怎么样

  6. 虚函数和纯虚函数有什么区别,分贝应用在哪些场合

  7. 虚继承,多继承

  8. 子类析构会不会调用父类的析构函数,执行顺序是什么

  9. string 的 length 和 size 一样吗

  10. string 是怎么增长的

  11. 面向对象三大特性

  12. 手写一个 string_to_float

  13. 迭代器失效,map 和 vector 遍历时怎么解决失效

  14. 代码在内存中的分布区域有哪些,宏定义在哪个区域,堆栈的区别

  15. 程序的内存分布

  16. 多态和重载是什么

  17. 现在 C++ 发行到了哪个版本,c++11 有哪些新特性

  18. STL 中的 map 和 unordered_map 的复杂度和区别

数据结构和算法

  1. 给 1 亿个数求字典序第 k 大(字典树)

  2. 链表拆分,翻转,合并

  3. 手写二分查找和简单的二维数组搜索

  4. 二叉树转单链表(前序遍历)

  5. 旋转数组查找

    答:剑指offer原题,旋转数组的最小数字

  6. 堆排序,画图并说明过程

  7. 求后面第一个比当前数大的数(用栈),leetcode 原题

  8. 数组量量元素异或,求异或最大值(01 字典树)

  9. 快速排序,希尔排序和快速排序的区别,快排什么情况下复杂度最高

  10. 8 个球找重量不一样的怎么称

  11. n 个有序链表,合成一个

  12. 字符串 A,B ,在 A 中删除 B 中出现过的字符

  13. 用 shell 或 c++ 实现,对于一个文件,取出带 A 关键字的行的最后一个字符串,统计重复度。

  14. 整数数组 A[n] ,元素取值范围在 [l,u] 之间,排序,时间复杂度要为线性,稳定排序,桶排

  15. 二叉树知道后序遍历求前序遍历

  16. 插入排序和选择排序

  17. map 的底层红黑树,除了 map 这些关联容器还知道什么查询元素的数据结构?

  18. 对于 unordered_map 说一下哈希如何解决冲突,线性探测法为什么快

  19. 如何评价一个算法的优劣

  20. 100 万个数据找 top k ,判断一个数是不是 2 的幂,两个单链表的公共节点

  21. 最短路算法,迪杰斯特拉算法和弗洛伊德算法的区别有哪些

  22. B 树和 B+ 树的区别

    答:B和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。

    B+ 树的优点在于:

    由于B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性。因此访问叶子节点上关联的数据也具有更好的缓存命中率。 B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。 但是B树也有优点,其优点在于,由于B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。

网络及协议

  1. TCP 和 UDP 的区别

    答:详见,TCP和UDP区别

  2. TCP 的三次握手和四次挥手和超时重传,画出 3 次握手,为什么一定要 3 次,两次会有啥后果

    答:详见,TCP的3次握手4次挥手.md

  3. TCP 的拥塞控制

  4. 说一下计算机网络的分层。

    答:一图胜千言。

  5. Cookie 由哪些部分组成

  6. session 怎么使用

  7. 动态网页是怎么实现的

  8. cgi 是什么,全称是什么

  9. 一次浏览器访问网页的过程中用到哪些东西,这个过程中操作系统参与了哪些部分

  10. 端口是干什么用的

  11. HTTP 状态码中,502 和 504 有什么区别?

操作系统

  1. 锁的设计,(1 亿个对象,100 个线程,怎么加锁)
  2. epoll 和 select 的区别
  3. epoll 的底层实现
  4. epoll 用于同步还是异步
  5. 异步非阻塞 I/O 是什么样的模型,别的模型呢
  6. 水平触发和边缘触发
  7. 线程池的实现
  8. 进程和线程的区别,公用部分和独立部分
  9. 怎么查看进程占用的内存
  10. 为什么线程更快
  11. 线程安全知道哪些方法
  12. 互斥锁和条件变量,会带来资源竞争,有没有什么解决办法
  13. 讲几个 Shell 命令
  14. 堆和栈的区别
  15. 线程怎么访问互相的栈
  16. 系统变慢的原因是什么?从内存角度分析
  17. 线程、进程间通讯
  18. 图形界面的进程优先级
  19. 查看 shell 命令花了多少时间
  20. 操作系统由哪些部分组成
  21. 32 位系统为什么只有 4G 内存,内核再高地址还是在低地址,32位系统可以用 8G 内存条吗
  22. Linux 发行到哪个版本了,你用 Centos 还是 ubuntu ,为什么
  23. Linux 查看内存使用的命令是哪个?查看负载的命令呢
  24. 操作系统中的 PV 操作是做什么用的,能否举个例子。
  25. 什么是页式存储?

数据库

  1. SQL 语句,查询两个数据表中 ID 相同的信息

智商题

  1. 36 匹马 6 个跑道无秒表选前 3 ,最少跑几轮