前言
先讲述一下本人的BG
湖南人,普通二本毕业,软件技术专业。主要学的是Android开发专业,从毕业到现在,从事Android开发工作也有三年了,就在去年八月提出了离职,趁着九月份时间好开始投简历。
多多少少也发出去几十上百份简历,收到的面试邀约寥寥无几,我甚至一度颓废,觉得我真的失业了,市场容不下我。
经历了一段时间的面试失败之后,我总结了一下原因,时代的变迁和移动端的飞速发展,如今Android开发岗位的要求越来越高,想要成为一名合格的Android开发人员,性能优化和framework是必须要掌握的。
于是我过年期间怒学两个月的性能优化和framework,年后继续投简历,三月份陆陆续续面试了好几家大厂。现在已经拿到了腾讯的offer。下面就给大家分享一下我的面试心得。
一、蔚来
- 自我介绍
- 聊我的本专业
- framework
- 性能优化
- 说一说MVP架构,MVVM架构
- MVVM架构中ViewModel为什么在翻转屏幕之后还能保持原来的界面
- 说一说Handler机制,Handler机制的使用场景,Handler机制的标志位
- Looper与线程是如何保证一对一的?ThreadLocalMap
- Glide的三级缓存?三级缓存分别是什么?
- OkHttp的拦截器?
- 算法题,两数之和,acm模式
二、百度
- 自我介绍
- 项目拷打
- MVVM+DataBinding+Lifecycle+LiveData
- Glide
- OkHttp
- 线程池原理,参数意义
- 广播(全局广播,本地广播)
- UI绘制
- 事件分发机制,长按如何实现
- ANR
- 排序算法
- framework
- 笔试题(两数之和)
三、CVTE
-
Activity的生命周期
-
ActivityA打开ActivityB的生命周期
-
Service的生命周期
-
如果调用startService再调bindService,随后再调unBindService能否成功关闭服务
-
你做过的App性能优化主要是哪些方面呢?
-
可以讲讲你是怎么处理内存泄露的吗?强引用、弱引用、软引用、虚引用区别和内存回收的优先级?
-
可以讲讲你是怎么处理ANR的吗?
-
怎么进行布局优化?
-
自定义View的流程?
-
如果要你设计一个写死宽高的ImageView,你怎么做?
-
onMeasure中的MeasureSpec有什么作用?
-
你们App是什么架构?对各种架构的区别和优点有什么见解?
-
Eventbus的源码有看过吗?是怎么感知哪个类进行了注册事件的呢?
-
有哪些常见的屏幕适配方法?
四、小天才
- ARouter的原理?
- MVP,MVVM模式相对于MVC模式的优势?
- 知道六大设计原则吗?不太清楚具体都有什么。说一下除了单例模式之外的两个设计模式
- 事件分发的过程?onClick和onTouchEvent,onTouch哪个先执行?(onTouch>onTouchEvent>onClick)
- 如果现在出现了横向滑动和竖向滑动的冲突,你会如何解决?如果获取到的x移动距离和y移动距离一样大如何定义逻辑?
- 使用Glide有做一个封装吗?应该封装到一个工具类里面来做复用
- 讲一讲内存泄漏和内存溢出?为什么会内存泄漏?列举三种内存泄漏的情况
- 有做过性能优化吗?说了包体积优化,布局优化。内存泄漏优化其实也是
- 说一下具体写过的自定义View?
- Activity A跳转到Activity B再按下back键回到Activity A各自的生命周期变化?如果按下back键回到Activity A之后发现Activity B没有调用onDestory()方法你会如何去调试找bug?
- 100个任务放入到线程池,如何设计最快的完成任务。如何要在前面99个任务执行完成之后再执行第100个任务呢,如何设计?
- 项目中遇到的难点?异步场景下的数据同步。如何解决?接口回调的场景下,如果数据还没有返回,但是用户终止了应用程序,- 你觉得你的设计有什么问题和解决方法?内存泄漏如何解决?弱引用
五、腾讯
一面
- View过度绘制有什么工具进行查看
- SharedPreference两个进程同时进行读写会有什么问题
- Android进程间通信方式
- 热修复原理,讲的Tinker
- DNS协议,CDN
- 算法题,一个数组有两个数字不同,其他都成对出现,怎么找出来
- 智力题,一块钱买一瓶水,两个空瓶换一瓶水,n元能喝几瓶水。
二面
- struct和class有什么区别?
- 说一下单例模式?
- 懒汉式的单例模式存在什么问题?
- 说一下.cpp和.h文件的区别?
- 如果直接在.h文件实现函数会有什么影响?
- 单继承和多继承的差异?
- 字节溢出有了解过吗?
- 两个int相乘数值溢出的原因?
- 可以在一个头文件里面定义多个类?
- define的作用?
- ifdefine endif在编译的时候作用?
- c++的编译过程?
- vector底层实现?
- lambda表达式的参数是如何捕获的?
- malloc、free 和new、 delete 的关系?
- new、 delete 什么时候调用构造函数,什么时候调用析构函数?
- 有接触过字节对齐吗?bool+int的字节大小是多少? 一个结构体是bool+int的大小是多少?
- java中concurrenthash_map底层是如何实现线程安全的?
- 讲一下hash冲突?解决hash冲突的方法有哪些?
- 讲一下一致性hash?
- 链表的查找时间复杂度,最差,最优,平均?
- 红黑树的查找时间复杂度,最差,最优,平均?
- 红黑树在最差的场景下会退化成什么?
- avl树、b+树有了解过吗?
- 如果读数据比较多用什么树比较好,如果写数据比较多用什么树比较好?
- 讲讲c++中的友元?
- c++ sort中排序时指定排序方法时,返回的类型有哪些,分别有什么用?
- 在形参中使用const有什么好处?
- 讲讲const指针?
三面
- RePlugin原理深挖,其他插件化框架对比
- 为什么要选择RePlugin框架
- 你觉得自己对于Android掌握到了什么地步
- 看过什么源码
- 你为什么要看源码
- 你为什么要写博客
- 知道哪些著名开源框架
- 什么是进程,进程调度算法
- 什么是线程
- 你觉得什么是JVM
- 有哪些线程同步算法
- 死锁是什么,举个例子
- Object有哪些方法
- Java异常有哪些,Error和Exception区别
- OSI七层模型,TCP、UDP是哪一层,应用层有哪些协议
- 如果要设计一个大量图片下载的方法,如何确定并发量,有哪些指标。
- APP间传递消息安全吗?要怎么做才能安全呢?
- 广播怎么分类
- 自定义View重写的关键有哪些,onLayout和onMeasure区别
- Android有哪些动画,MotionLayout讲一下。MotionLayout使用场景。
- Activity四种启动模式,SingleTask和SingleTop的使用场景
- 一些Framework层的问题,不太会所以记不得了。但是告诉面试官我已经下了Framework层相关电子书,是下一步需要看的。
- 你为什么想了解Framework层知识。
- 算法题
面试总结
1、跳槽之后先选择中小厂进行面试,毕竟大厂的面试官不是几年没参加过面试的你就能搞定的。
2、自身一定要有过硬的基础知识,在面试的过程中不断的查漏补缺,
3、面试的时候把握好心态,不要自己心态崩了还持续性的面试。
4、在面试一家公司之前,一定要在网络上先找一下这家公司近几年的面试题,了解面试官比较喜欢问什么。
写在最后
面试前需要大量的去刷面试经验和面试题,作为Android程序员,性能优化和framework这两个板块尤为重要。在这里我给大家分享一下我背的面试题资料,有需要的朋友可以下方自取。
Framework资料分享
性能优化资料分享