优秀的 Java 程序员所应该知道的 Java 知识
我不是资深的 Java 软件工程师,但也混迹这行有6年时间了,所以就这个话题说说我的想法。希望对新人们能有所帮助,也希望牛人们能给与意见。
我做的是最常见的服务器端的开发,所以什么嵌入式、Android 方面的知识就不说了。
JDK 相关知识
JDK 的使用
这是每个 Java 程序员都应当掌握的能力,至少像 Java 集合类这样的最常见的 API 都是应该掌握的。但与此同时,我想大部分程序员掌握的都不精细。如果你去问一些关于常用的类的细节问题,很可能会出现这样那样的错误。比如如果某某参数是 null 的时候会出现什么情况,某某类是否是线程安全的,等等。
要想做好这一点也不难,仔细阅读 JDK 的文档、多思考。
JDK 源代码
JDK 的源代码有必要读吗?我的个人观点是很有必要,理由主要有下
- 阅读 JDK 的源代码可以让你对其的相关知识有更深入和扎实的理解和认识。俗话说,知其然更要知其所以然。如果只靠生记硬背,而不理解原理,那这样的知识是很容易遗忘的。
- 阅读 JDK 的源代码可以学习很多编程技巧和编码规范。比如,复杂逻辑代码的编写、代码的命名技巧、位操作的应用等等
- 阅读 JDK 的源代码可以帮助你复习算法和数据结构的知识。
说说读源代码的方法。一行一行地读代码,这样精神固然值得称赞,但方法未必可取。因为像 JDK 这样的软件,其实现细节是非常多的,其中一些细节对于理解去原理来说并不是必须的。所以,通过一些现成的文章帮助阅读源代码,这样可以节省很多时间,事半功倍。这样是为什么推荐想阅读源代码的朋友从 JDK 开始的原因,因为讲解 JDK 源代码的文章是最丰富的。
JDK 相应技术背后的原理
对于 JDK 中某些类,光看源代码是很难理解其全部原理的。例如,像Java 5 并发库背后的 CAS、Java 7 AIO 中操作系统对异步 IO 操作的支持、Java 反射背后的字节码生成技术。当你要去理解其最主要的部分时就会发现,这些部分是使用 C 语言编写的原生代码(当然,理论上你也可以去读这些原生部分的源代码,前提是你有这个需要和时间)。这时你最好通过找相应的文章和书籍来了解这方面的知识为好。
但不管你使用什么样的方法,这些原理还是需要了解的。当你了解到这些原理的时候,使用这些类时会感觉豁然开朗。
JVM 相关知识
学习 JDK 的使用和原理固然重要,但这还远远不够。作为开发 Java 服务器端应用的程序员,你还必须了解 JVM 的运行原理和调优。这其中包括 JVM 内存模型和垃圾回收的相关知识、JVM 调优的知识等等。
服务器端开发需要重点熟悉的 Java 技术
Java 并发
- Java 并发所涉及到的 Java 内存模型的相关知识
- synchronized、wait、notify 等应该如何正确使用、以及背后的原因
- Java 5 并发库中相关类的功能、用法、使用技巧、背后的原理
Java IO
(我在 IO 方面经验欠缺,欢迎查漏补缺)
- Java BIO、NIO 和 AIO 的概念、原理和使用方法
- Reactor、Proactor 模式
开源框架
使用 Java 的一个好处就是 Java 有着丰富的开源框架。其中有一些,不论你是否需要在项目中使用,你都需要对其基本使用方法和原理有了解,例如:
- Struts(已经很老的 MVC 框架,但是你至少需要知道基本知识。当然 MVC 本身也显得过时了)
- Spring (IoC、AOP 这两个概念必须了解。进一步最好了解 Spring、Guice 和 CDI 其 IoC 的表现方式各是什么,优缺点各是什么。AOP 的实现方法等)
- Hibernate 和 iBatis (优缺点)
- JUnit 和 Mockito 等单元测试和 Mock 框架
- Maven、Ant 等构建工具
Java 之外的知识
除了 Java 以为,其它的一些,诸如代码重构、设计模式、UML 等也是出色的 Java 程序员所必备的技能。当然还有一些软实力,例如任务安排和时间管理、交流能力等等,不在本文范围,所以就不多说了。
优秀的 Java 程序员所应该知道的 Java 知识的更多相关文章
- 程序员必须要知道的Hadoop的一些事实
程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...
- Java程序员所需要掌握的核心知识
[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识. https://javaguide.cn/ 推荐使用 https://snailclimb.gitee.io/javag ...
- 关于Unicode,字符集,字符编码,每个程序员都应该知道的事
关于Unicode,字符集,字符编码,每个程序员都应该知道的事 作者:Jack47 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...
- 90% 的 Java 程序员都说不上来的为何 Java 代码越执行越快(1)- JIT编译优化
麻烦大家帮我投一票哈,谢谢 经常听到 Java 性能不如 C/C++ 的言论,也经常听说 Java 程序需要预热,那么其中主要原因是啥呢? 面试的时候谈到 JVM,也有很多面试官喜欢问,为啥 Java ...
- 90% 的 Java 程序员都说不上来的为何 Java 代码越执行越快(2)- TLAB预热
经常听到 Java 性能不如 C/C++ 的言论,也经常听说 Java 程序需要预热,那么其中主要原因是啥呢? 面试的时候谈到 JVM,也有很多面试官喜欢问,为啥 Java 程序越执行越快呢? 一般人 ...
- 程序员与数据库打交道的JDBC知识概要
1.JDBC全称:Java database connectivity,Java数据库连接. (1) JDBC是一种用于执行SQL语句的Java API,为多种关系数据库提供多种统 ...
- 每个php程序员都应该知道的15个最佳PHP库
PHP是一种功能强大的web站点脚本语言,通过PHP,web网站开发者可以更容易地创建动态的引人入胜的web页面.开发人员可以使用PHP代码与一些网站模板和框架来提升功能和特性.然而,编写PHP代码是 ...
- Java程序员也应该知道的系统知识系列之(网卡,cpu,内存,硬盘,虚拟化)
https://yq.aliyun.com/articles/1718?spm=5176.100240.searchblog.16.UaGd04 https://yq.aliyun.com/artic ...
- 每个JavaScript程序员都需要知道的5个数组方法
Array.forEach() .forEach() 方法能够方便的让你 遍历数组里的每个元素,你可以在回调函数里对每个元素进行操作..forEach()方法没有返回值,你不需要在回调函数里写retu ...
- Java程序员应当知道的10个面向对象设计原则
面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) . Decorator(装饰器).Observer(观察者) 等设计模式,而没有把足够多的注 ...
随机推荐
- OCI runtime exec failed: exec failed: container_linux.go:296: starting container process caused "exec: \"bash\": executable file not found in $PATH": unknown
使用如下两个命令均无法进入容器 docker exec -it xxx /bin/bash docker exec -it xxx bash 以为是docker的问题,所以重启 systemctl r ...
- Innodb对表加锁的过程分析
本节我们通过一些具体的案例来分析Innodb对表上锁的过程.具体场景如下图所示. 在这里我们将语句分为4类:普通select(快照读).锁定读.半一致性读 和 insert语句. 普通读 普通的sel ...
- namenode rpc 请求队列调优
当 datanode 上新写完一个块,默认会立即汇报给 namenode.在一个大规模 Hadoop 集群上,每时每刻都在写数据,datanode 上随时都会有写完数据块然后汇报给 namenode ...
- Python 项目配置管理框架技术选型
一.背景介绍 在实际生产项目中,不同环境(如开发.测试.生产环境)常有不同配置需求,如数据库链接等.我们期望一份代码无需改动,仅通过单一配置变量调整就能适配和使用多个环境,实现 "一份代码, ...
- Serilog文档翻译系列(六) - 可用的接收器、增强器、格式化输出
01.提供的接收器 Serilog 使用接收器将日志事件以各种格式写入存储.许多接收器由更广泛的 Serilog 社区开发和支持:可以通过在 NuGet 上搜索 serilog 标签找到. 02.增强 ...
- Windows下使用Wireshark分析USB通信
WireShark中对USB数据捕获 可以监视与主机连接的usb数据. usb设备是三段地址描述,例如1.15.1,第一个是总线,第二个是设备地址,第三个是端口. USB数据抓包分析 这些是鼠标的数据 ...
- eBPF 概述:第 2 部分:机器和字节码
1. 前言 我们在第 1 篇文章中介绍了 eBPF 虚拟机,包括其有意的设计限制以及如何从用户空间进程中进行交互.如果你还没有读过这篇文章,建议你在继续之前读一下,因为没有适当的介绍,直接开始接触机器 ...
- 数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年4月刊
本文为大家整理了墨天轮数据社区2023年4月发布的优质技术文章,主题涵盖Oracle.MySQL.PostgreSQL等数据库的基础安装配置.故障处理.性能优化等日常实践操作,以及概念梳理.常用脚本. ...
- 存储事件 storage
// 去手动删除本地存储触发存储事件 window.addEventListener('storage', function () { console.log('存储事件触发了') }) const ...
- 从浏览器输入url到回车发生了什么
1. 域名解析,即把域名解析成以为唯一的ip ps:ip是每个网站的对应的一个key,域名是为了语义化,方便使用而设计的 : ps:第一次域名解析需要花费较长的时间,所以一般第一次解析就会把DNS解析 ...