Android开发4年,面试居然只值12K,4年Crud终于悔恨顿悟!

2018年的时候有幸接触到了时间管理,开始学着对自身状态进行调整。有计划有目的的进行学习。每天会提前一个小时到达公司进行技术类书籍阅读。两年时间看完的技术书籍有:

  • Android开发艺术探索

  • 大话设计模式

  • Android 源码设计模式

  • Android 进阶解密

随着时间的进行,自己也在项目小组由一个辅助的角色变成项目主力开发,同时自己成长到了中级开发水平,也会和初级的小伙伴进行一些技术交流。

相比于第一家公司,这边并没有一些技术培训和导师指导。但是我的技术成长却相对较大。个人的理解是:内在驱动大于外在

前景展望

从3月份开始进行面试。前后面试大约有6家,通过几家公司的面试也大致了解到了自身的价值(能拿多少钱)。其中最遗憾的是面试某笔记,前三轮技术面已经过了,结果vp挂掉了。可能是自己表现太积极,因为确实很想去,甚至做好了如果能去愿意接收降薪的准备。

相较于公司的其他小伙伴,我的面试过程还算比较顺利。我认为最好的我们不应该为了面试而准备,而在于平时就应该注重积累自己的技术。

一些面试经历

公司一:

软件面试官:

  • 自我介绍、工作履历简述。

  • SVN 和 Git 区别?描述下 Git 提交过程以及什么是工作区和暂存区?

  • Git 中 merge 作用?和 rebase 有什么区别?

  • Java 中强引用、软引用、弱引用、虚引用区别。

  • Https 和 Http 区别,内部使用哪儿些算法。

  • 对称加密和非对称加密区别。

  • Jetpack 实际项目中用过哪儿些?

  • 简述 Apk 包大小优化思路。

  • Kotlin 拓展函数怎么实现的?基于什么原理。

  • Kotlin 属性委托怎么实现的?基于什么原理。

  • 简述 SharePreferences 以及过程中遇到的问题。

  • 为什么选择 MMKV,MMKV 有什么优势,内部原理是什么?

  • 简述 Handler 以及原理。泄漏怎么解决?

硬件面试官:

  • Flutter 实际开发经验有多久?使用/了解过 Flutter 混编吗?

  • 怎么优化的 Flutter 包大小?

  • Flutter 中 Element、Widget 简述。

  • Android Compose 了解过吗?简述一下。

  • so 库动态加载有了解过吗?

  • 简述 MMKV 原理。

  • SharePreferences 有什么缺陷?支持跨进程吗?

  • 在不使用任何三方库,如何实现弹幕功能?如何保证低端机上流畅性。

  • 自定义弹幕中,你 Model 怎么设计?View 又怎么设计?

  • RecyclerView 和 ListView 有什么区别?

  • RecyclerView 缓存原理。

  • 在不使用任何三方库以及系统提供控件,如何实现 RecyclerView 下拉刷新?

  • 直播是什么实现的?需要注意的有什么?使用过的视频格式有什么?如何保证视频以及文字/语音同步性?

  • 开发过音频相关吗?用的是什么?音频格式是什么?

  • 微信小程序使用什么开发的?Vue 还是?

公司二:

  • 工作多久了,你觉得你和其它 Android 工程师相比,有什么优势。

  • 你的 GitHub 主要内容是什么?

  • 假如当你带小朋友,你是如何和他进行分享以及帮助等?

  • 你持续写东西,输出的动力是什么?

  • Kotlin 用多久了,你认为你的 Kotlin 掌握水准在哪儿?初级、中级、高级?

  • var、val、let、apply 有什么区别?

  • let 返回 it,apply 返回 this,它们有什么区别?为什么这么设计。

  • lateinit 作用是什么?

  • Kotlin 协程有用过吗?用在什么场景?

  • 协程是个什么东西?

  • 有了解过协程如何切换线程原理吗?

  • Retrofit 和 OkHttp 是什么关系?

  • Retrofit 是如何通过注解来方便我们 api 调用?基于什么原理。

  • JetPack 用过哪儿些?

  • ViewModel 用来做什么的?

  • ViewModel 如何实现生命周期绑定?

  • ViewModel 为什么存在?那我直接创建个类不可以吗?如何实现数据绑定。

  • ViewModel 如何实例,如何使用的?

  • LiveData 如何实现的?

  • LiveData postValue 和 setValue 赋值,这两个会不会丢失数据,有没有遇到过?

  • MVC、MVP、MVVM 区别是什么?

  • Rxjava 用的多么?map 和 flatMap 有什么区别。

  • RxJava 使用哪儿个操作符能保证顺序执行?

  • 如果让你自己设计一个 Glide 你会如何设计?

  • RGB_565 每个像素点占多少内存?

  • 为什么会使用 RGB_565?

  • 为什么要对图片进行一些压缩?那服务器直接给我们直接裁剪指定尺寸大小不就好了。

  • 假设现在有一张 1MB 图片,我直接设置给 ImageView,那么它在内存中占用空间有多大?

  • 性能优化都做过哪儿些内容?

  • 瘦身的话,我们都是怎么做的呢?

  • armeabi 和 armeabi-v7a 有什么区别?

  • so 库可不可以动态加载,如何实现?

  • Android 版本从 5.0 到 12 都更新了什么东西?

  • Android 5.0 ART 是个什么东西,具有什么优势。

  • 今天的面试,自我感觉怎么样?

