小编Moh*_*han的帖子

是418"我是一个茶壶"真的是一个HTTP响应代码?

是418"我是一个茶壶" 真的是一个HTTP响应代码?

互联网上有各种各样的参考,包括响应代码列表,但我无法弄清楚这是否是一个奇怪的笑话.

http

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

CMake:set_property(TARGET ...)和set_target_properties之间有区别吗?

在CMake中,假设一个人只是设置一个属性,那么它们之间是否有任何区别

set_target_properties(target PROPERTIES prop value)
Run Code Online (Sandbox Code Playgroud)

set_property(TARGET target PROPERTY prop value)
Run Code Online (Sandbox Code Playgroud)

参看

https://cmake.org/cmake/help/v3.0/command/set_property.html https://cmake.org/cmake/help/v3.0/command/set_target_properties.html

这意味着没有区别,但不是那么清楚.

cmake

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

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

多级Docker:RUN wget vs ADD

Docker文档最佳实践部分说:

由于图像大小很重要,因此强烈建议不要使用ADD从远程URL获取包.你应该使用curl或wget代替.这样,您可以删除提取后不再需要的文件,并且不必在图像中添加其他图层.例如,你应该避免做以下事情:

ADD http://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all
Run Code Online (Sandbox Code Playgroud)

而是做一些像:

RUN mkdir -p /usr/src/things \
    && curl -SL http://example.com/big.tar.xz \
    | tar -xJC /usr/src/things \
    && make -C /usr/src/things all
Run Code Online (Sandbox Code Playgroud)

另一方面,稍后会注意到:

在Docker 17.05之前,甚至更多,在Docker 1.10之前,最小化图像中的层数非常重要.[...] Docker 17.05及更高版本增加了对多阶段构建的支持,允许您仅将所需的工件复制到最终图像中.

乃至

使用Bash &&运算符将两个RUN命令压缩在一起[是]容易出错且难以维护.

在我看来,如果你使用多阶段构建,建议ADD是不准确的.额外的层不太可能是一个问题,除非您下载的东西真的很大,因为本地磁盘空间很便宜并且很容易清除旧图像.实际上,当编码时,通常没有构建命令来清理它们的中间伪像以节省空间!

此外,它ADD具有以下优势RUN wget:它可以检测目标何时发生变化.

我错过了什么,还是做了多阶段修复ADD

docker

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

Java ArrayList <String>的紧凑替代品

我需要存储一个大型自然语言词典 - 最多120,000,具体取决于语言.这些需要保存在内存中,因为分析表明利用阵列的算法是系统中的时间瓶颈.(它本质上是一种拼写检查/自动更正算法,但细节并不重要.)在具有16MB内存的Android设备上,与Java相关的内存开销String导致我们的空间不足.请注意,每个String都有一个与之相关38字节开销,这会产生高达5MB的开销.

乍一看,一个选项是替代char[]String.(或者甚至byte[],因为UTF-8在这种情况下更紧凑.)但同样,内存开销是个问题:每个Java数组都有32字节的开销.

另一种替代方法ArrayList<String>是创建一个具有相同接口的类,该类在内部将所有字符串连接成一个巨大的字符串,例如表示为单个字符串,byte[]然后将偏移存储到该巨大的字符串中.每个偏移量将占用4个字节,从而提供更节省空间的解决方案.

我的问题是a)是否有任何其他解决问题的方法,同样低开销*和b)是现成的任何解决方案吗?通过Guava,trovePCJ集合库搜索没有任何结果.

*我知道可以将开销降到4字节以下,但收益递减.

NB.是否支持在HotSpot JVM中删除压缩字符串?表明JVM选项-XX:+UseCompressedStrings在这里没有帮助.

java string android arraylist low-memory

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

Scala mapValues是懒惰吗?

我打电话的时候

System.err.println("Before")
System.err.flush()
val foo: Map[Int, T] = t mapValues (fn(_))
System.err.println(foo.head) //prevent optimiser from delaying the construction of 'foo' 
System.err.println("After")
System.err.flush()
Run Code Online (Sandbox Code Playgroud)

fn里面有一个调试打印语句,我得到这样的输出:

Before
...head item...
After
...debug print statement from fn...
...debug print statement from fn...
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在打印"After"之后调用调试打印语句,我不明白为什么我得到它两次---除非mapValues创建一个懒惰的地图?

mapping dictionary scala lazy-evaluation

8
推荐指数
2
解决办法
1363
查看次数

用C++读取大字符串 - 是否有安全快速的方法?

