自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

行为产生结果

人生从来都是现场直播,没有办法重来,珍惜每一天!

  • 博客(49)
  • 收藏
  • 关注

原创 【孙哥说Spring5】第四章 Spring中的事务属性(Transaction Attribute)

(1)隔离属性(isolation)

2023-10-29 10:24:00 432 1

原创 【孙哥说Spring5】第三章 Spring的事务处理

【代码】【孙哥说Spring5】Spring的事务处理。

2023-10-29 09:39:43 228

原创 【Java面试丨消息中间件】Kafka

使用kafka在消息的收发过程都有可能会出现消息丢失(1)生产者发送消息到broker丢失(2)消息在broker中存储丢失(3)消费者从broker接收消息丢失问题原因(1)一个topic中的数据可能存储在不同的分区中,每个分区都有一个按照顺序的存储偏移量,如果消费者关联了多个分区,则不能保证消费的顺序性解决方案(1)发送消息时,指定分区号,往同一个分区中存储消息(2)发送消息时,按照相同的业务设置相同的key集群模式分区备份机制kafka文件存储机制数据清理机制。

2023-07-30 10:28:27 1090

原创 【Java面试丨企业场景】常见技术场景

单点登录(Single Sign On,SSO):只需要登录一次,就可以访问所有信任的应用系统后台的管理系统更加注重权限控制,最常见的是RBAC模型来实现RBAC(Role-Based Access Control):基于角色的访问控制具体实现(1)5张表(用户表、角色表、权限表、用户-角色中间表、角色-权限中间表)(2)7张表(用户表、角色表、权限表、菜单表、用户-角色中间表、角色-权限中间表、权限-菜单中间表)

2023-07-29 20:06:37 1171

原创 【Java面试丨并发编程】线程中并发安全

CAS(Compare And Swap,比较再交换):体现了一种乐观锁的思想,在无锁的情况下,能够保证线程操作共享数据的原子性在JUC(java.util.concurrent)包下实现的很多类都用到了CAS操作(1)AbstractQueuedSynchronizer(AQS框架)(2)AtomicXXX类(原子类)在操作共享变量的时候使用的是自旋锁,效率上更高一些CAS的底层是调用Unsafe类中的方法,都是操作系统提供的,其他语言实现。

2023-07-17 21:57:33 254

原创 【Java面试丨并发编程】线程的基础知识

一、进程与线程的区别1. 进程程序是由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存在指令运行过程中还需要用到磁盘、网络等设备进程就是用来加载指令、管理内存、管理IO的当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程2. 线程一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给CPU执行一个进程之内可以分为一到多个线程3. 二者区别进程是正在运行程序的实例,进程中包含了线程,每个线程执行不同的任务不同

2023-07-13 22:02:35 504

原创 【Redis基础】快速入门

(2)解压redis-6.2.6.tar.gz,进入解压后目录,运行编译命令,如果没有报错则安装成功。(1)将redis-6.2.6.tar.gz包,上传到/usr/local/src目录下。(1)Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖。(4)该目录已经默认配置到环境变量中,可以在任意目录下运行这些命令。(3)默认的安装路径:/usr/local/bin目录下。上传Redis安装包并解压、安装。(3)编程客户端【后续实现】(2)图形化桌面客户端。

2023-07-11 21:48:28 513 1

原创 【JUC并发编程】读写锁:ReadWriteLock

