开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
Computer Science

Dom4j 如何输出 Document 中的内容到文本

假设我们先定义一个 Dom4j 中的 Document 对象。 Document document = DocumentHelper.createDocument(); 如果我们想将 document 中的内容输出的话,我们是不能用 document.toString() 这个方法的,因为这个方法输出的是 document 这个对象的引用。 因此我们需要使用: document.asXML() 来将 document 对象中的数据转换为可以读的字符串。 格式化输出 但是 asXML() 这个方法的输出是不会格式化的,所有的字符串全部都在 1 行里面。 因此如果我们需要格式化输出的话,应该使用下面的代码: try { OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("utf-8"); Writer out = new StringWriter(); XMLWriter writer = new XMLWriter(out, format); writer.write(document); writer.close(); logger.debug("{}", out); } catch (IOException e) { logger.error("Write XML Error.", e); }     首先使用 OutputFormat 和 Writer 来进行输出。   https://www.ossez.com/t/dom4j-document/13757

2021年09月30日 0Comments 669Browse 0Like Read more
Computer Science

是应该是用 Log 还是 Logger 来定义 Log

我们都知道在当前的情况下使用 slf4j 来定义日志基本上都是标配了。 如果下面的语句: private static final Logger logger = LoggerFactory.getLogger(Dom4JParserUnitTest.class); 但是有时候,我们还会遇到 Log log = LogFactory.getLog(CLASS.class); 这个语句。 上面 2 个语句有什么不同呢? 解答 最主要的不同是使用的 API 不同,LogFactory 是 commons-logging 的 API。 这个 API 已经有多年没有更新了。     虽然可能还有不少项目,目前还在使用中,但是如果可能的话,还是尽量使用 slf4j 的 API 吧。 如果你想写成: private static final Logger log= LoggerFactory.getLogger(Dom4JParserUnitTest.class); 这样可以吗? 当然是可以的,只是后面的你的使用就只能用 log 了,这个可能会与 LogFactory 中定义的 log 搞混。     所以很多项目的日志,如果使用了 slf4j 的话,通常都会使用 logger。   https://www.ossez.com/t/log-logger-log/13756

2021年09月30日 0Comments 536Browse 0Like Read more
Computer Science

IntelliJ IDEA 如何针对Java 代码快速打印 println

有时候在调试的时候,我们希望我们的代码能够打印出需要测试的一些变量。 这个时候我们就会用到 System.out.println(); 这个语句了,当然我们不希望从头开始打印,那么我们可以在输入对话框中输入 sout     通过上面的代码能够帮助你少打几个字符。 https://www.ossez.com/t/intellij-idea-java-println/13755

2021年09月30日 0Comments 721Browse 0Like Read more
Computer Science

如何用 Java 判断一个给定的数是不是素数

有关素数的定义:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。 生成素数的算法 在我们论坛中我们给出了一个有关素数生成算法。 这个是一个公司的面试题目,请参考 Prime numbers from 1 to 100 (打印 100 以内的素数) 页面中的内容。 如何判断一个数是不是素数 为什么要判断一个数是不是素数?因为质数 非常重要,随之数字越来越大,那么在计算时候的时间复杂度越来越高,因此我们需要快速判断一个数是不是质数。 这个问题你可能需要了解下 米勒-拉宾检验( Miller–Rabin primality test) 这个东西。 米勒-拉宾素性检验是一种素数判定法则,利用随机化算法判断一个数是合数还是可能是素数。卡内基梅隆大学的计算机系教授Gary Lee Miller首先提出了基于广义黎曼猜想的确定性算法,由于广义黎曼猜想并没有被证明,其后由以色列耶路撒冷希伯来大学的Michael O. Rabin教授作出修改,提出了不依赖于该假设的随机化算法。 Java 原生 下面的代码是 Java 原生代码解决的方法。 Boolean isPrime = number > 1 && IntStream.rangeClosed(2, (int) Math.sqrt(number)) .noneMatch(n -> (number % n == 0)); 上面的代码使用了IntStream,并且使用数学的 Math 来进行计算。 上面的代码不太好读,可能你大部分时候都不会这么去写。 BigInteger 方法 我们可以使用 BigInteger 的 isProbablePrime 方法来近似判断。 这个近似判断就使用了 米勒-拉宾素性检验。 在面试的时候,使用这个方法就可以了,因为有时候一些 online 的 code 平台不会提供第三方的工具让你使用。 int number = 10; BigInteger.valueOf(number).isProbablePrime(100); Apache Math3 这个方法就非常简单了,直接用就可以了。 也是所有方法中检验效果最好,速度最快的。 int number = 10; Primes.isPrime(number) 为什么呢?这是因为 Apache 的 Commons Math3 使用了一个数组,把一定范围内的素数都列出来了。 简单粗暴,所以效率最高。     范围就是 Java 整数不溢出的情况下进行判断的。 结论 素数可能会经常用到,尤其在随机数算法的时候。 同时又因为算法无法覆盖掉所有的素数,因此很多公司面试的时候都会喜欢用这个题目来为难你。 完整的代码如下: @Test public void testIsPrime() { int number = 10; Boolean isPrime = number > 1 && IntStream.rangeClosed(2, (int) Math.sqrt(number)) .noneMatch(n -> (number % n == 0)); logger.debug(" {} Prime CORE Check is - [{}]", number, isPrime); logger.debug(" {} Prime BigInteger Check is - [{}]", number, BigInteger.valueOf(number).isProbablePrime(100)); logger.debug(" {} Prime APACHE MATH3 Check is - [{}]", number, Primes.isPrime(number)); } 上面测试代码的输出结果为: 15:37:02.403 [main] DEBUG com.ossez.toolkits.codebank.tests.algorithm.PrimeNumbersTest - 10 Prime CORE Check is - [false] 15:37:02.406 [main] DEBUG com.ossez.toolkits.codebank.tests.algorithm.PrimeNumbersTest - 10 Prime BigInteger Check is - [false] 15:37:02.411 [main] DEBUG com.ossez.toolkits.codebank.tests.algorithm.PrimeNumbersTest - 10 Prime APACHE MATH3 Check is - [false] Process finished with exit code 0 其实我们这样看,是不是简单粗暴就是最好的呢?   https://www.ossez.com/t/java/13749

