一个低学历程序员开发逆袭大厂的心路历程,看完真心给跪了

一个低学历程序员开发逆袭大厂的心路历程,看完真心给跪了
文章图片

前言 假如现在失业,你觉得自己多久可以找到新工作?

台湾省著名导演李安用了六年
史蒂夫·乔布斯用了三年
爱因斯坦用了1年
我的一个程序员哥们小马,从突然被裁到高薪入职新公司只用了短短5天
我惊叹于他的速度,他却指了指他的黑眼圈说:“没有永远的金饭碗,在大厂也一样会被淘汰,只有持续学习,不断精进,裁员就追不上你!”
原来,他在刚收到公司裁员风声的时候就开始投简历,他不但精心修改过自己的简历,还请教大佬打磨简历,几乎所有投递的岗位都一路绿灯,完全没有被卡,拿到面试邀请的概率超过90%,也因为钻研过大厂面试题和自身基础比较扎实,面试官问的问题全都能对答如流,胸有成竹的样子让面试官很是惊艳,最终无缝衔接,不但顺利找到下家,工资甚至还翻了翻,实在是让人羡慕。
最近跟小马吃了顿饭,聊了两个小时,获得许可后,把他面试的经验分享出来,权当抛砖引玉,希望对大家有帮忙。
下面分享一下各个公司的面试题目 爱奇艺
Android消息机制
Android View绘制流程,当一个TextView的实例调用setText()方法后执行了什么
Android dalvik虚拟机和Art虚拟机的优化升级点
Android屏幕渲染机制
热修复的原理,你都了解过哪几种热修复框架
OkHttp的原理
Android 线程池的实现原理
JavaGC机制
HashMap的实现机制,怎么样HashMap线程安全
可重入锁的实现,公平锁非公平锁都是什么定义?
都用过那些常用的数据结构,说说对树的了解?
Activity启动模式,allowReparent的特点和栈亲和性
WebView优化
有没有Jni使用经验
有使用过RxJava吗?
说说你对设计模式的理解,开发过程中主要用到了哪些设计模式?
快排写一下,动态规划了解吗?
小米
冒泡排序的链表实现
写个快排
写个单例模式
Activity启动模式
异常生命周期
从点击应用图标到进入应用,Android系统都做了哪些工作,期间涉及到的进程切换有哪些?
说说你了解的IPC方法
说说Binder的大体实现
怎么控制另外一个进程的View显示
广播中怎么进行网络请求
说说Android中线程池的实现
HashMap如果Hash冲突了怎么解决?
双线程通过线程同步的方式打印12121212…….
腾讯
HTTPS是怎么实现的?
Android事件传递流程和OnTouchListener的关系
Activity启动模式
Android线程池实现原理
双指缩放拖动大图
客户端网络安全实现
Webview优化
Android应用保活
RemoteViews实现和使用场景
RecyclerView绘制步骤和复用机制
Binder的大体设计模式
Activity遵循什么设计模式
EventBus源码解析,遵循什么设计模式
Handler为什么会发生内存泄漏
Java内存模块分区和GC机制,GC算法有哪些
Finalize机制
强引用 弱引用 软引用 虚引用的区别和使用场景
LeakCanary的使用和实现原理
介绍一下你在开发过程中使用到的设计模式
快排
对服务器众多错误码的处理(错误码有好几万个)
阿里
Android消息机制
Android事件传递流程
Android View绘制流程
Activity启动模式
Android IPC机制
Android线程池设计原理
EventBus源码和设计模式
Android应用保活
Android UI优化
Android启动优化
快排 堆排 单例
进程线程在操作系统中的实现
HTTPS的组成是什么?
ClassLoader的双亲委托
Android中的ClassLoader
有过Jni使用经验吗?
有过跨平台开发经验吗?
今日头条
视频加密
Android Native Crash
视频组成
播放器原理
共同问到的
为什么离职
开发过程中遇到最深刻的BUG是什么
当你的开发任务很紧张,你怎么去做代码优化的?
怎么和你的同事沟通
你对某某某互联网发生事情的看法?(直播答题等等)
一个低学历程序员开发逆袭大厂的心路历程,看完真心给跪了
文章图片

