小编Jef*_*eff的帖子

Scala:可变对象与不可变对象性能 - OutOfMemoryError

我想比较Scala中的immutable.Map和mutable.Map的性能特征,以进行类似的操作(即将许多映射合并为一个映射.请参阅此问题).我有可变和不可变映射的类似实现(见下文).

作为测试,我生成了一个包含1,000,000单项Map [Int,Int]的List,并将此列表传递给我正在测试的函数.有了足够的内存,结果就不足为奇了:对于mutable.Map来说是~1200ms,对于immutable.Map来说是~1800ms,对于使用mutable.Map的命令式实现来说是~750ms - 不知道是什么导致了那里的巨大差异,但是随意对此也有评论.

让我感到惊讶的是,也许是因为我有点厚,是因为IntelliJ 8.1中的默认运行配置,两个可变实现都遇到了OutOfMemoryError,但是不可变集合没有.不可变测试确实完成了,但它的速度非常慢 - 大约需要28秒.当我增加最大JVM内存(大约200MB,不确定阈值在哪里)时,我得到了上面的结果.

无论如何,这是我真正想知道的:

为什么可变实现耗尽内存,但不可变实现却没有? 我怀疑不可变版本允许垃圾收集器在可变实现之前运行并释放内存 - 并且所有这些垃圾收集都解释了不可变低内存运行的缓慢 - 但我想要更详细的解释比起那个来说.

