2019 1.5年 Android跳槽面试复盘 今日头条 有赞 贝贝网 涂鸦智能

Posted Android进阶指南

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019 1.5年 Android跳槽面试复盘 今日头条 有赞 贝贝网 涂鸦智能相关的知识,希望对你有一定的参考价值。

     去大厂是每一个菜鸡的心愿,奈何大学水了四年,校招无缘。笔者从18年下半年开始准备社招,过程复杂坎坷,从18.12到19.3,面了很多公司,天幸最后被头条收了。 如今对之前的整个历程做一个复盘,希望可以归纳出点收获,也能对各位有所帮助。(部分面试相隔既久,题目不全,还望见谅)


1

 总纲 


     ● 准备过程与学习路线

     ● android常见考点和复习重难点

     ● 1-3年阶段的技术要求与准备策略

     ● 面试情况复盘

     ● 常见问题踩坑指南。


——


2

 准备过程与学习路线

——

   去年年中,本人搜集了boss,拉钩上BAT TMD相关的JD要求,混迹于各种面经帖,对相关要求进行了简单归纳,在1-3年这个阶段,基础还是要夯实的,以前欠下的债该补的还是得补,绕不过去。整体来看,也是大家都能想到的几块知识。

   ● java基础   

   ● 数据结构与算法。

   ● Android主体知识

   ● 常见框架源码了解。

   ● 网络基础。

   ● 学习方法的问题,平时也不断摸索了一些,事 半功倍是不切实际的,做技术还是得踏下心来用做学问的态度,看书,写代码,看源码。别无他法。 现在网上很多视频资源,进阶类的也不少,但是我不喜欢看。视频的学习方式比较被动,进度是别人把控的,也会抑制自身的思考过程。短期感觉走了近路,但是很难达到预期效果。 一套视频看下来n个小时,不管吸收多少,n个小时是浪费进去了。但是看书可以很快跳前跳后,内容衔接,知识量也更充足。 作为程序员,学知识还是要硬刚,放弃捷径执念。

   ● 学习路线。像我这种学渣流,之前学校打的基础不够好,我建议第一步先从基础做起。

      第一步,计算机网络+java基础+数据结构。 进行完本轮复习后,对后面学习网络框架,看第三方源码,系统源码路会顺利很多。我们平时觉得用不到的东西,在源码里会频繁出现。 

     第二步,Android主体+ 常见框架源码。

     第三步,算法。  算法之所以放在第三步,原因在于就客户端社招而言很多公司不着重考察算法,如果时间紧张可以灵活把握。 另一方面最后复习算法,能最大程度上趁热打铁,练完即上阵。

 ● 推荐书目

    ⊙计算机网络《计算机网络原理》 正常强度复习一遍课本即可达到要求。

    ⊙java基础    

      1. 《java编程原理》刷一遍即可,对一些java层面的东西会有豁然开朗的感觉。

      2. 《java并发编程艺术》并发相关的技术原理,面试考察不突出,但是对知识体系的形成很有帮助。

      3. 《深入理解JVM虚拟机》面试常客,垃圾回收算法,垃圾收集器要足

够熟练。

      4. 《Effective java》

   ⊙数据结构 《数据结构与算法(java语言描述)》 着重了解java语言中的各种集合类型,以及常见的数据结构的概念。

   Android主体知识

       1. 《Android内核剖析》 基于Android2.3版本,其特点在于剖析了framework层的主要流程,提纲挈领,利于建立整体的把握。

        2.  《深入理解Android内核》与上类同,但是不如内核剖析讲的系统。可以对照来看。

       3. 《Android开发艺术探索》 这本比较有名。就不多说了。书好在对知识点的把握和提炼的比较好。但是深度上不应作为我们的目标。

       4. 《Android插件化开发指南》包建强。 可以根据书中的插件化的具体场景加深对framework层原理的理解。 

      5. 《Android源码设计模式》设计模式方面这一本就够了。如果对源码情景比较熟悉,可以速读。

   ⊙算法知识   

   本人一开始是通过《数据结构与算法(java语言)描述》来学习的,但是一大堆算法推导公式看的头昏脑胀,感觉效率并不高,本人建议直接leetcode刷题,leetcode上有专门针对各大厂的算法题集锦,可以有针对性地分类型刷题。 基本上刷上二三十道,临场再发挥一下就足够应付大厂面试了,但是一定要坚持手写代码培养感觉。客户端总体对算法要求不高,难道上大概简单到中等。刷题了二十多道,面试下来,算法基本上都能过。


——


3

 Android常见考点和复习重难点 

——

    下面是本人觉得比较重要的,必须要专门突破的考察重点。建议不只要当作题目去准备,前期可以当作专题,去准备一整块的知识,越细越好。

 ●Handler原理, 对Handler,Message,Looper源码足够熟悉,ThreadLocal,Message缓存池的原理,线程间通信的底层实现,延伸到HandlerThread,IntentService等异步实现的比较。

Binder原理, Binder的实现原理,不同IPC方式的比较。

● JVM虚拟机垃圾回收机制,不同的回收算法的使用场景,不同的垃圾回收器的特点。

● 类加载机制,双亲委派机制。

● Android性能优化,启动优化,view优化,**内存优化**,需要达到足够的深度。而不是简单了解,准备一些具体项目中的应用场景。

● MVC,MVP,MVVM架构各自的特点和在项目中的应用,最好延伸到Google官方的框架,并提前做一些预研。

● 几个场景的代码流程,复述出其过程和原理。

   ⊙activity的启动过程。两个Activity生命周期的切换,ActivityThread与AMS的通信过程,线程,进程,View的准备。Activity状态保存的时机和原理。 横竖屏切换的过程。

   ⊙应用的编译打包过程。

   ⊙apk的安装过程,冷启动和热启动过程。

   ⊙java中new一个对象,其具体的流程细节。

   ⊙view的绘制过程。

   ⊙Android事件分发机制

● 自定义View

● 各种动画的实现原理。

●ListView 的源码实现和缓存机制。 RecyclerView的局部刷新和缓存机制。

● 四种线程池和四种引用,各自的原理和应用场景。

● 两种序列化方式及其原理。**需要深入理解。**

● 网络原理,Http和Https的区别,UDP和TCP的区别。三次握手和四次挥手。 断点续传。Http报文结构和状态码。

● LRU算法的具体应用。

●ArrayList,HashMap,LinkedList,ConcurrentHashMap, SparseArray,HashSet,TreeSet**,以上集合需要达到熟练程度。其他的自行了解。

● 推送,进程保活。进程的优先级。


其他零碎的知识点不再列举,以上是面试常问的点,建议不要看成题目去准备,而应该以点带面,深入挖掘。


4

 毕业1-3年的技术要求和准备策略

——

   之前在网上也搜过具体资料,相对而言,中小型公司1-3年的员工可能作为搬砖主力在用,而大厂更多在意的是这个阶段的候选人的技术潜力,更倾向于寻找高潜选手。 那么对于我们,努力的方向就是如何建立自己的高潜人设。  

学历,学历不代表能力,但是是能力的证明。但是这个已无法改变。可以忽略。

技术博客,GitHub。 这方面的意识越早越好,技术博客既是自身知识的重塑输出,另一方面也是自己的牌面。当时如果目前写的不咋滴还是不建议拿出来。 其实不需要输出太高深的东西,只要总结的好,有自己的见解和加工。也能侧面反映出一个人的实力。

项目复杂度  这个方面可能会被忽视,很多人在公司写业务,但是真到用的时候发现公司项目乏善可陈,简单的有点拿不出手。 这方面要及早布局,简历上需要有个复杂度足够的拳头项目,能代表你的技术最高水平。可以是自研的,也可以是公司的,甚至可以是公司里别人的。只要你能百分百吸收为自己的东西。

技术广度。 高潜的另一个特点是好奇心和求知欲。具体表现出来就是一个人的技术广度,这需要平时的广泛涉猎,掌握程度达到了解-熟悉即可。

即知识面足够的情况下,有自己的拳头项目,在某一个方向达到一定深度即可。

基础。 有些情况下,面试官会无意间考察你的基础功底,社招不会着意去检验,但是某些地方可以很简单判断出一个人的功底如何。平时一些东西还是要慢慢去啃,有害无益。


5

 面试情况复盘 

——

    刚开始会着意记录一些公司的面试题目和过程,但是后来没有坚持下来,有很多题目记不清了,只把一些想起来的补充出来。还有许多问题是基于项目来问的,没办法整理。另有一些公司的面试题都是重复的,所以只整理了一些有代表性的面试。


    贝贝网 

    电面  + 技术一面 + 技术二面 +  leader 一面 + leader 二面 + Hr 面

    贝贝网面数比较多,晚上下班跑过去面的,一直面到晚上十点多,效率很高,面试官比较nice,但是感觉整体气氛上有点压抑。效率很高,薪资上也还可以。第二天就给了offer。但是为了等后面更好的机会,offer没有接。

具体面试题;

● 做一下自我介绍

● activity 启动时View的流程

● resume时activity 是否完成了渲染

● 介绍一个组件化架构

● arouter的实现原理

● 垃圾回收机制。一个变量不用了什么时候被回收。

● 双亲委托机制,如何打破双亲委托机制。

● 简述handler机制,为什么while循环不会造成oom。

● glide实现原理,有什么出彩的点

● 是否看过源码,如何学习

● hashmap的扩容因子是做什么的,每次扩容多少

● popwindow和dialog区别是什么

● https的握手过程

● 如何看待公司加班的。

● 链表成环的判断,手写一下伪代码。

● java虚拟机垃圾回收算法。为什么要进行分代回收。


  有赞  

  有赞之前因为996搞得沸沸扬扬,但是本着学技术的态度,还是投了一下,年前投的,可能因为之前招聘已停,直到年后才开始约面。整体感觉还比较nice,面试官比较负责认真。同样晚上面,本来预计分两次面完,但是面完之后觉得时间还早就一次性搞定了。

  电面 + 技术一面 + 主管二面 + HR面

● 类加载机制简述,

● 对象初始化过程

● webview的内存泄漏是否了解。

● Js与原生之间的交互有几种,有什么不同和优缺点。Js在之前版本的安全漏洞是否了解,如何避免,为什么会有这个漏洞。

● 如何判读链表成环,如何找到入环的点。

● 不同线程之间是如何进行同步的。

● 最熟悉哪个框架,简单讲一下你对okHttp理解。

● 双亲加载机制,有什么办法可以打破

● activity切换时,两个activity的生命周期变化,

● 项目的整体结构,组件间通信如何实现,Arouter原理

● 组件间通信除了Arouter还有什么其他实现方式,如何实现互相调用。

● 项目中组件间的依赖关系是如何演进的。

● gradle分渠道打包是否熟悉。

● HashMap原理,如何解决hash冲突,除了这种方式还有其他的方式吗。

● SparseArray与HashMap区别,他的优点是什么。

● LinkedList和ArrayList区别。各自的优缺点。迭代器实现筛选。

● 项目中用的是哪种序列化方式,为什么要用这一种,除了他们的原理不同,还有哪些考量。


  今日头条   

  头条的面试比较偶然,本来准备试一下其他的几个大厂,但是今年裁员比较严重,大厂社招的title也比较高,1.5年的菜鸡基本没给啥机会。头条相对来讲还是比较喜欢年轻人的。 一个猎头朋友介绍的机会,没想到竟然意外约面并拿到了offer,如梦一般。

  技术一面 + 二面 + 三面 + Hr面(题目排序不分先后,想到哪个写哪个)

● 说一下对MVC MVP MVVM的理解,以及MVVM的实现方式有哪些。

● Retrofit是否有过了解,是否了解其动态代理的实现。

● 项目中用的代理是如何实现的,只能在java层做代理吗。

● 目前Android中常见的应用双开,系统是如何实现的。

● 目前Android中常见的双系统,是如何实现的。 又没有了解过。

● Android中一屏展示两个应用,那实现这个效果,你觉得framework层需要做哪些修改。

● 假如让你设计Binder机制中两个进程的通信协议,你有什么思路吗。

● 如果让你用代码实现.9图的伸缩过程,你有什么思路。

● HashMap版本变化和原理。hashcode的实现方式,hash冲突如何解决,查询时如何查询的。

● java中常见的ArrayList是否线程安全,如何让它变的线程安全。系统提供的方法实现线程安全本质上是如何做到的。

● 简述Java的内存模型

● JVM内存回收时有没有办法监听,如何解救,解救过后finalize方法是否每次都会调用。

● 你在项目中做了哪些性能优化。

● 当时做事件还原时是基于哪些考虑。 有没有去做具体的技术选型和其他技术方案的参考。

● Application可以做Activity生命周期的回调,为什么还要通过反射去实现,如何考量的。

● 自定义view时draw()和onDraw()方法有什么区别。

● 是否了解onSavedInstanceState方法,灭屏时是否会触发。 OnRestoreInstanceState与其总是成对出现的吗,说一下你的理解。

● 讲一下Android的动画原理。

● rxjava是否了解,说一下你的理解,你在项目中用到的哪些比较多。floatMap和Map呢。线程切换的原理是否了解。

● ConcurrentHashMap的原理是什么。

● View的绘制流程。

● 你觉得上一面面试怎么样,有哪些没有答好

● 面试中的算法题,每面最后都要进行1-2个手写算法。

   ⊙ 完全二叉树的遍历,每一行从左到右遍历的。变种,波浪形遍历,在原来的基础上修改最少的代码实现。

  被旋转过的有序数组,给你一个数,返回在数组中的位置。

  ⊙无序数组,含有负数,0,正数,找出两个数,使之和的绝对值最小。

  一副牌,用最快的速度将他们打乱顺序,要求随机。你能否想出尽可能多的策略。

  在一群人中两两互不认识,但是都认识明星,找出哪一个是明星。


6

  常见问题踩坑指南

● 关于为什么离职,最稳妥的方式是说为了技术发展。当然面大厂的话,不需要理由的,人人都想去大厂。 但是其他的理由能不扯还是尽量不扯。

● 跟HR谈薪不可太急。大厂走流程一般计较慢,有几家公司笔者因为心里没底,问的太频繁,被HR压价。只要拿到口头offer,一般不会出什么问题,一定要端着。

● 留好下家,虽然理论上拿到口头 offer,被放鸽子的概率比较低,但是对于HR的话是不可信的,一切以书面为准,对于备用offer,能拖则拖,不能拖先入职也可。笔者以为拖黄了,导致在等头条offer的时候等了很久,心力交瘁,没有退路。

● 功夫下在平时,技术人员的内功在面试时是装不出来的, 面试官会着重考察。知识点繁多,任何一点扩展开去都需要很多时间才能掌握。临时抱佛脚很难通过。




深知自己的不足
走慢而遠




编辑 | verf

简书 | https://www.jianshu.com/u/7e061a4d7dae

本文如有侵权及其他问题,请及时联系删除。

——

Android Bee


以上是关于2019 1.5年 Android跳槽面试复盘 今日头条 有赞 贝贝网 涂鸦智能的主要内容,如果未能解决你的问题,请参考以下文章

建议收藏复盘:2021年最新最全最实用的Android岗学习资料/面试真题

秋招前的复盘:2021年最新最全最实用的Android岗面试真题,已收录GitHub

4年Android开发成功跳槽大厂,最新面试题分享

历经两个月整理的2023年最新Android面试题合集,足足900+页,年后跳槽必备

历经两个月整理的2023年最新Android面试题合集,足足900+页,年后跳槽必备

你知道 Android 面试官最喜欢问那些技术点嘛?这篇带你复盘往年面试题!