2016阿里云实习面经

来源:互联网 发布:萧山网络问政供电局 编辑:程序博客网 时间:2024/06/05 18:23

0. 前言

本文仅为博主的个人面试经历,如果以下内容对您有帮助的话,请不要忘记请我吃鸡腿^_^。

05/11/2016, 新增资料推荐部分。

1. 一面

一面加起来一共30+分钟, 主要是围绕项目问一些问题。

  • 面: 聊聊你做的第一个项目frog
  • 我: 主要说了 1. 做这个项目的原因(需求) 2. 项目中使用的相关技术 3. 自己通过做这个项目学到了什么东西 4. 认识到了自己的一些不足和开源的魅力。

    注: frog 是笔者写的一个http 库,代码托管在 https://github.com/okingniko/frog

  • 面: 看来你对服务器后台设计有些研究啊,说说常见的服务器端编程模式

  • 我: 主要是参考《linux 多线程服务器端——使用muduo库》和《unix网络编程》相关章节以及平时积累的一些东西 进行介绍。

    技术注解: 里面主要提到了prefork, pre threaded(线程池) ;reactor和proactor等模型,以及根据服务器是计算密集型还是I/O密集型进行一些组合的情况。

  • 面: 那你自己设计服务器会采用什么模式

  • 我: Reactor + 线程池, 巴拉巴拉。。。最后讲了一下epoll怎么使用。

    技术注解: Reactor模式实际为 非阻塞I/O + I/O多路复用(select, poll, epoll)

  • 面: 那你讲讲epoll的边缘触发和水平触发的区别

  • 我: 边缘触发是在监听的文件描述符上有新的I/O活动(例如新的输入)时,触发通知; 水平触发是在文件描述符上可以非阻塞的执行I/O系统调用时,此时认为它已经就绪。

    技术注解: 具体可参见《linux/unix系统编程手册》第63章和 UNP的第6章,写的不能更棒的两章。

  • 面: 多线程服务器下,你会开多少线程。

  • 我: 具体我不太清楚, 我看过的开源软件suricata中默认设置是1.5倍,所以我一般根据系统的核数设置为1.5倍。
  • 面: 那你实际上是不太清楚了
  • 我: 嗯, 那您能帮我解释一下么
  • 面: 这也是个经验值,但至少要比CPU核数要多,因为有些线程会处于空闲状态,等等。。。

  • 面: 我看你项目中用了一些C++11的feature, 里面有些用的太过了,比如shared_ptr(智能指针)和lambda函数

  • 我: 是的,智能指针会带来额外的开销(维持引用计数)、lambda函数看起来也不是那么的直观,必要的话我会考虑用函数指针来代替。

  • 面: 有没有什么问题问我的。

  • 我: 没想到什么特别好的问题问您。

2. 二面

