几十年来,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. 提高你的编码技巧

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

助你成为Java大神的十个建议相关推荐

  1. 卖任小龙java视频,任小龙Java大神之路(第九季 SpringMVC)视频教程叩丁狼教育出品...

    大家好咱们开始上课,在正式上课之前咱们先花点时间来对我们接下来的这个课程,然后做一个大概的一个介绍 之前咱们讲的这个spring帝国,讲了十分的核心,对吧?然后在当初的时候咱们还有一块内容是没有讲到的 ...

  2. java大神请出来_求java大神,请分析以下代码,写出执行结果,并解释每行结果输出的原因。...

    求java大神,请分析以下代码,写出执行结果,并解释每行结果输出的原因.classPlate{publicPlate(){System.out.println("inPlateconstru ...

  3. 周志明:职业电竞选手的Java大神路

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 简介: 作为豆瓣9.0评分的作者,周志明算得上是一位Java大神,而他却对此不以为意,坦白Java ...

  4. 用java编写圆锥_求java大神帮忙 求大神帮助!Java

    导航:网站首页 > 求java大神帮忙 求大神帮助!Java 求java大神帮忙 求大神帮助!Java 相关问题: 匿名网友: 普通类 public class CircularA { //求圆 ...

  5. 对话《深入理解Java虚拟机》作者周志明:电竞选手成为Java大神之路

    声明:本文由"阿里云MVP团队"原创,转载经"阿里云开发者社区"授权.原文标题:<职业电竞选手的Java大神路:对话阿里云MVP周志明>. 销售超过 ...

  6. Java页面跳转失效_求助各位java大神,为什么表单提交之后跳转页面失灵

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本人java菜鸟一枚请各位java大神帮忙看看为什么我的表单能提交,但是就是跳转不到处理页面,跳转功能时灵时不灵的.小女子在此先谢过了! 这下面是JQue ...

  7. 北京java培训,支付宝为何如此安全,有java大神做后盾

    目前支付宝的功能越来越好.越来越强大,使用起来非常方便,大部分人不管是外出旅游还是上班坐公交甚至是在小区门口买菜几乎都不带现金,仅有一个支付宝就够了.它确实给大家带来了很多的方便,同时节省了很多时间. ...

  8. Java大神进阶之路!每一位程序员值得借鉴!

    既然励志在java路上走的更远,那就必须了解java的路径.先看图 更加细化的细节如下 一: 编程基础 不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的数据结构和算法基础还 ...

  9. java 安全 支付宝_北京java培训,支付宝为何如此安全,有java大神做后盾

    原标题:北京java培训,支付宝为何如此安全,有java大神做后盾 目前支付宝的功能越来越好.越来越强大,使用起来非常方便,大部分人不管是外出旅游还是上班坐公交甚至是在小区门口买菜几乎都不带现金,仅有 ...

  10. Java大神推荐,java编程基础必备(必看)

    在没有以前的操作习惯的错误情况下,反而容易接受新知识,所以不要因为自己对java一无所知而自卑,相反,这是菜鸟们的优势,但是如何才能从一个菜鸟历练成大神呢,当然是需要学习了,不学习就想成为大神,就是在 ...

最新文章

  1. Linux上安装MongoDB
  2. 10 分钟入门 AST 代码优化与修改
  3. php generator for mysql中文版
  4. [Groovy] Groovy API
  5. [转]将Ubuntu默认的邮件客户端Evolution替换为Thunderbird
  6. mysql_fetch_array 失败_无语的出错,mysql_fetch_array()
  7. linux postgres恢复数据库,从纯文本格式的备份文件恢复数据库
  8. 《机器学习系列-强填EM算法在理论与工程之间的鸿沟(上)》
  9. 电路结构原理_精密半波、全波整流电路结构原理图解
  10. 日志打印出来的对象都是XXX@39ddf169这样的,怎么办?
  11. SpringBoot 之 跳转页面的几种方法
  12. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(7) - 80386/32位指令格式概述
  13. 【数据结构】图文讲解神奇的单链表与双链表
  14. leetcode链表--1、深拷贝链表
  15. 驴子圈资讯:携程移动端酒店预订首超PC端
  16. 源码构建python3
  17. 第八章 机器人语音交互 课后作业
  18. 【Python】如何用Python快速实现语音提醒功能
  19. 【C语言程序】求直角三角形边长
  20. 搭建一个misskey实例

热门文章

  1. 安装idea社区版并开发JavaWeb项目
  2. 中文汉字和英文数字的unicode编码范围
  3. 【算法】h0145. 会议安排(贪心算法)
  4. 【清华大学】深入理解操作系统(陈渝) 第二章
  5. 使用FTP服务器进行文件上传与下载
  6. ftp服务器下载,细数五款好用的ftp服务器下载软件
  7. 小米8开机android正在启动不了,小米无法开机解决办法【图文教程】
  8. 日本京瓷株式会社会长-稻盛和夫寄语汇总
  9. JAVAWEB NOTE 3
  10. cad修改快捷键_CAD大神总结:100个CAD快捷键+20个CAD制图技巧