当前位置: 首页 > 面试经验 >

23届考研-c++面经(华od)

优质
小牛编辑
72浏览
2024-09-18

23届考研-c++面经(华od)

  •  个人情况

23届考研,江苏某双非一本,软件工程专业,四年成绩排名11/67。大学期间蓝桥杯省一,团队天梯赛省二,最高一次二等奖学金,国家励志奖学金,除此之外无实习无项目,毕业之后选择再考一年,但是成绩不如意,没找调剂,开始找工作。

差不多从三月开始准备,主要是三个方面,算法刷题,C++学进阶的知识点,准备项目。

  •  个人心得和建议

首先要夸一下HR栗栗,很负责,一直在跟进我的流程,我有什么不懂的都耐心给我解释(机考的时候考了300分刚好及格,我想重考,跟我解释重考要申请,还不一定过,来来回回要一个多月,最终我选择了没重考;投递部门的时候我想换部门,耐心给我解释很多部门没非目标的需求,别的非目标需求很多都是d3或者目标带非目,但是非目标也有占比要求,我不好进,帮我投了一个合适的部门),每次面试完都是立刻帮我去问结果(上午12:00结束技术一面,下午技术二面之前一面结果就帮我问好了),每次结果一出来,立刻就帮我约下一阶段的面试(机试完就第二天性格测试,HR面晚上面完,当天晚上就帮我约好了技术一面和技术二面)效率真的很高!另外每次面试前都会给我发一些注意事项,谈薪的时候还帮我多争取了1k!

个人介绍很重要,所有的面试一开始都是要我自我介绍,最好提前写一下背下来,我的个人介绍就是个人情况,学校奖学金,竞赛获奖经历什么的。再加上一些个人优点(用一些例子证明,比如自学能力强,自学得了什么奖等)。然后HR面和主管面不用介绍技术相关的,技术面可以说一些你熟悉的技术(就是面试官问到你一定能说出来并且说的很好)。

对自己简历上的项目一定要很了解,技术面面试官大概率会问你项目中遇到过什么问题,是怎么解决的,多准备几个,体现自己的解决问题的能力。回答项目的时间越长,八股的时间就越短。

自己不熟悉的东西,简历上不要写,回答问题的时候也不要提。尽量把话题往你熟悉的领域带,就像我下面写的一面那样,基本上都是你回答的过程中说了什么,面试官会接着话题再问你,如果你不给面试官这样的机会,面试官不知道问什么就随便问了,那样有可能会问到你不熟悉的问题,那样就很糟。 

如果你有空窗期,像我就是考研了一年,HR面试和主管面试都会问你原因,总之就是表达出你是一个追求稳定的人,追求提升自己,回答正能量一点积极一点就没问题。

心态放稳,技术面试的体验和面试官有很大关系,像我一面的面试官,问的八股文都很基础,算法题给的不是很难,限时30分钟,但是我二面的面试官就是很难搞的那一种,可能是听我自我介绍里面竞赛奖项很多(虽然都是没什么含金量的),一上来就直接写LRU,还限时15分钟。我写LRU的时候浑身都是汗,紧张的不行,写完对着代码问我思路,中间某个地方因为太紧张慌了说不出话来,还好及时调整了一下,捋了一下思路说出来了。然后问项目的时候更刁钻,要我一点一点解释给他听(有可能就是为了考查我理不理解这个项目),还好我对项目足够了解,都答上来了,后面也没问八股文。

  •  流程

5.20 机试

5.21 综测(从综测到HR面隔了一个月,期间在准备技术面)

6.20 HR面试

6.25 上午11:00 技术一面 

6.25 下午6:00 技术二面 

6.27 主管面

  • 准备过程 

算法 

面od之前算法一直刷的代码随想录;准备机试刷的HR栗栗姐的题库;准备技术面试刷的hot100。 

语言和项目

