在参加今年的Google Code Jam 竞赛之后,我不禁注意到使用C/C++和Java的[成功]参赛者人数众多.在这里可以看到整个比赛中使用的语言分布.
在用C/C++编程好几年后,我最近因其可读/直接的性质而爱上了Python.最近,我学习了OCaml,Scheme等功能语言,甚至像Prolog这样的逻辑语言.这些语言当然有它们的优点,在我看来,在某些情况下,它可以比C++和Java更容易应用.例如,Scheme使用call/cc简化了回溯(回答几个问题所需的工具)和Prolog的逻辑规范,虽然由于其强力性质而效率低下,但可以极大地简化(甚至自动解决)某些难以解决的问题.包裹一个人的大脑.
很明显,竞赛选手应该使用最适合挑战的工具.即使是x86程序集也是图灵完成的 - 这并不能证明解决它的问题.在这种情况下,为什么使用不太常用的语言(如Scheme/Lisp,Prolog,甚至Python)的参赛者比使用C/C++和Java的参赛者要少得多?换句话说,为什么没有成功的参赛者使用的语言虽然可能不那么主流,但可以说是更好的工具?
我的问题有几个动机.最重要的是,我希望成为一名更好的程序员 - 无论是在实践方面还是在竞争方面.在介绍了诸如功能和逻辑编程之类的美妙范例之后,看到有这么多人抛弃它们而转向支持C/C++和Java是令人沮丧的.它甚至让我怀疑我对这些范例的钦佩,担心我不能在编程竞赛中成为Lisp/Scheme/Prolog程序员.
在Android上使用AFAIK时,建议将Bitmap对象引用为WeakReferences以避免内存泄漏.当不再保留位图对象的硬引用时,垃圾收集器将自动收集它.
现在,如果我理解正确,必须始终调用Bitmap.recycle()方法来释放Bitmap.我认为这是因为Bitmap对象具有特殊的内存管理.
那是对的吗?
如果这是真的,当使用WeakReferences时,必须存在内存泄漏,因为在释放WeakReferences时永远不会调用Bitmap.recycle().或者,不知何故,WeakReferences是否足以避免内存泄漏?
谢谢
android garbage-collection memory-leaks weak-references bitmap
我有一个基于远程数据更改(通过HTML scraper)更新的数据库模型.
我想维护一个名为changed- 一个时间戳的字段,表示模型的值最后一次改变的时间(请注意,这与auto_now每次save调用模型的方法时更新这些字段的时间不同).
这是我的问题:
在模型的save方法中,是否有一种直接的方法来检测模型实例的当前值是否与数据库中的值不同?或者,有没有其他方法可以轻松维护changed时间戳?
我是Solr的新手,我对实现一个特殊的方面很感兴趣.
样本文件:
{ hostname: google.com, time_spent: 100 }
{ hostname: facebook.com, time_spent: 10 }
{ hostname: google.com, time_spent: 30 }
{ hostname: reddit.com, time_spent: 20 }
...
Run Code Online (Sandbox Code Playgroud)
我想返回一个具有以下结构的方面:
{ google.com: 130, reddit.com: 20, facebook.com: 10 }
Run Code Online (Sandbox Code Playgroud)
尽管solr返回值比这更冗长,但重要的一点是facet的"计数"是文档的time_spent值的总和,而不是与facet匹配的文档的实际计数.
我可以使用一个支点:
q:*:*
&facet=true
&facet.pivot=hostname,time_spent
Run Code Online (Sandbox Code Playgroud)
但是,这将返回每个唯一主机名的所有唯一时间值的计数.我可以手动在我的应用程序中总结这一点,但这似乎很浪费.
我可以使用统计模块:
q:*:*
&stats=true
&stats.field=time_spent
&stats.facet=hostname
Run Code Online (Sandbox Code Playgroud)
但是,这有两个问题.首先,返回的结果包含所有主机名.这真的有问题,因为我的数据集有超过1米的主机名.此外,返回的结果未排序 - 我需要按照花费的总时间减少的顺序呈现主机名.
对此我的帮助将非常感谢!
谢谢!
可能重复:
为何选择函数式语言?
我开始用C/C++,VB和最终的Python编程 - 所有命令式语言.我参加了一门关于编程语言的课程并学习了我的第一个函数式语言 - OCaml.太可怕了.
除了语法和其他恐怖之外,OCaml采用了我的命令式思维过程并将其抛到了窗外.这令人沮丧.我坚持认为,所有可以在功能上完成的事情也可以强制执行.我认为函数式编程是命令式编程而没有肢体(副作用).为了回应我的沮丧,我的教授可以提出的唯一好处是FPL能够并行化无副作用的功能.
无论如何,足够的谈话.
谢谢,
Advait
我已经使用vim几个月了,我已经习惯使用C和D来改变和删除从光标到行尾的所有内容.
考虑下面的行,光标在'bar'的'b'上:
foo.bar("hello world")
Run Code Online (Sandbox Code Playgroud)
在这一点击中D将产生:
foo.
Run Code Online (Sandbox Code Playgroud)
点击C将执行相同的加上开始插入模式,光标在句点之后.
但是,按Y不会做直观相似的事情(复制从光标到行尾的所有内容).相反,它复制整行(就像yy一样).
如何将Y从光标复制到行尾,而不是像yy一样复制整行?
我有一个应用程序,其中包含一些特定于开发的调试代码.目前,所有开发代码都由dev在文件顶部调用的变量保护.这是我的应用程序的一个示例:
var dev = true;
if (dev) {
console.log("Hello developer");
} else {
console.log("Hello production");
}
Run Code Online (Sandbox Code Playgroud)
当我去部署我的应用程序时,我必须手动将dev变量形式从true更改为false.这很糟糕.
我正在从手工构建的迁移到gulp.js,我希望干净地解决这个开发与生产构建问题.我正在考虑以下事项:
// Inside main.js
var dev = require('./isdev');
if (dev) //...
// Inside isdev.js:
module.exports = true;
Run Code Online (Sandbox Code Playgroud)
现在,当我为生产构建时false,不想手动设置dev标志,我想将isdev.js替换module.exports = true;为module.exports = false;.我的具体问题是,如何自动gulp development生成gulp,以便生成一个文件dev = true并gulp production生成一个文件dev = false.
我正在一个由混合 Linux/MacOS 开发人员组成的团队工作。MacOS 不区分大小写,而 Linux 区分大小写。我有以下问题:
我的(MacOS)机器:
$ git checkout master
$ echo hi > MyModule.js
$ git commit -a -m 'Create MyModule.js'
$ git push origin master
$ git checkout -b other-work
... (do work)
Run Code Online (Sandbox Code Playgroud)
同事的 (Linux) 机器
$ git checkout master
$ git pull
$ git mv MyModule.js myModule.js
$ git commit -m 'Rename MyModule.js to myModule.js'
$ git push
Run Code Online (Sandbox Code Playgroud)
我的 (MacOS) 机器
# Currently on branch other-work
$ git fetch
$ git checkout origin/master
error: The following …Run Code Online (Sandbox Code Playgroud) 我们正在使用Amazon Kinesis(队列服务)并使用Java编写队列读取器.它们基本上从队列中读取并将数据插入到我们的数据存储区中.我想知道是否有人成功使用New Relic来监控后台队列工作人员?
我感兴趣的一些分析:
谢谢,
Advait
我有一些mesos-slave节点,我想暴露给互联网.因此,我希望mesos-slave提供端口80和443以及其默认的大量端口/资源.
根据我的收集,我需要调整--resources参数,并在端口资源产品中包含80和443.但是,从我的测试来看,在执行此操作时,我还必须对机器的CPU /内存/磁盘产品进行硬编码(而不是允许mesos-slave在运行时确定这些).
因为我想运行的节点的大小mesos-slave将来可能会改变,所以我想避免硬编码CPU/Mem/Disk产品并让它们在运行时确定.如何在--resource不对CPU /内存/磁盘产品进行硬编码的情况下更改mesos-slave的端口产品?理想情况下,这样的系统是附加的:" 除默认端口外还提供端口80/443 ".
最好!
Advait
我正处于一个相对较大(10k +行)项目的规划阶段,该项目有几个类(30+)和几个级别的类继承(5+).
谢谢,
Advait
Cassandra概念性问题:我有一个5节点的集群正在运行.现在所有节点都被引导,每个节点知道的种子节点列表是否重要?如果我计划淘汰种子节点,是否需要更新其他节点的配置并从种子节点列表中删除待退役节点的IP,或者无关紧要,因为所有节点都已完全连接?