分类 技术 下的文章

在 Manjaro 18.0(Illyria)发布一年之际,该团队发布了他们的下一个重要版本,即 Manjaro 18.1,代号为 “Juhraya”。该团队还发布了一份官方声明,称 Juhraya 包含了许多改进和错误修复。

Manjaro 18.1 中的新功能

以下列出了 Manjaro 18.1 中的一些新功能和增强功能:

  • 可以在 LibreOffice 或 Free Office 之间选择
  • Xfce 版的新 Matcha 主题
  • 在 KDE 版本中重新设计了消息传递系统
  • 使用 bhau 工具支持 Snap 和 FlatPak 软件包

最小系统需求

  • 1 GB RAM
  • 1 GHz 处理器
  • 大约 30 GB 硬盘空间
  • 互联网连接
  • 启动介质(USB/DVD)

安装 Manjaro 18.1(KDE 版)的分步指南

要在系统中开始安装 Manjaro 18.1(KDE 版),请遵循以下步骤:

步骤 1) 下载 Manjaro 18.1 ISO

在安装之前,你需要从位于 这里 的官方下载页面下载 Manjaro 18.1 的最新副本。由于我们这里介绍的是 KDE 版本,因此我们选择 KDE 版本。但是对于所有桌面环境(包括 Xfce、KDE 和 Gnome 版本),安装过程都是相同的。

步骤 2) 创建 USB 启动盘

从 Manjaro 下载页面成功下载 ISO 文件后,就可以创建 USB 磁盘了。将下载的 ISO 文件复制到 USB 磁盘中,然后创建可引导磁盘。确保将你的引导设置更改为使用 USB 引导,并重新启动系统。

步骤 3) Manjaro Live 版安装环境

系统重新启动时,它将自动检测到 USB 驱动器,并开始启动进入 Manjaro Live 版安装屏幕。

Boot-Manjaro-18-1-kde-installation

接下来,使用箭头键选择 “ 启动:Manjaro x86_64 kde Boot: Manjaro x86_64 kde ”,然后按回车键以启动 Manjaro 安装程序。

安装 4) 选择启动安装程序

接下来,将启动 Manjaro 安装程序,如果你已连接到互联网,Manjaro 将自动检测你的位置和时区。单击 “ 启动安装程序 Launch Installer ”,开始在系统中安装 Manjaro 18.1 KDE 版本。

Choose-Launch-Installaer-Manjaro18-1-kde

步骤 5) 选择语言

接下来,安装程序将带你选择你的首选语言。

Choose-Language-Manjaro18-1-Kde-Installation

选择你想要的语言,然后单击“ 下一步 Next ”。

步骤 6) 选择时区和区域

在下一个屏幕中,选择所需的时区和区域,然后单击“ 下一步 Next ”继续。

Select-Location-During-Manjaro18-1-KDE-Installation

步骤 7) 选择键盘布局

在下一个屏幕中,选择你喜欢的键盘布局,然后单击“ 下一步 Next ”继续。

Select-Keyboard-Layout-Manjaro18-1-kde-installation

步骤 8) 选择分区类型

这是安装过程中非常关键的一步。 它将允许你选择分区方式:

  • 擦除磁盘
  • 手动分区
  • 并存安装
  • 替换分区

如果在 VM(虚拟机)中安装 Manjaro 18.1,则将看不到最后两个选项。

如果你不熟悉 Manjaro Linux,那么我建议你使用第一个选项( 擦除磁盘 Erase Disk ),它将为你自动创建所需的分区。如果要创建自定义分区,则选择第二个选项“ 手动分区 Manual Partitioning ”,顾名思义,它将允许我们创建自己的自定义分区。

在本教程中,我将通过选择“ 手动分区 Manual Partitioning ”选项来创建自定义分区:

Manual-Partition-Manjaro18-1-KDE

选择第二个选项,然后单击“ 下一步 Next ”继续。

如我们所见,我有 40 GB 硬盘,因此我将在其上创建以下分区,

  • /boot – 2GB(ext4)
  • / – 10 GB(ext4)
  • /home – 22 GB(ext4)
  • /opt – 4 GB(ext4)
  • 交换分区 Swap – 2 GB

当我们在上方窗口中单击“ 下一步 Next ”时,将显示以下屏幕,选择“ 新建分区表 new partition table ”:

Create-Partition-Table-Manjaro18-1-Installation

点击“ 确定 OK ”。

现在选择可用空间,然后单击“ 创建 create ”以将第一个分区设置为大小为 2 GB 的 /boot

