前言
鄙人尘世间一个迷途小开发,二流程序员。只是一个二流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打包流程和其内容
- 网络劫持的类型原理
- 操作系统过程和线程的区别
- …
因为文章篇幅无限,文档资料内容较多,本能够提供链接下载,但无奈容易被谐和,所以全副存档,须要这些文档这里的敌人,能够【点击这里收费获取】,心愿可能共同进步,共勉!
文末
互联网行业是一个常识迭代十分快的行业,如果你不养成学习的习惯,其他人不会停下来等你,这样的话你就等于始终在退化!