为什么要去学习底层的知识
我从前有一个大的误区,认为学习一些框架知识,能够实现业务功能就可以了.
完全没有必要去深挖底层.但是这两天,慢慢发现去了解底层知识的重要性.
有些东西,只有在遇到了,被困住很久,最后解决了.印象才会深.
下面,我会记录一些我在平常学习和工作中遇到的有关底层(对于我来讲…)
js中执行顺序
有个同学,在编写js时遇到了,一个问题.他的js代码在执行一个函数时,出现undefined的错误.
下面是一个示例
nihao();
hello();//hello 是无法执行的
function nihao(){
alert('nihao');
}
var hello = function(){
alert('hello');
}
这个问题,当时令我很困惑,我有些迷茫,这是为什么?
都是定义的方法,一个可以执行,另一个就不能执行.
后来我才了解到浏览器会先对js代码进行预处理(编译),然后再执行.
后来看了一些资料,才发现了真正的问题.下面是真正执行代码的顺序.
function nihao(){
alert('nihao');
}
var hello;
nihao();
hello();
var hello = function(){
alert('hello');
}
2018-12-13
java中Integer的比较
今天,在看阿里的Java开发手册中,看到一个以前没有注意到的细节
Integer这种包装类在比较大小时,应该使用equal() 不要直接 == 判断.
因为在-128 到 127 区间内的 Integer 值可以直接使用复用已有的对象
而这个区间之外的所有数据,则会在堆上产生,并不会复用已有对象.所以下面会输出 false
Integer num1 = 1200;
Integer num2 = 1200;
System.out.println(num1==num2);
2018-12-14
静态内部类实现单例模式
类加载是有触发条件的,懒加载的感觉.
一般,只有到用到这个类时才会被加载到JVM中
一个类创建实例对象时
- 将类装载到JVM中
- 执行静态字段的初始化和执行static{}中的代码
- 执行父类的构造方法.
- 执行构造方法,返回实例
下面的单例模式中,只有当执行到 getInstance() 才会去加载静态内部类.而且类的加载是被上锁的,所以它是线程安全的.
扫描二维码关注公众号,回复:
4623650 查看本文章
package singleton;
public class Singleton {
private Singleton() {}
private static class LazyHolder{
private static final Singleton INSTANCE = new Singleton();
}
public Singleton getInstance() {
return LazyHolder.INSTANCE;
}
}
2018-12-16