小编noa*_*hlz的帖子

如何在CentOS 5.5上安装带有调试信息的glibc

我正在通过Zed Shaw的艰难学习方式开展工作.

在Valgrind的章节中,"你应该看到的内容"部分包含各种glibc函数的行号.

我已经确定(显然)我的CentOS 5.5安装已经安装了非调试glibc.但yum没有列出glibc-dbg(或任何类似的东西:

[nzucker:~/projects/lcthw]$ yum info \*glibc\* | grep Name
Name       : glibc
Name       : glibc
Name       : glibc-common
Name       : glibc-devel
Name       : glibc-devel
Name       : glibc-headers
Name       : compat-glibc
Name       : compat-glibc
Name       : compat-glibc-headers
Name       : glibc-utils
Run Code Online (Sandbox Code Playgroud)

我过去通过随意安装软件包(通过软件包或从源代码构建)来打砖机,所以我想知道我在这里做什么.

问题:

  1. 由于我已经安装了glibc-devel,调试库是否已经存在,我只需要链接到它们和/或添加编译开关?

  2. 如果我在启用调试的情况下从源代码(或安装软件包)重新构建glibc,我怎么能确保不会意外地破坏机器(即因为构建错误的软件包并触发库不兼容)?

c glibc centos

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

未指定maxSize时,Google Guava Cache会清除SIZE的条目

我正在使用Google Guava CacheBuilder创建一个Cache实例.我的代码如下所示:

return CacheBuilder.newBuilder()
            .initialCapacity(initialCapacity)
            .expireAfterAccess(expirationInterval, TimeUnit.SECONDS)
            .removalListener(LOGGING_AUTOEVICTION_ONLY_REMOVAL_LISTENER)
            .build();
Run Code Online (Sandbox Code Playgroud)

我的删除监听器,顾名思义:

private static final RemovalListener<MyKey, MyRecord>  LOGGING_AUTOEVICTION_ONLY_REMOVAL_LISTENER
        = new RemovalListener<MyKey, MyRecord>() {
            @Override
            public void onRemoval(RemovalNotification<MyKey, MyRecord objectObjectRemovalNotification) {
                if (objectObjectRemovalNotification.wasEvicted()) {
                    log.debug("Entry evicted from cache: {} - Reason: {}", objectObjectRemovalNotification, objectObjectRemovalNotification.getCause());
                }
            }
        };
Run Code Online (Sandbox Code Playgroud)

最后,我只get使用了我的缓存条目get(K key, Callable<? extends V> valueLoader)

这是问题:使用上面的代码,我看到以下日志输出:

19:08:03.287 DEBUG [MyCache] - Entry evicted from cache: MyKey[123]=MyRecord@43ee148b - Reason: SIZE

当我没有maximumSize()在CacheBuilder调用中使用时,为什么记录会从我的缓存中逐出?我怀疑它与"体重"有关.如果是这样,我需要知道maxWeight()在到期时间之前没有被删除的缓存条目?

注意我知道Google Guava网站上的Caches解释.

java guava

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

企业应用程序每天重启或100%正常运行时间?

我有一个相当开放的一般性问题(即"取决于平台,应用程序类型等")但我正在寻找一般指导方针作为答案.

什么时候最好设计一个连续运行的应用程序(100%正常运行时间)与预定的每日关机/重启?

显然,Web应用程序需要一直处于运行状态,因此我们假设我们正在讨论内部企业应用程序,例如会计系统或仅在工作日工作时间主动使用的B2B系统.

我听过的各种论据如下:

Pro 100%正常运行时间:"一旦你运行一个应用程序,最好保持它,因为当你关闭它时它有可能不会重启."

Pro每日重启:"一个持续3年的应用程序可能有一天会停止运行,没有人会知道如何将其重新联机."

其他考虑因素包括内存增长,性能,维护需求等.这是一个编程问题,因为您所做的选择会影响您的技术设计.例如,如果您知道应用程序将每天关闭/重新启动,则无需每天编写某些批处理作业并清除状态.

思考?

enterprise

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

在Clojure函数中重新绑定var的具体缺点是什么?

在探索Clojure中计算阶乘的各种方法时,我提出了以下(非惯用)函数:

(defn factorial-using-do-dotimes [x]
  (do
    (def a 1)
    (dotimes [i x]
      (def a (* a (inc i)))))
  a)
Run Code Online (Sandbox Code Playgroud)

REPL:

user=> (factorial-using-do-dotimes 5)
120
Run Code Online (Sandbox Code Playgroud)

这有什么具体的缺点(除了"非惯用")?性能?正确性(即可能的缺陷)?

clojure

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

Clojure中地图和集合之间的行为不一致

Steve Losh 发布 了以下Clojure片段:

; Integers and Longs are equal.
(= (Integer. 1) (Long. 1))
true

; Even negative ones.
(= (Integer. -1) (Long. -1))
true

; When you use them as keys in maps, the maps are still equal.
(= {(Integer. 1) :foo} {(Long. 1) :foo})
true

(= {(Integer. -1) :foo} {(Long. -1) :foo})
true

; When you use positive numbers as keys to sets, they're also equal.
(= #{(Integer. 1)} #{(Long. 1)})
true

; But negative ones …
Run Code Online (Sandbox Code Playgroud)

clojure

2
推荐指数
1
解决办法
115
查看次数

Leiningen在使用相同版本号重新安装后不会下载依赖项

这非常重要,我在截止日期前完全陷入困境.非常感谢帮助.

我有一个名为red-black的Clojure项目,它特别包含一个名为interval_tree.clj的文件

我一直在用lein uberjar编译这个项目,然后在其他项目中使用生成的jar,将它安装在本地maven资源库中.

mvn install:install-file  \   
    -Dfile=../red-black/target/red-black-0.1.0.jar  \  
    -DgroupId=self   \
    -DartifactId=red-black  \
    -Dversion=0.1.0  \
    -Dpackaging=jar  \
    -DgeneratePom=true  \
    -DcreateChecksum=true  \
    -DlocalRepositoryPath=local_mvn_repo
Run Code Online (Sandbox Code Playgroud)

疯狂的是,我添加了一个新功能,编译我的jar并在另一个项目的本地maven存储库中重新安装它,现在java无法找到我的新功能

user=> (red-black.interval-tree/tree-to-flat-list )
CompilerException java.lang.RuntimeException: No such var: red-black.interval-tree/tree-to-flat-list, compiling (NO_SOURCE_PATH:1:1)
Run Code Online (Sandbox Code Playgroud)

但是这个函数是red-black.interval-tree.clj!我甚至进入了我的local_mvn_repo,解压缩了jar,并查看了interval_tree.clj源代码.功能就在那里!

更奇怪的是,该库中的其他功能是可访问的.例如,在我的第二个项目中使用本地mvn repo:

user=> (use 'red-black.interval-tree)
nil
Run Code Online (Sandbox Code Playgroud)

现在一个小标签选项卡魔术:

user=> (red-black.interval-tree/
red-black.interval-tree/add-to-result        red-black.interval-tree/black                red-black.interval-tree/check-max-interval
red-black.interval-tree/get-color            red-black.interval-tree/get-hash             red-black.interval-tree/get-interval
red-black.interval-tree/get-key              red-black.interval-tree/get-left             red-black.interval-tree/get-max
red-black.interval-tree/get-parent           red-black.interval-tree/get-right            red-black.interval-tree/get-root
red-black.interval-tree/get-sentinel         red-black.interval-tree/get-value            red-black.interval-tree/has?
red-black.interval-tree/health-check         red-black.interval-tree/high                 red-black.interval-tree/insert
red-black.interval-tree/insert-fixup         red-black.interval-tree/left-rotate          red-black.interval-tree/low
red-black.interval-tree/max-of-three         red-black.interval-tree/new                  red-black.interval-tree/node
red-black.interval-tree/point-lookup         red-black.interval-tree/pretty-print         red-black.interval-tree/recursive-max
red-black.interval-tree/red                  red-black.interval-tree/right-rotate         red-black.interval-tree/set-color
red-black.interval-tree/set-interval         red-black.interval-tree/set-key              red-black.interval-tree/set-left
red-black.interval-tree/set-max              red-black.interval-tree/set-parent           red-black.interval-tree/set-right …
Run Code Online (Sandbox Code Playgroud)

clojure uberjar maven leiningen

2
推荐指数
1
解决办法
460
查看次数

在迭代器列表上对此flatMap进行Lazify

鉴于此功能,我无法修改:

def numbers(c: Char): Iterator[Int] = 
  if(Character.isDigit(c)) Iterator(Integer.parseInt(c.toString)) 
  else Iterator.empty
// numbers: (c: Char)Iterator[Int]
Run Code Online (Sandbox Code Playgroud)

而这个输入数据:

val data = List('a','b','c','1','d','&','*','x','9')
// data: List[Char] = List(a, b, c, 1, d, &, *, x, 9)
Run Code Online (Sandbox Code Playgroud)

我怎样才能使这个函数变得懒惰,这样data只会处理到第一个出现的数字字符?

def firstNumber(data: List[Char]) :Int = data.flatMap(numbers).take(1)
Run Code Online (Sandbox Code Playgroud)

scala lazy-evaluation

2
推荐指数
1
解决办法
2120
查看次数

Scala groupBy + mapValues与groupBy + map + BreakOut

假设我有这样的数据:

scala> case class Foo(a: Int, b: Int)
defined class Foo

scala> val data: List[Foo] = Foo(1,10) :: Foo(2, 20) :: Foo(3,30) :: Nil
data: List[Foo] = List(Foo(1,10), Foo(2,20), Foo(3,30))
Run Code Online (Sandbox Code Playgroud)

我知道在我的数据中,不会有Foo实例具有相同的field值a-我想将其转换为Map[Int, Foo](我不想要Map[Int, List[Foo]]

我可以:

 scala> val m: Map[Int,Foo] = data.groupBy(_.a).mapValues(_.head)
 m: Map[Int,Foo] = Map(2 -> Foo(2,20), 1 -> Foo(1,10), 3 -> Foo(3,30))
Run Code Online (Sandbox Code Playgroud)

要么:

scala> val m: Map[Int,Foo] = data.groupBy(_.a).map(e => e._1 -> e._2.head)(collection.breakOut)
m: Map[Int,Foo] = Map(2 -> Foo(2,20), 1 -> Foo(1,10), 3 -> …
Run Code Online (Sandbox Code Playgroud)

scala

2
推荐指数
1
解决办法
3261
查看次数

为什么使用下划线使这个列表理解只打印一个点?

在Scala 2.9.2中

List(List(1,5,4),List(7,9,11)).flatten.map {i => println(i); identity(i) }.find { _ % 2 == 0 }
Run Code Online (Sandbox Code Playgroud)

打印:

1
5
4
7
9
11
Option[Int] = Some(4)
Run Code Online (Sandbox Code Playgroud)

List(List(1,5,4),List(7,9,11)).flatten.map { println("."); identity(_) }.find { _ % 2 == 0 }
Run Code Online (Sandbox Code Playgroud)

打印

.
Option[Int] = Some(4)
Run Code Online (Sandbox Code Playgroud)

我必须承认,我对这种行为感到有些惊讶.Underscore似乎不仅仅是等效内联函数的简写,而是对代码有其他影响.这里发生了什么?

scala

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

标签 统计

clojure ×3

scala ×3

c ×1

centos ×1

enterprise ×1

glibc ×1

guava ×1

java ×1

lazy-evaluation ×1

leiningen ×1

maven ×1

uberjar ×1