前言
前不久写过一篇博客,里面介绍了一位朋友由二本渣渣毕业在外包公司工作两年多后,跳槽逆袭成功,现在进入了OPPO公司的故事。
后面很多朋友私信我,表示想要这位朋友的面经。
其实我觉得,大家对面经完全没必要这么执着,因为面试官的提问都是根据你的学历、工作经历、意向岗位和简历信息来的,而这些,大家都是不一样的,所以,面经里面除了部分技术题可以参考一下,检测自己的知识掌握程度,面试过程让大家稍微熟悉一下,其他的借鉴意义不大。
这里特别提醒那些平时不努力,喜欢临时抱佛脚的同学:不要指望多看些面经就可以应对面试官的提问,你要知道,这是面试,不是学校的考试。面试是择优录取,不是过分数线就行。
你花几天就能记下学会的东西,别人也能,甚至比你做得更好,这样做是没有优势的。只有长久的努力学习和沉淀才是别人学不来的,真正属于你自己的东西,也只有这个,才是真正能让你制胜的法宝。在这里希望大家马到功成,拿到心仪的offer。
1-2年走的弯路
大学期间
实践得晚:其实在大学我就通过导师接触了Android,但是在当时选择多的时候Java,c++,这些让我硬是工作飘了一年我才才正式从事Android开发。从头学起的这过程中看了一些关于 android方面的书籍,多数时候也只是停留在纸面上,在配置开发环填和开发过程中遇到一些问题导致自己不能坚持下来,想想那时真傻,有啥问题都不知道用谷歌搜搜,只知道按照书上的来,就算用百度搜一下也好啊,实践得晚最大的弊端是之前花时间看 android方面的资料都算白费了,因为这中间一直是断断续续,看看远没有实践来得印象深刻,没有真正实践的开发过app,很多东西基本都忘记了,浪费了不该浪费的时间。
该学哪些知识
- 掌握Android 四大组件知识,深入了解相关生命周期,对于Application、Fragment、Intent常见的开发知识也必须掌握。
- 掌握Android 基本布局和控件的属性和使用,常用布局有LinearLayout、RelativeLayout、>ConstraintLayout等,控件有- TextView、ImageView、RecyclerView、ScrollView等。
- 对Android的资源访问使用有基本了解,了解Android针对不同国家、语言、屏幕、API的适配原理。
- 掌握android系统服务和工具类的使用,对网络访问和数据库操作有基本认知。
- 熟练掌握研发工具,如IDE、模拟器、网络代理、日志等。
如何避免
在大学期间如果有项目经验,无疑对你后面找工作是有优势的。所以我建议在大一开始就一个提前规划好,自己的发展方向,Android,Java,c++。有了目标,大学就朝着这个方向去学习,多接触外面的人和事不要故步自封,在学校就是宅,打游戏。这些后来积累下来的人脉,都是可以帮助到你的,这个就是圈子!
2-4年走的弯路
在工作中
基础学科没学好,知识不牢固: android是多个基础学科结合的复合型产物(高级语言java、操作系统编译原理、算法与数据结构、设计模式等等),由于是从win32程序出身的,后来做项目直接学 android,java基础这些只是看了几本书,导致踩了很多没有必要踩的坑,比如在 finalize方法中关闭资源、没有关闭文件流等等,没有好基础学科最大的弊端是踩了很多没有必要踩的坑。
该学哪些知识
- 熟悉SOLID基础设计原则,掌握23种设计模式。
- 对于研发语言特性java/kotlin有深入理解,如反射、动态代理、apt等。
- 对Android架构有基础了解,对apk结构和打包原理有深入了解。
- 对于Android各个版本特性有基本了解,如MD设计、权限管理、doze模式等。
- 熟练掌握各种研发调试工具,如git、gradle、mat、layout inspector等。
- 掌握Handler\AsyncTask原理,熟悉多线程开发。
- 对绘页面制原理有初步理解,能够实现一个复杂自定义控件。
- 能够熟练掌握开源库的使用,如图片库(Glide\Fresco)、网络库(Volley\okhttp\Retrofit)、工具* >>*
- (Dagger\RxJava\EventBus)等,能够对这些常用的库进行二次封装。
- 熟悉应用常见的优化方法,避免编写内存泄漏的代码。
如何避免
既然已经存在了这个问题,基础不牢靠那就补基础吗?基础这块视频都讲的比较全面系统,觉得自己基础不过关的可以去看看他的视频!还有有资料,比没资料好,系统的资料比有资料好。资料收集,导图的制作也是加强我们对知识技能熟悉的过程!对了,有自己博客,GitHub也是面试时的加分项哦!
4-6年走的弯路
跳槽时/转行
跳槽时一定要注意,离开这家公司你会失去一些什么,到下一个公司你能得到些什么,在这段时间里您不能承受之后的花销,我就在家里蹲了几个月,无奈~别只看薪资,这只是一部分因为在boos大多数都是夸大的!
转行记得分析行业前景,以及自己现在掌握的技能是否能让自己能够短时间内,换到这个行业
- java
- Android
- c++
上面都是阿里的,很明显c++待遇最好,因为他要求的知识技能也高,所以希望大家注意一定记得贴合,符合自身的一些情况,再选跳槽行业!
该学哪些知识
- 掌握java高级特性,如JUC、线程池、NIO\BIO等;掌握jvm虚拟机知识,如内存模型、GC原理、类加载机制、线程模型等。
- 对Android运行环境有深入理解,理解Android沙盒机制,掌握AIDL原理及Binder通信原理,了解app和activity启动原理。
- 掌握热修复原理,各大厂商方案的优缺点。
- 对于Android事件分发有深入理解,重点掌握触摸事件机制。
- 深入理解Android绘制原理,理解VSYNC和surface机制和窗口原理。
- 深入理解Android动画原理,包括补间动画和属性动画。
- 对于Android安全机制有基本认知,理解Android安全原理。
- 深入理解端上设计范式思想,如mvc\mvp\mvvm\clean-arch等。
- 理解架构演进,有良好的分层和拆分思路,掌握模块化、插件化、动态部署等。
- 对新技术敏感(,理解掌握下一代架构dynamic feature等。
总结
现在新技术层出不穷,如果每次出新的技术,我们都深入的研究的话,很容易分散精力。新的技术可能很久之后我们才会在工作中用得上,当学的新技术无法学以致用,很容易被我们遗忘,到最后真的需要使用的时候,又要从头来过(虽然上手会更快)。
我觉得身为技术人,针对新技术应该是持拥抱态度的,入了这一行你就应该知道这是一个活到老学到老的行业,所以面对新技术,不要抵触,拥抱变化就好了。
Flutter 明显是一种全新的技术,而对于这个新技术在发布之初,花一个月的时间学习它,成本确实过高。但是周末花一天时间体验一下它的开发流程,了解一下它的优缺点、能干什么或者不能干什么。这个时间,并不是我们不能接受的。
如果有时间,其实通读一遍 Flutter 的文档,是最全面的一次对 Flutter 的了解过程。但是如果我们只有 8 小时的时间,我希望能关注一些最值得关注的点。
附
[Android学习PDF+架构视频+面试文档+源码笔记](https://bbs.csdn.net/topics/61815660
点击领取完整开源项目《安卓学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
(跨平台开发(Flutter)、java基础与原理,自定义view、NDK、架构设计、性能优化、完整商业项目开发等)
ter**)、java基础与原理,自定义view、NDK、架构设计、性能优化、完整商业项目开发等)
[外链图片转存中…(img-8QG8T9Ep-1709810292673)]