2016年9月Android岗面试经历-网易/腾讯

gxko0855 7年前
   <h2><strong>网易面试</strong></h2>    <p>网易的面试在川大华西校区附近的一家酒店,这家酒店的档次好像比百度那家要高一些。猪厂的接待的妹子真是形象气质俱佳,不像百度满满的”工程师文化“(一位面试官穿着拖鞋面我),让人一下子想去猪厂了。网易的候面区有零食,不过基本没几个同学有心情吃那里的零食,候面区的人很少,气氛有一些紧张和压抑。</p>    <p>网易的面试效率极高,3个小时内就能决定你能不能入职网易,一面之后15分钟内就会出二面的结果。二面后紧接着就是HR面。不过我也只是听说,因为我一面就挂了。(- - ! ) 一面的时候,我把简历递给面试官后,面试官就让我做了自我介绍,我就简要地介绍了一下自己的技术经历。面试官着重看了一下我的简历,然后开始发问。</p>    <ul>     <li> <p>他问:我看你简历里对C++很熟?那你说一下C++运算符重载是如何实现的?(好像是这个问题,我有些记不清的) 我当时很郁闷,就说运算重载跟函数重载差不多,只不过函数名换成了 operator 运算符,我估计答得不对。他不置可否,就问了下一个。</p> </li>     <li> <p>他问:说一下C++的函数重载?我就说两个函数的函数名相同,但是参数的个数和参数的类型不同。他又追问函数重载是如何实现的? 我就回答:编译器在编译时根据函数名和函数参数类型生成的符号名是不相同的,相当于一个函数的改名,这样最后相同的函数名实际上名字是不相同的。</p> </li>     <li> <p>他问:C++如何引用C代码?我说:用extern "C" { }。 他又追问: <strong>C++为什么要用extern "C"呢,直接引用为什么不行呢?</strong> 我就被问住了,就支支吾吾说有些C++可以直接引用C,我也不知道为什么。</p> </li>     <li> <p>他问:C++模板的原理是怎样的?其实我也不是很清楚,凭着我在C++ Primer Plus里面学过的一点皮毛说:编译器在编译时对模板里面的类型做了类型替换,所以模板要放到头文件里声明。 面试官不太满意,问:就这些?我也就答不出更多了。</p> </li>     <li> <p>他问:有没有用过C++的smart_ptr?我老实说我没用过智能指针。</p> </li>     <li> <p>他问:C++11的新特性都用过哪些?我当时一下子想不出太多,就一点点举例子:lambda表达式、auto关键字、override关键字、=delete用法,当时一下子只想出这么几个,估计在面试官心里严重减分。</p> </li>     <li> <p>他问:有没有在项目中写过JNI?我的回答同百度面试经历里的那样。</p> </li>     <li> <p>他问:TCP/IP协议栈还熟悉吗?说一说吧。 这是我最想吐槽的一个问题,太宽泛也不知道从哪答起。就先说了说各个层次的协议,然后主动跟面试官说:这样讲太宽泛了,我都不知道从哪说起。 面试官愣了一下下,就说:那你就讲讲TCP协议的流量控制吧。 我就讲了一下滑动窗口的机制。</p> </li>     <li> <p>他问:你平时都用过哪些设计模式? 这个问题我也不知道从哪答起,就慢慢列举:观察者模式、单例模式、构建者模式。其实其余的设计模式我也能说得出,只是没在实战中用过,不敢乱讲。 面试官看我只能说出这么几个设计模式,心里估计又减分了。</p> </li>     <li> <p>他问:我看你简历里对Linux也有一定了解? 我说:当日常系统用过几个月。 他追问:日常管理都用过哪些命令呢? 我就说:top、grep那些,他笑了笑,没有再追问。</p> </li>     <li> <p>他问:你在项目中怎样进行应用的性能优化呢?我就还是着重说了一下内存方面的优化,回答同上一篇文章里提到的。</p> </li>     <li> <p>他问:Android里面的binder了解吗,说一下对它的理解? 我说:binder用于跨进程通信,AIDL的底层实现就是基于binder的。然后说了Binder通信机制主要有Binder Client、Binder Server、ServerManager这几个模块起作用,ServerManager起到一个类似路由的作用。当时也只是草草讲了讲,面试官好像难得点了点头。</p> </li>     <li> <p>他问:Java程序的内存结构? 我回答:程序计数器、本地方法栈、堆、虚拟机栈、方法区。他也没说什么。</p> </li>     <li> <p>他问:Java的gc算法了解吗?我就说是Mark&Sweep,统计GC Roots是否能引用到对象上。生成一个引用图,找出其中的连通分量标记为可清除。等到gc发生的时候就清理这些对象。(后来想想我真想掐死自己,我自己心里很清楚引用链计数法,也清楚复制算法,新生代、老年代那些概念,这些我都做过功课,但是面试的时候有点累,不像引申开讲,估计面试官也觉得我就这样了)</p> </li>     <li> <p>高能来了,他问:你想干什么岗呢?我一下子晕了,跟他说是Android岗,他笑了笑,就说面试结束了。只留我在原地目瞪口呆,整个面试半个小时不到。</p> </li>    </ul>    <h3><strong>网易面试总结</strong></h3>    <p>网易面试让人很郁闷,Android的知识点没有问多少,主要都围绕着C++对我疯狂输出伤害。也许我不该在简历里说我对C++熟悉吧。最后一面就挂了,我自己都搞不懂为什么挂了,算法题也没有问,数据结构也没有问,Java基础不问,一问就是gc算法。网易的面试官比较”任性“,随意出题,而且挂人的权力也很大,问的问题也很有深度。</p>    <h2><strong>腾讯面试</strong></h2>    <p>腾讯的面试跟网易在一家酒店。技术岗和非技术岗都在同一家酒店面,腾讯的笔试刷人不多,候面区很大,人很多,有点闹哄哄的感觉。我在候面区等了大概大半个小时接到面试通知,就去了面试的房间。面试官先看了一下我的简历,估计也是对我所宣称的”熟悉C++“很感兴趣,一开口就开始问C++的问题。</p>    <ul>     <li> <p>他问:C++11的新特性用过哪些?我的回答同网易那次。</p> </li>     <li> <p>他问:C++多态的实现原理?我回答:通过虚函数实现多态。内存中的.rodata区有虚函数表,声明了虚函数的对象中会有一个虚函数表指针指向这个虚函数表,虚函数表里面是函数指针指向实际的虚函数的实现。如果派生类里覆盖了基类的虚函数,则虚函数表里对应的虚函数指针被重写。</p> </li>     <li> <p>他问:C++中析构函数的析构顺序?我说:先调用这个类的析构函数,在析构函数中析构它的成员,再析构这个的派生部分,再调用基类的析构函数,最后析构掉基类部分。 不知道答得对不对。</p> </li>     <li> <p>他问:STL里面map和set的内部实现呢?我就说是红黑树,然后他又问,还有其他的容器呢?我就说了其他的容器我猜测的实现方式。(这一块其实不是很清楚,强行装逼 - - !)</p> </li>     <li> <p>他让我手写代码,先写了一个反转字符串,特意强调用C语言。我也没傻到用C++的现成api。就写了一个给他。</p> </li>     <li> <p>他让我写一个函数判断一个树是否是平衡二叉树。我有点想哭,各种细节不表,这一题虽然简单,但是我没整出来,面试官很宽容,就换到了下一题。</p> </li>     <li> <p>他问了一个大数据处理的题,他问了从10亿个数据中如何取出最大的1000个。面试官人挺好的,特意提醒内存装不下。我就回答:10亿条数据分成N个内存刚好能装下的部分,然后用堆排序。他问能不能进一步优化?我一下子没想出来,就换到了下一题。</p> </li>    </ul>    <p>接下来他看了一下我写的应用,称赞了几句后,就开始问我项目用到的库,看到了项目里用到很多图片后,特意问了一下这么多图片是如何进行性能优化的,我的回答同百度面试。</p>    <ul>     <li> <p>接下来他试着操作了一下,开始问我如何判断用户是否登录的。我回答服务端生成一个token,客户端保存这个token的。他追问用这个token登录如何保证安全性?我回答https。他又追问我对Https的了解。我的回答同百度面试。</p> </li>     <li> <p>接下来他又看了一下app,问我视频播放是怎样实现的。我答:公司没那么多钱买带宽,用的是WebView内嵌的优酷的播放器。他继续问应用在哪个平台发布的 (= =)。我说应用宝,(我有点好奇我如果说放到其他平台上他会追问什么)这个过程中有很多小插曲,比如他好几次退不出视频的播放,然后尴尬地说自己对Andriod不太熟悉。(我怀疑他是iOS工程师)。</p> </li>     <li> <p>他让我写代码,给定内存上一段连续的数据,判断第N位是不是1。这个好写,就是位操作,我当时磨蹭了一会才写出来,可能是人不在状态吧。</p> </li>     <li> <p>然后他就说面完了,问我有没有什么想问的,我就说,在校学生如果没有项目如何提高。他就说他还是很看重项目的,如果一个学生真的对技术有热情,会主动做一些项目的。</p> </li>    </ul>    <p>几天后我接到腾讯的短信,通知我去参加二面。我想了半天,还是放弃了这一机会,难过了好久。</p>    <h2><strong>总结</strong></h2>    <ul>     <li> <p>面试其实是一个双向了解的过程。我们在了解企业的风格,在了解企业想要什么样的人,企业也在考察我们是怎样的人。去面试的人不要在心理上把自己置于一个弱势的地位,也不要把面试看做一场考试,好像面试官要使出各种招数把自己的破绽逼出来一样,好的面试官会去积极发现我们的比较优秀的一面,甚至会去积极引导我们。</p> </li>     <li> <p>当我们面试的时候,应该时刻记住坐在我对面的人不了解我。我大脑里串联起来的知识结构我知道它存在,但是坐在我对面的人却不知道它存在。所以在回答面试官的问题的时候,不要点到即止,要勇于从深度和广度上进行拓展,让面试官看到的你的成体系的知识结构是再好不过了。 <strong>很多时候并不是你把面试官的问题答对了就能通过面试。</strong></p> </li>     <li> <p>以诚相待是最省力的套路。不知道的问题不要强答,不确定的问题也不要答得那么坚决,没有写过某种类型的代码就是没有写过,不要因为担心面试官挂你而欺骗面试官,面试官是很喜欢追问的,一追问就知道你说没说实话。</p> </li>     <li> <p>积极准备,认真对待。不要在简历上有错别字,一面的问题到了二面可能还会问。所以一面答不出来的问题回去了要好好查一查。很多面试题也是老套路了,面试前要认真准备,很多时候面试官问的题目都能事先命中。</p> </li>    </ul>    <p> </p>    <p>来自:http://www.jianshu.com/p/f8ccb3ce19b5</p>    <p> </p>