我大学四年会的C++只是基础语法,像什么C++11新特性,智能指针,容器,迭代器都不会,所以就在网上找教程学C++进阶知识。我看的是网上一个老师讲的C++基础和进阶,包括C++的基础特性,模板,运算符重载,STL,对象优化,智能指针,常用的几个设计模式,我觉得都讲得很好,大家感兴趣的话可以问HR栗栗要。 

项目也是在网上找的C++视频教程,照着教程一边学一边敲,这个我就不推荐了,网上有很多。学的过程中不一定要跟着敲(前提是你能看懂代码写的是什么),重要的是弄明白项目的整体框架,基础的比如项目文件夹是怎么分的,哪里放头文件,哪里放源码,哪里放第三方库,哪里放生成的可执行文件;进阶一点的比如项目是怎么分层的,数据层怎么设计,业务层怎么设计等等。如果第一遍看不太懂可以多看几遍,我就是第一遍看的似懂非懂的,看第二遍的时候就懂了,然后就对整个项目有一个整体的了解了。 

  • 机考

考的剩余银饰的重量,字符串序列判定,数组排列求和。前两道题很简单,当时数组排列求和是一道有问题的题目,最高通过率只有50%好像。题目说的是将某个元素插入到某个位置算一次移动,我没思路,就写的是交换两个元素的位置算一次移动,然后也有有50%的通过率。如果因为这题导致没过,申请重考百分百成功,我是考了300分,正好过,申请重考的话要等一个月,我就没申请。 

  • 综测

这个比较简单,网上有很多答案。

  • HR面(资面) 

1、先做一个自我介绍吧

2、介绍个人情况,校内奖项,竞赛,毕业之后的去向以及原因......

3、你的期望薪资?

4、校内期间参加竞赛的原因和动力?是团体的集训还是自学,为什么这样选择?

5、你觉得你是天赋型选手还是勤奋型选手,为什么?

6、问了一些校内的经历 

7、从哪里了解到招聘的这个岗位以及目前对我们的岗位和业务有哪些了解?等等 

  •  技术一面

1、先做一个自我介绍吧

2、你这个项目是自己做的吗?

我是在github上找的,然后看源码,自己再实现一遍。 

3、从简历中挑一个你觉得最有难度的项目,简单介绍一下这个项目

4、介绍整个项目,对一些有难度的细节展开说一下,说了一下这个项目用到了哪些技术。

5、你在这个项目中遇到过什么困难吗?

说了一个最后测试的时候程序发生死锁的问题,然后排查问题,分析问题是如何发生的,然后我是如何改进的

6、还有吗?

有一些困难点没有实现,但是我思考过实现方法。比如如果网络拥塞严重,如何保持正常通信。解决方案就是使用心跳机制balabala 

(ps:应该在自己了解的地方多说,展示自己技术的深度)

7、你刚才提到死锁,那你讲一讲死锁吧 

死锁要发生必须满足四个条件: 

互斥,请求与保持,不剥夺,循环等待。(面试的时候我没想起来这四个名词,但是对于这四个条件都用自己的话解释了一下)

8、你说一下进程间通信的方式 

管道,匿名管道,消息队列,信号量,信号,共享内存,套接字,文件... 

9、你刚才说你项目中用到了C++的容器,说一下你对容器的了解

C++容器分为关联容器和顺序容器。关联容器有map、set、multimap、multiset、unordered_map、unordered_set,顺序容器有vector、list、deque、string。

顺序容器中vector底层是一个动态数组,每次扩容是以二倍大小进行扩容的。

list是双向循环链表。 

deque底层是是由两部分组成的,一部分是一段一段的连续内存区域,存储deque里的元素(每一段的大小是1024字节,面试的时候忘记说这个了),但是段与段之间不一定连续,另一部分是一块用来存储地址的连续内存区域,里面存储的是每一段的首地址。balabala(关于deque的底层实现我很难在这里打字介绍出来,感兴趣可以去自行了解一下,说的时候只要让面试官理解你说的是什么就可以了) 

还有容器适配器stack和queue是基于deque实现的,优先队列priority_queue是堆,底层存储的容器在默认情况下是vector,可以自定义元素比较函数来实现大根堆和小根堆。

