Java自学之路

2020-03-24 10:12:05 浏览数 (1)

一.如何选择职业方向

我见过很多之前都不是计算机专业出身的,现在从事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

0 人点赞