公司三:

  • 请做一下自我介绍、学历说明以及工作经验。

  • 公司团队多大,主要负责哪儿些内容?公司是否有自营项目?外包吗?

  • 为什么 Google Play 搜索不到,原因是什么?怎么处理的?现在是一个什么样的状态?

  • 关于弹框隐私协议,工信部怎么规定的?

  • Luban 压缩具体在业务中做哪儿些操作?你知道它内部使用了哪儿些算法吗?

  • 图片使用 Glide,你为什么使用它,它有什么优点,内部算法有什么?

  • 请手写 Glide 加载图片地址到 ImageView,并且图片展示效果为一个圆。

  • ShapeableImageView 你知道原理是什么吗?最低兼容版本你知道吗?

  • 假设后端接口列表中返回了超大图片,你是如何处理优化并正常显示列表中的?

  • 使用过 Jetpack 的哪儿些东西,你对它评价怎么说?

  • Jetpack Compose 了解过么?简单谈下个人理解。

  • Kotlin 与 Java 区别在哪儿里?

  • Android 原生 Apk 以及 Flutter Apk 大小优化怎么做的?

  • 怎么统计性能调优数据?

  • 项目中接触过 WebView 相关吗?这块怎么处理的?

  • SpannedString 原理是什么?都用过它做什么操作?

  • TextView 中 setText(Html.fromHtml()) 内部原理知道吗?

  • 简单描述 CoordinatorLayout 以及内部事件如何分发?

  • 图片轮播怎么做的?如何做到我在最后一张无缝滑动到第一张图片?

  • 你知道 Retrofit 是怎么发出的请求吗?

  • 你的 Android 借壳分享微信中 mmessage_content 怎么算出来的?

  • 项目中 Flutter 中是原生开发还是混合开发?使用了哪儿些框架?

  • 假设地图现在没有开源库,你怎么在 Flutter 实现地图效果?如果我想当前页面上面是地图下面是其他内容呢?

公司四:

  • 自我介绍以及学历简述。

  • HashMap 内部存储是怎样的?

  • hash 冲突是个什么概念?冲突之后怎么解决?

  • 哈希桶是什么结构?

  • 链表结构节点是怎样的?

  • Java 中的 volatile 是线程安全的吗?如果对他做自增操作,例如 a++。

  • Handle 中的 postDelay 实现原理是怎样的,它是怎么实现的延迟处理?

  • 优化线上 Apk 大小都了什么操作?做完 Apk 大小之后从多少降低到多少?

  • 下载转换率怎么统计的?

  • 假设现在给你个需求,需要在打包的过程中去处理图片,你有什么思路?在哪儿个 task 去做 hook?

  • 资源编译的流程是什么样的?

  • 360 加固原因是什么?

  • 你觉得加固或者安全方面,应该从哪儿个方面入手?Dex 层怎么处理能防止反编译?

  • so 加固你知道有什么方案吗?

  • 你比较擅长什么?设计或者某个技术有比较深的了解?

  • 责任链模式简述,一般用于什么场景下。

  • 你怎么理解的依赖倒置设计,具体在什么场景下使用?

未来要做的事


  • 学习数据结构 678月刷完leetcode 最热100题

  • 源码阅读总结

  • 蓝牙应用层的运行原理(6月已完成)

  • 系统binder机制

  • 系统Anr原理

  • 其它的一些框架源码阅读

工作上的小建议


  1. 如果你初入职场,在专业知识不是太牢固的情况下建议不要花过多得时间研究其它的一些东西,而是专注于提升自己的专业技能

  2. 关于职场技能的学习,我们要记住,我们的学习都是有目的,学过之后一定要总结归纳。不要反复的重头在来。

  3. 关于工作的选择,我的理解是合适最好。就好比将一个成绩极差的学生放在及其优秀的班级,他往往是跟不上老师的节奏的。需要下来花大量的时间来补,而成年人往往缺少这样的时间。

  4. 关于数据结构和设计模式,许多多年开发的小伙伴居然也有说不重要。举个简单的例子,gradle项目之间怎么判断循环依赖的呢?学习了图的知识,了解拓扑排序。你会知道至少这个是判断循环依赖的的一种方式。不了解他们很多时候只能停留在api调用。而了解数据结构你才有编写一些深层次东西的可能。

  5. 最后一点,静下心来,做自己想做的事,每一个目标都需要一点一滴的努力。

感谢你看到这里,如果你觉得文章还不错,或者对你小有启发。欢迎点赞转发。

以上就是一枚普通的Android开发者的4年。

希望能够有机会入大厂上岸。

面试大厂需要准备的一些技能

总结

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

【Android高级架构视频学习资源】

Android部分精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值