**i <= 5;i ++) {// 存入 public void put(String key , Object value) {System . out . println("线程" + Thread . currentThread() . getName() + ":写入 => " + key);

2023-07-09 11:47:30 146

原创 【JUC并发编程】三大辅助类:CountDownLatch、CyclicBarrier、Semaphore《必会》

**// 减法计数器,倒计时,一共6个线程,等待这个6个线程执行完毕 CountDownLatch countDownLatch = new CountDownLatch(6);i

2023-07-04 22:12:27 153

原创 【JUC并发编程】Callable接口创建线程

与继承Thread类和实现Runnable接口两种创建线程方式的区别① Callable接口可以有返回值② Callable接口可以抛出异常③ 执行方法不同,call()方法和run()方法。

2023-07-04 21:35:09 324

原创 【JUC并发编程】集合类安全问题

上面代码会报错并发修改异常“java.util.ConcurrentModificationException”上面代码会报错并发修改异常“java.util.ConcurrentModificationException”多线程调用list时,读取的时候,是固定的,写入的时候,避免覆盖,造成数据问题(类似读写分离)写入时复制(简称:COW)是计算机领域的一种优化策略。将普通的ArrayList类转换为安全的集合类。将普通的HashSet类转换为安全的集合类。

2023-07-04 12:03:37 711

原创 【JUC并发编程】八锁现象

【代码】【JUC并发编程】八锁现象。

2023-07-02 17:23:08 63

原创 【JUC并发编程】生产者和消费者问题(Synchronized和Lock两种实现)

线程之间的通信问题:生产者和消费者问题!线程之间的等待唤醒、通知唤醒线程之间交替执行,线程A、线程B操作同一个变量num=0线程A:num+1线程B:num-1总结① 判断线程是否需要等待② 业务逻辑③ 通知唤醒。

2023-07-02 10:28:34 116

原创 【JUC并发编程】Synchronized锁和Lock锁

企业开发中,尽量避免下面线程创建方式,这种方式耦合度高。① 公平锁:十分公平,保证线程先来后到。Lock接口的三个常用实现类。

2023-07-02 09:13:43 62

原创 【JUC并发编程】JUC概述

java.util包下面三个子包concurrent、concurrent.atomic、locks。

2023-07-01 10:42:03 90

原创 【Java进阶】多线程&高并发(四)<线程同步>【三】

一、轻量级同步机制:volatile关键字1. volatile的作用volatile可以保证变量在多个线程之间可见2. volatile与synchronized比较volatile关键字是线程同步的轻量级实现,其性能要比synchronized好volatile只能修饰变量,而synchronized修饰的是方法或者代码块随着JDK新版本的发布,synchronized的执行效率也有较大提升,在开发中使用synchronized的比率很大volatile变量不会发生阻塞,而sync

2023-06-24 17:43:09 79

原创 【Java进阶】多线程&高并发(四)<线程同步>【二】

Java中的每个对象都有一个与之关联的内部锁(Intrinsic Lock)这种锁也称为监视器(Monitor),这种内部锁是一种排他锁,可以保障原子性、可见性和有序性内部锁是通过synchronized关键字实现的,synchronized关键字可以修饰代码块和方法① 修饰代码块② 修饰实例方法也称为同步实例方法③ 修饰静态方法也称为同步静态方法。

2023-06-22 22:20:15 66

原创 【Java进阶】多线程&高并发(四)<线程同步>【一】

线程同步机制是一套用于协调线程之间的数据访问的机制。该机制可以保障线程的安全Java平台提供的线程同步机制包括:锁、volatile关键字、final关键字、static关键字以及相关的API(比如:Object.wait()/Object.notify()方法)线程安全问题的产生前提是多个线程并发访问共享数据将多个线程对共享数据的并发访问转换为串行访问,即一个共享数据一次只能被一个线程访问。锁就是复用这个思路来保障线程的安全锁(Lock)可以理解为对共享数据进行保护的一个许可证。

2023-06-19 21:07:36 94

原创 【Java进阶】多线程&高并发(三)<Java内存模型>

一、Java内存模型的整体每个线程都有独立的栈空间每个线程都可以访问堆内存计算机的CPU不直接从主内存中读取数据,CPU读取数据时,先把主内存的数据读到Cache缓存中,把Cache中的数据读到Register寄存器中JVM中的共享数据可能会被分配到Register寄存器中,每个CPU都有自己的Register寄存器,一个CPU不能读取到其他CPU的寄存器中的内容。如果两个线程分别运行在不同的处理器(CPU)上,而这个共享数据被分配到寄存器中,会产生可见性问题即使JVM中的共享数据分配到主内存

2023-06-19 20:15:38 76

原创 【Java进阶】多线程&高并发(二)<线程安全问题>

非线程安全主要是指多个线程对同一个对象的实例变量进行操作时,会出现值被更改,但是值不同步的问题原子性、可见性和有序性原子(Atomic)就是不可分割的意思原子操作的不可分割有两层的含义① 访问(读/写)某个共享变量的操作从其他线程来看,该操作要么已经执行完毕,要么尚未发生,即其他线程是看不到当前操作的中间结果②访问同一组共享变量的原子操作是不能够交叉的。比如:现实生活中从ATM机取款,对于用户来说,要么操作成功,用户拿到钱,余额减少,增加一条交易记录;要么没拿到钱,相当于取款操作没有发生。

2023-06-17 10:43:40 190

原创 【Java进阶】多线程&高并发(一)<线程概述>

在Java中,创建一个线程就是创建一个Thread类(子类)的对象(实例)Thread类有两个常用的构造方法:Thread()和Thread(Runnable),对应的创建线程的两种方式,这两种创建线程的方式没有本质的区别① 定义Thread类的子类② 定义一个Runnable接口的实现类。

2023-06-14 20:29:33 1539

原创 【Java进阶】NIO(三)<Channel>

Channel是一种新的IO的访问方式,用于在字节缓冲区与通道另一侧的实体(可以是文件,也可以是Socket)之间进行传输数据Channel可以双向读写数据,也可以实现异步读写程序不能直接访问Channel,Channel只能与Buffer缓冲区进行交互,即把通道中的数据读到Buffer缓冲区中,程序从缓冲区中读取数据;在写操作时,程序把数据写入Buffer缓冲区中,再把缓冲区的数据写入到Channel中Scatter(发散)、Gather(聚焦)是通道提供的一个重要功能(有时也称为矢量IO)

2023-06-10 20:43:36 719

原创 【Java进阶】NIO(二)<Buffer>

Buffer缓冲区实际上就是一个数组,把数组的内容和信息包装成一个Buffer对象,它提供了一组访问这些信息的方法在NIO中关键的Buffer① ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer,这些Buffer覆盖了能够通过I/O发送的所有基本类型byte、char、double、float、int、long、short等② 实际上使用较多的是ByteBuffer、CharBuffer。

2023-06-09 21:25:34 1004

原创 【Java进阶】NIO(一)<NIO概述>

在JDK 1.4中引入了NIO,可以最大限度的满足Java程序I/O的需求java.nio包:定义了各种与Buffer相关的类包:包含与Channel和Selector相关的类型包:与字符集相关的类。

2023-06-09 19:39:10 48

原创 【MySQL进阶】InnoDB引擎(一)<内存结构>

一、整体架构MySQL 5.5版本开始,默认使用InnoDB存储引擎它擅长事务处理,具有崩溃恢复特性,在日常开发中使用最为广泛二、内存结构1. Buffer Pool缓冲池是主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),然后再以一定的频率刷新到磁盘,从而**减少磁盘I/O,**加快处理速度缓冲池以页为单位,底层采用链表数据结构管理页根据页的状态,将页分为三种类型① free page:空

