助你成为Java大神的十个建议

简介: 助你成为Java大神的十个建议

几十年来,Java 一直是最受欢迎的编程语言之一。想成为专家的人越来越多。因为竞争激烈,仅仅成为一名优秀的 Java 开发人员已经不够了------你需要获得深厚的知识并熟悉许多概念才能在竞争中领先。如果您一直在问自己"作为一名 Java 开发人员,我应该学习什么才能脱颖而出?",这篇博文可以帮助您解决问题。


1.对OOP原则有一个坚实的基础和清晰的认识

Java 是一种面向对象的语言,因此开发人员不应低估 OOP 原则,而应努力深入了解该概念。学习如何在编程时应用 OOP 原则,并深入了解对象建模、SOLID 原则、设计模式、继承和其他概念。这些是您在编写软件时应该牢记的事情,尤其是在现代面向对象语言中。


2. 阅读涵盖这些原则的书籍

掌握这些概念将帮助您轻松构建应用 OOP 原则的项目。一些我认为是开发人员必读的经典书籍中涵盖了许多概念:


  • “设计模式:可重用面向对象软件的元素”,“四人帮”
  • “鲍勃叔叔"罗伯特-马丁的"清洁代码”
  • “鲍勃叔叔"罗伯特-马丁的"清洁建筑”
  • Martin Fowler 和 Kent Beck 的"重构"(第 2 版)
  • Kent Beck 的"极限编程解释"
  • Kent Beck 的"测试驱动开发:示例"

3.熟悉Spring框架

Spring框架在现代Java开发中扮演着重要的角色。Spring框架组件,如Spring MVC和Spring Boot,通常被公司用于构建微服务或web应用程序。了解Spring框架所有优点的开发人员更有可能在他们的领域中脱颖而出,将本地Java方法转换为管理操作或远程过程。


如果您以前从未使用过Spring,那么第一步是熟悉Spring的基本内容,比如依赖注入(DI)、控制反转(IoC)和Spring MVC的一般原理。


下一个里程碑无疑是Spring Boot以及它为构建和运行web应用带来的能力。了解它提供的主要重要注释及其行为,并考虑一般的Spring注释(特别是如果您来自更基于xml的背景)。

像@Repository、@Service和@Controller或@RequestMapping这样的工具将成为你的日常伙伴。试着用它们构建一个小型的web应用程序。当然,为了学习这些知识,您需要很好地理解设计模式,以及这些注释定义的组件应该如何相互交互。


与以前使用Java使用的其他部署选项相比,使用Spring Boot启动和运行新创建的应用程序是如此容易,您会感到惊讶。这个框架的目的是简化你的生活非常,让你获得一个可运行的“全包”的. jar文件,你可以从命令行运行在您的计算机上,从码头工人容器,或部署Linux作为一个正常服务和把它背后Nginx如果你不使用码头工人在生产。


下一个您肯定希望尽早学习的Spring组件是Spring安全性。设置对端点和服务的适当访问所需的一切、身份验证和授权、登录、注册以及不同的安全提供者,您都可以在这里找到。

另一个你可能在很多项目中遇到的相当大的组件是Spring Data。它为数据访问提供了方便而优雅的抽象。它本身不是ORM,也不是JPA实现——它只是在ORM之上提供了一个通用的抽象,允许您减少数据操作所需的代码量,并使其简单易懂且可支持。


最后,一个值得明确提到的组件(不要忘记整个Spring是巨大的)是Spring AOP(面向方面编程)。它提供了一种包括各种注释的方法,以声明方式控制代码行为的多个方面,如日志、异常或事务。理解这种哲学和方法将会在任何工作面试中对你有帮助。


毫无疑问,Spring是Java世界中的一条大鱼,但它不是唯一的一条。并不是每个Java开发人员都想完全屈服于Spring的主导地位——有些人想专攻不同的技术,并在不同的领域深入研究。对于这些开发人员,我会区分Java EE堆栈。虽然已经很老了,但它仍然存在,特别是在一些较老的大型项目中。


4. 学习最重要的 API 和库

api和库处于Java底层,所以如果你想脱颖而出,了解它们是很重要的。他们是Java生态系统的一个组成部分,在StackOverflow问答网站上拥有第二大社区。


