专栏首页java_学习Java自学之路

Java自学之路

一.如何选择职业方向

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

原文链接:http://www.amcto.net/blogdetail/1

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 中文详细注释的开源项目

    芋道源码
  • 今日推荐:awesome-architecture

    但是这条路还是有很多人走,而且也留下了相应的封神之法,今天推荐的就是一个相当详细的架构师框架学习图。内容很充实,看目录的时候,滚动条滚了很多次!学习起来肯定也不...

    仇诺伊
  • 分布式设计与开发-宏观概述

    分布式可繁也可以简,最简单的分布式就是大家最常用的,在负载均衡服务器后加一堆web服务器,然后在上面搞一个缓存服务器来保存临时状态,后面共享一个数据库,其实很多...

    企鹅号小编
  • JAVA最流行的技术选型分类整理

    Eureka(Netflix),Consul,Nacos,Etcd,Zookeeper

    Java技术江湖
  • 分布式架构设计概要

    在互联网企业中,经常离不开的术语就是分布式架构和微服务相关的词汇,如果让你来设计一个分布式系统,你会以什么样的维度去构思我们的分布式系统呢?首先,我们需要明白为...

    keithl
  • 简谈关于对分布式处理的理解

    最近这段时间一直在看分布式有关的东西,但是关于分布式自己还是不能很好的理解,所以本文对分布式基础概念进行下学习. 分布式处理 首先先了解一下分布式处理,分布式处...

    企鹅号小编
  • 系统架构师论文-论分布式数据库的设计与实现(-MIS系统)

    分布式数据库系统把应用所需的数据存放在多个数据库服务器上,完成某个数据操作要涉及到访问多个服务器,这适用于某种特定需要的应用。我在主持设计开发的一个MIS系统中...

    cwl_java
  • 【JAVA】JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解

    源地址:http://www.21jn.net/html/72/n-272.html

    后端技术漫谈
  • 图解分布式架构的演进过程

    透明性:是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。

    芋道源码
  • 另一种阶乘问题

    大家都知道阶乘这个概念,举个简单的例子:5!=1*2*3*4*5.现在我们引入一种新的阶乘概念,将原来的每个数相乘变为i不大于n的所有奇数相乘例如:5!!=1*...

    书童小二

扫码关注云+社区

领取腾讯云代金券