boot-partition-manjaro-18-1-installation

单击“ 确定 OK ”以继续操作,在下一个窗口中再次选择可用空间,然后单击“ 创建 create ”以将第二个分区设置为 /,大小为 10 GB:

slash-root-partition-manjaro18-1-installation

同样,将下一个分区创建为大小为 22 GB 的 /home

home-partition-manjaro18-1-installation

到目前为止,我们已经创建了三个分区作为主分区,现在创建下一个分区作为扩展分区:

Extended-Partition-Manjaro18-1-installation

单击“ 确定 OK ”以继续。

创建大小分别为 5 GB 和 2 GB 的 /opt 和交换分区作为逻辑分区。

opt-partition-manjaro-18-1-installation

swap-partition-manjaro18-1-installation

完成所有分区的创建后,单击“ 下一步 Next ”:

choose-next-after-partition-creation

步骤 9) 提供用户信息

在下一个屏幕中,你需要提供用户信息,包括你的姓名、用户名、密码、计算机名等:

User-creation-details-manjaro18-1-installation

提供所有信息后,单击“ 下一步 Next ”继续安装。

在下一个屏幕中,系统将提示你选择办公套件,因此请做出适合你的选择:

Office-Suite-Selection-Manjaro18-1

单击“ 下一步 Next ”以继续。

步骤 10) 摘要信息

在完成实际安装之前,安装程序将向你显示你选择的所有详细信息,包括语言、时区、键盘布局和分区信息等。单击“ 安装 Install ”以继续进行安装过程。

Summary-manjaro18-1-installation

步骤 11) 进行安装

现在,实际的安装过程开始,一旦完成,请重新启动系统以登录到 Manjaro 18.1 KDE 版:

Manjaro18-1-Installation-Progress

Restart-Manjaro-18-1-after-installation

步骤 12) 安装成功后登录

重新启动后,我们将看到以下登录屏幕,使用我们在安装过程中创建的用户凭据登录:

Login-screen-after-manjaro-18-1-installation

点击“ 登录 Login ”。

KDE-Desktop-Screen-Manjaro-18-1

就是这样!你已经在系统中成功安装了 Manjaro 18.1 KDE 版,并探索了所有令人兴奋的功能。请在下面的评论部分中发表你的反馈和建议。


via: https://www.linuxtechi.com/install-manjaro-18-1-kde-edition-screenshots/

作者:Pradeep Kumar 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用事先设计好的故障以确保你的代码达到预期的结果,并遵循 .NET xUnit.net 测试框架来进行测试。

在变异测试是 TDD 的演变 一文中,我谈到了迭代的力量。在可度量的测试中,迭代能够保证找到问题的解决方案。在那篇文章中,我们讨论了迭代法帮助确定实现计算给定数字平方根的代码。

我还演示了最有效的方法是找到可衡量的目标或测试,然后以最佳猜测值开始迭代。正如所预期的,第一次测试通常会失败。因此,必须根据可衡量的目标或测试对失败的代码进行完善。根据运行结果,对测试值进行验证或进一步加以完善。

在此模型中,学习获得解决方案的唯一方法是反复失败。这听起来有悖常理,但它确实有效。

按照这种分析,本文探讨了在构建包含某些依赖项的解决方案时使用 DevOps 的最佳方法。第一步是编写一个预期结果失败的用例。

依赖性问题是你不能依赖它们

正如 迈克尔·尼加德 Michael Nygard 在《没有终结状态的架构》中机智的表示的那样,依赖问题是一个很大的话题,最好留到另一篇文章中讨论。在这里,你将会看到依赖项给项目带来的一些潜在问题,以及如何利用测试驱动开发(TDD)来避免这些陷阱。

首先,找到现实生活中的一个挑战,然后看看如何使用 TDD 解决它。

谁把猫放出来?

 title=

在敏捷开发环境中,通过定义期望结果开始构建解决方案会很有帮助。通常,在 用户故事 user story 中描述期望结果:

我想使用我的家庭自动化系统(HAS)来控制猫何时可以出门,因为我想保证它在夜间的安全。

现在你已经有了一个用户故事,你需要通过提供一些功能要求(即指定验收标准)来对其进行详细说明。 从伪代码中描述的最简单的场景开始:

场景 1:在夜间关闭猫门

  • 用时钟监测到了晚上的时间
  • 时钟通知 HAS 系统
  • HAS 关闭支持物联网(IoT)的猫门

分解系统

