Java有哪些进阶技术?

一些人对JAVA进阶的理解片面了,JAVA不过也是一门语言,提升和进阶还是内功的体现。就像那位答主所说,进阶的第一步就是编码风格和规范。我深表同意。 只是会用,这还远远不够~当然这也和题主的提问观点是一致的。

那么我想说的是,可能会用也是分层次的!就拿一般意义的编码来说,思想上可以分四个层次

第一层次是代码的长相,也就是编码的规范化,比如为什么不提倡用tab键缩进,而是用四个空格代替?类似的问题……

第二层次是代码的封装,也就是模块化,也许有现成的框架,但是有人也就是真的是日复一日的重复,脑子里从来没有这方面的意识,也从来没有去主动看过那些框架的源代码,就比如Spring框架的源码,那里面可是各种设计模式和JAVA反射,注解啊等的综合应用,非常有学习的必要,看看别人是怎么设计的架构……自己能不能也写一个轮子~要知道造轮子不是目的,关键是过程中得到升华!而且很多大公司都是自己二次封装或者重写的框架,比如阿里……

第三层次是代码的可重用性,所谓的设计模式,什么代码复用,高内聚,低耦合那一套……知道JAVA的哪些api用了哪些设计模式么?思想很重要。

第四层次是代码的可重入性,也就是涉及到并发环境。针对JAVA就是JAVA的多线程,比如JAVA常用的集合,有没有了解过集合这些算法的内部源码?一些线程的集合都是如何实现线程安全的?别的公司不知道,稍微大点的互联网公司,多线程是必考的,也是常用的,比如网易,阿里,等等等等,因为这些公司我面过或者有朋友在里面。他们的东西不是说简单搭个框架,写个网站的事情,后台也不是仅仅就JAVA。

这四个层次都有,或者都一直在注意和学习,那么针对JAVA,有没有对JAVA虚拟机做过调优?JAVA的内存模型,类加载机制了解么?对JAVA虚拟机的垃圾回收算法有过研究么?JAVA会发生内存泄露么?举例子什么情况会发生?如何避免?这些是我曾经被面试问过的……

再针对框架进一步了解,对Spring框架或者ibatis框架的源码研究过么?用过如今流行的restful么?如果让你设计,你有什么想法?为什么要用框架?为什么用依赖注入……spring的事务机制的原理是什么?hibernate的缓存机制……还有osgi,太多了……

再进一步,对JAVA虚拟机的架构,JAVA字节码文件格式,编译原理,计算机操作系统,c++的掌握?读一读《深入理解计算机系统》?最后试着自己写一个教学用的JAVA虚拟机。

再想进阶,用了那么久的tomcat,读过《深入剖析tomcat》么?tomcat的整体设计方案?一次请求tomcat的处理,servlet在tomcat中的加载,编译过程?tomcat自定义的ClassLoader有什么作用? 知道用户点击链接到网页出现内容的内部过程么?http协议了解多少? 这些都是我曾经被考过的……

继续进阶,用过JAVA的netty框架么?对它研究研究?绝对是学习JAVA并发,nio,和网络的好东西!

github?对linux了解多少?会脚本语言么?

再进阶,针对JAVA web离不开数据库~那么对sql调优了解过么?是否能熟练的写出存储过程?游标?数据库的索引是如何实现的?也就是b树和hash……对NOSQL了解么?对常见数据库引擎的差异性了解么?知道他们内部原理么?数据库的设计,范式……

太多了,学无止境,关键还是基本功扎实!语言都是次要的。针对JAVA语言本身,把编程思想吃透足以,对语言剩下的就是查漏补缺。而思想基本功才是决定高度的,也不会和一些程序员网友那样担心35岁以后被淘汰!!!

不清楚你做了两年,是在做什么

若是 WEB 的话, java 可以做, C# 可以做, js 可以,此外 python, ruby, go, 等都可以。有考虑过么?之间什么不同?

跳出了以语言定发民方向的思维之后,你会发现:全栈工程师 才是 IT人的正确方向。

更客观上说,作为一个职业,只是解决问题,创造价值。

你若考虑如何创造更多价值。就知道应该学什么了。

技术层面,工程层面,科研层面。海量去了。都可以同 Java 扯上关系。但是,也可以同其它编程语言扯上关系。

你提到的框架的话,如果是web开发框架,那么你就可以学习web方面的开发知识。

Java提供了网络开发的工具,所以你也可以往网络编程方面学习,学习下netty等。

如果是说语法特性的话,就可以学习下函数式语言比如Scala,Clojure等了解不同的编程思想

大数据方面的,Hadoop,Spark这些大数据处理工具也是不错的学习方向

数据库类的,HBase、H2等Java写的数据库,也可以去了解下数据库系统的实现

还有一些基础性的,比如性能调优之类的,那么你可以能要了解JVM的原理构造,学习并发编程方法的知识。

作者:重走Java 链接:https://www.jianshu.com/p/b9e5d9d603c0 來源:简书

原文发布于微信公众号 - java工会(javagonghui)

原文发表时间:2018-04-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构

工作2年半跳槽面试阿里,成功拿到offer,凭什么?面试题打动面试官的五大技能推荐课程体系:

2226
来自专栏生信技能树

终于看到了一个完整的mutect2使用脚本

https://gatkforums.broadinstitute.org/gatk/discussion/9183/how-to-call-somatic-s...

1211
来自专栏Java架构

想进阿里、京东、美团面试的Java程序员看过来第一个问题:阿里面试问些什么

2066
来自专栏java达人

如何编写复杂sql

经常有人问我那非常复杂的sql是怎么写出来的,我一直不知道该怎么回答。 因为虽然我写这样的sql很顺手,可是我却不知道怎么告诉别人怎么写。很多人将这个问题...

3869
来自专栏PPV课数据科学社区

为什么要选择Python语言实现机器学习算法

点击上方 “蓝色字” 可关注我们! 我们选择Python作为实现机器学习算法的编程语言:(1) Python的语法清晰;(2) 易于操作纯文本文件;(3) 使用...

3168
来自专栏安恒信息

黑客可以通过扬声器侵入电脑

借用人耳听不到的声波入侵电脑,然后通过系统的扬声器进行传输,听上去像是电影中的情节。但是,两名德国研究者表示,这种事并不只是传说。在一篇于11月份发表在《通讯期...

2755
来自专栏斑斓

晴窗闲谈 | 从Go语言的设计学习设计决策

阅读了Rob Pike撰写的《Go在谷歌:以软件工程为目的的语言设计》,颇多感触。这些感触并不在于语言层面,或者Go这门语言的语法以及底层实现;而是因为语言设计...

3647
来自专栏北京马哥教育

R、Python、Scala 和 Java,到底该使用哪一种大数据编程语言?

当你找到大数据项目,你首先会怎么做?确定这个项目的问题领域,确定这个项目的基础设施,在往上,确定项目的框架,选择最适合用来处理当前数据的所有内容。这个时候唯一摆...

3075
来自专栏Java进阶干货

工作2年半跳槽面试阿里,成功拿到offer,凭什么?

2015年刚毕业的我,进入了一家小小的公司实习工作,在学校学了三年软件开发的我,还是想去寻找一份互联网行业的工作,这样更能学以致用发挥自己的特长。一直到18年三...

1511
来自专栏云飞学编程

Python机构系统高清大图分享!让你有方向地学!

Python语言简单易学,加上现在AI的盛行,学习Python成为了好多小伙伴们的选择。但是没有基础怎么自学Python呢?今天小编就来教教大家,并且小编整理了...

672

扫码关注云+社区