小编Shi*_*han的帖子

Java中的原始数据类型和可移植性

我引用Herbert Schildt的第3章数据类型,变量和数组:

基元类型表示单个值而不是复杂对象.虽然Java完全是面向对象的,但原始类型却不是.这种效率的原因.制作原始类型会使性能降低太多.

原始类型被定义为具有明确的范围和数学行为.诸如C,C++之类的语言允许整数的大小根据执行环境的指示而变化.但是,Java是不同的.由于Java的可移植性要求,所有数据类型都具有强烈定义的范围.例如,无论特定平台如何,int总是32位.这允许编写保证在不移植任何机器架构的情况下运行的程序.虽然严格指定整数的大小可能会导致某些环境中的性能损失很小,但为了实现可移植性,这是必要的.

他最后两行是什么意思?如何指定整数的大小可能会导致某些环境中的性能损失很小?

java

6
推荐指数
1
解决办法
549
查看次数

如果是JavaScript中的函数,则为instanceof

第一个问题是我在采访中被问到的,说实话,我看到自己真的很困惑并且展示了门,

考虑一下片段:

案例a:

    var sayHello = new Function("alert('Hello there');");
    alert(sayHello instanceof Function);            // true 
    alert(sayHello instanceof Object);              // true, since every 
                                                    // object inherits from Object
Run Code Online (Sandbox Code Playgroud)

案例b:

    var myFunction = function(){

    }

    var ins = new myFunction();              
    alert(ins instanceof myFunction);        // ofcourse, true
    alert(myFunction instanceof Function);   // true

    alert(ins instanceof Function);          // false, Why is this not true?
Run Code Online (Sandbox Code Playgroud)

根据我的理解,函数必须在ins原型链中?

ins <-- myFunction <-- Function <-- Object
Run Code Online (Sandbox Code Playgroud)

javascript

6
推荐指数
1
解决办法
124
查看次数

如果线程试图获取它已经持有的锁,会发生什么?

这摘自约书亚·布洛赫(Joshua Bloch)写的书。

我不是英语母语人士,因此有理由要求澄清疑问。

因为固有锁是可重入的,所以如果线程试图获取它已经持有的锁,则请求成功。重入意味着锁是在每个线程而不是每个调用的基础上获取的。

以每次调用为基础,他是指按方法调用吗?请考虑以下代码段:

class Factoriser{

        public synchronized void doSomething(){
           // code goes here
        }
}
Run Code Online (Sandbox Code Playgroud)

假设有一个线程A,并且能够使用实例方法doSomething()获取对象的锁。由于某种原因,同一线程Thread A再次在同一对象实例方法doSomething()上获得了一个锁(还可以想象以前的锁尚未释放)。

如果我正确理解了约书亚的声明,那么即使有2个方法调用/调用,也只有一个锁。我的理解是100%正确的。请举例说明。我很困惑,因为作者在以下段落中澄清了这一点,这进一步困扰了我。

通过与每个锁关联一个获取计数和一个拥有线程来实现重入。当计数为零时,该锁被视为未锁定。当线程获取以前未持有的锁时,JVM记录所有者并将获取计数设置为1。如果该相同的线程再次获取了锁,则计数将增加,并且当拥有线程退出同步块时,计数将减少。当计数达到零时,将释放锁定。

如果重入/锁定获取不是基于每次调用的,那么对于我上述情况,为什么将JVM的计数设置为2?

java concurrency multithreading

6
推荐指数
1
解决办法
1558
查看次数

为什么Java的异常处理语句不应被视为非本地分支的一般机制?

通过Herbert Schildt:完整参考第10章异常处理

异常处理为控制具有许多动态运行时特性的复杂程序提供了强大的机制.将try,throw和catch视为处理程序逻辑中错误和异常边界条件的干净方法非常重要.与使用错误返回代码指示失败的其他语言不同,Java使用异常.因此,当方法失败时,让它抛出异常.这是处理故障模式的更简洁方法.最后一点:Java的异常处理语句不应被视为非本地分支的一般机制.如果这样做,它只会混淆您的代码并使其难以维护.

"非局部分支"一词的含义是什么?在一个很好的例子的帮助下,请详细说明一下?

请注意这个问题是在coderanch上提出的,但那里的答案主要基于个人意见,因此它没有产生基于根的答案(我无法通过那里的讨论澄清这一点).

java exception-handling

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

在Spring 4.1.5中,属性"local"不允许出现在元素"ref"中

我目前正在阅读Mkyong Spring 3.0教程.

他接着澄清了这两个基本的东西.
1. Bean在不同的XML文件中

如果您在不同的XML文件中引用bean,则可以使用'ref'标记,'bean'属性来引用它.

2. Bean在同一个XML文件中

如果您在同一XML文件中引用bean,则可以使用'ref'标记,'local'属性引用它.

我唯一能说的local attribute就是版本4.1.5中不再支持了.对于时间的推移,我坚持了

<ref bean="thebeaninstance"/>
Run Code Online (Sandbox Code Playgroud)

它适用于两者.<ref bean="...">仅要求它在same context或在...中parent context.

但我正在寻找能够解决差异的东西,如果不知何故我在2个不同的bean中遇到相同的ID,并且希望引用在不同XML中定义的那个,因为偏好转到同一个定义在同一个XML.请建议.

spring spring-mvc

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

AngularJS 中的模型视图 ViewModel

我目前正在阅读Manning 的 Lukas Ruebbelke 所著的《AngularJS in Action》 \n在第一章中,他提出,

\n\n
\n

