前言

这是一篇许多年前写的社招面试心得,2023年了,再次翻出来,感触颇深,时刻过的好快,觉得写的有许多的不足,不过感觉值得拿出来,再次共享一下~

正文(2019年的阅历哦)

每到“金三银四”的时节,总人许多人去寻觅名叫“面经”相同的东西,其实便是一个个详细的标题,然后临阵磨枪,去“背”答案,假如一向是这样的话,我信任你的能力不会有任何行进,即使作业三年五年也达不到高级工程师的水平,事实证明这类“程序员”占大多数。而且我以为一个“面经”真实有价值的内容是面试前你是怎样学习的,面试中面临不会的标题你是怎样答复的,以及面试后的你的感触和总结,而不是冷冰冰的罗列标题。

最近两个月,由于被裁人,一向在不断的找作业,现在现已拿到满意的 offer 并顺畅入职,写这篇文章的时分正是我入职后第一个周末,感触仍是很复杂,被裁当天的无助,像战役相同的面试,收到第一个 offer 后的安心,以及入职后新的等待和压力都在其间。因此想用文字来记录下这一切,一起也期望能够给同龄作业阅历的同伴们一点点帮助和启示。

个人简介 :自己18 年硕士毕业,先后在爱奇艺(实习),摩拜任职,由于裁人被逼亲身阅历了一次“互联网寒冬”,很舍不得摩拜的同事,由于从同事上升为朋友是一件很不简略的事情。近两个月我先后边试了包含百度,搜狗,头条,小米,搜狐,360,网易,拼多多等等十多家公司,很疲惫,也有点迷茫,一起也很感谢一切的面试官给我的辅导,收获颇丰。

想要共享的内容

开篇我也表达了我对“面经”的看法,所以我就不罗列详细的标题了,而且每次面试的标题都迥然不同,其他专栏现已列举的满足多了,再列举也没有太多的意义,这儿我想侧重共享以下五点:面试前的预备学习办法面试风格面试后的感触,以及职业规划

面试前的预备

面试前必定要系统的温习各个模块的常识点,不要匆忙的出去面试,特别是关于大公司来说,面试时机本来就不易,不要由于自己没有温习预备好,而白白的丧失了时机,特别是关于忽然被裁,事前没有充分预备的同学来说,更应该注意这一点,我深知被裁的滋味,可是被裁后也要理性的对待这件事,不要由于自己的严重,无助而仓促投简历去面试。

关于Android运用开发而言,需要温习的并不是许多,无非是都熟知的那几大类:Java 根底,JVM,Java 并发,Android 源码,Android 第三方结构,Android 性能优化,数据结构与算法,再加上一些网络常识等等,这儿我就不在重复赘述了,我们能够去参考张拭心同学所总结的这篇文章(xiaozhuanlan.com/topic/06251… ),仍是很全面的。

别的我在弥补两个点,咱们在温习详细的标题或常识点时,还能够侧重去百度查找详细公司的面试标题,由于许多面试官都会习惯性的问同一问题或同类问题,这样更有针对性。再者便是自己简历上所描绘的内容必定要会,包含详细的常识点,也包含你的项目阅历,都平等重要。

当自己感觉温习的差不多了,先不要投递和预约大公司或许自己神往的公司,先去几家小公司,或许自己必定不会去的公司面试,这样即使没有经过面试也不算是浪费了时机,还能趁便帮助自己更好的查漏补缺,假如经过了还能够愈加自己后边面试的决心。尽管这样的行为“诈骗”了一些公司的hr同学,但面临自己求职的利益来说,只能抱愧了。

学习办法:

学生时代的咱们,常常听到的一个词便是“学习办法”,它看不见摸不着,却常常体现在咱们的考试成绩上。等到毕业,真实作业的时分,这个词似乎离咱们越来越远,不变的是咱们仍然只是在不断的做方案,这一年要读几本书,这一月要学会哪些常识点,甚至以天来量化,但很少去考虑为什么去学习这些,更重要的是怎样去学习。

