面试概况
1、先笔试,笔试问到了jvm的内容,其他的就比较正常,有一定难度;
2、面试有几轮应该不是一个部门的,可能是有需求的部门轮流来面,面试官风格不一,一般会按你的笔试题进行拓展,或者根据你的项目经验问问题,然后就是更深入的,可能问的比较广泛,如果没有特别准备,很多问题答不上来
3、面试完成之后,hr会根据各个面试官的反馈给你答复,等了很久,估计2周吧,自己也知道没戏了,hr的反馈消息才过来
斗鱼Android开发一面面经
8.15号笔试,昨天下午发邮件通知加群面试,面试方式是使用腾讯会议进行远程面试
问题
- 自我介绍
- 如何选择工作地点?
- 安卓是如何学习的?
- 项目是自己开发的还是小组开发的?
- 项目中用到了哪些库?
- 项目中哪个功能点的实现让你觉得有成就感,怎么实现的?
- 除了Kotlin,其他的热门技术接触过吗?(热修复,插件化,Flutter)
- 安卓中最常见的三大问题?(ANR,OOM和内存泄漏)
- 开启一个耗时任务,可以使用哪些方式?(Service,线程)
- 还有吗?(Android消息处理机制)
- 哪些情况下可能触发OOM?(加载图片等资源过多,内存泄漏累积引起)
- 哪些情况下可能引起内存泄漏?(未完成线程中的强引用,static修饰的变量)
- Java中还有哪些引用?(软、弱、虚)
- 软引用和弱引用有什么区别?(前者只有内存不足时才会被清除,后者只要发生GC就会被清除)
- 使用多线程修改变量时如何解决读脏数据的问题?(volatie,锁)
- volatie具体是如何解决该问题的?(每次修改变量后立刻刷新至主存中,通知其他线程变量复制失效,重新从主存中获取变量)
- Android中的IPC方式有哪些?
- 为什么一个APP会存在多个进程?
- 序列化和包裹化有什么区别?
- 包裹化为什么性能比序列化好?
- 给你一个APP进行优化,你会从哪些方面进行优化?
- 为什么使用ViewStub可以进行优化?
- APP如何瘦身?
- 自定义控件要重写哪些方法?
- 安卓中哪些地方用到了设计模式?使用到的是什么模式?
- 使用过注解吗?
- 如何自定义注解?
- 看过Android的源码吗?
- 如何在链表中判断是否存在环?(快慢指针)
斗鱼Android开发二面面经
面试问题
- 自我介绍
- 疫情期间的学习安排
- 介绍一下项目功能
- 项目中用到了哪些框架?
- 常用图片框架了解吗?
- 如何加载网上的图片资源?
- 如何获取一个根目录下的图片?
- 你项目中的图片都放在哪里?为什么?
- 如果你的APP运行在一个720p的手机上,会发生什么?
- 通过src设置图片和通过bg设置图片有什么区别?
- 图片放置都有哪些模式,需要设置哪一个参数?
- 网络框架了解吗?
- 除了Retrofit,你还知道哪些网络框架?用过吗?
- 安卓的最新版本知道是几吗?有哪些最新特性?
- 有自己适配过Dark Mode吗?
- Android的权限了解吗?如何申请一个权限?
- Android的通知了解吗?现在APP如何发出一个通知?
- Java中==和equals的区别?
- equals和hashcode有什么关系?
- 默认情况下,对两对象使用equals返回true,两者hashcode是否相等?
- 你是怎么有自学Java,Android的想法的?
- 你是怎么自学的?
- 你有哪些问题想问的?
某创业公司
这家创业公司的面试其实只能算是缘分吧。可能就是传说中的非常适合吧。他们是做VR的,所以比较关注我的OpenGL技能(其他公司都对我这一点不以为然)。而且他们会去做各种动画效果,所以也知道骨骼动画是个什么东西。而我从零开发了一个骨骼动画引擎,他们也知道这个的难度,虽然是个2D的,但是原理大致相同,自然也是十分青睐。而且他们是要做SDK,而我也有开发SDK的经历。
主要问的问题都是针对于OpenGL和我写的骨骼动画引擎和细节,还有SDK的设计这三方面。在这个面试过程中也感受出了他们公司技术还是可以的。因为自己搞OpenGL事件比较短,理解还不是很深,面试哥从OpenGL怎样工作的,和GPU怎样工作的给我讲了一通……在理解深度上被完爆……
之后几轮技术面差不多同样内容。最后就是创业公司的尿性嘛,副总裁、CEO随便面面就OK了。
其他公司
其他还有几家公司。
其中一家倾向于ROM开发,也就是Framework开发工程师,我觉得问的问题对于我们应用的开发的没有参考价值。简直不是一个世界的!
还有几家外包公司,都没有技术面,做个笔试题OK了……
还有一家公司昨天面试的,上来问了一个充满杀气的问题:你最擅长什么!听到这个问题,我的第一反应是一脸懵逼!第二反应:这是要怼我了!无论回答什么他都会在这个方向问到死。可能一个简单的API,记不住都会让他认为,这么简单的东西你都不会还说擅长?而往往就是一些简单的API,谁会去背那些东西。不过遇到了我也是认命了!然后我就说了个UI绘制方面。然后他又问了我在这方面做过的最复杂的东西是什么。然后我讲了自己做的OpenGL视图库和骨骼动画引擎。不过他好像并不怎么关心。应该是没做过OpenGL吧,也没做过什么复杂的动画效果吧,不知道要问什么。然后又问还做过什么,然后我把自己做的自定义View说了一下,还有就是我的RecyclerView的马蜂窝布局管理器(一个自定义的LayoutManager)。但是这个过程中他愣是把我说的自定义LayoutManager理解成了自己自定义的一个ViewGroup!然后问的问题我都感觉不是我这个LayoutManager所能管的内容。然后弄了半天才发现,面试哥一直理解的有出入……真是囧!整个面试过程下来感觉天南地北。还有他问我用的OpenGL是用的什么容器?我说GLSurfaceView。好像他听成了SurfaceView,然后问SurfaceView和View有什么区别。一开始这里是我没有听清,因为紧接着他问的OpenGL在什么容器嘛,所以我把GLSurfaceView的工作原理讲了半天……面试哥听的好像也是云里雾里,然后才知道,他问的SurfaceView,然后我又把SurfaceView的讲了一通……整个面试我觉得面试哥和我都不舒服,所以我觉得应该不会过吧。
总结
面试下来也有些感悟吧。
首先,基础知识。
这些都是在面试中必然涉及的问题。可能我上面并没有列点来具体说明,但是多少都有涉及。而且我即使列出了这些,你也不一定会遇到,其实这个范围太大了,所以自己要注意对于细节的追求。如果是要面试了,可以直接点击加入资源丰富,学习氛围浓厚的**技术圈,点击**技术圈一起学习交流吧!
详细整理复制石墨文档可以见:https://shimo.im/docs/QdyGqGHXX8PyQ8pw
群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
其次的面试内容要取决于面试官了,我感觉大概分为三种面试官。
第一种是那种会根据你的简历来面试的。这也是大多数。
第二种会根据自己的需求来面试的。
第三种,根据你牛不牛来面试的。
针对于第一种我觉得首先是对自己的简历严格把关,写在上面的内容一定要可以说出123。对于程序员来说语言表达能力比较差,比如我就是这样。所以自己在面试之前先试着说一说,因为面试过程你只能通过说来让对方知道你所做的东西,你能做出来的一定要能说出来。据说有些人没做过也能说出来。不过我是没有这个能力。
针对于第二种其实要看自己的应变能力。因为你很难预测到对方可能会给你提出怎样的问题。有的时候你一听到问题没有办法马上想到解决的办法。那么这里有一个小技巧,你可以说没有听清楚,中间有一点信号不好,让面试官重复一遍问题,来为自己争取思考时间。如果还没有想出来,那么你可以先分析提出的问题,然后渐渐接近问题的答案。
针对于第三种,我自己之前也没有准备过。第三种面试官非常喜欢问的问题是:你擅长什么?你在哪方面有过人之处?你对哪方面比较精通?其实遇到这种面试官就心中默念阿弥陀佛吧!因为这种面试官要求非常高。他希望的是你对一个领域研究的非常深入,你一个人可以解决这个领域所有的问题,而且希望你是在这个领域做出过一定突破。比如我们常用的什么加载库,你优化它,结果快了多少,就是1%都可以。这个可不是一般的人能够达到的。而大多数情况下我们都是各个领域都涉及一点,虽然可能看过源码,有一定理解的深度,但远达不到可以解决这个领域所有问题的程度,更没有这种技术突破。像有些第三方库源码我也去看过,但自认为达不到他们所谓的擅长和精通。不过针对于这种面试官我觉得也是值得准备一下的。不然自己真的是会一脸懵逼。有的时候就是遇到这样范范的问题,你就已经不知道要如何说话了。然后说错一句话就会被各种完爆,脑海中回响各种 Enemy is Legendary!之后几天估计都要怀疑人生了……那么下面说一下准备方法吧。不过自己也是刚刚遇到这种面试官。也没有确定是否正确。也是给自己的计划。
选一个自己相对比较擅长的领域。
基础要 背!平时我并不太去留意要记住各种API,但是这里就是要背过。不然面试官就会想“这么简单的API都含糊不清还说擅长?”就是真的面试的时候记不清了,也不要打磕,要非常自信的说个差不多的,不要说“好像……”这样的话。要的就是自信,因为这个API面试官也不一定记得那么清楚。不过自己能背过才真的有底气。
试着去了解这个领域市面上的技术。一般的话就是一些库或者框架。这里要记住,不要急着去看源码,要先掌握这些技术都有哪些优缺点,尤其是缺点!因为我们经常因为一个库有什么优点而去使用它,但是缺点往往是我们容易忽略的地方。而知不知道这个库的缺点,是你能不能驾驭这个库的一个关键。
如果有时间的话,研究其中一个众所周知的库的源码。并试图找到它缺点的原因,并找到其解决方法。当然你如果正要准备面试了,肯定没有这个时间。那么就找一些现成的相关的文章来看看吧。然后记住。
结果
近期的面试过程就是差不多这个样子。而且对于我这种刚刚毕业没多久,很多公司连简历都比较难过。所以也没有一些非常大的公司的面试机会。因为大公司社招和校招分的很清楚。最终自己决定去那家VR的创业公司了,原因有以下几点:我本放荡不羁爱自由,第一当然是兴趣,第二呢希望补充Android方面NDK的技术,第三希望可以做一些OpenGL领域更深入研究,而VR正是对其要求非常高,自己也想去挑战这方面的技术瓶颈。下次面试的时候可以非常有底气的回答最擅长什么这样的问题。