做者:守望者1028
连接:https://www.nowcoder.com/discuss/55353
来源:牛客网
面试高频题:
校招过程当中参考过牛客诸位大佬的面经,可是具体哪一块是参考谁的我也忘记了,若是您看到有些熟悉,那么可能就是您的,若是您以为侵权,请告诉我,我撤回。
1语言基础(C++)
(1) 指针和引用的区别
(2) 堆和栈的区别
(3) new和delete是如何实现的,new 与 malloc的异同处
(4) C和C++的区别
(5) C++、Java的联系与区别,包括语言特性、垃圾回收、应用场景等(java的垃圾回收机制)
(6) Struct和class的区别
(7) define 和const的区别(编译阶段、安全性、内存占用等)
(8) 在C++中const和static的用法(定义,用途)
(9) const和static在类中使用的注意事项(定义、初始化和使用)
(10) C++中的const类成员函数(用法和意义)
(11) 计算下面几个类的大小:
class A {};: sizeof(A) = 1;
class A { virtual Fun(){} };: sizeof(A) = 4(32位机器)/8(64位机器);
class A { static int a; };: sizeof(A) = 1;
class A { int a; };: sizeof(A) = 4;
class A { static int a; int b; };: sizeof(A) = 4;
(12) 给一个代码,求输出结果
class A
{
public:
A(int x){}
}
问:A a = 1;是否正确, 若是正确, 那么它调用了哪些函数?
这类题目更常见的是在基类和子类有不一样实现方法。(虚函数相关,栗子不少,很少说了)
(13) C++的STL介绍(这个系列也很重要,建议侯捷老师的这方面的书籍与视频),其中包括内存管理allocator,函数,实现机理,多线程实现等
(14) STL源码中的hash表的实现
(15) STL中unordered_map和map的区别
(16) STL中vector的实现
(17) vector使用的注意点及其缘由,频繁对vector调用push_back()对性能的影响和缘由。
(18) C++中的重载和重写的区别:
(19) C ++内存管理(热门问题)
(20) 介绍面向对象的三大特性,而且举例说明每个。
(21) 多态的实现(和下个问题一块儿回答)
(22) C++虚函数相关(虚函数表,虚函数指针),虚函数的实现原理(热门,重要)
(23) 实现编译器处理虚函数表应该如何处理
(24) 析构函数通常写成虚函数的缘由
(25) 构造函数为何通常不定义为虚函数
(26) 构造函数或者析构函数中调用虚函数会怎样
(27) 纯虚函数
(28) 静态绑定和动态绑定的介绍
(29) 引用是否能实现动态绑定,为何引用能够实现
(30) 深拷贝和浅拷贝的区别(举例说明深拷贝的安全性)
(31) 对象复用的了解,零拷贝的了解
(32) 介绍C++全部的构造函数
(33) 什么状况下会调用拷贝构造函数(三种状况)
(34) 结构体内存对齐方式和为何要进行内存对齐?
(35) 内存泄露的定义,如何检测与避免?
(36) 手写实现智能指针类(34-37我没碰见过)
(37) 调试程序的方法
(38) 遇到coredump要怎么调试
(39) 内存检查工具的了解
(40) 模板的用法与适用场景
(41) 成员初始化列表的概念,为何用成员初始化列表会快一些(性能优点)?
(42) 用过C11吗,知道C11新特性吗?(有面试官建议熟悉C11)
(43) C++的调用惯例(简单一点C++函数调用的压栈过程)
(44) C++的四种强制转换
2计算机网络(TCP/IP)
(1) 创建TCP服务器的各个系统调用
(2) 继上一题,说明socket网络编程有哪些系统调用?其中close是一次就能直接关闭的吗,半关闭状态是怎么产生的?
(3) 对路由协议的了解与介绍。内部网关协议IGP包括RIP,OSPF,和外部网关协议EGP和BGP.
(4) 路由协议所使用的算法。
(5) TCP和UDP的区别
(6) TCP和UDP相关的协议与端口号
(7) TCP(UDP,IP)等首部的认识(http请求报文构成)
(8) 网页解析的过程与实现方法
(9) 在浏览器中输入URL后执行的所有过程(如www.baidu.com)
(10) 网络层分片的缘由与具体实现
(11) TCP的三次握手与四次挥手的详细介绍(TCP链接创建与断开是热门问题)
(12) TCP握手以及每一次握手客户端和服务器端处于哪一个状态(11种状态)
(13) 为何使用三次握手,两次握手可不能够?
(14) TIME_WAIT的意义(为何要等于2MSL)
(15) 超时重传机制(不过高频)
(16) TCP怎么保证可靠性(面向字节流,超时重传,应答机制,滑动窗口,拥塞控制,校验等)?
(17) 流量控制的介绍,采用滑动窗口会有什么问题(死锁可能,糊涂窗口综合征)?
(18) tcp滑动窗口协议
(19) 拥塞控制和流量控制的区别
(20) TCP拥塞控制,算法名字?(极其重要)
(21) http协议与TCP联系
(22) http/1.0和http/1.1的区别
(23) http的请求方法有哪些?get和post的区别。
(24) http的状态码
(25) http和https的区别,由http升级为https须要作哪些操做
(26) https的具体实现,怎么确保安全性
(27) http中浏览器一个URL的流程,这个过程当中浏览器作了什么,URL包括哪三个部分?
(28) 一个机器可以使用的端口号上限是多少,为何?能够改变吗?那若是想要用的端口超过这个限制怎么办?
(29) 对称密码和非对称密码体系
(30) 数字证书的了解(高频)
(31) 客户端为何信任第三方证书
(32) RSA加密算法,MD5原理(MD5不算加密算法)
(33) 单条记录高并发访问的优化
(34) 介绍一下ping的过程,分别用到了哪些协议
(35) TCP/IP的分片粘包过程
(36) 有没有抓过TCP包,描述一下
(37) 一个ip配置多个域名,靠什么识别?
(38) 服务器攻击(DDos攻击)
3数据库(MySQL)
数据库我自身不是特别熟,面试的时候通常也都坦言了,因此面试官都只是问一些基础题目。
(1) 关系型和非关系型数据库的区别(各自优势)
(2) 经常使用SQL语句(DDL,DML,DCL,TCL)
(3) 数据库中join的类型与区别(inner join, outer join, cross join, natural join, self join),注意适用场景和sql语句的编写
(4) 数据库的索引类型
(5) 汇集索引和非汇集索引的区别(叶节点存储内容)
(6) 惟一性索引和主码索引的区别
(7) 索引的优缺点,何时使用索引,何时不能使用索引(重点)
(8) 索引的底层实现(B+树,为什么不采用红黑树,B树)
(9) B树和B+树具体实现
(10) 索引最左前缀问题
(11) Mysql的优化(高频,索引优化,性能优化)
(12) 数据库引擎介绍,innodb和myisam的特色与区别
(13) 数据库中事务的ACID(四大特性都要可以举例说明,理解透彻,好比原子性和一致性的关联,隔离性很差会出现的问题)
(14) 数据库隔离性设置不一样会出现的问题(脏读、不可重复读、丢失修改、幻读)
(15) 数据库的隔离级别,mysql和Oracle的隔离级别分别是什么
(16) 数据库链接池的做用
(17) Mysql的表空间方式,各自特色
(18) 分布式事务
(19) 数据库的范式
(20) 数据的锁的种类,加锁的方式
(21) 视图的做用与使用方法(如何删除等)
(22) 分库分表,主从复制,读写分离。(我不会,也没碰到过)
(23) 项目中哪里用到了数据库,怎么用的
4Linux基础
Linux这一块若是不太熟,能够直接说,可是由于开发岗位通常都是在Linux平台下的,因此几个基础问题仍是要会的。
(1) Linux的I/O模型介绍以及同步异步阻塞非阻塞的区别(超级重要)
(2) 文件系统的理解(EXT4,XFS,BTRFS)
(3) 文件处理grep,awk,sed这三个命令必知必会
(4) IO复用的三种方法(select,poll,epoll)深刻理解,包括三者区别,内部原理实现?
(5) Epoll的ET模式和LT模式(ET的非阻塞)
(6) 查询进程占用CPU的命令(注意要了解到used,buf,cache表明意义)
(7) linux的其余常见命令(kill,find,cp等等)
(8) shell脚本用法
(9) 硬链接和软链接的区别
(10) 文件权限怎么看(rwx)
(11) 文件的三种时间(mtime, atime,ctime),分别在何时会改变
(12) Linux监控网络带宽的命令,查看特定进程的占用网络资源状况命令
5操做系统
(1) 进程与线程的区别和联系
(2) 一个进程能够建立多少线程,和什么有关
(3) 一个程序从开始运行到结束的完整过程(四个过程)
(4) 进程通讯方法(Linux和windows下),线程通讯方法(Linux和windows下)
(5) 进程调度方法详细介绍
(6) 页面置换方法详细介绍
(7) 可否实现一个LRU算法
(8) 死锁的必要条件(怎么检测死锁,解决死锁问题)
(9) 哲学家就餐,银行家,读者写者,生产者消费者(怎么加锁解锁,伪代码)
(10) 海量数据的bitmap使用原理
(11) 布隆过滤器原理与优势
(12) 布隆过滤器处理大规模问题时的持久化,包括内存大小受限、磁盘换入换出问题
(13) 同步IO和异步IO
(14) 文件读写使用的系统调用
(15) 线程池的了解、优势、调度处理方式和保护任务队列的方式
(16) 怎么回收线程
(17) 僵尸进程问题
(18) 多线程同步(尤为是若是项目中用到了多线程,很大可能会结合讨论)
(19) memcache了解
(20) 异常和中断的区别
(21) 通常状况下在Linux/windows平台下栈空间的大小
6设计模式和算法
设计模式通常都不会考太多,除非你明确说本身懂。我基本上就不涉及到设计模式的东西,因此只是简要说说。固然,单例模式和简单工厂模式的概念和使用场景仍是要知道的。
(1) 介绍熟悉的设计模式(单例,简单工厂模式)
(2) 写单例模式(饿汉模式和懒汉模式),线程安全版本
(3) MVC设计模式
算法这一块太过庞大,几乎都有可能,牛油们最好仍是去刷剑指offer(level 1),leetcode(若是可以刷到最高难度,算法对你来讲已经不是什么了,或者说面试对你来讲简直就是吃饭喝水的难度),左神的书《程序源代码面试指南》(字符串,数组,dp,海量数据问题,搞定它们也就搞定面试的一半)。
下面仍是简单的列举一些吧(包括一些数据结构题目,只列举简单的,面试的算法一半不会太难,可是如今通常都是须要比较好的思惟,或者曾经接触过这方面的题,建议就是多刷题,作题感受是刷出来的)
(1) 红黑树的了解(平衡树,二叉搜索树),使用场景
(2) 红黑树在STL上的应用
(3) 了解并查集吗?(低频)
(4) 贪心算法和动态规划的区别
(5) 判断一个链表是否有环,如何找到这个环的起点
(6) 实现一个strcpy函数(或者memcpy),若是内存可能重叠呢
(7) 实现一个循环队列
(8) 排序算法(写快排,归并排序,堆排序),算法的时间复杂度,空间复杂度,是否稳定等
(9) 快排存在的问题,如何优化
(10) 反转一个链表
(11) Top K问题(能够采起的方法有哪些,各自优势?)
(12) Bitmap的使用,存储和插入方法
(13) 二叉树的先序、中序、后序遍历(非递归实现)
(14) 二叉树的公共祖先(简单地说,剑指offer上的题大都是高频题)
(15) 1-n中有多少个1
(16) 字典树的理解以及在统计上的应用
(17) 数组的全排列
(18) N个骰子出现和为m的几率
(19) 海量数据问题(可参考左神的书)
(20) 一致性哈希
7智力题
我特别把智力题单独拿出来说,是由于这一块其实有些公司很看重(例如腾讯),可是我基本上也没刷过这类题目,接触很少,牛油们自行补充吧。
(1) 100层楼,只有2个鸡蛋,想要判断出那一层恰好让鸡蛋碎掉,给出策略(滴滴笔试中两个铁球跟这个是一类题)
(2) 毒药问题,n拼毒药,要快速找出哪一瓶有毒,须要几只小白鼠
(3) 博弈论问题
(4) 先手必胜策略问题:n本书,每次可以拿X-X本,怎么拿必胜
(5) 放n只蚂蚁在一条树枝上,蚂蚁与蚂蚁之间碰到就各自往反方向走,问总距离或者时间。
(6) 瓶子换饮料问题:多少个瓶子可以换1瓶饮料,问最多能喝几瓶java