以下实施.(注意:我并未声称这些是可能的最佳实现.请随意提出改进建议.)

  def mergeMaps[A,B](func: (B,B) => B)(listOfMaps: List[Map[A,B]]): Map[A,B] =
    (Map[A,B]() /: (for (m <- listOfMaps; kv <-m) yield kv)) { (acc, kv) =>
      acc + (if (acc.contains(kv._1)) kv._1 -> func(acc(kv._1), kv._2) else kv)
    }

  def mergeMutableMaps[A,B](func: (B,B) => B)(listOfMaps: List[mutable.Map[A,B]]): mutable.Map[A,B] =
    (mutable.Map[A,B]() /: (for (m <- listOfMaps; kv <- m) yield kv)) { (acc, kv) =>
      acc + (if (acc.contains(kv._1)) kv._1 …
Run Code Online (Sandbox Code Playgroud)

memory performance garbage-collection scala mutability

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

Scala的模式匹配是否违反了开放/封闭原则?

如果我添加一个新的案例类,这是否意味着我需要搜索所有模式匹配代码并找出新类需要处理的位置?我最近一直在学习这门语言,当我读到一些支持和反对模式匹配的论据时,我一直很困惑它应该在哪里使用.请参阅以下内容:

Pro: Odersky1Odersky2

骗局: Beust

在每种情况下,评论都非常好.模式匹配是令人兴奋的东西还是我应该避免使用的东西?实际上,我认为答案是"这取决于你何时使用它",但它有哪些积极的用例和什么是负面用例?

oop scala pattern-matching design-principles

13
推荐指数
2
解决办法
2141
查看次数

Django:如何为内联模型formset中的字段设置初始值?

我认为应该是一个简单的问题.我有一个内联模型formset,我想让一个select字段具有当前登录用户的默认选择值.在视图中,我使用Django的身份验证中间件,因此获取用户只是一个简单的访问问题request.user.

但是,我无法弄清楚的是如何将该用户设置为包含用户列表的选择框(ModelChoiceField)中的默认选定值.谁能帮我这个?

python django default-value django-forms

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

如何在JavaScript中模拟64位(无符号)整数的按位旋转?

我需要在JavaScript中执行64位整数的循环左移.然而:

  • JavaScript数字是双打的
  • 当你开始使用<<和>>以及>>>和〜以及所有比特繁琐的业务时,JavaScript会将它们转换为32位有符号的整数.然后,当你完成时,它又回到了双打.我认为.
  • 我不想要这个标志.而且我绝对不希望小数位.但我绝对想要64位.

那么,如何执行64位值的按位左旋转?

javascript bit-manipulation

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

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

Java Servlets:当用户离开页面时,文件下载中断

我有一个servlet,允许用户从网页下载(可能很大)zip文件.如果用户单击链接以下载zip文件,则在servlet中执行类似以下的代码:

response.setContentType("application/zip");
response.setHeader("Content-disposition", "attachment; filename=foo.zip");
response.setHeader("Pragma", "");
response.setHeader("Cache-Control", "no-store");

ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
// write entries to the zip file...
...
out.close()
Run Code Online (Sandbox Code Playgroud)

但是,如果用户在下载开始后和完成之前刷新或导航离开页面(在Firefox 3.5.7中),则下载将失败.弹出以下错误:

无法保存C:\ blah\foo.zip.part,因为无法读取源文件.

请稍后重试,或与服务器管理员联系.

关于如何确保在这种情况下继续下载的任何想法?

更新:启动下载的链接是一个简单的vanilla链接.有趣的是,IE上的行为是不同的.似乎没有加载网站上其他位置的链接(从当前加载的屏幕)(浏览器状态栏显示"正在等待https://mysite/clicked_linky.do ..."),阻塞直到下载完成.在地址栏中键入不同的URL或使用快捷方式/收藏夹链接导航离开页面,但下载按预期继续.只有Firefox似乎显示我上面描述的确切行为,尽管IE阻止不是最佳的.

java servlets http download

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

浏览器有时会显示JSON文本而不是所需的页面

我在Rails应用程序中遇到了一个间歇性问题,而且我无法弄清楚发生了什么.当用户登录时,他们会看到一个仪表板,其中包含一些JavaScript代码,用于对操作执行AJAX调用.有时,当用户登录时,他们不会看到仪表板,而是从操作而不是仪表板(在Chrome中)看到JSON响应文本,或者他们下载.json文件(Firefox).它是间歇性的,通常不会发生,但它确实发生时真的很烦人.

这是一些代码的愚蠢版本:

JS在模板头中运行:

$(function () {
    var remoteLink = $('#remoteLink');
    remoteLink.live("ajax:complete", function () {
        setTimeout(function () {
           loadCount();
        }, 30000);
    });    

    loadCount();

    function loadCount() {
      remoteLink.click();
    }
});
Run Code Online (Sandbox Code Playgroud)

以及模板中的链接:

<%= link_to 'get count (hidden)', {:controller => 'something', :action => 'count'}, 
            :id => 'remoteLink', :class => 'hidden', :remote => true, 'data-type' => 'json' %>
Run Code Online (Sandbox Code Playgroud)

和控制器动作:

def count
    render :json => get_counts_function_returning_a_hash
end
Run Code Online (Sandbox Code Playgroud)

我的预感是,它是一种竞争条件 - 可能与使用setTimeout有关? - 但我无法证实这种预感.谁能告诉我这里会发生什么?我也在其他网站上看到过这种情况 - 也是间歇性的,一般不会发生,但是当它发生时会很烦人.

javascript ajax jquery ruby-on-rails

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

Python正则表达式是否允许嵌入选项?

特别是,我想知道我是否可以在模式字符串中指定一个嵌入式选项来启用多行模式.也就是说,通常使用Python正则表达式启用多行模式,如下所示:

pattern = re.compile(r'foo', re.MULTILINE)
Run Code Online (Sandbox Code Playgroud)

我想通过在模式字符串中指定多线匹配来获得多线匹配,而不是使用re.MULTILINE选项.您可以使用嵌入式(?m)表达式在Java中执行此操作.例如,

pattern = re.compile(r'(?m)foo')
Run Code Online (Sandbox Code Playgroud)

这在Python中是否可行,或者我是否需要使用re.M选项?一般来说,Python中的嵌入式模式选项是否有很好的参考?

python regex

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

Django:如何在内联模型formset中默认使字段不可编辑?

我有一个内联模型formset,如果这些字段在加载页面时已经有值,我想使字段不可编辑.如果用户单击该行上的"编辑"按钮,它将变为可编辑状态(使用JavaScript)我将用可编辑的小部件替换原始小部件.我想在加载页面时做类似的事情:

for field in form.fields:
    if field.value:
        # display as text
    else:
        # display as my standard editable widget for this field
Run Code Online (Sandbox Code Playgroud)

我看到inlineformset_factory有一个叫做的论点 formfield_callback.我怀疑这可能有用,但我没有找到任何文件.任何人都可以指出一些有用的文档,以及它如何帮助我解决这个问题?

python django django-forms

4
推荐指数
3
解决办法
9367
查看次数

我应该如何将RSpec与Rake,Rails和我现有的测试集成?

我想开始使用RSpec为我的Rails应用程序编写测试,但是我有许多使用Test :: Unit编写的现有测试.我想继续只需从命令行运行所有测试(或所有单元测试,功能测试等),类似于

rake test:units
Run Code Online (Sandbox Code Playgroud)

或者其他什么,让它运行所有单元测试,无论它们是用Test :: Unit还是RSpec编写的.而且我绝对不想浪费大量时间将我现有的测试转换为RSpec; 这不是首发.

现在,我想我希望我的RSpec测试与我现有的测试,测试/单元,测试/功能等一起存在.实现这一目标的最佳方法是什么?或者这甚至是一个好主意?也就是说,我对RSpec(以及Ruby和Rails)很新,所以也许保持RSpec分离是一种更好的做法.不管它们存储在文件系统的哪个位置,我仍然需要能够使用单个rake任务运行所有测试,并且我需要使用rcov收集整个测试语料库的代码覆盖率数字,我已经在做我现有的测试了.

ruby tdd rspec ruby-on-rails rspec2

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

如何使用Paperclip为附件指定文件名?

我在服务器上有字节流,我想用Paperclip附加到模型类,我希望能够指定它们在文件系统中保存的名称.因为我有很多这些传入的文件,我宁愿能够创建它们,Tempfiles以便我不必担心名称冲突并手动删除它们等.这就是我正在做的事情:

desired_file_name = 'foo.txt'
Tempfile.open([File.basename(desired_file_name), File.extname(desired_file_name)]) do |tf|
  tf.write(content_stream)
  tf.rewind
  model_obj.paperclip_attachment = tf
end
Run Code Online (Sandbox Code Playgroud)

这非常有效.唯一的问题是,我的Paperclip附件最终得到一个临时文件名,如foo.txt.201029392u-gyh-foh96y.txt.那么如何告诉Paperclip将文件保存为什么?通话model_obj.paperclip_attachment_file_name = desired_file_name无效.DB字段被保存为该名称,但在文件系统上我仍然具有该临时文件名.

ruby ruby-on-rails attachment paperclip

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