这是一个非常广泛的主题,同时包含很多内容——我可以写十几篇文章来讨论它——但总的来说,对核心api、主库和第三方库以及Java开发工具包(JDK)的深入了解,定义了一个高技能的Java开发人员。为了避免混淆,我应该说,专家不应该学习所有可能的api,也不应该知道库中的每一个元素。对Apache Commons、Guava、Maven和其他一些主要的api和库有一个清晰的理解就足够了。


5. 深入了解 Java 11

最近,Java开发人员社区见证了Java 15的上一个版本的发布。然而,当涉及到采用任何新版本时,Java领域的软件开发流程通常是相当缓慢的——“如果它没有损坏,就不要修复它”的原则在企业项目中尤其受欢迎。


在这些项目中发生的每一个小的变化都必须符合高安全性的要求,并且使用旧的技术是很常见的。例如,在银行、航空公司或保险系统中,你不太可能遇到任何少于五年的技术。这就是为什么“老”意味着稳定、可靠和安全。


尽管如此,新版本在这些领域也得到了缓慢但稳定的采用。在每一个新版本发布后,越来越多的公司会要求你熟悉新特性。Java 8是当时的一个重大突破,它花了几年时间才成为行业标准。如果不掌握这个版本的Stream API、默认接口方法、Lambda表达式、Java Time API和其他主要特性,你绝对“不能通过”。


最新的Java版本保持了主动特性的采用。下一个LTS版本是Java 11——这是你现在在工作中经常遇到的一个。许多公司不会从它切换到下一个LTS发布,预计Java 17将于2021年9月发布。我绝对不建议您在接触和熟悉所有Java 11特性之前就开始找工作。


后来的Java版本,如上面提到的多达15个,在某种程度上仍处于获得更广泛采用的过程中,但它们已经在使用了相当多。例如,已经有一个Amazon Corretto 15版本可用。

无论是哪种方式,优秀Java开发人员的一个重要实践是非常认真地遵循每个新发行版,并迅速熟悉所有的新特性。任何一个都不能忽视。


6. 关注 JVM 及其内部结构

没有 JVM(Java 虚拟机),Java 就不存在。它是一个运行时引擎,允许 Java 应用程序在任何可能的平台上运行。所以,如果你想加入一群优秀的Java开发者,了解JVM工作原理是必须的。除此之外,虚拟机的知识将帮助您在开发过程中解决问题。因此,除其他外,请确保掌握 JVM 系统线程以及 Java 在运行时环境中的执行方式。


7. 手头有多种方法论

如果您想领先于许多其他Java程序员,就应该特别注意不同的方法。首先,要熟悉敏捷,特别是SCRUM,但也要理解瀑布,并准备好使用它。只要许多开发人员根据客户的偏好选择方法,了解他们中的许多人将有助于您在此之上。


此外,您还可以学习极限编程技术(上面提到了Kent Beck的经典著作),以获得更丰富的经验和有效的工作。


8.习惯自动化测试

真正的Java开发人员与那些试图看起来像Java开发人员的区别在于进行自动化测试的能力。简单地说,任何非手动的测试都可以被认为是自动化的:单元测试、集成测试和其他测试,如果你想成为一名优秀的Java程序员,这些测试都需要改进。您还应该了解如何以这样一种方式交付项目:测试是CI/CD管道的一部分,如果测试没有涵盖某些重要部分,代码就不会投入生产。


下面是您的开发和进一步部署流在测试后的样子。


您开发应用程序的一个组件,并使用单元测试覆盖它,直到继续进行下一个组件。

如果您完全遵循此实践,您可能会注意到它如何隐式地迫使您保持良好的代码模块化。一个好的单元测试允许您独立运行组件的代码。您不能使用数据库、外部api或依赖其他类。此刻只有你的组件在现场。


您向它提供您精确地组合在一起的演示数据,考虑所有边缘情况,如空值或空值,然后检查输出是否完全如预期的那样。这样做之后,您就可以确定您的组件不是故障的来源,您可以在其他地方仅仅依赖于它的逻辑。JUnit 5和Mockito是你最好的朋友——每天掌握和使用它们。


另外,在编写测试用例和测试时,甚至在编写组件代码本身之前,就使用TDD。


