小编Syn*_*r0r的帖子

Java:执行良好格式化日志输出的库

我找不到一个允许以比通常看到的更好的方式格式化日志输出语句的库.我记得的一个功能是它可以"偏移"日志消息,具体取决于日志语句发生位置的"嵌套".

也就是说,而不是这个:

DEBUG | DefaultBeanDefinitionDocumentReader.java| 86 | Loading bean definitions
DEBUG | AbstractAutowireCapableBeanFactory.java| 411 | Finished creating instance of bean 'MS-SQL'
DEBUG | DefaultSingletonBeanRegistry.java| 213 | Creating shared instance of singleton bean 'MySQL'
DEBUG | AutowireCapableBeanFactory.java| 383 | Creating instance of bean 'MySQL'
DEBUG | AutowireCapableBeanFactory.java| 459 | Eagerly caching bean 'MySQL' to allow for resolving potential circular references
DEBUG | AutowireCapableBeanFactory.java| 789 | Another debug message
Run Code Online (Sandbox Code Playgroud)

它会显示如下:

DEBUG | DefaultBeanDefinitionDocumentReader.java| 86  | Loading bean definitions
DEBUG | AbstractAutowireCapableBeanFactory.java | …
Run Code Online (Sandbox Code Playgroud)

java logging log4j slf4j

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

从Java到C的学习......最大的挑战是什么?

我有过Java经验,因为有些结果,我需要用C编写代码,难以从Java切换到C吗?这两种语言之间最大的不同是什么?

c java

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

优化布尔逻辑树评估

我有很多真/假结果保存为long[]数组中的位.我确实拥有大量的这些(数百万和数百万的长).

例如,假设我只有五个结果,我会:

+----- condition 5 is true
|
|+---- condition 4 is false
||
||+--- condition 3 is true
|||
|||+-- condition 2 is true
||||
||||+- condition 1 is false
10110
Run Code Online (Sandbox Code Playgroud)

我也有一些树代表如下的语句:

condition1 AND (condition2 OR (condition3 AND condition 4))
Run Code Online (Sandbox Code Playgroud)

树很简单但很长.他们基本上看起来像这样(下面是过于简单化,只是为了表明我得到了什么):

class Node {    
    int operator();
    List<Node> nodes;
    int conditionNumber();    
}
Run Code Online (Sandbox Code Playgroud)

基本上,Node是一个叶子,然后有一个条件号(匹配long []数组中的一个位)或者Node不是叶子,因此引用了几个子节点.

它们很简单,但它们允许表达复杂的布尔表达式.它很棒.

到目前为止一切都很好,一切都很好.但是我确实有一个问题:我需要评估很多表达式,确定它们是真还是假.基本上我需要对一个问题进行一些暴力计算,而这个问题除了暴力破解之外还没有比这更好的解决方案.

所以我需要走树然后回答,true或者false取决于树的内容和内容long[].

我需要优化的方法如下所示:

boolean solve( Node node, long[] trueorfalse ) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

在第一次调用时,它node …

java optimization boolean-logic bytecode-manipulation

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

Go的gofmt和diff/VCS问题?

我有一个关于Go的gofmt工具的问题,它根据官方的Go规范自动格式化程序的输出(例如,你不能争论在Go中括号应该去哪里,因为这显然是由规范修复的).

在下一页:

http://golang.org/doc/effective_go.html
Run Code Online (Sandbox Code Playgroud)

在"格式化"段落下,写道:

例如,没有必要花时间排列结构字段的注释.Gofmt会为您做到这一点.鉴于声明

type T struct {
    name string // name of the object
    value int // its value
}
Run Code Online (Sandbox Code Playgroud)

gofmt将排列列:

type T struct {
    name    string // name of the object
    value   int    // its value
}
Run Code Online (Sandbox Code Playgroud)

但是我不明白这对于diff和VCSes 有多好.

例如,如果我有一个新行:

confuzzabler int // doo doo be doo
Run Code Online (Sandbox Code Playgroud)

并运行差异,我应该得到这个:

2d1
<     confuzzabler int // doo doo be doo
7d5
< 
Run Code Online (Sandbox Code Playgroud)

生活将是美好的:差异显示唯一的变化线.

但是,如果我重新运行gofmt,我得到了这个:

type T struct {
    confuzzabler int    // doo …
Run Code Online (Sandbox Code Playgroud)

version-control diff go

5
推荐指数
3
解决办法
343
查看次数

为什么递归调用不会被recur自动替换?

在下面(Clojure)SO问题:我自己的插入功能作为练习

接受的答案说:

用recur调用替换你的递归调用,因为写入它会遇到堆栈溢出

(defn foo [stuff]
  (dostuff ... )
  (foo (rest stuff)))
Run Code Online (Sandbox Code Playgroud)

变为:

(defn foo [stuff]
  (dostuff ...)
  (recur (rest stuff)))
Run Code Online (Sandbox Code Playgroud)

避免吹栈.

这可能是一个愚蠢的问题,但我想知道为什么递归调用foo不会被recur自动替换?

此外,我采取了另一个SO示例并写了这个(没有故意使用cond,只是为了尝试一下):

(defn is-member [elem ilist]
  (if (empty? ilist)
    false
    (if (= elem (first ilist))
      true
      (is-member elem (rest ilist)))))
Run Code Online (Sandbox Code Playgroud)

而且我想知道我是否应该用recur替换对is-member的调用(这似乎也有效).

是否存在递归的情况,特别是不应该使用复发

recursion clojure

5
推荐指数
2
解决办法
188
查看次数

Mercurial或git比svn对分支/合并有什么好处?

我听说过,例如将分支与git或mercurial合并比使用svn更容易.

在软件博客上阅读Joel的最后一篇,我并没有明白为什么.你能提供一个具体的例子,与svn相比,与git/mercurial合并导致更少的合并冲突吗?

svn git merge mercurial

4
推荐指数
2
解决办法
2142
查看次数

sed/awk或其他:one-liner将数字增加1,保持间距字符

编辑:我事先不知道我的数字将在哪个"列",我想要一个单行.显然sed不做算术,所以也许基于awk的单线程解决方案?

我有一个字符串:(注意间距)

eh oh    37
Run Code Online (Sandbox Code Playgroud)

我希望它成为:

eh oh    36
Run Code Online (Sandbox Code Playgroud)

(所以我想保持间距)

使用awk我找不到怎么做,到目前为止我有:

echo "eh oh   37" | awk '$3>=0&&$3<=99 {$3--} {print}'
Run Code Online (Sandbox Code Playgroud)

但这给了:

eh oh 36
Run Code Online (Sandbox Code Playgroud)

(丢失的间距字符,因为字段分隔符是'')

有没有办法问awk类似"使用与输入完全相同的字段分隔符打印输出"

然后我尝试了其他东西,使用awk的sub(..,..)方法:

' sub(/[0-9][0-9]/, ...) {print}'
Run Code Online (Sandbox Code Playgroud)

但是还没有雪茄:我不知道如何引用正则表达式并在第二个参数中对其进行算术运算(我现在用'...'留下).

然后我尝试用sed,但在此之后卡住了:

echo "eh oh   37" | sed -e 's/\([0-9][0-9]\)/.../' 
Run Code Online (Sandbox Code Playgroud)

我可以使用对匹配数字的引用从sed进行算术运算,并且输出不会修改间距字符数吗?

请注意,它与我关于Emacs的问题以及如何将其应用于某个(大)Emacs区域(使用Emacs的shell-command-on-region的替换区域)有关,但这不是一个相同的问题:这个问题具体是关于如何使用awk/sed/etc时"保留空格".

unix shell awk sed

4
推荐指数
1
解决办法
1万
查看次数

使String真的不可变

我有一个问题,但要得到答案,首先要接受以下事实:在某些情况下,可以修改Java字符串.

这已在Artima文章中标明:"hi there".equals("cheers!")== true

链接:http://www.artima.com/weblogs/viewpost.jsp? thread = 4864

它仍然可以在Java 1.6中很好地运行,它肯定会以某种方式反对流行的信念,即重复"Java字符串总是不可变的".

所以我的问题很简单:可以像这样修改字符串,是否有任何JVM安全设置可以打开以防止这种情况?

java string mutable

4
推荐指数
2
解决办法
305
查看次数

而Java中的循环怪异

我注意到java(因此可能是C)对此没有任何问题:

while(condition1) {
    //do somethin'
} while(condition2);
Run Code Online (Sandbox Code Playgroud)

这是一样的:

while(condition1 && condition2) {
    //do somethin'
}
Run Code Online (Sandbox Code Playgroud)

java loops while-loop

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

考虑到GWT只是Java,GWT IDE插件有什么好处?

看到编写GWT代码基本上是编写Java代码,IDE的GWT究竟做了什么?例如,有IDEA和Eclipse(以及可能用于NetBeans?)的GWT插件,但他们是否这样做,我不能简单地通过使用Eclipse或IDEA而不使用GWT插件?

java ide gwt plugins

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