2021年09月24日 0Comments 538Browse 1Like Read more
Computer Science

Java 中的 NaN

概述 简单来说可以认为 NaN 是一个数字数据类型变量值,这个类型变量被定义为 这不是一个数字。 在这篇文章中,我们对 Java 中的 NaN 进行一些简单的描述和说明和在那些操作的过程中可以尝试这个值,和可以如何去避免。 什么是 NaN NaN 通常表示一个无效的操作结果。 例如,你尝试将数字 0 去除以 0,这个在数学中是不存在的,同时在 Java 中定义 NaN 也确实就是通过这个不存在的操作来定义的。 我们通常也使用 NaN 来表示不能显示的变量值。 例如,我们对数字 -1 开平方根的时候,也是这种情况。 例如我们可以只在负数的情况下描述 value (i) 。 在页面 IEEE 754 - 维基百科,自由的百科全书 中对非数值 NaN 的定义进行了说明。你可以阅读上面的文章来了解更多有关 NaN 的定义。 在 Java 中,只有浮点数据类型 float 和 double 实现了这个标准。 Java 咋 使用 Float.NaN 和Double.NaN 来定义了 NaN 构造函数。     在 double 中一个常量 Not-a-Number (NaN) 定义了这个值,这个值等于 Double.longBitsToDouble(0x7ff8000000000000L) 的返回值。 和 在 float 中一个常量 Not-a-Number (NaN) 定义了这个值,这个值等于 Float.intBitsToFloat(0x7fc00000) 的返回值。 在 Java 中没有针对其他数据类型定义的 NaN 了。 NaN 的比较 在 Java 中,如果我们开始写一个方法的时候,我们应该需要针对方法的输入数据进行检查,以确保输入数据的准确和输入数据在允许的范围内。 NaN 在绝大部分情况下都不是一个有效的输入参数,因此在 Java 的方法中,我需要对输入的参数进行比较,以确保输入的参数中的值不是 NaN,然后我们能够对输入参数进行正确的处理。 NaN 不能余任何浮点类型数据进行比较,这就表示,任何有 NaN 参与的比较都会返回 false(这里只有一个例外为 “!=” 将会返回 true)。 我们将会得到 针对 x != x 表达式,如果 x 是 NaN 的话,我们将会在这里得到 true。 考察下面的代码: System.out.println("NaN == 1 = " + (NAN == 1)); System.out.println("NaN > 1 = " + (NAN > 1)); System.out.println("NaN < 1 = " + (NAN < 1)); System.out.println("NaN != 1 = " + (NAN != 1)); System.out.println("NaN == NaN = " + (NAN == NAN)); System.out.println("NaN > NaN = " + (NAN > NAN)); System.out.println("NaN < NaN = " + (NAN < NAN)); System.out.println("NaN != NaN = " + (NAN != NAN)); 下面的内容就是针对上面代码的输出结果。 NaN == 1 = false NaN > 1 = false NaN < 1 = false NaN != 1 = true NaN == NaN = false NaN > NaN = false NaN < NaN = false NaN != NaN = true 所以,我们不能够通过比较来检查数据是不是 NaN。 事实上,我们也不应该用 “==” 或 “!= “ 来对 double 或者 flat 类型的数据进行比较。 所以,我们可以使用 “x != x”* 表达式来检查 NaN 是不是为 true。 更多的,我们可能会使用 Float.isNaN 和Double.isNaN 方法来检查这个输入的参数值是不是 NaN。 实际上,这种方法更好,因为这能够让代码更加易读。 考察下面的代码: double x = 1; System.out.println(x + " is NaN = " + (x != x)); System.out.println(x + " is NaN = " + (Double.isNaN(x))); x = Double.NaN; System.out.println(x + " is NaN = " + (x != x)); System.out.println(x + "…

2021年09月24日 0Comments 560Browse 0Like Read more
Computer Science

Confluence OGNL 注入漏洞的严重安全问题

在 2021年的9月, Confluence 遇到了非常严重的安全问题。 OGNL 代表对象图导航语言;它是一种表达语言,用于获取和设置 Java 对象的属性,以及其他附加功能,例如列表投影和选择以及lambda表达式。您可以使用相同的表达式来获取和设置属性值。 CVE-2021-26084 - Confluence Server Webwork OGNL injection https://confluence.atlassian.com/doc/confluence-security-advisory-2021-08-25-1077906215.html 这个问题影响非常大,需要马上修复。 否则将会遇到非常严重的服务器安全隐患,如被注入代码后,你的服务器 CPU 利用率会全部高达 100%。     同时影响的版本也非常大。 建议马上修复,以避免受到攻击。   https://www.ossez.com/t/confluence-ognl/13745

2021年09月22日 0Comments 522Browse 0Like Read more
Computer Science

Node 的 cross-env 模块

cross-env 是运行跨平台设置的和使用环境变量(Node中的环境变量)的脚本。 一句话来说明 cross-env,就是针对相同的语句和命令,我们希望这条语句能够同时在 Windows 和 Linux 上使用。     为什么需要 cross-env 这个问题主要是因为不同的操作系统平台对 Shell 脚本的支持情况不一样导致的。 例如,如果你希望在 Windows 中使用命令NODE_ENV=production 来设置环境变量的话,大多数Windows 命令提示符都没有办法进行操作。 同样的,Windows 和 POSIX 命令使用环境变量的方式也有所不同。 对于POSIX,您可以使用:$ENV_VAR ,但是在 Windows 上需要使用 %ENV_VAR% 来设置环境变量。 上面的情况就是针对不同的操作系统平台,设置环境变量中使用的变量引用是不同的。 例如,我们常常用到的设置环境变量。 针对不同的操作系统环境 windows set NODE_ENV=production linux export NODE_ENV=production 同样的意思,如果我们需要根据不同的操作系统进行不同的设置的话是不是非常麻烦呀。 因此我们 cross-env 就能够大显身手了。 安装 如果你在使用的时候遇到了: > Code@1.0.0 dev /home/vagrant/Code > cross-env NODE_ENV=development webpack --progress --hide-modules sh: 1: cross-env: not found 这个提示的话,就说明你的系统平台中没有安装 cross-env。 你可以运行 sudo npm install --global cross-env 来进行安装和配置。   https://www.ossez.com/t/node-cross-env/13733

2021年09月11日 0Comments 901Browse 0Like Read more
Computer Science

如何禁用 Gmail 的分类(Categories )标签

Gmail 的默认界面提供了一个 Categories 标签。 如果下图:     这个标签会对收到的邮件进行默认分类。 但是有时候因为这个分类的存在,导致我们经常找不到邮件,很多人可能还是习惯按照时间的顺序来处理邮件。 你是可以禁用这个分类的。 进入设置 单击右上角的齿轮图标。 然后会弹出一个界面,在弹出的界面中选择查看所有设置。 Inbox 设置 然后在进入的设置中,选择 Inbox 标签页。 在 Inbox 标签页下面有一个分类选项。在默认情况下 Primary 是被选择的。 对不需要的其他分类,取消选择就可以了。     保存退出 然后到本页面的最下面。 选择 Save 保存按钮,保存退出后你的 Gmail 邮箱 Inbox 界面就会被刷新了。     这时候,你的邮箱是完全按照时间的顺序进行排序的,这样可能会符合很多人处理邮件的习惯。   https://www.ossez.com/t/gmail-categories/13732

2021年09月11日 0Comments 698Browse 0Like Read more
Computer Science

JavaScript 的 Math.floor() 函数

Math.floor() 返回小于或等于一个给定数字的最大整数。 可以理解 Math.floor()为向下取整。 与其相对的是 Math.ceil() ,这个是向上取整。 如下面的代码: Math.floor( 45.95); // 45 Math.floor( 45.05); // 45 Math.floor( 4 ); // 4 Math.floor(-45.05); // -46 Math.floor(-45.95); // -46 上图演示了这个函数的一些小对比。   https://www.ossez.com/t/javascript-math-floor/13731

2021年09月11日 0Comments 822Browse 0Like Read more
Computer Science

JavaScript 的 Math.ceil() 函数

Math.ceil() 函数返回大于或等于一个给定数字的最小整数。 需要注意的是 如果运行 Math.ceil(null) ,这个函数将会返回整数 0 而不会给出一个 NaN 错误。 请考察下面的代码: console.log(Math.ceil(.95)); // expected output: 1 console.log(Math.ceil(4)); // expected output: 4 console.log(Math.ceil(7.004)); // expected output: 8 console.log(Math.ceil(-7.004)); // expected output: -7 需要注意的是,如果是负数的话,那么获得整数就是舍去掉小数部分的整数了。   https://www.ossez.com/t/javascript-math-ceil/13730

2021年09月11日 0Comments 749Browse 0Like Read more
123
Archives
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,306)
    • Confluence (663)
    • Gradle (12)
  • U.S. (392)
  • 文化旅游 (142)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1