我毕业走出学校已有五年了,真想在回到大学时代,去谈一场轰轰烈烈的恋爱…… 而不会像现在是一个没人疼没人爱的单身狗!
在这个五年的时光里,我一直在Android 行业摸爬滚打,待过的公司差不多有五六家了,待得最久的一家时长好像是一年多,基本都是中大型的公司。在进入这些公司前,少不了的肯定是面试环节,而在这些年内去面试的公司也比较多。如何要说具体多少家公司的话,说实话我自己也记得不是很清楚了。但是近一年中我去面试的公司,我是有所简单的记录。
想在金三银四面试的这个季度,通过这篇文章分享给大家做个参考,失败和成功的面经案例都有,我们一起往下看吧。
面试前期准备相信大家在面试前都会一个备战的预习期,因为大家都想把Offer拿到手,然后自己进行去挑选公司,这个周期的长短不宜过长。其实在这个期间最重要的是,给自己做好一份优质的简历,HR或者面试官第一眼见的就是你的简历,从简历中进行筛选确定是否通知你来面试,这个是最关键的一步。二就是对自己简历中所记录熟知的技术点和项目进行复习,从网络上去找相关的面试题进行刷。还有就是回想之前做的项目中遇到的一些问题,自己是如何去解决,这个是面试官跟你聊项目中可能会问到的。
面试过程(不分时间先后) 小米(三面)一面
两个面试官(一个我们小组Android的leader,一个是同事),上来先当着他们的面写了一个笔试题(都是很基础的题没啥难度,算法题也就是一个list的反转,但是小米比较注重手写代码的一些细节,所以要考虑好该判空的判空,还有防止越界啥的问题),然后就开始问,90%都在问Java基础(GC的机制,GC算法,内存相关的问的比较多,多线程线程安全问题是如何发生的,HashMap的原理)
二面
我们组的主管(全程聊项目,没有问技术相关的了,然后介绍了一下这个部门的工作内容啊之类的)
三面:
本来应该有三面…三面是我们部门的领导,但是因为一些其他的原因吧,三面就没有面直接过了
感受:
其实自已算是运气好,遇到的问题算是偏容易的,要多看看算法方面的视频
腾讯音乐(5次技术面)
面试内容:
1.activity和service的生命周期与使用场景
2.thread和服务的差别,单例的类型,多少种?优缺点说一下死锁的原因,与场景,单例的使用场景
3.使用过啥来源框架,有啥特点,为什么,从中学到了什么。
4.kotlin的特点与java的差别,
5.三种架构的区别handler和view的原理,
6.线程池原理与种类
7.javastackoverflow的原因
8.性能优化和卡顿优化的实际案例
9.虚拟机的构成与原理
10.热修复和插件化的区别与原理
11.rxjava源码
12.多线程应该注意的问题
13.databinding原理
14.binder原理
15.网络方面知识
16.平时解决问题的流程
感受:
掌握基础知识很重要,算法也有问到,还有就是开放式问题,他想知道我怎么解决问题的一个过程,怎么发现和定位,平时学习的方法。
美团
1.java的话static变量各种访问可见性,final关键字的作用,封装继承多态展开问,多线程通讯,线程池原理,线程同步方式,jvm内存模型,常见的gc算法,类加载过程
2.网络的话主要是问的https,http1/2/3的区别特性 Android问了一些常见的handler原理,recycleview缓存机制,view事件的分发
3.glide缓存机制
4.然后引申如何实现我LRU。内存泄露和如何预防处理,
5.算法的话,有top-k排序(堆排序,位图法),旋转输出矩阵,链表逆序,hashmap concurrenthashmap原理,线程安不安全,它的锁机制等等
华捷艾米(基础面)
1.冒泡排序,堆排序算法
2.平衡二叉树和红黑树的区别
3.多线程,用过哪些并发api?踩过哪些坑?
4.C++的 指针和引用的区别
5.手写对赋值运算符重载
6.GC 会不会把所有线程暂停?
7.GC不同时期有何区别?
8.说一下Handler Looper的休眠机制
9.设计一个算法,已知某年某月某日是星期几,求另外年月日对应的星期几。
厦门美图
1.多线程
2.handler
3.网络请求
4.性能优化
5.view绘制
6.opengl部分
7.camera相关
8.自定义view
9.asyncTask
10.图片加载框架原理
汇丰银行
1.线程池的工作原理 2.synchronized锁方法和锁静态方法有什么区别
3.锁的理解,什么是乐观锁,悲观锁,可重入锁。
4.View的事件分发流程
5.View的三种测量模式理解,什么时候会发生Excatly
6.HashMap的工作原理。
7.怎么实现多线程下载,断点续传怎么实现。
8.rxjava的背压了解吗
9.kotlin的协程,怎么做到和rxjava的zip *** 作一样,等待所有结果后再处理。
盒马生鲜
1.bitmap在内存中的大小计算
2.系统级的全局异常如何捕获打印堆栈?
3.APT技术原理(这个居然忘了?)
4.如何中断一个线程?AsyncTask如何中断?(加标记位中断)
5.CoordinatorLayout滑动机制?两个CoordinatorLayout嵌套如何通过事件分发传递处理滑动?父View中嵌套子View,快速滑动fling状态,如何处理在父View到顶部停止滑动,子View继续滑动?
6.Flutter热重载原理
7.组件化用了什么技术?实现原理是什么?
8.如何分析主线程中的消息队列耗时情况
9.绘制优化、APP启动优化,activity跳转启动速度优化?(网络请求可不可以放在setContentView之前?)
10.如何实现旋转动画?(帧动画、属性动画、gif、Lottie动画框架)
11.GC分代回收介绍?Eden和survivor为什么是8:1?老年代存活下来的会进入永久代么?
12.如何修改JVM内存分配?(AS中在vmoptions修改,gradle.properties) 13.Android9.0隐藏的属性方法是咋反射获取的 (原理居多)
小红书
(1)concurrentHashMap 如何加锁的
(2)measure参数详解,view设置wrap不起作用
(3)Bind service,如何实现保活
(4)两个进程act,如何加快启动速度
(5)性能优化(面试官老插嘴,都说不上话)
(6)Eventbus如何实现线程的切换
(7)jetpack的Navigation的xml引用,在什么时候调用的?
(8)Inflater.inflate如何实现xml转java的(framework),方法中的各个参数含义。
京东(凉经)
(1)如何设计模块,组件,sdk,如何考虑
(2)说说你项目的架构,为何这么设计或这么考虑
(3) 说说内存泄漏,越多越好
(4) 说说你的技术难点,如何解决,如何思考
(5)apk安全,你如何考虑
(6)act+fragment的完全生命周期(不是单个说哦)
(7)京东北辰:recyclerView源码,必会,包括缓存如何实现,哪几个缓存,运作流程等;各种notifyXX的原理,触发哪些重绘;如何实现下半部分item不移动,上半部分的item高度变化的实现?
探探(凉经)
(1)手拖动View,手松开后完成一个泡泡破裂的动画效果(本质是view事件分发机制+动画选型,分发机制哪个方法处理什么参数,之后怎么触发动画效果等,问的灰常具体,吐了)
(2) 自定义view相关,invalidate,postInvalidate,requestLayout,深入的说说framework层的流程原理
(3)kotlin 协程深层原理如何实现的
(4)dcl是否线程安全?哪一块出问题,为什么volatile能实现防止指令重排,指令级别如何实现的,对象的创建过程等(多家都问了,很深入)
shopee基金
shopee一面:
1.java的四种引用分析
2.synchronize和volatile各自的机制是怎样的
3.handler源码原理相关的问题
4.自定义view的绘制,事件分发机制,怎么解决滑动冲突,activity启动的过程
5.https单向认证,对称加密和非对称加密,在浏览器输入url发生了什么
6.jvm相关,如new一个对象的过程发生了什么,垃圾回收机制
7…问了关于线程池的一些问题
8.跨进程通信有什么方案
9.binder机制
10.hashmap源码
11.用什么方案缩小apk体积
12.recyclerview和listview对比
13.做过什么内存优化,性能优化
14.okhttp源码设计原理
15.手写一道算法题,关于DFS+回溯算法的
shopee二面:
1.问了之前的一些项目经历,在团队做了什么,主要负责哪一块,选择一两块自己认为做得最好的展开讲讲,过程中会打断问问题
2.有没有做过插件化,做到什么程度,讲讲原理
3.由于我之前项目有用到mvvm和jetpack,问了一些jetpack组件相关的源码,和mvvm跟mvp的对比
4.又问了okhttp,缓存拦截器原理是怎样的
5.项目中做过什么性能优化,具体说说
6.平时项目中用到什么设计模式,挑几个常用讲讲
7.聊人生聊职业规划
WPS
1.线程切换(handler机制)
2.多线程,几种锁,有什么区别
3.如何实现线程排队
4.Https加密机制
5.项目经验
6.Okhttp原理 7.设计一个线上日志收集系统
8.项目经验
9.Activity启动流程
10.性能优化
11.Viewstub实现原理,自己设计一个类似的
12.Https如何保证安全的,如何防止中间人攻击,可以伪造证书吗
13.Looper死循环为什么不会导致主线程卡死
14.epoll机制是怎么样子的
15.热修复资源id冲突怎么解决
16.AIDL如何实现的
17.Binder原理
字节跳动
一面:
1.SharedPreferences线程安全吗
2.SharedPreferences多进程调用会有问题吗?如果需要多进程调用,怎么实现
3.自己在项目代码中写一个java.lang.String类会有问题吗
4.内存泄漏除了用LeakCanary还有没有其他办法检测
5.如何监控线上内存泄漏
6.native的内存泄漏怎么监控
7.如何监控线上OOM,如何知道是哪里造成的OOM
8.Error和Exception的区别
9.怎么监控应用中的线程,都是在哪创建的(AOP)
10.post一个延迟5秒的消息,怎么做到5秒后才执行的
11.同步屏障原理
12.ContentProvider初始化的时机
13.组件化-A组件要调用B组件的某个功能,怎么调用(回答了接口下沉,AutoService等等)
14.组件化-如果不用接口下沉,没有任何依赖,怎么方便的调用(不让用反射,太麻烦)
15.A进程调用B进程的b方法(AIDL实现的,B进程有个服务),B进程没有创建的情况下,B进程中是b方法先执行还是Application的onCreate方法先执行?16.如果b方法很耗时,A进程会被阻塞住吗
17.算法:写一个二叉树的层序遍历
18.数据库的索引原理
19.B+树和二叉树的区别,性能对比
20.HashMap的缺点,怎么解决
21.ArrayMap的原理,为什么内存消耗低
22.flutter与其他跨平台方案对比,flutter为什么好(除了跨平台),跟原生的性能比怎么样
23.硬件加速的原理
二面:
1.触摸事件中的cancel事件什么时候触发
2.handler延时消息怎么实现的
3.主线程有好多handler,分发消息的时候怎么知道给哪个handler
4.主线程每5秒钟发一个需要执行10秒的消息到子线程,会发生什么
5.实现了AIDL接口的服务的方法是运行在哪个线程?有多个方法,是不是运行在同一个线程?
6.Binder通讯中,客户端调用服务端是阻塞的吗?怎么做到不阻塞?
7.bitmap的像素数据在哪里?一直申请bitmap会oom吗?
8.view的绘制刷新机制是怎么样的?vsync信号发出后怎么触发绘制逻辑的?
9.页面静止的时候,onDraw会执行吗?vsync信号会发吗?
10.vsync信号发出的时候,怎么控制需不需要onDraw?
11.用canvas怎么绘制一个倒影
12.对canvas做矩阵变换的matrix有哪些参数配置
13.做过哪些性能相关的优化
14.怎么分析anr问题
15.如果是死锁导致的anr,在日志上怎么看
16.应用启动速度怎么优化
17.没有内存泄漏的情况下,应用占用内存比业内其他应用内存要多,怎么分析优化
18.布局层级太多怎么优化
19.页面内有一些不需要每次都显示的view,怎么优化
20.recyclerview里面的图片显示速度比较慢,怎么优化
21.做过的最复杂的项目
22.工作几年中自身提升比较大的地方
23.Javascript中bind,call,apply的区别
24.RxJava中的背压是什么意思
25.flutter有了解吗
26.最近有学习什么
27.mvvm与mvp的区别
28.装饰模式和代理模式的区别
三面:
1.介绍在上一家公司做的app,app的crash率是多少
2.详细介绍最有技术难度的项目
3.应用crash的本质原因是什么
4.重写和重载的区别,应用场景
5.hybrid开发中遇到了什么问题
6.线性布局和相对布局那个性能更优
7.js和java之间传递大对象会怎么样,怎么保证传输性能
8.activity横竖屏切换会发生什么?怎么避免
其实还有几家小型公司的面试,我就不在此一一的说明了,因为文章篇幅长度有限,所以就挑选了几个自己觉得面的还不错的公司进行跟大家分享,大家可以参考这些面试题,去进行记录学习,可能对你将来面试是有帮助的。
推荐分享之前在做面试准备的时候,从网上查找收集整理了一些 Android 开发相关的学习文档、面试题、Android 核心笔记等等文档,进行刷题复习 Android 相关的知识,通过这次的面试效果检测,也体验出了结果。这次面试能通过一半原因是自己的技术还过的去,另一半的原因就是吸收了这些学习文档精华。
所以我想拿出来跟大家进行分享,希望能帮助到大家学习提升,在面试中能顺利通过。如有需要参考的可以微信扫描下方二维码即可免费获取!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)