关联容器中map是一个哈希表,内部元素是有序的,底层是红黑树,红黑树相较于平衡二叉树宽松一点,平衡二叉树要求左右子树高度相差不超过1,红黑树只要求左右子树的高度相差不超过二倍。

set也是用红黑树实现的哈希表,内部元素有序,元素自动去重。 

unordered_map就是一个简单的哈希表,内部元素无序。 

其他的想不起来了 

10、手撕算法,限时30分钟 

leetcode-452.用最少数量的箭引爆气球

  • 技术二面

(整个面试过程完全没问我C++相关的东西,手撕算法只是问我思路,有些C++的语法和函数他问我用法,全是从项目框架和设计思路问的) 

1、先做一个自我介绍吧 

2、来做道题吧,限时15分钟

手撕算法,leetcode-146.LRU缓存

3、简单介绍一下你简历中最复杂的一个项目  

4、把你这个系统的框架,简单画一下吧,用电脑上的随便什么画图软件都行

(打开画图软件,一时间不知道怎么画比较好,突然想起来muduo网络库里的Reactor模型,简单画了一个图)

5、又问了一个问题,具体怎么问的我给忘了,应该是哪一部分用到了epoll,这一部分我解释了很久处理新用户连接和处理已连接用户的消息都是用的epoll,每一个Reactor都是一个循环,只不过main Reactor专门用来处理新用户连接,sub Reactor专门用来处理已连接用户的消息。 

6、你项目中用到了nginx,是怎么用的 

我这个项目完成之后,考虑到单个服务器能够处理的用户最大连接数有限,要想提高并发量,最简单的方式就是扩展到多台服务器,然后我就选择用nginx做一个tcp的负载均衡,在nginx中设置一下各个服务器的权重,我是设置的轮询的方式来扩展的,也就是各个服务器的权重相同。但是我只有一个笔记本,所以我只是能够这样设置,没有真正实现。

7、redis你是怎么用的,中间他问了我很多问题,比如服务器之间直接进行通信为什么不行,你这个项目里用到的redis的发布订阅到底是用来干什么的 

8、你项目中还用到了MYSQL,是怎么用的

其他的想不起来了

  •  主管面(综面) 

1、主管自我介绍

2、先做一下自我介绍吧 

3、(因为我在自我介绍中说了自己毕业之后的去向和选择)他就问了这样选择的原因

4、选择来我们这个地方有什么特别的原因吗,能接受这边的环境吗 

我说自己有亲戚在那边,能接受。 

5、期望薪资是多少呢

我说了自己期望薪资(和HR面说的一样)

6、在学校期间参加竞赛的原因和动力是什么

一是对编程有兴趣,二是算法是比较基础的东西,可能有些技术很厉害的人算法不是很精通,但是算法很厉害的人技术肯定不差(因为我大学期间参加的都是算法比赛,蓝桥杯一次省一,一次省二,团队天梯赛一次省二一次省三)。

7、你说你对编程有兴趣,你大学期间不算做作业和课程设计,自己基于兴趣写的代码量有多少

有很多小项目,有一两千行吧。

这一两千行也不算多啊

(感觉有点压力了)是不算多,但是我觉得代码量这个东西不是很有代表性,然后将自己考研期间系统复习408的收获,自己动手写项目的收获等等,意思就是要思考,如果写的多不思考那么代码量也不具备参考性,就是表示一下自己基础好(因为前面主管说我基础比较好,我就顺便夸一下自己) 

8、对od有什么了解吗

夸了一下华为od,说自己能接受加班

9、你还有什么要问的吗?

我想知道如果我能入职的话,我现在学一些什么能对我之后的工作有帮助

主要是linux调优什么的,然后介绍工作语言C和C++各一半balabala又说了很久

10、(因为我之前说考研的时候说父母不支持自己考研)我还是想知道你父母为什么不支持你考研

父母想让我早点工作,我是想第一份工作找一份比较满意的balabala

11、又问了我的性格,爱好等等

12、其他的想不起来了

 类似资料: