小编Mar*_*ner的帖子

如何在Linux中告诉哪个进程向我的进程发送了一个信号

我有一个java应用程序SIG TERM.我想知道发送此信号的进程的pid.
那可能吗?

linux signals

27
推荐指数
2
解决办法
2万
查看次数

重构大数据对象

重构大型"仅状态"对象有哪些常见策略?

我正在研究一个特定的软实时决策支持系统,该系统可以对国家空域进行在线建模/模拟.该软件消耗大量实时数据馈送,并对空域中的大量实体的"状态"进行每分钟一次的估计.这个问题整齐地分解,直到我们达到目前最低级别的实体.

我们的数学模型估计/预测每个这些实体的过去和未来几个小时的时间线的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)

一旦完成了大量这些估算,就会将它们汇总到时间线中,分析汇总的模式/趋势.我们已经考虑过使用嵌入式数据库,但却遇到了性能问题.我们宁愿在数据建模方面对其进行整理,然后将部分软实时代码逐步移动到嵌入式数据存储中.

完成"时间敏感"部分后,产品将刷新为平面文件和数据库.

问题: …

java refactoring class data-objects

13
推荐指数
1
解决办法
2377
查看次数

为什么要使用i32的不可变引用

在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等基本类型的不可变引用?

reference primitive-types rust

8
推荐指数
1
解决办法
476
查看次数

2个进程的语句有多少种方式可以交错

我想知道,2个进程的语句有多少种方式可以交错?我知道什么是交错,但我似乎无法推导出公式。

scheduling process

5
推荐指数
1
解决办法
2599
查看次数

为什么f(arg,superfluous_arg)是一个ArgumentError而f(arg,superfluous_arg)是一个SyntaxError?

在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)

ruby syntax whitespace arguments

3
推荐指数
1
解决办法
85
查看次数

是真的&& true == false?

我错过了什么或者这是红宝石中的错误吗?

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)

ruby operator-precedence

3
推荐指数
1
解决办法
369
查看次数

如何禁止Ruby中的块(要求不给出块参数)

我定义了这个方法:

# @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无法做到,那么可以选择其他口译员吗?可以像RuboCopruby-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中需要一个块的问题相反)

ruby syntax semantics

0
推荐指数
1
解决办法
83
查看次数

Linux文件(路径)名称中字母"d"的意义是什么?

字母"d"的意义是什么?不要认为这很重要,但我使用的是CentOS.

例如,

/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/
/etc/yum/pluginconf.d
/etc/yum.repos.d

linux path

-1
推荐指数
1
解决办法
124
查看次数