自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 每日一问:集合元素如何保证不变性

HashMap<String, String> map = new HashMap<>(); map.put("1","2"); Map<String, String> stringMap = Collections.unmodifiableMap(map); System.out.println(stringMap.get("1")); stringMap.put("1","3");...

2022-08-15 15:09:54 147 1

原创 变量的线程安全分析

1.成员变量和静态变量是否线程安全? 如果它们没有共享,则线程安全 如果它们被共享了,根据它们的状态是否能够改变,又分两种情况 如果只有读操作,则线程安全 如果有读写操作,则这段代码是临界区,需要考虑线程安全 2.局部变量是否线程安全? 局部变量是线程安全的 但局部变量引用的对象则未必 如果该对象没有逃离方法的作用...

2022-03-01 11:40:54 141

原创 什么是守护线程?

默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。守护线程:只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。 比如:垃圾回收器线程就是一种守护线程....

2022-02-28 15:59:14 270

原创 Java的实参值如何传入方法呢?

Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本传入方法内,而参数本身不受影响。 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参...

2022-02-20 20:33:46 1580

原创 什么是字节码?采用字节码的好处是什么?

在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以, Java 程序运行时相对来说还是高效的(不过,和 C++,Rust,Go 等语言还是有一定差距的),而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。...

2022-02-19 21:10:11 529

原创 StringBuffer经典面试题

