自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 并发安全的集合ConcurrentHashMap

本堂课目标。

2023-09-14 00:17:13 98

原创 08、随便聊聊ThreadLocal&ForkJoin

字范围过大(代码中设定的是大于200),则将这个计算任务拆分成两个子任务(T1.1和T1.2),每个子任务各自负责计算一半的数据累加,请参见代码中的fork方法。ForkJoinTask : 基本任务,使用fork、join框架必须创建的对象,提供fork,join操作,常用的三个子类。简单给大家解释一下Fork/Join的相关api,在刚刚的案例中,涉及到几个重要的API, ForkJoinTask ,种危险是,如果线程是线程池的, 在线程执行完代码的时候并没有结束,只是归还给线程池,这个时候。

2023-09-13 22:50:01 82

原创 07、J.U.C并发工具集场景及原理分析

是一个不存储元素的阻塞队列,它的主要特点是每个插入操作必须等待另一个线程的相应移除操作,反之亦然。的特性,当队列为空时,消费者线程将阻塞,直到生产者线程向队列中添加元素;同样,当队列已满时,生产者线程将阻塞,直到消费者线程从队列中取出元素。实例,并创建了两个线程:一个生产者线程和一个消费者线程。生产者线程向队列中添加元素,而消费者线程从队列中取出元素。本质上: 抢占一个令牌. -> 如果抢占到令牌,就通行, 否则,就阻塞!**原理分析:**通过信息的传递来实现生产者和消费者的阻塞和唤醒。

2023-09-11 23:59:03 109 2

原创 1-2章、笔记总结

setCharacterEncoding()指定每个请求的编码,getParameter()根据表单组件名称获取提交数据,getParameterValues()获取表单组件对应多个值时的请求数据。

2023-09-02 06:06:03 129

原创 第一课、请求与相应

/出现的目的是为了定义一个规则。

2023-08-27 22:29:59 49

原创 06、condition源码分析及基于condition实现阻塞队

在一些项目中,可能同公司的其他部门的应用服务会要求同步我们人事系统的部分组织架构数据,但是当人事系统数据发生变更后,应用的依赖方需要进行数据的同步, 这种场景下,由于员工离职/变更操作不是非常频繁,所以能有效防止线程阻塞,也基本没有并发和吞吐量的要求,所以可以将数据存放到ArrayBlockingQueue中, 由依赖方应用服务进行获取同步。比如会话转交,通常坐席需要进行会话转交,如果有坐席在线那么会为我们分配一个客服,但是如果没有,那么阻塞请求线程,一段时间后会超时或者提示当前坐席已满。

2023-08-24 17:18:13 64

原创 04、并发安全性之Lock锁及原理分析

那什么是JMM呢?首先,我们都知道Java程序是运行在Java虚拟机上的,同时我们也知道,JVM是一个跨语言跨平台的实现,也就是Write Once、Run Anywhere。那么JVM如何实现在不同平台上都能达到线程安全的目的呢?

2023-08-23 20:52:44 100

原创 05、线程阻塞唤醒wait,notify以及condition, 死锁等原理分析

方法让当前线程阻塞,等待其他线程发出通知或中断信号。这个方法的主要作用是尝试获取指定数量的锁,如果成功则返回true,否则返回false。关键字获取队列的锁,确保同一时间只有一个线程可以访问该代码块。join也是基于wait/notify来实现,notify是在线程销毁之后调用的,代码如下。接着,线程会暂停1秒钟,模拟生产过程。如果队列已满,当前线程会被阻塞,同时释放生产者所持有的锁,直到其他线程调用。方法中,使用了一个无限循环来模拟持续生产数据的过程。方法,表示当前已经生产了数据,提示消费者可以消费了。

2023-08-23 20:48:41 110

原创 03、并发编程带来的挑战之可见性

引入总线锁和缓存锁机制之后,CPU对于内存的操作大概可以抽象成下面这样的结构,从而达到缓存一致性效果如下图所示,基于上述分析,我们基本上了解到,导致可见性问题的本质,是因为CPU层面的不断优化,从最早的CPU高速缓存、到Store Buffer,本意上是提高CPU的利用率,但是实际上却因为这样一个优化带来了缓存一致性问题。为了解决CPU的缓存一致性问题,CPU提供了总线锁、缓存锁的机制,只需要在总线上声明Lock#信号,CPU便会增加锁的机制来解决缓存一致性问题。

