小编Axe*_*xel的帖子

如果在ajax调用期间显示警报窗口会发生什么?

我只是想知道如果在执行ajax调用时,在浏览器窗口中向用户提示警报会发生什么.

比如说,我有一个ajax调用

$.ajax({
    url: ...,
    type: GET/POST,
    ...
    success: function(data){
        console.log(data);
    },
    error: ...
});
Run Code Online (Sandbox Code Playgroud)

这需要很长时间才能完成(10秒).在执行调用时,会抛出一个简单的javascript警报

alert("hello!");
Run Code Online (Sandbox Code Playgroud)

例如,如果:

  1. ajax呼叫开始
  2. ajax调用获取数据
  3. 警报显示
  4. ajax调用返回数据(警报窗口仍然打开!)

知道JS是单线程的我知道脚本执行将停止,我只是想知道如果警报窗口没有"及时"关闭,ajax调用/响应会发生什么.

我希望我足够清楚,这不是一个"虚假"的问题.谢谢

javascript ajax single-threaded

52
推荐指数
2
解决办法
3076
查看次数

在生产中设置-XX:+ DisableExplicitGC:可能出现什么问题?

我们刚刚召开会议来解决用于计算保险费率的Web应用程序中的一些性能问题.计算在C/C++模块中实现,该模块也用于其他软件包.为了使其可用作Web服务,实现了一个Java包装器,它公开了一个基于XML的接口,并通过JNI调用C/C++模块.

测量表明,Java部分内的每次计算花费了几秒钟.所以我的第一次重新启动是在VM中启用垃圾收集日志记录.我们可以立刻看到许多世界上完整的GC已经完成.谈到这一点,java部分的开发人员告诉我们他们曾经System.gc()多次"确保在使用后释放内存".

好的,我不会再详细说明这个陈述...... ;-)

然后我们在上面添加-XX:+DisableExplicitGC了VMs参数并重新进行了测试.每次计算大约增加5秒.

由于我们无法System.gc()在发布过程中通过剥离所有这些调用来更改代码,因此我们正在考虑添加-XX:+DisableExplicitGC生产,直到可以创建新的Jar.

现在的问题是:这样做会有风险吗?关于我唯一能想到的是System.gc()重新部署时内部使用tomcat ,但这只是猜测.还有其他危险吗?

java tomcat garbage-collection

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

新文件("")与新文件("."):功能还是错误?

new File("")new File(".")产生相同的规范路径,但前一个对象是不可保存的.考虑下面的代码,以及两个对象如何返回相同的规范路径.文档说明规范路径"既绝对又独特".但只有用"."创建的文件.参数实际上是可用的.

不应该在某个时候抛出异常吗?在空字符串构造函数调用中(因为创建的对象似乎没有效果),或者至少在getCanonicalPath中(至少声明IOException)?

import java.io.File;
import java.io.IOException;

public abstract class Test {

    public static void main(String[] args) throws Exception {
        testFile("");
        testFile(".");
    }

    private static void testFile(String arg) throws IOException {
        System.out.format("File constructor argument: \"%s\"\n", arg);
        File g = new File(arg);
      System.out.format("toString()            = \"%s\"\n", g.toString());
        System.out.format("getAbsolutePath()     = \"%s\"\n", g.getAbsolutePath());
        System.out.format("getAbsoluteFile()     = \"%s\"\n", g.getAbsoluteFile());
        System.out.format("getgetCanonicalPath() = \"%s\"\n", g.getCanonicalPath());
        System.out.format("getgetCanonicalFile() = \"%s\"\n", g.getCanonicalFile());
        System.out.format("exists()              = %s\n", g.exists());
        System.out.format("isDirectory()         = %s\n", g.isDirectory());
        System.out.println();
  }
}
Run Code Online (Sandbox Code Playgroud)

它产生的输出:

File …
Run Code Online (Sandbox Code Playgroud)

java io file

33
推荐指数
3
解决办法
6350
查看次数

Java反射:按声明顺序获取字段和方法

有没有办法按照声明的顺序使用反射获取类声明的字段(和方法)?根据该文件,方法和字段的顺序返回的getFields(),getDeclaredFields()等是不确定的.

使用Java反射中建议的注释可以指定像索引之类的东西:类字段和方法的顺序是否标准化?

有没有更好的选择,即不必手动指定索引?

现在在你问我需要什么之前:我们有一个方法,它将一个非常大的数据结构作为输入,并对其进行冗长的计算.为了创建单元测试,我们创建了一个方法,该方法接受输入对象和输出实例,并创建Java源代码(设置输入,调用计算方法,然后断言正确的结果)作为输出.当字段按声明顺序编写时,此代码更易读.

java reflection junit

28
推荐指数
3
解决办法
1万
查看次数

如何在Java中计算枚举的哈希码,并将枚举hashCodes与HashMap的键组合

我有一个包含不同枚举(不同类型)的类.该类用作a的键HashMap.hashCode类目前实现如下:

  public static class Key implements Comparable<Key> {
    final int a;
    final Enum1 enum1;
    final Enum2 enum2;

    @Override
    public int hashCode() {
      return a ^ enum1.hashCode() ^ enum2.hashCode();
    }

    // ... definition of equals and toString ...
  }
Run Code Online (Sandbox Code Playgroud)

现在,如果枚举hashCode只返回枚举定义中枚举值的索引,这将不是最佳的(太多冲突).方法定义Enum.hashCode()是这样的:

/**
 * Returns a hash code for this enum constant.
 *
 * @return a hash code for this enum constant.
 */
public final int hashCode() {
    return super.hashCode();
}
Run Code Online (Sandbox Code Playgroud)

