把Java编程语言精通到底有多难?
JAVA之父詹姆斯.高斯林开发了JAVA语言之后,有一次看到了《重构—改善既有代码的设计》一书之后,说了一句话:“如果我早看到这本书,JAVA就不会是这个样子了”!
估计连JAVA之父也不敢说全部吃透了JAVA生态了,JAVA涉及到的东西实在是太多了,作为一门高级编程语言,JAVA确实很容易用来开发,JAVA封装了大量的API,基本覆盖了我们日常开发中的几乎全部功能,但如果要深入底层,那么很多人就成为“门外汉”了!
比如我去小公司面试的时候,常常遇到问题是HashMap怎么用?concurrentHashmap怎么用?而在大公司这样的问题往往变成了concurrentHashMap底层是怎么结构?为什么线程安全?为什么比起synchronizeMap性能好?
jvm相关的东西更是难倒大多“英雄好汉”,JAVA内存模型,内存结构,类加载机制,类加载器,gc的算法,gc收集器有哪几种?什么时候该用哪一种?jvm怎么调优?
这样的问题面试基本撂倒一半人!
这只是冰山一角,还有诸如反射,动态代理,三种io(由此引申的netty,nginx等),多线程方面的技术(线程池底层,生产者消费者模型,线程安全等等),JAVA每个版本的新特性,更不论JAVA生态中的spring相关框架,搜索引擎,大数据开发等等每一个知识点都是几本书才能学完的东西!
一个人的精力实在是有限,如果非要追求对JAVA所有东西精通,终有心力交瘁之时,只要掌握大多数重点即可,我一直在分享JAVA方面比较热门的技术,有需要的朋友可以去看看,肯定您能有所收获!
作为一名从业多年的程序员,同时也出版过Java编程书籍,所以我来回答一下这个问题。
Java语言随着互联网的发展,其自身的生态体系不断得到完善,应用边界也不断得到拓展,目前在Web开发、大数据开发、移动终端开发等领域均有广泛的应用,可以说不同的应用方向也需要具备不同的知识结构,所以说精通Java还是具有一定难度的。
Java语言自身的构成分为两个大的部分,一大部分为Java虚拟机,另一部分为Java语言自身的语法。按照Java语法要求编写的程序需要通过Java虚拟机完成加载、校验、编译和运行,而Java虚拟机的作用就相当于Java的运行环境(容器),它自身需要完成大量的操作,包括代码安全性、垃圾处理、事件处理、资源管理等内容。所以精通Java开发一方面需要清晰Java语法,另一方面需要了解Java虚拟机的运行机制。
对于初学者来说,学习Java编程都是从学习Java语法开始的,然后学习Java的Web开发、数据库开发、分布式开发等内容,这个过程通常是大部分学习者的学习路线,难点在于Java面向对象概念的理解,也就是理解各种“抽象”。这部分虽然具备一定的难度,但是大部分学习者是能够学得会的,区别往往在学习时间上。
对于从事平台开发的研发级程序员来说,还需要系统的学习Java虚拟机的内部机制,通过从深层次了解Java虚拟机的构成从而辅助平台类产品的研发,重点在于性能的提高。通常情况下需要了解Java虚拟机的体系结构、核心算法等内容,这部分内容的难度还是比较大的。当然,要想系统了解Java虚拟机的整体结构,通常还需要阅读大量的源代码。
我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有互联网方面的问题,或者考研方面的问题,都可以咨询我,谢谢!
作为一个十年老司机现身说法,Java编程有多难。
实话告诉你,一点都不难,java这门语言门槛稍微高一点,主要是强数据类型的原因,只要懂了其他都不是事,相比其他弱类型语言相对安全一些。作为编程语言,有着广泛的使用者群体。
难的是java的框架体系,经过这么多年框架迭代,目前基本稳定在spring-cloud;
难的是jvm运行机制,虚拟机gc原理;
如何提升运行效率?
如何设计出支持大并发的高效服务?
如何弹性扩容?
如何合理设计存储架构?
如何合理使用缓存?
如何设计熔断策略?
如何实现限流?
这些都是在实际java开发工作中要面对的问题,虽然现在都叫java开发程序员,然后背后要了解的知识,一点都不能少,以下是最近比较主流的后端开发工程应该具体的基础能力集合:
- 数据库:mysql、mongodb、hbase
- 开发框架:spring-cloud、spring-boot
- 缓存:redis
- 多线程编程
- socket编程
- sql性能调优
- jvm调优
- 容器化部署
- service服务监控
拜见祖师爷
程序员的工作绝对不只有coding,还有巴拉巴拉巴拉各种沟通、讨论、评审会议,懂得越多,话语权越重,获得晋升的机会也就越大。
祝提问者前程似锦,永葆秀发