@Test public void test(){ String str = null; StringBuffer sb = new StringBuffer(); sb.append(str); System.out.println(sb.length()); System.out.println(sb); StringBuffer sb1 = new StringBuffer(str); ...

2022-01-05 15:04:54 895

原创 单链表的反转

链表 1>2>3>4 反转之后:4>3>2>1单链表的反转使用递归的思想就能轻松解决,使用递归完成反转,递归反转其实就是从原链表的第一个存数据的结点开始,依次递归调用反转每一个结点,直到把最后一个结点反转完毕,整个链表就反转完毕。递归次数 当前节点 下一节点 操作 返回值 第一次 1 2 Node(2).next = Node(1) Node(1).next = null ...

2022-01-04 16:02:27 186

原创 排序算法的稳定性

数组中有若干元素,其中A元素和B元素相等,并且A元素在B元素前面,如果使用某种排序算法排序后,能够保证A元素依然在B元素的前面,可以说这个该算法是稳定的。常见排序算法的稳定性: 1.冒泡排序: 只有当arr[i]>arr[i+1]的时候,才会交换元素的位置,而相等的时候并不交换位置,所以冒泡排序是一种稳定排序算法。 2.选择排序: 选择排序是给每个位置选择当前元素最小的,例如有数据{5(1),8 ,5(2), 2, 9 }...

2022-01-01 13:49:53 936

原创 排序算法之插入排序

排序原理: 1.把所有的元素分为两组,已经排序的和未排序的; 2.找到未排序的组中的第一个元素,向已经排序的组中进行插入; 3.倒叙遍历已经排序的元素,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,那么就把待插入元素放到这个位置,其他的元素向后移动一位; public static int[] sort(int a[]){ for (int i = 1; i < a.length...

2021-12-30 13:37:12 214

原创 排序算法之选择排序

排序原理: 1.每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较, 如果当前索引处的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引。2.交换第一个索引处和最小值所在的索引处的值。// 选择排序 public static int[] sort(int a[]){ for (int i = 0; i < a.length - 1 ; i++){ ...

2021-12-29 18:02:06 135

原创 排序算法之冒泡排序

排序原理: 1. 比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置。 2. 对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大值。 int a[] = {1,8,3,2,7}比较轮次 a[0] a[1] a[2] a[3] a[4] 每轮相邻元素比较的次数 数组初始状态 1 8 3 2 7 - 第一轮 1 3...

2021-12-29 17:01:30 52

原创 jdk线程池

1.状态表示: ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量状态名 高 3 位 接收新任 务 处理阻塞队列任 务 说明 RUNNING 111 是 是 初始状态 SHUTDOWN 000 否 是 不会接收新任务,但会处理阻塞队列剩余任务...

2021-12-24 17:02:57 179

原创 不可变类之保护性拷贝

保护性拷贝:在对资源进行操作时,不对操作资源本身进行修改,而是对资源内容进行复制,通过创建副本对象来避免共享安全问题. 以java中String对象为例: 不可变类条件:类、类中所有属性都是 final 的,保证了属性是只读的,不能修改,保证了该类中的方法不能被覆盖,防止子类无意间破坏不可变性.String类中如何保证通过保护性拷贝实现不可变的? 以substring方法为例(其他操作原理相同): public Strin...

2021-12-23 15:41:46 374

原创 解决CAS中ABA问题

ABA:当线程1要将A->C,但是其他线程在线程1执行过程中将A->B,然后又将B->A,这时候线程1cas时会成功执行,但是无法判断A是已经被改过的.解决: AtomicStampedReference通过这个原子类,使用版本号的方式解决ABA问题.static AtomicStampedReference<String> ref = new AtomicStampedReference<>("A", 0);public static voi...

2021-12-10 12:11:10 815

原创 synchronized和volatile对比

1.volatile和synchronized 语句块都可以保证变量的可见性。可见性:也就是当其他线程修改了共享变量,当线程执行读操作时都能拿到最新的变量内容(也就是从主存中拿,不会从工作内存中拿).这里的工作内存指的是JVM编译器会自身优化,JIT 编译器会将成员变量的值缓存至自己工作内存中的高速缓存中,减少对主存中变量的访问,提高效率. 举个例子:static boolean run = true; public static void main(String[] args...

2021-12-08 18:14:19 1716

原创 彻底搞懂interrupt(),isInterrupted(),interrupted()

1.interrupt()表示打断一个线程.interrupt():如果被打断线程正在 sleep,wait,join 会导致被打断 的线程抛出 InterruptedException,并清除打断标记,打断标记为false ;如果打断的正常运行的线程,则会设置打断标记 为true 1.1当打断sleep的线程: public static void main(String[] args) { Object object = new Obj...

2021-12-07 17:28:59 912

原创 什么是线程上下文切换(Thread Context Switch)

通俗的讲就是:cpu 不再执行当前线程的代码,转而执行另一个线程的代码 : java中常见的场景:1.线程的 cpu 时间片用完 2. 垃圾回收 3.有更高优先级的线程需要运行 4.线程自己调用了 sleep、yield、wait、join、park、synchronized、lock 等方法...

2021-12-07 16:39:14 262

原创 sleep(long n) 和 wait(long n) 的区别 :

1) sleep 是 Thread类中的方法,而 wait 是 Object 类中的方法,两者的定义位置不同. sleep:wait:2) sleep 不需要强制和 synchronized 配合使用,但 wait 需要 和 synchronized 一起用。 直接调用wait方法就会报非法状态异常,所以说wait必需搭配"锁"进行使用.只有当当前线程拿到了对象锁之后才能调用wait方法3) sleep 在睡眠的同时,不会释放对象锁的,但 wait 在等...

2021-12-06 11:57:28 259

原创 mysql高级

一.mysql逻辑架构: 1.连接层最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。2.服务层第二层架构主要完成大多少的核心服务功能,如SQL接口,并完成缓...

2021-10-19 19:25:01 61

原创 jvm字节码指令

1.基本概述 Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的结构,所以大多数的指令都不包含操作数,只有一个操作码。 由于限制了Java虚拟机操作码的长度为一个字节(即0~255),这意味着指令集的操作码总数不可能...

2021-10-12 11:35:38 217

原创 jvm字节码结构解析

1.概述: 字节码文件里是什么? 源代码经过编译器编译之后便会生成一个字节码文件,字节码是一种二进制的类文件,它的内容是JVM的指令,而不像C、C++经由编译器直接生成机器码。 什么是字节码指令(bytecode)? Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码(opcode)以及跟随其后 的零至多个代表此操作所需参数的操作数(operand)所构成。虚拟机中许多指令并不包含操作数,只有一个操作码。2. 前端...

2021-10-10 13:22:58 177

原创 jvm垃圾回收器

1.

2021-09-27 14:39:19 194

原创 jvm垃圾回收概述

1.System.gc()理解 在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显示触发Full GC, 而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(也就是说调用这个方法不确定会进行垃圾回收,只是提醒jvm垃圾回收器gc).如果同时使用System.runFinalization();则一定会执行gc.2.内存溢出和内存泄漏 OOM:没有空闲内存,并且垃圾收集器也无法提供更多的内存.内存...

2021-09-25 12:07:01 103

原创 jvm 垃圾回收算法

什么是垃圾? 垃圾是指在运行程序中没有任何指针指向的对象,即这个对象就是要被回收的对象.

2021-09-24 16:46:42 76

原创 jvm类加载器

jvm支持两种类型加载器,引导类加载器和自定义类加载器。虚拟机自带的加载器有三种:1.启动类加载器(引导类加载器)c/c++实现的,嵌套在JVM内部,用来加载java得核心类库,用于提供jvm自身语言的一些类,没有父类加载器2. 拓展类加载器java语言编写的,由sun.misc.launcher$ExtClassLoader实现。派生于ClassLoader类,它的父加载器实启动类加载...

2021-09-01 22:31:14 286

原创 JVM类加载系统过程解析

类加载过程流程:

2021-08-31 20:38:42 166

原创 MyBatis_Plus使用ActiveRecord模式delete方法注意

1.在AR模式CRUD操作时: delete方法的使用:当删除数据库表中不存在的数据时结果依然是true. 此时数据表中没有id为12的数据: 执行: 当执行删除id为12的数据时: 控制台返回结果:true,影响的操作条数为0. 结论:这是由于在AR设计思想中删除不存在的数据在逻辑上是成功的,所以当没有数据时删除执行的结果也是true。 ...

2021-08-21 14:52:52 86

原创 MP之insert()和insertAllColumn()方法

实体类Employee: 1.当使用insert()时,执行方法会先进行属性的判断,根据实体类进行非空判断,只有非空的属性所对应的的字段才会在SQL语句中执行. 情况一: 在数据库表中字段没有要求非空的情况下: 控制台打印SQL: SQL语句也只对应非空的属性: 表中插入字段: 情况二: 如果数据表结构设置非空,当插入空的字段时就直接回会报错:' xxx' doesn't have .........

2021-08-20 15:50:03 1004

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除