开始构建之前,你需要将正在构建的系统(HAS)进行分解(分解为依赖项)。你必须要做的第一件事是识别任何依赖项(如果幸运的话,你的系统没有依赖项,这将会更容易,但是,这样的系统可以说不是非常有用)。

从上面的简单场景中,你可以看到所需的业务成果(自动控制猫门)取决于对夜间情况监测。这种依赖性取决于时钟。但是时钟是无法区分白天和夜晚的。需要你来提供这种逻辑。

正在构建的系统中的另一个依赖项是能够自动访问猫门并启用或关闭它。该依赖项很可能取决于具有 IoT 功能的猫门提供的 API。

依赖管理面临快速失败

为了满足依赖项,我们将构建确定当前时间是白天还是晚上的逻辑。本着 TDD 的精神,我们将从一个小小的失败开始。

有关如何设置此练习所需的开发环境和脚手架的详细说明,请参阅我的上一篇文章。我们将重用相同的 NET 环境和 xUnit.net 框架。

接下来,创建一个名为 HAS(“家庭自动化系统”)的新项目,创建一个名为 UnitTest1.cs 的文件。在该文件中,编写第一个失败的单元测试。在此单元测试中,描述你的期望结果。例如,当系统运行时,如果时间是晚上 7 点,负责确定是白天还是夜晚的组件将返回值 Nighttime

这是描述期望值的单元测试:

using System;
using Xunit;

namespace unittest
{
   public class UnitTest1
   {
       DayOrNightUtility dayOrNightUtility = new DayOrNightUtility();

       [Fact]
       public void Given7pmReturnNighttime()
       {
           var expected = "Nighttime";
           var actual = dayOrNightUtility.GetDayOrNight();
           Assert.Equal(expected, actual);
       }
   }
}

至此,你可能已经熟悉了单元测试的结构。快速复习一下:在此示例中,通过给单元测试一个描述性名称Given7pmReturnNighttime 来描述期望结果。然后,在单元测试的主体中,创建一个名为 expected 的变量,并为该变量指定期望值(在该示例中,值为 Nighttime)。然后,为实际值指定一个 actual(在组件或服务处理一天中的时间之后可用)。

最后,通过断言期望值和实际值是否相等来检查是否满足期望结果:Assert.Equal(expected, actual)

你还可以在上面的列表中看到名为 dayOrNightUtility 的组件或服务。该模块能够接收消息GetDayOrNight,并且返回 string 类型的值。

同样,本着 TDD 的精神,描述的组件或服务还尚未构建(仅为了后面说明在此进行描述)。构建这些是由所描述的期望结果来驱动的。

app 文件夹中创建一个新文件,并将其命名为 DayOrNightUtility.cs。将以下 C# 代码添加到该文件中并保存:

using System;

namespace app {
   public class DayOrNightUtility {
       public string GetDayOrNight() {
           string dayOrNight = "Undetermined";
           return dayOrNight;
       }
   }
}

现在转到命令行,将目录更改为 unittests 文件夹,然后运行:

[Xunit.net 00:00:02.33] unittest.UnitTest1.Given7pmReturnNighttime [FAIL]
Failed unittest.UnitTest1.Given7pmReturnNighttime
[...]

恭喜,你已经完成了第一个失败的单元测试。单元测试的期望结果是 DayOrNightUtility 方法返回字符串 Nighttime,但相反,它返回是 Undetermined

修复失败的单元测试

修复失败的测试的一种快速而粗略的方法是将值 Undetermined 替换为值 Nighttime 并保存更改:

using System;

namespace app {
   public class DayOrNightUtility {
       public string GetDayOrNight() {
           string dayOrNight = "Nighttime";
           return dayOrNight;
       }
   }
}

现在运行,成功了。

Starting test execution, please wait...

Total tests: 1. Passed: 1. Failed: 0. Skipped: 0.
Test Run Successful.
Test execution time: 2.6470 Seconds

但是,对值进行硬编码基本上是在作弊,最好为 DayOrNightUtility 方法赋予一些智能。修改 GetDayOrNight 方法以包括一些时间计算逻辑:

public string GetDayOrNight() {
    string dayOrNight = "Daylight";
    DateTime time = new DateTime();
    if(time.Hour < 7) {
        dayOrNight = "Nighttime";
    }
    return dayOrNight;
}

该方法现在从系统获取当前时间,并与 Hour 比较,查看其是否小于上午 7 点。如果小于,则处理逻辑将 dayOrNight 字符串值从 Daylight 转换为 Nighttime。现在,单元测试通过。

测试驱动解决方案的开始

现在,我们已经开始了基本的单元测试,并为我们的时间依赖项提供了可行的解决方案。后面还有更多的测试案例需要执行。

