Android面试总结

写在前面:

先介绍一下博主的情况,16年软件工程毕业,非985、211毕业,算来也就一年半的工作经验,坐标杭州。在这里也感谢一下我之前公司的 leader,在我找工作的期间给了我不少了帮助,也在我拿到 offer 之后给我的指点。好了,下面说正题。我个人认为面试的过程就是一个印证你简历是否真实的过程,所以,在我们投递简历的时候,一定要保证我们简历的真实性,不要把你不了解或者不熟悉的东西体现在简历上面。除了简历之外,另外一个你能否拿到 offer 的关键就是你能否与面试官是否能聊得来,如果能聊的来,那么你拿到 offer 的几率就非常大。


面试准备:

其实我们在面试之前,准备阶段是一个非常重要的,博主就是因为没有准备充分,所以吃了很大的亏,在这里一定切记,要准备充分。

再说准备之前,我们先看一下博主的技能都有什么,这样配合着面试的具体题目能够分析出当你写一个技能的时候会被问到什么问题。

    1、熟悉okhttp,retrofit,rxjava 等网络相关框架

    2、熟悉 TCP/IP,HTTP/HTTPS

    3、熟悉自定义 UI 控件和动画特效

    4、熟悉内存泄漏相关问题的检测和解决

    5、熟悉Android 的绘图机制和事件分发机制

    6、熟悉Android 中的多线程

所以,上面涉及到的知识点还有相关的内容要定要非常熟悉。

除了上面的的内容,我们还需要复习一些其他的内容:

  • 项目经历:这个也是面试中大部分会聊的东西,项目中用了那些技术,这些技术的实现是怎么样的

  • Java基础:这个就不用多说了吧,博主推荐大家一个软件,叫 java面试准备 的 App ,可以去上面刷刷题

  • 设计模式:设计模式就不多说了吧只要是面试就会问到,23种设计模式,至少应该熟悉个10种吧 。

  • 算法:一般大公司必问的东西

其实面试的过程就是一个不断进步的过程,当我们尽心完一次面试之后,一定要学会总结,总结我们的知识哪里有空缺,哪里是不足的,然后去补足它。这样对我们后面的开发和面试帮助是非常大的。


正式面试

博主因为时间比较充裕,所以面了大概 10 家吧,其实这 10 家的中从 10 个人的初创公司到上万人的上市公司都有涉及,我下面会把公司的名字的拼音首字母写上,大家自己 YY 是哪家公司吧,好了正式开始


al(一面,没通过)

一面:

1、 okhttp 的内部实现,说完之后又问我缓存拦截器是怎么实现的

2、Activity 的生命周期,还有 service 的绑定方法,service 先调用了 startservice 方法,然后调用了 bindservice 方法,之后调用 unbindservice 方法,service 的生命周期是什么样子的, onStartCommand 里面的参数的意思

3、内存泄漏用什么检测的,常见的内存泄漏有哪些

4、广播就问了一下静态注册和动态注册的区别

5、get 和 post 的区别,get 有 body 么,http 请求和接受报文的格式

6、事件的分发过程和自定义 view 的流程。

7、 handler 的流程

8、启动线程的方法,暂停线程方法,我说了 sleep 和 wait,然后他又问了这两个方法的区别。这些都说完了之后问了我线程变量了(ThreadLocals)解过么,ThreadLocals 我是        研究过的,不过我当时不知道他叫线程变量,所以就没答出来。这些都问完之后问了我下载一个文件,使用多线程怎么实现

9、享元模式和桥接模式

10、Android 中classloader 有哪些,每个 classloader 的区别。之后又问了一下 GC 的相关内容,问了一下 GC 的算法有哪些

11、快速排序是怎么实现的,然后又问了对树有了解么,说一下树的遍历方法有哪些。

总结:

整个面试过程持续了一个多小时吧,感觉 al 面试的广度是真的大。从上面的问题可以看出来,不管什么问题都会向后延伸,所以这对我们知识的全面性是一个考验。其实除了上面技术性的问题,还问了我遇到问题怎么解决的,然后在开发过程中遇到过什么重大的问题。怎么解决的。其实这些问题都是考验你解决问题的能力的。虽然没有通过吧,但是从这次面试中也能反应出很多问题,首先就是基础知识复习的还是不到位,例如 service 那里有一个很基础的东西就没答上来,第二个学习知识的时候不够全面,只了解了一部分的主要内容,有一些细节性的东西了解的不够。所以在之后的学习中,在了解一个技术点的时候,一定要把知识学全面了,不要太片面。这次面试之后,我又认真的复习了一下基础知识,然后对我现有的技术盲点又学习了一下。以备后续的面试。


xf(三面,offer)

过程:

一面:

1、简述一下 okhttp 的内部实现,okhttp 的缓存拦截器和重连拦截器是在一个线程中执行的么

2、httpclient 和 httpurlconnection 的区别

3、Activity 生命周期,Service 生命周期。

4、ImageLoader 的缓存实现

二面:

cto 主要聊的就是项目中的内容,升级功能是什么实现的。推送是怎么实现的,然后接口怎么显示兼容老版本的,然后看了下 APP 就直接结束了

三面:

hr 主要就是聊了一下薪资,然后聊了一下福利待遇什么的。基本上整个流程下来也就一个半小时吧。

总结:

其实可以看出来,初创公司问的东西就比较少了,初创公司更看重的是你实际开发的能力。并不在乎什么算法数据结构什么的。这家基本很快就给了 offer ,其实我是不想去的,但是因为第一次找工作没什么经验也不好意思拒绝,所以就拖了几天。现在看来,如果不想去,就当面拒绝,不要一直拖着,这样不仅影响了自己找工作也影响了公司的招人进度。


wdw(一面,没通过)

1、常见的内存泄漏有哪些,如何修改的。用什么工具检测内存泄漏的

2、TCP 的三次握手流程,为什么是三次握手

3、看了下我们的 APP 然后说首页有些卡顿,问了我为什么会有卡顿,卡顿的解决办法好是什么

4、项目中要到的设计模式有哪些

5、单例模式的实现有哪些。

6、性能优化做过哪些

7、React Native用过么

8、项目中如何与 H5 交互的

总结:

这个公司在p2p 行业还是很出名的,不过我感觉技术面试不是特别的重视,其实这家公司是朋友帮我内推的,当时也不是特别了解情况,总结下来就是这家公司的要求和我的实际情况有些不符合,他们那边想要一个会混合开发的,也就是会 React Native 和 weex 的。所以当时这也是主要被拒的原因。其实面试之后也印证了我们的 leader 总和我说话,他说你不能只局限于 Android 这一块的东西,所以之后要夺取了解一下包括服务端啊 js 啊,h5 等其他的一些内容。


begj(三面,offer)

一面笔试:

1、App 的启动流程

2、handler 的运作原理

3、Activity 生命周期

4、横竖屏切换时 Activity 的生命周期

5、ANR 是如何产生的

6、bindService和startService 的区别

二面:

1、简要说一下 HTTP 请求的流程

2、说一下路由框架 ARouter 是如何实现的

3、说一下你们 App 的架构

4、说一下 Rxjava 如何实现三级缓存

5、说一下内存泄漏的常见情况

6、Activity A 启动 Activity B,然后按返回键的生命周期

7、ListView 和 RecycleView 的区别

8、ListView 的缓存是如何实现的

9、进程间通信,AIDL 的实现

三面机试:

1、首先实现一个启动页动画的功能,可以跳过,倒计时时间为 3 秒。然后进去之后是一个 List,需要用 RecycleView 实现。List 里面有分割线,需要用 RecyclerView 的分割线

总结:

该公司属于一个中型公司,业务什么的我认为都是比较有前景的,但是无奈薪资给我的不是特别满意,所以就没过去。这次面试中有一个问题我是比较关注的,就是 App 的启动流程,这块的内容我之前是没有了解过的,所以在面试之后我去主攻了一下这块的内容,感觉有点复杂。之后回去深入研究一下


dh(三面 offer)

一面电面:

1、项目中的推送是如何实现的

2、对 framework 层了解过哪些知识

3、项目中更新模块是如何实现的

4、分包是如何实现的

二面:

1、项目中封装的网络库都封装了什么

2、插件化中的插件和宿主是如何通讯的,插件化要解决的三个问题的是什么。分别是如何解决的

3、说一下你对热修复的了解

4、如果让你设计一个网络请求库,你会如何设计

5、okhttp 中的拦截器有什么优点

6、Android 系统中那里用到了代理模式

7、设计模式都了解哪些

8、项目中遇到过什么重大的问题

三面:

hr 面试的,主要就是谈薪资了。然后在谈谈职业规划什么的

总结:

其实这家公司是我考虑的一家公司,因为这家公司在杭州也是比较有名的,然后发展前景也比较好。不过他们做的东西有点偏底层,我如果去了的化可能会开发 JNI 和写 C++ 的代码,所以最后还是决定不去了。这次面试其实经历的东西还是挺多的,在面试的过程中,面试我的主管和我还是知识面太局限了,希望以后夺取了解除了 Android 以外的东西,比如 python 、go 等一些脚本语言


ths(三面,offer)

一面机试:

1、实现一个 StringBuilder 类

2、看一段 List 的 Adapter 的程序,然后看看哪里的写法不对

3、其他的都是一些找错误的题目了,主要就是题目 1。

二面:

1、okhttp 的内部是如何实现的,okhttp 中的这种拦截器的方式是一种什么设计模式的体现

2、启动一个线程的方法

3、线程同步的方法,volatile 的内部实现是什么。

4、Java 内存模型相关知识

5、GC 的两种算法,标记清除法是怎么实现的。

6、什么样的变量可以作为 GC 的根。

7、leakcanary 是如何检测内存泄漏的

8、TCP 的标识位有哪些

9、TCP 是如何处理拥赛的。TCP 慢启动的实现

10、HTTP 使用缓存的整个流程

11、HTTPS 的加密是如何实现的,RSA 算法的实现

12、HashMap 实是线程安全的么,CurrentHashMap 是绝对线程安全的么。

13、多线程编程有什么缺点

三面:

1、当我们在浏览器中写入 www.baidu.com 按下回车之后发生了什么

2、如何优化 App 的启动速度

3、项目开发过程中遇到了什么困难

总结:

这次面试是在我看来所有面试中深度最深的,不管是哪个知识点,面试官都会深入的问到你答不上来为止,通过这次面试也让我知道 TCP 的东西是在是太多了,也让我对 TCP 有了重新的认识,在面试之后,我有重新学习了一下 TCP 的相关知识,例如 TCP 慢启动,TCP 标志位等。通过学习是我对 TCP 有了更深的了解。


yz(三面,没通过)

一面电面:

1、retrofit 的核心是什么,java 中的动态代理有哪些实现方法

2、项目中的推送模块是如何实现的

3、项目中如何实现进程保活的

二面:

1、算法题,实现字符串的反转,例如 I am zhanyage,and you反转之后就是 you  and  ,zhanyage  am   I

2、AIDl 的实现是什么

3、了解过 APK 瘦身么

4、屏幕适配是怎么做的

三面:

1、项目中的推送是如何保证到达率的

2、App 的启动速度是如何优化的

3、了解过 React Native 么

4、HashMap 的 hash 值是如何计算的。

5、LinkList 和 ArrayList 的区别是什么

总结:

其实个人感觉三面了得都挺好的,然后他们的 TL 还加了我微信,但是后来给我发邮件说没有通过,总感觉很奇怪,没通过为什么加我微信啊。也许是找到了更合适的吧。其实这次技术面和 hr 面都聊的还可以,唯一不足的地方就是二面问我那道算法题答的不是特别的好,考虑的不够全面。


