小编Bas*_*ass的帖子

JavaScript和ECMAScript中的单行"<! - "注释

在上个世纪,有一个流行的"黑客"隐藏JavaScript从非启用JavaScript的浏览器:

<script type = "text/javascript">
    <!--
    alert("Hello, World!");
    // --> Your browser doesn't support JavaScript
</script>
Run Code Online (Sandbox Code Playgroud)

尽管<!--在许多教程中解释为仅仅是单行JavaScript注释,但在ECMAScript标准中没有提及它(参见7.4注释).虽然是非标准的,但所有现代浏览器都支持这种类型的注释,因此您可以用它注释掉任何JavaScript代码:

<script type = "text/javascript">
    <!-- alert("Hello, World!");
    <!-- This is a comment
    <!-- This is another comment
    <!-- This is yet another comment
</script>
Run Code Online (Sandbox Code Playgroud)

但是,有一个例外:eval()功能.以下代码在Communicator 4.x/Mozilla/Opera(Presto)/ Safari/Chrome中正常工作,但在MSIE中导致语法错误:

<form action = "#">
    <script type = "text/javascript">
        function testEval() {
            var s = "<!--\n";
            s += "alert(\"eval() invoked\");\n";
            s += "// -->"
            eval(s);
        }
    </script>
    <input type …
Run Code Online (Sandbox Code Playgroud)

javascript ecma262

7
推荐指数
0
解决办法
60
查看次数

特定于语言环境的XFontSet扩展

在我的Motif应用程序中(源代码在这里,需要Motif 2.1 +(-lXm -lXt -lX11)和C99兼容的编译器;在Cygwin上应另外链接-liconv),我正在尝试XFontSet从与编码无关的XLFD转换为实例(如-monotype-arial-medium-r-normal--*-90-*-*-p-0-*-*)被正确地扩展到多个单独的XFontStruct条目(...-iso8859-1,...-iso8859-5,...-iso10646-1等)相匹配的当前区域.

我发现在某些语言环境(en_US.UTF-8,ru_RU.ISO-8859-5)中,XFontSet扩展可以完美地工作,而在其他语言环境中(ru_RU.UTF-8,ru_RU)它不会(字体集中不适当的单个字体),导致除了Latin-1平面中的字符以外的字符呈现不正确.

问题:

  1. 如何排除Motif或X11客户端库(libXt,libX11)作为主要嫌疑人?
  2. 特别是,(如何)我可以使用字体集(XFontSet)而不是常规字体(XFontStruct)显示文本标签而不依赖于Motif - 理想情况下使用Athena小部件集?
  3. 说到普通的libX11API,我的理解是否正确我应该尝试使用XmbDrawString()和XwcDrawString()系列函数?

如果您有其他评论.代码,不直接回答上述问题,但可以帮助追踪问题 - 欢迎这些.


TL; DR版本

我特别感兴趣的是,无论当前的语言环境如何,都能正确显示Cyrillic,前提是:

  • X11支持语言环境
  • 西里尔语可以在当地的字符集中表现出来.

这给我留下了以下语言环境列表:

  • ru_RU;
  • ru_RU.ISO-8859-5 (应与ru_RU相同,但不是,见下文);
  • ru_RU.KOI8-R;
  • ru_RU.CP1251;
  • ru_RU.UTF-8;
  • en_US.UTF-8以及任何xx_YY.UTF-8 …

c x11 fonts localization motif

7
推荐指数
0
解决办法
174
查看次数

Thread.holdsLock()和锁定粗化

假设我有两个相邻的synchronized块,Thread.holdsLock()它们之间有一个调用:

final Object lock = new Object();
// ...
synchronized (lock) {
    // do stuff
}
if (Thread.holdsLock(lock)) {
    throw new IllegalStateException();
}
synchronized (lock) {
    // do more stuff
}
Run Code Online (Sandbox Code Playgroud)

现在,如果在某些时候JVM决定粗化锁并合并上面的synchronized块呢?将Thread.holdsLock()调用仍然返回false,或者代码是否会因异常而失败?

java concurrency multithreading

7
推荐指数
1
解决办法
306
查看次数

Java中的可中断网络I/O.

