C++后台开发日常实习(可转正),运气不错,问的基本都准备到了
来贡献面经攒人品,适合找实习的速成选手
2.6第一次面字节,一面把我问傻了,果然面完就收感谢信
20天后,2.28第二次面字节,三个半小时 三轮视频面,3.1收offer,感觉我的例子可以给大家信心hhh
部门是北京广告系统(问得很底层),互联网金融中心,入职时间还没确定,可能三月下旬,求小姐姐室友!!!(看了北京房价好心累.....
本文思路:
一、面经及部分解答
二、面试准备心得
三、我的学习笔记和学习材料链接(C++语法、操作系统、计网的常考点)
只投了字节,笔记也是针对字节后台开发最近几周的面经总结(2020.1~2),奉上来给近期有C++开发面试的小伙伴参考。
一、面经及部分解答
一面
-
自我介绍和项目延伸
-
weak_ptr了解吗(我讲了解决shared_ptr的循环引用问题,面试官就没再问了,应该算押到考点...
-
move语义?(讲了移动构造函数的原理)
-
volatile?
-
template了解吗
-
元编程(meta programming) 了解吗
-
原子操作?
-
TCP和UDP区别,UDP使用场景
-
算法:
-
[1 2 3 4 5 6] 排列成[1 3 5 2 4 6] (奇数排右边,偶数排左边,不考虑顺序)
(剑指offer原题)我先用了冒泡,然后面试官问了时间复杂度(O(n2)),想了一会后改成O(n)
-
股票问题 ([1 3 5 7 2 3 ]是每日股票价格,买一次卖一次,问如何使得收益最大,即求最大差)
二面
-
自我介绍
-
算法:多个有序数组排序 vector<int> fun( vector<vector<int> > )
先用了priority_queue + int [], 面试官同意想法后开始写,但是后来发现复杂度太高,改成map+int[]。后来网上查了,会写一个类解决(和我的想法也差不多)。总共写了40分钟(用法不熟悉 写得有点慢),写完面试官说“时间差不多了,结束“。 (以为二面要凉了,没想到5分钟后接到电话约三面,hr每次都说” 面试官已经在等你了,快去吧“)
三面
-
自我介绍
-
实现一下 memcpy() [要点:地址重叠]
3. 对void*你了解什么?
4. int a[10000000]会有什么问题?
5. 如果想让一个函数在main函数之前执行,该怎么做?
(三面答得不太好,网上搜集了一下答案,略长,有需要的小伙伴往下拉,和笔记放在同一个网盘链接)
二、面试准备心得
我从2020.01开始准备找实习,分为以下两步:
1. 从零开始刷题,《剑指offer》 (一个月)
本科CS,主要在做科研,代码写很少,选择C++是因为Java更差(
1月份开始刷剑指 offer,当时效率很低,一个月才刷完67道题,基础也没看,面试前一天晚上看了面经,感到绝望.....
果不其然,2.6一面结束(狂怼C++语法基础),就收到感谢信了。
不过唯一值得提的是,刷题时,我会给每道题写评价(e.g. 会的/不会的/很神奇的),针对自己弱点总结,比如从这道题中学到的思路、数据结构使用方法,有必要的话也贴上核心代码(做了个excel表格),虽然我刷得慢,但是每道做完都会保证自己第二天见到还能做出来(当然可能也仅限于第二天...)
好处是,准备第二次面试时,我没时间刷题,面试前的上午,快速看自己笔记复习,基本就回忆起了大部分的题目思路。(下午运气好 碰到2道上午手写过的原题变形...所以剑指是真的要好好刷)
2. 看书补基础《C++ primer plus》(10天)
一面完懈怠了一周,然后看字节今年hc多,决定换个部门再试试。先在各种内推渠道,海投了8、9个字节的岗位,却一点动静也没有。内推的学长告诉我简历还被锁,也没法手动取消,只能等着。于是在什么也干不了(而我也没法投其他公司,因为一般都只要2020届校招)的遥遥无期的里(半个月),反倒可以静下心看书。之前因为时间仓促,都是对着面经看博客准备的。现在想来,那样的知识不成体系,面试官一旦深入问下去就知道你只是背过面经的答案。本科对C++的接触是课程(不深入)和cout,并没有真的用到它面向对象的特性(逃)。反正时间多,开始看大块头《C++ primer plus》,虽然很多地方把它介绍成工具书,但是我看了之后提升很大。90%C++语法相关的面试考点,都能在书中找到,而且讲得深入浅出,比如设计某C++11新特性的目的、它的具体原理和作用、和原来的类似功能比有什么进步,非常详细,也没我想象中工具书那样枯燥。
认真高效地刷了一周,每天给自己卡任务,不看完第几章不睡觉那种,一边看一边对着C++面试要点写了笔记(附在最后的链接里)。刷到一半的时候忽然接到约面试的电话了,这回有信心多了。面试前两天刷完C++ primer, 然后对着面经总结考察重点,并靠博客+书解决,不了解的概念就去查一下并写个小程序用一下。面向面试而言,比如为了了解“STL”,可以搜索“STL 面试”, 看看面试官喜欢考什么,尽可能准备到各种问题。
对于计算机基础(计算机网络+操作系统)的知识,我翻出了很久之前上课的笔记,对着面经,划出重点,快速回忆(背)了一遍,并口述出来(模拟面试,不然总觉得自己懂了 但是面试时候不知道说什么),提纲也写在笔记里了。
然后就面试了...每一轮都觉得自己凉了,5分钟后收到hr电话准备下一轮。(所以那5分钟不该浪 应该迅速搜索上一轮面试没回答出来的问题,并据此推测他们团队技术侧重什么,等会可以拓展什么)
唯一的遗憾是,准备面经时只看了一面的问题,没想到三轮一起的。所以第三轮回答得不大好,其实类似的问题在其他人的面经里出现过了(不过倒是没看到答案,所以这次把整理好的答案也放上来分享了,仅供参考)
另外,还要推荐一本后台开发的书(看了一半),从另一个帖子里看来的:《后台开发:核心技术与应用实践》,tx工程师写的,觉得很实用,但是找了好久才找到电子版,放网盘里各位自取。
3. 面试过程小心得:拓展
总之,表现自己是个思维敏捷的fast learner。多说点,最好不要很简短回答完就停下,尽量往你知道的上面扯。即使不知道,也可以把一件事情正过来反过来说,说不定就说到他更加认同的方式了,当然也不要乱说、给自己挖坑。反正他不想听的话,会找新的话题的。
写代码的时候,即使一开始想不到最佳算法,也要和他讲一下思路,或说一下大体分析。不要想不到最优解就一直闷头苦干。
其实准备得还挺仓促的,面向面试准备面试,面试除了实力储备,也要经验积累,一次不行两次再来~
不过,速成型选手我也知道,这样准备的实力挺虚,入职前要保持充电!
三、资源链接
C++学习笔记/三面参考答案/推荐书籍
希望对大家有帮助!祝各位offer多多!
#字节跳动##实习##C++工程师##面经#