我在我的JavaScript代码中看到一行如下:
var regex = /[^\w\s]/gi;
Run Code Online (Sandbox Code Playgroud)
/gi
正则表达式中这是什么意思?
其他部分我可以理解,因为它接受一组单词和空格,但不是/gi
.
我是新的反应世界,我有这样的行:
<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
方法中有上面的代码.
在这里读这本书的时候.
我可以看到以下部分,其中说:
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字节码.我从简单的例子开始:
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) 我有这样的代码:
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)
如果没有在这里实现,这个方法在哪里以及如何实现?
我的代码库(旧版)中有一个函数,它具有:
function test()
{
method1("#input a")
method2("test")
method3(1,2)
}
Run Code Online (Sandbox Code Playgroud)
鉴于它调用 other 的事实methods
,如何为这些类型的函数编写一个好的单元测试?
我已经开始阅读这本书了.第2章说,编写IIFE有不同的方法:
!function (){}()
~function (){}()
+function (){}()
-function (){}()
new function (){}
1,function (){}()
1&&function (){}()
var i=function (){}()
Run Code Online (Sandbox Code Playgroud)
作者说:
每个表现形式都有其独特的品质和优势 - 一些具有较少的字节,一些更安全的连接,每个有效和每个可执行文件.
我是JS的新手.我知道IIFE是什么,但这些IIFE形式究竟做了什么?
我遇到过这段代码:
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) 我正在尝试<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)
如您所见, …
在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 ×5
javascript ×5
generics ×2
jvm ×2
bytecode ×1
function ×1
iife ×1
performance ×1
reactjs ×1
regex ×1
unit-testing ×1
xml ×1