共计 4193 个字符,预计需要花费 11 分钟才能阅读完成。
说在后面,面试时最好不要虚报工资。原本字节跳动是很想去的,几轮面试也通过了,最初没 offer,本人只想到几个起因:1、虚报工资,比理论高 30%;2、有更好的人选,这个可能性不大,我看还在招聘。我是面试 Android 开发的,3 年教训,上面是面试流程:
一面
1. 插件化。启动 activity 的 hook 形式。taskAffity。
2.okhttp 反对 HTTP2?http2 的性能有哪些?tcp 方面拥塞管制?tsl 的握手和具体的非对称加密算法。非对称名称
3.handler 的 post(Runnable) 如何实现的。callback,runnable,msg 的执行优先级。
4. 阻塞是怎么实现的?为什么不会阻塞主线程?
5. 求二叉树中两个节点之间的最大间隔。
6.206 含意,未修改资源是哪个,302 含意,301 含意
7. 多过程通信问题。binder 劣势。aidl 生成的 java 类细节。多过程遇到哪些问题?
8. 动静代理传入的参数都有哪些?非接口的类能实现动静代理吗?ASM 的原理
9.Application 和 Activity 在 Context 的继承树上有何区别?二者应用上有何不同?
10. 任意一颗二叉树,求最大节点间隔
二面
1. 设计一个日志零碎。
2. 内存泄露的分类。怎么查看内存泄露的问题
3.touch 事件源码问题。
4. 组件化的问题。module 和 app 之间的区别。moduler 通信是如何实现的。
5.native 奔溃的日志采集,怎么解决?
6. 注解实现一个提醒性能:如果 int 的值大于了 3 须要提醒。
三面
1. 介绍下 flutter 的启动流程
2. 介绍下 flutter 与 weex 的区别
3. 组件化介绍一下
4.webview 中与 js 通信的伎俩有哪些?
5. 介绍下 flutter_boost 的原理
四面
1. 适配器和装璜模式各自特点和应用场景
2. 视频编解码是怎么做的
3. 三色球排序
HR 面
1. 询问了除字节跳动以外,还在看其余工作机会么?别离是什么
2. 字节、XXX 公司、XXX 公司,你的优先级是什么,为什么?
3. 之前薪资待遇是多少?你冀望的薪资是多少?
4. 平时有什么喜好?
5. 理解职位需要吗?
6. 有没有想问的?
这是我在某论坛看到的故事,我晓得咱们很多程序员都有一个大厂梦,但如何针对大厂进行面试筹备,如何和 HR 聊天,比方谈钱等等,很多程序员就显得不知所措了。本文就依据本人一些见解谈谈这些问题。
什么是适合的候选者
在介绍如何面试之前,这里先从公司的角度来剖析:”到底什么样的候选者是公司所须要的技术人才?“就我在当初这家公司的一些面试官教训来说,一个具备如下特色的 Android 程序员是咱们所须要的:
- 具备本科及以上学历(名校更好)
- 具备 2 年及以上的工作教训(名企更好)
- 技术扎实,有技术谋求和工作激情
- 良好的沟通和合作
在下面的四条中,其中第 3 条是最为重要的,即技术,技术是决定是否通过面试的最重要最间接的起因。一般来说,越是大公司,其对技术的要求就越高,只管局部岗位并不需要那么好的技术,然而为了对候选者做出辨别,其面试过程依然会面试一些略微深刻的话题,置信大家都有所领会。
除了技术以外,良好的沟通和合作能力也是比拟重要的。兴许很多人感觉这个比拟形象,心里会想:”你怎么晓得我有没有良好的沟通和合作能力呢“?其实这个问题并不难,面试过程就是一次沟通过程,如果不能和面试官很好地沟通,这就阐明候选者的沟通有问题。如何很好地和面试官沟通呢?给如下几点倡议:
- 礼貌和尊重。
- 听懂面试官的问题并间接答复。
- 谦虚谨慎、态度敌对。
上面对学历和工作教训做一些阐明,学历并不是一个硬性要求,即便候选者学校不怎么好也是有可能通过面试的,这就要求候选者技术十分扎实。而工作教训,之所以是 2 年以上,这是因为社会招聘的对象个别都是有肯定工作教训的,而 1 年工作教训略短了点,拿百度来说,社招的最低级别个别为 T4,差不多刚好就是 2 年教训左右。
这里做下总结,现实的候选者应该是这样的:
- 扎实的技术功底,有技术谋求(必须)
- 态度、沟通和为人都很好(必须)
- 2 年左右工作教训(根本必须)
- 名校、名企、高学历(非必须,加分项)
根本来说,满足 1 和 2 就能通过面试,3 和 4 都是主要条件,然而一般来说不满足 3 就很难满足 1,不要说特例,木有参考意义。
由此可见,技术是面试后果的决定因素。那么到底技术把握到什么水平能力比拟轻松地通过面试呢?说了那么多,如同和 Android 没有一点关系,上面就开始以 Android 为例来剖析下面试过程所需的技术。
技术常识梳理目录
上面的所有技术知识点具体内容都整顿在了开源我的项目【GitHub】, 有须要的能够自取。
1.Java 基础知识
- 面向对象的根本思维
- Object 类相干:Object 类的几个要害函数、String 波及到的常量池概念,序列化 & 反序列化。
- 重要关键字:final、static。
- 外部类:外部类的分类、利用场景、外部类编译成 class 后是怎么样的。
- 抽象类 & 接口:区别、利用场景。
- 编码:编码的目标、分类。
- 异样:异样体系、自定义异样。
- 注解:注解的基本概念、分类、编译时注解 & 运行时注解。
- 容器:重要容器的外部实现、容器间的比照。
- 内存模型。
- 垃圾回收。
- 类加载的过程。
- 泛型:分类、通配符 & 高低边界、泛型擦除。
- 反射:应用。
2.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 的权限管理机制。
3. 图片
- Bitmap 相干:Bitmap 的大小计算、品质、inJustDecodeBounds、inBitmap。
- 几种图片格式的比照、压缩。
- 大图加载:BitmapRegionDecoder
4. 算法
别无捷径,刷题,然而刷题的时候,要依照题的类型去总结。
5. 开源框架
- RxJava:操作符的利用场景、重点操作符的外部实现、和 RxJava 的比照。
- Glide:流程、缓存相干的实现。
- Retrofit:流程、动静代理 & 注解解析。
- OkHttp:流程、队列实现、缓存实现。
6. 性能
- 性能优化技巧:启动速度优化、布局优化、内存优化、电量优化、APK 大小优化、列表滑动优化。
- 性能优化工具:TraceView、Systrace、调试 GPU 适度绘制 & GPU 出现模式分析、Hierarchy Viewer、MAT、Memory Monitor & Heap Viewer & Allocation Tracker、LeakCanary、Lint。
- ANR
- ANR 起因
- ANR 产生过程源码剖析
- 信息收集过程
- trace 文件剖析
- 剖析根本流程
- 具体示例
- 如何防止产生 ANR
- 性能实际:解决过的性能问题,从 遇到问题、剖析问题、解决问题、后果 四个点进行论述。
7.View
- 绘制流程:measure、layout、draw 三个要害流程。
- 事件散发:事件散发的原理、解决过的滑动抵触问题。
- 自定义 View:Canvas & Path,实现过的比较复杂的自定义 View。
8. 架构
- MVP:MVP 的思维 & 优劣势、在我的项目中的利用、
9. 源码
- AMS
- WMS
- Binder
- 利用启动流程
- APK 相干知识点
- APK 形成:resources.arsc 组成、AndroidManifest.xml、aapt 作用及原理
- APK 打包过程
- APK 装置过程
- APK 签名 & 校验原理
- dexopt 原理
10. 网络
基础知识:看一下对于 << 计算机网络 >>,重点是网络分层模型、TCP/UDP、HTTP/HTTPS。
11. 设计模式
依照 23 种网络模型、三个分类进行总结,每种设计模式蕴含以下三个方面,至多要筹备罕用的几个:
- 基本概念:UML 图、简略例子、利用场景、劣势 & 劣势。
- Android 源码中的实现
- 我的项目中的利用
12. 多线程
- 看并发编程的艺术,这本书的目录就是多线程最好的常识体系。
- 遇到过的多线程问题、怎么解决的。
13.Gradle
- 罕用配置。
- 多渠道打包。
14. 插件化
- 插件化的核心思想。
- 几种插件化框架实现的原理。
15. 组件化
- 组件化的劣势。
- Arouter:应用形式、实现原理。
16.Kotlin
有用到的能够看看。
17. 多媒体
音频、视频播放。
18. 大前端
ReactNative、Flutter:没学过的能够理解一下思维。
19.JNI
调用实现形式。
所有的知识点都整顿在了开源我的项目【GitHub】, 有须要的敌人能够自取。
如何和 HR 聊天,比方谈钱等等
首先你面到 HR 了,阐明你根本曾经成为备选人之一了。这时候 HR 会和你聊很多问题,这些问题都是为了理解你的一些集体状况的。比如说性情啦、反馈能力、情商等等。另外大部分公司的 HR 并没有一票否决权,面试没有胜利多半是有更好的备选人而不是因为 HR 把你卡掉了。
而后说到谈钱的一个问题。首先以起码的工资招到须要的人必定是 HR 的考核之一,所以压价是很失常的一个事件。并且上家公司的薪资也是一个很重要的参考,一般来说涨薪幅度在 30% 以上是很牛逼的事件了,通常都在 20% 左右。
你的开价个别就是 offer 的下限了,思考到压价的状况,你能够在本来冀望薪水上上浮 1K 左右,而后能够依据面试的状况来有选择性的开价。
- 面的不错,原本想要 16K 的,那么就多要个 1-2K 没啥问题
- 面的个别,那就报 16 K 吧
- 面的个别或者不大好,然而又很想进这家公司,能够酌情降落 1-2K,这个次要还是看本人
- 不怎么想去这家公司,随便开价
结语
如果你想去一家不错的公司,然而目前的硬实力又不到,我感觉还是有必要去致力一下的,技术能力的高下能决定你走多远,平台的高下,能决定你的高度。
如果你通过致力胜利进入到了心仪的公司,肯定不要懈怠放松,职场成长和新技术学习一样,逆水行舟。