Android开发到底需要学习哪些?
对于现在的Android及移动互联网来说,我们需要掌握的技术,我做了一个清单:
  • 泛型原理
  • 反射原理
  • Java虚拟机原理
  • 线程池原理
  • 注解原理
  • 注解原理序列化
  • Activity知识体系(Activity的生命周期、Activity的任务栈、Activity的启动模式、View源码、Fragment内核相关、service原理等)
  • 代码框架结构优化(数据结构、排序算法、设计模式)
  • APP性能优化(用户体验优化、适配、代码调优)
  • 热修复
  • 热升级
  • Hook技术
  • IOC架构设计
  • NDK(c编程、C++、JNI、LINUX)
  • 如何提高开发效率?
  • MVC、MVP、MVVM
  • 微信小程序
  • Hybrid
  • Flutter
解析知识点,为什么要学 1.数据结构和算法
数据结构和算法其实是分开的东西,我们需要先掌握各种数据结构,再去加深算法,数据结构和算法其实也属于基础,但是它现在越来越重要,所以我就单独拿出来说了。
数据结构怎么深入同样我也推荐大家去看清华或者浙大《数据结构》公开课,特别是清华的,值得反复研究。
至于算法,首先要做的就是动手,LeetCode上直接干!
【一个低学历程序员开发逆袭大厂的心路历程,看完真心给跪了】第二阶段就是要总结各种算法的思想和套路,像递归、动态规划等这些算法都是有套路的,在LeetCode上也有按数据结构和算法分类的筛选,大家可以针对性练习和总结。
当然,对于一个Android程序员,能做到每天在LeetCode上刷题就非常不错了,所以一定要坚持,等你坚持到一定的时间,你会发现你越来越游刃有余,我从18年底开始在LeetCode上刷题,目前已经刷了200多道了,小米的面试也非常注重算法,还要能写。
而且对一些特别注重算法的公司,算法这块的考核非常严苛,对,就是严苛,而不是严格。
2.设计模式
设计模式中包括了设计原则,其实对于Android开发人员来说,设计模式就那23种,知道并了解这些设计模式是第一个阶段,仅仅是到这个阶段是不够的,一般面试也不会问你某个设计模式的概念,而会让你具体的说说你对某一种设计模式的深入了解和使用,它的优缺点,所以,第二阶段就是要运用它们,其次要和Android源码中运用到设计模式地方进行结合学习。
例如建造者模式,Andoird中的Dialog创建就使用到了,还有像单例模式、适配器模式、观察者模式等等都是在Android中非常常用的设计模式,也是在面试中出现频率很高的。
3.语言学习开发语言
Android应用是由Java语音进行开发的,SDK也是由Java语言编写的,所以我们要学习Java语言。另外,虽然说Kotlin语言也得到Android官方的热推,但是Kotlin也是编译成了Java语言在运行的。对于Android开发来说。
只要SDK没有用Kotlin重写,那么Java语言都是需要学习的。而且Android apk的后台服务器程序大概率是Java语言构建,所以学习Java是一个必然。
那么Java中那些东西是我们Android中比较相关的稍微比较难的Java基础几乎是一个门槛,像泛型丶多线程丶反射丶JVM丶JavaIO丶注解丶序列化等等。
4.APP开发框架知识
这块知识是现今使用者最多的,我们称之为Android2013-2016nian 的技术。但是,即使是这样的技术,很多开发者也往往因为网上很多copy代码的习惯而导致对这块的使用的代码熟悉而陌,熟悉的是天天和它们打交道天天在复制,陌生的是天天打交道却没有深入研究过他们,要学习源码,模仿源码,然后在hook源码,这样才能说懂这块的知识。
5.App性能优化
一个app的西能好不好我们需要从两个层面分析:
1、从写代码的时候就注意,让自己的代码是高性能高可用的代码,这个过程是书写高性能代码 2、对已经成型的代码通过工具检测代码问题,通过检查到问题来指导我们进行代码的删改这个过程被称为调优
那如何写出高性能的代码呢?
需要我们具备深厚的代码功底,这就是代码的基础,如:数据结构达到可以根据应用场景写出符合当前场景的特殊结构,比如google针对Android平台特征研发了SparseArray代替HashMap.另外,对常用的算法也有自己独到的见解
6.NDK模块开发
音视频、高清大图片、人工智能、抖音直播等这些年与用户紧密相关,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是Windows系统,而现在是移动系统了。而移动系统中Android比例又是最大的。所以NDK可以说是必备要学习的,除此之外,音视频的编解码技术流媒体协议,ffmepeg,c,c++,JNI,linux都是音视频开发必备技能。而且OpenCV \OpenGI这些又是图像处理必备。
7.如何提高开发效率?
工欲善其事必先利其器,如何提高开发效率,很多开发者在开发中由于gradle不会用导致加载代码非常耗时,这些都是你的工作成本的浪费。还有就是git的使用也可以帮助我们管理好我们的代码,这个非常关键,因为这个工具可以让我们修改的代码不会因为错误操作而导致丢失。另外,对移动开发者我们至少需要知道如何抓取网络包。其中,最常用的stetho就是一个非常好用的可以抓取网络包的工具。
8.混合开发
混合开发的flutter现在已经逐渐成了主流的混合开发框架,另外由于阿里系的强大存在,导致阿里系的公司都在用Weex混合架构,这些都是一个Android工程师开拓视野,走向未来必不可少的基本技能的。
写给看到最后同学的话 这些算是我作为过来人对于应届毕业生和刚工作不久的同学的一些小小建议吧。
(1)一定要紧跟技术前进的脚步,尤其是大数据相关的技术,在技术更迭的时候一定要学习熟悉新技术,看源码,哪怕自己在工作中用不到也一定要学。因为这是你下一份工作的敲门砖。
(2)不要给自己设置舒适区,这个就是说,一个公司待久了不要懒惰,不能荒废自己,始终要保持清醒的头脑和进取心,不断学习,不断完善自己的技术,架构设计能力,项目管理能力,交付能力等。
一定要及时从项目中总结经验和不足,最好落实到日记本中,最后通过不断思考,形成自己的做事方法论。
(3)对自己的职业生涯要有一个规划,以后要做哪一块一定要有自己的想法,确定了就要从这个方向完善自己,多学多练。
没有人会专一做某一块,但是自己一定要想好哪一块是自己以后要走的方向,那么这一个方向确定了就要深入的学习这一块的知识,多看源码,多做练习,如果接触到具体项目,要在项目中沉淀自己,最后形成自己的知识体系。
(4)做事情要有担当,不要根据OKR给自己设置界限,有能力有空闲多做一定要多做,这也是别人认可你的最佳途径之一。互联网圈子很小,大家认可你,以后去大厂,换个好工作,也许就更容易。
Android开发如何提升自身技能?
Android学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。
现在竞争这么激烈,只有通过不断学习,提高自己,才能保持竞争力。
对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
对于一些不知道学习什么,没有一个系统路线的程序员,这里给大家提供一个大概的思路:
架构师筑基必备技能:深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO
Android高级UI与FrameWork源码:高级UI晋升+Framework内核解析+Android组件内核+数据持久化
360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化
解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发
微信小程序:小程序介绍+UI开发+API操作+微信对接
Hybrid 开发与Flutter:Html5项目实战+Flutter进阶
一个低学历程序员开发逆袭大厂的心路历程,看完真心给跪了
文章图片

