共计 4164 个字符,预计需要花费 11 分钟才能阅读完成。
背景
首先介绍一下本人的状况。目前所在的是一家小的守业公司,待了 5 年多,薪资个别吧。因为这几年公司也在转型。工作经验大略能够分为 3 个阶段。
第一阶段是从进公司开始做 android app 开发,无论是外包或者公司的主力产品都做过。
第二阶段是做 ROM 开发,因为公司规模不大,除了硬件和底层的货色外,基本上是一个人负责了整个 ROM 的批改,编译,公布(基于 MTK 的某一个 rom,而后做一些 android framework 层面上“奇奇怪怪”的定制)。
第三阶段,也就是以后。之前做的 ROM 所适配的手机销量未达预期,公司也不再筹备投入更多,基本上是做做简略的保护。而我被调配的新工作是做机器学习的一些货色,比方 Tensorflow, OpenCV 做做图片解决,训练之类的。
置信诸位看了上边的经验,大略也猜到我当初所面临的问题。即,以后在一线做 android app 开发,而我的指标依然是想找 android 开发的职位。
我对于本人的评估:
Android app 开发能力个别,然而足以胜任个别 app 开发的工作(因为的确有段时间未做公司正式我的项目的 app 开发,然而也不是说曾经旷废了技能);
Android frameworks 方面比一般开发者理解更多;
解决问题,学习实际新技术的能力不错(无论是从第一次编译 AOSP 到起初整个 ROM 的开发,公布。还是从对机器学习齐全生疏,到当初可能形容常见机器学习的算法,应用 Tensorflow 实现一些这方面的需要)。
说到这次的面试,面试官简直是依照他所筹备的 Android 面试题一一发问。如:
View 自定义
handler 机制
内存透露
rxjava 的 flatmap 原理
……
(差不多都是些实践上的问题)
他问的这些我大部分都能答上,然而我本人所组织的语言,形容的后果却差强人意。大部分是因为我本人表达能力的问题,我感觉这些问题如果是作为口试题目,我可能更从容的答复。
我更期待的是对于我本人我的项目经验的阐明。因为这是我和其余应聘者不一样的中央。而面试官却齐全没问我简历上的我的项目经验。尽管最初我还是本人硬讲了一下,但面试官也并未有趣味,我讲的也很干瘪。最初面试就这样完结了。
我本人的想法:本人筹备不充沛,没能干净利落地应答这些“Android 规范面试问题”。至多这些根底问题应该可能一两句话就讲清楚。齐全没有体现出本人区别于其余应聘者的中央。我认为本人可能又更快又稳的做好开发工作,可能深刻的钻研框架,源码,解决一些疑难问题,怎么能力让面试官也这样认为。
为何在技术面试中程序员很容易被刷掉?
其实在面试中很多程序员并不是因为技术水平差而被刷,而是对这些“Android 规范面试问题”不理解,晓得怎么做,然而不晓得底层原理。
去年,作为技术 Leader 和主程序员,我面试了超过 100 位的软件工程师职位候选人。
在下文章中,我将和你分享候程序员该如何筹备技术面试,好让你最大可能通过这些面试。另外,我还会给到一些额定的技巧,它们将帮忙你应答这些令人畏惧的技术面试。
首先,我想廓清一下,相比于做程序员,进行面试能够说是另一种技能。你能够是一名优良的软件工程师,但可能是一名蹩脚的面试者。逻辑上来讲,你越善于软件开发,你就越有可能通过技术面试。然而,这并不能打包票保障你肯定能通过绝大数的程序员岗位面试。
一、理解本人的劣势
仔细分析本人的劣势和劣势是什么,而后增加在简历中,劣势能够从这几点动手,前面是面试官的了解:
- 大型项目的教训(能解决我的项目广泛呈现的问题,技术水平靠谱)
- 作为次要参与者得过较量名次(聪慧,敢于尝试)
- 毕业于不错的学校(学习致力,认真)
- 保护优良的开源我的项目 (懂得团队合作,喜爱学习,违心理解我的项目原理)
- 发表过论文或者优良的博客文章(钻研能力强,剖析能力强)
- 数据结构和算法根底好,Leetcode 中等难度都能 bug free(根底不错,造就起来也简略)
理解到本人的劣势和劣势,简历就能够强调本人的劣势。例如,如果求职者要面试的是开发工程师,就应该突出我的项目教训以及对框架的相熟水平,如果面试的是钻研岗位,那么论文与文章的数量就比拟重要。
二、技术常识
知乎上有个问题,叫做 如何高效学习,外面有一个答复我感觉很合乎我本人的观点,就是 建设起本人的常识体系,建设常识体系的目标在于:
坚固记忆。
意识本人,找到本人的劣势及有余。
把握温习的进度。
经验总结。
目前我本人的总结的会分为以下几个大点:
Java 局部
- 面向对象的根本思维
- Object 类相干:Object 类的几个要害函数、String 波及到的常量池概念,序列化 & 反序列化。
- 重要关键字:final、static。
- 外部类:外部类的分类、利用场景、外部类编译成 class 后是怎么样的。
- 抽象类 & 接口:区别、利用场景。
- 编码:编码的目标、分类。
- 异样:异样体系、自定义异样。
- 注解:注解的基本概念、分类、编译时注解 & 运行时注解。
- 容器:重要容器的外部实现、容器间的比照。
- 内存模型。
- 垃圾回收。
- 类加载的过程。
- 泛型:分类、通配符 & 高低边界、泛型擦除。
- 反射:应用。
Android 局部
- Dalvik、Art 虚拟机
- Activity:生命周期、launchMode。
- Fragment:生命周期、懒加载、两种 Adapter 之间的区别。
- BroadcastReceiver:基本概念、播送分类、权限。
- Service:生命周期、onStartCommand 的返回值、startService 和 bindService 的区别、雷同过程 & 不同过程的交互、IntentService 实现原理。
- 重要的工具类 & 源码实现:AsyncTask、HandlerThread、Handler、IntentService、LruCache、LinkedHashMap、SparseArray。
- RecyclerView:缓存原理、和 ListView 的比照、Adapter 如何适配多种 layout。
- 存储:数据库降级 & 优化、ContentProvider,SharePreference。
- SDK 版本升级的兼容问题。
- Android 的权限管理机制。
图片
- Bitmap 相干:Bitmap 的大小计算、品质、inJustDecodeBounds、inBitmap。
- 几种图片格式的比照、压缩。
- 大图加载:BitmapRegionDecoder
算法
- 别无捷径,刷题,然而刷题的时候,要依照题的类型去总结。
开源框架
- RxJava:操作符的利用场景、重点操作符的外部实现、和 RxJava 的比照。
- Glide:流程、缓存相干的实现。
- Retrofit:流程、动静代理 & 注解解析。
- OkHttp:流程、队列实现、缓存实现。
性能
- 性能优化技巧:启动速度优化、布局优化、内存优化、电量优化、APK 大小优化、列表滑动优化。
- 性能优化工具:TraceView、Systrace、调试 GPU 适度绘制 & GPU 出现模式分析、Hierarchy Viewer、MAT、Memory Monitor & Heap Viewer & Allocation Tracker、LeakCanary、Lint。
- ANR
- 性能实际:解决过的性能问题,从 遇到问题、剖析问题、解决问题、后果 四个点进行论述。
View
- 绘制流程:measure、layout、draw 三个要害流程。
- 事件散发:事件散发的原理、解决过的滑动抵触问题。
- 自定义 View:Canvas & Path,实现过的比较复杂的自定义 View。
架构
MVP:MVP 的思维 & 优劣势、在我的项目中的利用、
源码
- AMS
- WMS
- Binder
- 利用启动流程
- APK 相干知识点
- APK 形成:resources.arsc 组成、AndroidManifest.xml、aapt 作用及原理
- APK 打包过程
- APK 装置过程
- APK 签名 & 校验原理
- dexopt 原理
网络
- 基础知识:看一下对于 << 计算机网络 >>,重点是网络分层模型、TCP/UDP、HTTP/HTTPS。
设计模式
- 依照 23 种网络模型、三个分类进行总结,每种设计模式蕴含以下三个方面,至多要筹备罕用的几个:
- 基本概念:UML 图、简略例子、利用场景、劣势 & 劣势。
- Android 源码中的实现
- 我的项目中的利用
多线程
- 看并发编程的艺术,这本书的目录就是多线程最好的常识体系。
- 遇到过的多线程问题、怎么解决的。
- Gradle
- 罕用配置。
- 多渠道打包。
插件化
- 插件化的核心思想。
- 几种插件化框架实现的原理。
组件化
- 组件化的劣势。
- Arouter:应用形式、实现原理。
以上更多具体内容均放在了开源我的项目【github】,大家有须要能够自行获取。
三、非技术问题
Q: 为什么抉择这家公司?
A: 面试之前对起码要浏览过公司的网站,理解公司有什么产品,这样既能够避免遇到皮包公司,或者小作坊欠薪拖薪。
Q: 你已经面临最大的业余挑战是什么?你是怎么战败它的?
A: 这个肯定要筹备好,不能说没什么挑战,没什么挑战代表你没有认真去思考,就算是最简略的增删改查或者前端的动效,背地的原理,网络协议的原理,你都应该去理解。对你在简历中的每一个我的项目,你都应该能说出外面最大的挑战,最乏味的局部是什么,这样面试官能力真正了解你在我的项目中做了什么,学习到什么。
Q: 是什么为什么你抉择来到你现任公司?你从你上一家公司学到最重要的是什么?
A: 大多数求职者不喜爱这个问题,也不晓得怎么答复。这个问题你能答复好的话就能拉出间隔了。我感觉答案其实很简略,你们公司的我的项目有更好的发展前景/我想挑战本人在这一方面的能力等等。至于说旧公司薪酬太低,工时太长,没前途这些就免了。
Q: 你的长期工作指标是什么?
A: 这个看集体,转治理的话可能会加一轮问治理方面的问题,转资深工程师的话能够讲下本人打算钻研哪个方向。
四、最初
我始终以来都有整顿练习大厂面试题的习惯,有随时跳出难受圈的筹备,兴许求职者曾经很称心当初的工作,薪酬,感觉习惯而且劳碌。
不过如果公司忽然开张,或者部门被裁减,还能找到这样或者更好的工作吗?
我倡议各位,多刷刷面试题,晓得最新的技术,每三个月能够去面试一两家公司,因为你曾经有不错的工作了,所以能够带着轻松的心态去面试,同时也能够减少面试的教训。
①「Android 面试真题解析大全」PDF 残缺高清版 +②「Android 面试常识体系」学习思维导图压缩包——————能够我的【Github】浏览下载,最初感觉有帮忙、有须要的敌人能够点个赞