在Java 1.4+中,有3种方法可以中断在套接字I/O上阻塞的流:

  1. 如果套接字是使用常规java.net.Socket(InetAddress, int)构造函数创建的,我可以从单独的线程中关闭它.结果,SocketException在被阻塞的线程中抛出了a .
  2. 如果套接字是使用创建的SocketChannel.open(...).socket()(非阻塞I/O) - 再次,可以从单独的线程关闭它,但现在AsynchronousCloseException在被阻塞的线程中抛出了一个不同的异常(an ).
  3. 此外,如果使用非阻塞I/O,则可以通过ClosedByInterruptException抛出来中断被阻塞的线程.使用旧式Java I/O时中断被阻塞的线程对该线程没有影响.

问题:

  1. 在使用旧式I/O时,是否从单独的线程关闭套接字线程安全?如果没有,有哪些替代方案?
  2. 在使用NIO时,是否从单独的线程关闭套接字/通道线程安全
  3. Socket.close()使用NIO而不是常规IO时,行为有什么不同吗?
  4. 除了通过简单地中断线程来终止阻塞的I/O操作(以便我不再需要保持对套接字的引用)之外,使用NIO进行网络是否有任何好处?

java io multithreading nio

6
推荐指数
1
解决办法
1111
查看次数

Eclipse无法清除构建输出

我有一个由大约60个项目组成的Eclipse(4.4.1)工作集(数字可能是相关的,因为刷新工作区需要更多时间).偶尔,我遇到构建失败,因为Eclipse在构建之前无法清理输出文件夹:

Eclipse构建问题

事实证明,锁定文件的过程是Eclipse本身:

在此输入图像描述

事实证明,被锁定的文件始终是XML内容.特别是,如果我将具有*.foo扩展名的资源定义为XML文件(通过首选项 - >常规 - >内容类型),那么一旦将它们复制到输出路径,它们很可能也会被锁定.

我认为问题是由自动验证的所有XML资源引起的:

在此输入图像描述

- 所以我添加了第一个排除过滤器,甚至完全禁用了XML/XSD验证.问题经常停止发生,但仍然不时出现.刷新或关闭 - 重新打开项目没有帮助.

唯一的补救措施是每半小时重新启动Eclipse或运行Unlocker,这不是很方便.

任何想法如何解决或至少进一步诊断这个?

java xml eclipse

6
推荐指数
1
解决办法
3371
查看次数

用PIT找到无用的单元测试

假设我们有一个我们想要测试的代码:

class C {
    int doSmth() {
        return 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在假设我们在一个类中放置了2个单元测试.第一个"测试一切",而第二个"无所事事":

@RunWith(JUnit4.class)
public final class CTest {

    @Test
    @SuppressWarnings("static-method")
    public void testDoSmth() {
        assertEquals(1, new C().doSmth());
    }

    @Test
    @SuppressWarnings("static-method")
    public void testDoSmth2() throws Exception {
        Thread.sleep(1000);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个IRL示例:我已经看到通过用一些无用的代码替换测试内容来"修复"了几十个测试,因为测试的代码合同随着时间的推移而变化.

现在,PIT"入口"单元是一个包含测试方法的类(不是单独的测试方法本身),因此在上述情况下,PIT不仅会显示100%的线覆盖率,还会显示100%的突变覆盖率.

好的,我很高兴知道我有100%的突变覆盖率,但是如何识别无用的测试 - testDoSmth2()在上述情况下(假设我的突变覆盖率很高)?

java unit-testing mutation-testing pitest

6
推荐指数
1
解决办法
584
查看次数

从父Path实例创建子NIO.2路径

java.nio.file.Path如果我已经有一个指向同一文件系统上的父目录的实例,如何创建表示子路径的实例?

目前,我正在使用

final Path parent = Paths.get("usr", "local");
final Path child = Paths.get(parent.toString(), "bin");
Run Code Online (Sandbox Code Playgroud)

- 但这看起来并不优雅.

我正在寻找的是NIO的某种java.io.File(File parent, String child)构造函数.

java nio path

6
推荐指数
1
解决办法
1925
查看次数

MySQL无法正在写入的ALTER TABLE

在我的应用程序的一个用例中,我有两个并发的MySQL连接:

  • 一个主动写入一个名为的表T(实际上,不断更新此表中的一行),和
  • 另一个针对非常相同的表执行DDL( ALTER TABLE,添加8个新列和从延伸的一个列varchar(80)varchar(2000)).预计DDL最终会完成.

在列UPDATEDML都不会受到DDL.

该表只包含一行(一行是UPDATE'd).

分析

当运行涵盖此用例的集成测试时,我观察到的是测试超时(表正在如此主动地写入,以便DDL永远不会完成),但仅适用于MySQL 5.7.通常情况下,测试预计会在30秒内在我们的硬件上完成(对于MySQL 5.6和8.0 确实会发生),但对于MySQL 5.7甚至200秒是不够的.我已经尝试了不同的ALGORITHMLOCK值(见13.1.8 ALTER TABLE语法),没有运气.

当我描述我的应用程序(MySQL 5.7案例)时,我发现99%的CPU时间用于从套接字读取(即等待MySQL响应表已被更改),但数据库实例是一种黑色盒子给我 - 当然我已经performance_schema启用并可以对它运行查询,但我不知道我正在寻找哪些确切的信息.

合成

与此同时,我没有将问题简化为最小的自包含单元测试 - 我发现,与其他MySQL版本相比,MySQL 5.7 测试所用时间增加了3倍10倍,但DDL没有永远挂起:

在此输入图像描述

所有MySQL版本都是Windows版的库存版或从www.mysql.com下载的Debian Linux版本,只有极少的更改或官方Docker镜像.my.cnf

问题:

  1. 从技术上讲,MySQL是否可以ALTER TABLE …

java mysql innodb jdbc

6
推荐指数
1
解决办法
431
查看次数

Java 中通过 POSIX AIO 或 Windows Overlapped IO 的异步文件 I/O

System.IO.File.NET.NET Core 中有一系列Read...Async()方法,所有这些方法都返回Task<byte[]>Task<string>Task<T>.NETJava 的 等价物Future<T>)。

这看起来在很大程度上等同于AsynchronousFileChannelAPI(它们要么消耗CompletionHandler或返回 a Future),但有一个主要区别。

  • AsynchronousFileChannel 使用托管后台线程执行异步 I/O(该线程可能由默认线程池提供(sun.nio.ch.ThreadPool ) 或ExecutorService在通道创建期间显式指定的)。
  • FileStream另一方面,.NET 中的实现将FileOptions.Asynchronous标志传递给底层操作系统(另请参阅同步和异步 I/O),不产生任何托管后台线程并使用所谓的重叠 I/O

问题:

  • 是否有任何(现有或计划)文件I / O API的Java它将使用重叠I / O的WindowsPOSIX AIO在Unix系统?更新:特定于Windows 的Java运行时功能sun.nio.ch.WindowsAsynchronousFileChannelImpl,这正是重叠 I/O之上的抽象层。
  • 是否有计划提供 …

java io nio aio overlapped-io

6
推荐指数
1
解决办法
807
查看次数

如何防止Mozilla在HiDPI显示器上放大图像?

在查看光栅图像时,或多或少的所有最新Mozilla产品(例如FirefoxSeaMonkey)都将其转换为完整的HTML文档,例如:

<html>
  <head>
    <meta name="viewport" content="width=device-width; height=device-height;">
    <link rel="stylesheet" href="resource://gre/res/ImageDocument.css">
    <link rel="stylesheet" href="resource://gre/res/TopLevelImageDocument.css">
    <link rel="stylesheet" href="chrome://global/skin/media/TopLevelImageDocument.css">
    <title>googlelogo_color_272x92dp.png (PNG Image, 544&nbsp;×&nbsp;184 pixels)</title>
  </head>
  <body>
    <img src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png" alt="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png">
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

默认CSS样式的内容可以在此处查看:

问题在于,在HiDPI显示器上,低分辨率图像经常会放大(例如,在4k显示器上,它们放大了x1.5倍)。

为了使图像始终以其原始大小(即1:1)显示,我需要对生成的HTML应用哪些其他样式?

我正在寻找自定义userContent.css或的正确方法userChrome.css

更多内容userChrome.css

html css firefox seamonkey

5
推荐指数
1
解决办法
176
查看次数