今天分享一位应届毕业生的校招面经,大家可以看看查漏补缺。
- 谢谢那些曾经帮助过我的人。
很多忘记了,能回忆起来的就尽量写多一些。
小米
一面(电话)
Android:
1.内存泄漏的场景,Handler机制
2.四大组件
3.进程间通信
4.自定义view
5.Binder的使用
6.性能优化
7.fragment的生命周期
8.事件分发机制,以及涉及到的设计模式
Java:
1.接口和抽象类区别
2.继承和重写
3.ArrayList和LinkedList区别
4.死锁产生条件和应用场景
5.Java的修饰符的使用,static final修饰原理
6.多线程空指针解决方法
7.异常处理流程,何时必须要catch
操作系统
1.进程和线程区别
2.多线程同步和异步问题
3.同步死锁应用场景
设计模式
1.代理模式
2.单例模式以及双重锁原理
3.观察者模式应用场景
数据结构和算法
1.无序数组建立二叉搜索树
2.前序和中序遍历二叉树(我写了递归和非递归)
二面(电话)
1.四大引用区别和引用场景
2.内存泄漏的场景,Handler内存泄漏的原因以及解决方法
3.Handler机制,主线程如何向子线程发送消息,Handler能否多进程通信
4.多线程并发,sychronized,类锁和对象锁
5.线程安全类,StringBuffer和StringBuilder
6.jvm工作内存和主内存,volatile原理,jvm的静态块,内存屏障的实现原理
7.一个m * n的棋盘,一个虫子从左上走到右下方,只能向右或者向下,有多少种走法,可以用组合数学的知识解答
8.静态广播和动态广播区别,service启动的两种方式区别
9.onMeasure的测量模式与特点
10.线程间通信和进程间通信
11.ArrayList删除元素
12.写出你认为最优的懒汉式单例模式
13.activity意外退出时信息的储存与恢复,onCreate正常进入时的判断。
14.JS的交互理解吗?平时工作用的多吗,项目中是怎么与Web交互的?
15.MVC -> MVP -> MVVM 这样变化的原因,MVP的不足,MVVM为什么代替了MVP
16.MVC的情况下怎么把Activity的C和V抽离
17.各个网络框架之间的差异和优缺点,网络框架代替进化的原因
18.图片缓存框架的差异和优缺点,有没有比Glide更好的图片加载框架?
19.项目框架里有没有Base类,BaseActivity和BaseFragment这种封装导致的问题,以及解决方法
20.框架里是怎样实现MVC的
21.Reftofit用过没有,注解实现的好处?
22.项目中的的界面既然是基于View的,有没有动画的处理?
为什么不推荐软引用,软引用在dvm上的垃圾回收机制和jvm上一样吗?
23.LRUCache的删除条件,LRU是什么意思
24.启动页缓存设计 白屏问题
25.网络图片怎么加载?Glide如何确定图片加载完毕
26.项目框架中对多View的支持?
27.Http的request和response的协议组成
28.RecyclerView和ListView相比有哪些好处,为什么ListView被RecyclerView代替?
三面(视频)
1.将知道的操作系统说一遍,引入操作系统的最终目的(计算的功能),进线程区别,虚拟地址的原理和作用,指针是物理地址还是虚拟地址,指针的地址长度的影响因素,32位系统是4个字节,64位系统是8个字节。
2.Java的三大特性,写一个多态的例子,注意命名的规范
3.一个很大的数组,其中有一个数出现的次数是奇数次,其他都是偶数次。求这个数。除了异或写另外一种方法
四面(视频)
1.Android的体系架构,深入到framework,native层
2.单例模式的几种实现具体的区别,工厂模式的种类以及区别
3.对C语言的理解
4.Android的触摸事件分发流程
5.Android第三方框架的源码实现原理
京东
京东的面试题感觉都差不多,难度一般。
印象深刻的如下:
一面(电话)
1.对着我的项目问了一些具体实现的问题
2.一些基础的问题就不想再重复了,比如ArrayList和LinkedList区别
3.最后一道简单的算法题作为结束:求两个字符串的最长公共子串
二面(电话)
1.也是跟一面差不多Java和Android,比如Activity的启动模式,类加载的过程
2.设计模式
2.Activity的启动流程,这个有点意思
今日头条
很多真的忘记了,只记得下面这些了。
一面(视频)
1.讲一下项目,主要是深入框架的源码
2.Java忘记问啥了,Android问启动模式的时候,对四种启动模式的实际运用问得比较深,还有触摸事件的细节问得深
3.sp的commit和apply区别
4.左连接和右连接区别
5.算法:输出二叉树每层的最大值
二面(牛客网视频)
1.集合类,线程安全如何实现,写一个算法ArrayList删除所有值是50的。
这里有坑:http://blog.csdn.net/lazy_p/article/details/7365324
除了遍历还有更优的方法吗?想不出来。换成LinkedList性能如何?
2.异常类的继承结构,如何捕捉异常,如何全局捕捉异常并上报
3.数据的存储方式与其的应用场景,ContentProvider的底层实现,如何保证多进程读写安全
4.类加载,jvm内存模型
5.自旋锁
6.Linux的fork
7.数据库的ACID
8.手写反转链表
三面(视频)
1.intent是什么来的?为什么不是动作,用来干什么的?
(什么向什么表现什么意图)
2.为什么设置tcp三次握手,四次挥手
3.hashmap的底层实现
4.场景题分析:手机扫网页端的二维码如何提起的登录的过程,是如何实现的?
5.Service的源码
6.Handler的实现,Looper怎么终止。
7.项目是MVC,那根据自己负责的项目讲下Model、View、Controller层
8.问了下昼夜模式、多语种、屏幕适配的问题,追问了下,如果要关闭昼夜模式功能怎么办?很多类的话,一个个去关吗?
9.有没有接触过JNI和NDK?
10.ListView的错位问题原因以及如何处理?
11.如何设计一个抽奖系统,比如满200抽20,满500抽50
关于面试的充分准备
一些基础知识和理论肯定是要背的,要理解的背,用自己的语言总结一下背下来。
虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,我能明显感觉到国庆后多了很多高级职位,所以努力让自己成为高级工程师才是最重要的。
有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
好了,希望对大家有所帮助。
接下来是整理的一些Android学习资料,有兴趣的朋友们可以加我wx:X1524478394 免费获取。
①Android开发核心知识点笔记
②对标“阿里 P7” 40W+年薪企业资深架构师成长学习路线图
③面试精品集锦汇总
④全套体系化高级架构视频
Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
上述【高清技术脑图】以及【配套的架构技术PDF】可以 加我wx:X1524478394 免费获取
原文地址:https://blog.51cto.com/14332859/2460449