潜在的 Java 低年级学生需要了解什么才能获得第一份工作,甚至有资格获得好公司的实习生职位?哪些工具可以帮助Java程序员达到一个新的水平?您应该学习哪些技术,哪些技术最好推迟?

这些问题没有标准答案,就像没有一个行动计划绝对适合每个人一样。一些公司正在争取开发,不断引进新技术,测试新版本的语言功能,而另一些公司则顽固地坚持使用旧版本。也有中间的选择,也许这些是其中大多数。

我经常被问到这个问题,我决定写一篇文章,然后我可以参考,以便回答它。此外,它不仅对那些亲自询问我的人有用,而且对于已经决定(或没有决定)将他们的生活与Java编程连接的人也很有用。


我用什么来源来回答文章的主要问题?

为了尽可能完全地回答本文的主要问题,我依靠:

  • 作为一名高级 Java 开发人员, 我采访了很多潜在的 Java 低年级学生
  • 我作为导师的经验(或者更确切地说,我的学生的经验)
  • CodeGym 门户为校友进行的一项调查结果
  • 来自互联网论坛的一些答案

首先: 核心 Java 是必须的

_核心Java_通常意味着编程语言的基本基础。它包含以下组件。

Java 语法

  • 类、变量和方法
  • 原始数据类型
  • 字符串
  • 基本运算符
  • 基本结构:环路、分支

Java语法是一种语言的ABC。学生通过做来学习它,就像小孩子学习阅读和写作一样。这里最困难的概念是编程的原则,如循环和分支。对于绝对的初学者来说,它们可能很难,但通常在编码某些任务之后,未来的程序员开始感觉到它们。

在获得作为Java开发人员或Java实习生的第一份工作之前,92.4%的程序员知道Java语法的优异或优秀水平。那另外 7.6% 呢?他们在中级水平上知道这一点,并幸运地得到一个实习生的优惠。然而,这纯粹是运气。每个申请人都必须精通 Java 语法,谢天谢地,它快速且易于掌握。

面向对象的编程 (OOP)

Java 和 OOP 几乎是同义词,因为此编程语言中的一切都是对象。

如果你习惯于过程编程,那么首先重新排列和思考对象样式可能比较棘手。然而,事实上,OOP并不难。此外,这是一个非常美丽的概念。编写大量代码很重要,同时考虑如何构建对象层次结构。

OOP 的主要子主题是类继承、接口实现、数据和行为抽象、数据和类实现封装、多态性以及虚拟方法。

最多 (80.3%)获得第一个与 Java 相关的工作的人对 Oop 原则了解得很好, 并且一直使用它们。

然而,“好知识"有时可能有不同的定义,这取决于你的经验。“我阅读了关于 OOP 和使用的继承和封装。我以为我很清楚,但我意识到,我似乎知道的东西之前,但不明白的细微差别。在作为Java实习生从事一个大项目的工作期间,我才真正对抽象层次以及如何使用它们有了深刻的理解,“Andy说,他现在在一家国际外包公司担任Java初级。

根据 CodeGym Portal 调查,78.8% 的 Java 低年级学生和受训人员经常使用 OOP,12.1% 的学员很少使用 OOP,7.6% 的受训者很少使用 OOP(通常他们从事单元测试和不同的小任务)。

集合框架

一组表示为单个单元的单个对象是集合。Java 为不同的集合提供了一个集合框架。集合基于流行的数据结构:列表、常规和连接、集、哈希映射等。因此,在研究馆藏时,对数据结构也更加熟悉一点也很不错。 主子主题:

  • List
  • Set
  • Map
  • ArrayList
  • LinkedList
  • Queue
  • Deque
  • HashSet
  • HashMap
  • HashTable
  • TreeSet
    了解集合的主要困难是找出它们是如何工作的以及何时使用哪个结构。它伴随着实践。此外,在实际工作中,只有很少的结构被不断使用。作为教程,重新创建自己的集合版本非常有用。几乎所有 (96.9%)Java 的低年级学生和受训人员在第一份工作上使用收集框架,80.3% 的受访者在获得第一份工作之前已经知道收藏水平良好或优秀。
  • TreeMap