二面主要是一个实力很强的中年男子,按照我写的简历一行一行问,大概持续70min。

  • 面: 看了你的简历,简单聊聊你的项目。
  • 我: 和一面一样,介绍了一下自己的项目

  • 面: HTTP了解的怎么样,问了一些状态码比如400 , 503 Etc..

  • 面: 简历上看你写,明白了多线程程序调试的难度,明白了系统日志记录在多线程程序中的必要性。 你能介绍一下么

  • 我:我一般用gdb调程序,但gdb调多线程程序十分的不顺手,经常会阻塞在某个线程,而且由于多线程中间结果具有不确定性,有时会得不到预期的目的。

  • 面: gdb的相关使用,比如如何查看所有线程, 查看堆栈,Etc..

  • 面: vim编辑器平时用不用,用什么插件
  • 我: 我一般把vim当编辑器用,里面加了syntastic语法检测插件,目录树nerdtree插件,因为我写c/c++, 所以还加了ctags插件。
  • 面: vim的一些操作,比如如何快速跳到第一行, vim怎么分屏, Etc…

  • 面: 你对内存管理了解的怎么样

  • 我: 还行吧
  • 面: 那你给我讲讲STL中allocator里面的结构
  • 我:呃呃呃, 您是说simple_alloc么
  • 面: 对
  • 我: C++维持了一个存储池,以链表形式连接, 若所需分配的容量较小,则从存储池中获取, 并改变相关指针,若所分配的容量较大, 则通过malloc进行分配, 但是我在陈硕写的书里说现在由于机器性能比较好,直接都用malloc分配,这块我还要回去确定一下。
  • 面:那c++ new 是怎么实现的
  • 我 : 调用malloc进行分配
  • 面: malloc是C库,不能算是底层调用,你有没有自己实现过一个malloc函数
  • 我: 没有T_T

    技术注解: 这块可以在CSAPP 第9章虚拟内存中找到, 超级好的一章内容,可惜看晚了,另外,网上也可以搜索到怎样实现一个malloc的博客。

  • 面: 有没有写过一些其它的东西,简历上没有的

  • 我: 1. 看过《集体智慧编程》写过一个简单的搜索引擎, 2. python写过各类的爬虫(模拟登陆)3. Web数据管理课上,基于BWT算法,用C语言写了一个数据压缩+检索的一个程序。

  • 面: 你写过的东西有没有给别人用过

  • 我: 我觉得写得不错的程序, 就给实验室和宿舍的人用过

  • 面: 谈谈你关于服务器开发的学习经历

  • 我: 1. 计算机网络,APUE, UNP, TCP/IP详解卷一 2. Linux/Unix系统编程手册 3. Linux多线程服务器编程—使用muduo C++网络库 (正在看) 4. InfoQ相关文章,GitHub相关开源代码

  • 面: 平时有没有看过什么源代码

  • 我: 暂时没有看过什么大型的源代码,我觉得技术遇上瓶颈了或者有目的性的去看源代码,效率会比较高。

  • 面: 你现在用的gcc版本是什么, 有没有自己编译过glibc.

  • 我: gcc我一般用4.8 +版本,因为4.8以前的正则表达式没有实现。Glibc没有编译过,T_T.
  • 面: 平时写博客吗
  • 我: 写过一些,不过看的人不多
  • 面: 装过linux吗
  • 我: 装过各类发行版(centos, ubuntu), 不过没有用过像archlinux那种,根据FHS自己来搭建一个linux系统,以前刚出Centos7的时候,写过一个教程,看到人很多。

  • 面: 你在学校里处于什么层次

  • 我: 中上游吧,天分不够,只能靠努力了。

  • 面: 暑假能保证多长的实习时间,要满三个月

  • 我: 如果我决定去您那边的话,肯定不会中途走的。

  • 面: 有没有什么问题问我的。

  • 我: 没想到什么特别好的问题问您。
  • 面: 再见
  • 我: 祝您周末愉快

3. 三面

三面依旧是技术面,时间大概在30+分钟,高冷的声线感觉像 神牛。

  • 面: 简单介绍一下自己
  • 我: 巴拉巴拉。。

  • 面: 谈谈你印象最深刻的一个项目

  • 我: 和一面一样,进行项目讲解。

  • 面: 你在你的实验室设计什么系统

  • 我: 我们这边是一个整体协作的系统,我负责后台的检测,通过协同系统提供固定格式(json)的检测数据进行检测, 并将检测结果提供给前台(php)写的界面展示。

  • 面: 你负责的项目中使用了什么进程间通信手段

  • 我: 管道这块没怎么用过, 主要是用共享内存,我们有一个数据采集系统,分为客户端进程和服务器端进程, 中间使用的就是共享内存进行信息交互
  • 面:那你讲解一下共享内存的原理
  • 我: 答得不是很好,主要讲到了每一个共享内存块都要有创建者,相关权限, 以及共享块的attach数。

    技术注解: 这块可以看APUE 第15章以及UNP卷二的共享内存相关章节。

  • 面: HTTP1.1 和 HTTP1.0的区别

  • 我: 主要是持久化连接, HTTP1.1 默认是keep-alive,巴拉巴拉。。。

  • 面:你做项目中遇到的最大困难是什么,怎么解决的

  • 我: 用gdb调实验室以前的代码,由于是多线程程序,调的不顺手,最后通过在源代码中加入相关的错误输出信息,完成调试。(这块答得不怎么好,大家可以提前准备一下这类问题)

  • 面: 你本科是西电的,比较一下东南大学和西电

  • 我: 两个学校都是很不错的学校,但。。。。。(略去)

  • 面: 你觉得写文档重要么

  • 我:相当重要,你写程序主要是给别人用的, 不管是最初的需求说明文档,功能说明书以及相关接口说明,都要认真对待。也许下一个使用者就是几个月的自己,总的来说,我认为文档很重要

  • 面: 在实验室中你最敬佩谁

  • 我: 大老板学术渊博,学风严谨; 小老板编码强力,都让我收益颇丰。

  • 面: 有没有什么问题问我的。

  • 我: 没想到什么特别好的问题问您。

  • 面: 再见

  • 我: 那您先去忙, 拜~

