所以我几天前开始学习java并得到一个问题.对于下一个表达式:
String foo=123;
Run Code Online (Sandbox Code Playgroud)
不被允许.但是,System.out.printIn()我们可以使用以下内容:
int x=5;
System.out.println(x);
Run Code Online (Sandbox Code Playgroud)
由于不允许隐式地将整数赋给字符串,为什么上面的表达式有效呢?有人可以详细解释一下吗?我也想知道我们什么时候可以使用这种隐含的东西,什么时候不能.
@example.each do |e|
#do something here
end
Run Code Online (Sandbox Code Playgroud)
在这里,我想对每个中的第一个和最后一个元素做一些不同的事情,我该如何实现呢?当然,我可以使用一个循环变量i并跟踪是否i==0,i==@example.size但不是太愚蠢?
public class MyThread
{
volatile static int i;
public static class myT extends Thread
{
public void run ()
{
int j = 0;
while(j<1000000){
i++;
j++;
}
}
}
public static void main (String[] argv)
throws InterruptedException{
i = 0;
Thread my1 = new myT();
Thread my2 = new myT();
my1.start();
my2.start();
my1.join();
my2.join();
System.out.println("i = "+i);
}
}
Run Code Online (Sandbox Code Playgroud)
由于在关系之前发生了易失性构建,因此i的最终值应该严格为2000000.但是,实际结果与变量i没有volatile的情况没有什么不同.任何人都可以解释为什么它在这里不起作用?由于i被声明为volatile,因此应该保护它不受内存不一致的影响.
我正在读这本书secrets of the js ninja,而且我经常看到这样的代码
(function(){
something here;
})();
Run Code Online (Sandbox Code Playgroud)
为什么我们需要将函数括在括号中?为什么我们之后再添加一对括号?
这是我的sass:
table#orders {
background-color:#ff0000;
}
Run Code Online (Sandbox Code Playgroud)
然而,当我实际运行这个时,我得到一个错误,说Invalid CSS after "#ff0000": expected expression (e.g. 1px, bold), was ";"我不知道它为什么期望类似1px的背景颜色.任何人都可以帮我搞清楚吗?
我正在学习Paxos算法(http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf),有一点我不明白.
我们知道事件遵循及时的顺序,并且当事件1-5和10被确定时发生,但此后6-9和11还没有.在上面的论文中,它说我们只需用无操作值填写6-9之间的差距,然后简单地记录11和11之间的新事件.
因此,在这种情况下,由于已经记录了事件10,我们知道某些事件必须在5到10之间发生,但由于某些故障而未被Paxos记录.如果我们只是填写无操作值,这些事件将在我们的录音中丢失.
更糟糕的是,如果我在上面链接的论文中说,事件实际上是来自客户端的命令,那么在中间丢失一些命令可能会使整个操作集合非法(如果没有任何命令可以跳过或命令他们很重要).
那么,为什么Paxos为事件之间的差距填补无操作价值仍然是合法的呢?(如果由于上面关注的无操作值,整个记录集可能无效.)此外,是否有更好的方法从这些间隙中恢复而不是使用no-op?
我经常看到人们说String str = new String("my string")写作效率低于写作,String str = "my string",因为前者创建了一个静态的"my string"对象,然后new是一个从静态复制的String对象.
但是,鉴于这里的语言非常简单明了,我很难想象Java优化器不会花费任何精力简单地将前者转换为后者.为什么它会选择以更费力的方式做到这一点?如果Java优化它会有什么负面影响?
假设我有一个X类的对象MyClass.MyClass有一个方法compute,当我调用时U = compute(X,...),matlab会自动调用类方法.但是,我真正想要的是调用另一个函数,该函数compute的参数以MyClass对象开头.如何强制matlab调用这个常规函数而不是进入类方法?
在生产代码中,我经常看到如下定义的类:
public interface SomeComponent { // Some methods }
public class SomeComponentImpl implements SomeComponent { // Some methods}
public interface SomeComponentV2 extends SomeComponent { // Some methods }
public class SomeComponentV2Impl extends SomeComponentImpl implements SomeComponent { // Some methods }
Run Code Online (Sandbox Code Playgroud)
为什么在这种情况下我们要分离接口及其实现?
或者这样说,为什么简单地有一个基类,让V2扩展/覆盖V1如下:
public class SomeComponent { // Some methods }
public class SomeComponentV2 extends SomeComponent
{
// Override methods for reimplementation
// Add new methods for new features.
}
Run Code Online (Sandbox Code Playgroud) java ×4
ruby ×2
algorithm ×1
architecture ×1
cloud ×1
concurrency ×1
consensus ×1
css ×1
function ×1
javascript ×1
matlab ×1
oop ×1
optimization ×1
paxos ×1
sass ×1
string ×1
volatile ×1