Java基础学习笔记

如何阅读Java源码 阅读java的真实体会

面向对象

Java创建内部类对象

爬虫

Java爬虫实战(二):抓取一个视频网站上2015年所有电影的下载链接

用Java实现网易云音乐爬虫

揭秘Java网络爬虫程序原理

Java 动手写爬虫: 一、实现一个最简单爬虫

GitHub 上有哪些优秀的 Java 爬虫项目?

集合

如何正确遍历删除List中的元素,你会吗?

对List集合中的元素进行排序

Java List的并集 交集 差集 去重复并集

多线程

使用 Executors,ThreadPoolExecutor,创建线程池,源码分析理解

如何理解阿里开发规范中这句话?SimpleDateFormat 是线程不安全的类,一般不要定义为static变量

字符编码与序列化

Java几种常见的编码方式

序列化和反序列化的底层实现原理是什么?

Java序列化 - 二进制格式详解

Java序列化算法

Java对象序列化底层原理源码解析

正则表达式

Java正则表达式, 提取双引号中间的部分

java 正则表达式 获取双引号中到字符串

网络

解决java.net.UnknownHostException: 主机名: 主机名: 未知的名称或服务

java.net.UnknownHostException: xxx: 未知的名称或服务

字符串

java的split方法可以实现同时使用多个分隔符劈开字符串方法:

数据类型

java – 如何直接将Double转换为int?

在Java中只获取一个数组的一部分?

java中关于int值的奇偶判断

java那些小事—用偶数做判断,不要用基数做判断

如何判断一个数是否是NaN

如何在java中将float转换为bigDecimal?

BigDecimal如何转换成float数据类型?

NumberFormatException相关的error总结

Java:数值-字符串转换(String转Double)

怎样将不定长的String数组转化成相应的double数组?

开发环境搭建

eclipse中配置jdk

一台电脑如何安装多个版本的JDK

父类与子类的加载及初始化

考点

Java虚拟机初始化一个类时会经过加载,编译,运行三个阶段
静态代码域(静态代码块, 静态变量)在类加载阶段即加载,它们的优先级相同,在类加载阶段只加载一次,并且是按顺序加载
在调用一个类的构造器时, 先调用父类构造器(先调用构造代码块, 再调用构造器), 再调用子类构造器

class A {
    // 构造函数
    public A() {
        System.out.println("class A");
    }

    // 构造代码块
    {
        System.out.println("I'm A class");
    }

    // 静态代码块
    static {
        System.out.println("class A static");
    }
}

相关题目

运行下面代码,输出的结果是()

基础

Java 本地方法:该方法的实现是由非 java 写的,可以用 java 调用 c 或 c++的代码,这是出于性能的考虑 or 访问底层操作系统。

一个类可以有一个 or 多个静态代码块。静态代码块在类被加载时执行,优于构造函数

的执行,并且按照各静态代码块放在类中的顺序执行。

IO

说说你了解的字符编码算法?

Java字符编码方式

在Java中,字符只以一种形式存在,那就是Unicode(不选择任何特定的编码,直接使用他们在字符集中的编号,这是统一的唯一的方法)。
在Java中指在JVM中,在内存中,在你的代码里声明的每一个char, String类型的变量中Reader和Writer类使用的是GBK编码

序列化底层的实现原理?

反射

Java反射的作用?

Java 反射:可以在运行时获取类 or 对象的相关信息。

Collection

相关题目

以下哪些继承自 Collection 接口

请讲讲你所知道的常用集合类以及主要方法?


其他

Java集合必会14问(精选面试题整理)
这几道Java集合框架面试题在面试中几乎必问
Java 基础:hashCode方法
深入解析Java对象的hashCode和hashCode在HashMap的底层数据结构的应用
Java提高篇——equals()与hashCode()方法详解

PriorityBlockingQueue

参考文档

PriorityBlockingQueue
Java并发学习(二十四)-PriorityBlockingQueue分析

