字节跳动C++研发工程师(三面全通过)
7月14日(一面、二面)
一面45min:
首先做了自我介绍,然后简单回答了面试官对于项目中的一些疑问,没有太多的深入。
一面面试官比较和蔼,问的问题比较专业,比较基础,简单做了一下回忆:
virtual函数能不能用在构造函数中,为什么?
我的回答:一般构造函数不能virtual,析构函数才用virtual。面试官说,为啥,我说我平时都是这么用的,不确定啥原因。面试官也挺好,说没关系。
你遇到过内存泄漏问题吗?
我的回答 :没有遇到过,但是对同一个区域进行两次del,应该会造成内存泄漏,其他不清楚。面试官说,好的。
你知道系统死锁是 怎么造成的吗?
我的回答:操作系统我没有学过,但是 我是做网络的,我们网络中也有死锁以及防范的方法,于是将计算机网络中的各种锁成因,以及避免方法进行了说明,并在最后说,我觉得所有的死锁问题根源在于资源的抢占,并且,多个进程间形成了循环依赖,即得不到被其他进程占用的资源,也不释放自己已经占据的资源。面试官比较满意。
说说hash冲突的解决方法:
我的回答:一般由两种常用方法,开放地址法和链地址法,结果自己蠢,把两个方法的实现方式将反了,不过面试官大体上听懂了我的意思,还比较满意。
你一般用过C++的那些高级属性:
用过容器来的,数组,队列,栈,优先级队列,hash类的map,set。 面试官说还有别的吗?我一时想不起来,他说 用过智能指针吗,我说没有,了解吗?我说不了解,用过auto吗?我说用过,一般用auto做函数或者变量的定义,然后大致说了一下我平时使用的场景。感觉自己有点弱。
了解进程间的通信吗?
我说,进程间的通信包括管道,命名管道,消息队列,共享内存等。一般管道比较慢,消息队列做同步,共享内存快。
http提交表单的方法有啥?
我说,不知道,估计面试官是想知道post,get哪些方法吧,早都不记得了。
C++函数只声明,不定义会在哪一步报错?
我说,我不知道,一般我没有这样写过。
最后是一道编程题,链表的题目,很简单,但是还是有个小错误,在面试官的诱导中,自己发现了。
******************************************************************************************************************
******************************************************************************************************************
5分钟后,hr打电话,说一面通过,10min后二面可以吗,我说可以。
二面(50min)
二面不用自我介绍了,直接上来就说,我在看你的博客,我当时惊呆了,面试官在我的博客上寻找着知识点,整个氛围比较轻松,他说你刷了很多题目,我说,是的,然后看了leetcode600多道题目的刷题量。
挑了一个自己觉得做的最好的项目介绍,我就挑了一个介绍一下。回答了面试官的疑问。
问了我TCP是怎么保证可靠性的,udp呢?
我的回答:tcp本身通过ack确认机制来保证确认信息收到了,并通过重传机制对丢失信息进行重传,也就是说,应用端将数据交给TCP,自己啥都不用管了,他一定能传到,所以称之为可靠性,udp没有这样的机制,直接 最大化传输,但是,并不意味着他就不可靠,只是可靠性的保证交给了应用端去做。面试官挺满意。
我在你的博客上看到你负责远程服务器集群维护,能具体描述一下吗?
我就把自己实验室集群远程访问那套东西做了介绍,面试官问我他们如何通信的,我把ssh的通信过程搬过来。
c++和python的区别?
我说,动态静态的区别,C++要经过编译器,python不用,直接解释器就可以搞定了运行了。回答的太简单了。
我说,动态静态的区别,C++要经过编译器,python不用,直接解释器就可以搞定了运行了。回答的太简单了。
5层TCPIP中,每一层都包含啥协议?
物理层:802,链路层,arp(这块应该有争议),ip层:IP协议,传输层:tcp udp 应用层,http,ftp,snmp邮件地址解析协议。回答的太少了。
编程: 动态规划,完全背包,挺简单的,但是,脑子短路,有个地方写错了,但是面试官说,思路对了,就过了。
******************************************************************************************************************
******************************************************************************************************************
然后hr说过了,约了面试时间,7月17号下午3点。
三面(2小时)
面试官是前端开发部门的leader。
可以说,三面包含压力成分。题目真心难。
首先,自我介绍,挑一个项目介绍。然后非要我的源码,幸好在csdn上保存了,所以,直接就当下来,一个文件一个文件的讲。问了很多问题,将近问了50分钟,终于讲明白了。
没有实习经历吗?我说有,华为算法研究部实习过,他说,为啥不写在简历上,我说,简历做的早,之后没有补充。
然后开始编程,问了我一道链表题目,我直接说了核心解法,他说,你刷过,我是是的,好,过,下一道,字符串的题目,我说我可能也刷过,我先写吧,面试官笑着说,好的,然后,思路对了,内置函数忘了怎么用了,他问,如果这道题 你忘了这个内置函数怎么使用了,你怎么实现这样的功能,我说这个函数的源码我看过,可以直接用kmp等效。他说好,你能给我讲一下吗?我讲的不好,毕竟不会表达,然后,我说了一句 ,能直接上代码吗?他说可以,我就用了3分钟,写了一下kmp,之后,面试官将我代码拷过去。
最后一部分是面试中搞得最难的,当时,已经怀疑人生了,面试官让我解释 tcp为啥3次握手,4次挥手,都是 为了防止哪些情况的发生。TCP在做数据传输的时候,其中 包含那些信息。我回到了ip,name,以及控制字段,面试官说不够细致。然后说了好久,我还是回答不出来。
然后又问,你觉得客户端的通信时怎么建立起来的,我大致回答了一下,他说不够细致,太笼统。我只能老老实实说不知道,然而,他并不罢休,说,如果给你这样一个任务,你会怎么实现。我当时真的是觉得要凉了。
之后又做了很长一段时间的交流,询问我对新技术的学习能力,简单把自己的一些经历做了一下讲解,证明自己好学。然后让我问他问题,这个时候大家一般要抓住机会,多和面试官交流。多为一些有意义的问题,即使失败了,也会有很多对自己有用的信息。
三面结束之后,真的觉得自己凉透了,发呆了有一个多小时。
结果,今天早上hr小姐姐说我是她负责的人里面第一个通过的,我当时真的是惊呆了。还说,她还不知道后面的流程是啥,让我先等候,先给我通知到,然后去申请意向书。
总的来说,放平心态,即使面试官给很大压力,也要微笑面对,不会就说自己没有接触过,以后会努力学习一下,会就将最佳的状态拿出来。另外,刷题很重要,面试官发现你算法比较6的时候,会有极大的加成。如果遇到感觉上相似的问题,要善于将自己领域的东西引过去,此外,有实习经历的简历一定要说。找一个能说的超级清楚的项目,最好有源码的,把他说的清清楚楚,会有很好的印象加分。简单分享到这里。