wy(三面 offer)

一面电面:

1、简述一下 Activity 的生命周期,这里扩展一下,不要局限与基本的生命周期,要把一些不常用的也说一下,例如 onConfigChange onNewIntent 等。

2、Activity 的生命周期onStart 这个方法一定会执行么

3、Service 的启动方法有什么

4、bindService 一定需要在 Activity 中调用么,这个没研究过,经过研究才知道这个方法是 ContentWrapper 中的方法,所以不一定要在 Activity 中调用

5、onMeasure 中的参数的意思,里面的 mode 有哪些,每个参数对应我们 xml 中的哪些变量

6、简述一下 view 的绘制流程

7、异常的继承结构是什么 Throwable 有两个子类,一个是 error 一个是 exception

二面:

1、简述一下 okhttp 的内部实现,多路复用是如何实现的。

2、多路复用是如何回收 TCP 的。TCP 的 keepalive 是什么

3、okhttp 最大开启几条线路

4、Retrofit 的内部实现是什么,为什么写一个接口就能达到发送请求的效果

5、Retrofit 生成的类是在什么阶段生成的

6、webview 是如何与 h5 交互的

7、ListView 和 RecycleView 的区别,他们的缓存是如何实现的,RecycleView 的优势是什么

8、常见的内存泄漏有哪些

9、你在开发中用到了哪些设计模式

10、如何对 Crash 进行监控的,Bugly 是如何监控 Crash 的。

11、项目中常见的崩溃有哪些

12、HTTP 和 HTTPS 有什么区别

13、常见的 DDOS 攻击手段有哪些

三面:

1、Android 中的存储方式有哪些,sqlite 的内部实现是什么

2、算法题,求 m 的 n 次方的个位数是什么

3、了解 Spring 框架么

4、了解过哪些算法。贪心算法是如何实现的

5、业务和技术是什么关系

6、技术的深度重要还是广度重要

总结:

由于这个公司也算是杭州比较出名的公司,所以一面的时候比较紧张,好几个很简单的问题没有回答上来,还好面试官仁义,放了兄弟一马,二面了得就比较舒服了,三面就是总监和 hr 一起面试的,三面的过程中,总监和我说基础还可以,但是深度不够深,以后的学习应该深入学一下,例如刚刚问到的 sqlite 的内部实现。这次面试也是受益匪浅的一次经历,在面试过程中,了解了大公司的文化,也了解了他们的开发流程和技术重点,最重要的时候总监给我的提的宝贵的意见,然后在以后的学习更加有方向。


一个初创公司:

这是我面试中一个感觉比较有意思的一个公司,因为我找工作的时候还在上班,所以每次出去面试都要请假,应该某一天的下午我去这家公司面试,去了之后先让我填了一下单子,单子里面有一项是期望薪资,当时就写了一下,然后写完单子之后,一面居然是 hr ,hr 来了之后我俩是畅所欲言,聊的不亦乐乎,聊着聊着 hr 问了我一下期望薪资是多少,然后我就说了一下,只见 hr 脸色突变,开始敷衍,最后和我说今天技术比较忙,让我先回去了。忽然感觉很尴尬,因为当时我是严格按照招聘晚上上面的范围填写的,但是不知道为什么 hr 接受不了。我之前看过一篇文章,内篇文章的博主好想也发生过一次类似的事情,然后那个博主为了报复,每年都会去敷衍他那个公司面试一次,然后通过了不去,我说这个的意思就是让大家在去面试之前先了解一下公司的情况,然后再去面试,不然到头来,耽误了时间,更耽误了我们找工作的进度。


面试之后:

上面所说的面试的知识点知识我认为比较有难度的一些问题,其实想找到一个好的工作,一些常规的知识点也是不能忽略的。在接近一个月的面试过程中,我了解到了自身的不足和知识的盲区。前面也说到了,面试就是一个不断自我反省,不断自我修复的过程,希望本篇文章能对各位的面试有所帮助,最后希望各位都能找到适合自己的工作




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值