工资8000以下的Android程序员注意了!接下来要准备面对残酷现实了……

最近在知乎看到一个测试,特扎心:

以下三种情况,哪个最让你绝望?

❶ 每月工资去掉开销还存不到3千;

❷ 家人突然急病住院,医药费10万;

❸ 同班的家长都在争先恐后给孩子报名各种辅导班、兴趣班,但一个班就2、3万,你报还是不报?

在知乎本次测试的评论区里,讨论的热火朝天,其中有位叫盛男的网友说:任何一种情况都足以击倒我。

行业内流传,程序员年轻时,加班是家常便饭,为了公司付出了青春和年华,到了35岁,惨遭公司优化的非常多,35岁似乎是一个魔咒,这个魔咒,我们能打破么?对于这个困局,大部分程序员选择的破局方法,主要集中在以下三种:

一、走技术路线,成为技术专家!

这条路线,需要持续学习!每时每刻都在发生技术的升级和变革,只有持续不断的学习,才能对老的架构有新的认识,对于老的问题产生新的解法。同时需要持续思考。现在层出不穷的技术,比如组件化、插件化、Kotlin、jetpack、Hybrid等等,如果不敢去尝试,不敢接触新的技术,就会落后于人呀。

成为一个普通学历,但技术牛,薪水高的人不香吗?

我自己做Android开发已经是第5个年头了,在毕业后的第二年,有幸加入到字节跳动这个大家庭。在字节的4年,见证了太多人的来来去去,印象很深一个同事,跳槽阿里薪资直接double,但也看到很多人镀着“大厂”的金四处碰壁,终究还是倒在了技术上!

我自己或许也算是个成功的例子,在4年的时间里从1-1做到了2-2,当然,这背后的“辛酸泪”就留到日后再说。总的来说,归功于自己不断地学习,复盘总结,提升技术!以下分享一下我4年来具体的学习路线及笔记文档,希望能帮助到有心提升技术的朋友!

一、架构师筑基必备技能

安卓手机的开发语言是Java(Kotlin也是对java的封装),Android Framework 也是默认使用Java 语言,熟练掌握Java 语言是Android 开发者的必备技能。

本篇包含知识点:

1.深入 Java 泛型
2.注解深入浅出
3.并发编程
4.数据传输与序列化
5.Java 虚拟机原理
6.反射与类加载
7.高效 IO

二、高级UI

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。

不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

三、Framework精编内核解析

众所周知,Android是一个基于Linux实现的操作系统。但对于Linux内核来说,Android也仅仅只是一个运行在内核之上的应用程序,与其他运行在内核之上的应用程序没有任何区别。

所以Android也需要运行环境,需要Linux内核在启动完成后加载Android Framework运行所需要的资源。当Framework完成初始化后才能继续启动相应的APK应用程序。

主要内容包含:

  • 深入解析Binder
  • 深入解析Handler
  • Dalvik VM 进程系统
  • 深入解析 WMS
  • PackagerManagerService

四、360°全方面性能调优

在不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。

另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。

主要内容:

  • 1.设计思想与代码质量优化

  • 2.程序性能优化
    启动速度与执行效率优化
    布局检测与优化
    内存优化
    耗电优化
    网络传输与数据储存优化
    APK大小优化

  • 3.开发效率优化
    分布式版本控制系统Git
    自动化构建系统Gradle

  • 4.项目实战
    启动速度
    流畅度
    抖音在APK包大小资源优化的实践
    优酷响应式布局技术全解析
    网络优化
    手机淘宝双十一性能优化项目揭秘
    高德APP全链路源码依赖分析
    彻底干掉OOM的实战经验分享
    微信Android终端内存优化实践

五、Android第三方框架

随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,还有应用之间的互相调用等等问题,插件化技术应用而生。

当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。

本篇内容要点(1042页)

  • 热修复设计
  • 插件化
  • 组件化框架设计
  • 图片加载框架
  • 网络请求框架
  • RXJava 响应式编程框架设计
  • IOC 架构设计
  • Android架构组件Jetpack

六、NDK模块开发

NDK是原生开发工具包,这套工具允许Android使用C/C++代码,并提供了众多的平台库。

主要内容包含:

  • NDK 模块开发
  • JNI 模块
  • Native 开发工具
  • Linux 编程
  • 底层图片处理
  • 音视频开发
  • 机器学习

七、Flutter学习进阶

2019 年无疑是 Flutter 技术如火如荼发展的一年。

每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各种各样不同的挑战。