面试温习和咱们平常学习也相同,在学习态度端正的前提下,那么怎样学习就会变的特别重要,尽管在学生时代老生常谈,可是自从作业后,许多人忘了它,都在急功近利的搪塞常识,以为读了几遍刚哥写的《Android 开发艺术探索》就能够成功跻身高级工程师了,真实了解的仍然在少量,和读了几遍没有必然联系。我才疏学浅,不过仍是想表达和共享下我的学习观。期望能够给不知道怎样学习的同伴一点点启示。

  • 系统 “系统”很好了解,也便是咱们在温习常识点时必定要全面,只要全面了,咱们的根底才干够打的牢,这个根底很重要,根底有了才干够更好的进行考虑和总结。 比方咱们常常会运用以及研究一些 Android 第三方的结构,如 OKHttp ,咱们要从三个方面去全面了解它:

    1,运用 okhttp 完成根本的网络拜访功用,包含根本的数据恳求,表单提交,文件上传,文件断点下载,https的设置等等。 2,深化研究 okhttp 源码,熟悉 okhttp 中的调用进程,拦截器原理,缓存原理以及其间涉及的规划形式,并能够自定义拦截器完成特别的功用,如日志打印等等。 3,在研究 okhttp 缓存原理之前,得首要熟悉 http 缓存的相关字段以及在设置 https 时,也要全面温习 https 的相关原理。 经过以上思路的温习,慢慢地你的常识系统就会建成,根底也就日渐结实。

  • 考虑 我以为考虑和下面的总结都是比较困难的,由于这和每个人的根底和视野有很大的联系,根底差、视野小的工程师必定和根底结实、才智广范的人所考虑的深度和方向不相同,就拿我这种中级工程师来说,我面临 okhttp 所能想到的方向有:它与 retrofit 是什么联系;okhttp 与其他网络结构的比较;由于涉及到网络相关,还或许再延伸到网络优化方向等等。可是不论你所考虑的方向是什么,只要有所考虑便是行进,而不是单纯的停留在 okhttp 结构的自身。

  • 总结 这儿的总结是在上一步考虑的根底之上进行的,并不单单是把自己所学习过的常识点悉数罗列出来就能够了。由于每个常识点在学习的进程中看似是独立的,实践上常识点之间大都是有相关的,咱们要学会去考虑并总结各个有相关的常识点,然后尽自己所能深挖出更多的常识点,使之串联,后边我会运用实践的面试题再来愈加清楚的解说这一点。 ##面试风格: 这部分我想共享一下面试官都是怎样去问问题的。所以就暂且起名总结为面试风格的问题。 我想我们应该也都知道,这儿我大致分为五种:

  • 悉数按照简历上所列举的常识点问。在我这次面试阅历中360的一面和二面的面试官都是这样问的,因此咱们必定要熟知咱们简历上所写的内容,包含新技能例如koltin,flutter,只要简历上有写,就必须得会

  • 从简历中选择问题问,并不全问,当然面试官也会根据自己的习惯发问简历上没有写的内容。这种状况是最多的。

  • 在你介绍项目阅历的时分,从中选择感兴趣的问题或相关常识点去发问。

  • 只重视你的项目自身,包含项目介绍,项目难点等等。在这次网易一面中便是这样的,只询问了我简历上所列举的项目重难点,以及处理方案。

  • 不发问任何详细常识点和项目阅历,让你答复一些敞开性的问题,比方你是经过什么途径学习的;你对跨平台的技能怎样看待等等。这种面试办法一般出现在技能面的最终一面。

最终我想要侧重强调一下,项目阅历很重要,特别是关于社招生来说,所以就要求咱们在平常做项目的时分必定要逐步的去堆集项目的重难点是什么,以及怎样处理的。当然有或许在实践作业中咱们负责的那一个模块的确没有很大的难点值得去说,这也是有或许的,这就需要咱们去全面的了解自己的项目,看看其他同事负责的模块有没有值得去学习和总结的,这不仅有利于咱们技能上的行进,也有利于添加咱们的项目阅历。 ##面试后的感触 这次我阅历了百度,搜狗,头条,小米,搜狐,360,网易,拼多多等等十多家公司的面试,收获颇丰。这部分我要点共享下给我留下深化形象或让我有许多考虑的面试阅历。以下共享不分排名,想到哪里就写到哪里。

拼多多

“备受争议”的一家电商公司,开展很快,不过这不是我想说的要点,我想说的是,拼多多的两位技能面试官很和蔼(当然hr同学也很好了~),提出的问题很新颖,就拿Handler来说吧,大部分的公司都会直接问,说说你对音讯机制Handler的了解,拼多多的发问大约意思是:

1,让你规划一个线程池,假如调用者在传入的Runnable任务时,在run办法直接运用了Handler,会产生什么? 2,1的问题还比较简略,子线程不会默认给你一个looper,你需要调用prepar去创建,调用loop去敞开无限循环,这是一个正常的答复,问题又来了,面试官又问你,接下来又会产生什么? 3,到这儿我信任会有一些同学暂时会”蒙”一下,心想,应该不会产生什么了吧?2中现已提到loop是无限循环取音讯,假如到现在什么都不做,这个线程会一向停留在run办法中,完毕不了.到这儿还没完。 4,知道IntentService吗,它里边也有一个Handler,它是怎样完毕执行呢,假如屡次start这个IntentService,它又怎样判断什么时分完毕呢?