在下一篇文章中,我将演示如何对白天时间进行测试以及如何在整个过程中利用故障。


via: https://opensource.com/article/19/9/mutation-testing-example-tdd

作者:Alex Bunardzic 选题:lujun9972 译者:Morisun029 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

几周前,我买了一台 英特尔 NUC 迷你 PC。我在上面安装了 Linux,我非常喜欢它。这个小巧的无风扇机器取代了台式机那庞大的 CPU。

英特尔 NUC 通常采用准系统形式,这意味着它没有任何内存、硬盘,也显然没有操作系统。许多基于 Linux 的微型 PC 定制化英特尔 NUC 并添加磁盘、RAM 和操作系统将它出售给终端用户。

不用说,它不像大多数其他台式机那样带有键盘、鼠标或屏幕。

英特尔 NUC 是一款出色的设备,如果你要购买台式机,我强烈建议你购买它。如果你正在考虑购买英特尔 NUC,你需要买一些配件,以便开始使用它。

基本的英特尔 NUC 配件

*文章中的 Amazon 链接是(原文的)受益链接。请阅读我们的受益政策

外围设备:显示器、键盘和鼠标

这很容易想到。你需要有屏幕、键盘和鼠标才能使用计算机。你需要一台有 HDMI 连接的显示器和一个 USB 或无线键盘鼠标。如果你已经有了这些东西,那你可以继续。

如果你正在寻求建议,我建议购买 LG IPS LED 显示器。我有两台 22 英寸的型号,我对它提供的清晰视觉效果感到满意。

这些显示器有一个简单的固定支架。如果要使显示器可以上下移动并纵向旋转,请尝试使用 HP EliteDisplay 显示器

HP EliteDisplay Monitor

我在多屏设置中同时连接了三台显示器。一台显示器连接到指定的 HDMI 端口。两台显示器通过 Club 3D 的 Thunderbolt 转 HDMI 分配器连接到 Thunderbolt 端口。

你也可以选择超宽显示器。我对此没有亲身经历。

内存

英特尔 NUC 有两个内存插槽,最多可支持 32GB 内存。由于我的是 i3 核心处理器,因此我选择了 Crucial 的 8GB DDR4 内存,价格约为 $33。

8 GB 内存在大多数情况下都没问题,但是如果你的是 i7 核心处理器,那么可以选择 16GB 内存,价格约为 $67。你可以加两条,以获得最大 32GB。选择全在于你。

硬盘(重要)

英特尔 NUC 同时支持 2.5 英寸驱动器和 M.2 SSD,因此你可以同时使用两者以获得更多存储空间。

2.5 英寸插槽可同时容纳 SSD 和 HDD。我强烈建议选择 SSD,因为它比 HDD 快得多。480GB 2.5 英寸的价格是 $60。我认为这是一个合理的价格。

2.5 英寸驱动器的标准 SATA 口速度为 6 Gb/秒。根据你是否选择 NVMe SSD,M.2 插槽可能会更快。 NVMe(非易失性内存主机控制器接口规范)SSD 的速度比普通 SSD(也称为 SATA SSD)快 4 倍。但是它们可能也比 SATA M2 SSD 贵一些。

当购买 M.2 SSD 时,请检查产品图片。无论是 NVMe 还是 SATA SSD,都应在磁盘本身的图片中提到。你可以考虑使用经济的三星 EVO NVMe M.2 SSD

Make sure that your are buying the faster NVMe M2 SSD

M.2 插槽和 2.5 英寸插槽中的 SATA SSD 具有相同的速度。这就是为什么如果你不想选择昂贵的 NVMe SSD,建议你选择 2.5 英寸 SATA SSD,并保留 M.2 插​​槽供以后升级。

交流电源线

当我拿到 NUC 时,为惊讶地发现,尽管它有电源适配器,但它并没有插头。

正如一些读者指出的那样,你可能有完整的电源线。这取决于你的地理区域和供应商。因此,请检查产品说明和用户评论,以验证其是否具有完整的电源线。

其他配套配件

你需要使用 HDMI 线缆连接显示器。如果你要购买新显示器,通常应会有一根线缆。

如果要使用 M.2 插槽,那么可能需要螺丝刀。英特尔 NUC 是一款出色的设备,你只需用手旋转四个脚即可拧开底部面板。你必须打开设备才能放置内存和磁盘。

Intel NUC with Security Cable | Image Credit Intel

