BAT+华为SP面经,聊一些细节加分项
先讲面试流程,按时间和公司来排序:
阿里:
阿里在拥抱变化消息放出来之后,随随便便做了笔试题,然后竟然收到了面试通知。
阿里在拥抱变化消息放出来之后,随随便便做了笔试题,然后竟然收到了面试通知。
技术面略温和。可能是他们不招人的原因。
一面:
问了一个改进的二分查找,要求找到输入为N的第N个值为K的数。
要求写了多线程下的单例。
问了为何选择IOS开发而不是Android开发。我说做Android开发时遇到一些坑,他就具体问我哪些坑。然后问后续有没有解决这些坑。
后来给我总结说自信活泼,能力强,但是遇到问题要深挖。
二面:
拔得很高,都是些很抽象的问题,结合简历来问的,面试官喜欢临场发挥,提一些问题。这个面试官气场很强,几乎打乱我的节奏。
让你带一个全新的系统,你打算怎么做?
命令模式是什么?
一个GBK编码在各种机型上测试跑出来有很多不同的错误码,错误不确定,要怎么检查?
为何引擎、UI渲染通常情况下用单线程来做?
UI的优先级是如何?
后续打算如何学习IOS?有没有具体的计划?
被问的很惨,但是或多或少有结合自己具体的经验去回答抽象的问题。应该是这一点让技术二面决定让我进HR面了吧。
HR面:
最恶心的一面了。害的劳资都有HR面恐惧症了。
要求用两个字评价大学生涯。
遇到的最大挫折是什么。
在我讲述过程中多次打断我,插入一些鄙视我学校、鄙视学校学生的话。
最后跟我各种吐槽阿里缩招的事,选几句经典的话。
PS.我并不是阿里宝宝,但是因为这个事情成为阿里黑。签了之后做的第一件事情就是黑阿里HR。然而阿里的技术都很赞。
百度:
百度第一次笔试,进不去。
百度第二次笔试,进不去,放弃。
鹅场:
技术一面:
组合模式是啥。
TCP/UDP区别。
UDP的应用场景,为什么。
红黑树是啥。
堆是啥。
两个栈实现队列(让写代码)。
看些什么书平常。
IOS里的isa指针。
技术二面:
气场超级强大,不让说多余的废话,就一直问关键问题。
给一个数组,演练快排过程。
C++里的几个Cast。
c里的volatile关键字。
UDP为何快。
Socket编程。
TCP三次握手。
为何IOS而不是Android。
JAVA垃圾回收。
C++ const实现。
宏和const的区别。
胜任工作的优缺点。
每个项目都几个人负责的。
使用过几个引擎间的差别。
4亿个QQ输入任意QQ判断是否是会员。
HR面:
太温柔了。
压力最大的情况是什么时候。
加班怎么看。
工作地点。
OFFER收割情况。
华为:
机试:
逆转单词问题。
取石子问题。
第三个忘了。
技术一面:
如何当上副***的。
C与C++区别。
C与C++哪个性能比较好。
A*算法。
工作地点意愿。
技术二面(HR):
项目里用了哪些数据结构。
主要是项目。
下面这些细节、技巧是我总结的,不一定适合每个人,大牛可以跳过去,这些都是细小的加分项。
面试前的一些准备:
1)搜集信息,如果有前面的人去面试过了,尽可能多的打听一些信息,准备自己的回答,要保证这些问题问到你,能够答得得体。
2)注意形象,不要给人邋遢的感觉,快上场前注意一下牙齿。。换位思考自己如果是面试官,看到你的样子第一眼,会不会想要和你作为同事?
3)代码能力是最能拉分的,在面试前一天最该着重准备的是一些基本算法的默写,代码的风格最好参考一些规范的写法,注意边界条件。
4)有一些非常影响面试的性格弱点,希望在面试前一个月就自己认识清楚,最短时间努力去改正。比如说表达能力差的同学,一定要抽时间锻炼自己的演讲能力,和同学对话模拟演练,看一些辩论比赛,结合简历准备好台本等等等等。。
5)控制面试中比例的分配。面试可以分为项目和技术两大块,决策出你的最佳比例,项目熟悉的,多写一些在简历上,增加面试官问你项目的时间,不要盲目相信网上的所谓“简历最好一页,项目最好一个”,那是对你所有项目中有特别出色的一个而言。如果对自己项目特别熟悉,不要吝惜笔墨,但是要注意条理清晰。相反,如果对项目不够熟悉也来不及准备,就要在基础上下苦功夫了。如果简历上的东西不够出彩,导致面试官问的少,而且打算很快时间结束的话,你必须要有危机意识。这时候可以有这样一些险招来扳回一城。
“我的基础/网络/数据结构比较扎实,您可以问一下这方面”
这些话一旦说出来,就要准备好被问到
红黑树/TCP格式/B树/内存管理等等比较难的问题,需要提前做好准备。
简历上也可以写一些引导面试官发问的内容。
在技能上,写上
“熟悉游戏中的经典算法/在GIT上维护开源代码”这样具体的,引人发问的话。
面试中的一些技巧:
1)观察面试官的性格,也就是常说的察言观色。如果面试官比较活泼,就表现自己开朗积极的一面。可以在面试中试着活跃气氛,最能插段子的地方是自我介绍和讲述优缺点的时候。
如果面试官年纪比较大,记得表现诚恳谨慎,不要跳,不要飞,放慢语速,想好了再说话。一般这些年长的面试官阅人无数,眼光毒辣,最好不要想给他们挖坑。。
2)谈话本来就是双向的,讲项目的时候也有一些给面试官挖坑的地方,比方说让介绍项目的时候,自己特别熟的地方,也能体现自己能力很深的地方,故意不说的很清楚,让面试官问出来。然后再回答。
3)因为是应届生,对自己即将从事的行业的认识,最好能用自己的语言表达出来,不要上网找一些资深人士的总结去背诵,太过生硬,有的时候自己的认识+细节描述会给这段经历加很多分,也表现你是一个注重实践的人。
4)写代码的时候不要冷场,这个时候一般你不说话,面试官也不说话,他会在电脑上给你敲评价。这时候最好不要让他冷静下来作对你的分析,要陪他说话,最好的就是一边写一边说代码思路,不仅可以让你消除紧张,还可以缓和气氛。
杂七杂八的经验总结:
如何回答自己不会的问题?
面试官问的问题复杂了,一般有两种情况是难以回答的,第一种,上升到一个非常抽象的层次提的问题。这时候,应该向面试官提出对具体的线索的要求。“能不能举个具体的例子?”要求在具体情境下进行作答。这样就降低了回答的难度。
第二种是没接触过。这里再分为两种,第一种工作情景,和业务相关。第二种可以概括为具体的技术问题。
关于业务问题,需要你从自己的项目里作一些总结,回想一些类似的情景,“这个问题我在自己作项目的时候也出现过类似的。。然后我是这么解决的。。”甚至你可以偷换概念,从问题转向说一些表现自己能力的事情,总之不能直接回答不会。
关于技术问题,如果不会,解决的一个基本的原则就是分解,转成一系列小的,你熟悉的问题,一个个击破。“这个问题我会分三个阶段解决,首先。。然后。。”如果分到原子问题,仍然不会,可以求助面试官,但是求助之前必须试探几个思路,“您的问题是这个意思吗?/我理解的这个概念可能不对,但是我猜测是这个样子。。”
如何回答自己非常熟悉的问题?
如果会并且熟悉,平常你也有总结的话,可以拔高。举个例子,面试官问到“稳定的排序有哪些?”
你可以回答“有插入排序、冒泡排序、基数排序”
也可以回答“内部排序有。。外部排序有。。”
我是这么回答的,“判断一个排序是否稳定要看算法中每一次循环中比较的步长,如果步长大于1,就是不稳定的”
面试官“那你说冒泡是稳定的吗”
“是的,因为它只有相邻的作比较,步长等于1”
面试官“那插入排序呢?”
“插入排序每一次循环都可以控制步长增长在1,也是稳定的”
。。。
面试官提问中的一些坑
“说一下你最得意的一个项目”
说一下个人的感受,我个人很讨厌这样的问题,尤其在我的简历上是精挑细选的三个项目之后。而且只说一个会导致我的节奏被打乱,陷入被动。
我会先试探的说,我是一个诚实的人,每个项目都是自己非常骄傲熟悉的,不擅长和非核心的项目并没有写到简历上去。可不可以用简短的话来一一为您介绍。
如果不可以,这时候就要做一个抉择,说哪一个?我的建议是,说和你应聘职业最相关的那一个,展现你的专业和职业的契合度,同时保持一个谦虚的态度,因为来面试你的都是这个专业的资深人士。没有的话,再说你最拿手的一个,记住由于面试官不会特别熟悉你的专长,为了避免他觉得无聊,请举足够多的例子,打足够多的比方,轻松幽默的讲述这个项目。
“你还有什么要问我的吗?”
我在这个问题上栽了无数的跟头。讲讲几个禁区吧,在你和面试官聊的不是很HAPPY的时候,不要问过于私人的问题,问面试官工作经验什么的;
不要问一下百度就能知道的蠢问题,什么公司这个事业群分几个部门,有哪些城市;
不要问公司保密的问题,工资福利;
不要问假大空的问题,什么公司发展前景的;
不要问会显示自己缺点的问题,让HR给你作人生规划什么的;
不要问与面试无关痛痒的问题。
保险中求保险的回答:
“请您为我这次面试做一次点评好吗”
如果有更好的答案,请联系我。
“遇到问题你是怎么解决的?”
这个问题,必须结合自己亲身体验,要讲的感人至深,引起面试官的共鸣。
问题分两个部分。“什么困难?”“怎么解决?”
困难的选择最好和你应聘的职业相关,如果是程序员,讲技术是最好的回答,把困难产生的成因和情景都交代完了,就算是编的也请把细节说的详细点,让面试官走进情景里。然后给出详细的、漂亮的解决方案,“因为困难发生突然而且时间紧迫,我先制定了一个紧急的解决方法,但是不算成熟,后来我一直对它觉得疑惑,潜下心来去网上找大牛的解决方案,一个个去实践,然后总结。。/因为网上没有搜到相关的解决方案,我去查看了源代码,发现问题是。。但是这都是我一些比较粗浅的见解,面试官您作为这个技术的资深从业人士,您觉得这个问题还有什么更好的解决方案?”
“你觉得你的缺点是什么?”
这个问题非常难以回答,一不小心回答错误整个面试印象分会被拉倒非常低。
一些经典回答又被大家用烂,也会让面试官讨厌你。
因此我总结出了新的方案。其实这个坑是展示你适于这份工作的一个很好的机会。
你首先要想一个问题,为何你选择这个职业,而不是另一个类似的/平行的/相交的?是否你对另一个职业有一种情感上的嫌弃?
有,很好,你可以从这个点来找到自己的缺点向面试官展示,从而证明你认清自己而且找到适合自己的职业定位。
例子:
移动客户端有两条线,一个是IOS一个是Android。我从这里考虑,说,我是一个有开发洁癖的人。
面试官“开发洁癖?”
“简单来说就是喜欢在固定框架下开发,有点怕麻烦”
面试官打断我“怕麻烦还能搞好开发?”
“我不是怕新的东西麻烦,我是对那些重复性的、累赘的代码特别讨厌,学不到东西嘛。我喜欢专注在逻辑上,那些重复性的工作我希望交给编译器或者引擎帮我做”
“举个例子说,我觉得IOS下的ARC特别好,它帮忙我处理了这些繁琐的过程,而且IOS它有一套自己的模式,强制更新,统一标准,并且对开发者友好。完美解决了我的强迫症,因此我觉得自己比较适合搞IOS开发”
(接下来面试官该问我ARC或者JAVA里的垃圾回收了,嘿嘿,早就准备好了)
之前也有学长评价自己性格闷和宅,然后适合搞开发的。但是这个答案显然有点烂大街了。
最后一个保守点的答案是讲一个正在改的缺点,先说缺点,紧接着说自己的改进方案。但是不会加多少印象分。
简历上的坑
“熟悉C/C++”
必问:C与C++的区别,请好好准备。同理其它语言。
“任***/副***/技术部长”
必问:这个职位给你带来的成长是什么?你如何当上这个职位?做了哪些突出贡献?
“热爱XX技术,经常阅读相关书籍和BLOG”
必问:近期看过哪些相关的书?有什么收获?
“XXX项目算法研究,使得速度提升了OOO”
必问:哪些性能下降了?下降百分比有没有做过实验对比?这个算法是自己提出的还是只有实现?
“熟悉数据结构与算法”
请改为
“熟悉常用数据结构与经典算法”
“熟悉网络”
请改为
“熟悉TCP/ip及XX框架下的Socket编程”
“熟悉操作系统”
请改为
“熟悉windows/linux下的内存管理。。。”
有哥们被问了计算机开机的启动过程,请大家不要写的太大,知识是无穷的,保持谦虚的态度,会什么才写什么,因为写什么就会被问什么。
自己的准备过程,夹杂一些干货推荐:
前一个月:
1)小甲鱼系列数据结构与算法视频。重新学习的感觉很好,也有定期默写基本算法。然后我在简历上勇敢的写上了
“熟悉常用数据结构与经典算法”
2)为了锻炼说话能力,开始看《奇葩说》,看乔布斯的演讲等等。
3)找各大牛的简历模板,修改简历,对着简历模拟练习。
前一周:
1)牛客网,结合投的职位针对性的刷题。刷完自己拿手的语言的题库,刷完操作系统、网络、数据结构,刷完智力题,然后就差不多。
2)《剑指OFFER》,编程题入门。
3)心慌意乱、刚面完试正煎熬那会,可以看看帅气的左老师讲题视频。
前一晚
1)敷个面膜,准备小裙子和鞋子,买好水和干粮。
2)脑海里演练被自己面试的过程。
3)联系已经面试过的同学索要面试信息。
前一个小时
1)检查牙齿
2)默写排序
3)自我介绍的练习
PS.签了之后和实验室的小伙伴多喝了几杯头脑发热之后写出这些东西,希望酒醒了不会觉得自己太装B想删文。
祝大家都拿到理想OFFER。