客户端秋招总结&技术路线分享

背景&基本情况

    本人双非本,上海211通信硕士,一段手机厂Android实习经历,lc大概刷了400题,拿得出手应该就只有国奖+2篇SCI。转码大概历时一年零2个月,虽然跟某些大佬相比,我不值得一提但我足够满意,当然未来也会保持继续努力,始终学习。经历了寒冷刺骨的2023秋招整个过程,从8月底开始陆陆续续投递了上百家公司,但能有笔试的可能只有一半,而笔试通过有面试的可能不到20家,可能是我投递比较晚了,也可能是笔试分不够出众,又或者是简历不够好,基本上没什么大厂的面试,目前是拿到了百度的offer以及一些中小公司的offer。但是在实习之前我其实一直学习的是Java后端,所以现在做的这一期分享谈不上成功之路,更多的是给想转客户端的同学一些参考,当然我说的也不一定对,读者看着取舍就行了哈。其实不建议盲目转客户端,这是因为客户端就业面要窄很多。前台可以是Android、ios、小程序、web甚至是鸿蒙,但后台需求量还是远大于前台,更何况在当今客户端的岗位会被前端的岗位蚕食掉一部分,就好比你去kfc你会专门为点餐而下载一个app吗,答案显然是否定的,当下人们都追求快节奏的生活;同时很多公司不愿意出成本招聘专门的原生开发工程师,技术栈会更偏向于以flutter为主的跨端开发;另一方面,银行国企对于客户端的需求更是少的可怜;客户端的学习成本完全不低于后端,从某种意义上来说,客户端毕业不进大厂即失业的说法也确实有道理,所以要真的要想明白了再转,往长远了考虑。那我自己之所以我选择在客户端逆行是因为确实在实习的时候接触到客户端让我产生了兴趣,比起后端抽象逻辑,对有人机交互的开发会更感兴趣。如果看到这里,读者还愿意看下去,相信也是真心想做客户端开发(本人水平有限,如果有什么错误,也欢迎指正)

客户端技术成长路线分享

  • 计算机网络、操作系统、计算机组成原理、数据结构与算法、数据库原理等计算机基础课:学习这些一方面是为了应付面试,就Android的面试,很多公司爱问http/https,tcp/udp,hashmap,linkedhashmap,用户态/核心态等八股;更重要的是,对Android开发及体系的全面理解,Android应用层建立在linux操作系统上,所以才有Java和C++分别去写应用层代码和系统层代码,而系统层代码会做一些系统调用,这就需要了解一些操作系统。
  • Java:由于笔者之前学习的是Java后端开发,所以Java基础还比较扎实,语言的学习一定是需要不断地实践思考的。在学习Java的同时也需要去搞懂Java中的多线程(包括各种锁和线程管理)、JVM、集合类实现原理,这部分一定需要去慢慢啃原理甚至源码。
  • kotlin:kt目前作为Google主推的Android开发语言,以其空安全、简便性和各种语法糖会更进一步受到Android开发工程师的喜爱,同时支持Java和kt相互调用。同样地,kt的学习也需要不断地去实践,写一些小demo,更重要的是去识别kt与Java之间的区别,以及kt所拥有的新特性(协程、扩展函数、更优秀的函数式编程、一些常用的关键字如by lazy、lateinit、apply、run、with、object等等)。总之,kt学习过程中一定是需要和Java去对比着来的。
  • Android基础 推荐Android第一行代码(尽量看最新的版本,用kt写的)
  1. Android四大组件(Activity、Service、ContentProvider、BroadcastReceiver)的使用;
  2. Activity的生命周期,Activity显式跳转和隐式跳转,各种操作的生命周期变化(包括横竖屏切换、Activity间跳转、Activity非正常销毁生命周期变化),Activity的LaunchMode;
  3. Android动画;
  4. Service两种启动方式及生命周期;
  5. 网络编程、SqlLite、SharedPreferences;
  6. Fragment管理,与Activity之间的通信;
  7. Intent、Bundle、Parcelable使用;
  8. 常见的控件和布局使用,ContraintLayout;
  9. 常见的UI框架如ViewPager、ViewPager2、ListView、GridView、RecyclerView的使用,ListView和RecyclerView的缓存机制,RecyclerView的LayoutManager自定义布局,ViewPager2原理。
  • Android进阶 推荐Android系统源代码情景分析

笔者认为学习Android Framework非常有必要,一方面对于整个Android体系的把握,另一方面做Android Framework可以往智能车载系统开发等方向走。笔者花了1-2个月的时间看了Android系统源代码情景分析,看完以后对我触动很大,也理解了Android体系工作过程,所以笔者还是非常推荐读者有时间的话都学习一下Framework的知识,只要你肯专研,其实也并没有想象中那么难。

  1. c++学习,学c++一方面是为了看懂系统源码,特别是binder基本上是用c++写的;另一方面NDK相关开发用的就是c++;
  2. Android Framework,包括handler(Android线程间通信、Android应用层心脏)、Binder(Android 进程间通信、Android系统层心脏)、AMS、PMS、WMS工作原理;
  3. Android 启动流程(包括系统开机流程、应用启动),Launcher工作原理,zygote工作原理;
  4. 自定义View,View绘制(ViewRootImpl中三大绘制整个过程),滑动冲突;
  5. Hook,动态代理;
  6. AIDL使用和原理(其实本质上还是用的Binder),Messager使用和原理;
  7. Android启动优化,Android应用整个启动流程和可以优化的点(1、业务,2、线程处理耗时任务,3、线程池管理,4、界面渲染,5、避免启动卡顿,6、闪屏),还有一些启动优化常用的工具如systrace;
  8. Android卡顿优化,卡顿产生的原因,卡顿的检测;
  9. Android内存优化,内存泄漏产生的原因和检测,内存溢出产生的原因和检测,LeakCanary原理;
  10. 构建原理(gradle、groovy),Dalvik虚拟机和dex文件;
  11. ANR原理和解决手段;
  12. 开源库使用和源码,okhttp、retrofit、livedata、databinding、rxjava、glide等,glide缓存机制和内存优化;
  13. MVC、MVP、MVVM使用;
  14. Android开发架构,组件化、模块化;
  15. 黑科技:插件化、热部署(笔者也还在学);
  • 混合开发

这一块笔者还没有深入研究,但是大方向还是比较明确的。

Flutter(dart语言学习、flutter原理);

WebView、RN(js)

  • 设计模式 推荐HeadFist设计模式

笔者过去看系统源码的时候总能碰上怎么也想不通也看不懂的一块代码,其实究其本质是因为其中的设计模式不够了解。同时,掌握设计模式可以写出一手惊为天人的代码,至少不会在code review的时候挨批 (别问我怎么知道)。安卓中常用的有单例、适配器、工厂、责任链、建造者、观察者、装饰器等。

关于未来

目前的话是签了百度,希望还是能学习到一些东西,同时也会不断地打磨自己的技术。后面的话可能还是会往大前端/framework开发的方向转,很多公司都采用大前端的组织架构,这也避免了未来跳槽会遇上岗位少的尴尬;另外framework开发的话可以去一些手机厂或智能车载公司做一些系统级开发。仅以此记录整个寒冬般的秋招,整个9-10月都感受到了如同西伯利亚的冷风,后面应该不会再面了。最后希望我的贴子对你有用,也希望能看到这里的你能拿到满意的offer。

小插曲

放一张9-10月的安排

