假设我们有一个问题,某个算法(我们称之为算法_1)的时间复杂度为 ,O(n^2)
另一个算法(我们称之为算法_2)的时间复杂度为O(n)
,但实际上我们看到n < 1000
算法_1 更快,否则算法_2 更快是比较快的。
为什么我们不能直接写这样的代码:
if ( n < 1000)
do algorithm_1
else
do algorithm_2
Run Code Online (Sandbox Code Playgroud)
这是程序员真正做的事情还是有缺点?
对于较小的程序,这似乎是一个好主意。
我在测试Room数据库时遇到问题:当我运行测试时,我得到以下异常:
java.lang.RuntimeException: cannot find implementation for database.TicketDatabase. TicketDatabase_Impl does not exist
at android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:92)
at android.arch.persistence.room.RoomDatabase$Builder.build(RoomDatabase.java:454)
at com.sw.ing.gestionescontrini.DatabaseTest.setDatabase(DatabaseTest.java:36)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1886)
Run Code Online (Sandbox Code Playgroud)
类DatabaseTest:
public class DatabaseTest {
TicketDatabase database;
DAO …
Run Code Online (Sandbox Code Playgroud) 我想为我的Web应用程序使用Java Persistence API(JPA).
有流行的JPA实现,如Hibernate,Toplink和EclipseLink.什么实施是一个很好的选择,为什么?
如果我的问题很天真,我会倾向于DDD,所以道歉.我想我需要使用本地数据传输对象才能向用户显示数据,因为许多属性不属于任何实体/值对象.
但是,我不确定应该在域域层或应用程序服务层中实现此DTO的位置.DTO实现似乎是域的一部分,但这意味着当我在服务层中创建DTO集合并将其传递给表示层时,我必须在表示层中引用域层,这似乎是错误的.
使用DDD原则实现DTO的正确方法是什么?
我愿意学习Scheme.我想坚持使用R7RS,因为它是最后一个标准.然而,似乎在Scheme当前实现上存在很多碎片,并且大多数碎片停留在R5RS或R6RS的一部分.
我发现的唯一一个支持R7RS的部分是Kawa,但由于它在JVM上运行,它不支持尾调用优化,这是针对该实现的一个强点.
Scheme计划世界是否真的那么支离破碎,甚至还没有R7RS完全实现呢?我问,因为如果没有,我一赶上,我就打算建一个; 但是,如果存在,最好不要重新发明轮子并为某种实施做出贡献.
如果您有信息,请不仅要回答姓名,还要提供适当的进一步信息(实施的官方网站,甚至邮件组的摘录都可以作为参考).
顺便说一句,我不是在考虑Racket,因为它不再是Scheme了.
请参阅此链接:https : //docs.python.org/3/c-api/long.html#c.PyLong_FromLong
当前的实现为 -5 到 256 之间的所有整数保留了一个整数对象数组;当您在该范围内创建一个 int 时,您实际上只是取回了对现有对象的引用。所以,应该可以改变 1 的值。我怀疑 Python 的行为,在这种情况下,是 undefined。:-)
在这种情况下,粗线是什么意思?
我理解委托人的声明是这样的:
public delegate int PerformCalculation(int x, int y);
Run Code Online (Sandbox Code Playgroud)
但是,必须有更多的事情发生.委托的目的是提供指向方法的指针,为此,您将对方法的引用封装在委托中.
这个参考是什么类型的结构(代表内部)?我也明白你可以在委托中封装对多个方法的引用.这是否意味着委托中有一个包含这些数组的数组?
此外,委托中定义了哪些方法等.当您使用简洁声明委托时,实际发生了什么:
public delegate int PerformCalculation(int x, int y);
Run Code Online (Sandbox Code Playgroud)
?
编辑:一些澄清.声明委托时,编译器会自动创建一个从System.MulticastDelegate继承的密封类.如果你用ildasm查看你的程序集,你可以看到这个.这很整洁.基本上,使用一个语句,您将在编译时获得为您生成的全新类,并且它具有您需要的所有功能.
我有一节课:
章
class C {
private:
template<int i>
void Func();
// a lot of other functions
};
Run Code Online (Sandbox Code Playgroud)
C.cpp
// a lot of other functions
template<int i>
void C::Func() {
// the implementation
}
// a lot of other functions
Run Code Online (Sandbox Code Playgroud)
我知道,在cpp文件中移动模板实现并不是最好的主意(因为它不会从其他cpp中看到,它可能包含带有模板声明的标头).
但私人功能怎么样?谁能告诉我是否有在.cpp文件中实现私有模板功能的缺点?
作为一个越来越熟悉Java的C++程序员,看到语言级别支持锁定任意对象而没有任何声明对象支持这种锁定,这有点奇怪.为每个对象创建互斥锁似乎是一个自动选择的高成本.除了内存使用,互斥体在某些平台上是OS有限的资源.如果互斥锁不可用但你的性能特征明显不同,你可以旋转锁定,我希望这会损害可预测性.
在所有情况下,JVM是否足够智能以识别特定对象永远不会成为synchronized关键字的目标,从而避免创建互斥锁?可以懒惰地创建互斥锁,但是这会引发自举需要互斥锁的自举问题,即使解决了这个问题,我也认为仍然需要一些开销来跟踪是否已经创建了互斥锁.所以我假设如果这样的优化是可能的,它必须在编译时或启动时完成.在C++中,由于编译模型这样的优化是不可能的(你不知道对象的锁是否会跨库边界使用),但我对Java的编译和链接知道不够了解如果适用相同的限制.