11111111.png

异常处理

异常是执行程序时可能出现的异常情况。所有异常类都是类的子类型。异常处理机制显著简化了程序中的错误捕获过程。通常,学生很早就开始使用例外,这个话题绝对值得你注意。 主子主题:java.lang.Exception

  • 异常处理机制
  • 尝试捕捉最后
  • 投掷,投掷
  • Java 中异常的层次结构
  • 已选中/未选中的异常
  • 错误和异常的区别
  • 无法访问 catch 块错误
  • 手动异常引发

每个Java实习生和Java初级学生都会在工作上使用例外,面试官经常询问有关这种机制的问题。

Java 输入/输出流

Java 使用流执行输入和输出操作。流是一种连续的数据流。在Java程序中,您需要经常读取或写入数据。对于初学者来说,这不是最简单的话题,有时在新手的工作中不经常使用它(这真的取决于他们从事的项目)。嗯,22.7%的人谁得到了他们的第一个Java初级/实习生的工作说,他们经常使用 I/O 流,31.8%不时,25.8%很少。因此,只有不到 20% 的人在第一年担任 Java 开发人员的角色时,没有使用它们。

主子主题:

  • 字节流 (,FileInputStream``````FileOutputStream)
  • 字符流 (,FileReader``````FileWriter)
  • 标准流 (,System.in``````System.out)

Java 多线程/并发

在这里,我们得到了最先进的核心Java主题。几乎所有的学生在理解和使用多线程方面都有困难,但后来,当他们在与不同线程杂耍方面达到禅宗时,程序员开始了解这种技术在Java中的实现效果如何,以及它的成效。

然而,如果很难为你,多线程是你不需要深入到一开始的主题。因此,只有12.1%的受访者指出,他们在第一次提出之前对这个话题了解程度不错,而31.8%的受访者承认他们对此主题一无所知。多数 (56.2%)被调查者说, 当他们开始的时候, 他们对多线程 “有一些想法” 。因此,多线程可能是您在 Java 初级面试中的竞争优势。它由你深入到它或得到初步的想法。解决一些编码问题,并专注于其他主题。

主子主题:

  • 线程的生命周期(新线程、可运行线程、等待线程、分时等待线程、终止线程)
  • 守护 进程
  • 线程同步
  • 处理线程死锁
  • 线程操作
  • Wait, ,notify``````notifyAll
  • 中断线程
  • Sleep, ,yield``````join

在作为Java实习生或初级开发人员的第一年,9.1%的人经常使用多线程,36.4%的人经常使用多线程,而39.4%的人很少使用多线程。

兰姆达表达式

Java lambda 表达式出现在 Java 8 中,但初学者经常忽略这个方便的工具。Lambdas 扩展了 Java,使函数编程概念在此语言中可用。lambda 表达式是一个函数,可以在不属于任何类的情况下创建该函数,您可以将其作为对象传递或按需执行。只有22.7%的受访者在第一份工作之前就已经知道了兰巴达,而48.5%的受访者估计他们对这个话题的了解"接近于零”。同时,超过85%的新程序员说,他们在第一个工作年使用 lambda表达式。

主子主题:

  • 兰姆达斯,单方法接口
  • 匿名接口实现
  • 兰姆达类型推理
  • 兰姆达参数
  • 兰姆达功能主体
  • 从 lambda 表达式返回值
  • 兰姆达斯作为对象
  • 可变捕获
  • 方法引用作为 lambdas

22222222.png

因此,我们可以说,任何潜在的Java初级甚至实习生都必须遵守核心Java知识。当然,如果你完全了解所有主题,你可以得到一个报价,多线程和 lambda 表达式要少一些。但是,这些主题可以成为您找工作时的竞争优势。总之,你很可能需要同时使用这两种工作。

在我的实践中,我遇到了一些工作的人,他们只知道基本概念——Java语法和OOP。他们大多数情况下都是Java的学员,但有时我遇到一个几乎为零的Java初级技能的人。一方面,他们很幸运:他们实现了成为程序员的梦想,可以直接从工作任务中学习。另一方面,雇主很快意识到他们的技能水平很弱,而且长期以来,他们接受了同样类型的单调任务,这常常令人沮丧。我给这些程序员的建议是加快成长速度,直到你厌倦了这一切。解决实际问题,阅读 ,然后进入下一阶段。

在其中学习核心 Java 主题

CodeGym是我最喜欢的在线课程之一,专门介绍核心 Java。你可以在这里找到所有的核心Java主题(目前除了 lambdas)和超过1,200个练习。 Lambda 的jenkov.com有一个不错的教程,在那里你可以找到你需要知道的关于 lambdas 的一切。 代码学院上的 Java。CodeCademy 是最著名的实践学习平台之一。在本课程中,您可以找到大多数核心 Java 主题。


算法和数据结构:值得怀疑

学习编程语言中最具争议的问题之一是学生是否应该学习标准排序和搜索算法。一方面坚持认为,所有有效的算法早已被编写出来,并包含在库中。因此,任何人都可以只使用它们。

他们的对手确信,自己编写算法是程序员思维的一次极好的练习,此外,它也是对它在学生中存在的测试。我更可能属于后者,特别是考虑到在Java初级面试中,他们经常被要求编写一种或另一种算法,有时甚至写在一张纸上。尽管算法知识与 Java 知识无关,但我建议所有未来的程序员都研究这个主题。这不是多余的。

33333333.png

另一件事是,在程序员的实际工作中,你很可能不需要气泡排序算法等。知道在哪些库中可以找到标准算法就更加重要了。在调查中,69.6%的学生声称,在接受第一份工作之前,他们了解并编码了排序和搜索算法,其排序和搜索算法处于良好和平均水平。

44444444.png

当我们谈到Java集合时,我们已经谈到了数据结构的话题。再次,我认为有必要了解他们的体系结构,以便知道在哪里和使用什么,以及为什么。因此,我经常要求我的学生为这个或那个数据结构编写自己的课程。

55555555.png

同样,在工作期间,每个人通常使用标准数据结构,而不是全部使用。

66666666.png

在哪里学习算法和数据结构

首先,你可能会发现一本好书,如罗伯特·西奇威克和凯文·韦恩的《算法》。此外,相同的作者有一个在线课程的 Coursera。这个是我的最爱之一,它使用 Java 。 GeeksForGeeks是一个巨大的在线社区,在那里你可以找到很多的算法讲座和练习。


单元测试

每个优秀的程序员都可以测试代码,而不只是他们自己的,所以学习如何为代码编写单元测试。有时新手忽略单元测试更喜欢验证类型(如果您已经尝试编写代码,你知道我的意思)。请记住,单元测试比使用控制台输出进行检查有用得多。单元测试也是公司通常信任新开发人员编写的第一件事。调查显示,57.5%的受访者在第一次成功的Java相关面试之前使用JUnit,超过83%的受访者在第一个工作年就已经使用过单元测试。System.out.println

在哪里学习单元测试

那么,找到一个教程(例如这个视频教程或这个文本教程),然后创建测试的所有代码!


实用程序库和有用组件

一些雇主希望未来的程序员知道一些工具和库,以帮助他们的工作。

  • Servlet 是扩展服务器功能的 Java 软件组件。
  • JDBC 是 Java 应用程序和数据库之间交互的独立于平台的标准。JDBC 是 JavaSE(标准版)中包含的 java.sql 包实现的。
  • log4j 是记录消息的最著名的库。它允许您在 Java 代码中编写库调用,然后灵活地自定义它,而无需更改已编写的代码。
  • 杰克逊/杰森。JSON(JavaScript 对象表示法)是一种非常受欢迎的开放标准文件格式和数据交换格式,而 Jackson 是 Java 的高性能 JSON 处理器。

