有人说,今年可能是过去十年最差的一年,但却是未来十年最好的一年。随着越来越多的知名企业进行大规模裁员,我们不得不承认一个事实:经济寒冬与裁员潮,将是未来常态!
个人经历
普通二本毕业,学历不突出,在杭州工作两年,14年来到深圳,从事java开发一晃8年多。
做过外包、跳槽比较频繁,由于内心一直以一个技术人自居,所以一直重技术,轻业务,导致在职业规划上做的很差。
期间尝还试过2次开发方向的转变,一次是2014年左右,移动APP的浪潮时期,自学了安卓开发半年,结果还没等转开发方向成功,移动开发的浪潮就逐渐过去,第一次转变尝试就这样胎死腹中,白忙活一场。第二次是2015~16年,这个时间点正是大数据开发最热门的时期,自学各种大数据框架,无奈受限于学历,并没有找到满意的工作,只能回归java。。。。。。
曾经盲目的追逐了几次技术浪潮,但是又没有真正对自己的职业生涯有多大的帮助。
经历了这些事之后,从此决定安心搞Java,方向确立之后就是考虑提升技术栈了!
确立方向后的恶补
俗话说:“书中自有黄金屋、书中自有颜如玉” 作为码农提升的第一想法就是多读书!!
就这样怀揣着不服输的性格,购买的大量同事及一些大牛推荐的书籍:《Java数据结构和算法》、《重构:改善既有代码的设计》、《代码整洁之道》、《Java并发编程实践》、《Hadoop权威指南、《Java8 实战》、《Spring实战(第4版)》、《深入理解 Java 虚拟机 第2版》、《实战Java高并发程序设计》、《Java性能权威指南》、《程序员的职业素养》等等经典书籍
在网上也找了很多学习资料、进阶视频等等,常常和公司的同事、大牛虚心请教!
小转折
就这样沉下心来学习半年多时间后,我离职了且成功拿到了一家30Koffer的互联网企业!
工作8年多,成长最快的就是这段时期,遇到好的同伴、领导,找到了正确的学习方式,从而也让我明白了技术栈系统化的重要性。
人生的路,一步慢,步步慢,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代
小建议
八年来的小结:Java程序员必经的三个阶段
第一阶段1-2年
我认为1-2年对于程序员来说是第一个门槛,这一阶段菜鸟正式从理论迈向企业级开发。我们知道如何使用工具、项目版本如何控制、接触并能够使用以下tplaravel等框架完成项目等等,积累了一定的开发经验,也对代码有了一定深入的认识,是一个比较纯粹的Coder的阶段。
第二阶段2-3年
3年又是区分程序员的第二个门槛。有些人在3年里,除了写工作代码,在空余时间基本不会研究别的东西,这些人永远就是个Curd,年纪大一些势必被更年轻的人给顶替;3年的Java程序员除了写代码还需要热衷于学习各种技术实现、不仅对项目运筹帷幄,还要能解决一切性能问题。只有深入学习底层原理、spring、Java虚拟机,微服务,Mysql底层优化等,才能保持核心竞争力,拥有一份不错的薪资!
第三阶段3-5年
到了第三阶段3-5年的阶段,技术体系需要逐渐往大型层次进阶, 有效、高速的处理从很小到非常大的项目管理,随着我们的业务量越来越大和越高并发,单体的架构模式已经无法对应大规模的应用场景,利用分布式架构来冗余系统消除单点的故障,从而提高整个系统的可用性。同时分布式系统的模块重用度更高,速度更快,扩展性更高是大型的项目必不可少的环节。
关于找工作面试
1、面试一定要带简历,这是态度问题,不然容易第一印象就不好。
2、简历上最核心的2点,1是自己掌握的技术栈说明,让面试官清楚知道你掌握技术栈;2是项目中使用了哪些技术栈,体现自己对这些技术栈的实际项目的运用情况。
另外简历不要超过3页。很多早期的项目经验和大篇幅的项目功能介绍,并没有什么意义。
3、准时,实在有突发情况,要提前打电话商量修改面试时间。
4、至少提前几周准备面试,因为java知识体系真的很庞大,不复习下直接面试,就像送人头一样,很容易错失难得的面试机会。
5、java基础一定要掌握好,不然丢分非常严重。之前面试一个高级java,竟然回答不出年轻代的垃圾回收机制,一下子我都不想继续聊下去了。
6、框架的核心特性要熟悉,并对其实现原理有一定的了解。比如:Spring Boot有哪些新的特性?它的核心特性自动化配置的原理了解吗?
7、主流中间件的工作原理和调优有一定的了解。
8、数据库一般也是必问的,索引,锁,事务,sql优化都必须了解。
9、听清楚面试问题再回答,不要答非所问,太过自由发挥。你和面试官聊的越有共鸣,你通过的几率越高。不知道可以直接说不知道,然后再阐述下自己的认知和了解,以探讨的方式让面试官和你互动,这样也能偷师点东西。
10、了解不深的技术栈名词和机制,尽量回避,不然只要你提到,面试官就可能展开深入的问下去。
11、多积累一些技术圈的人脉,很多时候内推进入会容易很多。
12、多积累一些可展示的技术成就和作品,比如参与了某某著名网站或者APP的核心模块开发,在GitHub上开源了什么框架或者参与了什么开源框架的开发,著名博客网站的一些排名,运营某某技术公众号。
上面我们提到系统化学习的重要性,那么到底该如何系统化的学习?
启蒙扫地僧马士兵P5—P8系统课程体系图
阿里巴巴企业及P8架构师学习导图及淘宝大型项目
阿里巴巴P7级别系统学习导图
一、微服务体系
微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越来越复杂的业务需求。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
二、K8S
Kubernetes能在实体机或虚拟机集群.上调度和运行程序容器。且, Kubernetes也能让开发者斩断联系着实体机或虚拟机的”锁链”, 从以主机为中心的架构跃至以容器为中心的架构。该架构最终提供给开发者诸多内在的优势和便利。Kubernetes 提供给基础架构以真正的以容器为中心的开发环境。
三、Redis及ZK
Redis是一个开源,内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
四、分布式、Spring源码及MySQL调优
SpringBoot源码解析
网约车项目
微服务体系
P8架构视频
马士兵整理大厂面试专题及大牛简历分享
阿里巴巴内部PPT全集及电子文档分享
马士兵全集视频分享