前言
我 2016 年开始接触 Android, 从刚开始接触就不断地听到 Android 市场饱和工作难找等消息。虽然当时也非常迷茫 , 不过由于第一次深入接触编程语言 , 再加上自己的一点兴趣 , 就一直坚持下来了。
通过最近两个月的面试经历 , 确实发现 Android 岗位比较少 , 而且通常要求比较高 : 不仅需要 Android 开发经验 , 往往还需要会 React Native,JavaScript 等 , 甚至还期望你能具有 IOS 开发经验。
不过作为应届生还是有些优势的 , 那就是一些一线的互联网公司还是比较看中个人基础以及发展潜力的 , 所以如果能在自己的专业方向上具有扎实的基础 ,1- 2 个实际开发项目以及个人的兴趣 , 还是能够找到一个满意的 Android 岗位的工作的。目前这些素质 , 自己也很欠缺 , 通过下面的面试经历就可以看出来 , 不过最起码有个努力的目标 , 可以好好准备为秋招做准备。
简历怎么写
一份好的简历往往事半功倍。笔者平均一年一跳的工作经历 , 看起来是非常糟糕的 , 那为什么还能有很多的面试邀约呢 ?Boss 直聘上往往有很多 RD 在要简历 , 他们往往是用人部门的 leader, 因此 , 突出的职业技能以及过往一年所做的工作尤为重要。下面是我的技能清单。
熟悉面向对象编程 , 熟悉 Java、kotlin 等开发语言 , 对并发、JVM 等有一定的了解
熟悉 Android 开发 , 了解 Android 版本差异
熟悉自定义 View、动画等技巧 , 熟悉消息、事件分发等机制
熟悉 Android 性能优化 , 能够合理利用工具处理工作中遇到的性能问题
熟悉 NDK 编程、熟悉 JNI
熟悉常用的开源框架并了解其内部实现原理
熟悉 Javaassit、ASM、AspectJ 等字节码修改技术
熟悉 Java 层 Hook,Native 层 Hook, 能够合理利用并解决实际问题
熟悉 gradle, 能够根据需求编写出各种 gradle 插件
对 Android 插件化、热修复等有比较深入的研究
熟悉常用设计模式 , 并能去设计出良好的代码
对 TCP/IP、Http、Https 等有一定的了解
了解 Android FrameWork 及其部分流程与实现原理
对 Android 逆向有一定的了解 , 有一定的脱壳能力
有一定的架构能力和极强的解决问题的能力
再加上笔者在过去的一年 , 一直在做基础架构相关的工作 , 因此 , 简历方面会有不错的吸引力。
面试前的准备
工欲善其事必先利其器 , 要想拿到满意的 offer, 必须有一定的准备。以下列出来的东西是笔者认为应该准备的东西(虽然 8 月面试只准备了算法)。
-
简历中提到的 , 一定要有准备 , 别给自己挖坑
-
Java 准备 ,Java 基础 , 有的公司会扣的很细 ,Java 数据结构相关的类、JUC、Java 的语言设计、
-
JVM 推荐看一下深入理解 Java 虚拟机这本书
-
网络部分 , 推荐看一下图解 TCP/IP, 图解 HTTP 这两本书 , 如果觉得不满足 , 也可以看一些其他的 , 如详解 TCP/IP 卷
-
Android Framework, 推荐看 gityuan 的博客 , 并且自己看一下代码
-
第三方开源库 , 这个笔者保持这一直读代码的习惯 , 因此不会刻意准备
-
算法 , 推荐看一下剑指 offer,leetcode 随便刷一些题即可 , 不会太难
-
自己搜集的算法题
-
平常搜集的一些有质量的面试经验
相信每个人都有自己复习的方法 , 这里就不多说了。
面试过程
好的面试官会去发现候选人的优点 , 他们会根据你简历写的东西进行提问 , 因为 , 把简历上写的搞的明明白白 , 即可。在面试过程中 , 不要紧张 , 要突出自己的特点 , 有意的向自己擅长的方向引导。态度要好 , 要自信 , 如果遇到自己不会的 , 尽量别说自己不会 , 稍微思考一下 , 突出自己解决问题的能力。
做好准备之后就是上战场啦 , 虽然面试的是 Android 开发岗位 , 但其实各家公司在面试中会提的问题还是略有差异 , 每家公司会根据自己的业务方向进行一些有针对性的提问。下面给大家分享一下我最近面的几家公司 , 都问了哪些问题 :
小米公司
电面 -20 分钟
-
简单的沟通自己的工作经历
-
聊聊过去一年做的事情
-
基本上以简历上的为主
一面 -40 分钟
-
介绍之前的工作内容
-
如何统计进程的启动时间 , 进程启动的过程 ,activity 启动的过程
-
jvm gc
-
jvm 堆和栈的区别 , 栈上分配
-
四种引用的区别
-
性能优化
-
handler
-
binder
-
算法题。最大回文字串。有 getmin 功能的栈 , 时间复杂度 o1, 两数相加
二面 -40 分钟
-
自我介绍
-
插件化
-
binder, 经过几次内存拷贝 , 从哪里到哪里 ,
-
okhttp
-
跨进程 eventbus
-
设计模式 6 大原则 , 常用的
-
activity a 到 b 的生命周期变化 ,view 是什么时候显示的
-
事件分发机制
-
pms activityrecord
-
看源码的动力
-
jni,jnienv 作用 ,jni 线程切换
-
性能优化 ,fd limit
-
算法题。随机打印 k 个数
三面 -60 分钟左右
-
说下对 Android 的了解
-
事件分发机制 给了个场景 讨论了半天
-
mvp 优缺点 ,mvvm
-
相册搜索 , 设计。讨论了半天
-
介绍了下他们的业务
-
职业规划
美团外卖
面试问的很多问题忘记。一面面试官重技术 , 广度 + 深度 + 基础都要有。
-
jvm 内存分区 , 那些是线程私有的
-
类加载机制
-
做的一些事情
-
泛型原理
-
一笔画算法
-
链表去重
-
滑动冲突的一个场景可以了 ,nestedscrollview
-
gradle 插件相关
-
打包过程
-
tcp/ip 协议分层
-
http 请求包 响应包
-
https 链接过程
-
做的东西 最有成求感的
-
asm aspectj 等改字节码的方式
-
职业规划
-
找什么样的工作
-
为什么离职之类的
-
hybrid
陌陌
陌陌面试题没记住多少 , 总体来说和其他并无太大差别 , 就是考察你做的事情是不是真实做过 , 价值怎么样。
-
数据库优化
-
网络优化
-
多路复用 , 自己用 udp 实现 quic
-
反射优化
-
介绍下自己做的事情 ,
-
为什么离职之类的
-
apm
-
热修复 ,tinker
快手
3 面技术 +1 面 hr
一面重 java, 二面重 Android、项目和自身特点。
一面 java
-
ArrayList LinkedList 区别 , 场景 , 时间复杂度
-
写一个单例,volatile 的作用 , 为什么需要
-
volatile 如何实现 , 内存屏障
-
如何让 GC 不回收
-
HashMap 的数据结构 , 扰动函数 , 扩容
-
并发、锁、AQS、CAS 之类的
-
线程池 , 线程池原理 , 种类。ForkJoin 线程池 , 由于我是最近一段时间内唯一一个提到 ForkJoin 线程池的 , 所以比较加分。
-
算法 – 翻转链表
二面 根据自己的简历问
-
代理、静态代理、动态代理、CGLIB
-
asm javaassit
-
java hook,native hook
-
网络协议,tcp 三次握手 , 为什么三次 , 四次挥手 , 为什么四次 , 三次行不行
-
消息队列
-
算法 - 按层打印二叉树
三面
-
聊业务 , 聊规划之类的
面了几家公司之后 , 属实也是颇有收获 , 目前拿到了其中三家公司的 offer。后面陆续还有一些面试 , 笔者也想再去看看会不会有更好的风景~
准备面试的过程中 , 我也跟好多朋友进行交流 , 去 leetcode 之类的刷题呀 , 或者进行一些模拟面试啊。笔者也是收获了很多 Android 开发的相关讲解资料 , 在文末也分享给大家 , 资料整理的已经非常全面了 , 希望大家可以沉下心来 , 在金九银十乘风破浪!
文末
我总结了一些Android 核心知识点, 以及一些最新的大厂面试题、知识脑图和视频资料解析。
需要的 小伙伴私信【学习】我免费分享给你 , 以后的路也希望我们能一起走下去。( 谢谢大家一直以来的支持 , 需要的自己领取 ) 扫码也可直接领取哦
-
330 页 PDF Android 学习核心笔记 ( 内含 8 大板块 )
-
Android 学习的系统对应视频
-
Android 进阶的系统对应学习资料
-
Android BAT 大厂面试题 ( 有解析 )
原文链接:https://blog.csdn.net/Code1994/article/details/120020572