4.HR面

HR面本来是在3月18号(周五的)结果手机没电了,就没接上,最后是在周一(3月21号)进行hr面试的。
HR面是一个声音甜美的妹子,于是我和她开始了温柔的交谈。
插个花絮= =:

  • 我: 我在球场,等我两分钟,咱换个安静的地方
  • 我: 你听的到我的声音吗
  • HR: 可以
  • HR: @&#*#&
  • 我: 你那边声音太小了。
  • HR: 我换个电话,等我一下。
  • 我: ORZ..

下面正式开始:

  • HR: 介绍一下前面的面试情况
  • 我: 前面三轮都是技术面
  • HR: 里面哪个面试官,你印象最深刻。
  • 我: 三个面试官都很厉害,他们问问题都是由浅入深, 然后你回答后,他们都能很快的接下去。 个人觉得,二面的面试官印象深一些,因为他问了一个多小时。 当然三个面试官都是很nice的。
  • HR: 介绍一下你现在最感兴趣的方向
  • 我: linux下的服务器端开发

  • HR: 做过什么自己觉得有意思的东西

  • 我: 又简单介绍了一下自己的东西,技术讲的少。

  • HR: 在实验室和别人合作过吗,怎么合作的

  • 我: 我做的是后台检测, 一方面和XXX交互,另一方面,将处理数据发送给展示系统XXXX.

  • HR: 你的意向部门是什么

  • 我: 阿里云
  • HR: 那你对阿里云有什么了解
  • 我: 主要围绕阿里云是个NB的部门,加入阿里云对自身发展帮助很大 展开

  • HR: 你还有什么问题问我

  • 我: 这面完了还有几面
  • HR: 没有了,有消息我们尽快通知你。
  • 我:您在阿里的花名是什么
  • HR: 我没有花名,我叫¥#*¥&(没听清)

  • HR: 再见

  • 我: ( ^_^ )/~~拜拜

5. 资料推荐

注: 本资料推荐仅供参考,排名不分先后,如有不足之处,由笔者全职承担。

5.1 C语言部分

  • C程序设计语言
  • C语言程序设计:现代方法
  • UNIX高级环境编程

5.2 CPP部分

  • C++ Primer 中文版(第 5 版)
  • Effective C++
  • STL源码剖析
  • Modern Effective C++ :针对C++11和C++14的内容,目前只有英文版。
  • 深入探索C++对象模型 : 看看就好,了解一下。
  • Boost相关资料 :选看, 笔者看了Boost.asio网络库的一些资料

5.3 Linux部分

  • 鸟哥的Linux私房菜
  • LINUX系统编程
  • Unix环境高级编程
  • Unix网络编程 : 套接字编程
  • Unix网络编程:进程间通信
  • Linux内核设计与实现

5.4 算法部分

  • 剑指offer
  • 程序员面试金典
  • leetcode 相关题目

5.5 综合部分

  • 深入理解计算机系统
  • Linux多线程服务端编程——使用muduo C++网络库

6.心态方面

鸡汤篇

  • 人生十有八九不如意,今朝失意,只需偶尔消沉,鼓起勇气,去迎接更加失意的明天。

  • 尽人事,听天命的道理,大家都懂,长路漫漫,难免孤独前行,尽力就好,但求问心无愧。

  • 人或多或少,会对不确定的未来,不确定的时间投入感到恐惧,走出自己的心理舒适区,多些耐心,少些抱怨, 拿面试来淬炼一下自己,回头来看,未尝不是一件幸事。

  • 面试时的等待往往会让人心慌,谈过恋爱的你对此一定不陌生,趁着年轻时努力的去完善自己把,双方都有好感时的心照不宣会让你感到心安。

说人话篇

  • 尽人事,听天命,加油!!!
4 0
原创粉丝点击