NUC 还有防盗孔,可与防盗绳一起使用。在业务环境中,建议使用防盗绳保护计算机安全。购买防盗绳几美元便可节省数百美元。

你使用什么配件?

这些就是我在使用和建议使用的英特尔 NUC 配件。你呢?如果你有一台 NUC,你会使用哪些配件并推荐给其他 NUC 用户?


via: https://itsfoss.com/intel-nuc-essential-accessories/

作者:Abhishek Prakash 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

本教程中,你将学习如何在 Ubuntu Linux 上安装和使用开源数据库 PostgreSQL。

PostgreSQL (又名 Postgres) 是一个功能强大的自由开源的关系型数据库管理系统 (RDBMS) ,其在可靠性、稳定性、性能方面获得了业内极高的声誉。它旨在处理各种规模的任务。它是跨平台的,而且是 macOS Server 的默认数据库。

如果你喜欢简单易用的 SQL 数据库管理器,那么 PostgreSQL 将是一个正确的选择。PostgreSQL 对标准的 SQL 兼容的同时提供了额外的附加特性,同时还可以被用户大量扩展,用户可以添加数据类型、函数并执行更多的操作。

之前我曾论述过 在 Ubuntu 上安装 MySQL。在本文中,我将向你展示如何安装和配置 PostgreSQL,以便你随时可以使用它来满足你的任何需求。

在 Ubuntu 上安装 PostgreSQL

PostgreSQL 可以从 Ubuntu 主存储库中获取。然而,和许多其它开发工具一样,它可能不是最新版本。

首先在终端中使用 apt 命令 检查 Ubuntu 存储库 中可用的 PostgreSQL 版本:

apt show postgresql

在我的 Ubuntu 18.04 中,它显示 PostgreSQL 的可用版本是 10(10+190 表示版本 10)而 PostgreSQL 版本 11 已经发布。

Package: postgresql
Version: 10+190
Priority: optional
Section: database
Source: postgresql-common (190)
Origin: Ubuntu

根据这些信息,你可以自主决定是安装 Ubuntu 提供的版本还是还是获取 PostgreSQL 的最新发行版。

我将向你介绍这两种方法:

方法一:通过 Ubuntu 存储库安装 PostgreSQL

在终端中,使用以下命令安装 PostgreSQL:

sudo apt update
sudo apt install postgresql postgresql-contrib

根据提示输入你的密码,依据于你的网速情况,程序将在几秒到几分钟安装完成。说到这一点,随时检查 Ubuntu 中的各种网络带宽

什么是 postgresql-contrib?

postgresql-contrib 或者说 contrib 包,包含一些不属于 PostgreSQL 核心包的实用工具和功能。在大多数情况下,最好将 contrib 包与 PostgreSQL 核心一起安装。

方法二:在 Ubuntu 中安装最新版本的 PostgreSQL 11

要安装 PostgreSQL 11, 你需要在 sources.list 中添加官方 PostgreSQL 存储库和证书,然后从那里安装它。

不用担心,这并不复杂。 只需按照以下步骤。

首先添加 GPG 密钥:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

现在,使用以下命令添加存储库。如果你使用的是 Linux Mint,则必须手动替换你的 Mint 所基于的 Ubuntu 版本号:

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

现在一切就绪。使用以下命令安装 PostgreSQL:

sudo apt update
sudo apt install postgresql postgresql-contrib

PostgreSQL GUI 应用程序

你也可以安装用于管理 PostgreSQL 数据库的 GUI 应用程序(pgAdmin):

sudo apt install pgadmin4

PostgreSQL 配置

你可以通过执行以下命令来检查 PostgreSQL 是否正在运行:

service postgresql status

通过 service 命令,你可以启动、关闭或重启 postgresql。输入 service postgresql 并按回车将列出所有选项。现在,登录该用户。

默认情况下,PostgreSQL 会创建一个拥有所权限的特殊用户 postgres。要实际使用 PostgreSQL,你必须先登录该账户:

sudo su postgres

你的提示符会更改为类似于以下的内容:

postgres@ubuntu-VirtualBox:/home/ubuntu$ 

现在,使用 psql 来启动 PostgreSQL Shell:

psql

你应该会看到如下提示符:

postgress=#

你可以输入 \q 以退出,输入 \? 获取帮助。

要查看现有的所有表,输入如下命令:

\l

输出内容类似于下图所示(单击 q 键退出该视图):

PostgreSQL Tables

使用 \du 命令,你可以查看 PostgreSQL 用户:

PostgreSQLUsers

你可以使用以下命令更改任何用户(包括 postgres)的密码:

ALTER USER postgres WITH PASSWORD 'my_password';

注意:postgres 替换为你要更改的用户名,my_password 替换为所需要的密码。另外,不要忘记每条命令后面的 ;(分号)。

建议你另外创建一个用户(不建议使用默认的 postgres 用户)。为此,请使用以下命令:

CREATE USER my_user WITH PASSWORD 'my_password';

运行 \du,你将看到该用户,但是,my_user 用户没有任何的属性。来让我们给它添加超级用户权限:

ALTER USER my_user WITH SUPERUSER;

你可以使用以下命令删除用户:

DROP USER my_user;

要使用其他用户登录,使用 \q 命令退出,然后使用以下命令登录:

psql -U my_user

你可以使用 -d 参数直接连接数据库:

psql -U my_user -d my_db

你可以使用其他已存在的用户调用 PostgreSQL。例如,我使用 ubuntu。要登录,从终端执行以下命名:

psql -U ubuntu -d postgres

注意:你必须指定一个数据库(默认情况下,它将尝试将你连接到与登录的用户名相同的数据库)。

如果遇到如下错误:

psql: FATAL:  Peer authentication failed for user "my_user"

确保以正确的用户身份登录,并使用管理员权限编辑 /etc/postgresql/11/main/pg_hba.conf

sudo vim /etc/postgresql/11/main/pg_hba.conf

注意:用你的版本替换 11(例如 10)。

对如下所示的一行进行替换:

local   all             postgres                                peer

替换为:

local   all             postgres                                md5

然后重启 PostgreSQL:

sudo service postgresql restart

使用 PostgreSQL 与使用其他 SQL 类型的数据库相同。由于本文旨在帮助你进行初步的设置,因此不涉及具体的命令。不过,这里有个 非常有用的要点 可供参考! 另外, 手册(man psql)和 文档 也非常有用。

总结

阅读本文有望指导你完成在 Ubuntu 系统上安装和准备 PostgreSQL 的过程。如果你不熟悉 SQL,你应该阅读 基本的 SQL 命令

如果你有任何问题或疑惑,请随时在评论部分提出。


via: https://itsfoss.com/install-postgresql-ubuntu/

作者:Sergiu 选题:lujun9972 译者:lnrCoder 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

构造器是编程的强大组件。使用它们来释放 Java 的全部潜力。

在开源、跨平台编程领域,Java 无疑(?)是无可争议的重量级语言。尽管有许多伟大的跨平台框架,但很少有像 Java 那样统一和直接的。

当然,Java 也是一种非常复杂的语言,具有自己的微妙之处和惯例。Java 中与 构造器 constructor 有关的最常见问题之一是:它们是什么,它们的作用是什么?

简而言之:构造器是在 Java 中创建新 对象 object 时执行的操作。当 Java 应用程序创建一个你编写的类的实例时,它将检查构造器。如果(该类)存在构造器,则 Java 在创建实例时将运行构造器中的代码。这几句话中包含了大量的技术术语,但是当你看到它的实际应用时就会更加清楚,所以请确保你已经安装了 Java 并准备好进行演示。

没有使用构造器的开发日常

如果你正在编写 Java 代码,那么你已经在使用构造器了,即使你可能不知道它。Java 中的所有类都有一个构造器,因为即使你没有创建构造器,Java 也会在编译代码时为你生成一个。但是,为了进行演示,请忽略 Java 提供的隐藏构造器(因为默认构造器不添加任何额外的功能),并观察没有显式构造器的情况。

假设你正在编写一个简单的 Java 掷骰子应用程序,因为你想为游戏生成一个伪随机数。

首先,你可以创建骰子类来表示一个骰子。你玩了很久《龙与地下城》,所以你决定创建一个 20 面的骰子。在这个示例代码中,变量 dice 是整数 20,表示可能的最大掷骰数(一个 20 边骰子的掷骰数不能超过 20)。变量 roll 是最终的随机数的占位符,rand 用作随机数种子。

import java.util.Random;

