春招实习终于结束啦
原文链接:https://www.nowcoder.com/discuss/80089?type=0&order=4&pos=5&page=1
春招实习终于可以结束了,感谢帮助过我的人,感谢牛客网,看了几十篇面经,是时候把自己的面经放出来了。
投了二十多家公司,总共有6家公司给了我面试机会,非常感谢给我机会的公司,谢谢。
- 阿里(一面挂)
- 华为(offer排序)
- 去哪儿网(offer)
- 58同城(2面等消息,应该是挂了)
- 腾讯(offer)
- 爱奇艺(1面等消息,也应该是挂了)
阿里
投的太早了,刚来学校,啥都忘了,啥也不会,第一次面试,结果一面就凉了。
- 进程与线程的区别
- 线程同步的方式 互斥量、读写锁、条件变量、自旋锁、屏障。
- 进程的状态?除了阻塞、就绪、执行状态,还有?
- 用多线程写过代码吗?如何创建一个线程池?
- tcp如何实现可靠传输?
- udp可靠传输交给应用层,应用层如何实现可靠传输的?
- 堆和栈的区别?堆栈溢出?
- 会不会数据库?解释下左连接和右连接,事务了解吗?
- 链表和数组的区别?链表和数组的应用场景?
- hashtable的底层实现?查找一个元素的过程?解决冲突方法?
- 阿里巴巴大部分都是Java岗,如果让你转Java岗,你会怎样
- 你C++的优势在那?
- 你还有那些擅长的技术?
- 简单说说项目
- 简单说说比赛?比赛的收获是啥?
- 有什么想问他的?
华为
华为的面试,在重庆,现场面,全是讲项目,基础的基本没问,幸好项目没深问。
- 自我介绍,语无伦次的说了一分来钟就结束战斗了。
- 然后讲项目,边画流程图边讲,大部分都是点到为止,幸好没深问技术细节,不然尴尬了。
- 面试官看看我的简历,诶,你有个人网站啊,点开一看,里面有我记录的华为笔试题,然后就问我华为笔试题怎样,这下可以装逼了,巴拉巴拉说了一大堆,幸好我机智。
- 问了下研究生期间那些课程对我影响较大,我厚着脸皮说那本西瓜书(周志华的机器学习)和算法,引领我进入了机器学习的大门,这逼装的,要是问我机器学习算法,估计会僵硬。然后将了下算法有啥动态规划、分治、贪心啥的思想,他也没具体问,就说ok了,等下一轮面试。
等了不到五分钟,二面开始。
- 自我介绍,紧张,又语无伦次。
- 问了下项目,说到一半不太感兴趣好像。
- 问对华为加班的看法啥的
- 问对城市的选择啥的
- 问如果在公司,你非常努力,但得不到别人的认可怎么办啥的
- 问有啥想问他的。
就这么稀里糊涂的结束了,过了几天,收到短信,说是offer排序中,具体是否发放offer看实习时间和面试成绩综合考虑。
去哪儿网
去哪儿网是在成都进行现场面试的,从重庆到成都,从早上到晚上,一口饭没吃,终于撑住了。
- 自我介绍,相当于尬聊,我这人比较容易紧张。。。
- 给到题,求单链表的长度,考虑有环的情况,跟他说思路,我说分两种情况,首先判断链表是否有环,如果没有环,一趟遍历就可以搞出来了,如果有环,则关键点是求得环的入口,然后计算环长和头结点到入口的距离就可以知道环长了,问题来了,如果判断有环,如何求出环的入口。我说通过快慢指针,快指针一次走两步,慢指针一次走一步,如果快指针等于慢指针的话,那么就可以说明有环,问题来了,为什么了,跟他解释了下,就跟跑步一样,慢指针到环的入口时,快指针肯定进入了环,此时,慢指针不需要走完一圈,快指针一定会追上满指针,为啥,跟他说反证法,如果慢指针走完一圈,快指针肯定走完两圈,这一定可以保证快指针可以超过慢指针一次,他可能不太明白,反正我是这样说的,然后说如果这样的情况,如何找到环的入口,要我证明,我给他证明了一下。本以为这题到此结束,结果问题又来了,首先说我的证明有点问题,然后继续说我的快慢指针为啥定义为2:1的步长关系,我说我试过其他的,比如3:1,会出现跳跃的情况,就是快指针有可能会跳跃慢指针,导致快慢指针不会相遇,也就是相等,问题来了,如果是5:3呢,我想了一下,这可能跟环的周长跟5和3的倍数有关,他说,大概是这样的好像,然后叫我后面可以试着证下(也就是为啥是2:1,不是其他的关系)。
- 讲了下比赛,怎么分配任务的,感觉答的还可以。
- 讲讲C++的shared_ptr,我跟他说本质上就是普通的指针多了一层封装,核心是通过引用计数来实现的,巴拉巴拉讲了一下实现细节。
- 看我简历上没有写数据库,问我了解数据库吗,我说了解一下,本科学过关系数据库相关的,然后问我数据库范式,我讲的太细了,数据库范式引用的目的,第一范式,每一个属性都是不可分的,第二范式,消除非主属性对候选码的部分依赖,讲了下啥是非主属性、啥是候选码、啥是完全依赖、部分依赖,不这样会导致什么后果,还没说完,他可能觉得我有点啰嗦,将我直接将概念,然后把概念讲了下。
等下一轮面试,等了好久...
- 自我介绍,恐怖啊,又是这个。
- 然后好像没问下,问了下要转java或这ios,没有C++岗了,伤心,只能口头说了一大堆可以转的话,语言啥的不是问题,只要基础好,转啥啥都行的意思。
- 问我有什么想问他的,问了下那部门主要干嘛的,用什么技术,说想了解啥
然后叫我等下一轮面试。真快,10分钟都没有,吓死我了,以为凉了。
十分钟后,通知三面,一看是个美女,肯定是HR小姐姐无疑了。
愉快的聊天了,什么家在那,对工作地点有什么要求,转java或者ios能接受吗? 需要多久适应,我说一个月吧,不好说啊,我争取好好学。。。
然后问有什么想问她的,我说我能知道一下面试结果吗?她说我已经通过了面试了,一周以内发offer到邮箱,说了下实习工资的情况,问了什么时候去实习。
腾讯
内推二面挂
- 自我介绍,讲讲直播项目,直播存的是啥文件(.flv)?为什么不用hls,为什么用rtmp(因为业界公认的),了解nginx吗?
- 了解C的寄存器吗?(不懂),我说能不能提示一下啥意思,他说给个场景,int a[10] = {0}; a[12]=0; 我说下标越界,还有可能非法修改到该地址的重要数据,导致系统崩溃。他说他大致知道了,估计答错了
- 了解汇编没(看过一点,早忘了,回答了不了解)
- 稳定的排序,最差的时间复杂度是o(nlogn),我说是归并排序,并解释了下稳定性。
- 问我学过概率论没,我说本科学过,他说估计你忘了,我说我可以试试吗? 3个人,10个金币,每个人至少得一个金币,有多少种分法,他问我思路,没给时间,我只能说不会(真忘了)。
- 了解过fork,讲一下fork,fork为啥父进程返回子进程idd,子进程返回0,我说首先进程id为0的进程是系统调用进程,创建的子进程的id不可能为0,这样就可以区分出哪个是子进程,哪个是父进程,然后他问可以两个返回值可以互换吗?为什么? 后来我才知道互换的话,父进程没法知道子进程id到底是多少。
- 了解杀死进程的原理吗? 通过发送信号,也没答上来。
- 了解sizeof吗,给他讲了下,这是一个运算符,而不是函数,在程序编译阶段就可以求得变量的大小。
- 用C如何写出最短的代码, 一个整形变量,变量为0,返回0,非0,返回1。我答 a!=0;
a == 0 ? 0 : 1; 这两种方式,他说还有更短的, !!a,然后他说linux源码好多这样写的,你没看过吗?还真没看过。 - 问了下map的底层实现? map(红黑树)、unordered_map(hashtable),为什么有序的要用红黑树,红黑树本身即使自排序树,中序遍历就可以得到拍好序的结果,同时查找效率是o(logn)。
- 你会什么?(这道题我都不知道该咋回答,会C++,基本算法,STL之类的)
竟然等来了二面,唉,该凉的还是得凉。
- 自我介绍,讲讲直播项目(真他妈大坑,搞不起),延迟播放具体过程(啥的拼接不懂)。了解视频的编码和解码算法吗?I帧、P帧、B帧了,我真是自己作死了,都不会,凉很正常的。
- 讲讲比赛项目,瞎讲,没什么反馈。(人家一句就是匹配咯,我竟我话可说)。
- C++ new 和 malloc 的区别,总算会一个了。
- 网络连接的过程,我还问他是不是将三次握手、四次挥手啥的还是socket套接字的连接过程,后来讲了三次握手和四次挥手。
- 有什么想问的,凉的这么彻底,也就没问了,第二天一查状态,变成不合适了。
现场面
4月23号腾讯来重庆现场招聘了,没收到通知的我,硬着头皮跟同学过去了,面试官真好,给了我霸面的机会,感谢感谢。
- 自我介绍
- 做到题,一组数,数值在1-n之间,其中有一个数重复出现两次,找出出现两次的数,比如n=3 1 2 2 3 ,则重复的数为2
方法:hashtable 、 异或 1 2 2 3 和 1 2 3 异或 、 求和- 1 2 3 求和。 - 45亿个数,有一个数重复出现了两次,怎么找出,bitmap的思想 ,或者分治+hash。
- 讲stl,迭代器失效场景、sort实现等。
- class 和 struct的区别。
- I/O复用,没用过,他不让我讲下去,其实我知道一点点底层原理。
- 网络那块不会,他叫我看unix网络编程和zeromq框架。
面试官叫我不要紧张,多看书学习网络编程相关的。人真的很好。
二面
- 求最大公约数,手写,第一次还写错了,经过提示写了两次总算写对了,太紧张了。
- 讲堆排过程
- 讲内省排序过程。
- 异步编程和同步编程,没怎么答上来
- 接口回调,也没答上来,回调函数之类的感觉
- 死锁,编程中如何避免死锁,我讲了下死锁,说防止出现环路等待。。。
- 问项目算法和比赛文本分类算法,也答不出来。
总之全是算法,答的太水了。凉透了。
竟然苟到hr面
- 自我介绍
- 讲讲项目
- 父母情况,是否独生子女
- offer情况
- 到岗实习时间,有什么想问她的
非常感谢面试官给的机会,二面答的这么烂,还让我过了,真的要好好学习,好好学习!!!
面完,等了十天收到offer call。
58同城
视频面,加了面试官的QQ
- 面试官很好,先介绍了他们部门是搞搜索的。
- 详细介绍比赛,预测结果0.58是什么?为什么准确度提高不了。有什么办法提高。考虑过使用机器学习的方法吗?
- STL sort原理(内省排序,插入、快排、堆排,快排比堆排快,局部性原理)
- deque和list的区别
- 讲了下STL。
- 手写atoi,写的有点小瑕疵。
- 仿函数(函数对象)和 函数指针的区别,效率和扩展性。
上午面完一面,下午就开始二面。
- 自我介绍
- 了解linux下的C开发吗?如何查看一个进程有多少个线程。
- pstree offsetof container_of了解吗?全跟linux有关,不会
- 如何快速比较两个字符串是否相等,我说直接o(n)遍历,或者异或每个字符,复杂度都是o(n)。他说可以通过类型转换,比如将4个字符转成一个int,然后相当于比较int是否相同,o(n/4)。
- 写一个宏函数
- 大端小端,写代码验证系统是大端还是小端 union来实现
- 翻转单链表,手写。
- 如何查看一个子进程的父进程状态,getppid();
- cpu cache存的是啥(数据?)
- 动态共享库和静态共享库,跟他说了下静态链接和动态链接。
- 进程A如果可以访问到动态共享库中的全局变量,进程B能否访问到动态共享库中的全局变量,不懂,说可以访问,进程B这是没法访问进程A中的全局变量,因为进程之间的地址空间是独立的,然后他说这样的话,通过动态共享库是不是也就可以实现进程通信了?我一想,IPC通信没有共享库这玩意,没法解释
- 进程在内存中的内存模型,代码正文段、数据段(初始化和未初始化)、堆、栈段。
- 问直播项目,如何在linux下开发的,我说在windows下开发移植过去的。
总结
本人是个菜鸟,决定学C++是从去年快十月份的,当时啥也不会,静下心来,花了两个多月看完了C++primer第五版,也敲了大量课本的示例,总算对C++有了大致的了解,接着就是STL源码剖析,第一遍好多地方不懂,没办法,太笨了,继续看,第二遍的时候好多了,面试官问STL就有的聊了,这两本书感觉是很有必要看的,接下来就是effective c++ 和 深入探索C++对象模型了。这两本书感觉挺难的,看完或多或少知道点对象模型和内存分布的知识,还是挺重要的。
接下来就是UNIX环境编程,说真的,好难啊,我第一遍只看了些理论,没怎么敲,结果当然是理解不够,后面面试碰到这块的知识点处处碰壁,现在准备好好敲敲,好好再看一遍。这本书感觉是很重要的啊,虽然难,没办法,得看。
算法主要看算法第四版和严蔚敏的数据结构,让我终于理解了各大排序算法的思想,也能熟练的写出来了,也懂了一些查找的数据结构,什么平衡二叉树、红黑树啥的,算法第四版讲的很好。
其他的像操作系统,网络和设计模式这些都大致看了一些,剑指offer敲了好几遍,还是有些题不太会,菜啊,leetcode刷了些easy的题,不太够,还是得多刷题。
数据库是硬伤,没怎么用过,连最基本的sql命令都忘的差不多了,主要是看数据库系统概论这本书,了解了最基本的数据库知识,后续还得多看看数据库相关知识。
面经最主要是参考这篇:https://www.nowcoder.com/discuss/55353
真的介绍的非常详细,面试的重点题型啥的,大部分在这里面都涵盖了,我当时就是买了个小本本,跟同学一块把最常见的题的解法写到本子上。这样方便记忆,虽然办法很low。
经历了这次春招,我终于知道自己有多水了,好多东西不太会,也没做过啥项目,感谢腾讯给的这次机会,以后一定得好好学习,好好学习。
祝大家都能拿到满意的offer,祝牛客网越办越好!