俗话说是求职金三银四,但是2022年,本人是没有感受到一点点的暖意。最近也在面试一些公司,分享一些面试经验给大家,希望大家可以从中查漏补缺,算法题我统一放到最后了
简单做下本人介绍:卑微程序员,主业Android(搞搞业务界面,跨跨进程,偶尔写一写C/C++代码),副业ReactNative。
公司1
一面
Android:
1.App启动流程,startActivity流程
2.LeackCanary原理分析,有了解过如何解析内存dump文件么?
3.线程池工作原理,为什么线程池的核心Worker线程不会死亡,为什么这么设计线程池
4.Binder通信的方式,Binder的线程池,AIDL中的oneway的实现解决什么问题
5.AOP切面编程原理机制,AspectJ与ASM优劣对比
6.View的事件分发原理,父控件的onInterceptTouchEvent可以拦截到子View所有事件吗?
Java:
1.synchorized锁Class与锁object,锁this的区别
2.ArrayList,LinkedList迭代器for循环的效率一样吗?
3.Https的网络加密请求实现
4.线程的状态,Intercept的作用,如果wait的时候用Intercept会怎么样?
二面
Android:
1.RecycleView缓存机制,如果屏幕上有3种ViewType,RecyclePool的滑动时缓存是怎样改变的的
2.ReactNative的实现机制,JS线程,UI线程,与Java的通信实现
3.SurfaceView调整层级之后,在windows中Surface的排序
4.Binder的mmap,进程间通信的方式种类
5.开发JNI遇到的问题,JNI中调用findClass找不到类怎么办?
6.sp使用问题, commit,Apply区别 ,ANR如何发生
7.ObjectAnimator,ValueAnimator区别
8.Fragment默认构造函数作用,构造传参与Arguement传参的区别
Java:
1.JVM的ThreadLocal变量存在那里,内存管理
2.递归为什么比for循环效率低
3.什么是指令重排,如何避免
公司2
一面
1.ReactNative如何实现JS层与Java通信原理
2.JNI层实现,JavaVm与JavaEnv是什么,extern C 是什么作用
3.Binder实现原理,如何监听进程死亡
4.ViewTouch事件分发流程
5.HashMap内部实现原理,HashMap内存占用过高问题
6.多平台打包如何实现
7.业务中的进程如何保活
8.死锁的条件
9.ViewPager2比ViewPager有什么优势
10.Native的Crash如何监听
二面
1.JNIHelper实现方式,局部引用处理的问题
2.RN实现方式,与JS交互方式,RN组件的生命周期
3.So动态下载实现方式,Hook nativeSoDirectory
4.线程池参数, 你会怎样设计线程池去执行任务
5.自定义View绘制流程,编舞者是干什么用的, 如何实现自定义FlexLayout
6.如果监听线上OOM, 如何减少内存泄漏, 如何提醒开发者会造成内存泄漏(Lint检查)
7.LeakCanary原理
8.进程通信方式,Binder,Socket,共享内存区别,有没有用过共享内存
9.Activity启动流程, Activity栈管理
10.Http(1.0/1.1/2.0),Https(对称加密/非对称加密)
公司3
一面
1.System.loadLibrary()与System.load()区别
2.Binder发送时机,数据大小的限制,Copy from user时机
3.Https加密原理, http请求常见错误码
4.Class.forname("")反射,与调用ClassLoader的区别
5.volitate,synchronized 锁升级
6.线程池参数, 单线程池有什么问题
7.编舞者怎么触发监听Vsync信号
8.LiveData,Observer,mLastVersion有什么作用呢
9.Handler nativePollOnce ,epoll原理
10.App启动涉及到系统服务
二面
1.跨进程如何保证线性执行,以及解决回调不一致的问题
2.解决布局加载缓慢的问题,从那方面入手,如何监听布局卡顿问题
3.Okhttp的链接复用逻辑,定时清理逻辑
4.Http的keep-alive 如何生效,TCP链接如何保持
5.JS渲染 ,Flutter与H5渲染区别等
6.View绘制原理,自定义FlexLayout如何实现
7.Message的同步屏障,为了解决什么问题
公司4
一面
1.JNI的作用,JNIENVfindClass如果找不到怎么办,deleteLocalRef作用
2.Kotlin关键字inline,also,let 协程如何实现的原理
3.线上下ANR如何监控 如何确保能拿到准确的堆栈消息
4.BlockCanary实现的原理,WatchDog了解否,如何处理OOM,自己有什么处理经验
5.Binder通信原理, 内存限制,如何传递Bitmap大图,MemoryFile是什么?
6.100x100的图片 放到View10x10里 ARGB_8888 内存大小是多少
7.物理内存,虚拟内存区别
8.Okhttp用到哪些设计模式
二面
1.线程进程的区别
2.物理内存与虚拟内存的区别
3.JVM内存模型,那些是线程共享
4.synchronized锁升级,如何选择锁
5.JVM内存回收机制,垃圾回收算法,GCRoot对象
6.Cookies与Session区别
7.TCP,UDP区别
8.自定义一个可以拖拽以及解决事件冲突的吸边的ViewGroup
9.RN的渲染是怎么绘制到Android客户端的
10.Http的localDNS 与HttpDNS区别
11.JNI中的Native的LocalRef是什么时候释放的
公司5
一面
1.项目经历
2.项目中解决OOM(原因),内存泄漏,LeakCanary原理,Handler内存泄漏引用链分析
3.JVM如何判断是否可以回收对象,回收算法,GCRoot都有哪些
4.SpareArray不占用空间与HashMap相比优势,SpareLongArray是如何存储的
5.View事件分发流程,ACTION_CANCEL如何产生,如何处理
6.Bitmap占用空间的大小,ARGB_8888(4个字节),ARGB_565(2个字节)
7.onCreate. handler.post({ }) 调用1000次会有什么问题,会造成onCreate卡顿吗
8.Activity启动流程,Activity是如何何时创建的,Looper是什么时候启动的
9.Lock,Synchronized,CAS,锁升级,锁种类, 乐观锁,悲观锁
二面
1.Android音频硬解码,软解码,如何监听Native的crash
2.JNI中的中引用(localRef,globalweakRef,globalRef)
3.JNI静态注册,动态注册的以及优劣
4.Kotilin的优劣,let,with,apply区别,协程的区别
5.RxJava map,flatMap区别 Subject区别
6.View的onMeasure如何判定,受什么影响
7.Fresco是怎么做线程池规划,Fresco与Glide对比
8.ViewModel是如何实现在页面异常销毁后重建的,与onSaveInstance的对比
10.ProtoBuffer是如何编码的,MMKV有了解,如何实现跨进程。
算法
本人大概是在leetCode上刷了200多道题,据面试经验来看,就社招来说除非是面试一些外企来说,我碰到的算法题还是在比较简单的。建议大家还是多刷一刷,掌握一些基本解题思路,不说能见到原题,碰到问题也不必抓瞎只能暴力解决。
1.用两个栈实现一个队列
2.用两个队列实现一个栈
3.手动实现LRUCache
4.反转链表
5.将一个节点数为size链表从m位置到n位置之间的区间反转,要求时间复杂度O(n),空间复杂度O(1)
6.螺旋顺时针输出数组
7.跳台阶一次能跳1或者2或者3台阶,问第n层台阶有多少种跳法
8.LeetCode meetingroom1,meetingroom(会议室问题)
9.三个线程交替打印1-100
10.如何判断自底向上判断avl树(自顶会有重复遍历节点的问题)
11.层次遍历二叉树变种题
12.最长回文子串
13.含有重复元素求全排列