在终端中给定的非常长的命令行上移动的最佳方法是什么?
假设我使用了箭头键或Ctrl- R来获得这个长命令行:
./cmd --option1 --option2 --option3 --option4 --option5 --option6 --option7 --option8 --option9 --option10 --option11 --option12 --option13 --option14 --option15 --option16 --option17 --option18 --option19 --option20 --option21 --option22 --option23 --option24 --option25 --option26 --option27 --option28 --option29 --option30 --option31 --option32 --option33 --option34 --option35 --option36 --option37 --option38 --option39 --option40 --option41 --option42 --option43 --option44 --option45 --option46 --option47 --option48 --option49 --option50
Run Code Online (Sandbox Code Playgroud)
现在我需要移动(从行的开头或结尾开始)光标到--option25
那里修改一些东西.
到达那里最快的方法是什么?我通常做的是Ctrl- A开始然后反复Alt- F逐字逐句前进(或者Ctrl- E结束Alt- B然后- 后退).但是在很长的路线上需要花费太多时间.必须有一种方法来搜索并直接跳转到我需要修改的部分,例如option25
?
<html lang="en">
和之间有什么区别<html lang="en-US">
?破折号后面还有哪些其他值?
根据w3.org "任何双字母子代码被理解为[ISO3166]国家代码." 这是否意味着alpha-2代码下列出的任何值都是可接受的值?
我被指示"不要打扰LIKE
"并~
改为使用.什么是错的LIKE
又是怎样的~
不同?
~
在这种情况下是否有名称或者人们说"使用代字号运算符"?
Java的foreach循环是从第一个对象开始,以线性方式工作到最后吗?例如
String[] names = new String[] {"Zoe", "Bob", "Charlie", "Alex"};
for(String name : names) {
//do stuff...
}
Run Code Online (Sandbox Code Playgroud)
首先处理字符串"Zoe",然后是"Bob"等吗?没有排序?我自己测试了一下,但没有找到,但我需要保证,在文档中找不到任何东西.
我只是学习JavaScript,似乎有很多方法可以声明数组.
var myArray = new Array()
var myArray = new Array(3)
var myArray = ["apples", "bananas", "oranges"]
var myArray = [3]
它们的区别是什么,首选方式是什么?
根据这个网站,以下两行非常不同:
var badArray = new Array(10); // creates an empty Array that's sized for 10 elements
var goodArray= [10]; // creates an Array with 10 as the first element
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这两条线做了两件完全不同的事情.如果您想添加多个项目,那么badArray将被正确初始化,因为Javascript会足够聪明地知道您正在初始化数组而不是说明您想要添加多少元素.
作者试图说的是Array(10)
创建一个精确有10个元素[10]
的数组,并创建一个未定义大小的数组,第0个元素是10?或者这是什么意思?
我知道编译器对整数文字进行隐式类型转换.例如:
byte b = 2; // implicit type conversion, same as byte b = (byte)2;
Run Code Online (Sandbox Code Playgroud)
如果范围溢出,编译器会给出错误:
byte b = 150; // error, it says cannot convert from int to byte
Run Code Online (Sandbox Code Playgroud)
当变量传递表达式时,编译器会给出相同的错误:
byte a = 3;
byte b = 5;
byte c = 2 + 7; // compiles fine
byte d = 1 + b; // error, it says cannot convert from int to byte
byte e = a + b; // error, it says cannot convert from int to byte …
Run Code Online (Sandbox Code Playgroud) 从这里:
指令和数据具有不同的访问模式,并访问不同的内存区域.因此,对于指令和数据具有相同的高速缓存可能并不总是有效.
因此,拥有两个缓存是相当普遍的:仅存储指令的指令缓存和仅存储数据的数据缓存.
知道指令和数据之间的区别是直观的,但现在我不确定这种情况下的区别吗?什么构成数据并被放入数据缓存中,什么构成指令并被放入指令缓存?
我知道ARM组装.请问什么需要STR
,LDR
,LDMF
或者STMFD
使用数据缓存?但是从技术上来讲STR
,LDR
,LDMF
和STMFD
都说明,所以我这就是为什么我很困惑."数据"必须始终存在"指令"吗?是否在该.data
部分中考虑了数据?
例如,LDR R1, =myVar
那么LDR会进入指令缓存并且myVar的内容会进入数据缓存吗?或者它不是那样的工作?
说明和数据有不同的访问模式有人可以详细说明吗?
我在一篇有用的帖子上发表的评论突显了我难以理解:
"我的想法是,如果一条指令已经从内存中加载,它可能会很快再次使用",但知道下一条指令的唯一方法就是读取它.这意味着内存读取(你不能说它已经在缓存中了,因为新指令是红色的).所以我仍然没有看到这一点?说刚刚发生了LDR指令,所以现在LDR在数据缓存中.可能会发生另一条LDR指令,也许它不会发生,我们无法确定所以我们必须实际读取下一条指令 - 从而破坏了缓存的目的.
我知道不使用它们,但是有一些技术可以在不使用第三个变量的情况下交换两个变量,例如
x ^= y;
y ^= x;
x ^= y;
Run Code Online (Sandbox Code Playgroud)
和
x = x + y
y = x - y
x = x - y
Run Code Online (Sandbox Code Playgroud)
在课堂上,教授提到这些在20年前很流行,当时内存非常有限,至今仍在高性能应用中使用.这是真的?我对使用这种技术毫无意义的理解是:
那么是否有时间不与第三个变量交换?它更快吗?
相比之下,使用XOR的方法与使用+/-更快的方法相比?大多数架构都有一个加/减和XOR的单位,所以这并不意味着它们的速度都相同吗?或者仅仅因为CPU有一个操作单元并不意味着它们的速度都相同?