https://github.com/shujuner/interview
https://github.com/shujuner/HanTang-Notes
https://www.nowcoder.com/tutorial/93/156e55e0579d4a678e857b34d572c278
字节跳动实习C++一面
1、简述项目,遇到什么问题
2、C++
inline作用,优缺点
static的作用
代码的执行流程,从代码到程序运行整个流程说一下
虚拟内存说一下
extern "C"在C++中作用是什么?
成员变量增多会影响类的sizeof吗?虚函数增多呢?
类的内存布局
什么函数不可以为虚函数?为什么?
智能指针,用途及区别
智能指针和Java的gc有什么区别?
熟悉stl吗?熟悉哪些?
unordered_map怎么解决哈希冲突?哈希冲突太多会导致什么?
3、操作系统
进程调度算法
进程间通信的方法
分页、分段机制
4、计算机网络
http长连接、短连接
三次握手、四次挥手
TCP包含什么协议
UDP包含什么协议
TCP、UDP区别
5、两道算法:
1)假设1元、2元、5元、10元、20元、50元、100元的纸币分别有c0, c1, c2, c3, c4, c5, c6张。现在要用这些钱来支付K元,至少要用多少张纸币?
const int N=7;
int Count[N]={3,0,2,1,0,3,5};
int Value[N]={1,2,5,10,20,50,100};
2)判断两个字符串是否互为旋转词,如果一个字符串为str,把字符串的前面任意部分挪到后面形成的字符串叫str的旋转词。比如str=“12345”,str的旋转串有“12345”、“45123”等等。给定两个字符串,判断是否为旋转词
字节跳动后端开发一面
1、操作系统
- 进程和线程的区别
- 什么是线程安全
- 操作系统中的锁
- 线程之间通信方式
- 进程池,线程池
- 进程之间通信方式
- socket的概念
- 多线程线程的弊端
- IO和多路复用
2、计算机网络
- OSI 7层协议
- TCP、UDP的区别
- 路由器、防火墙处于哪一层
- DNS协议
- TCP可靠性的实现方式
3、数据库
- 数据完整性的实现
- 索引的结构、概念
- 如何提高索引的速度
- B+tree
- 主键
- 数据表设计的范式
- 数据表设计遵循的原则
腾讯补招面经
1.自我介绍
2.Java,C++会吗?(不会,没关系)
3.代码考核,15分钟做一道算法题
4.软链接和硬链接的区别?
5.并发和并行的区别?
6.Linux知道哪些命令?
7.C和C++有什么区别?
8.C++的源码读过吗?
9.stl的list和vector有什么区别?
10.虚指针知道吗?
11.内存泄漏知道吗?
13.智能指针知道吗?
14.跟面试官说了C++不太熟悉,面试官也有点苦恼,问我Python会吗?
15.http和https的区别?
16.http2.0知道吗?
17.正向代理和反向代理知道吗?
18.nginx的配置做过吗?
百度面试
一面 12.22 下午三点 1h
1.自我介绍
然后开始扒项目结合问问题
2.介绍一下flask
3.数据库索引,什么情况下创建索引
4.http/tcp/ip
5.tcp三次握手,三次的原因
6.http常用的请求方式(get?post、head…)
7.https如何进行数据传输
8.常见状态吗
9.redis能存储的数据类型
10.c++多态(动态多态)
11.智能指针(unique_ptr/shared_ptr/weak_ptr)
12.linux常用命令
13算法题:
1)中序遍历二叉树递归+非递归
反问
总结:问的挺基础
二面 12.25 下午四点 1.5h
1.自我介绍
为什么不找算法相关的?(喜欢开发。。。)
先深扒项目
2.cookie和session的区别
3.单点登录方式(cookie记录登录状态?然后一些cookie和session的问题,这块我不大会)
4.爬虫,ip被封后还能用你的电脑登录这个网站吗,ip被封了怎么继续爬,如何反爬
5.倒排索引(?)
6.es用过吗(?)
7.mongodb和mysql的区别(关系型非关系型的区别)
8.股票数据为什么用mongodb而不用mysql存储
9.在浏览器输入一个网址会发生什么
10.浏览器怎么渲染页面(DOM树)
11.tcp三次握手
12.http请求包含哪些头部信息
13.假设你的系统有很多人同时访问(高并发系统设计?)
14.redis常用命令(?)
15代码+算法?
1)手写一个.h头文件,里边声明一个变量,声明一个函数,一个空类
2)cpp文件中引用两次这个头文件,报错:变量和类重定义,为什么?函数声明为什么不报错
3)两个不同的namespace下可以声明名字相同的变量吗,自己写一个namespace测试一下,namespace的作用,好像还有namespace什么时间起作用?(记不清了)
4)两个无序无重复元素的数组,求交集(答:先分别排序,再比较,相等的加入一个vector中)
5)假设两个数组有序,求出交集(开始写。。。)
6) 注意坑来了:改成模板。。。
7)改成模板后这个比较的时候就不适用所有的类型了,写一个能适用所有类型的(?)
8)看你上边写过函数指针,用函数指针写吧,函数参数能是函数吧(??????)
被问蒙了,脑瓜子嗡嗡的,一片混乱,最后函数指针没写出来。。。
16.继承和多态的关系,解释多态(多态的条件,函数重写和函数重载)
17.内存泄漏了解吗(答了解,然后没问)
18.new和malloc区别,为什么用new不用malloc
19.linux常用命令
总结:自己的项目一定要很熟悉,涉及到的技术尽量多去了解,c++一些比较基础但忽略的东西(对我来说不常见)
腾讯 C++后台开发
- Linux
Linux进程调度算法
Linux进程地址空间分布
Linux内存管理方法,页面置换算法,逻辑地址和物理地址的转换
在一台内存为2G的机器上,malloc(20G)会怎么样?new 20G呢?
进程和线程的区别,进程间通信方式
解释孤儿进程,僵死进程,惊群效应
IO模型,Select、Epoll和Poll的区别
ET和LT的区别,需要注意什么 - 计算机网络
TCP三次握手四次挥手状态图,对应的POSIX API,为什么要三次握手,两次可以吗?
TIME_WAIT的作用
TCP和UDP区别,TCP如何保证可靠性,对方是否存活(心跳检测)
流量控制,拥塞控制
SYN Flood攻击
HTTP状态码
Libevent如何处理IO事件,信号事件,和定时事件 - 数据结构
布隆过滤器
智能指针
hash表解决冲突的方法
红黑树性质
redis中的数据结构
跳表插入删除过程 - 编程题:
判断大小端,int的大端转小端
去掉字符串开头和末尾的空格
大数相加
最长公共子序列LCS
最小编辑距离
二叉树中两个节点的最近公共父节点
数据流的中位数 - 其他
虚函数的实现原理,子类构造析构函数的调用顺序
STL中Vector、List和Map底层实现原理
inline的作用
struct和union的区别,字节对齐
C++11新特性
B树和B+树的区别,ACID, 索引种类,explain关键字
智力题 楼层丢鸡蛋
腾讯面试
一
1.自我介绍
2.面试官:按规矩先刷题…
2.1:最长上升子序列,要求取其中字典最小的结果 相关知识点:
2.2:在有序旋转数组中找到最小值
3.写服务端的套接字程序的步骤
4.五种IO模型
5.select和epoll的区别
6.水平触发和边缘触发
7.https原理,如何解决中间人攻击
8.C++11用过哪些特性
9.一致性哈希算法
10.Mysql两种引擎知道吗,他们的索引有什么区别
11.Linux查看进程和线程的指令用过吗
二
C++
多态是怎么实现的(讲了一下虚表指针,虚表,运行时确定地址,好像面试官不太满意)
虚表是哪时候生成的(编译时)
Inline标识符的作用
C++&****算法:
多态实现
关于虚析构函数的问题
堆和栈区别
寄存器维护堆还是栈
说一下智能指针
宏是在哪个阶段进行处理(预编译),const呢(编译)
如何判断链表中是不是有环(我说了使用快慢双指针,然后又要我说另外的方法,提示是可以使用额外的内存空间)
说一下重载
三
1.说一下static关键字的作用
2.C和C++的区别
3.请你回答一下hash表如何rehash,以及怎么处理其中保存的资源
4.数据结构和算法部分:手写代码最长公共子序列,这个题我之前看过大佬写的文章https://labuladong.gitbook.io/algo,但是时间有点久了,想不太起来具体的代码内容了,好在还大致记着大佬给的套路,镇定下来慢慢回想,回来又重新看了下那篇文章,长舒一口气大差不差。
5.git中Merge和rebase区别
6.网络断开怎么感知,有没有处理,如果两个连接断开了但是没有数据交互怎么感知断开?
7.父类和子类构造函数析构函数调用顺序
四社招
一面
1,项目介绍
2,两道算法题
A: 分割字符串,如:abc=1&d=2, 输出 abc=>1, d=>2的KV结构,要求充分考虑边界问题
B: 两个无序链表A和B,按照奇数在前,偶数在后,局部有序(奇数有序,偶数有序),并且对重复数字去重
3,tcp粘包及怎么处理
4,redis缓存设计
5,设计系统,Q币和礼物系统,如果出现支付延迟怎么办,考验分布式强一致性
6,消息队列组件
二面
1,项目介绍
2,两个算法题
A: 去除字符串空格
B: 就字符串子集,如123,输出,1,2,3,12,13,23,123
3,tcp三次握手,backlog是干什么用的
4,innodb事务底层实现技术
三面
1,项目介绍
2,乐观锁和悲观锁区别
3,tcp四次挥手
4,主从同步重试机制,怎样保证重试数据完整
四面
1,项目介绍
2,tcp半链接队列攻击
3,mysql两种存储引擎及区别,底层实现
4,进程,线程,协程区别
5,分布式系统理解,分布式时序怎么做,最终一致性理解
6,快速排序思想,哨兵选择可优化点
五面
1,项目介绍,项目改进
2,mysql索引,为啥要用B+树,红黑树为什么不行?
3,redis使用场景,用过哪些功能
4,服务可用性改进
5,换工作原因
五
1、为什么不读博?(我脑子一蒙,说自己的科研能力到头了,当时我感觉我的面试也到头了)
2、TCP三次握手、四次挥手
3、TCP序号的作用(没答全)
4、TCP滑动窗口,拥塞控制
5、epoll实现机制,为什么返回的都是就绪的,和select的区别,为什么select不能做到
6、为什么采用单线程处理连接线程池处理事务的模式(我的小项目)
7、高并发下还有哪些模式?
8、C++多态实现机制
9、为什么能实现运行时多态
10、C++存储数据区域
11、C和C++ static的作用。只答了c++的
12、static存放在哪个区?
13、十亿QQ号,查找某个QQ号在不在里面
14、常用的STL
15、常用STL底层实现
16、都看过什么书,为了做开发做了哪些准备?
17、 atoi函数的实现
1、一道编程题,数列相关,只通过了百分之三十
2、问了一下平时怎么调试,内存不断增长的话怎么判断哪里出了问题,调试方面问了很多,用了什么调试方式(我基本只打断点,所以很尴尬,全程啥也不会)
3、虚拟内存寻址空间大小
4、围绕着这道编程题展开了一堆问题,但是我已经忘了。。
5、浏览器输入url按下回车发生了什么
6、40亿个QQ号怎么存储
8、CPU调度基本单位?
9、平时关注那些库?
美团
一面:
项目:(下面的都不写了,基本上问的都差不多)
- 为什么想到用优先队列?优先队列如何实现?
- 数据库中的事务以及一致性问题;
- 数据库的底层实现(B+树,跳表);
数据结构与算法:
网络:
- web页面请求过程:在浏览器中输入一个网址到获得一个页面,这个过程中有用到哪些协议?(DNS + HTTP + TCP + IP + ARP;这个问题基本上可以将所有的网络协议串起来,是一个很好的问题,值得注意)
- HTTP报文格式;
- 访问一个网址和提交一段代码到网上有何区别?(GET和POST的区别)
Linux常用命令:
- 如何查看内存空间?如何查看磁盘空间?(free; df -h)
- 如何查看进程?(ps aux)
二面:
数据结构与算法:
Linux命令:
-
一个文件"ip.txt",有两个字段ip(第一列)和访问时间(第二列),找出访问次数最多的ip;
awk '{ips[$1]++;} END {for(ip in ips) printf("%s\t%d\n", ip, ips[ip]);}' ip.txt | sort -n -k 2 -r | head -n 1
(这道题主要考察了awk, sort, head和管道命令的运用,值得注意,另外还有像统计词频,杀死指定进程等也经常考察)
网络:
- TCP四次握手;(需要详细说明)
- 拥塞避免机制;
- web页面请求过程;
数据库:
- 索引:是什么?如何实现?
- sql引擎:有哪些?MyISAM和InnoDB的区别?B+树与B树的区别?
三面:
数据结构与算法:
- 手撕:堆排序,并分析时间复杂度;
- 手撕:链表中环的入口节点,并解释原因;
- 二叉搜索树的特征,查找和插入的时间复杂度;
- 为什么说二叉搜索树有时会不稳定,如何改进?(可能会退化为链表;改进为平衡二叉查找树)
- AVL树大概的调整过程;(左旋右旋)
- 红黑树的特征以及大概的调整过程;
网络:
- OSI网络分层模型,TCP/IP网络分层模型?(7层;5层)
- 为什么TCP/IP去除了表示层和会话层?(没必要搞那么复杂)
- TCP与UDP的区别;(TCP实现了可靠传输;UDP不保证可靠传输;)
- TCP如何实现可靠传输;(超时重传)
- TCP的发送窗口大小如何确定?(拥塞避免)
系统:
- IO高并发如何实现?
- 线程与进程的区别?
- 为什么进程的切换开销比线程大?
拼多多
2面技术 + 1面hr,拿offer,11116
一面:
C++:
- 虚函数的实现;(虚表)
- 智能指针;
- lambda表达式;
- C语言如何实现面向对象编程;
- struct与class的区别;
- struct与union的区别;
- struct中的字节对齐机制;
- C++四种类型转换符(static_cast, dynamic_cast, const_cast, reinterpret_cast)各自的作用;
系统:
- 信号量机制;(整型、记录型、AND型、信号量集)
- 锁机制;(互斥锁、自旋锁)
网络:
- DNS的查询方式;(递归和迭代)
- HTTP与HTTPS的区别;(加密与否)
- HTTPS如何实现加密传输;(非对称加密机制)
- HTTPS的认证过程;
- TTL指的是什么?(Time To Live,生存时间,也是跳数限制)
- ARP协议;
- traceroute的过程;
数据结构与算法:
- 如何实现topK;(堆)
- 手撕:数组中连续子数组的最大和;(dp)
- 字符串转化为数字;(注意细节处理)
二面:
网络:
- web页面请求过程;
数据结构与算法:
- 数组中0,1,2分别代表三种颜色的小球,调整数组元素使得相同颜色的小球在一起,要求在时间复杂度为O(n),不能用额外空间;(双指针)
- 一个链表,value里面存了公司里所有人的年龄,希望你对这个链表做切分,切分出来的section越多越好,但是有一个条件:同一个年龄的人只允许分配到用一个section中,返回所有section的长度的数组;输入:29 -> 30 -> 31 -> 32 -> 31 -> NULL,输出:[1, 1, 3];(滑动窗口)
网易互娱
2面技术,拿offer,裁员和游戏技术栈窄
C++:
- 虚函数的实现;
- 构造函数声明成虚函数时,如何调用?(陷阱题,构造函数不能被声明为虚函数)
- 类型兼容规则;
- vector的push_back()方法的实现;
- map, unordered_map的区别;
- 左值与右值分别指什么?
网络:
- TCP、UDP的区别;
- TCP如何实现可靠连接;
- socket编程;
系统:
- cache一致性;
- 虚拟内存与物理内存的区别;
游戏设计题:
- 吃鸡中,如何实现游戏毒圈的缩小方法;(极坐标+随机数)
智力题:
- 海盗分金;(博弈论)
- 三个火枪手;(博弈论)
二面:
没有聊实质性的技术问题,主要聊了游戏中常用的计算机图形学和随机洗牌算法;
头条
1面挂
一面:
C++:
- C++中哪些函数不能被声明为虚函数?(普通、内联、构造、友元、静态)
- 构造函数为什么不能被声明为虚函数?(派生类的对象在基类构造函数调用前还不存在)
- 友元函数可以被声明为虚函数吗?为什么?(不能,友元函数不是成员函数,不能被继承,不支持运行时多态)
网络:
- 在浏览器中输入一个网址,服务器是如何找到你的主机的?(不会)
数据结构与算法:
- 手撕:字符串中回文子串的数目;(dp)
- 手撕:给你一个字符串,返回所有它能表示的IP地址;(回溯)
- 有10亿个数,如何找出其中最小的100个数;(堆)
- 说说堆排序的过程,建堆的时间复杂度是多少;(建堆+调整;O(n))
阿里
作者:Lee_1024
链接:https://www.nowcoder.com/discuss/351093?type=2&order=0&pos=11&page=3&channel=-1&source_id=discuss_tag_nctrack
来源:牛客网
一面:(春招)
C++:
- vector和list中,删除末尾的元素,其指针和迭代器如何变化?若删除的是中间的元素呢?
算法:
- 有两个很大的文件,如何找出其中相同的行?
系统:
- 管道命令如何实现?
二面:(春招)
算法:
- 手撕:二叉树的后序遍历,递归和非递归;
场景:
- 两个很大的矩阵相乘,如何并行实现?(分块)
一面:(秋招)
数据库:问了很多关于sql的基本语法;
二面:(秋招)
算法:
Linux命令:
- 写脚本杀死指定名称的进程;
ps aux | grep ${processName} | grep -v grep | awk '{print $2}' | xargs kill -s 9