HashMap

GitHub: HashMap.java

HashMap中散列表的大小为什么是2的n次幂?

请你解释HashMap的容量为什么是2的n次幂?

HashMap中散列表大小的计算依赖于tableSizeFor()函数,而该函数的作用是返回大于等于目标值的2的幂级数(通过移位实现),所以HashMap散列表的大小为2的整数次幂

HashMap中MAXIMUM_CAPACITY为什么设置为2^30?

int值的表示范围为-2^31 - 2^31 -1,HashMap中散列表的大小都为2的整数次幂且不能超过int值的最大范围,所以MAXIMUM_CAPACITY设置为2^30

ArrayList VS Vector——都实现了List接口,都是数组实现

ArrayList Vector
不安全 安全
扩容50% 扩容100%

ArrayList VS LinkedList

ArrayList LinkedList
数组 链表
适合检索和在末尾插入or删除 适合在中间插入or删除

ArrayList和LinkedList的remove()和contains()方法都依赖equals()方法

LinkedList还实现了Queue接口,他还提供peek()、poll()、offer()等方法(offer()、peek()、poll()不抛异常)

HashSet VS TreeSet

  • HashSet
底层hash表(HashSet的contains()和remove()依赖和顺从于equals()方法)
	若两个元素的hash值不同,则一定不是同一个元素;
	若两个元素的hash值想通过,则判断equals():
		若equals()相同,则是同一个对象;
		若equals()不同,则不是同一个对象;
		
HashSet不是线程安全的(从哪里看出来的?)
  • TreeSet
TreeSet的特点是可以对其中的元素进行排序。
	一种是放进TreeSet中的元素必须具有比较性,集合的底层结构是二叉树,保证元素唯一性的方法是compareTo()方法返回0。
	另一种情况是元素没有比较性,但是集合有比较性,定义一个类,实现Comparator接口,实现一个比较器
	
树总是平衡的,保证插入、删除、查询的性能O(logN)

HashMap

HashMap,两次哈希,第一次直接调用key的hashcode()方法,第二次在调用一个函数及hash(key.hashcode()),此方法加入高位计算,防止低位不变高位变化时造成的冲突

当HashMap的get()方法返回null时,即可以表示HashMap中没有该键,也可以表示该键对应的值为null,所以HashMap中不能用get()方法来判断是否存在某个键,而应该用containsKey()

参考文档

Java8 HashMap源码分析
java8 HashMap源码 详细研读

TreeMap,有自动排序功能,需实现其排序方法

HashMap 和 HashTable的底层原理

ConcurrentHashMap和HashTable不允许空键空值

HashMap VS TreeMap

HashMap的实现用hash表
TreeMap的实现用红黑树

BlockingQueue

ArrayBlockingQueue: 一个由数组实现的有界阻塞队列,其构造函数必须带一个int参数,来指明其大小。其所含的对象是由FIFO顺序排列的

LinkedBlockingQueue: 大小不一定,若构造函数传入int,则BlockingQueue有大小限制,否则大小为Integer.MAX_VALUE,其所含的对象是由FIFO顺序

PriorityBlockingQueue: 类似于LinkedBlockingQueue,但不是FIFO,而是自然顺序或比较器的顺序

SynchronizedQueue: 对其的操作必须是放和取交替完成的

Arrays.sort()对于基本数据类型用快速排序,对象数组用改进的归并排序

其他

static关键字的作用和用法?

static变量
static方法
static代码块
static类

相关文档

Java中的static关键字解析
java static关键字理解

final关键字的作用和用法?

final变量
final方法
final类

相关文档

浅析Java中的final关键字
深入理解Java中的final关键字

volatile关键字的作用和用法?

volatile关键字的作用

  • 保证变量对所有线程的可见性
  • 禁止指令重排序优化

相关文档

Java并发编程:volatile关键字解析
Java volatile 关键字底层实现原理解析

你可能感兴趣的:(Java)