控制器负责为视图提供要绑定的状态以及视图可以发回控制器以执行工作单元的命令。这使视图不必维护状态(因为它只需要显示控制器所处的任何状态),并且使视图不必执行任何工作(因为视图始终遵循控制器)。

\n
\n\n

在此输入图像描述

\n\n

他为 视图提供绑定状态是什么意思?

\n\n

此外,他建议,

\n\n
\n

使用 ViewModel 会反转 jQuery 风格应用程序中传统上存在的应用程序流程。在 jQuery 中,\xe2\x80\x99ve 查询 DOM 并附加一个事件侦听器。\n 当该事件触发时,你将尝试解释该事件并解析 DOM\n 的状态,以便可以执行一些命令式操作。这迫使 HTML 和驱动它的 JavaScript 之间紧密耦合。通过引入 ViewModel,您\n\xe2\x80\x99 能够打破这种关系。控制器不再负责侦听视图,而是视图负责向其操作的控制器发出特定命令。

\n
\n\n

最后一行让我困惑。

\n\n

控制器不再负责监听视图 \n而是视图负责向控制器发出特定命令操作的

\n\n

不是说儿子不再负责听父亲的话,而是父亲负责向儿子发出必须操作的具体命令。

\n\n

即使儿子不负责,实际上也是让儿子负责。但上面的说法不是很相似吗?

\n\n

他到底想说什么?

\n

mvvm angularjs

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

为什么局部变量不允许使用volatile关键字?

考虑一下片段:

如果在主线程中,我在一个方法中有这个-

volatile CountDownLatch latch = new CountDownLatch(3);

new Thread(new ProcessThread("Worker1",latch, 20000)).start();//20 secs
new Thread(new ProcessThread("Worker2",latch, 60000)).start();//60 secs
new Thread(new ProcessThread("Worker3",latch, 40000)).start();//40 secs
Run Code Online (Sandbox Code Playgroud)

我看到它volatile被显示为非法修饰符.只final允许.最后保证初始化安全.

public static class ProcessThread implements Runnable {
  final CountDownLatch latch;
  final long workDuration;
  final String name;

  public ProcessThread(String name, CountDownLatch latch, long duration){
      this.name= name;
      this.latch = latch;
      this.workDuration = duration;
  }
}
Run Code Online (Sandbox Code Playgroud)

下面的对象new CountDownLatch(3)是正确构造的,但我也想确保latch分配上述对象的引用保证对其下面的代码可见.

final CountDownLatch latch = new CountDownLatch(3);
Run Code Online (Sandbox Code Playgroud)

上面的代码是否保证初始化,以便latch下面的代码完全可见,即 …

java multithreading final volatile

5
推荐指数
2
解决办法
2406
查看次数

在Angular应用程序中将用户凭据存储在哪里?

Angular客户端应用程序正在运行 http://localhost:4200

它与基于Spring的Restful API进行通信,http://localhost:8080 后端的身份验证机制为http basic,并且对于每个请求,Spring在内部调用一个过滤器以检查用户登录时从Angular客户端传递的凭据的真实性。

用户登录时,其凭据将使用标头进行编码Base64.encodeBase64 并设置为Authorization标头。

private getHeaders(){

    let headers = new Headers();
    headers.append('Accept', 'application/json');
    headers.append('Content-Type', 'application/json');
    headers.append('Authorization','Basic ' + btoa("bill:abc123"));
    return headers;
}
Run Code Online (Sandbox Code Playgroud)

btoa函数用于设置Authorization标题。这很好用,TLS/ HTTPS将用于加密凭据以安全地通过网络。

对于后续请求,我每次都需要传递相同的凭据。因此,一旦他/她成功登录了后续请求,我应该在哪里存储用户凭据?

例如,此请求:

addEmployee( employee : Employee ) : Observable<Response> {
      return this.http.post('http://localhost:8080/employee/', JSON.stringify(employee),
            {headers: this.getHeaders()}).map(res => res.json());
  }
Run Code Online (Sandbox Code Playgroud)

angular

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

有界通配符类型的数字列表

如果我有这个

Collection<? extends Number> c = new ArrayList<>();
c.add(new Integer(1)); // Compile time error
Run Code Online (Sandbox Code Playgroud)

由于我们不知道c的元素类型代表什么,因此无法向其中添加整数。

但是如果我喜欢

List<List<? extends Number>> history = new ArrayList<>();

List<Integer> integers = new ArrayList<>();
integers.add(new Integer(1));

List<Double> doubles = new ArrayList<>();
doubles.add(new Double(2));

history.add(integers); // This is allowed
history.add(doubles);  // This is allowed
Run Code Online (Sandbox Code Playgroud)

为什么在第二个示例中允许加法?

java generics

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

为什么当我有一个私有 id 字段时 Hibernate 要求我们实现 equals/hashcode 方法?

首先,考虑片段,

public class Employee
{
    private Integer id;
    private String firstname;
    private String lastName;
    private String department;
 // public getters and setters here, i said PUBLIC
}
Run Code Online (Sandbox Code Playgroud)

我创建了 2 个具有相同 ID 的对象,其余所有字段也相同。

Employee e1 = new Employee();
Employee e2 = new Employee();

e1.setId(100);
e2.setId(100);

//Prints false in console
System.out.println(e1.equals(e2));
Run Code Online (Sandbox Code Playgroud)

整个问题从这里开始 在实时应用程序中,这必须返回 true。

因此,每个人都知道存在一个解决方案(实现 equals() 和 hashcode())

public boolean equals(Object o) {
    if(o == null)
    {
        return false;
    }
    if (o == this)
    {
        return true;
    }
    if (getClass() != o.getClass()) …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa equals hashcode

4
推荐指数
1
解决办法
3233
查看次数