阿里云 2016 实习生一、二面

前两周分别接到了阿里云两轮电话面试,总结记录一下。

一面

接到电话,第一件事一般都是介绍一下自己。我一般都会说,熟悉常用的 Linux 编程 API,熟悉 TPC/IP 协议,有一定python web 开发项目经历。

一面主要是针对自己的项目问了一些问题,比如 shell 解释器里面为什么会出现僵尸进程,问题很简单,主要是父进程没有 wait 子进程。

二面

这轮在介绍完个人项目之后确是问了不少基础的内容。

leader 首先问了常用的 linux 系统调用(毕竟我介绍自己熟悉常用的 linux 编程 API)

我:open ,read,write,fork,wait,waitpid,然后具体介绍了 waitpid 与 wait 的区别,waitpid 就等待某个具体的子进程给出了更多控制,还有就是异步 wait ,将 waitpid 放在信号处理函数里面,能防止父进程阻塞。通过 fork 延伸,接着我又说了 ,TCP/IP 相关的函数,socket,bind,listen,accept 一连串。fork 完之后子进程处理请求,父进程继续监听请求。

其实这里信号相关函数还可以延伸出更多,比如 signal 注册信号,kill 发射信号。。。

leader 又问了出现 .core 文件怎么办。

我:你是指出现 segment fault 吗?一般出现 segment fault 都是指针越界,通过 gdb 可以查看 .core 文件,但我一般都只很简单的设置断点 gbd 进去,然后用 gdb 的 nsp 指令看相关具体变量的值,一步步排查错误。(实际上我一直都是这样做的T_T)

程序异常退出时,内核会生成一个core文件(是内存映像以及调试信息)。可以通过使用gdb来查看core文件,指示出导致程序出错的代码所在的文件和行数。可以通过 alimit -c 查看系统设置的 core 文件大小限制

接着问在C++ 程序中如何调用被C 编译器编译后的函数?

不知道是我没听清楚还是没理解对面试官的意思,就只回答了,在头文件中申明函数,cpp 文件中定义函数。

回头又想了一下,怎么可能这么简单,面试官想知道的应该是使用 extern "C"以及为什么要加 extern “C”.

C++ 在重载函数时,为了区分重载的各个函数,通过把原函数名与参数信息结合,产生一个独特的内部名字,这种技术叫做名字修饰(Name Mangling)。

C语言中没有名字修饰(Name Mangling),因为C语言不支持函数重载。但是如果C++中含有C代码,在编译时C++编译器对C代码的函数也会进行名字修饰,函数名变了以后,将导致在C运行库中找不到对应函数,发生链接错误。

为了防止C++编译器对C代码进行名字修饰,我们将C代码用extern “C”进行链接指定,告诉编译器,在生成中间文件时,不要对这部分代码进行名字修饰,而是生成符合C规则的中间符号名。

接下来,又问了一个 struct 和 class 的区别

这个没有答得很好,导致给面试官的印象就是基础很薄弱。。。

分以下所示两种情况。
C的struct与C++的class的区别:struct只是作为一种复杂数据类型定义,不能用于面向对象编程。
C++中的struct和class的区别:对于成员默认访问权限以及继承方式,class中默认的是private的,而struct中则是public的。class还可以用于表示模板类型,struct则不行。cc

在模版中,类型参数前面可以使用class或typename,如果使用struct,则含义不同,struct后面跟的是“non-type template parameter”,而class或typename后面跟的是类型参数。

栈空间不够用怎么办?

这个也没答好,就直说了自己还没有遇到故这种情况,,,

网上查了一些资料,用 ulimit -a 可以查看栈空间大小,ubuntu 上是 8192 kb

如果定义大数组的情况下,那就需要修改默认的栈大小,linux 上使用指令 ulimit -s 32768 可以将当前用户的栈大小设置为32M bytes。

leader:说说make 伪目标。

这个也没遇到过,,,,,感觉要跪

在网上查了一些资料,所谓伪目标就是这样一个目标,它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们将一个伪目标成为标签。

拿clean举例,如果make完成后,自己另外定义一个名叫clean的文件,再执行make clean时,将不会执行rm命令。

为了避免出现这个问题,需要.PHONY: clean

参考: http://www.cnblogs.com/samuelwnb/p/3895191.html

接下来 leader 就开始跟我谈人生了,觉得我基础还有待提高,看我简历说我数学专业的,拿过很多奖,专业排名也不错,算是比较优秀的,建议我读研深造,,,,,,最后跟他谈了二十分钟的我不想读研的原因以及一些人生规划,还问了一些关于阿里云主要有哪些业务的问题就结束了二面。

你可能感兴趣的:(面试,shell,api,阿里云)