public class DiceRoller {
  private int dice = 20;
  private int roll;
  private Random rand = new Random();

接下来,在 DiceRoller 类中创建一个函数,以执行计算机模拟模子滚动所必须采取的步骤:从 rand 中获取一个整数并将其分配给 roll变量,考虑到 Java 从 0 开始计数但 20 面的骰子没有 0 值的情况,roll 再加 1 ,然后打印结果。

import java.util.Random;

public class DiceRoller {
  private int dice = 20;
  private int roll;
  private Random rand = new Random();

最后,产生 DiceRoller 类的实例并调用其关键函数 Roller

// main loop
public static void main (String[] args) {
  System.out.printf("You rolled a ");

  DiceRoller App = new DiceRoller();
  App.Roller();
  }
}

只要你安装了 Java 开发环境(如 OpenJDK),你就可以在终端上运行你的应用程序:

$ java dice.java
You rolled a 12

在本例中,没有显式构造器。这是一个非常有效和合法的 Java 应用程序,但是它有一点局限性。例如,如果你把游戏《龙与地下城》放在一边,晚上去玩一些《快艇骰子》,你将需要六面骰子。在这个简单的例子中,更改代码不会有太多的麻烦,但是在复杂的代码中这不是一个现实的选择。解决这个问题的一种方法是使用构造器。

构造函数的作用

这个示例项目中的 DiceRoller 类表示一个虚拟骰子工厂:当它被调用时,它创建一个虚拟骰子,然后进行“滚动”。然而,通过编写一个自定义构造器,你可以让掷骰子的应用程序询问你希望模拟哪种类型的骰子。

大部分代码都是一样的,除了构造器接受一个表示面数的数字参数。这个数字还不存在,但稍后将创建它。

import java.util.Random;

public class DiceRoller {
  private int dice;  
  private int roll;
  private Random rand = new Random();

  // constructor
  public DiceRoller(int sides) {
    dice = sides;
  }

模拟滚动的函数保持不变:

public void Roller() {
  roll = rand.nextInt(dice);
  roll += 1;
  System.out.println (roll);
}

代码的主要部分提供运行应用程序时提供的任何参数。这的确会是一个复杂的应用程序,你需要仔细解析参数并检查意外结果,但对于这个例子,唯一的预防措施是将参数字符串转换成整数类型。

public static void main (String[] args) {
  System.out.printf("You rolled a ");
  DiceRoller App = new DiceRoller( Integer.parseInt(args[0]) );
  App.Roller();
}

启动这个应用程序,并提供你希望骰子具有的面数:

$ java dice.java 20
You rolled a 10
$ java dice.java 6
You rolled a 2
$ java dice.java 100
You rolled a 44

构造器已接受你的输入,因此在创建类实例时,会将 sides 变量设置为用户指定的任何数字。

构造器是编程的功能强大的组件。练习用它们来解开了 Java 的全部潜力。


via: https://opensource.com/article/19/6/what-java-constructor

作者:Seth Kenlon 选题:lujun9972 译者:laingke 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在上周,我买了一台 InteL NUC。虽然它是如此之小,但它与成熟的桌面型电脑差别甚小。实际上,大部分的基于 Linux 的微型 PC 都是基于 Intel NUC 构建的。

我买了第 8 代 Core i3 处理器的“ 准系统 barebone ” NUC。准系统意味着该设备没有 RAM、没有硬盘,显然也没有操作系统。我添加了一个 Crucial 的 8 GB 内存条(大约 33 美元)和一个 240 GB 的西数的固态硬盘(大约 45 美元)。

现在,我已经有了一台不到 400 美元的电脑。因为我已经有了一个电脑屏幕和键鼠套装,所以我没有把它们计算在内。

在我的办公桌上放着一个崭新的英特尔 NUC NUC8i3BEH,后面有树莓派 4

我买这个 Intel NUC 的主要原因就是我想在实体机上测试各种各样的 Linux 发行版。我已经有一个 树莓派 4 设备作为一个入门级的桌面系统,但它是一个 ARM 设备,因此,只有少数 Linux 发行版可用于树莓派上。(LCTT 译注:新发布的 Ubuntu 19.10 支持树莓派 4B)

这个文章里的亚马逊链接是(原文的)受益连接。请参阅我们的受益政策

在 NUC 上安装 Linux

现在我准备安装 Ubuntu 18.04 长期支持版,因为我现在就有这个系统的安装文件。你也可以按照这个教程安装其他的发行版。在最重要的分区之前,前边的步骤都大致相同。

第一步:创建一个 USB 启动盘

你可以在 Ubuntu 官网下载它的安装文件。使用另一个电脑去创建一个 USB 启动盘。你可以使用像 RufusEtcher 这样的软件。在 Ubuntu上,你可以使用默认的启动盘创建工具。

第二步:确认启动顺序是正确的

将你的 USB 启动盘插入到你的电脑并开机。一旦你看到 “Intel NUC” 字样出现在你的屏幕上,快速的按下 F2 键进入到 BIOS 设置中。

Intel NUC 的 BIOS 设置

在这里,只是确认一下你的第一启动项是你的 USB 设备。如果不是,切换启动顺序。

如果你修改了一些选项,按 F10 键保存退出,否则直接按下 ESC 键退出 BIOS 设置。

第三步:正确分区,安装 Linux

现在当机器重启的时候,你就可以看到熟悉的 Grub 界面,可以让你试用或者安装 Ubuntu。现在我们选择安装它。

开始的几个安装步骤非常简单,选择键盘的布局,是否连接网络还有一些其他简单的设置。

在安装 Ubuntu Linux 时选择键盘布局

你可能会使用常规安装,默认情况下会安装一些有用的应用程序。

接下来的是要注意的部分。你有两种选择:

