关于an-d-ro-id:大厂谁不想去呢一个月面试复习总结分享我的面试之路

31次阅读

共计 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 打包流程和其内容
  • 网络劫持的类型原理
  • 操作系统过程和线程的区别

因为文章篇幅无限,文档资料内容较多,本能够提供链接下载,但无奈容易被谐和,所以全副存档,须要这些文档这里的敌人,能够【点击这里收费获取】,心愿可能共同进步,共勉!

文末

互联网行业是一个常识迭代十分快的行业,如果你不养成学习的习惯,其他人不会停下来等你,这样的话你就等于始终在退化!

正文完
 0