安卓客户端的学习路线 | 26春招冲大厂(适合Java后端转客户端,零基础也有机会,曲线救国)
ps:如果这篇帖子不仅仅适用于26春招,对其他想找实习的27、28届小伙伴,也是有所帮助的~想转行客户端的可以关注我,给本贴点赞、评论、收藏。
介绍
背景双非硕,去年25秋招只投递了java后端,到了11月份时候也只拿到了一些小公司的offer,后来也是在逛各种帖子:是11月份继续准备再找一个java实习 or 选择一个新的岗位(测开or客户端)。我仔细考虑了一会儿,毕竟后端太卷了,再来一段实习可能作用也不是很大,所以选择了后者。然后我在ssob上面投了一些公司,比较顺利地拿了快手客户端,开始春招转投了。
如愿在春招收到了许多大厂客户端的面试机会,基本都面到了终面,比java后端的面试机会,真的多了很多,稍微罗列一些,主要如下:
春招拿下的offer:腾讯、转转、360、哈啰、几个中厂(也能开20多个)。
🕐首要目标:如果自己的学历也是双非硕比较普通的学历(不是那种邮电、深大、杭电这种的话),还想冲一手大厂,那么可以考虑从现在开始,抓紧去ssob上筛选客户端的实习岗位,如果是java后端的,就投递安卓android客户端。现在快年底了,应该是比较缺人力的。有了客户端的大厂实习经历之后,春招上岸成功率是比较大的。
🔨安卓技术栈
这里先讲一个大致的安卓技术栈思路,因为我们都是学过java后端的,那么SSM、SpringBoot框架,MySQL数据库,以及一些中间件(Redis、mq、es),都是学过的。但是到了安卓这边,这些中间件都不需要再使用了,因为我们主要是和界面UI打交道,然后有点像web前端,发送HTTP请求给后端,获取数据,进行UI渲染。
基础技术栈
Java语言
因为谷歌一开始推出安卓Android的时候,就是基于java语言设计的,所以掌握它比较重要。我觉得如果是java后端出身,那么上手安卓应该不是很困难。虽然现在很多大厂都是采用跨端技术(Flutter、RN、字节lynx、腾讯kuikly),但是有些业务实现,都是基于原生安卓的,那么就绕不过java。这里附上一个我看过的入门视频:
Android开发
有了java基础,可以先去看看一本书《第一行代码——Android》第二版,是郭霖大佬写的,十分的通俗易懂。可以把书里面的源码下载下来,对着安卓的四大组件:Activity、Service、Content Provider、Broadcast Receiver,逐个敲代码去理解。其实日常开发中,更多的就是 acitivity活动比较重要,你可以把它想象成一个容器,app的UI界面都是以它为核心,堆叠一些各种视图view。这里附上一个我看过的入门视频:
kotlin基础
当前面2大块都掌握得差不多了,kotlin语言就是学有余力的可以看看。因为在2017年之后,谷歌就首选kotlin作为安卓的第一开发语言。不过为了准备面试的话,这个可以先放放,进公司再学也行,就是换了一些更简洁的语法糖而已。可以和java互相调用,都是通的。
开源第三方库
- Glide 图片库
- Okhttp + Retrofit 网络请求库
- RxJava
- EventBus
开发框架
- Jetpack框架:对传统的安卓开发提供了更方便的组件,提升开发效率。jetpack快速开发
- Jetpack Compose框架:一种声明式UI的框架,摒弃了传统的xml布局文件先声明view,然后再在代码中通过 findViewById(R.id.XXX)获取之后,再对view进行各种操作。jetpack compose教程
- 跨端框架:简单的说就是使用同一种语言开发APP,可以在安卓/IOS/鸿蒙,三大主流手机系统上运行。这个得看你去的公司需求,如果该公司用Flutter,那么你就需要去学。如果用RN,那么也要去学。这些学有余力的话,都是可以学学的,加深对跨端的理解。跨端在未来,以及ai加持的情况下,肯定是一个大趋势。
安卓进阶
- 自定义view
- 组件化开发
- 性能优化
- framework
📖八股文
- 计算机网络和操作系统:这个可以看看 小林coding,讲的很详细。
- Java基础:一些语言基础,juc多线程、jvm虚拟机、java集合,这个可以看看 javaguide
- android安卓基础:这里主要是 安卓四大组件(Activity、Service、Content Provider、Broadcast Receiver),还有就是 handler线程通信,view绘制过程,自定义view等等。
⚠️⚠️⚠️注意:如果是java后端转过来的,那么不需要再背 MySQL、Spring、SpringBoot、SpringCloud等等框架,面试官不是很了解这些,重点背 android安卓基础 就行。
💻APP项目
这里不做过多的介绍,b站上的安卓项目可以随意选一个看看都行。
或者 可以去github搜索优质的项目,以 玩安卓为例。https://github.com/fangxiaogang/WanAndroidxg
🍃算法
主要就是力扣hot100,每天刷,保持手感。
然后就是一个网站,每天都会更新手撕算法在各个大厂面试中被问到的频率,可以重点关注前5页的高频算法题。codetop刷题网站
❓面经举例
腾讯一面:
- 自我介绍
- 我看你有一段Java后端实习,为什么想投递安卓开发的?
- 你在学安卓的时候,是通过什么方式来学习的?
- 你挑一些在快手工作中,认为最难、有深度或有成就感的需求来讲讲?
- 具体是怎么破解抖音网络抓包证书校验问题的?
- 网络上加密防止别人抓包有哪些方式?
- 什么叫做HTTPS?它比HTTP安全在哪?
- 公钥和私钥的区别是什么(在非对称加密中)?
- 加签和验签是什么过程?
- 加密解密、加签和验签分别保证了什么事情?
- Java并发的三大原则是什么?
- 原子性除了用synchronized关键字,还有什么方式可以保证?
- 可见性可以通过什么来保证?
- 有序性可以通过什么来保证?
- 什么情况下会发生Java的指令重排?
- JUC包下你知道哪些常用的类?
- CyclicBarrier(屏障栅栏)是干嘛的?
- ConcurrentHashMap底层是怎么保证线程安全的?
- Segment是怎么锁住ConcurrentHashMap的?
- Java和Kotlin的主要区别是什么?
- Kotlin语法中有哪些特性?
- 什么叫做高阶函数?
- 什么叫做密封类?
- 重写hashCode和equals方法的作用是什么?什么情况下需要重写?
- hashCode相同,equals一定相同吗?反过来equals相同,hashCode一定相同吗?
- HashMap底层比较两个对象时,是先调用hashCode还是equals?
- HashMap存储对象时,如何判断两个对象是否重复?
- 安卓中四大组件是什么?
- Activity和Fragment的区别是什么?
- Activity和Fragment的关系是一对一还是一对多?
- 两个Fragment之间如何传数据?
- Handler了解吗?
- 一个子线程有几个Looper、几个MessageQueue、几个Message?
- 什么叫做同步消息?什么叫做异步消息?
- 安卓中内存泄漏有哪些常见的场景?
- 非静态内部类和静态内部类的区别?
- Java的GC垃圾回收算法有哪些?
- 如何判断一个对象是垃圾对象? 手撕算法:最长递增子序列
滴滴一面:
- 自我介绍
- 讲一下你的实习经历
- 你在快手这段实习,你觉得最难搞的一个事情,或者对你帮助最大的是什么?
- 安卓的编译流程,你有了解过吗?
- 一个 APP 从手机屏幕上点开,它大致的一个运行过程吗?比如说从进程启动到界面起来这种。
- 你平时有了解过、看过安卓的源码吗?或者第三方开源框架的源码?
- 你知道 Looper 为什么不会导致 ANR 吗?
- Glide 根据设备内存动态调整缓存,它是怎么实现的,底层原理?
- 你是怎么学习安卓的?
- 你简历里写到跨境进程通信(AIDL),能大概给我讲下原理吗?
- 你平时有去写过一些后台 Service 吗?比如后台播放服务这种?
- 一个后台进程,现在安卓对后台管控严格,如何能保证它不被杀掉?
- 讲一下 View 的绘制过程?
- 屏幕上有个按钮,点击按钮的事件分发机制,能讲一下过程吗?
- 你平时除了公司项目,会自己学一些 demo 或者做过自定义 View 相关的经验吗?
- 你在MyNews这个app中,当时为什么选择 MVP 架构?有了解过 MVVM 这种架构吗?
- 首页的导航项、新闻推荐讲讲怎么实现的?
- 你平时有了解 Flutter 等等跨端开发这块吗?
- 反问
🙌学习资料分享
如果大家有需要的话,没时间自己整理安卓客户端八股文的话,可以私信我。我自己在语雀整理了一份客户端面试宝典,里面有详细的八股文、面经合集、面经录音。
也可以帮忙改简历,周末和平时下班,有时间都会回复。
#大厂##26校招##26春招##实习##客户端##android##经验贴##校招##Java##后端##秋招开始捡漏了吗##春招##秋招#
