五年换了三份工作,28岁Android开发一直苦寻属于自己的归属

前言

笔者是电子信息工程专业,15年毕业一直在小公司,大学期间主修Java语言,后面从事Android开发工作觉得完全靠自学已经到了自己的天花板,然后想进大型互联网公司发展,所以年前辞职,放弃了年终奖,年后就直接来的北京,面试的公司有稳定的大公司,也有创业型公司,有些创业型的公司面试质量也挺高的,不输于一些大公司,下面会说到。

技术储备

  1. 熟练Java语言,对多线程,IO,集合有一定的理解
  2. 熟练MySql、Sqlite数据库,掌握SQL语言标准,对事务管理有一定认识
  3. 熟练Android四大组件,Intent的使用
  4. 熟练Android Handler消息机制以及AsyncTask异步任务
  5. 熟练Android UI设计以及UI控件的优化
  6. 熟练通过广播、AIDL 实现Android 进程间的通信技术
  7. 熟练Android网络通信、xml/json数据解析,熟练掌握各种数据存储方式
  8. 熟练Android JNI/NDK技术,实现Java与C/C++之间的互调,实现底层功能的扩展
  9. 熟悉Android内存管理之道

10.熟悉常见设计模式:观察者模式,工厂模式,单例模式,代理模式,适配器模式

11.熟悉Android事件分发机制

12.熟悉Linux常用命令,并掌握其平台下的Android开发

13.熟悉Android自定义控件的开发

14.熟悉Android OOM/ANR异常处理

15.熟悉Android蓝牙、传感器、NFC/GPS开发

16.熟悉Android开源框架:AsyncHttpClient,Imageloader、xutils、SlidingMenu等框架。

17.了解svn/git版本控制工具,有良好的编码能力和代码规范

面试经历分享

总共是面了8家,(2小,4中,2大厂) 小的都拿下了,4中里3个一轮游,1个三轮游。2大的都谈薪了。

小公司会比较偏重于业务,面试上也偏重业务,比如做了什么,大概方案,用了哪些库,库的原理。 这些基本上会集中在 图片处理,网络封装,自定义view这几个部分。

大厂会从业务入手,递进深入到原理及相关知识点,尤其集中在原理部分,这里对平时源码阅读有一定要求。 或者直接问对xxx源码有没有了解。

比如一个handler机制,因其涉及的地方特别多而且很容易展开,想完美答好,真的不是一次两次就能行的。

建议每次面试完,都及时对面试内容进行回忆记录, 这里不是为了泄题漏题,以后吹牛逼,这个没有任何意义。 目的是进行复盘,打磨自己的回答。接下来分享两个面经

1、滴滴(已拿offer)

一面

1、View绘制流程。onMeasure、onLayout、onDraw。

2、竖向的TextView如何实现。TextView文字描边效果如何实现。

3、事件分发。冲突解决。

4、动画

5、RecyclerView的特点和缓存

6、SparseArray和ArrayMap。具体实现原理和特性

7、说一下kotlin的优缺点。let和with的区别

8、接口和抽象类的区别,接口中可以有属性么?

9、用过哪些设计模式?策略模式和桥接模式的区别

10、多线程如何实现?有哪些方式?

11、线程池的参数

12、你如何自己实现一个LRUCache?Android里面的LRUCache是如何实现的?

13、synchronized和volatile的区别?为何不用volatile替代synchronized?类锁和对象锁互斥么?

14、gcroot的类型

15、jvm的运行时数据结构。栈帧中会有什么异常?方法区里面存放的是什么数据?

16、动态代理的实现。

17、Gradle的实现,gradle中task的生命周期。

18、Aop、AspectJ、ASM了解么

19、组件化和模块化的区别。ARouter的缺点。

20、MVP、MVVM的优缺点,jetpack中的组件

21、okhttp源码。

22、glide缓存

23、你对flutter的理解

二面

1、react的单向数据流

2、redux的状态管理,如何实现的?关键角色有哪些?

3、flutter的channel通信有哪几种?你用的哪种?插件你如何实现的?

4、flutter的包体积优化

5、自定义View的关键步骤,注意事项,你的理解

6、MeasureSpec讲一下

7、包体积优化

8、混淆的步骤和原理

9、module间的资源文件merge后,生成过多的R文件,处理过么?如何处理?

10、Bitmap内存大小,注意事项,如何优化

11、启动速度优化

12、glide中对Bitmap做了哪些操作?三级缓存?为何在有了内存缓存后,还要持有ActivityRef这个呢?

13、gradle声明周期,task,插件

14、注解:Source和Class、Runtime注解的区别

15、卡顿优化

16、内存泄漏检测及优化

17、RecyclerView的缓存,局部刷新用过么?

18、List的滑动卡顿如何优化

19、Activity中的Window的初始化和显示过程

20、Application中可以显示Dialog么?为什么?

21、泛型擦除,为何会有擦除?擦除的时机。通配符。下面这段代码有问题么?有什么问题?为何会有这个问题?

List<? extends Object> list = new ArrayList<>(); list.add(123); Object obj = list.get(0);

22、synchronized的同步原语

23、锁的几种状态

24、Android热修复原理,tinker的patch文件如何生成,patch文件是全部加载dex文件首部么?

25、插件化原理

26、两个用单链表表示的大数相加,求他们的和。单链表元素的值为0~9。

三面

1、选一个你的项目讲一下

2、技术选型是如何做的

3、优化内存

4、上传的重试机制

5、OOM和内存泄漏

6、包体积优化

7、你最擅长的点

8、你的职业规划

2.新浪

一面

1、封装的Adapter讲解。

2、自定义View:支持换行的尾部标签的实现。

3、IdleHandler调用时机

4、Bitmap内存计算规则

5、glide默认Bitmap的Config配置是ARGB_8888么?

6、下面这段代码有什么异常?如何解决?

private final ArrayMap<String, Boolean> mBlackFirstFrame = new ArrayMap<>();

public boolean getFlag(String key) { return mBlackFirstFrame.get(key); }

7、下面这段代码会有什么问题?如何解决?

public static class Person implements Serializable { private One one; private Two two; }

public static class One implements Serializable {

}

public static class Two {

}

8、Java为何会有线程安全问题?如何解决?

二面

1、vue的binding原理

2、flutter中isolate的原理。

3、promise的原理

4、讲一下你的技术栈

5、讲下OOM原理

6、讲下ANR7、linux中进程间通信的方式,Android为何会自己搞一个?

8、Java中进程间共享的数据是放在JVM那个分区的?Java中主进程和子进程间的通信,通过哪块内存区域?

9、Facebook的litho了解过么?flexbox用过么?

10、热修复用的什么方案?

11、代码质量如何控制?

12、app质量如何控制?

13、你做过的最烂的一件事是什么?最好、最自豪的一件呢?

小结

不管刷多少题,看多少书,更重要的是自己思考,实践出真知!也许这个过程很耗时间,但是,这个不断以代码去验证自己的某些猜想的过程,便是技术成长的历程!

最后

在这里我也分享一份由几位大佬一起收录整理的 Flutter进阶资料以及Android学习PDF+架构视频+面试文档+源码笔记 ,并且还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料……

这些都是我闲暇时还会反复翻阅的精品资料。可以有效的帮助大家掌握知识、理解原理。当然你也可以拿去查漏补缺,提升自身的竞争力。

如果你有需要的话,可以前往 GitHub 自行查阅。

 

 

 

 

相信一定可以帮助到大家

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值