我试着执行bash本身只是为了重定向输出.如果我使用重定向
exec >bla.log
ls
exec 1>&2
Run Code Online (Sandbox Code Playgroud)
它按预期工作:ls输出bla.log在第二个exec事物恢复正常之后和之后结束,主要是因为句柄2仍然绑定到终端.
现在我想通过管道而不是文件发送输出,这是一个简单的例子exec | cat >bla.log.但是,该命令立即返回.为了弄清楚发生了什么,我这样做了:
exec | bash -c 'echo $$; ls -l /proc/$$/fd /proc/23084/fd'
Run Code Online (Sandbox Code Playgroud)
其中23084是当前运行的bash并得到了:
24002
/proc/23084/fd:
total 0
lrwx------ 1 harald harald 64 Aug 14 20:17 0 -> /dev/pts/1
lrwx------ 1 harald harald 64 Aug 14 20:17 1 -> /dev/pts/1
lrwx------ 1 harald harald 64 Aug 14 20:17 2 -> /dev/pts/1
lrwx------ 1 harald harald 64 Aug 14 20:17 255 -> /dev/pts/1
/proc/24002/fd:
total …Run Code Online (Sandbox Code Playgroud) 尝试使用Java DelayQueue,我必须实现Delayed需要compareTo() "提供与其getDelay方法一致的排序的方法"的接口..当然,目的是DelayQueue可以轻松地对排队的对象进行排序,使得下一个延迟的对象可以返回给任何接受者.
现在我还需要提前从队列中删除对象.我需要打电话delayQueue.remove(queuedObject).这当然只有在排队的对象具有equals()反映其有效载荷的方法而不是完全不相关的剩余延迟时间时才有效.
因此,compareTo()基于剩余延迟时间而equals()基于排队对象的有效负载,因此它们不一致,正如javadoc中Comparable "强烈推荐"的那样.
问题:我错过了什么,或者这在设计中确实有点怪癖DelayQueue?
在Java-8之前,我习惯于始终保持与Epoch相关的任何日期/时间相关的毫秒数,并且只能在出路时处理人类可读的日期/时间,即在UI或日志文件中,或在解析用户生成的输入时.
我认为这对Java-8来说仍然是安全的,现在我正在寻找一种最简洁的方法来获得一个毫秒时间戳的格式化日期.我试过了
df = Dateformatter.ofPattern("...pattern...");
df.format(Instant.ofEpochMilli(timestamp))
Run Code Online (Sandbox Code Playgroud)
但炸弹出与Unsupported field: YearOfEra在Instant.getLong(...)我一半懂.现在用什么而不是Instant?
LocalDateTime.ofEpoch(Instant, ZoneId)似乎错了,因为我不在乎当地的时间.我只是想在应用格式化程序时看到本地时区.在内部它应该只是Instant.
同样的ZonedDateTime.ofInstant(Instant, ZoneId),我想ZoneId只在格式化时应用.但是我注意到它DateTimeFormatter本身不再与时区有关,似乎,所以我认为我需要使用上述之一.
哪个是首选,为什么?或者我应该使用另一种方法将epoch-millis时间戳格式化为带时区的日期/时间?
我使用Ubuntu服务器16.04尝试使用Kafka。对于启动生产者和使用者控制台的命令,我使用以下命令。
生产者控制台:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic hello-topic
Run Code Online (Sandbox Code Playgroud)
消费者控制台:
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic hello-topic
Run Code Online (Sandbox Code Playgroud)
但是上面的命令仅预订一个主题。如何订阅多个主题?
该Stream.flatMap()操作转换了一个流
a, b, c
Run Code Online (Sandbox Code Playgroud)
进入包含每个输入元素的零个或多个元素的流,例如
a1, a2, c1, c2, c3
Run Code Online (Sandbox Code Playgroud)
是否有相反的操作将一些元素分成一个新元素?
void并且与副作用一起使用它存在吗?我可以用任何方式模拟它吗?
在尝试对多项式进行建模时,特别是它们的乘法,我遇到了以下问题.在乘法期间,两个多项式的单个单项式相乘,当然可以发生我有(3x ^ 2 y + 5x y ^ 2)*(x + y).结果包含3x ^ 2 y ^ 2和5 x ^ 2 y ^ 2,我想通过添加立即组合.
当然,我想使用单项式的部分x ^ 2 y ^ 2作为(哈希)映射中的关键字来添加不同的系数(在示例中为3和5).但是我设想的单项式对象自然也应该包含系数,该系数不应该是地图键的一部分.
当然,我可以写单项对象的equals/hashcode,使它们忽略系数.但这感觉错了,因为数学上单项式显然只等于另一个,如果系数相等的话.
为中间操作引入无系数单项式对象也看起来不正确.
我没有使用地图,而是使用列表并使用二进制搜索和一个忽略系数的专用比较器.
如果没有使用不使用密钥'equals/hashcode的地图,而是使用专用的地图,那么有没有更好的想法如何融合单项式?
我尝试从 jwt.io 和openssl. 只要我不标记“秘密base64编码”,我可以把签名前的那部分,跑过去
echo -n "pasted data from jwt.io" | \
| openssl dgst -binary -sha512 -hmac abc \
| openssl enc -base64 -A;
Run Code Online (Sandbox Code Playgroud)
我从 openssl 得到了与 jwt.io 显示的相同的签名(使用 HS512!)。
如果我单击“秘密 base64 编码”,显然 jwt.io 上的签名会发生变化。现在我用 base64 编码秘密“abc”以获得“YWJj”并将其用作openssl的秘密,如
echo -n "pasted data from jwt.io" | \
| openssl dgst -binary -sha512 -hmac YWJj \
| openssl enc -base64 -A;
Run Code Online (Sandbox Code Playgroud)
这不会创建相同的签名,所以我可能误解了这个复选框。它到底是做什么的,我需要如何调用openssl来模拟它?
(我知道 base64 和 base64 urlencode 之间存在差异,但这不应该对“abc”的编码产生影响。)
Intellij 键盘宏很好,但也非常慢,我想知道是否可以做些什么来改进它。我定义了一个键盘宏来格式化当前代码块:
<macro name="reformat block macro">
<action id="ToggleBookmark9" />
<action id="EditorCodeBlockEnd" />
<action id="EditorToggleStickySelection" />
<action id="EditorCodeBlockStart" />
<action id="EditorLineStart" />
<action id="EditorLineStart" />
<action id="ReformatCode" />
<action id="GotoBookmark9" />
<action id="ToggleBookmark9" />
</macro>
Run Code Online (Sandbox Code Playgroud)
运行它时,就像看着一个打字速度慢的人执行这些步骤,因为每个动作都会被渲染。有没有办法加快速度,使用一些隐藏开关来避免中间步骤的实时渲染?
我正在使用flexbox在窄列中显示文本标签以及数值,以便在文本不适合的情况下使用省略号截断文本.
它工作得很好,直到我需要将整个列放在一个表格单元格中 - 此时浏览器(Chrome)只是忽略了列宽并使表格足够宽以适应所有文本.
这是标签布局:
<div class="line">
<span>Very long label text</span>
<span>12345</span>
</div>
Run Code Online (Sandbox Code Playgroud)
.line {
display: flex;
width: 100%;
}
.line span:first-child {
white-space: nowrap;
flex-grow: 1;
overflow: hidden;
text-overflow: ellipsis;
}
.line span:last-child {
flex-shrink: 0;
margin-left: 5px;
}
Run Code Online (Sandbox Code Playgroud)
将其放置在具有固定宽度的常规div中可按预期工作.将其放在表格单元格中不会:

小提琴:http://jsfiddle.net/98o7m7am/
.wrapper {
width: 150px;
}
.table {
display: table;
}
.table > div {
display: table-cell;
}
.line {
display: flex;
width: 100%;
}
.line span:first-child {
white-space: nowrap;
flex-grow: 1;
overflow: hidden;
text-overflow: ellipsis; …Run Code Online (Sandbox Code Playgroud)我需要根据输入生成固定数量语言的 XML 结构,该输入可能包含也可能不包含每种语言的信息。如果信息丢失,我需要生成空元素。问题是,我需要在输出结构中的许多地方迭代语言。
最简单的方法是使用类似的东西
<xsl:variable name="languages" select="en,de,fr">
<xsl:for-each select="$languages">
...
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
循环出现在我需要语言列表的任何地方。
当然这不起作用,因为select="en,de,fr"没有定义节点列表。通过扩展我可以使用node-set函数,但我仍坚持使用 XSLT-1.0。
有没有办法定义一个常量节点集来迭代?
(这在某种程度上与另一个问题有关,其中接受的答案消除了创建常量节点集的许多想法,特别是需要 的子元素的所有内容<xsl:variable/>)
java ×4
apache-kafka ×1
bash ×1
compareto ×1
concurrency ×1
css ×1
datetime ×1
equals ×1
flexbox ×1
hashmap ×1
html ×1
java-8 ×1
java-stream ×1
java-time ×1
jwt ×1
openssl ×1
polynomials ×1
xslt ×1
xslt-1.0 ×1