从4月17号提离职到今天,已经面试了整整15家公司了,其中有二三十个人的小厂,也有像腾讯QQ音乐和OPPO这样的大厂,因为本人做的项目也是比较杂的,所有面试的类型也比较多,有做ReactNative的,也有做人工智能、机器人的,同时也有做智能家居的,所以接触到的面试题也是比较多的,为了避免自己忘记,在这里做个总结,先把面试题给列出来,之后有时间再补充答案.
Java方面:
1、如何停止一个线程请求;
2、线程之间的通信方式;
3、线程和进程的区别;
4、进程之间的通信方式;
5、Java的垃圾回收机制;
6、哈希算法以及HashMap的底层原理;
7、数组和链表的区别;
8、读写锁和互斥锁的区别;
9、重载和重写的区别
Android方面:
1、AsyncTask的原理
2、RxJava如何进行线程切换,如何取消RxJava的请求以及RxJava的错误重试api
3、自定义view的三个方法,invalidate和postInvalidate的区别,requestLayout会调用哪几个方法,onLayout中的三个方法
4、Android的事件分发机制,以及如何解决滑动冲突等(ScrollView中包含ListView和GridView的滑动冲突)
5、自述从业以来最满意的一个项目,在其中遇到什么问题,如何解决,讲一讲阅读过印象最深刻的技术博客,从中学到了什么
6、项目中如何解决ANR
7、做过的Android性能优化,包括包体积、内存优化、布局优化等;
8、Android的屏幕适配;
9、Android webview和Js的通信;
10、ProtocolBuffer的优缺点以及底层实现;
11、https和http,http怎么传递数据,https怎么加密数据;
12、LeakCanary的原理;
13、handler相关,handler底层处理消息的算法;
14、如何实现音视频的同步;
15、Okhttp的底层原理;
16、RecycleView中数据复用可能会存在的问题以及如何解决;
17、EventBus的原理;
18、Android中四种启动模式以及应用场景;
19、Activity的启动方式;
20、ListView如何实现复杂布局,不同Item不同子布局;
21、Glide的原理以及和piccasso的区别。
22、如何给数据库添加索引;
23、OpenCV、OpenGL等图片处理的东西;
24、Android的Hook技术,如何不在AndroidManifest中注册启动一个Activity;
25、Android中的四种引用方式;
26、Jni的使用经验
React Native:
1、React的生命周期;
2、Js中的事件循环;
3、ReactNative中原生和Js的通信方式;
4、redux的原理,如何解决action的异步操作(中间件);
5、如何优化FaltList加载长数据;
6、ReactNative的优缺点;
7、setState方法可以那几个生命周期中调用;
8、ReactNative如何进行数据缓存;
9、React Native调用setState做了什么
暂时能想起来的就是这些了,其中Android的事件分发,Handler是问的比较多的问题,其他的就是根据你项目中做过的一些点进行一个提问了,总的来说,因为离职前都还有一直在做新需求,也没啥时间准备,被虐的还是挺惨的,不过也好,认识到了自身存在的一些问题。现在市场不缺能实现功能的码农,缺的是了解底层原理的程序员。
网友评论