共计 5812 个字符,预计需要花费 15 分钟才能阅读完成。
前言
鄙人尘世间一个迷途小开发,二流程序员。只是一个二流 Android 攻城狮在市场的大潮之下,用一个月工夫面试 + 温习 + 总结,最终拿到了本人喜爱公司 offer(非一线大厂,然而薪资也涨了 40% 多,对我来说曾经很称心惹)的故事。
当然,大厂谁不想去呢?可是工夫紧,生存压力大,打算赶不上变动。生存的真谛就是斗争而已。
前提是进去社会摸爬滚打三年多,不得不抵赖人是分三六九等的。即使是专一度、致力这些颇为主观的因素,也是因人而异的。(没方法,我也晓得主观上应该致力啊 555,可我主观上只想躺着刷 B 站~555)First,先列一下鄙人目前的客观情况:
双非本科,非计算机专业
- 工作四年,都是小厂,小组最多没超过 4 集体
- 算法根底一丢丢 (翻书‘马冬梅’,合书‘什么梅’) 英语水平半文盲
- 懂一点应用层方面的音视频编解码常识
面试之前
首先我不倡议频繁的跳槽,除非被逼无奈,频繁跳槽,不光会成为面试官胆怯的一个方面,对本人的积淀也是没有帮忙的。
同时我不倡议裸辞,这样会存在太多的不定性因素,如果面试工夫拖得太久,这段时间你没有经济支出,然而你还在收入(房租,日常生活开销)。这样会带来有形的压力,同时如果面试受挫,很容易失去信念,甚至狐疑本人的能力。
然而到职也有他的益处,因为,有些公司可能我的项目十分急,须要迅速上岗,那么你到职的交接办理也会耽搁一些工夫,那么也会成为面试官思考的一个因素。所以还是要联合本人的状况而定。
如何筹备
我是从 6 月靠近中旬开始面试的,始终到 7 月底完结,整个面试周期差不多一个月左右的工夫。这次面试采纳的策略是以战代练,就是边面边温习。
面试的话,次要是敌人内推,Boss 和拉勾。但 Boss 的话,初期不倡议把简历可见,我就在这方面吃了苦头(别提了都是泪)。接下来我将这一个月内我接触的知识点铺展开来,也给大家一点参考。
- 算法:LeetCode,把链表、排序、树标签里所有简略类型的题目练一下手。特地是排序,冒泡、疾速、二分、抉择、归并肯定要达到手写的程度!
- 数据结构:Java 的 HashMap——7 和 8 的区别、ArrayList、LinkeList。Android 的 ArrayMap、SparseArray 系列。还有阻塞队列 ArrayBlockingQueue、LinkedBlockingQueue。
- HashMap 的构造和细节是遇到最多,倡议认真看一下源码,肯定要有本人的了解(划重点)。把 HashMap 如何存储、如何查找。hash 碰撞,以及内存利用率这些问题了解一下设计模式和架构:筹备一些本人拿手的模式,在网上查一下材料。筹备一些套话,关键词耦合, 二次批改不便, 内部不必关怀外部实现等等。MVC、MVP、MVVM 三种,起码要理解两种,并且能清晰明确的说出,两种架构间的优缺点。
- 我自身经验过一次 MVC -> MVP 的过渡,所以面试的时候就只提了这两种。MVVM 没接触过,就实话实说没搞过,面试官也不会再问。千万不要打肿脸充胖子,没接触过就说不会就能够了。关键词:UI 逻辑、业务逻辑、不影响对方的前提下批改、逻辑清晰,不便定位
- Android 根底:这个就很重要了,当然涉及面也相当广。四大组件,生命周期这个啥都不说了, 间接冲就是了,根本都会问到。Handler、View 绘制流程、事件散发,这些都是陈词滥调。
- Android 框架根底:AMS,Activity 的启动过程。Android 绘制流程(这个看集体了,因为我简历上写了相熟 Canvas 库,手动狗头)Java 根底:多线程、线程池、锁机制,这两个知识点问到的还挺多的。其余的包含,内存区域、内存透露、垃圾回收。。。(这些懂个概念即可,不深究)
简历
简历制作是一种学识,一份好的简历往往让人眼前一亮。同时简历要突出重点。
- 技能专长
比方你自定义 View 好,那么就把 View 的相干技能写上,比方:View 加载流程,事件散发,自定义属性,滑动抵触等等,如果视频方面强那么就相干的技能写上。尽量不要有精通,除非你真的“精通”。否则就是给本人挖坑。也不要写一些太过常见的技能,如果:理解 Activity 的生命周期。谁都晓得的货色,没别要单拿进去。也不要太长或太短 10-12 个技能专长左右。主旨在于表白的特点简单明了。其余的点大家在本人搓摩下。 - 我的项目介绍
如果你是实习,那么你肯定要有本人在大学我的项目,或是毕业设计,或是团队我的项目。如果是退职肯定要有公司的我的项目。同时我的项目不宜过多 2 - 3 个即可,如果你有感觉能够在简历上写的前端或是后盾的我的项目,那么会有很大的加分。同时我的项目介绍不要太过啰嗦,3- 5 行,突出架构,核心技术,次要性能与模块即可,同时写出本人在其中做了那局部内容。(这部分要写好,因为面试官很可能会问你,你开发中遇到的问题,难点,优化,合作,调试等相干问题) - 其余技能
如果有英语 4.6 级肯定要写上,有 github,集体 blog 肯定要写上地址。这我就不用说了吧。
例如:
简历制作总结:
至于其余的对大家应该没有难度。同时适当的包装无可非议,求职者想找个好工作,面试官想找个好员工。对方就像相亲一样。肯定会把你的底摸个分明的。如果相亲的时候的没问题,等孩子都有了那就晚啦。哈哈,我就是这个意思。包装的目标是为了减少 HR 的通过率。这样才会有面试机会,对咱们这种渣渣来说,面试机会比面试通过与否更重要。因为面试邀请都没有,你筹备有个 P 用。最初我还是心愿大家进步本人的实力,实力才是硬道理。
面试
以上是一些温习的知识点,因为要筹备的货色还是蛮多的。
所以工夫上的安顿肯定要灵便,我是早上温习 Java 根底,中午看 Android,早晨温习算法和数据结构。
有面试的话,就提前去理解一下公司的产品,去官网上冲一冲浪,下个 APP 玩一下。也算提前给本人一个心理准备。
以下是一些面试题,供应大家参考:
- GC 讲一下?
- Java 数据结构理解吗?
- 链表和数组的区别 Final?
- 讲一下我的项目中应用过锁吗?
- synchronized 和 reentrantlock?
- 讲一下多态?
- 内存透露?
- android 中的内存泄露?
- 讲一下 handler 机制?
- listview 和 RecyclerView 的区别
- activity 的生命周期
- activity 的启动模式
- singletop 中再次启动栈顶的 activity,生命周期怎么变动?
- fragment 理解吗?
- 和 activity 的区别?
- handle 机制?
- onNetIntent 理解吗?
- 怎么判断 ipv4 的地址是否非法?(好难好难)
- 最长间断子序列长度(撕了一个应用 set 的),再度优化,有没有其余想法?这个空间复杂度高?工夫复杂度什么?
- 将阿拉伯数字转换为大写数字?始终抠算法?一直批改测试用例?一直改 bug?
- Android 你理解什么?
- Android 怎么开启多线程?
因为问题比拟多,我次要写了比拟常问的问题还是那句老话,面试是一个双向考查的过程,面试官考查你,同时你也要考查考查公司。要真是不喜爱的话,工作做得也不开心,当然也不会短暂。工作毕竟还是占据了生存中的大部分工夫,找一个本人喜爱并违心投入的工作对本人的成长也好一点。同时,面试也是一个考查综合能力的中央。不要认为技术上筹备的很充沛了就高枕无忧。在面试的时候,态度、剖析问题的能力、自信度、人品这些都决定了你是否拿到 offer。
面试细节
面试个别的工夫是在两三个小时左右,作为求职者。咱们要在这段时间内,将咱们的价值展示给面试官和 HR。就像推销产品一样,你得站在旁观者的角度思考一下,这个人值不值得咱们买入 (发 offer),他(她) 的性情怎么样,人品值得信赖吗等等。站在这个角度想一下的话,有很多问题你本人就想通了。当然你思考这些问题的前提是你的技术筹备曾经挺充沛的了。
- 自我介绍;筹备一段两三分钟的自我介绍,挑一些有亮点的货色说一下。面试官也是人,你简明扼要五六分钟,他记住的点也不会太多。所以要精简,要学会提炼关键字。譬如:工作上并重架构设计,技术上并重技术实现(实现了什么牛逼的技术)
- 语气声调:这个也有必要练习一下(不要笑,这个很重要),你能够本人录音听一下,试试有没有一个适合的语速让他人能听分明你说的话。还有谈话要自信,不要结结巴巴,不会的货色就间接说没接触过就行了,切忌扭扭捏捏~~ 还有答复问题的时候,不要等面试官问完就立马答复。进展个几秒钟作思考状(手动狗头),如果是特地特地熟的问题,就略微顿一下,不要太流畅。有些点能够适度说想不起来这个水平本人把握, 挑一些不太重要的点,留给面试官补充,不然你各个问题答复如流,只会减速面试流程。说不定碰到一个轴一点的,就抛出一个史诗大问题给你。当然这个小技巧面试用一次就最多了,千万别乱用。。。
- 到职起因:这个有的技术官不会问,有的会问。HR 会比拟看重这个问题,这个就本人斟酌吧。反正不要给人留下这个人很塌实,不会在咱们这里久留的印象就好了。
- 技术思考:这也是一个很泛的点,要具象的话。就是你在我的项目中如何写你的代码,有的面试官会看重这个问题。这个嘛,就纯是看集体了~~~
现在的面试官教训也丰盛很多,很多问题并不会间接问你,而是抛出一个具体的问题由你去剖析。有的还是考查你在产品和开发之间的我的项目协调问题,比方出了一个主观上无奈解决的问题,你该如何去协调。还比方会考查你一些对产品的思考。其实除了思考力,足够扎实的技术能力也足以帮忙大家度过“分水岭”。
Android 中高级面试题汇总
Android 中高级面试题汇总包含:
Java 根底、Android 根底、UI 控件篇、网络通信篇、架构设计篇、性能优化篇、源码流程篇、新技术篇、面试篇九个章节,一共 1932 页。
Java 根底
- 动态外部类和非动态外部类的比拟
- 多态的了解与利用
- java 办法的多态性了解
- java 中接口和继承的区别
- 线程池的益处,详解,单例
- 线程池的长处及其原理
- 为什么不举荐通过 Executors 间接创立线程池
- BlockingQueue 及其实现
- 深刻了解 ReentrantLock 与 Condition
- Java 多线程:线程间通信之 Lock
- Synchronized 关键字原理
- ReentrantLock 原理
- HashMap 中的 Hash 抵触解决和扩容机制
- JVM 常见面试题
- JVM 内存构造
- 类加载机制 / 双亲委托
Android 根底
Activity 知识点(必问)
- Activity 启动过程全解析
- Fragment 知识点
- onSaveInstanceState 以及 onRestoreInstanceState 应用
- 4onConfigurationChanged 应用以及问题解决
Fragment 知识点
- Fragment 的通信问题, 新建 Fragment 为何不要在构造方法中传递参数
- 为什么官网举荐 Fragment.setArguments(Bundlebundle)这种形式来传递参数,而不举荐通过构造方法间接来传递参数呢?
- Androidx 下 Fragment 懒加载的新实现
- Fragment 全解析系列
- Google-Fragment 概览
- Google- 与其余 Fragment 通信
Service 知识点
- Handler 知识点(必问)
- Android 主线程阻塞解决及优化
- 深刻聊聊 Android 音讯机制中的音讯队列的设计
- 深刻了解 MessageQueue
- 你真的懂 Handler.postDelayed()的原理吗?
- Handler.postDelayed()是如何准确提早指定工夫的
- Handler 提早音讯执行机制,会阻塞吗?
Intent 知识点
- Android 跨过程传递大内存数据
- 数据存储
UI 控件篇
屏幕适配
- Android 屏幕适配和计划
- Android 目前稳固高效的 UI 适配计划
次要控件优化
- RecyclerView 优化
事件散发与嵌套滚动
- NestedScrollingParent & NestedScrollingChild
- 动态化页面构建计划
- 组件与布局
网络通信篇
网络协议
- 彻底了解 WebSocket 原理,附残缺的实战代码(蕴含前端和后端)
架构设计篇
- MVP 架构设计
- 组件化架构
性能优化篇
- 启动优化
- 内存优化
- 绘制优化
- 安装包优化
源码流程篇
- 开源库源码剖析
- Glide 源码剖析
- Glide 面试题
- 聊一聊对于 Glide 在面试中的那些事
- 简历上如果写 Glide,请留神以下几点…
- Glide OOM 问题解决办法汇总
- OkHttp 源码剖析
- Okhttp 连接池复用机制
- Okhttp 流程和优化的实现
- OkHttp 的整个异步申请流
- HttpEngine 中的 sendRequest 办法详解
- OkHttp 解析大总结
- Okhttp 工作队列工作原理
- Android 网络优化,应用 HTTPDNS 优化 DNS,从原理到 OkHttp 集成
- Retrofit 源码剖析
- RxJava 源码剖析
- RxJava 原理与源码剖析
新技术篇
- 实战问题
面试篇
开源文档 + 面试题合集
- android 事件散发机制,请具体说下整个流程
- android view 绘制机制和加载过程,请具体说下整个流程
- android 四大组件的加载过程,请具体介绍下
- Activity 的启动模式
- A、B、C、D 别离是四种 Activity 的启动模式,那么 A ->B->C->D->A->B->C->D 别离启动,最初的 activity 栈是怎么样的
- Activity 缓存办法
- Service 的生命周期,两种启动办法,有什么区别
- 怎么保障 service 不被杀死
- 动态的 Broadcast 和动静的有什么区别
- Intent 能够传递哪些数据类型
- Json 有什么优劣势、解析的原理
- 一个语言的编译过程
- 动画有哪几类,各有什么特点
- Handler、Looper 音讯队列模型,各局部的作用
- 怎么退出终止 App
- Android IPC:Binder 原理
- 了解 Window 和 WindowManager
- Bitmap 的解决
- 如何实现一个网络框架(参考 Volley)
- ClassLoader 的基础知识
- 插件化框架形容:dynamicLoadApk 为例子
- 热修复:Andfix 为例子
- 线程同步的问题,罕用的线程同步
- Asynctask 和线程池,GC 相干(怎么判断哪些内存该 GC,GC 算法)
- 数据库性能优化:索引和事务
- APK 打包流程和其内容
- 网络劫持的类型原理
- 操作系统过程和线程的区别
- …
因为文章篇幅无限,文档资料内容较多,本能够提供链接下载,但无奈容易被谐和,所以全副存档,须要这些文档这里的敌人,能够【点击这里收费获取】,心愿可能共同进步,共勉!
文末
互联网行业是一个常识迭代十分快的行业,如果你不养成学习的习惯,其他人不会停下来等你,这样的话你就等于始终在退化!