这系列问题都不难,但我想说的是答案并不重要,重要的是咱们在学习的时分不但要多问为什么,还要把各个常识点能够串联起来,这个很重要,假如各个常识点都略知一二,都串不起来,说明没有正真的了解。也领会不到学习的乐趣。

为了能够愈加深化的领会到”常识点串联”的重要性,我这儿再举一道题:

1,信任我们都被问过activity发动流程,也被问过activity生命周期,也被问过ui制作流程,当然也被问过在activity的oncreate办法中,为什么获取不到控件的宽高,怎样才干够获取,为什么? 2,上面一口气说了四道经典面试题,当然答案不重要,这儿我在诘问一下:假如在onresume办法中能够获取控件宽高吗?在诘问一下:ui制作流程和activity生命周期有什么联系,或许ui开始制作的时机到底在什么时分? 3,所以仔细想想,这些常识点都是有联系的,咱们在温习的时分应该这样去想,这样才干够愈加有功率的去学习,才干够愈加快速的摆脱初级工程师的帽子。

这儿最终举一道题,以完毕拼多多面试给带来的考虑: 我们都知道子线程不能更新ui,我再诘问一下,子线程真的不能更新ui吗(答:是能够的,也不会报错,当然答案不重要)

百度:

我心目中大厂中的大厂,正由于这样也是我这么屡次面试中唯一严重的一次,还好结果还很满意。两位面试官也给我提了许多建议,很感谢,这儿仍是用一道现场面试题来表达我的考虑吧。

你对网络恳求做过哪些优化呢~ 1, 关于我这种菜鸟来说,这道题真的很空泛,可是我不能就这样简略的答复,我不知道,我没做过,网络这块我只用了现成的结构,这样答复必定会挂的! 2, 我信任假如我是面试官,对面坐着一位作业阅历不足1年的同学,我也不等待他能够把这道题答复的很好,但我也不想听到那么简略的我不知~ 3, 所以,关于这道题而言,我首要答复了下okhttp中链接池复用,又简略讲了下对HttpDNS,IP直连的了解,以及对Http2.0多路复用,长衔接的了解等等,当然我了解的十分浅,也当然答案并不重要,重要的是你面临一道不会的标题时,不要简略的去说no,倾其一切,把你的主意和思路都列举出来,不论对错,让面试官看到,你在考虑~

当我简略说完这些思路后,面试官又给我深化解说了下,十分感谢~~~~接下来我也会查尽材料去深化学习这块常识,当然其他常识模块也都要慢慢去深化,去总结~~

小米

在去面试的路上,感觉小米总参好远好偏远,到了之后,环境还能够,不过接下来的面试就不是那么顺畅了,这或许是我这次一切面试阅历中最糟糕的一次了…令人意外的是我竟然还经过了面试,幸运~

小米这次面试阅历或许对我的影响最大,由于这次阅历算是改写了我一次认知(说是改写认知,或许夸大了些,但我找不到其他词语来描绘了,就这样了),仍是用一道现场面试题来:

百度、头条、小米、网易、拼多多等公司 Android 社招面试心得

仍然答案并不重要,我记住我答复这道标题的时分有理有据,面试出来后,我总感觉哪不对,就又认真看了看源码,写了个demo去验证,果然我的答复大错特错,现在回想面试官听我答复的时分是什么主意,感觉好为难~

给我的启示是,看源码的时分,要带着问题去看,或许这个谁都知道吧,我就不侧重提醒了。别的对我这样初级程序员来说,看源码的时分不可避免的会去搜索现有的文章帮助了解,这无可厚非,重要的是不要百分百依靠这些文章,我的意思不是说这些文章写的欠好,我或许更多的想要强调一个自主独立性,由于你看源码时的思维形式或许和文章作者的不同,这样或许就造成你一向在跟着作者走,没有了自己的考虑方向,因此也或许去忽视或许误解其间某些常识点,造成我这次的为难~

还有看完源码后,假如能够,动手写一个demo去验证你所学到的常识就更好了,别的愈加深层次的要求是,假如能够手动模仿写一个大约的功用结构,信任会对其间完成的细节愈加透彻,比方手写Handler,手写Retrofit等等。

网易

关于网易,我的第一形象便是“猪厂”,自己养的猪必定很好吃,哈哈,可惜没有吃过网易的食堂,必定很好吃^_^