2023-06-05 22:06:30 76

原创 【MySQL进阶】InnoDB引擎(一)<逻辑存储结构>

表空间(ibd文件),一个MySQL实例可以对应多个表空间,用于存储记录、索引等核心数据信息。

2023-06-05 21:24:16 42

原创 【MySQL进阶】锁(三)<表级锁>

表级锁:每次操作锁住整张表,锁的粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中对于表级锁,主要分为以下三类① 表锁② 元数据锁(meta data lock,MDL)③ 意向锁。

2023-06-04 11:43:59 144

原创 【MySQL进阶】锁(二)<全局锁>

全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML、DDL语句、已经更新操作的事务提交语句都将被阻塞其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获得一致性视图,保证数据的完整性不加全局锁加上全局锁。

2023-06-04 10:31:04 96

原创 【MySQL进阶】锁(一)<概述>

锁是计算机协调多个进程或线程并发访问某一共享资源的机制在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用外,数据也是一种供许多用户共享的资源如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题锁冲突也是影响数据库并发访问性能的一个重要因素因此,锁对数据库而言显得尤为重要,一旦加入锁,数据库的结构也变得更加复杂。

2023-06-04 09:37:02 38

原创 【MySQL运维】日志

一、错误日志错误日志是MySQL中最重要的日志之一,它记录了MySQL启动、停止和运行过程中发生的任何严重错误的相关信息当MySQL服务出现任何故障导致无法正常使用时,建议首先查看此日志错误日志默认是开启的,默认存放目录:/var/log/,默认文件名:mysqld.log查看错误日志存储位置二、二进制日志二进制日志记录了所有的DDL和DML语句,但是不会记录查询(select、show)语句在MySQL 8版本中,二进制日志默认是开启的作用① 灾难时的数据恢复,一旦数据库崩了,可

2023-05-24 20:53:22 182

原创 【MySQL运维】主从复制