假设这个委托Object.hashCode(),一切都应该没问题,因为每个枚举常量只存在一个实例,Object.hashCode()理论上就是从对象的内部地址派生的整数.我对吗?

PS:当在键中多次使用相同的枚举时,你将不得不使用更复杂的东西.

java enums hashmap hashcode

20
推荐指数
2
解决办法
2万
查看次数

正则表达式与从Formatter对象获得的换行符不匹配

我无法匹配时,通过使用所获得的含有换行符换行符字符串%nFormatter对象或String.format().请看下面的程序:

public class RegExTest {

  public static void main(String[] args) {
    String input1 = String.format("Hallo\nnext line");
    String input2 = String.format("Hallo%nnext line");
    String pattern = ".*[\n\r].*";
    System.out.println(input1+": "+input1.matches(pattern));
    System.out.println(input2+": "+input2.matches(pattern));
  }

}
Run Code Online (Sandbox Code Playgroud)

及其输出:

Hallo
next line: true
Hallo
next line: false
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?为什么第二个字符串不匹配?

Java版本是1.6.0_21.

java regex formatter

18
推荐指数
2
解决办法
3万
查看次数

在没有初始化程序的情况下将局部变量声明为final,并在if语句中指定

我只是做了一个小代码更改来沉默FindBugs警告,该警告需要将一些代码移动到匿名内部类.为了访问一些变量,我不得不将它们声明为final.所以这是更改后的代码片段:

final File[] libPath; // libPath is final but assignment takes place later
if (libraryPath != null) {
    libPath = pathToFiles(libraryPath);
} else {
    libPath = new File[0];
}
Run Code Online (Sandbox Code Playgroud)

这在当前Eclipse(版本3.7.1)中使用设置为Java 6的语言编译得很好.但是我很确定这曾经在某些先前版本中出错.似乎编译器在确定存在时接受此构造.

我的问题是:这在Java 6中是否合法,或者由于Java 7支持的副作用被添加到eclipse 3.7.1中,它现在是否可行?我们已经看到了这些副作用,其中某些泛型的使用在3.7.1中有效但在3.7.0中没有编译.

java eclipse variables final declaration

14
推荐指数
2
解决办法
4385
查看次数

在Java 7中是否允许从Number转换为double?(自动装箱)

一位同事检查了这段代码:

    Number n = ...;
    double nr = n == null ? 0.0 : (double) n;
Run Code Online (Sandbox Code Playgroud)

然后另一位同事抱怨说这没有编译,这就是我所期待的.然而,事实证明我已经从SVN中提取了这些代码并且一切正常.我们都在eclipse中将Java版本设置为1.7,结果证明代码在eclipse 4.4.2(Luna)下编译得很好但在4.2.2下失败了.

我通过替换演员来解决问题n.doubleValue().

现在的实际问题是:为什么这首先被接受了?它当然应该工作的铸造时Double的代替double,但我认为,从直接投Numberdouble被判无效.那么,这是eclipse 4.2.2中的一个错误,在此期间修复了,或者eclipse 4.4.2是否默默接受不应该编译的代码(恕我直言,这将是一个错误)?

java eclipse unboxing

12
推荐指数
1
解决办法
1367
查看次数

即使它是关键字,使用“record”作为变量名是否合法?

这令人惊讶:我能够用该名称声明一个变量,record即使它现在已成为关键字。看看这个:

public class Main {
    
    static class Foo {
        void bar() { System.out.println("Foo.bar"); }
    }
    
    record R (int a) {}
    
    public static void main(String[] args) {
        Foo record = new Foo();
        record.bar();
        
        R r = new R(5);
        System.out.println(r);
    }
}
Run Code Online (Sandbox Code Playgroud)

当使用 Java 17 编译并运行时,会给出:

Foo.bar
R[a=5]
Run Code Online (Sandbox Code Playgroud)

我原以为这会导致错误,就像尝试声明名为 的变量时的情况一样class。据我所知,Java 人员非常小心,不破坏现有代码,因此我认为这可能是一个经过深思熟虑的选择。

(你甚至不能声明一个名为 name 的变量,const因为它const Java 中的关键字。)

java jls java-record java-17

11
推荐指数
2
解决办法
2034
查看次数

如何使用webpack内联CSS中的字体?

问题背景:我正在使用katex在页面上渲染一些数学。然后,我想创建该页面一部分的PDF版本,因此我创建了一个HTML文档,其中包含要导出的部分,它内联了所有CSS并将其传递给渲染器。渲染器无法访问节点资源,这就是内联所有内容的原因。除字体外,它运行完美。

我同时尝试了url-loader和bas64-inline-loader,但是生成的字体没有内联。我在调试器中检查了生成的CSS,旧的URL仍然存在,没有字体的data-URL。

这是我当前的webpack.config.js:

const path = require('path');
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    mode: 'development',
    entry: {
        "editor": './src/editor.js',
        "editor.worker": 'monaco-editor/esm/vs/editor/editor.worker.js',
        "json.worker": 'monaco-editor/esm/vs/language/json/json.worker',
        "css.worker": 'monaco-editor/esm/vs/language/css/css.worker',
        "html.worker": 'monaco-editor/esm/vs/language/html/html.worker',
        "ts.worker": 'monaco-editor/esm/vs/language/typescript/ts.worker',
    },
    output: {
        globalObject: 'self',
        filename: '[name].bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [
            {
                test: /\.(woff|woff2|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
                use: ['url-loader']
            },
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader']
            }
        ]
    },
    plugins: [
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
            filename: 'editor_text.html',
            template: 'src/editor_text.html'
        }),
        new HtmlWebpackPlugin({
            filename: 'editor_markdown.html',
            template: …
Run Code Online (Sandbox Code Playgroud)

javascript css data-uri webpack

10
推荐指数
1
解决办法
229
查看次数