我有一个java应用程序SIG TERM.我想知道发送此信号的进程的pid.
那可能吗?
重构大型"仅状态"对象有哪些常见策略?
我正在研究一个特定的软实时决策支持系统,该系统可以对国家空域进行在线建模/模拟.该软件消耗大量实时数据馈送,并对空域中的大量实体的"状态"进行每分钟一次的估计.这个问题整齐地分解,直到我们达到目前最低级别的实体.
我们的数学模型估计/预测每个这些实体的过去和未来几个小时的时间线的50个参数,大约每分钟一次.目前,这些记录被编码为具有大量字段的单个Java类(一些字段被折叠成一个ArrayList).我们的模型正在不断发展,并且各个领域之间的依赖关系还没有一成不变,因此每个实例都会在一个复杂的模型中漫游,随着它的发展积累设置.
目前我们有类似下面的内容,它使用构建器模式方法来构建记录的内容,并强制执行已知的依赖项(作为程序员错误的检查,演变模式.)一旦估计完成,我们使用.build()类型方法将以下内容转换为不可变形式.
final class OneMinuteEstimate {
enum EstimateState { INFANT, HEADER, INDEPENDENT, ... };
EstimateState state = EstimateState.INFANT;
// "header" stuff
DateTime estimatedAtTime = null;
DateTime stamp = null;
EntityId id = null;
// independent fields
int status1 = -1;
...
// dependent/complex fields...
... goes on for 40+ more fields...
void setHeaderFields(...)
{
if (!EstimateState.INFANT.equals(state)) {
throw new IllegalStateException("Must be in INFANT state to set header");
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
一旦完成了大量这些估算,就会将它们汇总到时间线中,分析汇总的模式/趋势.我们已经考虑过使用嵌入式数据库,但却遇到了性能问题.我们宁愿在数据建模方面对其进行整理,然后将部分软实时代码逐步移动到嵌入式数据存储中.
完成"时间敏感"部分后,产品将刷新为平面文件和数据库.
问题: …
在Rust书的Lifetimes一章中,有一个例子:
struct Foo<'a> {
x: &'a i32,
}
fn main() {
let y = &5; // this is the same as `let _y = 5; let y = &_y;`
let f = Foo { x: y };
println!("{}", f.x);
}
Run Code Online (Sandbox Code Playgroud)
他们为什么用x: &'a i32?
我认为如果它只是在x: i32那时他们无法证明终身使用.但是,背后还有其他原因吗?是否有任何生产代码使用对i32等基本类型的不可变引用?
我想知道,2个进程的语句有多少种方式可以交错?我知道什么是交错,但我似乎无法推导出公式。
在Ruby 1.9.3中,我有一个带有单个参数的函数.如果我正确地调用它,它可以使用或不使用空格分隔其名称和括号.如果我通过额外的论证,它会以两种不同的方式失败.为什么?
irb(main):001:0> def f(a); a; end
=> nil
irb(main):002:0> f(1)
=> 1
irb(main):003:0> f(1, 2)
ArgumentError: wrong number of arguments (2 for 1)
from (irb):1:in 'f'
from (irb):3
from /usr/bin/irb:12:in '<main>'
irb(main):004:0> f (1)
=> 1
irb(main):005:0> f (1, 2)
SyntaxError: (irb):5: syntax error, unexpected ',', expecting ')'
f (1, 2)
^
from /usr/bin/irb:12:in '<main>'
irb(main):006:0> RUBY_DESCRIPTION
=> "ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]"
Run Code Online (Sandbox Code Playgroud) 我错过了什么或者这是红宝石中的错误吗?
a = %w(foo bar baz)
a.include? "foo" # => true
a.size == 3 # => true
a.include? "foo" && a.size == 3 # => false
Run Code Online (Sandbox Code Playgroud) 我定义了这个方法:
# @return [Array<String>] items
def produce_items
["foo", "bar", "baz"]
end
Run Code Online (Sandbox Code Playgroud)
显然,正确的用法是
produce_items.each do |i|
puts i
end
Run Code Online (Sandbox Code Playgroud)
但我写了这个,默默无闻:
produce_items do |i|
puts i
end
Run Code Online (Sandbox Code Playgroud)
有没有办法以produce_items这样的方式声明我的错误用法会产生错误/异常?如果MRI无法做到,那么可以选择其他口译员吗?可以像RuboCop或ruby-lint这样的静态分析工具吗?
我怀疑它可能很难,因为有一些常见的习惯用法,其中方法采用可选块:
def block_optional_implicitly
if block_given?
puts "Got a block"
yield
else
puts "Did not get a block"
end
end
def block_optional_explicitly(&block)
unless block.nil?
puts "Got a block"
block.call
else
puts "Did not get a block"
end
end
Run Code Online (Sandbox Code Playgroud)
(这与如何在Ruby中需要一个块的问题相反?)
字母"d"的意义是什么?不要认为这很重要,但我使用的是CentOS.
例如,
/etc/httpd/conf/httpd.conf /etc/httpd/conf.d/ /etc/yum/pluginconf.d /etc/yum.repos.d
ruby ×3
linux ×2
syntax ×2
arguments ×1
class ×1
data-objects ×1
java ×1
path ×1
process ×1
refactoring ×1
reference ×1
rust ×1
scheduling ×1
semantics ×1
signals ×1
whitespace ×1