安卓客户端的学习路线|26春招冲大厂

ps:如果这篇帖子不仅仅适用于26春招,对其他想找实习27、28届小伙伴,也是有所帮助的~想转行客户端的都可以点赞、收藏关注我~

个人介绍

bg双非硕,去年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渲染。

1.安卓基础

  • Java语言

因为谷歌一开始推出安卓Android的时候,就是基于java语言设计的,所以掌握它比较重要。我觉得如果是java后端出身,那么上手安卓应该不是很困难。虽然现在很多大厂都是采用跨端技术(Flutter、RN、字节lynx、腾讯kuikly),但是有些业务实现,都是基于原生安卓的,那么就绕不过java。这里可以看看b站 黑马的java入门视频。

  • Android开发基础

有了java基础,可以先去看看一本书《第一行代码—Android》第二版,是郭霖大佬写的,十分的通俗易懂。可以把书里面的源码下载下来,对着安卓的四大组件:Activity、Service、Content Provider、Broadcast Receiver,逐个敲代码去理解。其实日常开发中,更多的就是 activity活动比较重要,你可以把它想象成一个容器,app的UI界面都是以它为核心,堆叠一些各种视图view。

  • kotlin基础

当前面2大块都掌握得差不多了,kotlin语言就是学有余力的可以看看。因为在2017年之后,谷歌就首选kotlin作为安卓的第一开发语言。不过为了准备面试的话,这个可以先放放,进公司再学也行,就是换了一些更简洁的语法糖而已。可以和java互相调用,都是通的。

2.开源第三方库

  • Glide 图片库
  • Okhttp + Retrofit 网络请求库
  • RxJava
  • EventBus

3.开发框架

  • Jetpack框架:对传统的安卓开发提供了更方便的组件,提升开发效率。

  • Jetpack Compose框架:一种声明式UI的框架,摒弃了传统的xml布局文件先声明view,然后再在代码中通过 findViewById(R.id.XXX)获取之后,再对view进行各种操作。

  • 跨端框架:简单的说就是使用同一种语言开发APP,可以在安卓/IOS/鸿蒙,三大主流手机系统上运行。这个得看你去的公司需求,如果该公司用Flutter,那么你就需要去学。如果用RN,那么也要去学。这些学有余力的话,都是可以学学的,加深对跨端的理解。跨端在未来,以及ai加持的情况下,肯定是一个大趋势。

4.安卓进阶

  • 自定义view
  • 组件化开发
  • 性能优化
  • framework

📖八股文

计算机网络和操作系统:这个可以看看 小林coding,整理的很详细。

Java基础:一些语言基础,juc多线程、jvm虚拟机、java集合,这个可以看看 javaguide

android安卓基础:这里主要是 安卓四大组件(Activity、Service、Content Provider、Broadcast Receiver),还有就是 handler线程通信,view绘制过程,自定义view等等。

⚠️⚠️⚠️注意:如果是 java后端 转过来的,那么不需要再背 MySQL、Spring、SpringBoot、Spring Cloud等等框架,面试官不是很了解这些,重点背 android安卓基础 就行。

💻APP项目

这里不做过多的介绍,b站上的安卓项目可以随意选一个看看都行。

也可以去 github 搜索优质项目,以 玩安卓APP为例。https://github.com/hongyangAndroid/wanandroid

🍃算法

主要就是力扣hot100,每天刷,保持手感。

分享一个 codetop刷题网站,可以重点关注 前5页 的高频题。

❓面经举例

腾讯 一面:

  1. 自我介绍
  2. 我看你有一段Java后端实习,为什么想投递安卓开发的?
  3. 你在学安卓的时候,是通过什么方式来学习的?
  4. 你挑一些在快手工作中,认为最难、有深度或有成就感的需求来讲讲?
  5. 具体是怎么破解抖音网络抓包证书校验问题的?
  6. 网络上加密防止别人抓包有哪些方式?
  7. 什么叫做HTTPS?它比HTTP安全在哪?
  8. 公钥和私钥的区别是什么(在非对称加密中)?
  9. 加签和验签是什么过程?
  10. 加密解密、加签和验签分别保证了什么事情?
  11. Java并发的三大原则是什么?
  12. 原子性除了用synchronized关键字,还有什么方式可以保证?
  13. 可见性可以通过什么来保证?
  14. 有序性可以通过什么来保证?
  15. 什么情况下会发生Java的指令重排?
  16. JUC包下你知道哪些常用的类?
  17. CyclicBarrier(屏障栅栏)是干嘛的?
  18. ConcurrentHashMap底层是怎么保证线程安全的?
  19. Segment是怎么锁住ConcurrentHashMap的?
  20. Java和Kotlin的主要区别是什么?
  21. Kotlin语法中有哪些特性?
  22. 什么叫做高阶函数?
  23. 什么叫做密封类?
  24. 重写hashCode和equals方法的作用是什么?什么情况下需要重写?
  25. hashCode相同,equals一定相同吗?反过来equals相同,hashCode一定相同吗?
  26. HashMap底层比较两个对象时,是先调用hashCode还是equals?
  27. HashMap存储对象时,如何判断两个对象是否重复?
  28. 安卓中四大组件是什么?
  29. Activity和Fragment的区别是什么?
  30. Activity和Fragment的关系是一对一还是一对多?
  31. 两个Fragment之间如何传数据?
  32. Handler了解吗?
  33. 一个子线程有几个Looper、几个MessageQueue、几个Message?
  34. 什么叫做同步消息和异步消息?
  35. 安卓中内存泄漏有哪些常见的场景?
  36. 非静态内部类和静态内部类的区别?
  37. Java的GC垃圾回收算法有哪些?
  38. 如何判断一个对象是垃圾对象?
  39. 反问 手撕算法:最长递增子序列