http://insanecoding.blogspot.co.uk/2011/11/how-to-read-in-file-in-c.html回顾了在C++中将整个文件读入字符串的多种方法.最快选项的关键代码如下所示:

std::string contents;
in.seekg(0, std::ios::end);
contents.resize(in.tellg());
in.seekg(0, std::ios::beg);
in.read(&contents[0], contents.size());
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不安全,因为它依赖string于以特定方式实施.例如,如果实现是共享字符串,那么修改数据&contents[0]可能会影响正在读取的字符串之外的字符串.(更一般地说,不能保证这不会破坏任意记忆 - 在实践中不太可能发生,但依靠它不是好习惯.)

C++和STL旨在提供高效的C语言功能,因此可以预期上述版本的速度同样快,但保证安全.

在这种情况下vector<T>,有一些函数可用于访问原始数据,可用于有效地读取向量:

T* vector::data();
const T* vector::data() const; 
Run Code Online (Sandbox Code Playgroud)

其中第一个可以用来vector<T>有效地阅读.不幸的是,string等价物提供了const变体:

const char* string::data() const noexcept;
Run Code Online (Sandbox Code Playgroud)

所以这不能用于有效地读取字符串.(可能non-const省略了变体以支持共享字符串实现.)

我还检查了字符串构造函数,但接受char*复制数据的那些 - 没有选项可以移动它.

有没有一种安全快捷的方法将文件的全部内容读入字符串?

值得注意的是,我想读取一个string而不是一个,vector<char>以便我可以使用a来访问结果数据istringstream.没有相同的vector<char>.

c++ string stl file

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

git lfs迁移有什么作用?

我认为这git lfs migrate重写了回购的历史记录,以便将指定的大文件保留在LFS中。这意味着存储库应该变小,因为它不直接包含大文件的所有版本。但是,当我跑步时

git lfs migrate import --include="test-data/**" --include-ref=refs/heads/master

test-data/目录中的所有文件都替换为如下所示的文件:

version https://git-lfs.github.com/spec/v1
oid sha256:5853b5a2a95eaca53865df996aee1d911866f754e6089c2fe68875459f44dc55
size 19993296
Run Code Online (Sandbox Code Playgroud)

.git文件夹将变成两倍大(400MB至800MB)。我很困惑。什么git lfs migrate doing

编辑:迁移后我做了清理

git reflog expire --expire-unreachable=now --all
git gc --prune=now
Run Code Online (Sandbox Code Playgroud)

跑步前du。之后,这些文件夹将占用大部分空间:

414M .git /对象398M .git / lfs

git git-lfs

6
推荐指数
2
解决办法
5282
查看次数

为什么不能覆盖operator << for涉及第三方代码的模板类?

我在/sf/answers/3636592081/中询问了以下内容 :

我想超载template<class T> ostream& operator<<(ostream& os, const optional<unique_ptr<T>>&).

在评论中,@ Yakk - Adam Nevraumont指出:

这个问题的答案是"你做不到".对于通用类型T,没有合法的方法可以做到这一点; 我可以解释原因,但这样做会有新的问题/答案

我正在创造一个新的Q.以接受这种报价......

c++ overloading

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

在 Gradle 中:将 Scala 编码设置为 UTF-8

如果在 Gradle 中编译 Java,您可以通过设置编码

compileJava.options.encoding = 'UTF-8'
Run Code Online (Sandbox Code Playgroud)

我无法让它与 Scala 一起工作;我已经尝试了所有这些:

compileJava.options.encoding = 'UTF-8'

compileScala.options.encoding = 'UTF-8'

compileScala {
    scalaCompileOptions.encoding = 'utf-8'
}

compileScala {
    scalaCompileOptions.additionalParameters = ["-encoding UTF-8"]
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激。

编辑:关闭,因为这是我的测试方法有问题。我本来就JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8定的;我试图通过在 Gradle 文件中设置编码来替换它。

为了测试,我试图打印出一个 Unicode 字符,但在删除 envvar 并尝试上述选项后,它没有正确打印。原因是这JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8不仅会影响输入文件的编码,还会影响System.out. 用

System.setOut(new PrintStream(System.out, true, "UTF-8")) 
Run Code Online (Sandbox Code Playgroud)

修复的东西。以供参考,

compileJava.options.encoding = 'UTF-8'
compileScala {
    scalaCompileOptions.encoding = 'UTF-8'
}
Run Code Online (Sandbox Code Playgroud)

足够。

scala gradle

5
推荐指数
0
解决办法
1183
查看次数