2023-08-23 14:35:36 52

原创 syschronized、volatile相关面试题

Java内存模型(JMM)是Java虚拟机规范中定义的一组规则,用于描述Java程序中的多线程运行时内存访问行为。JMM的主要目的是为了解决多线程环境下的内存可见性、原子性和有序性问题,以保证Java程序的正确性和稳定性。JMM将Java虚拟机分为了三个主要区域:堆、栈和方法区。其中,堆是被所有线程共享的一块物理区域,而栈和方法区则是每个线程都有自己独立的一块物理区域。原子性:一个操作要么全部执行成功,要么全部不执行。可见性:一个线程对共享变量的修改,其他线程能够看到。

2023-08-21 20:32:03 59 1

原创 LuckSupport与线程中断面试题

其中最常用的方法是park()和unpark()方法,分别可以阻塞和唤醒线程,作用类似于wait/notify方法。此外,LockSupport还提供了lock()、unlock()、tryLock()、tryUnlock()等方法,用于实现锁的获取和释放。例如,可以将大的锁拆分成多个小的锁,或者使用更细粒度的锁来减少锁的数量。为了避免死锁,我们需要确保在捕获到该异常后及时释放已经持有的锁,以便其他线程可以获取锁并继续执行。如果锁已经被其他线程占用,那么当前线程将被阻塞,直到锁被释放。

2023-08-21 01:13:57 41 1

原创 CompletableFuture与FutureTask面试题

参考答案:回调是一种编程模式,它允许我们把一个函数作为参数传递给另一个函数,当某个事件发生时,这个函数会被自动调用。在Java中,我们通常会使用回调来实现事件驱动的编程,比如处理用户界面的事件,处理网络请求的结果等。回调(Callback)是一种常见的编程模式,它允许我们将一个函数作为参数传递给另一个函数,并在需要时调用这个函数。回调通常用于异步编程和事件驱动编程,例如处理用户输入、网络请求等。在Java中,我们可以使用接口来实现回调。// 定义一个回调接口。

2023-08-21 01:02:10 381 1

原创 Java线程池面试题

最大线程数(maximumPoolSize):是指线程池中允许的最大线程数。当工作队列满了并且活动线程数达到最大线程数时,如果还有新任务提交,线程池将采取饱和策略来处理任务,即丢弃新任务或者将任务放入队列末尾。核心线程数(corePoolSize):是指线程池中始终保持活跃的线程数量。当工作队列满了并且活动线程数达到核心线程数时,如果有新任务提交,线程池会先检查当前活动线程数是否小于核心线程数,如果是,则创建一个新的线程来处理任务;否则,将任务放入阻塞队列中等待执行。

2023-08-20 21:25:54 182

原创 2023最新mysql面试题总结

索引是对数据库表中一列或多列的值进行排序的一种结构。MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。MySQL中使用的数据结构主要有BTree索引和hash索引。对于hash索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的情况下,使用hash索引会更加高效。而对于BTree索引来说,它的底层数据结构就是B树,因此在绝大多数需求为多条记录查询的情况下,使用BTree索引会更加高效。

2023-08-20 07:50:42 552 1

原创 多线程aqs面试题

作为一位Java程序员,我对Java中的AQS(AbstractQueuedSynchronizer)非常熟悉。AQS是一个用于构建锁和同步器的框架,它提供了一种灵活的方式来实现线程间的协调和同步。构建锁和同步器:AQS提供了一套API,可以方便地构建各种类型的锁和同步器,如ReentrantLock、Semaphore等。提供等待队列:AQS使用一个FIFO的等待队列来管理线程的等待和唤醒操作。线程在获取锁时会被加入到等待队列中,当锁可用时,会从队列中唤醒一个线程。

2023-08-20 05:40:13 302 1

原创 ThreadLocal面试题

答:ThreadLocal是Java中的一个类,它的作用是为每个线程提供一个独立的变量副本。这样,每个线程都可以独立地改变自己的副本,而不会影响其他线程的副本。数据库连接池:在多线程环境下,每个线程都需要访问数据库,使用ThreadLocal可以避免多个线程共享同一个数据库连接,提高性能。事务管理:在分布式系统中,多个服务之间需要协同完成一个事务。使用ThreadLocal可以为每个服务创建一个独立的事务上下文,避免事务冲突。用户会话管理:在Web应用中,每个用户请求都会创建一个新的会话。