定义① 指将主数据库的DDL和DML操作通过二进制日志传到从数据库中,然后在从数据库上对这些二进制日志重新执行(也称为:重做),从而使得从数据库和主数据库的数据保持同步② MySQL支持一台主数据库同时向多台从数据库进行复制,从数据库同时也可以作为其他从数据库的主数据库,实现链状复制优点① 如果主数据库出现问题,可以快速切换到从数据库,保障服务正常可用,继续对外提供服务② 实现读写分离,增删改的操作在主数据库,查询的操作在从数据库,降低主数据库的访问压力③ 可以在从数据库中执行备份。

2023-05-24 20:49:58 71

原创 【MySQL进阶】索引(四)<SQL性能分析>

获取MySQL如何执行select语句的信息,包括在select语句执行过程中表如何连接和连接的顺序。配置完成后,需要重启MySQL服务器(tail动态监控慢查询日志,观察日志输出结构。慢查询日志记录了所有执行时间超过指定参数(,需要在MySQL的配置文件(如何查看慢查询日志是否开启。)的所有SQL语句的日志。MySQL的慢查询日志。

2023-05-20 12:01:56 88

原创 【MySQL进阶】索引(三)

一、创建索引[UNIQUE | FULLTEXT]:可选项,唯一索引 | 全文索引1个索引是可以关联多个字段的。如果1个索引只关联1个字段,称之为单列索引;如果1个索引关联多个字段,称之为联合(组合)索引联合索引中,字段的顺序是有讲究的二、查看索引三、删除索引

2023-05-20 08:52:24 135

原创 【MySQL进阶】索引(二)

根据主键id查询的效率要高于根据二级索引name的查询因为二级索引name查询,要进行回表查询,效率低。

2023-05-20 08:20:59 75

原创 【MySQL进阶】索引(一)

索引(index)是帮助MySQL高效获取数据的数据结构索引是有序的在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的结构。

2023-05-17 22:01:17 37

原创 【MySQL进阶】 存储引擎

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式存储引擎是基于表的(不同表可以使用不同存储引擎,一个数据库下的多张表可以选择不同的存储引擎),而不是基于库的,所以存储引擎也被称为表类型。

2023-05-14 20:38:49 156

原创 【Kafka实战】SpringBoot整合Kafka

Windows下 kafka安装及使用kafka的docker安装和压缩包安装——修改中Springboot整合kafkaspring boot整合Kafka

2023-05-14 09:52:23 119

原创 【Kafka面试】Kafka中实现高性能的设计有了解过吗?

的流程:一个消费者去消费消息,首先用户空间的Kafka服务会先到页缓存中去找有没有这个消息,没有再到磁盘文件中去读取文件中的消息。把消息拷贝到页缓存中,再从页缓存中将数据拷贝到用户空间的Kafka中。的流程:一个生产者去发送消息,肯定是在用户空间发起的,消息时要存储在磁盘文件中,用户空间没有权限调用磁盘读写,会先把数据拷贝到内核空间的页缓存中去处理,页缓存中数据到了一定批次后,就会把数据写入到磁盘中。,用户空间权限比较小,内核空间权限更大一些,可以调用系统的一切资源。Linux的IO模型:划分两个空间,

2023-05-14 09:02:35 65

原创 【Kafka面试】Kafka数据清理机制了解过吗?

一、Kafka文件存储机制1. 存储结构Kafka生产者通过topic发送数据,topic只是一个逻辑概念,真正存储数据的位置是分区,分区在broker机器上对应的是文件夹(topic名称-分区号)分区内部存储了数据文件,也是分段存储的。在一个分区下可能存在多个日志分区段(segment)每个段都对应了3个文件:.index索引文件、.log真正的数据文件、.timeindex时间索引文件2. 为什么要分段?删除无用文件(已经被消费过很长时间的文件)更方便,提高磁盘利用率查找数据更便捷

2023-05-13 09:36:37 1613

原创 【Kafka面试】Kafka的高可用机制有了解吗?

一、集群模式Kafka集群由多个broker组成,每个broker就是Kafka实例。假如某个broker宕机,在集群中其他的broker依然可以对外提供服务,这个就是集群能够保证高可用性。二、分区备份机制分区提供了副本机制,一个分区可能存在多个副本,并且这些副本分别存储在不同的broker中。leader副本对外提供读写数据,同一个分区下的所有副本存储的内容是一样的。由leader负责把数据同步给其他follower。当某个分区的leader所在的broker宕机了,就会从其他的br

2023-05-10 21:46:57 420

空空如也

空空如也

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

TA关注的人

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