我更喜欢尽可能少的正式定义和简单的数学.
algorithm complexity-theory big-o computer-science time-complexity
这个网站上已经存在很多性能问题,但是我发现几乎所有这些都是特定于问题且相当狭窄的问题.几乎所有人都重复这些建议,以避免过早优化.
我们假设:
我在这里寻找的是在一个关键算法中挤出最后几个百分点的策略和技巧,除此之外别无他法.
理想情况下,尝试使答案语言不可知,并在适用的情况下指出建议策略的任何缺点.
我将使用我自己的初步建议添加回复,并期待Stack Overflow社区可以想到的任何其他内容.
这绝对是主观的,但我想尽量避免它变得有争议.我认为如果人们适当地对待它可能是一个有趣的问题.
对这个问题的想法来自评论跟帖从我的回答到:"你恨你喜欢的语言什么的五件事?" 问题.我争辩说C#中的类应该默认密封 - 我不会把我的推理放在这个问题上,但我可以写一个更全面的解释作为这个问题的答案.我对评论中讨论的热度感到惊讶(目前有25条评论).
那么,你持有什么有争议的意见?我宁愿避免那种以相对较少的基础(例如括号放置)而变得非常宗教的东西,但是例子可能包括诸如"单元测试实际上并不十分有用"或"公共领域真的很好"之类的东西.重要的是(对我来说,无论如何)是你有理由支持你的意见.
请提出您的意见和推理 - 我鼓励人们投票支持有争议和有趣的意见,无论您是否恰好同意这些意见.
到目前为止,大多数"起始锅炉板"和一些关于react/redux的帖子我都看到鼓励使用immutable.js来解决可变性问题.我个人依赖Object.assign或传播运算符来处理这个问题,因此在immutable.js中并没有真正看到优势,因为它增加了额外的学习,并且从用于可变性的vanilla js技术转移了一些.我试图找到切换的正当理由,但是因为我无法在这里询问为什么它如此受欢迎.
在当前的C++标准(C++ 03)中,关于文本本地化的规范太少,这使得C++开发人员在使用本地化文本时比以往更加艰难(当然,C++ 0x标准稍后会有所帮助).
去年我研究了这个,我唯一确定的是你应该使用std::wstring或std::basic_string<ABigEnoughType>操纵应用程序中的文本.我停止了我的研究,因为我的工作更多的"文本显示"的问题(在实时3D的情况下),但我想有管理的纯粹的C本地化的文本++不仅仅是这一点,"使用Unicode"的一些最佳做法.
所以,欢迎所有最佳实践,建议和信息(跨平台让我觉得很难)!
我在面试中遇到一个问题,即写一个方法来检查类似的单词而不考虑字符情况.
我通过使用每对字符的ASCII值的差异来回答它.但是在家里,当我在String.class中实际执行它时,我感到很不安 - 为什么这样实现呢!
我试图在inbuilt和我的自定义方法之间进行比较,这种方式 -
public class EqualsIgnoreCase {
public static void main(String[] args) {
String str1 = "Srimant @$ Sahu 959s";
String str2 = "sriMaNt @$ sAhu 959s";
System.out.println("Avg millisecs with inbuilt () - " + averageOfTenForInbuilt(str1, str2));
System.out.println("\nAvg millisecs with custom () - " + averageOfTenForCustom(str1, str2));
}
public static int averageOfTenForInbuilt(String str1, String str2) {
int avg = 0;
for (int itr = 0; itr < 10; itr++) {
long start1 = System.currentTimeMillis();
for (int i …Run Code Online (Sandbox Code Playgroud) 我有一个问题,我们何时应该使用Enum,何时应该使用最终常量?
我知道它已在Enums和Constants中讨论过.哪个用的?虽然这是C#问题.
我的问题是为什么Android使用这么多常量而不是Enum?例如, Context
在我看来,如果我们使用常量,可能存在以下风险:如果我们定义LEVEL常量
public static final int LEVEL_LOW=1;
public static final int LEVEL_MEDIUM=2;
public static final int LEVEL_HIGH=3;
Run Code Online (Sandbox Code Playgroud)
当我们传递一个int = 4的参数时.它不会有编译错误,如果我们传递1的数字,代码阅读器可能不容易知道它的意思.
但Enum可以解决这个问题,虽然它可能会导致更多的开销,因为它是Object.
那么为什么Android使用常量而不是Enum?在这种情况下,我们何时应该使用常数或枚举?
foreach在PHP7中,默认情况下,按值迭代时,根据以下内容对数组的副本进行操作:http://php.net/manual/en/migration70.incompatible.php
是否只有在对数组或值进行更改时才会懒惰地创建副本,或者它是否总是复制并实质上使引用循环进行性能优化?
此外,对象数组是否仍然循环/给你对象的引用?或者他们实际上是否也会创建副本foreach并按值返回对象?
请考虑以下事项:
class CMyClass
{
public:
CMyClass()
{
printf( "Constructor\n" );
}
CMyClass( const CMyClass& )
{
printf( "Copy constructor\n" );
}
};
int main()
{
std::list<CMyClass> listMyClass;
listMyClass.resize( 1 );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它产生以下输出:
构造函数
复制构造函数
现在我的问题是:我如何避免复制构造函数?或者换一种方式:如何在没有不必要的复制操作的情况下在STL容器内创建对象.有没有办法使用默认构造函数进行"就地"构造?
更新 - 答案到目前为止:
智能指针对我的应用来说太过分了.但我真的很想知道为什么不能这样做.这似乎是一件显而易见的事情.还有其他想法吗?如果它有效,我甚至会接受一个讨厌的黑客......
解
我想我刚从这里提出的所有评论和答案中找到了我的问题的解决方案.解决方案是构造一个空对象并将其保留,以便以后使用它来制作干净的副本.然后,您可以使用其中一个引用方法(如push_back或insert).这仍然为每个插入的新对象调用复制构造函数,但至少它不是默认构造函数和复制构造函数:
int main()
{
CMyClass Empty;
std::list<CMyClass> listMyClass;
for ( int c=0; c<10; ++c )
{
listMyClass.push_back( Empty );
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我知道我可以使用右移执行除以2.
为简单起见,采用4位数系统
-1 - 1111
-2 - 1110
-3 - 1101
-4 - 1100
-5 - 1011
-6 - 1010
-7 - 1001
-8 - 1000
7 - 0111
6 - 0110
5 - 0101
4 - 0100
3 - 0011
2 - 0010
1 - 0001
0 - 0000
Run Code Online (Sandbox Code Playgroud)
如果我尝试表演
6 / 2 = 0110 >> 1 = 0011 = 3
-6/ 2 = 1010 >> 1 = 1101 = -3
Run Code Online (Sandbox Code Playgroud)
对+ ve和-ve数都有效
但是,当来到1
1 / 2 = 0001 …Run Code Online (Sandbox Code Playgroud) java ×3
algorithm ×2
c++ ×2
performance ×2
android ×1
big-o ×1
constants ×1
enums ×1
foreach ×1
ignore-case ×1
immutability ×1
javascript ×1
localization ×1
optimization ×1
php ×1
php-7 ×1
reactjs ×1
redux ×1
stl ×1
string ×1