Android 开发三年半 5 月份离职,面试 10 家公司后,这些面试官常问的面试题一定要了解
这部分面试官多数不会问很深,要么就给你一个效果让你讲原理。
设计模式(单例,工厂,观察者。作用,使用场景)
一般说自己会的就 ok,不要只记得名字就一轮嘴说出来,不然有你好受。
延伸:Double Check 的写法被要求写出来。
String,Stringbuffer,Stringbuilder 区别
开源框架,为什么使用,与别的有什么区别
这个问题基本必问。在自己简历上写什么框架,他就会问什么。
如:Volley,面试官会问我 Volley 的实现原理,与 okhttp 和 retrofit 的区别。
开源框架很多,我就选几个多数公司都会用的出来(框架都是针对业务和性能,所以不一定出名的框架就有人用)
网络请求:Volley,okhttp,retrofit
异步:RxJava,AsyncTask
图片处理:Picasso,Glide
消息传递:EventBus
以上框架请自行查找,太多了就不贴出来了。
RecyclerView
这个挺搞笑的。有另外一个同事也在找工作,面试官嫌他没用过 RecyclerView 直接 pass 掉。
网页中输入 url,到渲染整个界面的整个过程,以及中间用了什么协议?
具体介绍下 TCP/IP
TCP 的三次握手和四次挥手,为什么不是两次握手?为什么挥手多一次呢?
TCP 和 UDP 的区别?
HTTP 的几种请求方法具体介绍
HTTP 请求和响应报文的格式,以及常用状态码
介绍对称加密和非对称加密
数字签名的原理
Base64 算法是什么,是加密算法吗?
为什么多线程同时访问(读写)同个变量,会有并发问题?
说说原子性,可见性,有序性分别是什么意思?
实际项目过程中,有用到多线程并发问题的例子吗?
介绍几种启动模式。
屏幕旋转时 Activity 的生命周期,如何防止 Activity 重建。
线程的三种启动方式
线程 run 和 start 的区别
线程的几种状态,相互之间是如何转化的
String 是 java 中的基本数据类型吗?是可变的吗?是线程安全的吗?
为什么要设计成不可变的呢?如果 String 是不可变的,那我们平时赋值是改的什么呢?
浅谈一下 String, StringBuffer,StringBuilder 的区别?String 的两种创建方式,在 JVM 的存储方式相同吗?
线程池是干嘛的,优点有哪些?
线程池的构造方法每个参数是什么意思,执行任务的流程
Android 线程池主要分为哪几类,分别代表了什么?
主要有四类:FixedThreadPool、CachedThreadPool、SingleThreadExecutor、ScheduledTheadPool
索引是什么,优缺点
事务四大特性
讲讲几个范式
Recycleview 和 listview 区别
Recyclevi
ew 有几级缓存,缓存过程?
说说 RecyclerView 性能优化。
说说双重校验锁,以及 volatile 的作用
synchronized 和 volatile 的区别
synchronized 修饰 static 方法和修饰普通方法有什么区别
内存泄漏是什么,为什么会发生?
内存泄漏发生的情况有哪些?
集合类泄漏
单例/静态变量造成的内存泄漏
匿名内部类/非静态内部类
资源未关闭造成的内存泄漏
该怎么发现和解决内存泄漏?
什么是类加载机制?
v 类加载器种类。
什么是双亲委派机制,为什么这么设计?
webView 与 js 通信
如何避免 WebView 内存泄露
webView 还有哪些可以优化的地方
Activity、View、Window 之间的关系。
说说 Android 的事件分发机制完整流程,也就是从点击屏幕开始,事件会怎么传递。
解决滑动冲突的办法。
Fragment 生命周期,当 hide,show,replace 时候生命周期变化
Activity 与 Fragment,Fragment 与 Fragment 之间怎么交互通信?
Fragment 遇到 viewpager 遇到过什么问题吗?
ARouter 的原理
ARouter 怎么实现页面拦截
怎么应用到组件化中
说说你对协程的理解
说下协程具体的使用
协程怎么取消
具体有哪些启动优化方法?
分析启动耗时的方法
Activity、View、Window 三者如何关联?
onCreate,onResume,onStart 里面,什么地方可以获得宽高
为什么 view.post 可以获得宽高,有看过 view.post 的源码吗?
SharedPreferences 是如何保证线程安全的,其内部的实现用到了哪些锁
是进程安全的吗?如果是不安全的话我们作为开发人员该怎么办?
SharedPreferences 操作有文件备份吗?是怎么完成备份的?
为什么需要插件化
插件化的原理
市面上的一些插件化方案以及你的想法
OK,点到即止。
如何进阶?
1、确定好方向,梳理成长路线图
不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。
关于这一点,在我当时确立好 Android 方向时,就已经开始梳理自己的成长路线了,包括技术要怎么系统地去学习,都列得非常详细。
评论