![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java 基础
文章平均质量分 79
fangzhan666
这个作者很懒,什么都没留下…
展开
-
《Java并发编程实战》课程学习笔记(十七)
【代码】《Java并发编程实战》课程学习笔记(十七)原创 2023-07-22 16:48:20 · 101 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(十六)
【代码】《Java并发编程实战》课程学习笔记(十六)原创 2023-07-22 16:28:43 · 65 阅读 · 0 评论 -
《Java 核心技术面试》课程笔记(十三)
谈谈接口和抽象类有什么区别?典型回答接口和抽象类是 Java 面向对象设计的两个基础机制。接口接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到 API 定义和实现分离的目的。接口,不能实例化;不能包含任何非常量成员,任何 field 都是隐含着 public static final 的意义;同时,没有非静态方法实现,也就是说要么是抽象方法,要么是静态方法。抽象类抽象类是不能实例化的类,用 abstract 关键字修饰 class,其目的主要是代码重用。除了不能实例化原创 2023-06-09 00:09:30 · 305 阅读 · 0 评论 -
《Java 核心技术面试》课程笔记(十二)
Java 有几种文件拷贝方式?哪一种最高效?典型回答Java 有多种比较典型的文件拷贝实现方式,比如:利用java.io 类库,直接为源文件构建一个 FileInputStream 读取,然后再为目标文件构建一个 FileOutputStream,完成写入工作。或者,利用 java.nio 类库提供的 transferTo 或 transferFrom 方法实现。总体上来说,NIO transferTo/From 的方式可能更快,因为它更能利用现代操作系统底层机制,避免不必要拷贝和上下文切换。考原创 2023-06-08 23:41:03 · 271 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(十五)
Executor 与线程池:如何创建正确的线程池?线程池是一种生产者-消费者模式线程是一个重量级的对象,应该避免频繁创建和销毁。那如何避免呢?应对方案就是线程池。目前业界线程池的设计,普遍采用的都是生产者-消费者模式。线程池的使用方是生产者,线程池本身是消费者。如何使用 Java 中的线程池Java 并发包里提供的线程池,最核心的是 ThreadPoolExecutor,它强调的是 Executor,而不是一般意义上的池化资源。ThreadPoolExecutor 的构造函数非常复杂,这个原创 2023-06-06 13:36:11 · 295 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(十四)
unsafe.getAndAddLong() 方法首先会在内存中读取共享变量的值,之后循环调用 compareAndSwapLong() 方法来尝试设置共享变量的值,直到成功为止。compareAndSwapLong() 是⼀个 native 方法,只有当内存中共享变量的值等于 expected 时,才会将共享变量的值更新为 x,并且返回 true;否则返回 fasle。compareAndSwapLong 的语义和 CAS 指令的语义的差别仅仅是返回值不同而已。Java 提供的原子类里面 CAS原创 2023-06-06 02:22:15 · 288 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(十三)
Java 并发包里阻塞队列都用 Blocking 关键字标识,单端队列使用 Queue 标识,双端队列使用 Deque 标识。原创 2023-06-05 20:24:31 · 609 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(十二)
【代码】《Java并发编程实战》课程笔记(十二)原创 2023-06-05 19:17:14 · 505 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(十一)
StampedLock:有没有比读写锁更快的锁?原创 2023-06-05 18:11:01 · 413 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(十)
读写锁,并不是 Java 语言特有的,而是一个广为使用的通用技术原创 2023-06-05 12:49:33 · 466 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(九)
【代码】《Java并发编程实战》课程笔记(九)原创 2023-06-05 11:28:13 · 496 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(八)
所谓可重入锁,顾名思义,指的是线程可以重复获取同一把锁。原创 2023-06-01 14:13:54 · 426 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(七)
Java 线程的生命周期原创 2023-06-01 09:52:28 · 451 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(六)
管程:并发编程的万能钥匙原创 2023-05-31 14:09:52 · 558 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(五)
安全性、活跃性以及性能问题原创 2023-05-31 13:54:54 · 582 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(四)
Java 编译器会在 synchronized 修饰的方法或代码块前后自动加上加锁 lock() 和解锁 unlock()。原创 2023-05-31 02:15:18 · 750 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(三)
Java 内存模型:看 Java 如何解决可见性和有序性问题原创 2023-05-31 01:14:33 · 350 阅读 · 0 评论 -
《Java 核心技术卷一:基础知识》读书笔记(二)
【代码】《Java 核心技术卷一:基础知识》学习笔记(二)原创 2023-05-28 12:16:29 · 820 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(二)
可见性、原子性和有序性问题:并发编程 Bug 的源头原创 2023-05-26 00:51:00 · 613 阅读 · 0 评论 -
《Java并发编程实战》课程学习笔记(一)
并发领域的全景图并发编程的三个核心问题并发编程可以总结为三个核心问题:分工、同步、互斥。分工指的是如何高效地拆解任务并分配给线程;Java SDK 并发包里的 Executor、Fork/Join、Future 本质上都是⼀种分工方法。除此之外,并发编程领域还总结了一些设计模式,基本上都是和分工方法相关的,例如生产者-消费者、Thread-Per-Message、Worker Thread 模式等都是用来指导你如何分工的。同步指的是线程之间如何协作;本质上就是一个线程执行完了一个任原创 2023-05-25 13:52:55 · 819 阅读 · 0 评论 -
《Java 核心技术面试》课程笔记(十一)
Java 提供了哪些 IO 方式?典型回答Java IO 基于不同的 IO 抽象模型和交互方式,可以分为:BIO,传统的 java.io 包,它基于流模型实现。提供了我们最熟知的⼀些 IO 功能,比如 File 抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会⼀直阻塞在那里,它们之间的调用是可靠的线性顺序。java.net 提供的部分网络 API,比如 Socket、ServerSocket、HttpURLConnecti原创 2023-05-21 18:20:25 · 479 阅读 · 0 评论 -
《Java 核心技术面试》课程笔记(十)
如何保证集合是线程安全的?典型回答Java 提供了不同层⾯的线程安全支持。在传统集合框架内部,除了 Hashtable 等同步容器,还提供了所谓的同步包装器(Synchronized Wrapper),我们可以调用 Collections 工具类提供的包装方法,来获取⼀个同步的包装容器(如 Collections.synchronizedMap),但是它们都是利用非常粗粒度的同步方式,在高并发情况下,性能比较低下。普遍的选择是利用并发包提供的线程安全容器类:各种并发容器,比如 Concurr原创 2023-05-21 15:49:33 · 586 阅读 · 0 评论 -
《Java 核心技术面试》课程笔记(九)
对比 Hashtable、HashMap、TreeMap 有什么不同?典型回答Hashtable、HashMap、TreeMap 都是最常见的⼀些 Map 实现,是以键值对的形式存储和操作数据的容器类型。Hashtable 是早期 Java 类库提供的⼀个哈希表实现,本身是同步的,不支持 null 键和值,由于同步导致的性能开销,所以已经很少被推荐使用。HashMap 是应用更加广泛的哈希表实现,行为上大致上与 HashTable 一致,主要区别在于 HashMap 不是同步的,支持 null 键原创 2023-05-19 13:06:11 · 262 阅读 · 0 评论 -
《Java 核心技术卷一:基础知识》读书笔记(一)
Java 语言概述原创 2023-05-11 13:52:01 · 236 阅读 · 0 评论 -
趣谈 Linux 操作系统学习笔记(四)
学会几个系统调用进程管理Linux 操作系统首先需要创建进程。创建进程的系统调用叫 fork。在 Linux 里,要创建一个新的进程,需要一个老的进程调用 fork 来实现,其中老的进程叫作父进程(Parent Process),新的进程叫作子进程(Child Process)。当父进程调用 fork 创建进程的时候,子进程将各个子系统为父进程创建的数据结构也全部拷贝了一份,甚至连程序代码也是拷贝过来的。对于 fork 系统调用的返回值,如果当前进程是子进程,就返回 0;如果当前进程是父进原创 2022-02-11 10:31:50 · 478 阅读 · 0 评论 -
趣谈 Linux 操作系统学习笔记(三)
快速上手几个 Linux 命令Linux 操作系统有很多功能,我们有很多种方式可以使用这些功能,其中最简单和直接的方式就是命令行(Command Line)。用户与密码当我们打开一个新系统的时候,第一件要做的事就是登录。系统默认有一个 Administrator 用户,也就是系统管理员,它的权限很大,可以在这个系统上干任何事。Linux 上面也有一个类似的用户,我们叫 Root。同样,它也具有最高的操作权限。接下来,你需要输入密码了。对于 Windows 来讲,在你安装操作系统原创 2022-02-10 11:49:40 · 420 阅读 · 0 评论 -
《Java 核心技术面试》课程笔记(八)
对比 Vector、ArrayList、LinkedList 有何区别?典型回答这三者都是实现集合框架中的 List,也就是所谓的有序集合,因此具体功能也比较近似,比如都提供按照位置进行定位、添加或者删除的操作,都提供迭代器以遍历其内容等。但因为具体的设计区别,在行为、性能、线程安全等方面,表现又有很大不同。Vector 是 Java 早期提供的线程安全的动态数组。如果不需要线程安全,并不建议选择,毕竟同步是有额外开销的。Vector 内部是使用对象数组来保存数据,可以根据需要自动的增加容量,原创 2021-12-24 10:25:56 · 60 阅读 · 0 评论 -
《Java 核心技术面试》课程笔记(七)
int 和 Integer 有什么区别?典型回答Java 虽然号称是面向对象的语言,但是原始数据类型仍然是重要的组成元素,所以在面试中,经常考察原始数据类型和包装类等 Java 语言特性。int 是我们常说的整型数字,是 Java 的 8 个原始数据类型(Primitive Types,boolean、byte 、short、char、int、float、double、long)之一。Java 语言虽然号称一切都是对象,但原始数据类型是例外。Integer 是 int 对应的包装类,它有一个 i原创 2021-12-23 14:12:15 · 72 阅读 · 0 评论 -
《Java 核心技术面试》课程笔记(六)
谈谈 Java 反射机制,动态代理是基于什么原理?编程语言通常有各种不同的分类角度,动态类型和静态类型就是其中一种分类角度,简单区分就是语言类型信息是在运行时检查,还是编译期检查。与其近似的还有一个对比,就是所谓强类型和弱类型,就是不同类型变量赋值时,是否需要显式地(强制)进行类型转换。那么,如何分类 Java 语言呢?通常认为,Java 是静态的强类型语言,但是因为提供了类似反射等机制,也具备了部分动态类型语言的能力。典型回答反射机制是 Java 语言提供的一种基础功能,赋予程序在运行时自原创 2021-12-21 11:02:34 · 66 阅读 · 0 评论 -
《Java 核心技术面试》课程笔记(五)
String、StringBuffer、StringBuilder 有什么区别?典型回答String 是 Java 语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑。它是典型的 Immutable 类,被声明成为 final class,所有属性也都是 final 的,类似拼接、裁剪字符串等动作,都会产生新的 String 对象。StringBuffer 是为解决上面提到拼接产生太多中间对象的问题而提供的一个类。我们可以用 append 或者 add 方法,把字符串添加到已有序列的原创 2021-12-17 10:07:25 · 78 阅读 · 0 评论 -
《Java 核心技术面试》课程笔记(四)
强引用、软引用、弱引用、幻象引用有什么区别?典型回答不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。所谓强引用(“Strong” Reference),就是我们最常见的普通对象引用。只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为 null,就是可以被垃圾收集的了,当然具体回收时机还是要看垃圾收集策略。软引用(SoftR原创 2021-12-16 16:02:00 · 321 阅读 · 0 评论 -
《Java 核心技术面试》课程笔记(三)
谈谈 final、finally、 finalize 有什么不同?典型回答final 可以用来修饰类、方法、变量,分别有不同的意义,final 修饰的 class 代表不可以继承扩展,final 的变量是不可以修改的,而 final 的方法也是不可以重写的(override)。finally 则是 Java 保证重点代码一定要被执行的一种机制。我们可以使用 try-finally 或者 try-catch-finally 来进行类似关闭 JDBC 连接、保证 unlock 锁等动作。finaliz原创 2021-12-16 12:05:13 · 175 阅读 · 0 评论 -
《Java 核心技术面试》课程笔记(二)
Exception 和 Error 有什么区别?Java 语言在设计之初就提供了相对完善的异常处理机制,这也是 Java 得以大行其道的原因之一,因为这种机制大大降低了编写和维护可靠程序的门槛。如今,异常处理机制已经成为现代编程语言的标配。典型回答Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。Exception 和 Error 体现了原创 2021-12-15 15:14:56 · 66 阅读 · 0 评论 -
《Java 核心技术面试》课程笔记(一)
以面试题为切入点,有效提升 Java 内功应聘初级、中级 Java 工程师,通常只要求扎实的 Java 和计算机科学基础,掌握主流开源框架的使用。Java 高级工程师或者技术专家,则往往全面考察 Java IO/NIO、并发、虚拟机等,不仅仅是了解,更要求对底层源代码层面的掌握,并对分布式、安全、性能等领域能力有进一步的要求。有些面试者确实是认真努力工作,但坦白说表现出的能力水平却不足以通过面试,通常是两方面原因:知其然不知其所以然”。做了多年技术,开发了很多业务应用,但似乎并未思考过种种原创 2021-12-14 11:47:29 · 831 阅读 · 0 评论 -
读书笔记:Java 编程的逻辑(四)
面向对象第4章 类的继承计算机程序经常使用类之间的继承关系来表示对象之间的分类关系。在继承关系中,有父类和子类。父类也叫基类,子类也叫派生类。父类、子类是相对的,一个类 B 可能是类 A 的子类,但又是类 C 的父类。之所以叫继承,是因为子类继承了父类的属性和行为,父类有的属性和行为子类都有。但子类可以增加子类特有的属性和行为,某些父类有的行为,子类的实现方式可能与父类也不完全一样。使用继承一方面可以复用代码,公共的属性和行为可以放到父类中,而子类只需要关注子类特有的就可以了,另一方面,原创 2021-10-29 18:27:39 · 93 阅读 · 0 评论 -
读书笔记:Java 编程的逻辑(三)
面向对象第3章 类的基础Java定义了 8 种基本数据类型:4 种整型 byte、short、int、long,两种浮点类型 foat、double,一种真假类型 boolean,一种字符类型 char。其他类型的数据都用类这个概念表达。...原创 2021-10-08 17:39:04 · 76 阅读 · 0 评论 -
读书笔记:Java 编程的逻辑(二)
编程基础与二进制第2章 理解数据背后的二进制原创 2021-09-26 11:49:27 · 69 阅读 · 0 评论 -
读书笔记:Java 编程的逻辑(一)
编程基础与二进制第1章 编程基础(一)所谓程序,基本上就是告诉计算机要操作的数据和执行的指令序列,即对什么数据做什么操作。1.1 数据类型和变量数据类型用于对数据归类,以便于理解和操作。对 Java 语言而言,有如下基本数据类型。整数类型:有 4 种整型 byte/short/int/long,分别有不同的取值范围;小数类型:有两种类型 foat/double,有不同的取值范围和精度;字符类型:char,表示单个字符;真假类型:boolean,表示真假。基本数据类型都有对应的原创 2021-09-23 15:49:47 · 186 阅读 · 1 评论