为什么写这篇文章
今天有位校招同学问我,有没有什么技术资料可供学习,便于提前熟悉下公司用的技术;其实若简单敷衍下,我便一句话回复了:网上资料已经很丰富了、自己查有关Java的知识,话虽如此,但是如果这么回答基本上也跟没回答一样,想起自己当年毕业踩过的坑,如果能有一人在迷茫的时候指导一下、可能会少走一些弯路、成长会快一些,因此我想写下这篇新人需要了解学习的技术栈;
当然,我也只是根据目前自己的经历来总结的,或许若干年后自己再来看这篇文章,不一定都对,仅代表个人意见;
这篇文章面向哪些人
自己工作这几年,也带过几个新人,仅以自己这点经历写写,主要针对刚毕业、或毕业一两年还未入门的新人;
新人有什么特点
大部分新人都是一张白纸、可塑性强、有激情、时间充足、求知欲强等等,如果引导合适,潜力无穷,能很快成长为团队主力,虽然我当时没遇到这样的机会、但是我会尽力帮助我带的新人上手;
如何培养新人
我见过的培养新人方式有几种:
- 放养式:给新人的任务,完全靠新人自己、导师只看结果,新人如果有问题也会去指导,新人不主动问也不去找新人去沟通;
- 引导式:给新人的任务,先让新人自己去查资料、出方案,然后再给出导师自己的建议,定期给新人以大方向的指导:比如哪块知识薄弱需要加强;
- 分配式:给新人的任务,怎么做、如何实现都一一告诉新人,新人就像一个翻译机;
每个人性格不一样,培养策略也不一样,以上列的三种方式,不能说哪种好、哪种坏,因为不管哪种方式我都见过有不错的新人脱颖而出,也见过有表现平平的,成长主要靠自己,不过培养手段、环境是有助力作用的;
如果环境允许,我个人更倾向于引导式,因为这样可以让新人自己先去思考,也不致于工作跑偏,算是一种中庸策略吧。在此过程中我会让新人尽多的去试错,因为成长最快的方法就是让新人自己动手、自己试错、自己修复、自己总结,说百遍不如自己动手干一遍,比如今年入职的两个新人,做了一个需求,工期算是比较长、需求不算紧急,让两个人自己先去熟悉需求、出方案、做设计、写上线计划、主导上线、维护升级,当然这个过程中老人肯定是要给指导的,从两个新人刚入职到现在,基本上每人都可以搞定一中小系统;当然如果环境不允许,三种培养方式可能会混合着用,因为目标是保证业务的正常、顺利进行。
技术栈
目前做后台开发,主要用的编程语言是Java,所以仅针对后台开发-Java新人做一些建议;
以下我们公司所用到的一些基本知识点,随着时间,这些知识点可能会过时;
日志
建议日志组件:log4j2
基本上新人做需求,不会考虑打日志,后期线上维护查问题、没有日志即使来一架构师也定位不到问题,所以请新人先学会日志:打日志、查日志;
打日志:什么时候该打日志、打什么内容、日志格式如何;
查日志:登录线上机器,grep less cat tail等各种常用命令;
常用Linux命令
- grep/egrep/zgrep系列
- awk/sed
- top/netstat/ps/vmstat
当然还有很多命令,先会用基本的;
Java基础
Java语法、多线程、集合基本的API肯定是要会的; JVM的知识要有些了解;
框架
Spring SpringMVC
ORMapping
Mybatis
DB
MySQL; 索引原理要了解; 基本增删改查要会;
Web容器
jetty tomcat 可以了解下Spring Boot;
缓存
Redis
版本控制
Git
编译打包
Maven
RPC
Thrift 其它的如gRPC、Dubbo都可以了解; 可以再了解下Spring Cloud;
定时任务
Quartz
消息
Kafka
数据
实时数据处理:Storm、Spark、Flink; 列式存储:HBase; 可以了解下Hadoop系列;
开发工具
Idea
最后
当然,以上列出的是不全的,更多的还得工作中学习。
另,个人建议如果能早实习就早实习。
读万卷书、行万里路。