为什么要去学习底层的知识
我从前有一个大的误区,认为学习一些框架知识,能够实现业务功能就可以了.
完全没有必要去深挖底层.但是这两天,慢慢发现去了解底层知识的重要性.
有些东西,只有在遇到了,被困住很久,最后解决了.印象才会深.
下面,我会记录一些我在平常学习和工作中遇到的有关底层(对于我来讲…)
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() 才会去加载静态内部类.而且类的加载是被上锁的,所以它是线程安全的.
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
时隔良久
2020年3月7日
做程序员的时间越长越觉得在大学里学习的知识很重要;
例如操作系统,计算机网络,数据结构等;
但是,为什么当时是意识不到的呢?
我认为学习编程应该是由浅入深的,先学习容易学习的内容;
例如,学一门编程语言,JAVA,C语言等;
在了解一门语言之后,用这门语言做一个web的小项目;
在实践中,你会发现一个请求从客户端到服务器,在这里面会
涉及到计算机网络;
HTTP协议,那你自然会好奇,到底是怎样的传输过程;能够实现
程序端到端的传输;又是如何通过网线传输的数据;
在这期间的过程中,会有什么样子的问题:例如,传输失败了,传输的慢了,这些问题是怎么解决的?
然后,结合在大学所学的知识,去思考;
当然,大学的课程时间短,知识多; 老师讲的不够仔细也是正常的;
所以,要我们去课下学习; 哈哈,当初我就没有! 所以导致现在比较菜;
不过,工作之后,对编程的不断思考,加上对程序的好奇;自然会去主动学习一些底层知识;
如果,你还在上大学; 以后想从事计算机行业,最好利用好大学的时间来学好基础知识; 这是根基;