小编bat*_*man的帖子

正则表达式中/ gi的含义是什么?

我在我的JavaScript代码中看到一行如下:

var regex = /[^\w\s]/gi;
Run Code Online (Sandbox Code Playgroud)

/gi正则表达式中这是什么意思?

其他部分我可以理解,因为它接受一组单词和空格,但不是/gi.

javascript regex

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

onClick不会呈现新的反应组件.

我是新的反应世界,我有这样的行:

<Button onClick={() => console.log("hello")}>Button</Button>
Run Code Online (Sandbox Code Playgroud)

点击后,您将hello在控制台上打印出来.现在将行更改为:

<Button onClick={() => <NewComponent />}>Button</Button>
Run Code Online (Sandbox Code Playgroud)

现在单击按钮,我希望NewComponent渲染.但事实并非如此.

我不确定,为什么会这样.请注意,我在render方法中有上面的代码.

javascript reactjs

26
推荐指数
3
解决办法
6万
查看次数

JVM是32 OR 64 BIT?

这里读这本书的时候.

我可以看到以下部分,其中说:

32或64位?如果您有32位操作系统,则必须使用32位版本的JVM.如果您有64位操作系统,则可以选择使用32位或64位版本的Java.不要以为仅仅因为您拥有64位操作系统,您还必须使用64位版本的Java.

如果堆的大小小于约3 GB,则32位版本的Java将更快并且占用空间更小.这是因为JVM中的内存引用只有32位,操作这些内存引用比操作64位引用要便宜(即使你有64位CPU).32位引用也使用较少的内存.

第8章讨论了压缩oops,这是JVM甚至可以在64位JVM中使用32位地址的一种方式.但是,即使进行了这种优化,64位JVM的占用空间也会更大,因为它使用的本机代码仍然具有64位地址.

32位JVM的缺点是总进程大小必须小于4GB(在某些版本的Windows上为3GB,在某些旧版本的Linux上为3.5GB).这包括堆,permgen以及JVM使用的本机代码和本机内存.在32位JVM上广泛使用长变量或双变量的程序会更慢,因为它们不能使用CPU的64位寄存器,尽管这是一种非常特殊的情况.

适合32位地址空间的程序在32位JVM中的运行速度比类似配置的64位JVM快5%到20%.例如,本章前面讨论的库存批处理程序在桌面上运行32位JVM时速度提高了20%.

这些行说明,对于较小的堆大小(小于3GB),32位会更快.如果这是真的,我想知道它背后的原因,是什么让32位JVM更快?

java performance jvm

25
推荐指数
2
解决办法
3908
查看次数

二进制运算符执行何时在Java中执行?

我正在尝试理解java字节码.我从简单的例子开始:

public class Test
{
    public static void main(String args[])
    {
        System.out.println(2 + 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

我编译了这个类:

javac Test.java
Run Code Online (Sandbox Code Playgroud)

然后我尝试javap在.class上像这样:

javap -c Test
Run Code Online (Sandbox Code Playgroud)

这给了我这个:

Compiled from "Test.java"
public class Test {
  public Test();
    Code:
       0: aload_0       
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return        

  public static void main(java.lang.String[]);
    Code:
       0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
       3: iconst_1      
       4: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
       7: return        
}
Run Code Online (Sandbox Code Playgroud)

除了这一行,我能够理解它:

public static void main(java.lang.String[]);
. . . 
3: iconst_1    
. . …
Run Code Online (Sandbox Code Playgroud)

java jvm bytecode

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

getClass()是如何在java中实现的?

我有这样的代码:

public class QueueSample {

    public static void main(String[] args) {
        System.out.println(new QueueSample().getClass());
    }

}
Run Code Online (Sandbox Code Playgroud)

它打印:

class QueueSample
Run Code Online (Sandbox Code Playgroud)

getClass()方法来自Object班级.看一下源代码Object,我只能看到这样的方法定义:

public final native Class<?> getClass();
Run Code Online (Sandbox Code Playgroud)

如果没有在这里实现,这个方法在哪里以及如何实现?

java

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

如何对只调用其他函数的函数进行单元测试?

我的代码库(旧版)中有一个函数,它具有:

function test()
{
 method1("#input a")
 method2("test")
 method3(1,2)
}
Run Code Online (Sandbox Code Playgroud)

鉴于它调用 other 的事实methods,如何为这些类型的函数编写一个好的单元测试?

javascript unit-testing

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

编写IIFE的不同方法有哪些?他们的用例是什么?

我已经开始阅读本书了.第2章说,编写IIFE有不同的方法:

!function (){}() 
~function (){}() 
+function (){}() 
-function (){}()
new function (){} 
1,function (){}() 
1&&function (){}() 
var i=function (){}()
Run Code Online (Sandbox Code Playgroud)

作者说:

每个表现形式都有其独特的品质和优势 - 一些具有较少的字节,一些更安全的连接,每个有效和每个可执行文件.

我是JS的新手.我知道IIFE是什么,但这些IIFE形式究竟做了什么?

javascript function iife

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

泛型类型参数有限,没有传递实数类型

我遇到过这段代码:

 public static <K,V> HashMap<K,V> newHashMap() {
       return new HashMap<K,V>();
}
Run Code Online (Sandbox Code Playgroud)

我们可以使用它来创建一个实例HashMap,如下所示:

Map<String, List<String>> anagrams = newHashMap();
Run Code Online (Sandbox Code Playgroud)

现在的问题是newHashMap调用方法而不传递所需的类型(在本例中为its(String, List<String>)),但java仍在创建正确的类型.如何?

我在这里很困惑,如何K,V在代码左侧提到的类型中受到限制:

Map<String, List<String>>
Run Code Online (Sandbox Code Playgroud)

甚至没有传递:

newHashMap();
Run Code Online (Sandbox Code Playgroud)

java generics

5
推荐指数
2
解决办法
142
查看次数

无法在"节点"上执行"insertBefore":插入新节点的节点不是此节点的子节点

我正在尝试<name>在我的xml中的特定节点()之前插入注释节点.这是它的方法:

function test(xmlResponse)
{
    var parser = new DOMParser(), xmlDoc = parser.parseFromString(xmlResponse,"text/xml");

    var comentDocument = document.createComment("My personal comments");

    console.log(xmlDoc.querySelectorAll("street name")[0])
    xmlDoc.insertBefore( comentDocument ,  xmlDoc.querySelectorAll("street name")[0]);

    return xmlDoc
}
Run Code Online (Sandbox Code Playgroud)

当我打电话时:

test("<address><street><name>Street name</name></street></address>")
Run Code Online (Sandbox Code Playgroud)

我明白了:

<name>Street name</name>
Uncaught DOMException: Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.
    at Error (native)
    at generateTheComment (<anonymous>:12:9)
    at <anonymous>:2:1
    at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
    at Object.InjectedScript.evaluate (<anonymous>:694:21)
Run Code Online (Sandbox Code Playgroud)

如您所见, …

javascript xml

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

为什么当"?延伸Klass"被允许时,泛型被认为是不变的?

在Java中,它说:

String[] is subtype of Object[]
Run Code Online (Sandbox Code Playgroud)

所以阵列据说是协变的.但对于仿制药他们说:

List<X> will not be subType of List<Y>.
Run Code Online (Sandbox Code Playgroud)

因此它不变.但问题是," 仿制药是否真的不变 "?

例如,如果我给:

List<? extends Exception>
Run Code Online (Sandbox Code Playgroud)

这意味着列表可以采取亚型Exception,比方说,这是有效的:

List<? extends Exception> k = new ArrayList<NumberFormatException>();
Run Code Online (Sandbox Code Playgroud)

那么为什么泛型被认为是不变的呢?

java generics

4
推荐指数
1
解决办法
128
查看次数