归档 2018 年 3 月

阿里三轮面试失败的记录

一面

一面是电话面试,首先是自我介绍,介绍自己大概情况,我简单介绍了一下,自己大四要毕业了,考研没考上。
然后介绍下简历中写到的项目,问的比较细,比方说多用户是怎么实现?答曰用json封装好数据,里面包含用户信息;
为什么用socket而不是用做一个web界面,答曰因为自己用做一个也没啥意义;
又问如果项目做大的话还有哪些方面要注意,如何解决高并发?我想了想说增加服务器配置,部署在多个服务器上实现分布式,改进代码等,也不知道靠不靠谱。
下面闲聊了几句,期望工作地点是哪,喜欢用什么语言,哪个更熟悉等。工作地点嘛只要是大城市就好,语言我也不挑(因为都学的不精啊)。
下面又是介绍另一个项目,为什么要做,做得比别人哪儿更好,实时视频传输用的什么开源项目,是否给该开源项目做了贡献。贡献还真有,当时那文档写错了我给改过来了,提交了个PR,被合并了。
接下来又是闲聊,介绍自己的优点,有什么爱好,最近关注什么。我说最近比较关注电动汽车,然后又聊了几句。
下面是问我个人在技术方面有什么优势,我回答说学东西比较快,并举了个例子,当年Python一个小时上手,没想到这里给自己挖了个坑,接下来问我Python相比C++和Java有啥理念比较突出的,我就答不上来了。
C++用的多吗,用过哪些类库?我回答栈队列、map、set,其使用的也不多,
在项目中遇到过什么困难,又是怎么解决的?我当时做项目还真踩了几个坑,mjpg-stream的文档有一处错的地方,当时没办法了看源码才找到问题,clone了一遍给他改对,又提交了个PR,被合并了,还被点了个star。
还有什么困难吗,还有,当时树莓派PWM波输出的bug我也遇上过,当时外接了个模块才解决的。
还有什么困难吗,真还有,在调试socket通信的时候被缓冲区坑过,通过搜索引擎搜索解决的。
Linux用的多吗,vim会用吗,用过,但是不熟。正则表达式会吗?用过,但是不熟。
未来几年工作怎么打算,对自己有什么期望?提高技术水平,争取在大城市立足。
对语言有要求吗?没要求。愿意来北京工作吗?愿意。愿意来现场面试吗,当然愿意。
第一面面的比较愉快,因为问的是与项目相关的,并且都不难。

二面

第二面就没这么轻松了,也是由于自己准备不充分导致的,感觉这次挂掉的大部分原因都在这里。
在西溪园区现场面的,面试官人很nice。中间有点记不清了,只对自己答不上来的和答得不好的印象比较深。
首先还是自我介绍,谈一谈对自己未来发展的计划,然后讲一下做过的项目,在讲的过程中问面向对象三大特征,我答不出来。
什么是多态,我举了C++中子类重写父类的虚函数的例子,当时表达不是很好,再加上面试官估计平时搞C++不如java多,说我这是继承不是多态。
Linux里怎么看发行版?当时忘了,毕竟不常用,在回去的路上想起来了,是uname -a。
Linux里怎么看磁盘分区情况?当时也忘了,猜了个fdisk,结果猜错了,正确答案是df。
怎么做ssh免登陆?我没理解这个是实现证书登陆的意思,回答了不知道。平时只用用户名密码登陆吗?也用证书。证书怎么配置?生成公钥和私钥,私钥自己留着,公钥放服务器里,再改ssh的配置文件就好了。
怎么看IP地址?我又把Windows的ipconfig和Linux的ifconfig搞混了,熟练度不够的锅。
http和https哪个好?那当然是https好,为什么?因为有加密,https在http上封装了一层,不能被截获和篡改。不能截获吗?其实能,不过得到的是加密过的,不容易得到里面的东西。什么情况下会得到?服务器私钥泄露了。
给你一个项目,要怎么样去做,怎么样算做好,感觉这里答得也不算好,团队协作刚开始没想起来,经过提示才加了上去。
你有什么要问我的?blablabla。
就这样,结束了二面。

三面

三面是电话面试,比较开门见山,简单介绍之后就问那个编程语言比较熟,我选了C。
C语言里的堆和栈怎么理解?堆是new出东西放的地方,栈是程序互相调用传参的地方,还举了个例子,递归太多会爆栈。
printf函数如果得到的参数只有”%s”,后面没有给字符串,会怎么样。会输出一块未知的内存区域。
为什么会这样,因为没给字符串的地址。
会有什么结果,这里把字符串地址当成0地址了,以为程序会崩溃,其实是随机地址,不一定会崩溃,答得不好。
再说点相关的,函数调用约定有没有印象?什么cdcall,fastcall?我不知道。
压参顺序知道吗?答曰从后往前,然后面试官给我讲了讲上个printf问题的原理。
long、int、short是占几位,我把long忘了,答平时要么用32位的int,要么64位的longlong。
如果print一个int,但是传入的是long long,会怎么样?会把longlong的一半当int输出。
print %d和%s,但是传入的是一个longlong和一个字符串首地址,会怎么样?我回答说后面的字符串输出不受影响,其实是longlong的后面32位被当做了字符串的首地址。然后面试官给我讲了讲这个问题的答案和原理。
acm比赛的内容是什么类型?给题意和数据,输出结果,blabla。
能写个strcpy吗,能啊,strcpy的参数是哪些,源地址、目标地址,长度(其实没有长度,经过提示才改过来)。具体怎么实现?开个内存区域拷就好了。
能让程序快一点吗,用memcpy,不用memcpy呢?呃呃每次考8个字节。
为什么你理解每次考8个字节要快?为什么一次非要8个字节?当时脑子不好使,大约把8个字符当longlong拷就刚好8个字节。
面试官又给我讲了讲这个问题的答案和原理,每次读总线宽度个bit,并且读的时候内存对其以提高cache的命中率,中间问了问编译器优化是在什么时候优化的?不知道。
如何获取当前设备每秒的吞吐量?呃能具体点么。了解现在内存的双通道吗,现在计算机处理能力的瓶颈是什么?CPU的处理速度主频,CPU和内存的通信速度,也就是外频。怎么测外频?我不知道。
知道机器的性能,如何使得程序的CPU占用率稳定在10%?在一个时间周期内执行一定数量的命令,数量到了就在这个时间周期内不再执行,具体实现的话,读内核时间,呃说不上来了。
面试官又给我讲了讲这个问题的答案和原理,大概意思和我想的差不多感觉。
在学计算机期间最有成就感的事情?中间我提到了一道算法题,结果给自己挖了个坑,说到后面卡壳了。
你有什么要问我的?blablabla。
嗯那好,保持通信畅通啊。
就这样,过了几天网站上显示已回绝。

总结

现阶段的主要问题是:

  1. 项目经验不足,只做过类似于玩具的项目;
  2. 没有一种比较深入的语言,接触到的东西都浅尝辄止。

尽快找到工作是解决这两个问题的办法。

1