- 博客(545)
- 资源 (7)
- 问答 (2)
- 收藏
- 关注
原创 幻读、脏读、不可重复读
幻读:同样的条件,第 1 次和第 2 次读出来的记录数不一样。脏读:读取到的不是最新值。不可重复读:相同的读取条件,第二次和第一次的结果不一致。
2022-01-18 13:08:29
314
原创 私有地址和保留地址
A类地址中的私有地址和保留地址:①10.0.0.0到10.255.255.255是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。 ② 127.0.0.0到127.255.255.255是保留地址,用做循环测试用的。B类地址的私有地址和保留地址 ① 172.16.0.0到172.31.255.255是私有地址 ②169.254.0.0到169.254.255.255是保留地址。C类地址中的私有地址:192.168.0.0到192.1...
2022-01-15 12:34:21
1864
转载 Java语言是解释型语言
点此进入https://blog.csdn.net/weixin_43876206/article/details/93330986
2022-01-11 15:54:17
393
转载 常见的关系型数据库和非关系型数据库
一、关系型数据库关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织优点:1、易于维护:都是使用表结构,格式一致;2、使用方便:SQL语言通用,可用于复杂查询;3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。缺点:1、读写性能比较差,尤其是海量数据的高效率读写;2、固定的表结构,灵活度稍欠;3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。二、非关系型数据库非关系型数据库严格上不是一种数据库,应该是一
2022-01-11 11:24:38
4205
原创 finally块是必执行的,即使前面已经执行了return。
·················finallypublic class TestDemo{ public static String output = ""; public static void foo(inti) { try { if (i == 1) { throw new Exception(); } }
2022-01-11 11:20:30
245
原创 深浅克隆&拷贝
浅克隆:Object 中的 clone() 方法在对某个对象克隆时对其仅仅是简单地执行域对域的 copy 对基本数据类型和包装类的克隆是没有问题的。String、Integer 等包装类型在内存中是不可以被改变的对象,所以在使用克隆时可以视为基本类型,只需浅克隆引用即可 如果对一个引用类型进行克隆时只是克隆了它的引用,和原始对象共享对象成员变量 深克隆:在对整个对象浅克隆后,对其引用变量进行克隆,并将其更新到浅克隆对象中去,返回的是一个新对象。public class Stu
2021-12-21 10:18:07
304
原创 事务及隔离级别的简单介绍
一、什么是事务:事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败。二、事务特性(4种):原子性 (atomicity):强调事务的不可分割。一致性 (consistency):事务执行前后的数据的完整性保持一致。隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰。持久性(durability) :事务一旦结束,数据就持久到数据库。三、如果不考虑隔离性引发安全性问题:脏读 :一个事务读到了另一个事务的未提交的数据。不可重复读
2021-12-04 16:07:46
195
原创 备战秋招,LeetCode刷题记录,持续更新。
704. 二分查找 数组默认是从小到大已排好序的。使用双指针法,分别记录数组第一个和最后一个元素(或者下标),便于计算数组中间元素的位置,然后使用中间的那个元素与目标值进行比较。相等直接返回,目标值比中间值大则修改left为mid+1,反之修改right为mid-1。即缩小查找范围。 中间指针 int mid = (left + right) / 2; 这么写其实有⼀个问题,就是数值越界,例如 left 和 right 都是最⼤ int ,这么操作就越界了,在二分法...
2021-12-03 11:27:00
464
原创 JAVA 序列化(创建可复用的 Java 对象)
整体描述:保存(持久化)对象及其状态到内存或者磁盘。Java 平台允许我们在内存中创建可复用的 Java 对象,但一般情况下,只有当 JVM 处于运行时这些对象才可能存在,即,这些对象的生命周期不会比 JVM 的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java 对象序列化就能够帮助我们实现该功能。序列化对象以字节数组保持-静态成员不保存。使用 Java 对象序列化,在保...
2021-12-02 10:18:36
337
原创 集合的线程安全问题
1. 怎么确保一个集合不能被修改?可以使用Collections.unmodifiableCollection(Collectionc)方法来创建一个只读集合,这样改变集合的任何操作都会抛出Java.lang.UnsupportedOperationException异常。示例代码如下:List<String> list = new ArrayList<>(); list. add("x"); Collection<Stri...
2021-12-02 10:03:13
476
原创 ReentrantLock 原理
ReentrantLock 原理可以看出是基于AQS框架实现的。 内容较多,直接看笔记吧。1. 非公平锁实现原理加锁解锁流程NonfairSync 继承自 AQS没有竞争时第一个竞争出现时
2021-11-30 12:04:39
234
原创 AQS原理
ThreadPoolExecutor1. 线程池状态ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量。其中第一位为符号位。 ● 数字上比较,TERMINATED > TIDYING > STOP > SHUTDOWN > RUNNING。因为第一位为符号位,所以RUNNING最小。 ● 这些信息存储在一个原子变量 ctl 中,目的是将线程池状态与线程个...
2021-11-29 21:19:49
797
原创 主线程与守护线程
默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程,只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。例:log.debug("开始运行..."); Thread t1 = new Thread(() -> { log.debug("开始运行..."); sleep(2); log.debug("运...
2021-11-29 07:07:36
1026
原创 异步模式之工作线程
1. 定义让有限的工作线程(Worker Thread)来轮流异步处理无限多的任务。也可以将其归类为分工模式,它的典型实现就是线程池,也体现了经典设计模式中的享元模式。例如,海底捞的服务员(线程),轮流处理每位客人的点餐(任务),如果为每位客人都配一名专属的服务员,那么成本就太高了(对比另一种多线程设计模式:Thread-Per-Message)注意,不同任务类型应该使用不同的线程池,这样能够避免饥饿,并能提升效率例如,如果一个餐馆的工人既要招呼客...
2021-11-27 15:49:14
343
原创 JDK1.8下ThreadPoolExecutor的官方实现
ThreadPoolExecutor1. 线程池状态ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量。其中第一位为符号位。 ● 数字上比较,TERMINATED > TIDYING > STOP > SHUTDOWN > RUNNING。因为第一位为符号位,所以RUNNING最小。 ● 这些信息存储在一个原子变量 ctl 中,目的是将线程池状态与线程个...
2021-11-27 14:49:26
697
原创 自定义线程池
import lombok.extern.slf4j.Slf4j;import sun.misc.Unsafe;import java.util.ArrayDeque;import java.util.Deque;import java.util.HashSet;import java.util.Queue;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;impor.
2021-11-27 09:03:30
383
原创 final 原理
1. 设置 final 变量的原理理解了 volatile 原理,再对比 final 的实现就比较简单了public class TestFinal { final int a = 20;}字节码0: aload_01: invokespecial #1 // Method java/lang/Object."<init>":()V4: aload_05: bipush 207: putfield #2 // Field a:I<-- 写屏障10
2021-11-25 21:29:34
377
原创 共享模式之享元模式
public static Long valueOf(long l) { final int offset = 128; if (l >= -128 && l <= 127) { // will cache return LongCache.cache[(int)l + offset]; } return new Long(l);}注意:Byte, Short, Long...
2021-11-25 21:09:06
875
原创 第六章——共享模型之无锁&无锁实现共享变量的线程安全性&CAS与volatile
有如下需求,保证 account.withdraw 取款方法的线程安全interface Account { // 获取余额 Integer getBalance(); // 取款 void withdraw(Integer amount); /** * 方法内会启动 1000 个线程,每个线程做 -10 元 的操作 * 如果初始余额为 10000 那么正确的结果应当是 0 */ static void demo(Acc
2021-11-25 09:38:15
292
原创 共享模型之内存&习题
balking 模式习题1. 希望 doInit() 方法仅被调用一次,下面的实现是否有问题,为什么? 答:有问题。该类的对象,在多线程环境下会存在问题。比如t1和t2线程并发执行,相继进入init方法,且都读取到initialized值为false之后,执行doInit方法。这样就不满足题目要求。public class TestVolatile { volatile boolean initialized = false; void init() { ...
2021-11-24 16:46:52
287
原创 线程安全的double-checked locking单例模式
使用volatile 修饰Singleton ,保证INSTANCE变量的可见性和有序性。 不使用volatile会导致多线程环境下,由于synchronized代码块内的指令重排,导致线程获得未初始化完的单例。见下图。public final class Singleton { private Singleton() { } private static volatile Singleton INSTANCE = null; publ...
2021-11-24 10:43:25
385
原创 内存屏障&volatile原理&可见性&有序性
● 可见性○ 写屏障(sfence)保证在该屏障之前的,对共享变量的改动,都同步到主存当中○ 而读屏障(lfence)保证在该屏障之后,对共享变量的读取,加载的是主存中最新数据● 有序性○ 写屏障会确保指令重排序时,不会将写屏障之前的代码排在写屏障之后○ 读屏障会确保指令重排序时,不会将读屏障之后的代码排在读屏障之前p...
2021-11-24 09:54:55
687
原创 哲学家就餐问题
问题图示题目解释有五位哲学家,围坐在圆桌旁。● 他们只做两件事,思考和吃饭,思考一会吃口饭,吃完饭后接着思考。● 吃饭时要用两根筷子吃,桌上共有 5 根筷子,每位哲学家左右手边各有一根筷子。● 如果筷子被身边的人拿着,自己就得等待5根筷子对于5个哲学家线程来说是共享资源,需要加锁。不发生死锁的情况是有一个线程成功吃饭思考后,释放两个筷子的锁,然后哲学家再竞争筷子吃饭。发生死锁的情况是5个哲学家各锁住了一根筷子,都无法获...
2021-11-24 09:24:22
575
原创 volatile&synchronized关于对共享变量保护的比较
synchronized可以保护共享变量的原子性、可见性、有序性。因为如果共享变量完全被synchronized保护,那么共享变量在使用过程中不会有原子性、可见性、有序性问题的。但是他不会阻止代码块内的指令重排序。volatile只可以保证可见性和有序性。volatile 修饰的变量,可以禁用指令重排。...
2021-11-24 09:01:55
416
原创 monitor&wait notify&join原理
Monitor 原理Monitor 被翻译为监视器或管程。每个 Java 对象都可以关联一个 Monitor 对象,如果使用 synchronized 给对象上锁(重量级)之后,该对象头的Mark Word 中就被设置指向 Monitor 对象的指针。Monitor 结构如下。 ● 刚开始 Monitor 中 Owner 为 null。 ● 当 Thread-2 执行 synchronized(obj) 就会...
2021-11-22 15:16:28
522
原创 ReentrantLock特征之可重入和可打断
可重入可重入是指同一个线程如果首次获得了这把锁,那么因为它是这把锁的拥有者,因此有权利再次获取这把锁如果是不可重入锁,那么第二次获得锁时,自己也会被锁挡住synchronized可重入举例static final Object obj = new Object();public static void method1() { synchronized( obj ) { // 同步块 A method2(); }...
2021-11-21 19:58:54
947
1
原创 校园邮箱免费激活idea教程
一 准备教育网邮箱并注册JetBrains账户 如果你本身就是在校学生并且你们学校给你注册了edu后缀的邮箱,那么恭喜你,不用费劲去找教育网邮箱了。像我们学校每个人的邮箱是学号+@+学校英文缩写 .edu.cn。如果不是学生的话也没关系,可以借个学生邮箱哈哈哈【或者去万能的某宝,我啥也没说啊,我只是让你们去看看!】。 好了,我们开始注册JetBrains账户。1.去 jetbrains 官网:https://account.jetbrains.com/ ,用校园邮箱注册...
2021-11-21 15:54:34
11316
1
原创 从Java层面理解线程状态转换
Java层面线程有6种状态1. NEW表示新建的线程2. 其中RUNNABLE状态又细分为三种状态。● 运行状态表示线程已经获取了CPU分配的时间片,正在CPU上运行。● 阻塞状态表示线程可能处于IO阻塞。● 可运行状态表示,线程可以由CPU调度,上处理机执行。3. BLOCKED表示阻塞4. WAITING表示等待5. TIMED_WAITING表示有时限的等待6. TERMINATED表示终止态假设有线程 Th...
2021-11-21 15:46:55
157
Java程序员面试资料及简历模版
2022-05-04
微机原理期末复习试卷附详细答案和必背知识点
2022-05-04
Java考试系统,使用了swing、文件IO、反射等JavaSE部分的基础知识。
2020-11-25
反编译的jar包被我修改后如何重新打包?
2022-03-22
Chrome不支持vue文件里的注释如何解决?
2022-02-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