-
2020腾讯后台开发暑期实习
-
一面:电话面试
- 先发了 Codeshare 的链接手撕代码,40 分钟做两道题:
- 字符串排序,数字>小写字母>大写字母,同类字符的相对顺序不能变,要求额外空间复杂度 O(1)。
- 二叉搜索树找第 K 大的节点。
- 自我介绍。
- 计算机网络:
- TCP 和 UDP 的区别、TCP 粘包、TCP 拥塞控制
- 三次握手 四次挥手 为什么等待 2MSL 大量连接处于 CLOSE_WAIT 是怎么回事
- 介绍 HTTP、 HTTP 方法、HTTP 状态码
- PUT 和 POST 的区别
- 数据库:
- 数据库索引 为什么 B+树
- 数据库锁
- Redis 数据类型、Redis 实现分布式锁、Redis 集群
- Zset 底层实现
- 操作系统,我主动说了操作系统学的不多,面试官没多问:
- 进程和线程的区别
- 进程的通信方式 有没有自己用过
- 设计模式:
单例、有没有线程问题 - 数据结构和算法:
- 了解什么树 、二叉平衡树的平衡是怎么实现的
- hash 表 hash 冲突怎么解决
- 排序算法:稳定性
- 概率题:
- 两个孩子 已知一个是女孩 另一个是男孩的概率
- 49 个人 至少有几个人是同一个月生日
- 人站在圆形岛屿的圆心,鲨鱼在岛外,速度是人的四倍,问怎么安全跑到岸边
-
2 面 30 分钟
- 问了我一些机器学习、大数据和分布式的题目,不是很了解。其实我的简历里没有提到过这些,可能部门的工作有这方面的需要?
- 深圳实习可以吗 什么时候可以来实习。读不读博。
- 你认为后台开发的主要工作是做什么
- 如何设计一个广告系统(谈到了 Redis)
Redis 主从、Redis 集群、 Redis 和 MySQL 的数据一致性 - 如何实现朋友圈广告的精准投放; 机器学习懂不懂; MapReduce 懂不懂;
- 40TB文件 2GB内存 统计出现次数最多的单词。
-
3 面 60 分钟
- 自我介绍
- 平时写哪方面的代码
- 网络编程中如果服务器和客户端连接不上该怎么排查
- 20 亿 QQ 号,4G 内存,O(1) 判断是否存在
- 自己写的代码有没有可以讲讲的
- 输入域名后需要哪些协议
- 如何保证可靠传输
- 实习的目标是什么
-
-
2020实习面经(多公司)
-
钉钉:一面
- 操作系统: 进程与线程,线程怎么共享数据的,指令流水线(顺序与乱序),
- C++:C++11新特性,智能指针,左值与右值,
- 计网:网络模型OSI、TCP/IP,ARP协议,
- 算法:排序算法的比较,二叉树的遍历方式,内存中的堆和栈,
- 项目、代码调优(循环展开,goto禁用,行优先访存,循环内定义外移)
-
英伟达的cpp开发
- 问项目的目的;
- 指针操作:指针越界的危害,野指针的危害(野指针是未初始化的指针,可能会指向任意地方;悬空指针是指向的内存已被销毁),为什么指针越界在编译的时候不会报错,在运行的时候会报段错误?操作系统怎么判断的?
- C++的特点,面向对象的优点,举例说明?
- 函数调用的特点,如果一个指针赋值为函数,那么这个指针获取的是函数的值还是返回值?
- 手撕代码:二叉树的层序遍历;
- 以下代码段是否合法?(不合法,虽然字符串常量还在那个位置上,不会像局部变量那样被销毁,但是字符串常量不能修改)
char * f(){ return "Hello world"; } void main(){ char * p = f(); p[0] = 'h'; }
-
腾讯
- 一面:
- 聊了项目;
- 数据库里面group by和order的执行顺序;(数据库selete语句复习)
- 网络中信息传递的顺序,同网段、不同网段;
- 手撕二分查找;
- 二面:
- C++ inline函数的作用、函数传参入栈的顺序,
- 项目经历(个人在项目中的角色与遇到的困难)
- 死锁与死循环,如何判断是死锁还是死循环;
- 算法题:两个相交链表的交点;
- 三面:
- 做一个新的编程语言的意义?
- 线程与进程的区别,线程同步(自旋锁、读写锁、信号量(二值信号量、计数信号量)、原子操作、barrier等等)
- 软件开发应该具有的特性(低耦合高内聚),敏捷开发?(真没听过,可以补一补软件开发知识。敏捷开发是一种开发流程吧,应对快速变化的需求的一种软件开发能力。)
- 算法题:n个节点的二叉树的最大最小深度;平衡二叉树的删除操作的时间复杂度;动规(爬楼梯);
- HR面:
- 选择offer的原因,做项目的收获?未来的职业规划,工作岗位的重新分配,课余生活等等;
- 一面:
-
百度贴吧
- 一面:
- C语言动态内存分配的几种方式与比较(malloc,calloc,realloc);malloc的特点与底层实现,malloc与new的区别;
- TCP与UDP的比较;
- 进程通信的方式,进程与线程的比较;
- 为什么网络层已经有了差错控制,传输层还要再来一遍?
- 快排与堆排的应用场景,归并排序的空间复杂度(数组与链表不一样吧?)
- 算法题:
- 判断回文串;
- 数组中只出现一次的数字(hash、排序、异或,说异或这个方法的时候面试官还夸我了,嘿嘿);
- 数组中的两数相加之和(暴力法、二分法)以及时间复杂度;
- 链表中倒数第k个元素;
- 链表是否有环?
- 二面:
- C++多态怎么实现的?虚表存放的位置;虚表的大小?
- 四种类型转换的区别;
- class与struct的区别;
- 数据库:主键与外键、数据库的锁(读写锁、乐观悲观锁,不太会。。。);
- 操作系统:进程与线程、同步I/O,异步I/O(忘了)。内核态与进程态,系统调用时操作系统发生的事情;
- 网络:画图–TCP三次握手、四次挥手,四次挥手中的wait-time出现在哪里,如何避免wait-time造成的服务端空等?
- 手撕代码:链表逆置(两种方法:指针改变方向,头插法(写得不好));
- 算法题:一个数组中找出min和max的方法(排序(nlogn)、遍历(n)、堆排序的重建堆(logn?));
- 一面:
-
smart的基础架构组
- 手撕代码(剑指offer中二维数组寻值),两种方法(暴力搜索、从右上角逐步逼近);
- 堆排序的思想,时间复杂度、怎么建堆?如果是二叉树不是数组怎么建堆?
- 快排的时间复杂度?排序算法的稳定性是什么?
- 数据库中删除数据但保留表结构用什么?
- TCP为什么四次挥手?ARP是哪一层的协议?
- Linux命令:一个文件有多少行?,查看内存和cpu。
-
美团
- 网络:http与https的差别,公私钥加密解密的过程? TCP三次握手的原理,为什么二次握手之后要有第三次?
- 操作系统:锁机制有哪些?线程安全是什么? Linux用过什么命令?(free、df、ping、netstat等等),top命令干嘛的?
- 数据库:数据库里面的“脏读”与“幻读”; 数据库里面的三个范式,索引是什么?
- 让你设计一个登录系统?密码在数据库里面怎么存(MD5加密?)怎么判断用户超时了需要重新登录?(访问的时间戳判断)
- 手撕代码:生产者消费者伪代码(如果只有一个生产者、消费者,需要加锁吗?(要判断生产者和消费者的操作是否为原子性的));链表是否有环;二进制转换为十进制。
-
快手基础架构
- 手撕代码:去除字符串里面的空格(不能使用string,空间复杂度为O(1),优化时间复杂度到O(n));如何实现C++里面的string?读取字符串有哪些方式?
- C++函数为什么只有一个返回值,怎么返回的?(我说了运行时栈);函数参数保存在哪里?怎么入栈?有没有办法返回多个返回值?(我说了go语言)。
- float型如何判断是否为0,0.0和0的区别?整型和浮点型比特存放的区别(IEEE754二进制浮点数算术标准)(我说了指数用移码表示,面试官夸我了。。。);
- int a = 10, !!a = ?;
- A、B间有TCP连接,如果B拔网线了,会怎么样?四次挥手的过程?为什么要四次挥手?怎么判断连接超时?
- AWK是啥(AWK是Linux下一种处理文本文件的语言,是一个强大的文本分析工具)
- 程序运行很慢怎么排错?(我说了死锁与死循环排错的方法);
- mysql中索引怎么实现的?有什么用?
-
网易互娱据说游戏开发工程师只有一面
- C++的多态如何实现的?虚函数的作用?析构函数可以是虚函数嘛?虚析构函数的作用(可以避免内存泄漏),举个例子?虚函数表存在哪里?一个类一个还是一个对象一个(虚表是属于一个类的,一个类只有一个,对象中有虚表的指针指向虚表)?编译器会构造几个构造函数?(拷贝构造、默认构造)
- STL里面:vector、set、map是用什么数据结构实现的?
- Push_back的底层实现,什么时候会resize?Move语义了解过吗(C++11的新特性)?
- 哈希表避免冲突的方式?举例说明一下链表法?
- 从cpp程序到exe程序都需要经历那些步骤?
- TCP与UDP的区别?讲一下拥塞控制?
- 进程与线程的区别? 讲一下多路复用;
- 口嗨算法题:求数组中前K大的数字(大顶堆);leetcode:最大的正方形(暴力、动规);
-
DELL
- 为什么要设计一种基于实时系统的编程语言?
- 什么是面向对象?什么是多态,介绍一下常见的多态(重载、继承、虚函数);
- STL用过什么?(vector、queue、stack);介绍一下queue和stack常用方法;如何实现一个最小栈?(辅助栈);C++中堆和栈的区别?(heap和stack,前面总结过一次)
- 常见的排序算法有哪些?介绍一下堆排和快排,两者适用的环境?
- Linux系统中进程与线程的区别?线程间如何通信?什么是死锁?
- Http中get与post的区别,,cookie是什么?
- 设计模式会吗?
-
携程云计算
- 介绍一下PCA算法,区块链的核心是什么?
- C/C++与java的区别,C++中面向对象的特性,并举例说明;虚函数与纯虚函数?
- 手撕代码:不许使用“==”和“if”,统计一个数组中“7”出现的次数(哈希表或者双指针);二分查找;都要写输入输出,跑通;
-
华为中央软件院-操作系统实习生,被安排到了哥德尔实验室(做无人驾驶os和车载os)
- 一面:
- 如何保证os的实时性?
- 说一下race condition;了解无锁编程嘛?了解物联网平台吗?
- 说一个你比较熟悉的内核模块(进程调度);对于实时进程来说,FIFO与RR调度哪个优先级最高?
- 说一下TCP/IP模型,每层都有哪些协议?每种协议都是干嘛的?(ARP,RIP,OSPF,TCP、UDP,HTTP,DNS);
- 手撕代码(三选二,要有输入输出):(1)十进制转换成十六进制,用补码表示;(2)用随机数函数random()求圆周率;(3)二分法求log2n;我做了第一题和第三题,都跑通了,然后时间到了,就结束了。
- 二面主管面(觉得主管面主要面品质,看个人学习的习惯,还有思考的深度)
- 车载os需要哪些特性?和你做的项目有何关系?为什么实时系统要选择C语言?
- 区块链在无人驾驶系统中可以有应用吗?
- 操作系统熟嘛?说一个了解比较多的(我说了内核同步),原子操作会对cache的命中率造成损失吗?自旋锁保证了什么特性?
- 疫情在家都干嘛了? 研究生写过多少代码?以后怎么规划职业发展的? 看过什么书?有什么感悟?
- 平时会怎么学习?有没有写过博客?
- 一面:
-
字节跳动的基础架构组
-
比特币中的挖矿是指什么?
-
怎么防止重入攻击?共识机制?
-
C++:C++11的新特性(智能指针、vector)move用过吗?
-
动态库与静态库的差别? 内存对齐及其原因? 如果一块较大的数据放入内存应该怎么办?(虚存/分块);
-
手撕代码:大于N的最小非重复数(没理解题目意思。);
-
Ip网络报文格式? TTL含义? Https与http差别?
-
三种数据库范式是啥,传递依赖有什么不好?(答了一个数据冗余,还有一个不会)
-
死锁怎么形成的?
-
代码优化的方法?
-
手撕代码:已知前序中序求二叉树;数组的zigzag(a0 <= a1,a1 >= a1,a2 <= a3 …);
-
-
趋势科技
- 一面:
- C++各种特性:
static的作用(修饰函数、修饰变量、修饰成员函数的区别)。
const的作用,拷贝构造函数的作用?
如果不定义构造函数,会怎么样? 何时调用? 一般怎么定义?
类里面的数据初始化的顺序?
C++程序运行时的链接是指什么?
多态是怎么实现的?虚函数表的作用?
析构函数何时调用?不同对象的调用有顺序嘛?
STL用过什么?Vector的resize说一下,vector与普通数组的区别?
map的底层实现是啥?
红黑树的插入删除说一下,红黑树里面插入n个节点的时间复杂度?
unordered_map的底层实现是啥?
Hash表处理冲突的机制有哪些?详细阐述一下? - 计网:
Http与https的区别?说一下NAT协议?说一下DNS协议?
键入一个网址之后会发生什么?
https协议如何断定恶意网址的? - 场景题:10000000个元素怎么找第K大的元素?怎么排序?第10000个斐波那契数的后两位怎么求?
- C++各种特性:
- 二面:
- 数据库的delete和trunk的区别,mysql建索引的方式?
- B+树与hash表在数据库索引中的应用场景?
- PC按下电源之后会发生什么?BOIS会做什么工作?引导文件会放在磁盘的什么地方?引导文件都有什么类型?
- 写个代码吧:读取一个文件的倒数k行(文件操作可以google),说了思路,没让写;
- 函数传参入栈是什么顺序?你喜欢什么编程语言?比较一下常用的编程语言吧;
- 说一下go的基本特性,协程了解不?怎么学习一门新知识?学习中遇到过什么困难?怎么解决的?知道哪些攻击方法?(说了SYN洪泛);
- 中间人代理了解过吗?VPN用吗?都用来干嘛?说一下VPN的原理;
- 手里都有哪些offer了?怎么选择offer?怎么判断岗位是否与你match?
- 一面:
-
七牛云
- 先聊项目;
- 数据结构:优先队列、堆的特性、如何利用别的数据结构实现堆的特性(最小栈、二叉搜索树);
- TCP与UDP,ARP协议的意义,TCP实现可靠性的方法,超时重传的方法?UDP的应用场景;HTTP的head方法?Http中get是怎么判断数据传输完毕的?
- 线程与进程的区别?线程独占的数据结构有哪些?死锁,避免死锁的方法;
- 场景题:六个哲学家,六个筷子,六把锁怎么保证不会死锁?
- 手撕代码:有序数组a,b,求a-b。
-
百度实习正式批
- 一面:
- 聊一下项目,聊一下学校;
- 进程与线程与协程的区别,进程与线程的优缺点与应用场景;系统如何容灾了解过吗?(没有);进程建立与线程建立有何区别?(linux内核角度来答的);
- 手撕代码:leetcode62、63(两道动规,第二道是第一道的递进;
- 一面:
-
二面:聊项目。
- 各种问项目;怎么合作的?怎么与别人交流?
- 内核态与用户态的切换,为什么来回切换会损失效率?
- 平时写代码的时候会追踪这个吗?
- 说一下你对C和cpp的理解;
- 手撕代码:leetcode141、142;同样,第二题是第一题的递进;
-
三轮连面:
- 场景题:浏览器键入:www.baidu.com后会发生什么?
- 百度现已支持https那么如果以http访问百度站点会发生什么?知道为什么嘛?(不知道。。。);
- 本科阶段有什么收获?做项目怎么解决分歧?做项目有何收获?有没有一直坚持下来的事情?你觉得从本科到现在有何提升?以后的发展规划?现在还有什么不足?
-
小马智行:一面,纯coding面
- 手撕代码:
- 链表相加,我的思路:现将两个链表翻转,然后求和,再将所得结果逆置,空间复杂度O(n),时间复杂度O(n);优化,链表逆置可以进行原地操作吗?(更改指针方向可以);
- 有n个糖果,a每天早上吃k个,b每天晚上吃剩下的10%,求最小的k值使得a吃到的总数大于等于n/2;二分法使k在0~n的范围内尝试;一个小时结束。
- 手撕代码:
-
shopee的金融后端
- 一面;
- 快排与堆排的时间复杂度,堆排的具体过程,
- 数据库:数据库的封锁级别?事务的定义?乐观锁与悲观锁?数据库索引的意义?数据库引擎是什么?
- 计网:Http与https的区别? http1.0与http2.0的区别? 什么是面向连接? 三次握手与四次挥手的过程,为什么四次挥手?
- 系统:进程调度的算法?进程与线程,线程独有的数据结构?
- 比特币怎么防止“重画”?
- UTXO集合与wallet的比较?
- 口嗨算法:爬楼梯; 1亿个ip找一个特定的?(排序后二分查找、字典树); 100元可以玩10000次赔率为3胜率50的游戏,你的策略是?
- 手撕代码:atoi;
- 二面:
- C++11有哪些新特性?说说share_ptr和unique_ptr的区别?
- 说说内核里面epoll做了那些优化?Epoll为何可以提升效率?具体怎么实现的?
- Fd是以什么数据结构连接起来的?你在项目中遇到的最大的困难?写过多少代码?对实习有什么看法?接触过golang嘛?Linux熟嘛?怎么规划你的职业生涯的?
- 一面;
-
阿龙的学习笔记---实习面经总结
最新推荐文章于 2022-09-18 09:06:12 发布