先从第一点来说:怎么样才算真正学好了Java呢?
其实这要看你所要解决的具体问题。解决的问题复杂度越高,相应的学好自然越难。在网络上对各个层次的Java程序员有相关的技能匹配规则如下:
初级:1、掌握java基础,熟悉常用类库。理解java web中的servlet,jsp,并了解常用的框架对java web的封装原理,能够借助框架完成增删改查功能。理解数据库在web开发中的地位。
2、理解java中较为高级的特性,如反射,动态代理,JVM,内存模型,多线程等等。熟练使用框架,对框架中遇到的bug,能够借助日志和搜索引擎分析出问题的原因。在团队中,能够独立完成普通后台业务功能的开发。了解数据库的高级特性,如索引,存储引擎等等。
3、理解java分布式架构,微服务架构,了解其与集中式架构的区别,并能保证分布式代码质量。熟练使用各个中间件如redis,mq,zookeeper等等,并了解其工作原理和使用场景。能够在中级或高级程序员的带领之下,完成非核心功能的研发。能够关注开源,并且具有阅读源码的能力。
中级:具备一定的项目开发经验(3年之上一线互联网产品研发经验),拥有线上bug的处理能力,JVM调优能力,以及完成核心业务功能的开发。并且带领团队的新人,能够按能力分配任务。
高级:团队的核心人物,把控整个项目的质量,包括代码漏洞和规范问题。具有5年以上项目开发经验,2年以上架构搭建的经验,能够根据业务选择不同的架构类型;根据团队组成,分配不同的任务。具有将自己的知识分享出去的能力,带领初级程序员走向中级,中级程序员走向高级的能力。
根据你的层次对号入座找到具象的标准那么第一个问题就解决了。
再说下第二点Java后端的技术体系是什么样的?
我们的大 Java从1995年开始诞生以来一路发展短短几年就发展成最受欢迎的编程语言。拥有庞大的技术社区以及丰富的群众基础。Java的体系不可谓不庞大:
MVC框架
SpringMVC
Jersey
JFinal(国人开发)
WebX(阿里)
IoC框架:
Spring
缓存框架:
Redis(可使用Spring的RedisTemplate),
Memcached
性能检测框架:
Jwebap
数据库:
关系型数据库(MySQL, PostgreSQL)
NoSQL(MongoDB, HBase, 其中HBase用于大数据库领域的列数据库,受限于查询性能, 一般不用于做业务数据库)
数据库中间件:
Cobar(阿里)
Atlas(360)
DDB(网易)
MyCat
Kindshard
MySQL Proxy(支持Lua, 性能较差)
ORM框架:
MyBatis
Spring ORM提供的JdbcTemplate
TDDL(阿里)
Sharding-JDBC(当当)
搜索引擎:
Solr
Elasticsearch
文件存储:
底层采用传统的RAID, 上层HDFS
单点登录系统:
耶鲁大学开源的CAS ( https://github.com/apereo/cas/tree/master/cas-server-webapp )
统一认证中心:
用户注册/登录认证/token鉴权
内部信息系统用户的管理和登录鉴权
APP的管理,包括APP secret生成, APP信息的验证(如验证接口签名)
统一配置中心:
Zookeeper
Disconf(百度)
统一调度中心(定时任务):
Linux Cron
Java Quartz
Oozie(Azkaban&Yahoo)
Spring Quartz+Zookeeper
elastic-job(当当)
消息队列:
Kafka(LinkedIn)
RabbitMQ
服务治理框架(http/RESTful/RPC):
RMI
Hessian
Thrift, Dubbo
Dubbox(当当)
统一日志服务:
Log4j
LogBack
收集方案:
Scribe
Chukwa
Kafka(LinkedIn)
Flume
传输方案:
Kafka(LinkedIn)
数据库与数据仓库同步:
Sqoop(Apache)
Canal(阿里)
离线数据分析:
Hadoop
Spark
Tip 数据倾斜: Region数据分布不均, 造成有些节点负载很低, 而有些却负载很高, 从而影响整体性能
实时数据分析:
Storm
Spark Streaming(批量计算, 高延迟)
Flink
实时+离线数据分析:
Lambda
数据即席分析:
Presto
Impala
Hive
自己搭建内部HUE
故障监控:
系统监控:
Nagios
Cacti
Ganglia(分布式服务集群)
OpenFalcon(小米)
业务监控:
ELK(Elasticsearch+Logstash+Kibana)
Mercury(唯品会)
鹰眼(阿里)
WatchMan(新浪)
Zipkin(Twitter)
HTrace(Apache)
Spring Cloud Sleuth(如果使用Spring Cloud)
上面列出来的都是,涉及到的知识点真的是浩如烟海。如果说真的要把这些知识点都做到精通难度可想而知,所以我们在学的时候必须得选中一个方向。这也就是要说的第三点“怎么学好Java后端?”
其实旦凡是技术学习都是一个熟能生巧的过程。而熟的过程就是练习的过程!
好说到这里问题来了:怎么练?
下面我们看第三个问题:怎么学好Java后端?
1、设想一个应用场景,然后根据应用场景自己动手搭一个项目
这是最好的一个方法,因为这个项目是出自于你的想法、也不用着急忙慌的赶着上线,所以你对待它的态度和你对待工作中的项目是两种不同的态度。更多的你可能会把它当成是你的孩子一样对待。希望它尽可能地优秀。这是你乐于去做的。
2、看项目,抄项目
这个方法最好是结合第一个方法一起使用。
有条件的话尽可能多找一些项目来看,熟悉它们的项目结构和配置等等方面的内容,看得多了了再自己动手仿建一个项目(这才是重中之重)。你要知道纸上得来终觉浅觉知此事要躬行。
3、记录技术点的同时扩大技术影响力。
这点很重要、尤其是对于那些不以终生当程序员为目标的朋友更是如此。现在是网络时代,信息传播的速度是以往我们从来都不敢想象的。也正因为我们处在这样一个年代,所以我们才能有更多的机会在竞争激烈的职场中脱颖而出。而这时你需要的不仅仅是精湛的编程技术、你更需要的是影响力。
4.锻炼身体获得更好的精神状态。
从事开发工作的各位朋友、不管你现在的身体状况怎么样,请记住一定要锻炼身体相信我只要你停止锻炼,你会在不久的将来感觉到你身体的变化。保持好的精神状态可以让你更有战斗力、思维更清晰敏捷。