周三(2015年7月1日)下午三点半接到上海爱奇艺打来的电话,当时我在口腔医院。面试官问我放不方便,我说我在拔智齿,然后面试官就问我什么时候方便面试,我说晚上八点或者明天中午,然后面试官就说,那明天中午1点的时候我给你打电话吧。我说,好。面试官说话挺和气的,很有礼貌,最后挂电话的时候他那边迟迟不挂电话,等了一分多种,然后我就挂了电话。第二天中午(7月2日)1点钟,面试官打过来电话,问我放不方便面试,我说方便。当时正吃好饭,在宿舍,我就走到走廊上准备面试。整个面试过程1小时4分钟,下面是这次一面的总体情况:
开始面试官说,正式面试之前,我简单问几个问题,你是找实习生职位对吧?,我说,是。如果应聘上的话,你什么时候可以出来实习?我说,现在就可以出去。你现在在上海吗?我说,我现在在学校,长沙。你能接受每周工作几天?我说,我之前在广州实习都是6天工作制的。然后,面试官说,爱奇艺每周只工作5天。我说,那可以,周末我有时间看书学习。然后,面试官说,那我们正式进入话题,开始面试。
然后我就做了一下自我介绍:
您好,我叫王 * *,25岁,2013年毕业于西安电子科技大学,计算机科学与技术专业,现在正攻读中南大学硕士研究生学位,软件工程专业。我拥有比较扎实的C++基础,良好的编程风格;能熟练使用Lua,Python及Go脚本语言,并熟悉Django、Beego框架;能够熟练在Qt框架下开发程序,熟练使用vs2012及Xcode开发工具;熟悉Cocos2d-X游戏引擎,并具有一次手机游戏开发经历。
在校期间有过多次社会实践经历,参与过中南大学智慧校园系统开发的需求分析,担任过2年研究生党支部书记。2014年4月至2014年9月,我在中国科学院深圳先进技术研究院参与率组织分析实验信息系统(TALIS)的开发,2014年9月至2015年4月,我在广州易渡信息科技有限公司参与了《弹弹岛战记》手机游戏项目的开发。这一年的实习工作经历,让我掌握了Lua,Python及Go脚本语言,同时熟悉了Django、Beego框架,及Cocos2d-X游戏引擎。虽然我的工作经验不是很充足,技术知识学的台广太泛,不够精湛,但是我一直在努力地提高自己的技术水平,希望通过企业实习实践来提升自己的能力。
我的自我介绍完毕,谢谢多多指教!
整个自我介绍下来,面试官还是比较满意,然后说,下面我问你几个技术问题。
我说,在C语言中,static有三个主要的作用:
1)如果Static在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)。
2) 如果Static在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 如果Static在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
应该就以上三点。
我说,C/C++程序占用内存主要分为四个区:代码区、静态存储区、栈区(Stack)和堆区( Heap )。
然后他说,static数据存储在哪个区?我说静态存储区。静态存储区主要存放全局变量或常量,静态变量或常量。
我说,C程序编译主要分为4个步骤:预处理、编译、汇编、连接。
然后他说,你能详细说一下每一步骤吗?
我说,可以。
预处理:主要是将所有的#define删除,并且展开所有的宏定义,处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。
编译:把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后生成相应的汇编代码。
汇编:将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照表一对一翻译。
链接:通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件。
开始的时候我答错了,把TCP/IP协议簇的四层模型和OSI七层模型搞混淆了。
我答的是:数据链路层,传输层,应用层,表示层。漏掉了网络层。
然后面试官接着问。
TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。
UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。
ICMP是控制报文协议,它没有端口号。y因为它的报文格式是由类型、代码和校验和组成,所以它没有端口号。TCP和UDP有端口号。
python是一种脚本语言,它的运行需要python解释器,属于解释型的语言,python本身就是由C语言开发出来的,而且是开源的;C语言属于中级语言,它介于高级和低级语言之间,C是编译型的语言,它的运行必须经过编译器的处理才能形成最终的执行代码,C语言最主要的用途就是系统底层的应用。
列表和元组非常类似,它们最大的区别是元组一旦被赋值,值不可以被改变,一旦改变就会出错;但是列表可以任意的更改。第二个区别是它们用不同的符号表示,复制的时候,列表用方括号[],而元组用小括号()。
这道题其实很简单,我之前只用过range,但是对xrange的印象比较模糊,没敢说,直接回答,对不起,这个我一时想不起来,之前只是用Python搭建过一个个人博客在github上面。我回头在认真看下书。
其实这道题目非常简单,xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
我回答:bingd、listen、connect、accept。忘了问是客户端还是服务端。这一点很不好,应该回答之前先问面试官客户端还是服务端的。反过来,还是面试官问我,你回答的是客户端还是服务端?我这才反应过来了。
因为我之前没有做过Linux下的项目开发,所以说对Linux不熟练。
这个答得不好,似乎不满意,数据结构里面的时间复杂度问题没有理解透彻。回头得认真弥补。
单利模式,我对单利模式比较熟悉,因为它算是最简单的。单利模式确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实。这道题我答得不好。
(1)只能使用单例类提供的方法得到单例对象,不要使用反射,否则将会实例化一个新对象。
(2)不要做断开单例类对象与类中静态引用的危险操作。
(3)多线程使用单例使用共享资源时,注意线程安全问题。
然后他问,单利模式加锁是在哪个地方加?我说在获取实例的那个共有静态函数里面,首先要做一次判断是否获取到实例,如果为空,则加一次锁。
回答之后,他似乎很不满意,一直追问,加锁实在哪个地方加?在哪声明?然后我又重复了一遍,他还在追问。
最后,他说,时间差不多了,已经一个小时。最后你有什么问题想要问我的吗?
我说,贵公司,对新入职的员工有没有培训体制?就是有没有人带?因为,有人带的话,学习起来比较快,容易上手。他说,没有培训,但是有人带。
我又问,我想知道大概什么时候能知道面试结果?
他说,两天之内给你电话,如果过了的话会通知你二面。我说,好,谢谢。我没有其他要问的了。
最后,面试官很和气的说,好,那就先这样了, 再见。
我说,好,谢谢,再见。
这次面试整体来说,还可以,比去年3月份面试北京爱奇艺的时候感觉要好多了。爱奇艺是我很想去的公司,希望能顺利拿到爱奇艺的实习Offer,祝福我吧!
2015年7月3日 下午