年后开始不间断的找工作跳槽,面了好多家,其实问来问去问题都差不多,都记录在这一篇了,有时间把答案补上。
有质的改变再新建文章。
1.Fragment的生命周期
太迷了,把onResume和onStop写反了,面试官说看了心里一凉…
2.事件分发机制,以及涉及到的设计模式
3.onMeasure的测量模式与特点
4.线程间通信和进程间通信
5.ArrayList删除元素
-> fail-fast机制,用Iterator;或者倒序删除
6.写出你认为最优的懒汉式单例模式
-> 写的静态内部类,被问了下为什么能保证用到时再初始化?答:虚拟机的类加载机制,再被问了下为什么用双加锁,以及volatile的作用,最后跟我说了下其实as最低都支持1.6,所以大部分开源都是synchronized、volatile,我说确实如此,但是synchronized是悲观锁,效率有一定影响吧。
7.activity意外退出时信息的储存与恢复,onCreate正常进入时的判断。
8.谈谈性能优化
9.JS的交互理解吗?平时工作用的多吗,项目中是怎么与Web交互的?
10.MVC -> MVP -> MVVM 这样变化的原因,MVP的不足,MVVM为什么代替了MVP
11.MVC的情况下怎么把Activity的C和V抽离
可以参照MVVM的方法把MVC的Controller拆分,不需要双向绑定,也能实现模块化抽离,架构模式不是死的,可以根据需求变化,他说我应该了解到这层度上,但是MVVM没去了解过GG
http://blog.csdn.net/baidu_15060875/article/details/54882790
12.各个网络框架之间的差异和优缺点,网络框架代替进化的原因
http://blog.csdn.net/small_and_smallworld/article/details/72811227
13.图片缓存框架的差异和优缺点,有没有比Glide更好的图片加载框架?
-> 答了下Volley、Glide,说了下Glide绑定生命周期的巧妙之处。Volley问了下缓存的方式和用到的数据结构。了解了下想我回答Fresco(但是我没用过,虽然很早以前就看过)
14.项目框架里有没有Base类,BaseActivity和BaseFragment这种封装导致的问题,以及解决方法 -> 代理模式
15.框架里是怎样实现MVC的,看着框架的功能,发现View就像Activity,所以归类到MVC了,但是其实VC都是写在一起的,没有分离,所以其实不是MVC,毕竟android不是典型MVC
16.Reftofit用过没有,注解实现的好处? -> 扯了下AOP的好处
17.项目中的的界面既然是基于View的,有没有动画的处理?
18.为什么不推荐软引用,软引用在dvm上的垃圾回收机制和jvm上一样吗?
19.LRUCache的删除条件,LRU是什么意思 -> 内存不足&最少使用
20.启动页缓存设计 白屏问题(后来搜博客发现原来问点是冷热启动)
http://m.zhimengzhe.com/Androidkaifa/225726.html
21.网络图片怎么加载?Glide如何确定图片加载完毕
22.项目框架中对多View的支持? -> 说不同的View有不同的类型比如有menu类型
23.Http的request和response的协议组成
24.RecyclerView和ListView相比有哪些好处,为什么ListView被RecyclerView代替?
Part2(具体记不太清):
1.Service的源码
2.Handler的实现,Looper怎么终止。
3.项目是MVC,那根据自己负责的项目讲下Model、View、Controller层
4.问了下昼夜模式、多语种、屏幕适配的问题,追问了下,如果要关闭昼夜模式功能怎么办?很多类的话,一个个去关吗?
5.有没有接触过JNI和NDK?
6.ListView的错位问题原因以及如何处理?
7.如何设计一个抽奖系统,比如满200抽20,满500抽50
答:应该用策略模式代替if...else...(但是忘记策略模式的具体好处了),顺便说要点在于拓展新,比如以后可能还要加个累计2000抽奖的功能
追问:那如何实现累计?
答:应该是数据库设计的问题,肯定要记录日期时间这些字段
提示应该用什么数据库实现这种功能
答:内存数据库?
最后解释说key-value数据库就行了(其实数据库一点不懂,以前接触过后端听过内存数据库、redis这些)
Part3:
1.值传递和引用传递
2.Activity的生命周期,最好结合应用启动说一下
-> 就是启动App的流程,Launcher、AMS、ActivityThread这些
3.写出一个查找算法
4.MessageQueue、Looper、Handler的关系,MessageQueue的onNext是死循环为什么不会卡?
5.强弱软虚引用的区别
6.插件化的原理以及常见的插件化的库
7.项目中涉及到的知识点
8.gradle语法熟吗
9.代码和项目上对封装架构的体现,说了下路由、封装、面向接口开发少用继承等
10.平时学习提高的方式,以及看过的书
11.ArrayList和LinkedList的区别,以及插入查找的时间复杂度
12.如果返回页面需要刷新,应该放在Activity的哪个生命周期比较合适,onStart和onResume的区别,如果第一次不想执行,放在哪里
13.二叉搜索树的实现、数据结构中哈希表的实现:算法数据结构确实不行了,没准备不好答
14.介绍下观察者模式、访问模式
15.项目中内存优化的实例
16.singleTask和singleTop的区别,以前singleTask的实现方式
17.Handler导致的内存泄漏举例,知道会,没去注意,但知道其他的,就答了其他的
参考:Handler handler = new Handler{}
Handler是非静态内部类,所以持有当前类的引用,Handler不释放,Activity也不能释放。解决方法是使用静态内部类,这样就不持有外部类的引用,如果需要用到外部类的,使用弱引用。
https://www.jianshu.com/p/f35ca324c285
1.谈谈对JVM的理解 → 这里自己发挥讲了一堆
2.Handler的原理
3.ANR是什么如何避免
4.动画有哪几种以及区别
5.数据库对于Query的优化
→ 索引
→追问:索引的优缺点
6.WebView的内存泄漏问题
7.项目中用的http还是https
8.项目TCP传输用的什么框架
9.过渡绘制的产生原因
10.布局嵌套层级怎么优化
11.三级缓存的网络缓存怎么理解?网络缓存的主要策略
12.RecyclerView和ListView的异同,以及各自的适用场景
13.ART模式
2018/8
1.对Binder机制的理解
2.对四大组件的理解
3.对混淆的理解
4.TCP怎么建立连接,怎么释放连接
5.Http请求和返回的结构,请求头的常见参数、请求方法种类,上传文件的时候的参数类型
6.自定义View,以及自定义View定义一个checkbox、超链接TextView组合的效果,单层View
(点击checkbox触发事件,点击超链接弹出协议)
自定义View,抽空写了一下最简单,源代码:https://github.com/862573026/BlogRes/tree/master/2018/%E7%99%BB%E9%99%86%E6%A1%86%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89View%E5%AE%9E%E7%8E%B0/checkview
7.大文件下载的时候,http请求参数是怎样的
面试总结:
虽然很多都是一篇博客的问题,但是作为程序员应该坚持学习新技术。有个面试官说我学习深度和基础都不错,就是广度不够,在工作外的自己学习不够。我说这可能想法不一样吧,最近看的都是Java、Android基础和设计模式,我觉得夯实基础对学其他也有好处。不过确实多学习开源对拓展思路很有好处,刷个博客,写个demo也要不了多久时间,最近油了油了,要加紧学习。
–> 最近突然发现android内核的东西突然有点能看懂了,赶紧买了两本书来研究一下,我是实用主义者,我觉得看内核去记怎么启动,这个那个的生命周期没啥意思,我觉得应该从Android系统设计看到这样一个 稳定成熟的系统是怎么设计的。前阵子研究过插件化/模块化,感觉插件化没啥意思(个人意见),能体现架构与资深的应该是模块化,那么Android系统是怎样组件化的确实值得学习。待我有所突破和感悟,再分享。
所以,打算安心闭关学习一段时间,而且最近面试感觉面的没意思,总是卡在薪资上,小公司为了招人开高薪是骗人的,越小越抠。可能跟最近经济大环境beng-beng-beng也有关系,小公司自己都夹缝中求生存了,哪还有钱发(怪不得突然多了好多骗子公司)。一般公司都只想找个会coding的都行,能开多高…如果是面向工资编程,最好还是好好发育去大厂,确实树大好乘凉。