#秋招##Android##Java##我的秋招记录##你的秋招进展怎么样了#
全部评论
同学,可以看看我们公司,招聘软件测试和开发! 深圳市国资全资子公司,研发型企业,纯国资背景,薪资对标深圳大厂薪资。(无笔试,直接面试),感兴趣同学看我的主页帖子,可以私信我。 https://www.nowcoder.com/discuss/1085334
1 回复 分享
发布于 2022-11-10 10:03 广东
说的很好,尤其是客户端hc定位这块
1 回复 分享
发布于 02-01 21:06 甘肃
感谢你的分享
点赞 回复 分享
发布于 2022-11-10 07:45 陕西
感谢分享,当时投递太晚了,导致只拿了同花顺的客户端offer,心有不甘又没得选
点赞 回复 分享
发布于 2022-11-14 08:37 山东
m
点赞 回复 分享
发布于 2022-11-16 15:41 湖南
好厉害👍🏻
点赞 回复 分享
发布于 2022-12-02 17:37 重庆
强啊
点赞 回复 分享
发布于 2023-01-05 11:17 天津
好厉害,感谢分享从进入大学就开始自学安卓,不知道暑假要不要实现一波,但是四大件还没学
点赞 回复 分享
发布于 2023-03-01 20:35 广东
老哥 你这个日历是什么软件
点赞 回复 分享
发布于 2023-05-08 15:27 浙江
ramework这块 是怎么学的?
点赞 回复 分享
发布于 05-30 23:09 河南

相关推荐

#牛客创作赏金赛#  解决数据管理问题休息时间搞的• 建立数据共享机制与平台:通过构建统一的数据共享平台,打破数据地方保护主义,制定数据共享规范与流程,明确各部门数据提供与获取的权限和义务,促进数据在组织内的流通,例如建立企业级数据仓库,整合各方数据资源。• 统一指标口径:成立数据治理委员会或专项小组,负责梳理和规范指标体系。对所有指标进行明确定义,消除同名不同义与同义不同名的情况,并发布指标字典供全公司使用,确保所有人员对指标理解一致。• 整合 BI 工具或选定标准工具:评估现有 BI 工具的功能与使用情况,根据企业需求选定一种或几种作为标准工具,并进行整合与优化。建立工具使用培训体系,提高员工对标准工具的熟练度与应用能力,确保数据处理与分析的一致性。• 明确报表边界与分工:清晰界定业务系统报表与 BI 报表的功能边界,业务系统报表侧重于日常业务运营数据的记录与简单呈现,BI 报表则聚焦于多维度数据整合、分析与决策支持。制定报表开发与维护的分工流程,避免重复工作与数据冲突。• 简化与优化权限管理体系:基于角色和职责对数据访问权限进行重新设计,采用分级分类管理模式,如普通员工、部门主管、高层领导等不同角色对应不同的数据访问级别。利用权限管理工具实现自动化的权限分配与监控,定期审查权限设置,确保其合理性与安全性。• 优化数据需求响应流程:建立数据需求管理平台,所有部门的数据需求统一提交到平台上,进行分类、分级与优先级排序。优化数据处理流程,采用敏捷数据开发方法,提高数据提取、转换与加载(ETL)的效率,对于紧急需求开辟绿色通道,确保重要数据需求能够及时得到响应。• 构建指标关系体系:组织数据分析师与业务专家共同梳理指标间的逻辑关系,绘制指标关系树或数据地图,明确各指标的层次结构与关联关系。建立指标元数据管理系统,对指标的定义、计算方法、数据来源以及与其他指标的关系进行详细记录与管理,方便查询与分析。• 完善指标全生命周期管理平台:开发或引入专门的指标管理平台,涵盖指标从规划、定义、开发、测试、部署到监控、优化的全生命周期管理功能。在平台上建立指标版本控制机制,确保不同时期指标的一致性与可追溯性,同时通过自动化流程与提醒功能,保障指标的及时更新与维护。• 强化指标质量审计机制:制定指标质量评估标准,包括数据准确性、完整性、一致性、时效性等方面的具体要求与量化指标。建立数据质量监控工具与流程,定期对指标数据进行审计与评估,发现质量问题及时追溯数据源头并进行整改,同时记录数据质量问题日志,以便后续分析与优化。• 编写指标故事线与应用指南:由数据团队与业务团队合作,针对关键业务流程与决策场景编写指标故事线,将相关指标串联起来形成有逻辑、有情节的数据分析框架。为每个指标编写应用指南,详细说明指标的含义、用途、计算方法以及在实际业务中的应用案例与注意事项,通过培训与宣传推广,提高业务人员对指标的理解与应用能力。
点赞 评论 收藏
分享
26 89 评论
分享
牛客网
牛客企业服务