Java Concurrency in Practice阅读笔记

Introduction

A (very) brief history of concurrency

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

CSAPP

Representing and Manipulating Information

Information Storage

  1. 计算机程序把计算机的内存看成一段非常大的bytes数组,这个连续的bytes数组被称为虚拟内存(virtual memory)。虚拟内存的每一个byte都会被一个唯一的数字表示,这个数字称为这块内存的地址。所有的地址组成的集合被称为虚拟地址空间(virtual address space)
Read more

C语言

计算机和编程语言

  1. 解释性语言vs编译语言:语言本无解释/编译之分,只是常用的执行方式而已,比如我们常说C语言是编译性语言,是因为大多数时候我们运行C语言都是先编译后运行,但是其实也是有C语言解释器存在的。
  2. C语言发展与版本
    • 1989年ANSI发布了第一个标准-ANSI C
    • 1990年ISO接受了ANCI的标准-C89
    • C的标准在1995年和1999年两次更新-C95和C99
    • 本课程使用C99版本教学
Read more

Intro to Operating System

Virtualization

  1. 虚拟化最重要的两个部分就是CPU虚拟化和内存虚拟化,通过对这两者进行抽象和虚拟化,即使我们的电脑只有一个CPU和一个物理内存,对于电脑上运行的多个进程来说,它们仿佛在使用自己独立的CPU和内存。其中CPU虚拟化使用的是time-sharing的方法,内存虚拟化使用的是space-sharing的方法。
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

Computer Networking阅读笔记

Computer Networks and the Internet

What is the internet

  1. 计算机网络中,我们把所有连入网络的设备叫做主机(hosts)或者端系统(end systems),端系统一般可以分成两大类:clients和servers
  2. 端系统之间由通信链路(communication links)和分组交换机(packet switches)连接。常见的通信链路包括同轴电缆,铜线,光纤和无线电频谱。常见的分组交换机有路由器(router)和链路层交换机(link-layer switch)
  3. 家用路由器与计算机网络中的路由器的区别: https://www.zhihu.com/question/52176116
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

Master Theorem

Master Theorem(主定理)

主定理用于在divide&conquer问题中求时间复杂度,以前总是记不住,今天总结了一下,方便记忆。

Example: merge sort: T(n) = 2*T(n/2)+O(n)

a = 2, b =2, n^logba == n, 所以符合2.1, 所以结果是O(nlogn)