小编Dio*_*lis的帖子

如何将常见的C++命名约定与库的命名约定进行协调

大多数C++命名约定规定使用的camelCaseIdentifiers:即与类(大写字母开头的名称Person,Booking)和名称与字段和变量(小写字母开头getPrice(),isValid(),largestValue).这些建议完全不符合C++库的命名规则,其中涉及的类小写名称(赔率string,set,map,fstream)和names_joined_with_an_underscore对方法和字段(find_first_of,lower_bound,reverse_iterator,first_type).使图片更加复杂的是操作系统和C库函数,它们涉及C和Unix中的压缩小写名称以及Windows中以大写字母开头的函数.

因此,我的代码很乱,因为一些标识符使用C++库,C或操作系统命名约定,而其他标识符使用规定的C++约定.编写包装库功能的类或方法很痛苦,因为类似的东西以不同的样式名称结尾.

那么,您如何协调这些不同的命名约定?

c++ coding-style naming-conventions

42
推荐指数
3
解决办法
9376
查看次数

Perl和Unix如何排序,以相同的顺序排序Unicode字符串?

我试图让Perl和GNU/Linux sort(1)程序就如何对Unicode字符串进行排序达成一致.我跑的排序LANG=en_US.UTF-8.在Perl程序中,我尝试了以下方法:

他们中的每一个都失败了以下错误(来自Perl方面):

  • 输入未排序:[----,]在[($ 1)之后出现
  • 输入未排序:[...]在[&]之后出现
  • 输入未排序:[($ 1)在[1]之后出现

只为我工作的方法参与设置LC_ALL=C排序,并在Perl使用8位字符.但是,这样就没有正确排序Unicode字符串.

unix sorting unicode perl locale

24
推荐指数
2
解决办法
984
查看次数

如何将Git存储库组合成线性历史记录?

我有两个Git仓库R1R2,包含从产品发展的两个时期承诺:1995 - 1997年和1999年至2013年.(我通过将现有的RCS和CVS存储库转换为Git来创建它们.)

R1:
A---B---C---D

R2:
K---L---M---N
Run Code Online (Sandbox Code Playgroud)

如何将两个存储库合并为一个包含项目线性历史的准确视图的存储库?

A---B---C---D---K---L---M---N
Run Code Online (Sandbox Code Playgroud)

请注意,之间R1R2文件已添加,删除和重命名.

我尝试创建一个空的存储库,然后将它们的内容合并到它上面.

git remote add R1 /vol/R1.git
git fetch R1

git remote add R2 /vol/R2.git
git fetch R2

git merge --strategy=recursive --strategy-option=theirs R1
git merge --strategy=recursive --strategy-option=theirs R2
Run Code Online (Sandbox Code Playgroud)

但是,这会留下最新的文件D,但不是修订版K.我可以制作一个合成提交来删除合并之间的额外文件,但这对我来说似乎不优雅.此外,通过这种方法,最终结果包含实际上没有发生的合并.

git merge git-rewrite-history git-branch-sculpting

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

多个索引可以一起工作吗?

假设我有一个包含两个字段的数据库表,"foo"和"bar".它们都不是唯一的,但每个都被编入索引.但是,它们每个都有一个单独的索引,而不是被索引在一起.

现在假设我执行一个查询,例如SELECT * FROM sometable WHERE foo='hello' AND bar='world'; My table,foo为'hello'的行数很多,而bar为'world'的行数很少.

因此,数据库服务器最有效的方法是使用bar索引查找bar为'world'的所有字段,然后仅返回foo为'hello'的那些行.这是O(n)n是bar为'world'的行数.

但是,我想这个过程可能会反过来,使用fo索引并搜索结果.这就是O(m)m是foo为'hello'的行数.

那么Oracle足够聪明,可以在这里高效搜索吗?其他数据库怎么样?或者有什么方法可以在我的查询中告诉它以正确的顺序搜索?也许bar='world'WHERE条款中排在第一位?

database oracle indexing optimization

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

如何指示点使用较短的边缘路径?

下面的图表几乎完美地布局,除了左边的"命名管道"节点到"cat"的边缘,它采用了一条很长的迂回路线,而不是我在下图中用红色标记的明显短路.有没有办法引导点使用短边路径?请注意,图表底部的序列图必须按当前显示的顺序呈现,即按从左到右的顺序.

在此输入图像描述

这是绘制图表的代码.

digraph D {
fontname="Arial";
subgraph cluster_async {
    label="Asynchronous processes";
    style=filled;
    color=lightgrey;

    node [shape=box, style=solid, fillcolor=white, fontname="Arial"];
    {
        rank=same;
        npi_0_0_0 [label="named\npipe"];
        npi_0_3_0 [label="named\npipe"];
        npi_0_2_0 [label="named\npipe"];

    }

    node [shape=box, style=bold];
    tee [label="sgsh-tee"];
    "ls -l" -> tee;
    tee -> npi_0_0_0;
    tee -> npi_0_3_0;
    tee -> npi_0_2_0;

    NBYTES [label="sgsh-writeval -s NBYTES"];
    npi_0_3_0 -> "awk '{s += $5} END {print s}'" -> NBYTES;

    NDIRS [label="sgsh-writeval -s NDIRS"];
    npi_0_2_0  -> "grep -c '^d'" -> NDIRS;

    // Put some order in the appearance
    {
        rank=same; …
Run Code Online (Sandbox Code Playgroud)

dot graphviz

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

在git下提交文件时如何控制重命名阈值?

我正在尝试将特定项目的连续快照放入git的历史记录中.我这样做是通过使用每个快照的内容填充存储库目录然后运行

git add -A .
git commit -m 'Version X'
Run Code Online (Sandbox Code Playgroud)

这是本答案中推荐的方法.但是,我看到只有当100%的文件内容保持不变时,提交才会识别文件重命名.有没有办法影响重命名检测,git commit使其找到重命名文件内容已经改变了一点?我看到了git merge并且git diff有各种控制重命名阈值的选项,但这些选项不存在git commit.

我尝试过的事情:

  • 在提交新文件内容之前,使用home-brew脚本定位重命名的文件,并使用原始文件执行提交重命名为新位置.然而,这引入了一个人工提交,并且似乎不优雅,因为它不使用git的重命名检测功能.
  • 为每个快照创建一个单独的分支,然后将连续的分支合并到master使用上

    git merge -s recursive -Xtheirs -Xpatience -Xrename-threshold=20

    但是,这使我保留了旧版本的重命名文件,同时也无法检测到重命名.

git rename git-commit

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

冗余代码构造

我经常看到的最令人震惊的冗余代码构造涉及使用代码序列

if (condition)
    return true;
else
    return false;
Run Code Online (Sandbox Code Playgroud)

而不是简单的写作

return (condition);
Run Code Online (Sandbox Code Playgroud)

我已经在各种语言中看到了这个初学者错误:从Pascal和C到PHP和Java.你会在代码审查中标记出哪些其他类似的结构?

coding-style

7
推荐指数
5
解决办法
3210
查看次数

为什么"echo foo | read a; echo $ a"没有按预期工作?

我可以在FreeBSD,GNU/Linux和Solaris下使用各种shell复制问题.它让我头疼了一个多小时,所以我决定在这里发布这个问题.

unix linux shell

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

如何处理超过默认线程数的Java流?

默认情况下,Java流由公共线程池处理,该线程池使用默认参数构造.正如在另一个问题中所回答的那样,可以通过指定自定义池或通过设置java.util.concurrent.ForkJoinPool.common.parallelism系统参数来调整这些默认值.

但是,我无法通过这两种方法中的任何一种来增加分配给流处理的线程数.例如,请考虑以下程序,该程序处理第一个参数中指定的文件中包含的IP地址列表,并输出已解析的地址.在具有大约13000个唯一IP地址的文件上运行此操作,我看到使用Oracle Java Mission Control只需16个线程.其中只有五名是ForkJoinPool工人.然而,这个特定任务将从更多线程中受益,因为线程大部分时间都在等待DNS响应.所以我的问题是,我怎样才能真正增加使用的线程数?

我在三种环境下尝试过该程序; 这些是操作系统报告的线程数.

  • Java SE Runtime Environment在运行Windows 7:17线程的8核计算机上构建1.8.0_73-b02
  • Java SE运行时环境在运行OS X Darwin 15.2.0的23核机器上构建1.8.0_66-b17:23个线程
  • openjdk版本1.8.0_72在一台运行FreeBSD 11.0的44核机器上:44个线程

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.file.Files;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.ForkJoinPool;

/** Resolve IP addresses in file args[0] using 100 threads */
public class Resolve100 {
    /** Resolve the passed IP address into a name */
    static String addressName(String ipAddress) {
        try {
            return …
Run Code Online (Sandbox Code Playgroud)

java multithreading forkjoinpool java-stream

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

稀疏数据:在RDBMS中高效存储和检索

我有一个表格,表示项目修订版中源文件指标的值,如下所示:

Revision FileA FileB FileC FileD FileE ...
1           45     3    12   123   124
2           45     3    12   123   124
3           45     3    12   123   124
4           48     3    12   123   124
5           48     3    12   123   124
6           48     3    12   123   124
7           48    15    12   123   124
Run Code Online (Sandbox Code Playgroud)

(上述数据的关系视图不同.每行包含以下列:Revision,FileId,Value.从中计算数据的文件及其修订版存储在Subversion存储库中,因此我们试图表示存储库的关系模式中的结构.)

10000次修订中最多可以有23750个文件(ImageMagick绘图程序就是这种情况).如您所见,连续修订之间的大多数值都是相同的,因此表的有用数据非常稀疏.我正在寻找一种存储数据的方法

  • 避免复制并有效利用空间(目前非稀疏表示需要260 GB(数据+索引),少于我想要存储的数据的10%)
  • 允许我使用SQL查询有效地检索特定修订的值(无需显式循环修订或文件)
  • 允许我有效地检索特定度量值的修订版.

理想情况下,解决方案不应依赖于特定的RDBMS,而应与Hibernate兼容.如果这是不可能的,我可以使用Hibernate,MySQL或PostgreSQL特有的功能.

mysql sql postgresql hibernate sparse-matrix

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