大多数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++约定.编写包装库功能的类或方法很痛苦,因为类似的东西以不同的样式名称结尾.
那么,您如何协调这些不同的命名约定?
我试图让Perl和GNU/Linux sort(1)程序就如何对Unicode字符串进行排序达成一致.我跑的排序与LANG=en_US.UTF-8
.在Perl程序中,我尝试了以下方法:
use Unicode::Collate
同 $Collator = Unicode::Collate->new();
use Unicode::Collate::Locale
同 $Collator = Unicode::Collate->new(locale => $ENV{'LANG'});
use locale
他们中的每一个都失败了以下错误(来自Perl方面):
只为我工作的方法参与设置LC_ALL=C
了排序,并在Perl使用8位字符.但是,这样就没有正确排序Unicode字符串.
我有两个Git仓库R1
和R2
,包含从产品发展的两个时期承诺: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)
请注意,之间R1
和R2
文件已添加,删除和重命名.
我尝试创建一个空的存储库,然后将它们的内容合并到它上面.
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
.我可以制作一个合成提交来删除合并之间的额外文件,但这对我来说似乎不优雅.此外,通过这种方法,最终结果包含实际上没有发生的合并.
假设我有一个包含两个字段的数据库表,"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
条款中排在第一位?
下面的图表几乎完美地布局,除了左边的"命名管道"节点到"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) 我正在尝试将特定项目的连续快照放入git的历史记录中.我这样做是通过使用每个快照的内容填充存储库目录然后运行
git add -A .
git commit -m 'Version X'
Run Code Online (Sandbox Code Playgroud)
这是本答案中推荐的方法.但是,我看到只有当100%的文件内容保持不变时,提交才会识别文件重命名.有没有办法影响重命名检测,git commit
使其找到重命名文件内容已经改变了一点?我看到了git merge
并且git diff
有各种控制重命名阈值的选项,但这些选项不存在git commit
.
我尝试过的事情:
为每个快照创建一个单独的分支,然后将连续的分支合并到master
使用上
git merge -s recursive -Xtheirs -Xpatience -Xrename-threshold=20
但是,这使我保留了旧版本的重命名文件,同时也无法检测到重命名.
我经常看到的最令人震惊的冗余代码构造涉及使用代码序列
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.你会在代码审查中标记出哪些其他类似的结构?
我可以在FreeBSD,GNU/Linux和Solaris下使用各种shell复制问题.它让我头疼了一个多小时,所以我决定在这里发布这个问题.
默认情况下,Java流由公共线程池处理,该线程池使用默认参数构造.正如在另一个问题中所回答的那样,可以通过指定自定义池或通过设置java.util.concurrent.ForkJoinPool.common.parallelism
系统参数来调整这些默认值.
但是,我无法通过这两种方法中的任何一种来增加分配给流处理的线程数.例如,请考虑以下程序,该程序处理第一个参数中指定的文件中包含的IP地址列表,并输出已解析的地址.在具有大约13000个唯一IP地址的文件上运行此操作,我看到使用Oracle Java Mission Control只需16个线程.其中只有五名是ForkJoinPool
工人.然而,这个特定任务将从更多线程中受益,因为线程大部分时间都在等待DNS响应.所以我的问题是,我怎样才能真正增加使用的线程数?
我在三种环境下尝试过该程序; 这些是操作系统报告的线程数.
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) 我有一个表格,表示项目修订版中源文件指标的值,如下所示:
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绘图程序就是这种情况).如您所见,连续修订之间的大多数值都是相同的,因此表的有用数据非常稀疏.我正在寻找一种存储数据的方法
理想情况下,解决方案不应依赖于特定的RDBMS,而应与Hibernate兼容.如果这是不可能的,我可以使用Hibernate,MySQL或PostgreSQL特有的功能.
coding-style ×2
git ×2
unix ×2
c++ ×1
database ×1
dot ×1
forkjoinpool ×1
git-commit ×1
graphviz ×1
hibernate ×1
indexing ×1
java ×1
java-stream ×1
linux ×1
locale ×1
merge ×1
mysql ×1
optimization ×1
oracle ×1
perl ×1
postgresql ×1
rename ×1
shell ×1
sorting ×1
sql ×1
unicode ×1