随笔分类 - Java 基础知识
Java 基础知识
摘要:一、二分查找 二分查找算法又称折半查找算法。 其算法的基本思想是:在有序表中,取中间的记录作为比较关键字,若给定值与中间记录的关键字相等,则查找成功;若给定的值小于中间记录的关键字,则在中间记录的左半区间继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区间继续查找;不断重复这个过程,直到查
阅读全文
摘要:1. 可重入锁 ReentrantLock 和 synchronized 都是可重入锁。 在method1中会调用另外一个synchronized方法method2,此时线程不必重新去申请锁,而是可以直接执行方法method2。如果不具有可重入性,则会造成死锁。 2. 可中断锁 Lock 是可中断锁
阅读全文
摘要:一、什么是线程池? 一个线程池管理一组工作的线程,同时它还包括一个用于放置等待执行任务的任务队列(阻塞队列)。 二、线程池的工作原理 默认情况下,在创建线程池后,线程池中的线程数为0,当任务提交给线程池后处理策略如下: 1. 如果线程池中的数量小于 corePoolSize(核心线程池大小),即使线
阅读全文
摘要:在Java中,有四种方式来实现同步互斥访问:synchronized 、 Lock 、wait() / notify() / notifyAll() 方法和 CAS(硬件CPU同步原语)。 一、synchronized 1. 同步代码块 表示线程在执行的时候会将object 对象上锁。(注意这个对象
阅读全文
摘要:一、HashMap (JDK8)put(K key, V value)底层实现 1. 首先判断这个hashmap是否为空,为空就初始化一个hashmap 2. 根据key 计算hashcode()值,和数组长度-1 进行&(等价于求余), 得到bucket的位置 3. 得到位置后 判断该处的值是否为
阅读全文
摘要:一、什么是内存泄露 内存泄露是指一个不在被程序使用的对象或变量还在内存中占有存储空间。 1. 内存泄露主要有两种情况: (1). 在堆中申请的空间没有释放 (2.) 该对象已经不再使用,却还在内存中保留着 一般垃圾回收机制可以有效的解决第一种情况。 Java内存泄露主要是第二种情况。 在循环中不断创
阅读全文
摘要:1、什么是类加载机制? JVM把class文件加载到内存里面,并对数据进行验证、准备、解析和初始化,最终能够被形成被JVM可以直接使用的Java类型的过程。 生命周期包含:加载,验证,准备,解析,初始化,使用,卸载 7个阶段 加载:将class 文件加载到运行时数据区,方法区中 验证:进行一些安全校
阅读全文
摘要:转自https://www.cnblogs.com/ygj0930/p/6536048.html
阅读全文
摘要:一、概述 GC(Carbage Collection)垃圾收集器,由JVM自动回收已死亡的对象垃圾。 这也是Java与C++等语言的主要区别之一。 二、如何确认对象已死 1. 引用计数算法 引用计数法实现简单,效率较高,在大部分情况下是一个不错的算法。 其原理是:给对象添加一个引用计数器,每当有一个
阅读全文
摘要:一、 引言 new String("hello")这样的创建方式,到底创建了几个String对象? 二、 分析 1. String s1 = "HelloWorld"; 去常量池查找,有则指向该地址,没有则在常量池创建后指向该地址。 常量池:JDK7以后,从方法区,移到了堆中。 2. String
阅读全文
摘要:一、 Java程序执行过程 二、运行时数据区 五个部分:Java栈、本地方法栈、堆、程序计数器和方法区 1. Java栈 也就是常说的虚拟机栈,是线程私有的,虚拟机栈描述的是Java方法执行的内存模型:每个方法执行时, 都会创建一个栈帧(每一个方法从调用到执行完成,就对应一个栈帧在虚拟机栈中的入栈和
阅读全文

浙公网安备 33010602011771号