背景:
现在都说互联网的大环境不好,工作难找,但是由于生活压力还有以后的职场压力,我不得不在今年踏上了找工作的路,从去年8,9月份陆陆续续开始学习,为了找工作准备,一直到今年的6月份尘埃落定,也算是总结了一些东西。不得不说,如果学习不是为了找工作的话,每天做做算法题看看源码其实也挺快乐的,但是现在这个社会,人都非常有惰性,比较浮躁,能坚持下来的很少很少(看看美剧,玩玩游戏他不香嘛)基本都处于一个间接性踌躇满志,持续性混吃等死的状态,我也一样。但是考虑到我也老大不小,马上到了三十而立的年纪,不能在这样下去了,所以我决定未来的时间里我要持续性的学习,(虽然立了FLAG不一定能坚持,不过梦想还是要有的)从找到工作开始,工作交接,找房子,忙入职,一直没什么时间去学习,沉淀,一直到现在才有时间沉住气去开始未来学习的第一步。那么,切入正题,话不多说,第一步就是把找工作过程中学习到的知识以博客的形式记录下来,也算是能帮助一下其他跟我一样在程序员底层拼搏的人,当然最重要的还是养成好的学习习惯,做一个知识的沉淀。
本文章主要汇总一下面试过程中遇到的知识点以及其他相关的问题,这里不会详细说明,以后会一一进行说明,当然这些知识点我们都是知道的,而且好多书上博客都有详细的讲解,本文和以后的文章也都是基于书上还有其他博客中的讲解再加上我自己的理解总结的,如有雷同,那也没办法,知识点就是这样的。
先说一下个人情况吧。本人哈尔滨工程大学软件学院毕业,科班出身,大学期间没有学习,编程能力,理论知识中等水平,面试技巧弱。找工作之前在某大型外包就职,找工作期间共面试10余个,收获3个offer,最终去了某1 talk。薪资,环境均符合自己预期,也算是成功了一次吧(我面试很菜,往期面试基本都是海投,谁要我我去哪的状态,但是个人觉得工作能力很算可以,责任心强,能够胜任工作)
先发布一版,后期还会更新,有些问题想不起来了,后期有时间也会优化一下排版,让大家看着舒服一些,还好远程面试好多面试过程都有录音记录,后期有时间再回顾一遍,有需要的也可以私信我,发你几份,真枪实弹的2020年面试到底是个什么样子。
某狐一面
1. 自我介绍
2. RecyclerView的缓存机制,
3. 大图加载如何处理,卡顿怎么解决
4. Lru算法的原理,实现机制,使用场景,并手写Lru算法
5. 数组和链表的区别,包括底层实现,优缺点,使用场景
6. HashMap与TreeMap的区别
7. 说一说你对context的了解,如何跨进程拿到context
8. 单例模式的几种写法,懒汉和饿汉,手写单例模式,注意双重检测的写法,要求了解双重检测的原因还有使用volatile关键字的原因
9. 遇到过单例模式的哪些坑
10. 读写锁
11. activity的声明周期,考虑LauncherMode以及onNewIntent和onRestart的调用场景
12. Handler的用途和原理,源码不是特别复杂建议把源码读透,难点就在于MessageQueue,以及Looper的存储,和ThreadLocal的原理
13. Binder机制,binder很难,具体掌握什么程度看个人的能力了,这个后期我也准备好好学习一下binder
14. app打包相关知识,签名,加固,混淆
15. 实现过最复杂的动画是什么(开放题目)
16. OpenGL
17. 三方库使用过哪些
18. 算法:如何判断单链表是否有环,以及如何判断环的位置
OD一面
1. 个人简介
2. 最能体现水平的工作
3. viewStub的使用
4. include merge 各自的区别,优缺点
5. ROM优化可以从哪几个纬度进行,混淆为什么会降低ROM
6. 从事过代码重构相关的工作嘛?
7. 处理过稳定性问题嘛?crash和anr问题如何定位,ANR产生的原因是什么,如何避免?
8. 耗时下载应该如何去设计
9. AsyncTask 子线程和UI线程之间是如何切换的
10. 如何在开发阶段发现crash问题,有哪些典型的稳定性问题,多线程可能导致那些稳定性问题
11. 死锁是如何发生的,如何去避免
12. 代码架构MVC, MVP, MVVM
13. 你觉得现在的项目中有哪些确定
14. 熟悉的设计模式有哪些
15. 手写单例算法,双重检测的作用,以及volatile关键字的作用。
OD二面
1. 工作中的角色,负责的任务
2. 有挑战性的工作,你是如何解决的
3. 多线程同步有哪些方法
4. 锁对性能有什么影响
5. 多线程最高效的方式
6. vector与arraylist的区别
7. 技术方向的未来规划
五道口某心心念念小公司一面
1. 自我介绍
2. 离职原因
3. activity的生命周期, 以及生命周期使用到的设计模式
4. activity重建 关于LauncherMode, onSaveInstanceState和onRestoreInstanceState
5. 设计模式
6. 项目的设计架构 MVC MVP MVVM
7. 手写双重检测单例模式,以及volatile关键字的作用
8. 多线程异步管理工具,如RxJava
9. Kotlin
10. 项目中遇到的最困难的问题,你是如何解决的
五道口某心心念念小公司二面
1. 离职原因
2. 个人想要的工作状态是什么样子的
3. 使用三方库和自研库有什么区别
4. 第一家公司的工作内容
5. 第一家公司的离职原因
6. 选择上一家公司的原因
7. 当前薪资
8. 期望薪资
9. 想找到工作的工作氛围
10. 平时的学习方式有哪些
11. Handler的大概流程
12. MessageQueue的结构
13. Handler延迟发消息的实现原理
14. Handler中post 和sendMessage的区别
15. recyclerView中viewHolder为了解决什么问题
16. fibndViewById的原理
17. recyclerView滑动卡顿如何解决
18. 了解哪些设计模式
19. builder模式的有点
20. 最有成就感的工作
21. IdleHandler了解吗
其他能公司能想起来的面试题
1. 开源框架使用过哪些,使用它由什么优点,你了解过他的原理,读过源码嘛
2. 网络请求, http https tcp了解多少
3. classloader相关问题,如双亲委派含义,原理,作用,如何实现一个classLoader, String为什么要定义成final 有什么好处
4. 组件化,插件化了解吗
5. Application中的 onTernimate是干什么的
6. Handler中looper 的作用
7. 代理和装饰者分别是什么,有什么区别
8. Hashmap 1.7 和1.8 有什么区别
9. 引用fragment的优点是什么
9. View绘制一次 onMeasure方法调用几次
10. 乐观锁和悲观锁有什么区别
11. 了解CAS嘛,ABA问题怎么解决,CAS保证了原子性嘛
12. synchronized实现
13. 如何定位问题
14. 代码设计的六个原则
15. 线程池的参数都有哪些分别有什么用途
16. 一个应用的启动流程