众所周知,互联网行业是一个说变就变的行业,随着互联网的飞速发展,涌现了一大批新兴互联网行业,在这个行业里,巨头企业也在不停地更换中。而对于程序员来说,可能一不小心就要面临裁员的危机,毕竟在这个行业里,人才太多,而在互联网寒冬的今年,我也不幸被裁员,加入到了失业大军。
值得高兴的是,在被裁员的3个月之后,我面试了京东、高德及两个公司的分公司,虽然四次面试有三次失败,但也成功拿下了京东金融Android研发岗的offer,这3个月的时间里,我并未气馁,也未选择转行,而是静下心来复习好一些理论,鼓起了勇气给京东投了我的简历。
以下附上我这次面试京东及高德团队的面试题以及我个人的复习方法和学习心得,包括了一些可以免费分享给大家的文档,内容均放在了开源项目:【github】 中已收录
京东
面试机会来自于Boss直聘
京东到家(电面):
- GitHub上面的开源项目
- 一个线程能否创建多个Handler,Handler跟Looper之间的对应关系
- ArrayList跟HashMap是够线程安全,如何保证线程安全
- Volley返回数据量比较大的请求时怎么办
- ListView跟RecyclerView刷新数据原理,使用到的设计模式
- 适配如何做,有没有适配过全面屏
- Fragment跟Activity的通信方式,你知道几种?
京东商城(电面):
- 内存泄露的种类
- ActivityA启动ActivityB时生命周期的变化
- AMS是如何管理Activity的
- JVM中的GC回收机制
- 常见的跨进程通信方式,AIDL的实现原理
- APP以及Activity的启动流程
- Hook以及插桩技术
京东金融(Offer)
一面:
- 从长度为m的int数组中随机取出n个元素,每次取的元素都是之前未取过的,如何优化
- https是如何保证安全的,证书如何校验
- Android的签名机制,APK包含哪些东西
- 是否遇到过OOM,如何解决
- 是否做过逆向
- 对JNI了解多少
- 手写单例(DCL)
- 是否写过so文件
- 热修复原理,如何进行dex替换的
二面:
- 简单说下项目
- 内存泄露,如何检测以及检测的原理
- 点击Launcher跟点击微信支付启动微信有什么区别
- 逆序一个字符串,不能调用String的reverse方法(考察编码风格)
- 组件化原理,模块化机制
- 没有给权限如何定位,特定机型定位失败,如何解决
- 同步跟异步机制(是业务上的,不知道他想问什么)
- 线程池中核心线程数跟最大线程数如何定义
高德—汽车事业部(Over)
面试机会来自于Boss
一面:
- View的生命周期
- View的绘制流程跟事件分发
- Activity跟Window之间的关系
- 对C跟JNI是否熟悉
- 热修复原理,插件化是如何进行加载插件的
- Java中的锁,各种同步方式之间的区别
- ANR在四大组件中的时间,场景
- OOM,如何避免
- 内存泄露原理,如何避免
- MVC跟MVP之间的区别
- ListView针对多种item的缓存是如何实现的
- Android绘制二维跟三维的View的区别
- 是否了解硬件加速
- ListView是如何实现对不同type的item的管理的
二面:
- Android中IPC方式,各种方式优缺点,为什么选择用Binder
- 主流的热修复框架流派,原理,是否研究过classloader源码
- Android为什么要设计两种classloader,为什么不用一种,通过type来区分
- Bundle传递数据为什么需要序列化
- 手写一个快排,分析原理
- 广播传输的数据是否有限制,是多少,为什么要限制?
- Activity启动时生命周期是如何回调的?
- MVP.MVC.MVVM之间对比分析
- 组件化通讯:有几种通信方式,Arouter原理
- 插件化加载流程,原理
- 关于反射混淆,耗性能的解决方式
- 天猫七巧板布局原理
- 热修复流派,原理
高德—地图事业部(Over):
面试机会来自于Trinea内推
一面:
- RecyclerView的itemdecoration如何处理点击事件
- 单例模式如何修改数据
- android事件传递,非常细
- 多线程
二面:
- JVM内存分布,Classloader
- 静态代理跟动态代理
- 线程的生命周期
- 是否用过DataBinding
- 是否接触过JNI
- 对热修复跟插件化了解多少
- 对RN了解多少
- 二分查找
- 说下多态
- 编译期注解跟运行时注解
- 线程跟进程间通信
- Android中的IPC
- java中的传递
- equals跟==
- Picasso的存储
- 项目中的难点
- 项目中用到了哪些第三方
- MVC,MVVM,Clean架构
- 抽象类跟接口的区别,接口的默认修饰符
面试之外的学习心得
1.好记性不如烂笔头
这句谚语,几乎无人不知无人不晓,但是总被许多初学者抛在脑后。在学习的时候,总是看的代码多,而动手练习的代码少!身为一个程序员都应该很清楚,代码如果不多动手敲它,它永远不会自己跑进脑中,所以多动手才是成功的关键。
2.花更多的时间分析问题
花更多的时间理解和分析问题,然后再设计方案吧。你会发现剩下的事情很容易了。设计不是说要用建模语言和工具,可以是仅仅看看天空在脑子里构思。那些在遇到问题就开始敲代码的人往往会最终偏离需求。作为程序员,当你在编写代码之前,尽量把问题分析透彻一点,这不仅能提高你编码的效率,更重要的是能提高你的分析问题能力。
3.重思考,多总结
一个段好的代码并不是它们越复杂越好,简单的方法,实现复杂的功能,才是我们最需要的。要提高编码速度,更重要的是简化梳理程序流程,以最小的代码量完成功能实现。所以编程最重要的事情是思考和总结。
最后
这里附上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2019-2020面试真题解析,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习
【一线互联网面试真题解析大全】
【字节跳动面试真题解析】
【腾讯、华为Android中高级面试真题解析】
最近面试被怼了?缺面试题刷提升自己吗?
点击:
快来获取学习资料提升自己去挑战一下BAT面试难关吧
2020年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2020年万事大吉。
网友评论