Android开发8年,阿里、百度一面惨被吊打!我是否应该转行了?

简介: 阿里 百度 面试 android

背景

2020年1月5号,朋友辞去了北京一家小创公司Android开发的工作,准备春节过后寻找新的工作的时候,突然遇到了新冠疫情的爆发,至今赋闲在家。昨天接到同行好友的电话,要和我聊聊天。告诉我再找不到工作就考虑转行了!

话语间无不感叹安卓有点强弩之末的味道!聊天过程中,朋友也顺带分享了一波阿里饿了么、百度Android岗的面经。我也帮他内推了几份工作岗位,却因为技术欠缺和经验不足等问题被友好的回绝了!

饿了么Android岗一面
1:双亲委托机制?
2:插件化原理?
3:垃圾回收机制及其优缺点?
4:PathClassLoader和DexClassLoader区别?
5:说下Binder?
6:Android旋转屏幕后Activity生命周期,Bundle是存储在哪儿的?
7:事件分发机制?
8:Handler实现?
9:Java内存?
10:OkHttp设计模式?
11:算法。

  1. Http和Https的区别
  2. HashMap的具体实施原理,HashMap和Hashset的区别
  3. Java的垃圾回收机制
  4. JVM的原理及线上调优
  5. string,stringbulider,stringbuffer的区别
  6. Java的设计模式
  7. 在白纸上手写二分法排序算法,这道题我在lintcode上面做过原题
  8. 有哪些可以保持进程同步的方法
  9. 如何避免死锁
  10. 常见的数据结构有哪些
  11. leetcode 原题:查找单链表中倒数第K个节点的算法,面试官要求手写

百度Android岗一面
1:算法:寻找出现超过一半的数字?
2:HashMap原理?
3:热更新原理?
4:AstncTask+HttpClient 与 AsyncHttpClient有什么区别?
5:Https握手过程?
6:RecycleView原理?
7:RecycleView的使用?
8:Hybrid通信原理是什么,有做研究吗?
9:ListView图片加载错乱的原理和解决方案?
10:对称加密与非对称加密?
11:TCP、UDP差别?
12:TCP保证可靠的手段?

初级、中级 Android 工程师可能因离职而失业吗?

针对朋友找工作难的问题,我特意咨询了我在腾讯负责面试的朋友,为何Android开发普遍感觉找工作难。最后我们得出的结论基本一致:供需极度的不平衡。

这段时间他都在帮部门招人,在拉钩上也挂了JD,一个多月的时间收到的简历估计有几百份,他发起了面试的不超过5个,最后硬着头皮递上去1个还被刷了。

可问题就在这里,据他反馈大公司都在招Android开发,很多部门还非常着急,但就是招不到合适的人。别跟他说现在做Android的人很多,质量是关键,数量一点意义都没有。每年池子里的人就那么多,一份好的简历出来不止公司之间,部门之间甚至是部门内都在抢,但这批人之外,绝大部分人的简历能占用的时间不会超过5秒。

以前我们沟通时他就提到过这个问题,在现在这个阶段,公司之间的技术鸿沟已经非常明显,开发者身在其中,也因为自身学习能力,环境,项目等等的差别,技术上的差距越拉越大,造成了工作几年之后的两级分化,并且这种差距的拉开不是靠自己的努力就能弥补的。

我这个Android开发八年的朋友,离职后缺乏大型项目经验,至今未找到合适的工作!属于一个典型温水煮青蛙的案例!

Android学习路线指南

那面对这种情况,作为开发者,我们能做的是什么?最基本的,脱离舒适区,不停磨练自己的技术。

工作前三年是职业生涯中成长最快的几年,在这段时间里你会充满激情,做事专注,也容易养成良好的习惯。在大公司有些同学在前三年中就快速成为某一个领域的技术专家,有些同学也可能止步不前。接下来和大家一起探讨下如何在三年内快速成长为一名技术专家。

目录

学习方法

1:掌握良好的学习心态
2:掌握系统化的学习方法
3:知识如何内化成能力
4:广度和深度的选择

1.掌握良好的学习心态

空杯心态
首先要有空杯的学习心态,而不是傲娇自满,故步自封,空杯子才可以装下更多的东西。首先要学会取百家之长,带着欣赏的眼光看团队的同事或学校的同学,欣赏每位同事或同学的优点,然后吸取他们的优点,每个同事都有其擅长的能力,比如有的同事技术能力强,那么可以观察下他如何学习的(或者找他请教学习方法),有的同学擅长解决线上问题,那么观察他是如何解决线上问题的,解决思路是什么?如果他解决不了时,他是如何寻求帮助。有的同学擅长使用IDE或MAC的快捷键,那么可以向他学习提高工作效率。有的同学能快速理解业务知识,观察他是如何做到的,自己如何达到他的程度。沟通能力,解决问题能力以及规划能力都可以向同事学习。

坚持学习
有的同学可能工作了五年,但是学习的时间可能一年都不到。学技术不能急于求成,只要学习方法正确,量变一定会引起质变。

