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.心态方面
鸡汤篇:
人生十有八九不如意,今朝失意,只需偶尔消沉,鼓起勇气,去迎接更加失意的明天。
尽人事,听天命的道理,大家都懂,长路漫漫,难免孤独前行,尽力就好,但求问心无愧。
人或多或少,会对不确定的未来,不确定的时间投入感到恐惧,走出自己的心理舒适区,多些耐心,少些抱怨, 拿面试来淬炼一下自己,回头来看,未尝不是一件幸事。
面试时的等待往往会让人心慌,谈过恋爱的你对此一定不陌生,趁着年轻时努力的去完善自己把,双方都有好感时的心照不宣会让你感到心安。
说人话篇
- 尽人事,听天命,加油!!!
- 2016阿里云实习面经
- 【面经】2016年【阿里实习内推电面】
- 阿里实习面经1
- 腾讯、阿里2014实习招聘面经
- 阿里实习招聘面经(内推)
- 阿里实习面经(非内推)
- 腾讯、阿里2014实习招聘面经
- 2015阿里Android实习面经
- 腾讯、阿里2014实习招聘面经
- 实习面经--阿里 java研发 v1
- 阿里实习二面
- 2017 阿里实习 JAVA 研发工程师面经
- 阿里2016实习offer五面经验与总结
- 阿里2016实习offer五面经验与总结
- 阿里2016实习offer五面经验与总结
- 阿里2016实习offer五面经验与总结
- 2016年Android实习岗位 腾讯二面+阿里一面
- 2016年Android实习岗位 腾讯二面+阿里一面
- UITabBarController 根视图控制器
- Java String常见面试题汇总
- android 中显示的问题
- MFC中POSITION类详解
- Android Studio 安装教程
- 2016阿里云实习面经
- android:exported 属性详解
- HD 2048 数塔 DP(简单递推)
- C++primer第九章习题解答
- ActiveMQ 的使用
- c++实现归并排序
- cf#ecr10-C. Foe Pairs- two pointers
- 关于C++ 引用<初学写代码小记>
- C语言程序设计,实验报告程序