一位网友退职场论坛上发了一个帖子,他说本人往年三十七岁了,是一名 Android 老兵,因为和上家公司的领导闹矛盾有了嫌隙,一气之下就裸辞了,现在曾经辞职四个月了,也就业了四个月。
每天都在致力投简历,共投出去了五百封简历,但只有三家告诉本人过来面试,其余的都杳无音信。本人很纳闷,就找了一个做猎头的敌人询问,敌人说本人曾经超龄了,没有什么岗位能够给本人这个年龄的人了,只有多数的能放宽到四十岁,但也不太适宜本人做。所以本人没方法只好考事业单位了,没想到事业单位居然也要求 35 岁,这可怎么办,本人还须要养家呢。
这位网友示意为什么互联网行业要这么歧视年龄,本人经验丰富,技术过关,怎么就找不上工作了呢?网友们看到这个帖子后纷纷发表了本人的认识。
有网友示意三十五岁这个坎设置的意义就是如此,如果有能力的员工在这个年龄个别都能成为高管了,那么齐全不须要通过投简历来找工作,所以一看到三十五以上的简历,HR 都默认是没有能力的人。
退职场的确普遍存在着“35 岁定律”,如果到了 35 岁,你还无奈怀才不遇、还做着基层工作,那很可能你就是要被「优化」的对象 —— 毕竟比你年老、好用又便宜的年轻人,太多了。
明天又看到有人提了这么一个问题:
如果你很确定,本人在 35 岁(或 40 岁)时,肯定会来到当初的公司,无论被动或是被动,你会怎么想、怎么做?
不得不说,这是一个很不讨喜的问题。然而,却也是一个值得你我去沉思的问题。
前几年,国内经济的飞速发展,带动了许多行业,也使许多人找到了时机。
在这样的大背景下,咱们很容易过于乐观,失去对将来的警觉。咱们总会默认,将来的每一天会像昨天一样,惊涛骇浪,不会有什么大的变动。
但变动往往就在人不知; 鬼不觉之间席卷而来。
所以肯定要早做筹备,防患未然。
那么在市场压缩以及大前端的趋势下,咱们挪动端程序员如何冲破职业瓶颈,放弃集体的外围竞争力呢?
一、硬技能:业余的技术常识
1.Java / Kotlin 开发语言
Java
- 罕用数据结构:
ArrayList、Vector、
CopyOnWriteArrayList、
HaspMap、ConcurrentHashMap、
HashTable 等应用场景。
- JVM 虚拟机包含 Java 内存治理,GC 垃圾回收机制,类加载机制。举荐书籍:《深刻了解 Java 虚拟机 JVM 高级个性与最佳实际》。
- 多线程编程,包含线程池,锁机制,线程同步。举荐书籍:《Java 并发编程实战》和《Java 多线程编程核心技术》。
- AOP 编程实现,包含 JDK 动静代理实现,ASM 间接操作字节码、CGLIB 实现,其原理封装了 ASM,应用更不便。
- Javassist:在字节码加载前间接批改须要切入的办法,以及注解处理器 APT,这在 Android 中开源的库利用较多,比方 DataBinding , ButterKnife, EventBus3 等等。
- 异样解决 Exception,包含查看性异样、运行时异样解决。
- IO 流相干,包含梗塞型 IO 和非梗塞型 IO。
- Java 的一些高性特级,比方反射、代理、泛型、枚举、正则表达式等等;同时理解一下 jdk1.8,1.9,1.10 等新个性。相干书籍比拟多,举荐《Thinking in Java》和《Effective Java》。
Kotlin
Kotlin 是一个基于 JVM 的新编程语言,在 Google IO 2017 中被 Google 发表成为 Android 官网开发语言。
Kotlin 有哪些长处?
①简洁性: 提供了很多规范函数,大大减少样板代码的数量。
②安全性:防止空指针异样等谬误。
③互操作性:充分利用 JVM、Android 和浏览器的现有库。
④工具敌对: 可用任何 Java IDE 或者应用命令行构建。
在 Kotlin 中要建立函数式编程思维。把函数了解为一个值到另一个值的映射关系,以函数作为单元来解决各个业务逻辑,函数既能够做参数,也能够作为返回值。多应用 Kotlin 提供的规范函数,比方 let、run、with、apply、also、Lambda 表达式。尽量应用闭包和高阶函数。
Kotlin 的另一个突出特点是协程,为设计异步、非阻塞的程序提供了弱小的范式。协程是一种轻量级的线程,它提供防止阻塞且更便宜可控的操作: 协程挂起。将简单异步操作放入底层库中, 程序逻辑可程序表白, 以此简化异步编程。
最初简略说下 Kotlin/Native,它的设计初衷是反对在非 JVM 虚拟机平台环境的编程,如 iOS、嵌入式平台等,同时反对与 C 互操作。举荐书籍:《Kotlin 实战》。
2.Android 进阶技术点
过程相干 ,包含 App 过程原理以及 AIDL 原理。
性能优化 ,包含:内存,cpu,耗电量、网络申请、UI 布局、线程、数据库等优化办法以及优化工具的应用。
Android 源码相干 ,包含:Binder 机制,Activity 启动流程,Handler 原理,AMS,PMS,WMS 原理,View 的绘制流程,Touch 事件传递机制等等。
编译打包流程 ,从 java/kotlin 源码到最终造成 APK 的过程。
热修复的实现原理 ,目前热修复框架的品种繁多,常见的包含底层替换、类加载和 Instant Run 计划。
逆向工程原理 ,次要是为了避免 apk 被反编译破解,以及理解 apk 加固计划。
插件化 ,目前计划同样很多,支流的技术实现是 Hook 形式,注册 Activity 进行占坑,应用占坑 Activity 通过 AMS 验证,还原插件 Activity,其余组件的原理也大抵相似。
NDK 开发 ,调用 JNI 以及回调 Java 的形式。
自定义控件 ,须要留神 onMeasure,onLayout,onDraw 的调用机会,以及 Touch 事件散发机制。
动画 View Animation,视图动画在很早的 Android 版本零碎中就曾经提供了,只能被用来设置 View 的动画。
属性动画 Property Animation,只对 3.0 以上版本,能够设置给任何 Object,包含还没有渲染到屏幕上的对象。这种动画是可扩大的,可自定义任何类型和属性的动画。
Webview 中 Native JS 交互 ,罕用的 JSBridge 等。
Gradle 的个性以及 DSL 语法 ,比方 Gradle Transform API 的应用,它容许第三方插件在 class 文件转为 dex 文件前操作编译好的 class 文件。利用这一个性,咱们能够在代码编译阶段实现代码注入或者代码批改,这也是很多埋点技术和热修复技术的根底。
安全性:HTTPS 通信原理,数据加密形式,包含 MD5,RSA 等,webview 安全性,代码混同,数据验签,组件通信安全,服务器通信。
CI 继续集成 :Jenkins,Gitlab CI 等搭建继续集成开发工具。
Sersor 传感器 :包含陀螺仪,减速传感器,方向传感器,重力传感器,光线传感器等。
Android 开发国际化 。
ART 和 Dalvik 虚拟机的区别 ,次要是 AOT,Ahead-Of-Time 预编译。
相熟 DEX 文件构造。
单元测试 :
JUnit4,AndroidJUnitRunner,
Mockito 框架的应用。
自动化测试 :Monkey / Monkey Runner,Espresso,UI Automator 等。
把握模块化开发方式 :次要留神分好层、模块间跳转通信。
代码重构能力 ,举荐书籍:《重构改善既有代码的设计》、《重构与模式》
Google 动态化框架 App Bundles。
Jetpack,Google 推出的新一代组件、工具和架构领导,旨在放慢 Android 利用开发速度。Jetpack 次要分为 4 局部:
Android 开发罕用的第三方库:
响应式编程:RxJava、RxAndroid,Google 的 Agera
网络库:包含 Retrofit,OkHttp,Volley
图片:Fresco,Gilde,Picasso
依赖注入:Dagger2
数据库:Realm,ORMLite,GreenDAO,ObjectBox
数据总线:EventBus,otto
内存透露检测工具 LeakCanary 等
各个技能点如果具体拓展开,会造成相当庞杂的一张常识图谱,倡议大家自行梳理总结消化。
3.OOAD 和设计模式
在架构设计方面,首先要把握的就是面向对象的开发和设计。具体知识点包含:
面向对象三大个性:封装, 继承, 多态。
五大根本准则(SOLID 准则),繁多职责准则,凋谢关闭准则,里氏替换准则,依赖倒置准则,接口拆散准则
23 种设计模式:罕用的有工厂、单例、适配器、桥接、组合、代理、命令、观察者、策略、状态模式等等。
4.APP 架构设计
包含 MVC、MVP、MVVM、MVI、VIPER、Clean Architecture、Flux。目前除了 MVC 外 MVP 和 MVVM 用得比拟多,具体的架构设计还要联合业务去思考。
二、软技能
人退职场,行走江湖,想进阶高管光有技术深度是不够的,还须要把握泛滥软技能,留神综合职业素养的磨难。有很多人一开始器重水平有余,退职场后半段的回升过程中,容易遇到瓶颈。
上面是我集体总结出的高级程序员必备软技能,供大家参考。
1. 疾速学习能力
包含技术深度和广度,可能一直探索新技术,一直学习。
2. 沟通能力
增强表白、浏览、编写能力,即便在技术发达的明天也绝不会过期。因为任何形式的沟通在企业外部都是十分有必要的。
3. 团队合作能力
开发人员很容易陷入孤立的人际交往状态,但开发工作永远都不可能是一个人实现,只有成员真正能融入团队内,顺利与其余共事沟通单干,能力体现出其真正的价值,被列为将来职位降职候选人的几率也更大。
4. 工夫治理能力
能够参考工夫治理「四象限法令」,有重点地把精力和工夫集中用于解决重要但不紧急的工作,这样能够做到防患未然。
5. 影响力
一方面是业务影响力,另一方面是技术影响力。其中,进步技术影响力的形式包含:多参加技术分享,把积攒的常识进行总结和流传;加入技术计划评审,把技术教训分享进来;帮忙新同学解决技术问题;在博客、Github、StackOverflow 等平台上对外分享。
6. 文档编写能力
代码正文 。很多程序员很少写正文,或者正文过多,都是不适合的。多参考开源我的项目的正文标准。
编写技术设计文档 。包含流程图,类图,性能时序图等等。
此外举荐一本书:《软技能——代码之外的生存指南》
最初
我始终以来都有整顿练习大厂面试题的习惯,有随时跳出难受圈的筹备,兴许求职者曾经很称心当初的工作,薪酬,感觉习惯而且劳碌。
不过如果公司忽然开张,或者部门被裁减,还能找到这样或者更好的工作吗?
我倡议各位,多刷刷面试题,晓得最新的技术,每三个月能够去面试一两家公司,因为你曾经有不错的工作了,所以能够带着轻松的心态去面试,同时也能够减少面试的教训。
我能够将最近整顿的一线互联网公司面试真题 + 解析分享给大家,大略花了三个月的工夫整顿,2246 页,收费分享给大家,帮忙大家学习提高。
因为篇幅限度,文档的详解材料太全面,细节内容太多,所以只把局部知识点截图进去粗略的介绍,每个小节点外面都有更细化的内容!以下是局部内容截图: