我目前在读高中。我最近在浏览互联网,寻找软件行业的员工通常想要什么以及工作要求是什么样的。
我遇到了一份工作描述,其中一项要求是:
强大的、面向对象的设计和编码技能(最好在 UNIX 或 Linux 平台上使用 C/C++ 和/或 Java)
注意最后一部分:Java 最好在 UNIX 或 Linux 平台上。
我不明白这一点。Java不是在虚拟环境/机器中运行吗?既然 Java 不能直接与操作系统交互,为什么它运行在什么操作系统上会很重要?
出于以下几个原因,开发人员的职位描述可能需要使用某些操作系统的经验:
首先,正如您已经注意到的那样,有些语言直接与操作系统对话,并且代码需要了解底层操作系统(例如 C/C++,在您的职位描述中列出)。
其次,即使编程语言从您那里抽象出任何特定于操作系统的东西(包括文件系统/路径分隔符),您仍然要在某些操作系统之上部署/配置/运行/监控您的应用程序,您需要知道(至少)基础知识才能做到这一点。
对于 Java 工作描述,如果 UNIX/Linux “是一个加号”,通常意味着您将在 UNIX/Linux 系统上运行您的代码,并且您应该知道如何启动一个进程(您自己的 Java 应用程序或某个应用程序)服务器),如何在容器中部署应用程序,如何读取日志文件等等......
虽然从概念上讲,它不应该对执行 java 代码的目标平台有任何影响,但不幸的是,在实践中,让代码在任何平台上运行并不总是那么简单,而是一项相当乏味的任务。
从易于规避的错误开始,例如使用/
or\
代替java.io.File.separatorChar
或:
/;
代替 orjava.io.File.pathSeparatorChar
最常见的问题包括在本机代码中实现的方法通常在不同平台之间不兼容。
您的雇主甚至可能正在寻找native
使用 JNI 实现 java 方法的人。
Java 在不同的平台上没有区别。这是 Java 最突出的特性(可移植性)。JVM 抽象了底层平台。
但是,在软件开发方面,平台很重要,这不仅涉及编码部分。大多数行业中,开发人员通过登录终端在 Linux 平台上工作。您不会获得像 Windows 中那样的 GUI 和像 NetBeans 这样好的 IDE。因此,在这种情况下,您应该知道如何从终端编译和运行 java 程序。
例如,在 linux 中,为了创建一个包,你需要创建一个目录(文件夹),比如 myJava/。你进入它(cd myJava)并编写 SomeThing.java 文件并使用javac SomeThing.java进行编译,你会得到一个 SomeThing.class 文件(在 myJava 中)。现在为了执行这个,你需要使用java命令。在使用它之前,您需要移动到包含该包的父目录。然后作为java myJava.SomeThing执行。除非您在 Linux 平台上玩耍,否则您不会知道这一点。设置类路径等其他事情也值得关注
首先,Java 在虚拟机内部运行是对的——它不会直接向您公开系统的内部工作原理。然而,这并不意味着每个系统在某些方面没有区别——不同风格的操作系统有不同的内核、不同的调度方式、不同的线程处理方式和不同的中断链(Linux 有很多信号,而 Windows 有一些)。
就 Java(语言)而言,它在任何地方都运行相同。它的实际完成方式取决于它运行的本机 JVM。
不过,对于这个职位发布,我不会过多地阅读 UNIX/Linux 部分。这或多或少衡量了某人在编写 Java 时在 UNIX 或 Linux 环境中工作的舒适程度。大多数可用于 Java 的 IDE 都是跨平台的,但该商店可能使用的是 Mac 或某种 *nix(RHEL、Debian、Ubuntu 等)。使用命令行/shell 脚本也很重要,因为使用 UNIX/Linux 的许多便利都在命令行上。
并非每个商店都使用 Windows 机器进行开发。只是一个提示。