本篇知识要点:
1、Flutter跨平台开发概述
2、Windows中Flutter开发环境搭建
3、编写你的第一个Flutter APP
4、Flutter Dart语言系统入门

Flutter学习

八、Android相关源码解读

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

Android相关源码解读

Android相关源码解读部分内容

有需要的朋友直接点击此处免费获取完整文档。

二、走管理路线,成为团队管理!

这条路线,变成团队负责人之后,你的焦点是在人而不光是代码,还有思想,创新,产品等交付物。没有人,就没有代码,没有产品。需要着眼于建立一支优秀的团队,优秀的团队才能做出伟大的产品。

在这里,分享一份一线大厂BATJ,TMD(头条、美团、滴滴)内部面试题合集!不容错过!

百度 Android 面试真题解析

Android 面试题

  • 跨进程通信的几种方式
  • wait 和 sleep 的区别
  • String,StringBuffer,StringBuilder 的区别
  • View 和 SurfaceView 的区别
  • View 的绘制原理
  • 简述 JNI
  • 简述 TCP,UDP,Socket
  • 音视频相关类
  • 进程和线程的区别
  • 内存泄露如何查看和解决
  • View 的分发机制,滑动冲突
  • RecyclerView 和 ListView 的区别

Java 面试题

  • HashMap
  • ArrayList
  • LinkedList
  • Hashset 源码分析
  • 内存模型
  • 垃圾回收算法(JVM)
  • 垃圾回收机制和调用 System.gc()的区别?
  • 类加载过程
  • 反射
  • 多线程和线程池
  • HTTP、HTTPS、TCP/IP、Socket 通信、三次握手四次挥手 过程
  • 设计模式(六大基本原则、项目中常用的设计模式、手写 单例等)

kotlin

  • ==、===和 equal 的区别?
  • var 和 val 的区别?
  • Kotlin 中默认参数的作用以及原理?
  • Kotlin 中顶层函数的原理
  • 中缀函数是什么?注意点?
  • 解构函数的本质?
  • 扩展函数的本质?
  • 扩展函数和成员函数的区别?
  • Kotlin 中常用的类的修饰符有哪些?
  • Kotlin 中可见性修饰符有哪些?
  • Kotlin 中的内部类和 Java 中的内部类有什么不同?
  • Kotlin 属性代理背后原理?

网络

  • HTTP 是哪一层的协议,常见的 HTTP 状态码有哪些,分别代表什么意思?
  • HTTP 1.1 和 HTTP 2 有什么区别?
  • HTTP 和 HTTPS 有什么区别?
  • SSL/TLS 的握手过程?
  • TCP 的三次握手过程,为什么需要三次,而不是两次或者四次?
  • TCP 的四次挥手过程?
  • TCP 和 UDP 有什么区别?

腾讯 Android 面试真题解析

Java 基础部分

  • HashMap 和 HashTable 以及 CurrentHashMap 的区别
  • synchronized 和 volatile 、ReentrantLock 、CAS 的 区别
  • JVM 类加载机制、垃圾回收算法对比、Java 虚拟机结 构等
  • Java 的四大引用
  • Java 的泛型,<? super T> 和 <? extends T> 的区别
  • Java 线程有哪些状态,有哪些锁,各种锁的区别
  • final 、finally、finalize 区别
  • 接口和抽象类的区别
  • sleep 、wait、yield 的区别,wait 的线程如何唤醒它?
  • java 中==和 equals 和 hashCode 的区别
  • String、StringBuffer、StringBuilder 区别

Jvm部分

  • Jvm 内存区域是如何划分的?
  • Jvm 内存模型是怎么样的?
  • String s1 = "abc"和 String s2 = new String(“abc”)的区别, 生成对象的情况
  • 如何判断对象可回收?
  • GC 的常用算法?
  • Minar GC 和 Full GC 的区别?
  • 说一下四种引用以及他们的区别?
  • 类加载的过程?
    类加载的机制,以及为什么要这样设计?

计算机网络部分

  • TCP 与 UDP 的区别
  • 三次握手、四次挥手。为啥是三次不是两次?
  • HTTPS 和 HTTP 的区别。HTTP 2.0,3.0?
  • 浏览器输入一个 URL,按下回车网络传输的流程?
  • TCP 建立连接后,发包频率是怎样的?
  • OKHttp
  • 如何验证证书的合法性?
  • https 中哪里用了对称加密,哪里用了非对称加密,对加 密法(如 RSA)等是否有了解?
  • client 如何确定自己发送的消息被 server 收到?
  • 谈谈你对 WebSocket 的理解
  • WebSocket 与 Socket 的区别
  • 谈谈你对安卓签名的理解
  • 请解释安卓为啥要加签名机制?

Android 面试题

  • 什么是 ANR 如何避免它?
  • Activity 和 Fragment 生命周期有哪些?
  • 横竖屏切换时候 Activity 的生命周期
  • AsyncTask 的缺陷和问题,说说他的原理
  • onSaveInstanceState() 与 onRestoreIntanceState()
  • android 中进程的优先级?
  • Bunder 传递对象为什么需要序列化?Serialzable 和 Parcelable 的区别?
  • 动画
  • Context 相关
  • Android 各版本新特性
  • Json
  • Jar 和 Aar 的区别
  • Android 为每个应用程序分配的内存大小是多少
  • Merge、ViewStub 的作用
  • ContentProvider 使用方法
  • Android 怎么加速启动 Activity?

Android Framework 相关

  • Android 系统架构
  • View 的事件分发机制?滑动冲突怎么解决?
  • View 的绘制流程?
  • 跨进程通信
  • Android 系统启动流程是什么?
  • 启动一个程序,可以主界面点击图标进入,也可以从一 个程序中
  • AMS 家族重要术语解释
  • App 启动流程
  • ActivityThread 工作原理
  • 说下四大组件的启动过程,四大组件的启动与销毁的方 式
  • AMS 是如何管理 Activity 的?
  • 理解 Window 和 WindowManager
  • WMS 是如何管理 Window 的?
  • 大体说清一个应用程序安装到手机上时发生了什么?

性能优化专题

  • 你们做了哪些稳定性方面的优化?
  • 性能稳定性是怎么做的?
  • 业务稳定性如何保障?
  • 如果发生了异常情况,怎么快速止损?
  • 启动优化是怎么做的?
  • 启动优化有哪些容易忽略的注意点?
  • 你们内存优化项目的过程是怎么做的?
  • 你做了内存优化最大的感受是什么?
  • 你在做布局优化的过程中用到了哪些工具?
  • 布局为什么会导致卡顿,你又是如何优化的?
  • 做完布局优化有哪些成果产出?

算法合集

  • 排序
  • 二叉树
  • 链表
  • 栈 / 队列
  • 二分
  • 哈希表
  • 堆 / 优先队列
  • 二叉搜索树
  • 数组 / 双指针
  • 贪心
  • 字符串处理

kotlin 专题

  • 基础
  • 函数
  • 类、对象和接口
  • lambda
  • 类型系统
  • 协程

flutter 专题

  • Dart 当中的 「…」表示什么意思?
  • Dart 的作用域
  • Dart 是不是单线程模型?是如何运行的?
  • Dart 是如何实现多任务并行的?
  • 说一下 Dart 异步编程中的 Future 关键字?
  • 说一下 Dart 异步编程中的 Stream 数据流?
  • 请简单介绍下 Flutter 框架,以及它的优缺点?
  • 介绍下 Flutter 的理念架构
  • 介绍下 FFlutter 的 FrameWork 层和 Engine 层,以及它们 的作用
  • 介绍下 Widget、State、Context 概念
  • StatefulWidget 的生命周期

JNI 模块专题

  • 静态注册
  • 动态注册
  • 数据类型映射
  • 对象数组引用类型
  • jni 函数默认参数
  • jni 是如何访问 java 中的方法和字段
  • jni 访问 java 中的静态方法
  • jni 访问 java 中的字段
  • jni 访问 Java 中的静态字段
  • jni 中更新 java 的字段内容
  • jni 中创建 java 类实例
  • jni 中的异常
  • 常用函数封装

(由于文章篇幅有限,仅能展示部分面试题,面试题的详细解析我都整理成了几个文档,有需要的可以点这里直接领取,无偿分享给大家,算是一个感恩回馈吧。)

三、在其他赛道发力

相信,前段时间今日头条28岁前端程序员郭宇宣布退休的事件,大家都看过,他大学非计算机专业自学程序,面腾讯,挂了,入阿里,稳了,开启行业生涯,后跳槽糗事百科被字节跳动招安,字节跳动6年爬到资深技术专家,手握字节跳动0.5-4个亿RMB的期权价值,长期大量买入并持有美团和拼多多等其他公司的股票,28岁财务自由,宣布退休!彻底走向人生巅峰! 除了关注技术之外,投资也做的很棒!

猜你喜欢

转载自blog.csdn.net/zhireshini233/article/details/114143237