假设我在Java中有一个地图,如下所示:
{
39:"39 to 41",
41:"41 to 43",
43:"43 to 45",
45:">=45"
}
Run Code Online (Sandbox Code Playgroud)
如果键是按排序顺序(使用treemap或linkedhashmap).现在,如果我尝试获得> = 39且<41的值.那么我应该得到字符串"39到41".如何有效地执行此操作?
x86(和x86_64)处理器不仅具有单字节NOP指令,而且还具有各种类型的多字节NOP类指令,这不是一个大秘密.
我找到了那些:
AMD推荐,参考.用于AMD系列15h处理器的AMD软件优化指南,文档#47414,第5.8节"带操作数大小覆盖和多字节NOP的代码填充",第94页)
90 NOP1_OVERRIDE_NOP
6690 NOP2_OVERRIDE_NOP
0f1f00 NOP3_OVERRIDE_NOP
0f1f4000 NOP4_OVERRIDE_NOP
0f1f440000 NOP5_OVERRIDE_NOP
660f1f440000 NOP6_OVERRIDE_NOP
0f1f8000000000 NOP7_OVERRIDE_NOP
0f1f840000000000 NOP8_OVERRIDE_NOP
660f1f840000000000 NOP9_OVERRIDE_NOP
66660f1f840000000000 NOP10_OVERRIDE_NOP
6666660f1f840000000000 NOP11_OVERRIDE_NOP
Run Code Online (Sandbox Code Playgroud)
英特尔推荐,参考.英特尔64和IA-32架构软件开发人员手册卷2B:指令集参考,新西兰,"NOP"部分
90 NOP
6690 66 NOP
0f1f00 NOP DWORD ptr [EAX]
0f1f4000 NOP DWORD ptr [EAX + 00H]
0f1f440000 NOP DWORD ptr [EAX + EAX*1 + 00H]
660f1f440000 66 NOP DWORD ptr [EAX + EAX*1 + 00H]
0f1f8000000000 NOP DWORD ptr [EAX + 00000000H]
0f1f840000000000 NOP DWORD ptr [EAX …Run Code Online (Sandbox Code Playgroud) 当一个类似Bash的脚本作为没有shebang的二进制文件执行时,如何以及由谁决定执行什么?
我想用 shebang 运行一个普通的脚本是用binfmt_script Linux模块处理的,它检查一个shebang,parses命令行并运行指定的脚本解释器.
但是当有人在没有shebang的情况下运行脚本时会发生什么?我已经测试了直接execv方法并发现那里没有内核魔法 - 即像这样的文件:
$ cat target-script
echo Hello
echo "bash: $BASH_VERSION"
echo "zsh: $ZSH_VERSION"
Run Code Online (Sandbox Code Playgroud)
运行仅执行execv调用的已编译C程序会产生:
$ cat test-runner.c
void main() {
if (execv("./target-script", 0) == -1)
perror();
}
$ ./test-runner
./target-script: Exec format error
但是,如果我从另一个shell脚本执行相同的操作,它将使用与原始shell脚本相同的shell解释器运行目标脚本:
$ cat test-runner.bash #!/bin/bash ./target-script $ ./test-runner.bash Hello bash: 4.1.0(1)-release zsh:
如果我使用其他shell执行相同的技巧(例如,Debian的默认值sh- /bin/dash),它也可以:
$ cat test-runner.dash #!/bin/dash ./target-script $ ./test-runner.dash Hello bash: zsh:
神秘的是,它与zsh没有达到预期的效果,并且不遵循一般方案./bin/sh毕竟看起来像zsh 在这些文件上执行:
greycat@burrow-debian ~/z/test-runner …
我有几乎相同的数据结构中提到的问题,可以将一系列键映射到值,但对于Scala.
也就是说,我希望有一个非重叠的1D范围[a [i],b [i])的可变系统,它将映射到某种值v [i].执行此类工作的标准基础数据结构是红黑树.
我希望它拥有的操作,最好是所有操作都应该具有O(log n)的复杂度:
所以,我想到目前为止,我看到以下变种,所有这些都有其缺点:
floorEntry我在这里错过了什么吗?是否存在使用Scala中心API扩展基本Scala集合的类似Guava的维护良好的集合扩展库?
强烈相关的问题:
众所周知,emacs可以用作终端仿真器(虽然它本身在终端仿真器中运行),因此使其成为更传统的终端终端方法的有效替代方案,例如tmux或screen.但是,有一件事可以用后者轻松完成term,到目前为止我在emacs中找不到替代品.
无论tmux并且screen可以从终端分离和各项任务跑在窗户上继续在后台运行.它是使用Cb,d in tmux和Ca,d in screen默认完成的.后来,我可以返回(重新安装),以我从通过运行这样分离的终端tmux attach或screen -r.此外,在这两个终端多路复用器中运行的会话是持久的 - 即如果我连接到某个远程终端并且连接失败,我可以重新连接并重新连接到终端而不会丢失我的任何工作 - 它确实有助于网络故障偶尔会破坏ssh连接的链接.
有没有像emacs那样的东西?基本上,我希望能够:
term缓冲区中运行.我有一个看起来像这样的身体的网站:
<body>
<div id="header">...</div>
<div id="content">...</div>
<div id="footer">...</div>
</body>
Run Code Online (Sandbox Code Playgroud)
在这些divs中没有使用绝对/相对定位技巧,但是这些s及其内部元素的样式中有很多floats,clears,margins和paddings div.所有这些都会产生一个看起来像这样的网站:
?????????????????
? header ?
?????????????????
?????????????????
? content ?
?????????????????
?????????????????
? footer ?
?????????????????
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何添加一个独立的固定宽度左栏(侧栏),其中包含额外的内容,这些内容将收缩整个站点(页眉内容页脚)并将它们移到右侧.
?????????????????
?side?? header ?
?bar ????????????
? ????????????
? ?? content ?
? ????????????
? ????????????
? ?? footer ?
?????????????????
Run Code Online (Sandbox Code Playgroud)
我知道一个几乎理想的解决方案,但它很丑陋,需要重新嵌套现有的div:
<body>
<table>
<tr>
<td id="sidebar">...</td>
<td>
<div id="header">...</div>
<div id="content">...</div>
<div id="footer">...</div>
</td>
</tr>
</table>
</body>
Run Code Online (Sandbox Code Playgroud)
是否可以优雅地做到这一点,只需在身体的某处添加一个外部侧边栏元素,即,像那样?
<body>
<div id="sidebar">...</div> …Run Code Online (Sandbox Code Playgroud) 在Scala集合中,如果想要迭代集合(不返回结果,即对集合的每个元素执行副作用),则可以使用
final def foreach(f: (A) ? Unit): Unit
Run Code Online (Sandbox Code Playgroud)
要么
final def map[B](f: (A) ? B): SomeCollectionClass[B]
Run Code Online (Sandbox Code Playgroud)
除了可能的延迟映射(*)之外,从最终用户的角度来看,我发现这些调用没有差异:
myCollection.foreach { element =>
doStuffWithElement(element);
}
myCollection.map { element =>
doStuffWithElement(element);
}
Run Code Online (Sandbox Code Playgroud)
鉴于我可以忽略哪些地图输出.我想不出为什么两种不同的方法应该存在和使用的任何具体原因,当时map似乎包含了所有的功能foreach,事实上,如果智能编译器和VM不会优化,我会非常感动由于它没有分配给任何东西,或者在任何地方读取或使用,因此创建了该集合对象.
所以,问题是 - 我是对的 - 并且没有理由foreach在一个人的代码中调用任何地方?
笔记:
(*)如本问题中所说明的那样,懒惰的映射概念可能会改变一些事情并证明其使用的合理性foreach,但据我所知,一个人特别需要偶然发现LazyMap,正常
(**)如果一个人没有使用集合,而是写一个集合,那么很快就会发现for理解语法语法实际上是生成"foreach"调用的语法糖这一事实,即这两行生成完全等效的代码:
for (element <- myCollection) { doStuffWithElement(element); }
myCollection.foreach { element => doStuffWithElement(element); }
Run Code Online (Sandbox Code Playgroud)
因此,如果一个人关心使用该for语法的集合类的其他人,可能仍然想要实现foreach方法.
我有2个不同麦克风的同一信号的两个录音(例如,WAV格式),但其中一个录音有延迟,例如几秒钟.
当在某种波形观察器中查看这些信号时,很容易在视觉上识别这种延迟 - 即只是在每个信号中发现第一个可见峰值并确保它们是相同的形状:
http://www.greycat.ru/temp/time-delay-peaks.png
但是我如何以编程方式进行 - 找出这个延迟(t)是什么?两个数字化信号略有不同(因为麦克风不同,由于ADC设置等原因位于不同位置).
我已经挖了一下,发现这个问题通常被称为"时间延迟估计",它有无数的方法 - 例如,其中之一.
但是有没有简单的现成解决方案,例如命令行实用程序,库或直接算法?
结论:我发现没有简单的实现,并且自己完成了一个简单的命令行实用程序 - 可从https://bitbucket.org/GreyCat/calc-sound-delay(GPLv3-licensed)获得.它实现了维基百科中描述的非常简单的最大搜索算法.
我有一个bash脚本运行并输出到文本文件,但它使用的颜色代码也包括我想知道的是如何从文件中删除它们,即
^[[38;1;32mHello^[[39m
^[[38;1;31mUser^[[39m
Run Code Online (Sandbox Code Playgroud)
所以我只想留下Hello和User
我有一个漫画页面的灰度图像,其中包含几个对话气泡(=语音气球等),这些气泡是白色背景的封闭区域和内部包含文本的纯黑色边框,即类似的东西:
我想检测这些区域并创建一个掩码(二进制就可以),它将覆盖对话气泡的所有内部区域,即:
相同的图像,掩盖覆盖,完全清晰:
所以,我对算法的基本思想是这样的:
使用泛光填充或某种图形遍历,从在步骤1中检测为像素内部气泡的每个白色像素开始,但是处理初始图像,淹没白色像素(应该在气泡内)并停止暗像素(应该是边框或文本).
使用某种binary_closing操作来移除气泡内的暗区(即与文本对应的区域).这部分工作正常.
到目前为止,第1步和第3步都有效,但我正在努力完成第2步.我目前正在使用scikit-image,我没有看到任何现成的算法,如洪水填充.显然,我可以使用像广度优先遍历这样的微不足道的东西,基本上就像这里建议的那样,但是在Python中完成时它真的很慢.我怀疑在ndimage或scikit-image 中复杂的形态学内容如binary_erosion或generate_binary_structure,但我很难理解所有形态学术语,基本上我如何用它来实现这样的自定义泛滥填充(即从第1步开始,在原始图像上工作图像并产生输出以分离输出图像).
我愿意接受任何建议,包括OpenCV等建议.
bash ×2
range-map ×2
scala ×2
shell ×2
algorithm ×1
assembly ×1
css ×1
css-float ×1
dash-shell ×1
delay ×1
disassembly ×1
emacs ×1
foreach ×1
freebsd ×1
gnu-screen ×1
guava ×1
html ×1
html-table ×1
java ×1
linux ×1
map ×1
nop ×1
numpy ×1
python ×1
range ×1
scikit-image ×1
scipy ×1
side-effects ×1
timedelay ×1
tmux ×1
x86 ×1
x86-64 ×1