  • 擦除磁盘并安装 Ubuntu Erase disk and install Ubuntu ”:最简单的选项,它将在整个磁盘上安装 Ubuntu。如果你只想在 Intel NUC 上使用一个操作系统,请选择此选项,Ubuntu 将负责剩余的工作。
  • 其他选项 Something else ”:这是一个控制所有选择的高级选项。就我而言,我想在同一 SSD 上安装多个 Linux 发行版。因此,我选择了此高级选项。

如果你选择了“ 擦除磁盘并安装 Ubuntu Erase disk and install Ubuntu ”,点击“ 继续 Continue ”,直接跳到第四步,

如果你选择了高级选项,请按照下面剩下的部分进行操作。

选择固态硬盘,然后点击“ 新建分区表 New Partition Table ”。

它会给你显示一个警告。直接点击“ 继续 Continue ”。

现在你就可以看到你 SSD 磁盘里的空闲空间。我的想法是为 EFI bootloader 创建一个 EFI 系统分区。一个根(/)分区,一个主目录(/home)分区。这里我并没有创建交换分区。Ubuntu 会根据自己的需要来创建交换分区。我也可以通过创建新的交换文件来扩展交换分区。

我将在磁盘上保留近 200 GB 的可用空间,以便可以在此处安装其他 Linux 发行版。你可以将其全部用于主目录分区。保留单独的根分区和主目录分区可以在你需要重新安装系统时帮你保存里面的数据。

选择可用空间,然后单击加号以添加分区。

一般来说,100MB 足够 EFI 的使用,但是某些发行版可能需要更多空间,因此我要使用 500MB 的 EFI 分区。

接下来,我将使用 20GB 的根分区。如果你只使用一个发行版,则可以随意地将其增加到 40GB。

根目录(/)是系统文件存放的地方。你的程序缓存和你安装的程序将会有一些文件放在这个目录下边。我建议你可以阅读一下 Linux 文件系统层次结构来了解更多相关内容。

填入分区的大小,选择 Ext4 文件系统,选择 / 作为挂载点。

接下来是创建一个主目录分区,我再说一下,如果你仅仅想使用一个 Linux 发行版。那就把剩余的空间都使用完吧。为主目录分区选择一个合适的大小。

主目录是你个人的文件,比如文档、图片、音乐、下载和一些其他的文件存储的地方。

既然你创建好了 EFI 分区、根分区、主目录分区,那你就可以点击“ 现在安装 Install Now ”按钮安装系统了。

它将会提示你新的改变将会被写入到磁盘,点击“ 继续 Continue ”。

第四步:安装 Ubuntu

事情到了这就非常明了了。现在选择你的分区或者以后选择也可以。

接下来,输入你的用户名、主机名以及密码。

看 7-8 分钟的幻灯片就可以安装完成了。

一旦安装完成,你就可以重新启动了。

当你重启的时候,你必须要移除你的 USB 设备,否则你将会再次进入安装系统的界面。

这就是在 Intel NUC 设备上安装 Linux 所需要做的一切。坦白说,你可以在其他任何系统上使用相同的过程。

Intel NUC 和 Linux 在一起:如何使用它?

我非常喜欢 Intel NUC。它不占用太多的桌面空间,而且有足够的能力去取代传统的桌面型电脑。你可以将它的内存升级到 32GB。你也可以安装两个 SSD 硬盘。总之,它提供了一些配置和升级范围。

如果你想购买一个桌面型的电脑,我非常推荐你购买使用 Intel NUC 迷你主机。如果你不想自己安装系统,那么你可以购买一个基于 Linux 的已经安装好的系统迷你主机

你是否已经有了一个 Intel NUC?有一些什么相关的经验?你有什么相关的意见与我们分享吗?可以在下面评论。


via: https://itsfoss.com/install-linux-on-intel-nuc/

作者:Abhishek Prakash 选题:lujun9972 译者:amwps290 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出