一.如何选择职业方向
我见过很多之前都不是计算机专业出身的,现在从事Java开发或者大数据等职业,而且现在做的都还不错。我想这些人应该都是经过深思熟虑的做出选择的,或者是人云亦云,不过都已经走出来了。我是从事JAVA这块十多年,从初级开发到现在架构师,确实一路经历很多。
就目前主流互联网公司,JAVA的应用场景还是最多的,比如大型的分布式系统、微服务架构,基本上服务端开发用的多数是JAVA。这就决定了市场需求,如果技术还可以,找工作不是问题。当然,做IT这块有很多选择,大致有几个方向:
1.前端工程师
大型互联网公司都是前后端分离的,前端负责前端开发,比如H5、APP等工作,后端服务服务端开发。前端现在也很复杂,需要掌握HTML、css、javaScript这些基本技术外,还需要一些流行框架,比如Node、angular2、vue.js、react等,这些更新都很快。
优势:前端的起薪比较高,我觉得前端现在很紧缺的,薪资普遍比后端高点。
劣势:对于职业规划上,前端以后可以做前端架构师、前端的Team Leader。但是很少见到技术总监、CTO这些M级职位是前端出身的,当然,也不是绝对。
2.大数据工程师
大数据之前还是很抢手的,但是目前市场应该趋于饱和,也是不错的职业方向。如果你现在是DBA,我想你转大数据应该很快。比如你做数仓Hive上写sql,估计一天就可以转型成功。所以现在很多DBA转大数据,而且感觉很简单,so easy,但是估计只会写SQL。如果你是数仓Hive上写SQL的,我的建议是写个半年就可以了,多了基本上就废了。技术栈如下:
Java语言、Linux 、Hadoop(HDFS MapReduce Yarn )、 HBase、Hive(Hql基本操作和原理理解)、 Kafka、Storm/JStorm、Scala、Python、Spark (sparkCore sparksql Spark streaming ,或者加上MLLIB) 、还有(Sqoop/Flume/Oozie/Hue等)。
Spark可以用scala或者java,用scala操作RDD比较方便,前提是有学习成本。scala一行代码搞定的,用JAVA有可能几十行,但是一些其他中间件基本上都支持JAVA,用scala就少些,集成个方便比较麻烦。
流式计算,Flink未来应该是趋势,Spark streaming严格来讲是批处理。
3.JAVA工程师
JAVA已经流行了很多年了,不过现在GO语言慢慢的也在兴起。大型互联网公司分布式架构,服务端语言大多数是Java语言,周边生态也是最全的。
做后端的以后职业规划可以有技术型,比如技术专家、架构师。管理可以往Team Leader、技术总监、CTO。
其他还有很多选择,比如数据工程师、机器学习、量化工程师,也是不错的选择。
二. JAVA需要学习的技能
如果你坚定的选择Java,那就开始吧。
1. JAVA基础
这个是基础,是以后发展的根本。
你可以选择从看书开始,比如JAVA编程思想、JAVA核心技术卷,不过我不建议先从这里开始,翻译过来有很多语言比较晦涩,而且书也比较厚,坚持学完估计会花不少精力,也会有挫折感。
你可以选择网上一些免费的教程,http://www.amcto.net,也有面向零基础的JAVA教程。
学习过程中,重要的事情说三遍,动手!动手!动手!理解的再好,都没有动手来的彻底,还有一点就是做笔记。
需要学习,面向对象、注解、泛型、多线程、IO、JVM、集合、反射、网络编程、设计模式、JDBC等技能。学习过程中,随时做些小的项目。
2. JAVA WEB
语言类,html、javaScript、css(了解)、Servlet、XML、AJAX、JQuery、http协议。
框架类,Spring MVC这个就可以了,像Struts、Hibernate、Webwork这些你可以忽略了,即使遗留项目,现学也来得及。
3. 数据库
项目都是动态的,肯定离不了数据库,也是以后工作中经常用的。如果时间有限,基本上MySQL要掌握。
- DDL、DML
- 事务隔离级别
- 数据库索引,比如索引原理(B Tree)、聚集索引、非聚集索引、不同引擎的索引实现区别。
- binlog,MVVC等。这个有点麻烦,可以以后学。
4. 缓存
系统中很多数据是要放入缓存,缓存速度很快。Memcached由于只放内存,断电会丢数据,Redis现在是主流,需要掌握如下:
- 五种数据结构,string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
- 集群方式,初级可以先了解。单节点实例、主从模式、sentinel模式、cluster模式。
- 常用命令
- 持久化机制,rdb、AOF。
- 原理,比如单线程、惰性删除等。
5. 工具类
- Java开发工具,Eclipse(免费),IntelliJ IDEA(社区版是免费的)。
- 版本控制工具,SVN、git(互联网公司大部分用这个)。
- JAR包管理工具,Maven(大多数), gradle(少部分)。
6.框架类或中间件
- spring是必须的,IOC和AOP是必须掌握的。EJB现在就不要提了。
- 消息,ActiveMQ、RabbitMQ、RocketMQ、Kafka(大数据场景用的较多)。分布式事务很多都是用消息解决的。
- MyBatis,简单易用,大部分都是用这个。Hibernate这个重量级ORMapping框架用的很少了。
- RPC通信,Dubbo(常用)、Motan(新浪)、Spring Cloud(现在很火,微服务的一种常用架构)、gRPC(Google的用的也蛮多)。
- 分布式一致性协调框架,Zookeeper,本是主要用于大数据场景,不过现在很多分布式也是用这个,了解下基本原理,原子消息广播等。
7. 数据结构与算法
线性表(数组、链表)、栈与队列、树与二叉树(树、二叉树基本概念、二叉查找树、平衡二叉树、红黑树),这些还是要会的。
关于LeeCode,如果你校招进大厂,这个你要好好刷刷了,你即使是神童,不刷你也搞不定。现在很多社招也会面这个的。
8. 操作系统
Linux操作系统的常用命令会用一些,工作中大概率会用到的。至于select、epoll、Zero以后可以慢慢学习。
三.怎么学习
1. 善于借助搜索工具
遇到问题,恭喜你,有问题才能进步。先想着自己解决,不行解决搜索引擎,比如百度、google。搜索也是有技巧的,不妨先学习下搜索的技巧。如果能阅读源码肯定是极好的。
切记,不要很随便的问身边的同事技术问题,除非你觉得是合理的,工作中要树立自己的品牌,千万不要被别人打上不好的标签。
2. 官方文档是不错的学习途径
想学一门技术,最先去找官方文档,基本上文档都是可以接受的,当然,你的英文要好点,不好也没关系,借助有道,慢慢的就可以了。实在不行就找一些网上的视频教程,但是最新的有可能没有,或者是别人总结过的,有可能被带歪了。
3. 善于做笔记或者写博客
无论学什么,能用自己的语言总结出来,都会有新的收获。即使过了很久,翻开笔记或者博客,很快就会把只是串起来。还有一点,写博客可以拓宽自己的知名度。
我其实很少写博客,但是笔记会每天都做的,不断修改。若干时间后,翻开之前的笔记,妈呀,这太low了吧,有这种感觉说明进步了。
4. 动手做项目是成长最快的方式
重要的不需要解释了。
四.怎么写简历
1. 简历要中肯
简历写的中肯合理,比如初学者写精通分布式架构,面试官肯定觉得这是神童,会问你分布式常用架构是什么、调用链监控怎么解决的、熔断、限流。或者简单点问分布式事务,两阶段提交、三阶段提交、CAP理论、Base理论,你怎么解决分布式事务问题的?
你可以这么写,了解分布式架构,面试官问你,最起码可以答出来12来。
切记,简历不可以造假,写的内容自己心里有数即可。
2. 简历中要有亮点
多写项目经验,不要通篇都是会哪些技能。如果我是面试官,我提问会很迷茫。项目经验多写自己参与的部分,遇到哪些难题,解决方案是什么,这个看起来比较nice。
我其实比较讨厌,上来就写做过OA、CRM啥的企业管理软件,因为写的人太多了,有点普通,问你工作流引擎还不一定答出来。
如果你做过电商项目,写个订单状态机设计还是不错的,最起码每个订单不是硬编码,可以自由配置。还有库存超扣怎么解决的,这些都可以的。
以上就我的个人经验,如有不妥,请指正,愿你在未来的职业中星辰大海。
转自:http://www.amcto.net/blogdetail/1