在像这样开发所有组件之后,您需要提供自动集成测试。

在大多数情况下,这只是意味着用一个简单的脚本以编程方式利用您的应用程序,使用一些输入数据运行它,并控制输出(您经常在Docker容器中这样做)。然而,有时这意味着测试单独的组件或组件链,但这一次使用真实的外部资源,如数据库或文件存储。


无论哪种方式,考虑你可以全局拥有哪些输入边情况,并检查你的应用能否正确处理这些情况。


3.最后,应该将测试嵌入到CI/CD管道中。

一种经典的现代方式是,一旦你将代码提交到Git仓库中,无论是提交、拉取请求,还是合并到特定的分支,就会触发一个Hook。这将运行一个部署脚本并利用一个Docker容器,该容器将根据您的部署尝试构建您的应用程序,或为您的应用程序构建一个Docker映像。


无论哪种方式,如果应用被成功构建(如果没有,你会自动从生产中受到破坏的应用的保护),它会尝试在容器中运行你的所有测试,包括单元和集成。如果任何一个测试失败,整个过程就会失败,Git不会自动批准pull请求,或者只是让构建失败。


这一流程的一些细节会有所不同,但通常情况下,这种应用交付方法将为你带来明确的质量控制,为你在应用生产过程中崩溃时节省时间。


9. 提高你的编码技巧

编程主要是练习。不管你读了多少书,它们都不会像你在实践中磨练了知识那样有效。幸运的是,现在的编码并不像你想象的那么无聊——网络上有许多游戏化平台让编码变得有趣。


相关文章
|
缓存 小程序 JavaScript
从零开始搭建uni-app框架的小程序开发环境
从零开始搭建uni-app框架的小程序开发环境
1429 0
从零开始搭建uni-app框架的小程序开发环境
|
9月前
|
缓存 前端开发 NoSQL
如何开发工程项目部管理系统中的进度管理板块(附架构图+流程图+代码参考)
本文介绍如何构建一个高效的工程项目进度管理板块,涵盖系统架构、数据模型、核心功能、业务流程及开发技巧。内容包含四个关键代码示例,便于快速落地开发,帮助解决进度不准与沟通不畅两大工程难题。
|
缓存 Linux
【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
4195 1
【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
|
数据采集 人工智能 自然语言处理
阶跃星辰联合光影焕像开源 3D 大模型 Step1X-3D,高保真+可控!
阶跃星辰联合光影焕像开源 3D 大模型 Step1X-3D,高保真+可控!
458 4
|
Java
问题2:IDEA控制台输出中文乱码以及出现错误(编码 GBK 的不可映射字符 (0xB0))的解决办法
问题2:IDEA控制台输出中文乱码以及出现错误(编码 GBK 的不可映射字符 (0xB0))的解决办法
3819 4
|
弹性计算 Serverless 数据库
阿里云中小企业扶持权益!
阿里云为中小企业提供全面扶持,涵盖云资源、技术服务、建站营销、算力补贴及出海支持等,助力企业数字化转型与国际化发展。
553 15
|
机器学习/深度学习 自然语言处理
【机器学习】如何进行中文命名实体识别?(面试回答)
中文命名实体识别的基本概念、分类、识别思想、实体标注方法以及常见的识别方法,包括基于规则、基于统计和基于深度学习的方法。
560 1
【机器学习】如何进行中文命名实体识别?(面试回答)
|
前端开发
前端使用xlsx模板导出表格
【9月更文挑战第10天】在前端使用 `xlsx` 模板导出表格需完成以下步骤:首先引入 `xlsx` 库,准备数据与模板;接着读取模板文件,选择特定工作表并填充数据;最后将填充后的表格转换为二进制数据,创建 Blob 对象并触发下载。整个过程中可根据需求调整模板格式和数据填充方式。
687 6
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
532 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
前端开发 网络协议 JavaScript
Linux系统下安装配置 Nginx 详细教程介绍
然后我们找到一个版本,把鼠标移动到上面,右键 - 复制链接地址我们使用 wget 命令把Nginx安装包下载到/usr/local/目录中下载nginx安装包下载好包之后,解压安装包。
931 0

热门文章

最新文章