2.掌握系统化的学习方法
如果学习到的知识不成体系,那么遇到问题时就会非常难解决。有些同学会出现这些情况,比如编码时遇到问题百度搜索,如果百度上找不到答案,这个问题就解决不了。再比如,在开发中要用到某个技术点,就学习下API,程序调通后就不再深入研究,浅尝辄止,如果程序遇到其他问题也不知道如何解决。

以上情况我认为叫点状学习。遇到一个问题,解决一个问题,需要一项技术,学习一项技术。那么如何由点到面,由面到体,形成系统化学习呢。

首先要确定学习的知识领域,需要达成的学习目标,针对目标制定学习计划,就像你要写一本书一样,先把目录写出来,然后根据目录上的知识点逐步去学习,最后把这些知识点关联起来,形成一个系统化的知识体系。学习的时候,可以制定一个计划,以周为单位,比如第一周学什么,第二周学什么。

比如我们Android开发,学习进阶路线是:

Android开发进阶学习图谱

3.知识如何内化成能力
成长必须经历一个步骤,就是把知识内化成能力。知识是用脑记住的,能力是用手练习出来的。在工作的几年里,我们可能看过很多书,听过很多技术讲座和视频,但是通过听和看只是让你能记住这些知识,这些知识还不能转换成你的能力。

听和看只是第一步,更重要的是实践,通过刻意练习把听到和看到的知识内化成你的能力。

刻意练习,就是有目的的练习,先规划好,再去练习。

4.广度和深度的选择
技术人员的学习路径有两个维度,深度和广度。很多程序员都有这个疑问,是先深后广,还是先广后深呢?

通过这么多年的学习和思考,我的建议先深后广,因为当技术学到一定深度后,就会有触类旁通的能力,自己掌握的广度也自然有了深度。但是在实际学习过程中,深度和广度相互穿插着学习,比如学习并发编程时,首先学习JDK源码,然后学进去之后,开始看JVM源码,最后看CPU架构,在技术点逐渐深度研究的过程中,广度也得到了完善。

所以无论哪种学习方式,学习态度才是最重要的,在广度学习的时候有深入研究的态度就能达到一定的深度,在深度学习的时候,主动学习相关的技术点,广度也得到拓宽。

最后

题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料免费分享出来。

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

需要的朋友,可以点击https://shimo.im/docs/Q6V8xPVxHpkrtRtD前往免费领取!

希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展~

相关文章
|
25天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
2天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
21 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
16天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
18天前
|
监控 算法 Android开发
安卓应用开发:打造高效启动流程
【4月更文挑战第5天】 在移动应用的世界中,用户的第一印象至关重要。特别是对于安卓应用而言,启动时间是用户体验的关键指标之一。本文将深入探讨如何优化安卓应用的启动流程,从而减少启动时间,提升用户满意度。我们将从分析应用启动流程的各个阶段入手,提出一系列实用的技术策略,包括代码层面的优化、资源加载的管理以及异步初始化等,帮助开发者构建快速响应的安卓应用。
|
18天前
|
Java Android开发
Android开发之使用OpenGL实现翻书动画
本文讲述了如何使用OpenGL实现更平滑、逼真的电子书翻页动画,以解决传统贝塞尔曲线方法存在的卡顿和阴影问题。作者分享了一个改造后的外国代码示例,提供了从前往后和从后往前的翻页效果动图。文章附带了`GlTurnActivity`的Java代码片段,展示如何加载和显示书籍图片。完整工程代码可在作者的GitHub找到:https://github.com/aqi00/note/tree/master/ExmOpenGL。
19 1
Android开发之使用OpenGL实现翻书动画
|
18天前
|
Android开发 开发者
Android开发之OpenGL的画笔工具GL10
这篇文章简述了OpenGL通过GL10进行三维图形绘制,强调颜色取值范围为0.0到1.0,背景和画笔颜色设置方法;介绍了三维坐标系及与之相关的旋转、平移和缩放操作;最后探讨了坐标矩阵变换,包括设置绘图区域、调整镜头参数和改变观测方位。示例代码展示了如何使用这些方法创建简单的三维立方体。
15 1
Android开发之OpenGL的画笔工具GL10
|
25天前
|
Android开发
Android开发小技巧:怎样在 textview 前面加上一个小图标。
Android开发小技巧:怎样在 textview 前面加上一个小图标。
12 0
|
25天前
|
Android开发
Android 开发 pickerview 自定义选择器
Android 开发 pickerview 自定义选择器
12 0
|
26天前
|
缓存 Java Android开发
安卓应用开发中的内存优化策略
在移动应用开发领域,性能一直是衡量应用质量的重要指标之一。特别是对于安卓平台,由于设备的硬件配置多样化,内存管理成为开发者面临的重大挑战。本文将深入探讨针对安卓平台的内存优化技巧,包括内存泄漏的预防、合理使用数据结构和算法、以及高效的资源释放机制。通过这些方法,开发者可以显著提升应用的性能和用户体验。
|
1月前
|
Java Android开发
Android开发系列全套课程
本系列课程面向有java基础,想进入企业从事android开发的计算机专业者。学习搭配实战案例,高效掌握岗位知识。
18 1