滴滴 Aiot 一面:

  1. 自我介绍
  2. 讲一下你的实习经历
  3. 你在快手这段实习,你觉得最难搞的一个事情,或者对你帮助最大的是什么?
  4. 安卓的编译流程,你有了解过吗?
  5. 一个 APP 从手机屏幕上点开,它大致的一个运行过程吗?比如说从进程启动到界面起来这种。
  6. 你平时有了解过、看过安卓的源码吗?或者第三方开源框架的源码?
  7. 你知道 Looper 为什么不会导致 ANR 吗?
  8. Glide 根据设备内存动态调整缓存,它是怎么实现的,底层原理?
  9. 你是怎么学习安卓的?
  10. 你简历里写到跨境进程通信(AIDL),能大概给我讲下原理吗?
  11. 你平时有去写过一些后台 Service 吗?比如后台播放服务这种?
  12. 一个后台进程,现在安卓对后台管控严格,如何能保证它不被杀掉?
  13. 讲一下 View 的绘制过程?
  14. 屏幕上有个按钮,点击按钮的事件分发机制,能讲一下过程吗?
  15. 你平时除了公司项目,会自己学一些 demo 或者做过自定义 View 相关的经验吗?
  16. 你在MyNews这个app中,当时为什么选择 MVP 架构?有了解过 MVVM 这种架构吗?
  17. 首页的导航项、新闻推荐讲讲怎么实现的?
  18. 你平时有了解 Flutter 等等跨端开发这块吗?
  19. 反问 无手撕代码

🙌学习资料分享

如果大家有需要的话,没时间自己整理安卓客户端八股文的话,可以私信我。我自己在语雀整理了一份客户端面试宝典,里面有详细的八股文、面经合集、面经录音。也可以帮忙改简历,周末和平时下班,有时间都会回复~

#大厂##26校招##26春招##实习##客户端##android##经验贴##校招##Java##后端##秋招开始捡漏了吗##春招##秋招#

全部评论

相关推荐

11.17 全程50min,一面主要拷打项目1.自我介绍2.项目拷打·介绍一下项目,产出亮点,讲讲你为什么做这个项目,哪个功能是比较难的,你是怎么解决的(我只说了项目比较复杂,结果反问环节面试官说更想听到我对技术和解决问题的思考过程)·拖拽排序怎么避免频繁渲染?·你的动态表单是如何驱动UI渲染的?·讲一讲SSR,前端性能优化还有什么手段?·axios库中的取消功能是怎么实现的?·单元测试是怎么设计编写的?·如何实现的CSS响应式布局?·vm,vh和%的区别是什么?·让谷歌支持小于12px的文字有哪些方式?3.场景:·实现一个带联想能力的的搜索框组件,讲讲你的开发思路·如果在组件卸载时有未完成的请求,要如何处理?·如果遇到打开一个页面是空白或者加载很卡的情况,你会怎么调试?4.八股:·对原型链的理解·对闭包的理解?闭包的使用场景是什么?·JS的数据类型有哪些,他们的区别是什么?·声明变量的方式有哪些?都有什么区别?5.你的项目什么时候做的?如果现在让你重做这个项目,有没有什么可以优化的地方?6.分享一下你最近有学一些比较新的东西或者了解一些觉得比较有意思的东西吗?7.反问:·对我的评价和建议·面试结果什么时候出总结:应该属于在准备相对充分状态下的第一次面试,总体面试体验不错(不过面试官推迟面试害我多等两个小时并且面试官不开摄像头),给我感觉比较和善,比上次面试官看不起人的态度强上很多。一面主要拷打项目,如果二面会考察一些手撕之类的。面试 完自我感觉对比上一次有很大进步,加油加油!
发面经攒人品
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务