Java Concurrency in Practice阅读笔记

Introduction

A (very) brief history of concurrency

  1. 最早的计算机都是串行的,一个指令接着一个指令的执行下去,但是为了提高效率,进程和线程出现了
  2. 同一个进程里面的线程共享同样的内存和堆栈,由于它们都能访问相同的变量,如果没有做好同步的话,就会出现一些不可预计的结果。
Read more

Java 8 新特性

Lambda expressions

Default Methods for Interfaces

  1. Java 8允许我们在接口中定义non-abstract method,这在Java 8之前是不被允许的。定义的方法是使用default关键词:

    1
    2
    3
    4
    5
    6
    7
    interface Formula {
    double calculate(int a);

    default double sqrt(int a) {
    return Math.sqrt(a);
    }
    }
  2. 我们可以使用deault关键词定义的方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    Formula formula = new Formula() {
    @Override
    public double calculate(int a) {
    return sqrt(a * 100);
    }
    };

    formula.calculate(100); // 100.0
    formula.sqrt(16); // 4.0

这里我们使用了匿名内部类。匿名内部类的一个很大的好处就是:接口是不能实例化的,如果要实例化,我们需要先定义实现这个接口的类。但很多时候,我们其实是不关心实现接口的类是怎样的,而只关心接口的方法是如何重写(override)的。匿名内部类就可以帮助我们达到目的。

Read more

Thinking in Java阅读笔记

Initialization & Clean up

Static data initialization

  1. 当新建一个类或者直接使用这个类里的static变量的时候,这个类里所有的static变量就会被初始化,static变量先于non-static变量进行初始化,并且整个程序中只有一份static变量的instance(即被所有对象共享)
  2. static block: 跟static变量一样,随着类的加载而执行,只执行一次,并优先于主函数,可用于给类进行初始化
Read more

Spring

Inversion of control

The approach of outsourcing(外包) the construction and management of objects(outsource to a object factory).

Read more

Servlets and JSPs

Servlet

Understanding the servlet

Tomcat可以简单的理解为一个web容器,我们编写的servelet程序必须要在web容器中才能运行,这很好理解,因为单单一个servlet java程序并不能够接收浏览器的信息,我们需要通过web容器接收到浏览器的命令,然后web容器再调用servlet处理并返回结果。
Tomcat从浏览器接收到请求后生成request和response两个对象,将这两个对象传入servlet,servelet处理后再返回Tomcat。
Servlet可以使用xml或者annotation来处理路径。

Read more

Maven学习笔记

Maven简介

Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven可以很好的管理项目中的第三方jar包,避免冲突,一键配置(关于jar包和classpath看另一篇博客)。

Read more

java垃圾回收

Garbage Collection

The java virtual machine(JVM) that runs your program uses hideden data structures to manage memory.

Read more