专栏首页java工会Java有哪些进阶技术?

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)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 每个程序员要注意的 9 种反模式

    有一个健康的自我批评对于专业和个人成长是很重要的。对于编程而言,自我批评的意义就是需要能查明设计中、代码中、开发中和行为中的无效或反效果的模式。这就是为什么反面...

    三哥
  • Java程序员新手老手都离不开八大开发工具

    现在有很多库、实用工具和程序任Java开发人员选择。每个工具都有其优点,但其中有一些因它的知名度、多功能性和有效性从众多选项中脱颖而出。 以下这8个工具,从代码...

    三哥
  • 为什么要用Getter和Setter方法,而不是公开属性

    大多数字段的访问都是通过Getter和Setter方法来间接访问,为什么不直接将字段设置为公开属性Public呢?答案在于前者的未来可能性。当我在Java语言编...

    三哥
  • JAVA和C++对比学习

    JAVA与C++的比较网上有很多讨论。比较清晰完整的有: http://zh.wikipedia.org/wiki/%E6%AF%94%E8%BE%83Java...

    韩伟
  • linux 安装jdk

    查看java版本:java -verson 1.官网下载jdk 2.tar -zxvf xxxx.tar.gz   解压 3.配置环境变量 <1># vi /e...

    Ryan-Miao
  • CVE-2019-0232 远程代码执行漏洞-复现

    该漏洞是由于Tomcat CGI将命令行参数传递给Windows程序的方式存在错误,使得CGIServlet被命令注入影响。

    周俊辉
  • java JDK安装教程

    没有CLASSPATH就是  %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

    杨奉武
  • Linux | CentOS7下会玩JDK不?你确定?

    Linux下如何搭建Java环境 软件环境 虚拟机:VMware Workstation 系统:Linux:CentOS-7-x86_64 工具: 安装工具...

    码神联盟
  • JavaScript中定时器的工作原理(How JavaScript Timers Work)

    原文链接:https://johnresig.com/blog/how-javascript-timers-work/

    德顺
  • MySQL中的double write(二)(r12笔记第17天)

    MySQL里的double write是InnoDB的三大闪亮特性,另外两个是insert buffer 和自适应哈希,其实还有几个比如异步IO,Flu...

    jeanron100

扫码关注云+社区

领取腾讯云代金券