2023-08-20 04:18:58 152 1

原创 02、并发编程带来的安全性挑战之同步锁

因为JVM虚拟机自己有一些默认启动的线程,这些线程里面有很多的Synchronized代码,这些Synchronized代码启动的时候就会触发竞争,如果使用偏向锁,就会造成偏向锁不断的进行锁的升级和。这么设计的目的,其实是为了减少重量级锁带来的性能开销,尽可能的在无锁状态下解决线程并发问题,其中偏向锁和轻量级锁的底层实现是基于自旋锁,它相对于重量级锁来说,算是一种无锁的实现。这就要引出Markword对象头这个概念了,它是对象头的意思,简单理解,就是一个对象,在JVM内存中的布局或者存储的形式。

2023-08-20 01:58:58 39 1

原创 01、了解线程

多线程

2023-08-18 22:25:26 26 1

原创 HM之seata基础搭建运用

本地事务,也就是传统的。

2023-08-18 16:29:46 131 1

原创 尚硅谷spring6学习笔记

Spring61、概述1.1、Spring是什么?Spring 是一款主流的 Java EE 轻量级开源框架 ,Spring 由“Spring 之父”Rod Johnson 提出并创立,其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring 框架除了自己提供功能外,还提供整合其他技术和框架的能力。Spring 自诞生以来备受青睐,一直被广大开发人员作为 Ja

2023-08-14 00:07:33 34

原创 尚硅谷ShardingSphere5学习笔记

官网:https://shardingsphere.apache.org/index_zh.html文档:https://shardingsphere.apache.org/document/5.1.1/cn/overview/Apache ShardingSphere 由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。指所有的分片数据源中都存在的表,表结构及其数据在每个数据库中均完全一致。

2023-08-13 23:01:32 448 1

原创 leetcode算法基础(一)

归并排序是一种稳定的排序方法。由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小 值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

2023-05-11 11:54:01 75

原创 spring5底层笔记

(提示:查看类图快捷键ctrl+alt+u,查看接口方法ctrl+f12,跳转实现类ctrl+alt+左键单击,跳转类图源码节点选中f4)(3) 整合 Environment 环境(能通过它获取各种来源的配置信息)国际化文件均在 src/resources 目录下。(2) 通配符方式获取一组 Resource 资源。messages.properties(空)(4) 事件发布与监听,实现组件之间的解耦。

2023-04-02 02:40:08 31

原创 尚硅谷JUC并发编程笔记

1. wait() 和 sleep() 区别wait()来自Object类,sleep()来自Thread类wait()会释放锁,sleep()不会释放锁wait()得使用在同步代码块中,sleep()可在任何地方2. 获取ReentrantLock锁的公平锁和非公平锁//默认是非公平锁,可以插队Lock nonFairLock = new ReentrantLock();//获取公平锁,先来后到Lock fairLock = new ReentrantLock(true);3.Synch

2022-02-21 21:55:37 188

原创 java集合总结

从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。Java 集合框架提供了一套性能优良,使用方便的接口和类,java集合框架位于.

2022-01-20 21:33:26 81

原创 git常见面试题

**git工作中常用命令新增文件的命令:git add file或者git add提交文件的命令:git commit -m或者git commit -a查看工作去状况:git status -s拉取合并远程分支的操作:git fetch/git merge或者git pull查看提交记录命令:git reflog下载远程代码命令:git clone [url]新建一个分支,并切换到该分支:gitcheckout -b [branch]查看修改的文件:git status添加当前目录的所

2022-01-20 20:36:42 3277

原创 23种设计模式

23中设计模式内功心法的一、.简单工厂模式1、主要解决了一个类的在创建对很多对象的同时,可以简单通过字的参数来轻松的进行比对创建对象。2.模式引导有一个传承特别久的家族企业,这个家庭中,有一个男孩和女孩都继承了家族企业,都时在卖相同的羊肉串,而有个博客特别好奇,平凡的看下到底是各自卖什么?巧妙设计如下:3.1创建男孩子实例如下:package test;public class LaoPang implements Barbecue {public void saleRouChuan(){

2020-09-26 21:54:30 1599

空空如也

空空如也

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

TA关注的人

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