Postman 删除工作空间的地方比较隐蔽。 在你打开工作空间后,选择工作空间的设置。 在后续的页面中,将会提示你是否选择删除这个工作空间。 在随后的页面中,提示你输入工作空间的名字,然后单击确定删除即可。 https://www.ossez.com/t/postman/13936
Postman 删除工作空间的地方比较隐蔽。 在你打开工作空间后,选择工作空间的设置。 在后续的页面中,将会提示你是否选择删除这个工作空间。 在随后的页面中,提示你输入工作空间的名字,然后单击确定删除即可。 https://www.ossez.com/t/postman/13936
Gitea 是由 Gi t支持的另一种开源,自托管版本控制系统。 Gitea用Golang编写,是可在任何平台上托管的轻量级解决方案。 换句话说就是你希望自己部署一个 Git 远程库,但是你又不想用 GitHub,GitLab 又太重,同时还收费。 配置环境 在安装 Gitea 之前,需要对你的服务器环境进行一些配置。 Git 确保你已经在服务器上安装了 Git。 使用命令: git --version 来查看安装 Git 的版本。 如果没有安装的话,可以使用:sudo dnf install git 来进行安装。 获得 Gitea 安装包 你可以到官方的下载页面中获得最新的安装包。 在当前,最新的版本为 1.16.6 运行下面的命令来获得最新的安装包: wget -O gitea https://dl.gitea.io/gitea/1.16.6/gitea-1.16.6-linux-amd64 chmod +x gitea 创建 gitea 运行的用户 直接运行下面的命令来创建这个服务运行需要的用户。 adduser \ --system \ --shell /bin/bash \ --comment 'Git Version Control' \ --user-group\ --create-home \ --home /home/git \ git 准备 gitea 运行的目录 直接运行下面的命令来准备 gitea 运行需要的目录。 mkdir -p /var/lib/gitea/{custom,data,log} chown -R git:git /var/lib/gitea/ chmod -R 750 /var/lib/gitea/ mkdir /etc/gitea chown root:git /etc/gitea chmod 770 /etc/gitea 针对用户 git,目录 /etc/gitea 被临时设置为可写权限了。 在完成安装后,你可以使用下面的命令: chmod 750 /etc/gitea chmod 640 /etc/gitea/app.ini 来修改权限为不可写的权限。 配置环境变量 设置 gitea 的环境运行变量:GITEA_WORK_DIR 使用的命令是: export GITEA_WORK_DIR=/var/lib/gitea/ 拷贝程序文件 将运行需要的文件,拷贝到我们准备好的目录中。 使用的命令为: cp gitea /usr/local/bin/gitea 运行 Gitea 在完成上面的操作后,你有 2 种方法来运行 gitea。 这 2 种方法分别为以服务方式和命令行方式。 如果你是以命令行方式运行的话,那么在你关闭控制台以后,gitea 将会停止运行,因此我们推荐使用以服务的方式来运行。 以服务方式 以服务方式的运行,请按照下面的步骤进行: 设置启动配置文件 将 gitea/gitea.service at main · go-gitea/gitea · GitHub 文件中的内容拷贝到 /etc/systemd/system/gitea.service 文件中。 随操作启动 运行下面的命令,我们可以配置服务随操作系统启动而启动。 sudo systemctl enable gitea sudo systemctl start gitea 校验安装 Gitea 默认的启动端口是 3000。 如果你的服务器没有安装防火墙,没有配置反向代理的话,你可以通过浏览器访问服务器的 IP 地址,并且端口号是 3000。 如果你能够看到下面的界面的话,说明 Gitea 的启动已经完成了。 你需要为你的服务配置数据库服务器,并且在这个界面中完成配置就可以开始使用了。 如果你的数据库配置没有问题,并且上面的参数都填写正确的话。 就可以继续进行安装了,安装通常不需要多长时间,1 到 2 分钟就可以了。 安装成功后,你就能看到上面的界面了。 当然你还可以为你的服务器配置反向代理,开放 80 或者 443 端口以增强安全性。 https://www.ossez.com/t/fedora-gitea/13935
概述 从一个 List 中随机获得一个元素是有关 List 的一个基本操作,但是这个操作又没有非常明显的实现。 本页面主要向你展示如何有效的从 List 中获得一个随机的元素和可以使用的一些方法。 选择一个随机的元素 为了从一个 List 中随机获得一个元素,你可以随机从 List 中获得一个索引的下标。 然后你可以使用这个随机的下标使用方法 List.get() 来随机获得元素。 使用这个方法的要点就是,随机生成的下标不要超过 List’s 的大小,否则你将会遇到溢出的异常。 单一随机元素 为了获得随机下标,你可以使用 Random.nextInt(int bound) 方法。 考察下面的代码: public void givenList_shouldReturnARandomElement() { List<Integer> givenList = Arrays.asList(1, 2, 3); Random rand = new Random(); int randomElement = givenList.get(rand.nextInt(givenList.size())); } 如果你不想使用 Random 类,你可以使用 Math.random() 这个静态方法,然后将生成的随机数乘以 List 的大小。 (Math.random())将会生成 Double 的随机变量。 这个随机变量的区间在 0 和 1 之间,这个变量包含 0,但是不包含 1。 在完成上面的转换后,不要忘记需要讲获得的下标转换为 int 类型。 在多线程环境中选择随机下标 在多线程环境中,如何使用单一的 Random 类实例,将会导致可能在这个实例中每一线程都访问到相同的结果。 我们可以使用 ThreadLocalRandom 类来为每一线程创建一个新的实例。 如下面的代码能够保证在多线程中不出现相同的随机下标。 int randomElementIndex = ThreadLocalRandom.current().nextInt(listSize) % givenList.size(); 可以重复选择元素 有时候,你可能希望从 List 中选择一些元素,但是这些选择的元素是可以重复的。 需要的操作也非常简单,需要多少就选多少,使用一个循环来做就可以了。 如下面的代码,直接使用循环。 public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsRepeat() { Random rand = new Random(); List<String> givenList = Arrays.asList("one", "two", "three", "four"); int numberOfElements = 2; for (int i = 0; i < numberOfElements; i++) { int randomIndex = rand.nextInt(givenList.size()); String randomElement = givenList.get(randomIndex); } } 选择不重复的元素 如果你希望你选择的元素是不重复的话,你可以在选择后将选择后的元素从 List 中移除。 需要注意的是担心下标的溢出。 例如你的 List 长度是 10, 但是你希望从这 List 中选择 11 个不重复的元素,这是没有办法做到的。 通常会抛出异常。 public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsNoRepeat() { Random rand = new Random(); List<String> givenList = Lists.newArrayList("one", "two", "three", "four"); int numberOfElements = 2; for (int i = 0; i < numberOfElements; i++) { int randomIndex = rand.nextInt(givenList.size()); String randomElement = givenList.get(randomIndex); givenList.remove(randomIndex); } } 选择一个随机序列 这个方法的主要目的是将给出的 List 进行打乱,并且获得一个相同的随机序列。 当然你也可以使用循环来做,如果你使用 Collections 工具类能够更好的帮助你完成这个目标: public void givenList_whenSeriesLengthChosen_shouldReturnRandomSeries() { List<Integer> givenList = Lists.newArrayList(1, 2, 3, 4, 5, 6); Collections.shuffle(givenList); int randomSeriesLength = 3; List<Integer> randomSeries = givenList.subList(0, randomSeriesLength); } 结论 在本页面中,我们对 List 中的元素随机进行输出进行了一些探讨。 通过上面的内容,能够更好的帮助你了解有关 List 中的随机输出等情况。 https://www.ossez.com/t/java-list/13934
我们可以使用下面的 H2 JDBC 参数来连接使用服务器方式运行的 H2 数据库。 jdbc:h2:tcp://localhost/~/test;USER=sa;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE 上面参数的意思是采用的是 tcp 的连接方式,连接的数据库名称为 test。 同时连接的服务器地址为 localhost,意思为本地服务器。 webPort 也可以通过网页方式访问启动的 H2 服务器。 端口地址为:8082 例如你可以访问:http://192.168.1.229:8082/login.jsp 来获得登录界面。 如果你没有修改登录密码的话。 直接单击连接就可以进行连接了。 连接后,你会看到下面的控制台界面。 这种模式就是使用服务器方式启动 H2 后的控制台信息。 https://www.ossez.com/t/h2-jdbc/13931
以服务器方式启动 H2 数据库非常简单。 你可以下载任何一个 H2 的 jar 包。 然后运行: java -jar h2-2.1.212.jar 在启动后,直接通过你的本地计算机浏览器访问地址: http://192.168.1.229:8082/login.do 就可以了。 你将会看到需要登录的界面。 单击链接就可以了。 Java 连接需要使用的 JDBC 参数,请参考: H2 数据库采用客户/服务器端连接数据的 JDBC 参数 页面中的内容。 https://www.ossez.com/t/h2/13932
在 Windows 如果使用 Edge 进行复制粘贴的时候,我们可能会需要拷贝 URL。 但是粘贴的时候却和标题一同粘贴显示出来了。 例如我们现在正在编辑的这个内容,其实我们只拷贝了 URL,但是如果你使用了 Edge 浏览器进行编辑的话,却同时还显示了标题。 如果上面的图片显示的内容,其实我们并不需要显示标题。 如何修改 进入 Edge 浏览器的设置。 然后选择分享,拷贝和粘贴。 在这个界面中,你可以选择你需要的格式。 在默认情况下 Ctrl+V 将会使用链接模式。 你可以选择使用 纯文本模式来和以前的拷贝张贴方式保持一致。 当然,你还可以使用张贴为什么来对设置进行调整。 在 Edge 的文本编辑区域中,选择鼠标的右键来进行配置。 https://www.ossez.com/t/windows-edge-url/13933
在 CentOS 8 进行更新的时候提示错误: Error: Failed to download metadata for repo appstream” 完整的错误提示为: Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist 问题和解决 这是因为 CentOS 8 已经不再提供支持,并且在 2021 年已经结束生命周期了。 如果你还想使用 dnf 或者 yum 对 CentOS 8 进行更新的话,你只能使用 Fedora 的库了。 运行下面 2 个命令: dnf --disablerepo '*' --enablerepo=extras swap centos-linux-repos centos-stream-repos dnf distro-sync 对 CentOS 8 的源进行修改后,就可以继续使用 dnf 进行更新了。 https://www.ossez.com/t/centos-8-appstream/13928
Windows 最近不知道抽了什么风,要求 PIN 的长度至少有 6 位。 太难了,我们就喜欢 4 位的。 其实这个是可以修改的。 WIN + R 运行 gpedit.msc 然后选择密码复杂度。 针对最小的密码复杂度,我们选择启用后,然后输入最小的密码长度 4 后保存退出。 在完成上面的设置后,你需要重启你的计算机。 然后再修改用户的 PIN 就可以设置为 4 位密码了。 https://www.ossez.com/t/windows-11-pin-4/13926
概述 在这个实例中,我们将会演示如何删除在 Java 中定义的 List 的第 1 个元素。 我们将会针对这个问题使用 List 接口的 2 个实现 ArrayList 和 LinkedList 来进行演示。 创建一个 List 首先,我们来创建一个我们需要的 List: @BeforeAll public void startup() { list.add("cat"); list.add("dog"); list.add("pig"); list.add("cow"); list.add("goat"); linkedList.add("cat"); linkedList.add("dog"); linkedList.add("pig"); linkedList.add("cow"); linkedList.add("goat"); } ArrayList 根据我们创建的 List,我们来演示在 ArrayList 中删除第一个元素,然后确定删除后的 List 不再包含有任何一个删除的元素了。 使用下面的测试方法来进行测试。 /** * ArrayList remove first */ @Test public void testGivenList_whenRemoveFirst_thenRemoved() { list.remove(0); assertThat(list, hasSize(4)); assertThat(list, not(contains("cat"))); } 通过上面的代码我们可以了解到,我们使用了 remove(index) 这个方法来删除我们需要处理的 List 中的第一个元素。 需要注意的是:remove 这个方法,针对 List 接口的所有实现都是可以使用的。 LinkedList LinkedList 同时也实现了 remove(index) 这个方法,同时 LinkedList 还有一个自己的 removeFirst() 方法。 让我们考察下面的测试方法,来确定删除是否正确。 /** * LinkedList remove first */ @Test public void testGivenLinkedList_whenRemoveFirst_thenRemoved() { linkedList.removeFirst(); assertThat(linkedList, hasSize(4)); assertThat(linkedList, not(contains("cat"))); } 时间复杂度 尽管上面的 remove 方法类似,但是这 2 个方法的时间复杂度是不同的: ArrayList 的 remove() 方法的时间复杂度是 O(n) 。 LinkedList 的 removeFirst() 方法的时间复杂度是 O(1) 。 这是因为 ArrayList 在 List 中是使用 Array(数组)的,当我们使用删除方法的时候,ArrayList 将会重新将剩余的元素进行拷贝。如果你需要删除 List 越大,那么需要移动的元素越多。因此所需要的时间复杂度越高。 LinkedList 却是使用的是指针(points),这个指针的意思就是每一个元素使用指针来指向下一个元素,同时还使用一个指针来指向前一个元素。 因此,在 LinkedList 删除第一个元素的时候,需要进行的操作就只需要修改第一个元素的指针就可以了。 不管你的 List 有多大,这个修改指针的操作需要的时间是相同的。 结论 在本文中,我们对如何对 List 中的第一个元素进行删除进行了说明和讨论。 并且针对 List 接口的 2 个实现来分别了解了不同的时间复杂度。 上面的内容的源代码可以在 java-tutorials/RemoveFirstElementTest.java at master · cwiki-us-docs/java-tutorials · GitHub 中进行下载和编译。 需要注意的是 assertThat 断言使用的是 Hamcrest 。 https://www.ossez.com/t/java-list/13919
输入下面的命令来修改时区: sudo timedatectl set-timezone America/New_York 然后运行下面的命令来查看当前时间和时区。 timedatectl status 上面的命令能够查看当前的时区和时间。 https://www.ossez.com/t/fedora-america-new-york/13917