网易的两轮面试中没有发问一个详细的常识点,这点有的意外,所以形象很深化。 一面全程问的是我的项目阅历,重难点是什么以及处理方案,在前面的“面试风格”那部分也提到过,感触也在前面说了,总结一句话便是:平常作业中必定要多堆集项目中的重难点。尽管一面的最终也问了道算法题,但很简略,就不提了。 二面面试官我感觉是一名技能总监,由于全程问的是敞开性问题,其间一个问题是:你怎样看待flutter,flutter能否真实的普及。差不多是这个意思把。

头条

字节跳动是我一向很神往的一家公司,创新、活力、强大、潜力,是现在为数不多能够应战bat地位的独角兽。

在头条的面试进程中,形象最深化的一个问题是对MVC、MVP、MVVM的了解,以及MVVM的完成办法有哪些。尽管许多博客也都介绍过三者的差异,以及MVVM的完成,但大都描绘都很晦涩,所以我以为许多作者也只是相互抄袭算了,这儿引荐一个专栏xiaozhuanlan.com/ditclear 。

我以为这道标题很重要,由于经过这道标题的调查,能够看出一名程序员是否在程序规划上有过自己的考虑,而不是在作业中简略的“搬砖”。

在Android架构规划中,大体上只要三种规划,组件化,插件化,再加上MVVM(或mvp、mvc),假如再能够熟练都运用各种规划形式,了解规划形式的六大原则,那么你的代码写的必定很漂亮。

一起由于头条在面试中十分重视算法,这段时刻我也狠狠的总结了一下算法相关的常识点。

数组类、链表类、树类,位运算类,大数处理,简略的动态规划,特别的数据结构,如map,set

假如对算法并不是那么感兴趣,只是想要敷衍面试而言,算法其实并不可怕,我们都知道头条或许是面试算法最多的一家公司了吧,即使这样,头条算法面试中的标题也都不难,无非是上面中的分类,数组,链表,以及二叉树的操作,最多加一些简略的动态规划标题~

例如中序遍历二叉树,运用非递归办法,就拿这道题而言,十分根本,也没有难度,期望对算法面试畏惧的同学行进决心,认真学习数据结构就能够了~(别的在弥补一点,关于校招而言,由于有一个线上笔试环节,笔试中的算法平均难度稍微高于面试中的~)

这儿我还想再烦琐一点,由于关于算法的预备我们大都不知到怎样去温习,只知道一味的刷题,特别是关于数据结构单薄的同伴来说,没有目的的刷题并不能真实行进你的算法能力,更多的是你的自我安慰,心理告知自己在学算法,但是并没有功率。

首要必定先要仔仔细细学的数据结构,图的那章假如不想看,关于算法面试而言能够不去看,还过有精力的仍是去看看,究竟树与图之间仍是有许多相似之处。 根底欠好的同伴在刷题的时分必定要注意一下几点:

  • 开始时先按照类型去刷,比如今日看数组类算法题,明天看链表类的等等
  • 每刷一类标题时必定要去总结其间的常识点,将这类标题的特点,常用的办法,常考的方向必定要了解透彻,这样才有功率,才会行进。
  • 根本类型的标题都刷过一遍时,再回头总结一切标题常用的思维 以上操作都应在数据结构学的比较结实的根底上进行才更有意义,所谓磨刀不误砍柴功嘛

最终再引荐一些有关算法的材料(想必大部分的同伴也都知道)

  • 算法引荐书目:剑指offer,程序员代码面试指南(作者:左程云)

  • 刷题网站:leetcode、牛客网

  • leetcode-cn.com/explore/int…

职业规划:

“职业规划”或许这四个字说的或许大了点,本质其实便是一个方针,包含你的当前方针,短期方针,长远方针等等。同样这也是面试中最常问到的一个问题,不论在技能面,仍是在hr面都是有或许被问到的,而且概率很大,简直每家公司都会问,所以关于这个问题,咱们必须有所考虑和实践的规划,不只是是为了敷衍面试,还关乎咱们的未来,有了合适自己的方向,才干更有功率、更有动力的行进,究竟咱们都有愿望~

最终

我的面试阅历共享或许不会去罗列太多的详细标题,由于我仍然以为面试阅历中最名贵的不是那一个个详细的标题或许详细的答案,而是完毕面试时,那一刻你的感触以及多天之后你的回味~(当然必定会有许多小同伴想要去看详细的面试标题,这个很简略,本专栏其他的文章共享的标题现已许多了)。

别的,假如我们有什么想发问或许交流的问题,能够直接留言就能够。