我的介绍
坐标魔都,15 年本科毕业于普通一本,毕业后就职于一家传统电信公司,20 年后就职于字节跳动。
我的建议分享
5 年经验应该具备哪些技能
我梳理的知识体系如下:
- 架构师筑基必备技能:深入Java泛型,注解深入浅出,并发编程,数据传输与序列化,Java虚拟机原理,反射与类加载,动态代理,高效IO
- Android高级UI与FrameWork源码:高级UI晋升,Framework内核解析,Android组件内核,数据持久化
- 360°全方面性能调优:设计思想与代码质量优化,程序性能优化,开发效率优化
- 解读开源框架设计思想:热修复设计, 插件化框架解读,组件化框架设计,图片加载框架,网络访问框架设计,RXJava响应式编程框架设计,IOC架构设计,Android架构组件Jetpack
- NDK模块开发:NDK基础知识体系,底层图片处理,音视频开发
- 微信小程序:小程序介绍,UI开发,API操作,微信对接
- Hybrid 开发与Flutter:Html5项目实战,Flutter
自身发展几个阶段
阶段一:学习(22到27岁)
阶段二:成为大公司里面某个小组的灵魂人物(28到30岁)
1,一定要进大公司镀金(薪水较高的,比如:bat华为京东美团等):如果毕业的学校很普通,可以现在小公司积累经验,但是,最多只能待2到3年,到第二年的时候,自己要按照大公司的要求,刷题,刷面试经验,直达进入大公司为止,面2次不行面2次,2次不行3次.........
2,找伯乐:进入大公司后,你的项目组肯定有1到2个牛人或者骨干,他们就是你学习的方向,你要主动接近他们,学习他们,并且能对他们有帮助。慢慢的在他们心里积累信用以及影响力,他们将会成为你的伯乐。2到3年后,你慢慢的也能成为组内的骨干,如果运气好,他们跳槽或者换部门了,你就能成为组内的灵魂人物
3,成为组内不可或缺的灵魂人物:你要有意识的观察你的上下游,帮他们解决痛点问题,慢慢的,你就能理解整个模块或者系统的痛点,以及系统未来的规划,能成为那个画饼的人。最后成为不可或缺的人
阶段三:寻找离钱最近的地方,慢慢构筑你自己的事业(30到33岁)
经过第一个阶段,你各方面都会有比较大的积累,包括金钱,个人的演讲能力,底层逻辑思维能力等等。这个时候,你会觉得很爽,你会误以为这辈子就能按这条路顺畅的走下去,错,错,错。因为你面临下一个问题:中年危机
1,找到离钱最近的地方,看下别人是怎么挣钱的,模仿他们,自己实操,完成从零到一的跨越:如果你在阿里,你可以看看淘宝蓝海,学会找蓝海关键词,如果你在抖音先可以尝试抖音带货 等等;这个时候不能太过于专注于技术,这个时候,如何获取数据,如何分析数据是最重要的
2,看看的把副业做大,直到能变成你的主业
字节跳动Android面试
一面:
1、聊项目
2、MVP模式的优缺点
3、图片压缩怎么做
4、图片缓存怎么做,解释LruCache算法
5、http协议
6、常用的排序算法,时间、空间复杂度
7、常用的设计模式
8、java中多态的表现
9、抽象类和接口的异同。
10、android 7.0和android N分别新增了什么内容?
算法题:字符串数组(可能很大)按字典序排序,不能用现有的类库。
二面:
1、自定义控件的基本流程,每一步具体做什么
2、介绍http协议,http的常用请求头,OkHttp的优点在哪?
3、android中多线程怎么处理,handler机制
4、多线程下载文件;多个线程写同一个文件和多个线程分别写单独的文件然后最后合并这两种做法的区别在哪?那种性能好?有什么更优的方法吗?
5、断点续传文件怎么做?
6、android中的性能优化,布局、内存等
7、android中出现内存泄漏的原因,怎么发现?
8、解释OOM的原因,如果当前应用可用内存为20MB,而目前只用了10MB,请问这种情况有可能会发生OOM吗?
9、android中的跨进程方式,binder原理,数据要拷贝几次?android为什么要设计跨进程?
10、sleep()和wait()的区别
11、为什么要使用设计模式?
12、多线程访问单例(双重锁写法)会存在什么问题?怎么解决?
13、项目中遇到的困难。
三面:
1、聊了很久项目,分析项目的难点、核心技术。
2、使用SharedPreferences的get和put方法读写数据会面临什么问题,IO性能方面怎么解决?
3、一个应用如何发现当前局域网中别的也开启了这个应用的设备?
4、android中CRASH和ANR的区别在哪?
4、android中ANR是怎么发生的?系统又是如何发现有应用ANR的?
5、普通for循环和增强for循环的区别,以及使用的场景。
6、http2.0新增了什么内容?
7、当需要加载一个类时,在当前classLoader中没有找到该类会怎么样?(双亲委派)如果最后也没找到呢?(抛出异常ClassNotFound)抛出异常后又会怎么样?
8、解释AtomicReference和compareAndSet。
面试总结
总的来说我总结我的面试经验如下:
- 面试尽量提前到,能早点面试,面试官也更愿意给你通过(就像中国好声音一样,一开始都是疯狂转身)。
- 面试时调动你的幽默细胞,尽量把面试气氛调得愉快一点,这样面试官能更深的记住你。
- 说自己优点的时候一定辅以证据,不然面试官只会当作耳边风
- 不会的问题不要强答,小心有坑,可以这样说:“不好意思这个问题我不会,但是如果让我来设计我会.......”
- 面试其实是一个双向选择,面试官在评估你的表现,同时由于面试官也代表公司,他的素质及提的问题也是你应该评估的方面,所以不要紧张。
- 使用幕布,在每次面试前将自己总结的知识过一遍。我幕布上写了几万字的笔记,每次面试都拿出来看一遍,所以面试问到的基础我基本都能应答入流。
尾声
由于题目很多整理答案的工作量太大,所以仅限于提供知识点,如果你正在找工作,建议逐个过一遍,不懂的可以群里提问讨论, 需要相关知识点可以查看我的【GitHub】,对于已经掌握的可以忽略以节省时间。
自行学习交流直达链接:【点击获取】
系统学习笔记分享
希望我这些面试总结可以帮助还没有找到工作的伙伴们,传递一份温暖~