知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用。
帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份资料中有所一些收获。
1.2021大厂面试高频知识点
  • 图片
  • 网络和安全机制
  • 数据库
  • 插件化、模块化、组件化、热修复、增量更新、Gradle
  • 架构设计和设计模式
  • 性能优化
  • Android Framework
  • Android优秀三方库源码
2.Jetpack架构组件从入门到精通
  • Android Jetpack - Navigation
  • Android Jetpack - Data Binding
  • Android Jetpack - ViewModel & LiveData
  • Android Jetpack - Room
  • Android Jetpack - Paging
  • Android Jetpack - WorkManger
  • Android Jetpack架构组件之Lifecycle
  • Android Jetpack Compose 最全上手指南
3.Framework精编内核解析
主要内容包含:
  • 深入解析Binder
  • 深入解析Handler
  • Dalvik VM 进程系统
  • 深入解析 WMS
  • PackagerManagerService
4.Kotlin强化实战(附Demo)
  • 第一章 Kotlin入门教程
  • 第二章 Kotlin 实战避坑指南
  • 第三章 项目实战《Kotlin Jetpack 实战》
    • 从一个膜拜大神的 Demo 开始
    • Kotlin 写 Gradle 脚本是一种什么体验?
    • Kotlin 编程的三重境界
    • Kotlin 高阶函数
    • Kotlin 泛型
    • Kotlin 扩展
    • Kotlin 委托
    • 协程“不为人知”的调试技巧
    • 图解协程:suspend
5.Android设计思想解读开源框架
  • 热修复
  • 插件化
  • 组件化框架设计
  • 图片加载框架
  • 网络请求框架
  • RXJava 响应式编程框架设计
  • IOC 架构设计
  • Android架构组件Jetpack
6.NDK模块开发
  • NDK 模块开发
  • JNI 模块
  • Native 开发工具
  • Linux 编程
  • 底层图片处理
  • 音视频开发
  • 机器学习
7.Android源码解析
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
以上这些内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。或者点击 【这里】 查看获取方式。

    推荐阅读