前言
前一段时间和大牛们交流了一下,据反馈现在Android岗位也没有以前那么多了,没这么好找了,面临2019年寒冬季节,大量公司模仿O2O模式导致死掉企业的很多,再加之培训机构大量的培训人,导致供大于求,当然这不意味着饱和,只是市场更趋于合理一些(只要技术好不用怕的)。最近结合一些面试的同学和大牛们(张旭童)反馈,前几天听童哥去阿里面试顺便整理了下一些面试题目。希望对大家有所帮助,后期会不断更新添加新的面试题。可以帮大家查漏补缺。以下是(2017-2019阿里、腾讯、百度、华为、京东、360和B站面试题汇集)
目录
第一章 应聘求职
1.应聘渠道
2.应聘流程
第二章 简历书写
1.简历书写需要注意
2.简历模板
第三章 3种考试
1.笔试
2.电话面试
3.面试
第四章 职业生涯发展规划
1.缺乏经验的毕业生
2.更换工作的程序员
第五章 往年大厂面试题
1.腾讯
2.阿里
3.京东
4.B站
5.百度
6.华为
第一章 应聘求职
每年的二三月份,都是应届生求职、在职人员跳槽的高峰期。对于即将成为程序员的应届毕业生们,在求职过程中怎样确定目标公司和目标职位,对于已经是程序员的跳槽大军,是按照技术路线发展自己的职业生,还是走向管理位继续自己的职业道路,或者是改变自己的发展轨迹;大家在求职过程中要注意哪些细节?这些都是大家所关心的话题。
国内的T业比国外兴起得晚,而且目前还没有权威的适合中国本土程序员的职业生涯发展规划。因此,国内流行的“35岁退休说”其实是种误解,只要我们好好规划自己的职业生涯,提高自己的技术水平沟通技巧和管理能力,就能够获得更高,更好的职位,完全可以像国外程序员一样工作到60岁再退让我们先从应聘流程中的注意事项,这个轻松却又容易被人忽略的话题开始吧。
- 1.应聘渠道
对于应届生而言,可以选择参加校园宣讲会的形式投递简历。招会投道的简历是“纸”的简历。尽管现在网上投递电子简历的方式大行其道,但是“纸”的简历仍然有着其无可比拟的优势。HR(人力资源经理)拿到“纸”的简历,相比一份电子简历更有一种亲切感,重视程度也较电子简历高一些。
第二种方式是投造电子简历,可以通过公司的电子信第和公司网站招信息栏(数据库),以及各大招鸭门户网站,如 CHINAHR或者智联招聘,BOSS招聘等,来投递自己的电子简历
- 2.应聘流程
第二章 简历书写
据统计,80%的简历都是不合格的。不少人事管理者抱怨收到的许多简历在格式上很糟糕。简历应该如何做到在格式上简洁明了,重点突出?求职信应该如何有足够的内容推销自己?如何控制长度,言简意赅?相信读了本章你会对简历的撰写有一个新的认识。
1.简历注意事项
- 1.1简历不要太长
一般的简历普遍都太长。其实简历内容过多反而会淹没一些有价值的시光点。而日,毎招的时候,一个企业,尤其是大企业会收到很多份简历,工作人员不可能都仔细研读,一份简历一般只用1分钟就看完了,再长的简历也超不过3分钟。所以,简历要尽量短。我们做过一个计算、一份中文简历压缩在2页左右就可以把所有的内容突出了。1页显得求职者过于轻浮,三四页就太多了。
- 1.2简历一定要客观真实
求职简历一定要按照实际情况写,任何虚假内容都不要写,有些人靠着有水分的虚假简历获得面试机会,面试时也一定会露出马脚
- 1.3不要过分谦虚
这点就不需要详细说了吧!
- 1.4简历上一定要写求职的职位
每份简历要根据你所申请的职位来设计,突出你在这方面的优点,不能把自己说成一个全才,任何职位都合适。不要只准备一份简历,要根据自己工作性质有侧重地表现自己。当然如果你觉得2个职位都适合你,那你可以向该公司同时投2份简历。
- 1.5在文字排版格式上不要出现错误
- 1.6简历简单就好不要过于花哨
- 1.7语言要简洁直白
- 1.8不要写对薪水的要求
- 1.9不要写过多个人情况
2.简历模板
个人介绍
姓名:欧XX
性别:男
出生日期:19800703
学校及专业:西北大学计算机系件与理论专业
学历:硕士
移动电话:130969XXXX
电子邮件;jinderXXXX.nct
T&&英语技能:
1.软件结构设计,需求分析能力
2.精通CC++、C#,精通SQL
3.熟悉它Windows开发平台,精通NET体系
4.熟器 Delphi开发工具,熟悉UML“建模语言
5.深入理解血向对象的思想,并能熟练地应用于具体的软件设计发工作中
6.英语水平:国家六级
项目经验(近期)2005/5-2005/9
由××××出版社约稿编写《 Visual C#,NET案例メX××》,出任第一作者,니前该书已经出版(ISBN7-121-01722-9)。本书主要通过具体的实例介绍如何运用Visual C编程]具开发实际的应用程序,从基本应用到高级处理都有沙及,包括某础设计,图像处理、多媒体应用、系统文件处理、数据库基本处理、网络处理、网络与数据库高级应用、综合实例共8个章节。
一份简约而精美的简历对于一次面试来说也是非常重要的,程序员的简历不需要太浮夸,但是一定要排版简洁优美,主次分明。毕竟HR一天需要看很多份简历,对于一份排版 混乱的简历是没有太大兴趣去看的,至于简历具体怎么写,网上也有很多教程,这里也不再赘述,突出你的优势,重点写一写你做过的项目就好。
- 简历模板
由于文章篇幅问题需要完整版简历模板的 私信我【面试】获得下载链接
第三章 3种考试
笔试,电话面试,面试,是顺利求职的3个过程。三关全过才能顺利签约,只要一关不过就会被刷掉。
- 1.1笔试
我认为笔是程序员面试3个过程中最重要的一个环节,也是最难以提升的一个环节。本书中主要叙述的也是程序员的笔试经历。不论你有多么大的オ干,多么广博的知识,如果未能通过笔试,则无缘下面的进程。
- 1.2电话面试
电话面试主要是对简历上一些模信息的确认、之前经历的验证、针对应聘职位简单技术问题的提问,以及英文方面的考查。由于模式的限制,电话面试时间不会很长。在这个环节中,一定要表现得自信、礼、认真、严肃,这样会在声音上给对方一个良好的印象。如果声音清朗,语气生硬,除非是技术题目及英文方面表现得足够好,否则很难予以平衡。
在回答电话面试的问题时,不要过千紧张,要留心对方的问题,这些词题也白在当面的面试中还会再出现。如果对方在电话面试中要求你做英文的自我介绍,成者是用英文和你对话,那在电话面试结束后定要好好准备英文面试的内容。
笔者曾经参加过Thoughtworks、 Sybase、SAP、受原创等公司的电话由试。外企一般都会要求你做一个英文自我介绍和一些小问题,总的来说不会太过涉及技术方面,因为用英语来描述技术对国人而言还是有定困难的。国企会问到技术问题、我就曾被问到如何在C++中调用C程序、索引的分类等技术问题,回答基本上要靠平时的积累和对知识的掌控能力。
- 1.3面试
一个比较好的面试是能问出求职者拉长哪方面而哪方面不足的面试。如果面试官针对职者不足之处穷追猛打,或是炫耀自己的才能,这是不足取的。对于求职者而言,面试是重点环节,要守时是当然的了。如果不能按时参加面试,最好提前通知对方。着装上不需要过分准备,舒服、干净就好了。般的T公司对技术人员都不会有很高的着装要求。虽然着装不要求,但精神状态一定要好。饱满的精神状态会显得你很自信。有笔试的话(有时笔试和面试是同时进行的,即而试官会在提问后请你回答并写下详细描述),也无非是与应聘职位相关的技术考查或者英文考查,如英汉互译等。应视你应聘职位的等级进行准备。
应初级职位,会针对你的程能力以往的项目经验进行重点的考查。如果面试官针对你做的某个项目反复提问,那么你就需要注意了,要么面试官在这个方面特别精通,要么就是未来的职位需要用到这方面的技术。我们应该抱着一种诚意的态度来回答、对熟悉的技术点可以详细述,对于不熟悉的部分可以诚实地告诉面试官,千万不要不懂装懂。不过,我们同意可以引导与面试官的谈话,把他尽量引导到我们所长的领域。在SPSS公司面试时,在回答完面试官单链表逆置和拷贝构造函数问题之后,我把话题引入了我所擅长的设计模式方面,这是一种谈话的艺术。
应中级职位,不但会考查代码编写,而且会对软件架构或相关行业知识方面进行考查。代码编写方面,主要以考查某种编程技巧来判断你对代码的驾驭能力。比如某国际知名软件公司经常会让面试者编写malloc或atoi函数。越是简单的函数越能考验应聘者的编码能力。你不但要实现功能,而且还要对可能出现的错误编写防御性代码,这些经验都需要在实际编程过程中积累。
应高级职位,应聘者肯定对技术或某个行业有相当程度的了解,这时主要是看你与职位的契合程度、企业文化的配比性(即将人力资源及成本配比作为服务体系的重要组成部分,将公司企业文化中核心理念及价值观作为客户服务的重要媒介)及整体感觉。应聘管理职位的话,考查的更多是管理技巧、沟通技巧和性格因素。架构师一般会考查行业背景与软件架构方面的知识,比如UML或建模工具的使用等:技术专家的职位则会针对相关技术进行深度考查,而不会再考査一次性的编码能力
第四章 职业生涯发展规划
在一般情况下,我们工作一年之后,对自己的喜好及擅长都有了更加深刻的了解,这时会有较为明确的职业发展规划。
- 1.1缺乏工作经验的应届毕业生
即将毕业的学生们自己的目标职位很模糊、只要是计算机相关的工作都想试一下。但是现在公司看重的除了学生的基本素质,即沟通能力、团队协作、学习能力、外语水平等之外,也会关注应届毕业生在校及实习经历中与目标职位相关的经验。假设与导师做的课题或者实习中接触到J2EE企业级开发,那么在应聘时큐找一份相关要求的工作就更为容易。而这样的经历去找一份CC++开发的职位可能就略微难些。
上海某高校的一位学生在课余时间开发了一个基于校园网内部的搜索引擎。比起商用的搜索引,其搜索效率、数据量不算出色,但是该生通过编写自己的搜索引擎,详细了解了网络编程、网顶爬虫等领域的知识。这个搜素引也表现出了他专业技能的水平,从而为他赢得了前作国际英著名网公司应聘的机会。
所以,在大学期间,我们可以通过参加创新杯比赛、著名软件公司举行的各种编程大赛、各种技术社团的活动来增加编程经验,以获取司对你专业技能的肯定。各种编程大赛中获得的名次、实践大赛中的作品,都可以作为工作经验的替代。
通过校园招聘招人的大公司,一份有分量的简历只是第一步。有分量指的是成绩尚可,有让他们感兴趣的实习经历,有一定的获奖经历,担任过一定的职务,英语能力还行。这仅仅是第一步。它能让你从众多应聘者中被选出来参加初试,接下来就就看你的真正功力和造化了。
初试的要点是基本功扎实,自乐观,英语交流能力不错,够聪明,机灵。基本功扎实井且聪明尤为重要。某位毕业生参加 Sybase公司面试,过了印度技术官的英语技术面试,第二天参加他们的 Aptitude Test(智商测试),误认为是态度测试( Attitude Test),结果没发挥好。智商测试通常让你在很短的时间内做大量的逻题和智力题。不要在前面的题目上浪费太多时间,后面的题目往往更加简单。
另一位求职者通过了微软公司的笔试和电话面试,后来去参加了正式的面试。连3轮,面试官全都是微软高级技术经理。面对这么高级別的面试官,求职者难免紧张。3轮全英文面试,写了6个程序,不算难,但是考得很细,注面求者的逻辑思维能力、反应能力和编程技巧,写完程之后马上设计测试用例。或许是没有参加过特别正规的项日开发的缘故、他表现一般,有儿个程有漏,而试官加以提醒,虽然最后能够改正,但是加重了他的紧张情绪,没能入下一轮。
没必要因为自己的学校而显得不够自信,只要打好技术功底,多参加正规的实践项日、找工作的时候自然会顺利。此外在求职过程中,整体形势和个人形势没有必然联系。整体形势好了,个人形势未必好。往往整体形势好了,个人容易盲目乐观,在准备不充分的情况下,很容易被莫名其妙地淘汰。即使明年的整体形势比今年还要好,招人的公司比今年还要多,还是建议人家脚踏实地,做好充分的知识储备和心理准备找工作绝对是一场硬仗。
有一种说法:80%的OTer掌握在20%的牛人手中。每年10月、11月应届毕业生刚刚开始找工作的时候,正是牛人们发版的时候,笔试、面试都有他们的份,到了发 Offer的时候他们千中集中了很多好Ofer。这时候我们得摆正心态,尽自己最大努力,发展出自己的最好水平就行了,不用太在意结果。晚些时候反面会有好 Offer。写论文的同时抽空复习一下基础的课程:数据结构、C、C+、 TCP IP、操作系统、计算机网络、UML、OOA&OOP、自己做过的项日的知识,等等。不要怕笔试和面试,笔试得多了,感觉就来了。
- 1.2更换工作的程序员们
如果你是跳槽者中的·员,我们要明白对们的职业生发展是有喜无线的,招方也十分关注求职者的稳定性。一般来说,每份工作都要维持一年以上,能够在某家公司工作满3年,才会对公司所在行业及这家公司有比较深入的了解。决定更换工作时,我们要先问问自己要在哪个方向继续自己的职业生運。假设目前你是某家公司的开发人员,要应更大规模公司的同等职位,我们应该注意下面两点。
首先,比起创业型公司,大公司的开发流程要求会更加规范和严格,有的时候我们必须放弃一些编程的习惯。严格的开发流程对文档的依赖性很大,我们必须做到文档优先。这样的一种环境,可能是初入大公司的程序员最难接受的一点。
其次,小公司里那种的Superman型的程序员在大公司里很少见到。我曾经听个程序员朋友抱怨他们公司的架构师连ASP代码都不会写,其实这是很正常的事情。架构师的工作是将业务需求变成计算机软件的模块和类,他们不需要了解具体代码的编写,只要分析几种软件平台之间的实现难度和速率差异就够了。当然,大公司也有所谓的技术高手,但这种技术高手并不是精通几种开发语出的“万能钥匙”,而是对某种技术有深入理解,能够解决深层次问题的人。
中国的T界,“技则优而仕”的比较多。很多技术出身的人员做到管理岗位后,关的仍然是技术细节。但实际上,人员的管理也是一门很大的学问。技术主管的个人风格会影响整个队的国。如果主管不会沟通、只关心 Dead Line,那么整个用队将会毫无活力,主管的技术再高超也不会得到信服。如果主管善于沟通、关心下属,那么整个团队就会生机勃勃,即使加班也有劲头。
假设你已不想再做开发,想要转向测试或其他相关因位,如实施、技术支持,其至培训、售前等,那你一定要认真向目前在做这份工作的人员了解他们1的实际职责与相关要求,确认是否可以接受转换位后带来的挑战。如果确定,则可以选择具有相同行业背景的目标职位,并H调整好自己的心理状态,给自己一段较长的时间来适应这种改变。刚开的时感觉无从下或者有较大落差是很正常的,最起码要在半年之后オ能证实你和这个岗位的匹配度。
如果你现在已经有了较为明确的职业生運发展规划,推若大家使用例推法使之切合实原并行之有效。以一个普通程序员为例,我们可以首先为自己的目标设置个年限,并列出实现这个日标所需要的专业技能然后使用倒推法确定我们的阶段日标,直至将这个阶段目标倒推至一个月后,那它就会是个很具体的日标了。只要你坚持去做,就会逐步实现自己的最终目标。
当然,除此之外,你还要时时关注业界动态,尽可能多地参加在职培训并且补充外语方面的技能。这样才能保持你继续前进的步伐当然,最重要的是我们要把提好自己,把量好自己要走的路。其实任何一个职位都需要我们努力工作,任何一份工作都无法“铁定”我们的终身。求“ just a job"而已。找不到,不用悲悲切切,找到了也不用喜。这只是人生中众多历练之一。
第五章 往年大厂面试题
腾讯面试题精选
计算机网络相关
1 TCP三次握手、四次挥手
2 TCP滑动窗口机制
3 TCP拥塞控制机制
4 socket模型
C/C++相关
1 虚析构、模板和宏
2 虚函数实现机制
3 vector与list的区别,map是如何实现的,查找效率是多少
4 extern 关键字有什么用
5 malloc和new的区别,能否malloc(1.2G)
linux以及操作系统相关
1 内存池实现
2 进程间通信机制
3 Linux ps命令,以及看内存当前使用状态的命令
4 进程与线程的区别,共享的数据
5 进程的内存空间
算法与数据结构 (手写代码实现)
1 大整数加、减、乘、除、求模运算实现
2 很多整数,找其中出现次数最多的那个数
3 单链表翻转(两个指针如何实现)、查找、删除、插入以及双向链表、有序链表合并
4 判断一个整数是否是2的整数次幂.(n&(n-1))
5 二分查找(注意边界条件)
6 常见排序算法的实现以及稳定性(快排跟归并考的很多)
7 字符串翻转(O(n))、匹配(KMP算法)
8 最长递增子序列(nlogn的算法)
9 链表判断是否有环,环的入口,两个链表是否相交(快慢指针)。
10 指定一个数组,求2个数的和等于指定的和(某一个数),如果是3,4,5,n个等于个的和(某一个数)呢?(可以看作背包问题)
11 跳台阶问题
其他
1 红黑树的性质以及插入和删除
2 解析XML文件
3 千万级的用户,提供一个服务,该服务有很多模块,现在有一个底层模块需要优化,问怎么实现,在不影响其他服务模块以及用户体验的情况下。(面IEG)
4 卡特兰数以及公式推导(应多很多)
5 未知大小的文件,翻转整个文件
6 如果内存中有个cache存储qq号和最近登录时间问怎么样做hit和淘汰
7 检测短信敏感词
8 大数据问题
9 C++、java和PHP有什么本质区别
我的面试经历
1:你是如何理解Android操作系统的。
2:是否熟悉framework层,如果熟悉,那就对framework做个简介。
3:是否熟悉多线程,如果熟悉,介绍下线程。
4:对象锁和类锁是否会互相影响,会举例子让你判断锁的使用是否恰当,并说出原因。
5:是否熟悉Lopper架构,如果熟悉说下其原理,如果你自己实现,你会怎么实现。这里主要考察阻塞消息队列原理,和其变形。
6:自定义控件原理,及消息分发流程。
7:binder工作原理。
8:ActivityThread,Ams,Wms的工作原理。
9:如果工作中需要修改framework,你如何寻找切入点。
电话面试就这么多内容,自我感觉给回答打了75分,然后就是等通知;又隔了两天,阿里的HR打电话让我去指定地点面试,心里有点紧张,因为想给马云打工的人太多,竞争激烈程度可想而知(哈哈放平心态就好了,每个人都会有一个最好归宿)。
和技术负责人聊了聊,大概2小时左右。
主要聊的是framework、binder、并发容器、线程并发和对象锁,再就是ndk使用的是否熟练,是否熟练hook技术等;还有你遇到过什么技术难点,是如何解决的。还有你读过什么开源工程,有什么感想,你是否考虑过做一个开源工程。最后就是设计一个多线程并发处理大数据量,然后刷新UI的架构。
面试总结:通过这次面试知道自己还有哪些不足,要继续努力,功夫用在平时很重要。
阿里面试题精选
Android
- 有没有遇到OOM问题(有遇到内存泄漏问题)
- Handler机制
- ThreadLocal
- Activity启动到加载View过程
- View绘制过程
- LinearLayout (wrap_content) & TextView (match_parent) 最终结果?
- OKHttp(1. 为什么选择它? 2. 性能了解不?3. 内部有哪些设计模式)
- 了解EventBus吗?
- Activity生命周期?启动透明Activity生命周期?按Home键生命周期?
- 后台杀死APP后怎么恢复数据?
- 一个APP可以多进程嘛?
- ListView和RecyclerView区别?
- RecyclerView卡顿怎么排查?
- RecyclerView怎么实现多Type?
- RecyclerView的ItemView层级过深怎么优化?
- Android多进程?
- 怎么设计Android线程间通信?
- Handler机制?子线程可以用Handler吗?
- ANR?
设计模式
- 用过哪些设计模式
- 观察者举例
网络
- HTTP & HTTPS区别
- TCP了解么?握手与挥手过程?
- 长连接?
- push怎么实现?
其他
- 为什么选择飞猪
- 专业问题
- 参加的比赛
项目
- 为什么选择OKHTTP框架
- 加载图片框架?(学一下Glide)
- JSON解析框架?(学一下Gson,FastJson)
- 技术选型?
- 页面个数?
- OSS上传凭证怎么设计缓存?怎么加密?(加密算法?)
- 还有哪些项目可以说的?
Java
- private protected public 关键字的用法区别!
- 接口,抽象类区别?抽象类要不要实现接口的方法?
- Map的线程安全?读多写少选哪个集合?(CopyOnWrite,不懂原理没敢说)
其他更多面试题,答案解析,我都收录在了《Android高级架构师面试题库》,这份341页PDF的系统学习面试题,有如下内容:
注:这个面试题集不是供大家临时背诵之用的,如此庞大的知识体系,光靠记是记不住的,打铁还需自身硬,你需要真正的理解才行。本面试题集旨在帮助大家 梳理知识点以及查漏补缺之用。
- Android进阶学习全套手册
关于实战,我想每一个做开发的都有话要说,对于小白而言,缺乏实战经验是通病,那么除了在实际工作过程当中,我们如何去更了解实战方面的内容呢?实际上,我们很有必要去看一些实战相关的电子书。目前,我手头上整理到的电子书还算比较全面,HTTP、自定义view、c++、MVP、Android源码设计模式、Android开发艺术探索、Java并发编程的艺术、Android基于Glide的二次封装、Android内存优化——常见内存泄露及优化方案、.Java编程思想 (第4版)等高级技术都囊括其中。
-
Android高级架构师进阶知识体系图
关于视频这块,我也是自己搜集了一些,都按照Android学习路线做了一个分类。按照Android学习路线一共有八个模块,其中视频都有对应,就是为了帮助大家系统的学习。接下来看一下导图和对应系统视频吧!!!
Android对标阿里P7学习视频
- BATJ大厂Android高频面试题
这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等
【Android高级工程师进阶系统面试题】:下载链接