二.技术的深度
技术的深度一向是我最看重的部分,当今任何一个技术领域都非常宽广,一个人要同时掌握那么多知识并且都深入几乎不可能,那都需要拼学习效率与工作年限了。而你曾经做过的东西,正在做的东西,是绝对可以了解得更深入的,一个对技术有好奇心,有技术热情的人,都不会仅仅停留在这个东西挺好用,而是会忍不住去探究它背后的技术原理,即便不是亲自去看源码,也会花点时间了解别人整理过的经验,所以单凭考察技术上的深度,就可以考察-个人是否对技术有热情 ,是否有技术好奇心等等这些很多大牛认为的所谓“优秀程序员的特征”。
之前曾看到过一句话:“一个人对他所做的事情了解得越深,他就能做的越好”。放在这里再合适不过了。
三.技术的广度
深度是有了,还需要广度吗?我个人的理解是:深度是必要条件,广度是加分项。同样的有技术好奇心的优秀程序员,也不会满足于仅仅局限于自己的一亩三分地,工作之余,也会想要尝试一些其它的领域和方向,因为投入问题也许不够深入,但很多领域知识你知道与不知道,对你个人知识体系的形成关系很大。
比如你要实现一个功能, 在你当前熟悉的技术领域上很困难或者效果不佳,在你就要放弃时你的同事告诉你,这用一个简单Sqi语句就可以实现啦,为什么要搞得那么麻烦?这个例子虽然举得很蹩脚,但是我想意思大家应该已经明白了。知识越有厂度,头脑里的技术体系就越备,同样的问题,你就可以想到N个解,思考一下就得出最优解了 。
如果你听都没听过一些东西,就会经常说出“这个好难搞啊”、"这根本就不可能”其实有的时候真是知识的局限问题,所谓的从0到1难,也是这个意思。
四.逻辑思维能力
这也是我比较看重的一点,这里并不是指那些臭名昭彰的脑经急转弯问题,而是通过交流观察,判断一个人表达观点逻辑是否清晰,回答问题是否有章法,这个很难描述,但如果你细心观察,你会发现很容易通过一些简单的交流,就可以看出一一个人是否逻辑清晰。
有时候你会觉得某个人表达沟通很不错,其实不是沟通的问题,是他说出去的话,经过了他大脑的条理清晰的整理,让你很容易就能明白。这种习惯不是一朝一夕就能养成的,所以面试过程中这点装不出来。
另外一个人如果逻辑清晰,而且反应又敏捷,语速很快,那是大大的加分项,恭喜你,碰到一个聪明人了。
1.简历调查
简历到你手上的时候,你要做好充分的调查分析,不仅仅是对公司负责,也是对自己与候选人时间的尊重,明显不“对劲”的简历,就不要抱着“要不喊过来试试看”的想法了,候选人也许很不错,但如果跟你的岗位不匹配,也不要浪费大家时间,你要想清楚现在需要的人是有潜力可以培养的,还是亟需帮忙干活的。另外如果简历里附带了博客链接,GitHub地址, 相关作品的,可以提前去看看,直接看人家多年积累的文章与代码,比这短短一小时的面试来得靠谱的多。
2.准备面试题
了解清楚候选人背景后,要根据简历,有针对性的准备问题,可以是他作品或做过项目里的某个技术细节的实现方式,也可以是他声称精通的某些领域的相关问题。总之不要等到面试过程中现想问题,特别是刚开始面试别人的同学,往往经验不足稍带紧张导致大脑短路,其实也是很尴尬的,把要问的问题提前写下来,准备充分。
面试官通常会问哪些深度与广度并存的 Android 面试题呢?
因文章篇幅长度有限,我就在这里简单的列举几类很经典的 Android 面试题更大家进行分享一下,如果大家想要了解更多Android 大厂面试题,可以直接去我 GitHub:https://github.com/733gh/Android-T3 参考学习。
第一章 Android FrameWork
-
Android中多进程通信的方式有哪些? 进程通信你用过哪些?原理是什么?(字节跳动、小米)
-
描述下Binder机制原理?(东方头条)
-
Binder线程池的工作过程是什么样?(东方头条)
-
Handler怎么进行线程通信,原理是什么?(东方头条)
-
Handler如果没有消息处理是阻塞的还是非阻塞的?(字节跳动、小米)
-
handler.post(Runnable) runnable是如何执行的?(字节跳动、小米)
-
handler的Callback和handlemessage都存在,但callback返回true handleMessage还会执行么?(字节跳动、小米)
-
Handler的sendMessage和postDelay的区别?(字节跳动)
-
IdleHandler是什么?怎么使用,能解决什么问题?
-
为什么Looper.loop不阻塞主线程?Looper无限循环为啥没有ANR(B站)
-
Looper如何在子线程中创建?(字节跳动、小米)
-
Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米)
-
如何更新UI,为什么子线程不能更新UI?(美团)
-
ThreadLocal的原理,以及在Looper是如何应用的?(字节跳动、小米)
-
Android 有哪些存储数据的方式?
-
SharedPreference原理,commit与apply的区别是什么?使用时需要有哪些注意?
-
如何判断一个 APP 在前台还是后台?
-
如何做应用保活?
-
一张图片100x100在内存中的大小?(字节跳动)
-
Intent的原理,作用,可以传递哪些类型的参数?
-
如果需要在Activity间传递大量的数据怎么办?
-
打开多个页面,如何实现一键退出?
-
LiveData的生命周期如何监听的?(B站)
第二章 Android组件
-
Activity的4大启动模式,与开发中需要注意的问题,如onNewIntent() 的调用;
-
Activity A跳转B,B跳转C,A不能直接跳转到C,A如何传递消息给C?(美团)
-
Activity如何保存状态的?
-
请描诉Activity的启动流程,从点击图标开始。(B站)
-
APP是怎么启动的?
-
启动一个Activity的流程分析
-
Service的生命周期是什么样的?Service两种生命周期以及区别
-
你会在什么情况下使用Service?
-
startServer和bindServier的区别?(美团)
-
Service和Thread的区别?
-
IntentService与Service的区别?
-
ContentProvider如何自定义与使用场景是什么?
-
BroadcastReciver的静态注册与动态注册的区别?
-
广播的分类与工作原理
-
可以再onReceive中开启线程么,会有什么问题?
-
什么是有序广播?
-
Application、Activity、Service中context的区别?能否启动一个activity、dialog?
-
Fragment的生命周期? (美团)
-
Fragment的构造函数为啥不让传参?(B站)
-
Fragment add与replace的区别,分别对Fragment的生命周期影响(美团)
第三章 View System
- View绘制流程与自定义View注意点。(东方头条、美团)
Android中的每一个UI控件都是集成自View,然后这些View都具有相同的绘制流程,必须经过measure,layout和draw. view的绘制流程是在Window添加过程中,ViewRootImpl类的setView方法开始的
-
在onResume中可以测量宽高么
-
事件分发机制是什么过程?(东方头条)
-
事件冲突怎么解决?(东方头条)
-
View分发反向制约的方法?(字节跳动)
-
自定义Behavior,NestScroll,NestChild。(东方头条)
-
View.inflater过程与异步inflater(东方头条)
-
inflater为什么比自定义View慢?(东方头条)
-
onTouchListener onTouchEvent onClick的执行顺序。(58 京东)
-
怎么拦截事件 onTouchEvent如果返回false onClick还会执行么?(58 京东)
-
事件的分发机制,责任链模式的优缺点 (美团)
-
动画的分类以及区别(车和家)
-
属性动画与普通的动画有什么区别?(车和家)
-
插值器 估值器的区别(车和家)
-
RecyclerView与ListView的对比,缓存策略,优缺点。(美团)
-
WebView如何做资源缓存?(字节跳动)
-
WebView和JS交互的几种方式与拦截方法。(字节跳动)
-
自定义view与viewgroup的区别
-
View的绘制原理
-
View中onTouch,onTouchEvent和onClick的执行顺序
-
View的滑动方式
-
invalidate() 和 postInvalicate() 区别
-
View的绘制流程是从Activity的哪个生命周期方法开始执行的
-
Activity,Window,View三者的联系和区别
-
如何实现Activity窗口快速变暗
-
ListView卡顿的原因以及优化策略
-
ViewHolder为什么要被声明成静态内部类
-
Android中的动画有哪些? 动画占用大量内存,如何优化
-
自定义View执行invalidate()方法,为什么有时候不会回调onDraw()
-
DecorView, ViewRootImpl,View之间的关系,ViewGroup.add()会多添加一个ViewrootImpl吗
-
如何通过WindowManager添加Window(代码实现)?
-
为什么Dialog不能用Application的Context?
-
WindowMangerService中token到底是什么?有什么区别
-
RecyclerView是什么?如何使用?如何返回不一样的Item
-
RecyclerView的回收复用机制
-
如何给ListView & RecyclerView加上拉刷新 & 下拉加载更多机制
-
如何对ListView & RecycleView进行局部刷新的?
-
ScrollView下嵌套一个RecycleView通常会出现什么问题?
-
一个ListView或者一个RecyclerView在显示新闻数据的时候,出现图片错位,可能的原因有哪些 & 如何解决?
-
Requestlayout,onlayout,onDraw,DrawChild区别与联系
-
如何优化自定义View
-
Android属性动画实现原理,补间动画实现原理
-
内存优化,内存抖动和内存泄漏。 什么时候会发生内存泄漏?举几个例子(美团)
-
Bitmap压缩,质量100%与90%的区别?(东方头条)
最后
最后这里放上我这段时间复习的资料,这个资料也是偶然一位朋友分享给我的,里面包含了腾讯、字节跳动、阿里、百度2020-2021面试真题解析,并且把每个技术点整理成了视频和PDF(知识脉络 + 诸多细节)。
还有 高级架构技术进阶脑图、高级进阶架构资料 帮助大家学习提升进阶,这里我也免费分享给大家也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
一起互勉~
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
(知识脉络 + 诸多细节)。
还有 高级架构技术进阶脑图、高级进阶架构资料 帮助大家学习提升进阶,这里我也免费分享给大家也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
[外链图片转存中…(img-tj5qvoCO-1714576257956)]
[外链图片转存中…(img-Zp21unsF-1714576257957)]
一起互勉~
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!