77777777.png

超过一半的受访者在获得第一份与Java相关的工作之前已经知道了这些技术。所有新人都使用 JSON/Jackson 的工作,他们中的大多数都使用 JDBC (84.8%)或 log4j2 (83.3%)。三分之二的受访者在第一年就使用Servlet作为Java低年级学生和受训者。

  • 番石榴是Java的一套开源公共库,主要由谷歌工程师开发。
  • Apache 共享是一个巨大的 Apache 项目,专注于可重用 Java 组件的所有方面。

88888888.png

在学习期间,我建议你花时间去记录4j、JSON、JDBC(连同SQL和数据库工具)。但是,列表中的其他技术以及库中的其他技术也很有用。

在哪里学习实用程序库和有用的组件

  • 关于 Udemy 教程点或视频课程上的 log4j 的文本教程
  • CodeGym 的课程中包含一些 JSON、log4j、JDBC 主题和练习。
  • 埃多雷卡的 Java Servlet

弹簧/休眠

前一段时间,没有人要求初级学生了解框架,更不用说实习生了。然而,时代在变化,如果你不了解这些技术,一些公司就不会进入。学会与他们一起工作是非常困难的,虽然是可能的。然而,在这种情况下,我建议找到课程,并这样做与导师。

99999999.png

  • Spring——33.3%的受访者估计他们对Spring的了解是"好或优”,而21.2%的受访者对此框架一无所知。
  • Spring Boot – 42.4% 的受访者知道Spring Boot(好或优秀水平),36.4% 的人不知道。
  • Hibernate = 43.9% 的人知道 Hibernate 处于良好或出色的水平,而 27.3% 的人从未尝试过。
  • 用于 RESTful Web 服务的 Java API – 90.9% 在工作期间使用它。

101010101010.png

在哪里学习Spring/休眠

正如我之前说过的,学习Spring和Hibernate最好的方法就是找一个小团队和一个导师的课程,但这并不总是可能的。我找到了一些有趣的资源来学习它们。

Spring教程关于白 东Spring实用 任务Spring教程和弹簧靴指南spring.io Hibernate和Spring在 Udemy RESTful API上 Udemy


设计与架构模式与编程原则

设计模式是解决某些具体问题的经过验证的解决方案。如果你不认识他们,你让你未来的雇主头疼。花时间阅读有关模式的信息,并在实践中应用它们。与体系结构模式(例如 MVC)相同。我总是要求我的学生使用 MVC 创建一些程序。它变得困难得多,但在那之后,他们知道如何使用它。

此外,根据 KISS、DRY 和 SOLID 原则,阅读简单且可读良好的代码也是有益的。老实说,它们很容易理解,但在实践中使用它们需要时间。因此,当我面试初级职位的申请人时,我从未要求申请人对这些原则有扎实的了解,并意识到这些原则是实践的。

在其中学习和阅读有关模式和原则的地方

重构大师固体 , 吻, 干, 雅格尼


构建自动化工具、应用程序服务器和非 Java

大多数 IT 专业人员应该拥有一些技术和技能。它们与Java没有直接关系,但我仍然会提到它们——在初始层面上研究它们并不难。此外,最好在开始工作之前完成,因为此时您没有时间处理它们。

1111111111111111.png

1212121212121212.png

在什么地方学习构建自动化工具、应用程序服务器和非 Java

gradle maven tomcat7 JBossSQL, jsJavaScript HTML CSS


结论

嗯。。。看起来有点吓人,不是吗?另一方面,如果你喜欢编程,对技术感兴趣,并决心成为一名程序员,那么没有必要害怕。一步一步的工作,练习,学习,愿力量与你在一起。这条路将由走路的人掌握。