自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java线程基础知识总结

线程安全意味着在多线程环境中,无论运行时操作系统如何调度这些线程,以及线程如何交替执行,代码都能表现出正确的行为。换句话说,线程安全的代码能够保护数据免受多个线程同时执行时的冲突和错误状态。例如,java.util.concurrent.ConcurrentHashMap是线程安全的,它可以在不进行额外同步的情况下被多个线程同时访问和修改,而java.util.HashMap就不是线程安全的。死锁是指两个或多个线程在执行过程中,因争夺资源而造成的一种僵局,每个线程都在等待其他线程释放它所需的资源。

2024-07-04 00:14:55 939

原创 Java IO基础知识点总结

缓冲流(Buffered Streams)是Java IO中的一种包装流,用于提高读写数据的效率。它通过设置内部缓冲区来减少实际读写硬盘的次数。例如,BufferedReader和BufferedWriter分别用于包装其他的字符输入和输出流,使得单个字符的读写操作转变为批量读写,大大提高了IO性能。使用缓冲流的好处主要是提高程序的执行效率,减少与磁盘交互的次数。

2024-07-03 23:42:28 706

原创 jvisualvm安装Visual GC插件

给jdk自带的jvisualvm安装Visual GC插件,遇到We’re sorry the java.net site has closed(我们很抱歉java.net网站已经关闭)visualvm新访问地址:https://visualvm.github.io/index.html。在"设置"中修改url地址为刚才我们在github上找到的对应我们JDK版本的地址。进入“Plugins”,找到对应自己JDK版本的更新地址。2、进入jvisualvm的插件管理。1、找到新的更新地址。

2024-05-15 23:33:20 175

原创 MySQL学习

B+树相比于B树叶子节点之间多了个单项指针,当需要做范围查询时,只需要定位第一个节点,然后就可以直接根据各节点之间的指针,获取到对应范围之内的所有节点,也就是只需要发生一次IO,就能够确定所查范围之内的所有数据位置。因为B+树的叶节点不存储数据,仅存储指向叶子节点的指针,这样在相同树高时,能存储更多的数据,需要注意的是叶节点数据与叶子结点数据是冗余的。我们仔细观察可以知道B的叶子节点直接是没有指针的,但是日常查询中包含了大量的范围查找,所以当出现范围查找的时候,会出现多次的IO查找。

2024-05-05 19:04:34 821

原创 RocketMQ学习

【代码】RocketMQ学习。

2024-04-21 23:00:13 212

原创 Elasticsearch学习

【代码】Elasticsearch学习。

2024-04-21 10:34:19 183

原创 JVM的学习

【代码】JVM的学习。

2024-04-20 22:06:48 244

原创 中间件学习

答:常见的处理办法就是采用看门狗机制对分布式锁进行续命,具体步骤如下所示: 当前线程加锁成功后,假设设置默认过期时间为30秒,会注册一个定时任务监听这个锁,每隔30/3=10 秒就去查看这个锁,如果还持有锁,就对锁的过期时间继续续命30秒,如果没持有锁,就取消定时任务。通过对redis数据分片,实现redis的分布式存储,cluser集群采用去中心化的思想,节点之间的通信采用gossip二进制协议,master节点负责请求的读写,slave 节点不参与请求的处理,只作为master的备份。

2024-03-25 14:13:08 777

原创 手写JDK Proxy实现InvocationHandler的Invoker

以上这个过程就叫字节码重组。JDK中有一个规范,在ClassPath下只要是$开头的class。2、JDKProxy类重新生成一个新的类、同时新的类要实现被代理类所有实现的所有的接。3、动态生成Java代码,把新加的业务逻辑方法由一定的逻辑代码去调用(在代码中体。1、拿到被代理对象的引用,并且获取到它的所有的接口,反射获取。4、编译新生成的Java代码.class。5、再重新加载到JVM中运行。文件一般都是自动生成的。

2024-03-21 16:19:27 291

原创 马克思主义基本原理试卷

马克思主义哲学以前欧洲哲学的全部积极内容,都是马克思主义哲学的理论来源,其中作为马克思主义哲学直接理论来源的是 B。"作为观念形态的文艺作品,都是一定的社会生活在人类头脑中的反映的产物”,这句话强调的是 A。32【判断题】唯物辩证法的否定之否定规律揭示了事物发展的方向和道路。"哲学家们只是用不同的方式解释世界,问题在于改变世界”的提出者是 C。15【单选题】马克思主义认为社会生活在本质上是实践的,这是因为 D。唯物辩证法的总特征有两个,一个是联系的观点,另一个是 A。

2024-03-16 13:17:20 525

原创 波谱分析试卷

48【单选题】某化合物在紫外光区204nm处有一弱吸收,在红外光谱中有如下吸收峰:3300-2500cm-1(宽峰),1710cm-1,则该化合物可能是 C。4【单选题】化合物CH3-CH=CH-CH=O的紫外光谱中,λmax=320nm(εmax=30)的一个吸收带是 B。6【单选题】丙酮的紫外-可见光谱中,对于吸收波长最大的那个吸收峰,在下列四种溶剂中,吸收波长最短的溶剂是 D。45【单选题】在红外光谱中,羰基()的伸缩振动吸收峰出现的波数(cm-1)范围是 A。

2024-03-16 10:41:43 634

原创 药用植物与生药学试卷

18【多选题】下列属于对药材饮片的产地提出要求的药名有 ABCD。16【多选题】下列药材中具有异常维管束的是 ABC。7【单选题】药用部位为发酵加工品的药材是 A。1【单选题】以下不属于植物特有的细胞器是 C。12【单选题】“星点”是以下哪种生药的性状 C。5【单选题】甘草的药效兼甜味成分是 C。9【单选题】下列生药主产地是贵州的是 A。2【单选题】四强雄蕊的雄蕊数目是 A。6【单选题】植物分类的基本单位是 B。4【单选题】仙人掌的刺状物是 C。

2024-03-16 09:22:10 503

原创 天然药物化学试卷

11【单选题】磺胺类药物抗菌是由于能与细菌生长所必须的什么产生竞争作用,干扰了细菌的正常生长?30【单选题】以下仅具有解热镇痛作用,不具有抗炎作用的药物是 D。16【单选题】下列药物中,属于质子泵抑制剂类抗溃疡的药物是 A。22【单选题】下列哪个不属于已发现的药物的主要作用靶点?20【单选题】属于a-葡萄糖苷酶抑制剂类降血糖药物的是 C。4【单选题】下列药物中,哪一种主要用作抗结核病?5【单选题】下列是β一内酰胺酶抑制剂的是 D。7【单选题】下列属于非甾体雌激素类药物的是 B。

2024-03-16 09:16:37 413

原创 物理化学试卷

25【单选题】X、Y、Z三种金属,已知X可以从Y的盐溶液中置换Y,X和Y作原电池极时Z为正极,Y离子的氧化性强于Z离子,则这三种金属的活动性由强到弱的顺序是( B )6【单选题】用同一NaOH溶液,分别于相同体积的盐酸、醋酸溶液反应,完全反应后消耗了相同量的NaOH溶液,由此说明盐酸和醋酸溶液的关系是( B )18【单选题】化学平衡体系mA(g)+ nB(g)=pC (g)达到平衡时,A的转化率与温度、压强的关系所示,由图形可得到的正确结论是( A )13【单选题】现有如下物质:①氨水;

2024-03-16 08:54:44 1020

原创 Spring Cloud学习

Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。

2024-02-25 20:01:33 387

原创 MySQL学习

事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销。要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依旧是未修改之前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚。

2024-02-25 12:42:01 237

原创 MySQL学习

InnoDB 存储引擎在 分布式事务 的情况下一般会用到 SERIALIZABLE(可串行化) 隔离级别。Memory:全表锁,存储在内容中,速度快,但会占用和数据量成正比的内存空间且数据在mysql重启时会丢失,默认使用HASH索引,检索效率非常高,但不适用于精确查找,主要用于那些内容变化不频繁的代码表。MYISAM:全表锁,拥有较高的执行速度,不支持事务,不支持外键,并发性能差,占用空间相对较小,对事务完整性没有要求,以select、insert为主的应用基本上可以使用这引擎。

2024-02-25 12:12:01 374

原创 微服务学习

SwaggerAPI 管理工具。

2024-02-23 23:57:19 531

原创 Java基础学习

RuntimeException 是那些可能在Java 虚拟机正常运行期间抛出的异常的超类。如果出现RuntimeException,那么一定是程序员的错误。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。2. Exception 又 有 两 个 分 支 , 一个是运行时异常 RuntimeException , 一 个 是CheckedException。检查异常CheckedException:一般是外部错误,这种异常都发生在编译阶段,Java 编译器会强。

2024-02-23 18:20:45 1339

原创 Java多线程并发学习

AQS只是一个框架,具体资源的获取/释放方式交由自定义同步器去实现,AQS这里只定义了一个接口,具体资源的获取交由自定义同步器去实现了(通过state的get/set/CAS)之所以没有定义成abstract,是因为独占模式下只用实现 tryAcquire-tryRelease,而共享模式下只用实现tryAcquireShared-tryReleaseShared。正数表示成功,且有剩余资源。尝试获取资源,成功则返回true,失败则返回false。尝试释放资源,成功则返回true,失败则返回false。

2024-02-23 16:04:20 1170

原创 git常用命令记录

git merge –no-ff -m “merge with no-ff” dev #加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并。从远程仓库克隆项目到本地:git clone git@github.com:git帐号名/仓库名.git。git branch –set-upstream 本地分支 远程分支 # 建立本地分支与远程分支的链接。git diff 分支名 工作区与某分支的差异,远程分支这样写:remotes/origin/分支名。

2024-02-22 23:06:23 847

原创 Docker学习一

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

2024-02-22 23:03:32 439

原创 sql语句创建数据库

应该考虑数据库的备份和恢复,以确保在发生数据丢失或故障的情况下可以快速恢复数据。在新的数据库中创建表,这将使数据可以存储在数据库中。在创建数据库时,可以指定一些选项,例如数据库的默认字符集和排序规则。应该考虑数据库的大小以及将存储在数据库中的数据量。UPDATE命令可以更改表中的特定行或列,也可以更改表中的所有数据。DELETE命令可以删除表中的特定行或列,也可以删除表中的所有数据。将数据插入到表中,这将使数据可以在数据库中进行存储和管理。在创建数据库之前,应该设计数据库的结构和架构。

2024-02-19 09:33:40 2015

原创 线程安全性的原理分析学习

由于CPU高速缓存的出现使得 如果多个cpu同时缓存了相同的共享数据时,可能存在可见性问题。也就是CPU0修改了自己本地缓存的值对于 CPU1 不可见。不可见导致的后果是 CPU1 后续在对该数据进行写入操作时,是使用的脏数据。使得数据最终的结果不可预测。希望想在代码里面去模拟一下可见性的问题,实际上,这种情况很难模拟。因为我们无法让某个线程指定某个特定CPU,这是系统底层的算法, JVM 应该也是没法控制的。

2024-02-17 07:37:03 706

原创 多线程的基本原理学习

在普通实例对象中,oopDesc的定义包含两个成员,分别_mark 表示对象标记、属于markOop类型,也就是接下来要讲解的Mark World,它记录了对象和锁有关的信息 _metadata 表示类元信息,类元信息存储的是对象指向它的类元数据(Klass)的首地址,其中 Klass 表示普通指针、 _compressed_klass 表示压缩类指针。偏向锁的场景太过于理想化,更多的时候是 Thread#2 也会尝试进入临界区, 如果 Thread#2 也进入临界区但是级锁的方式来获取锁。

2024-02-16 18:38:18 955

原创 Spring AOP学习

【代码】Spring AOP学习。

2024-01-19 22:16:41 488

原创 Spring 核心之 IOC 容器学习二

【代码】Spring 核心之 IOC 容器学习二。

2024-01-18 22:41:29 480

原创 Spring 核心之 IOC 容器学习一

IOC 与 DIIOC(Inversion of Control)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们所看到的配置文件。DI(Dependency Injection)依赖注入:就是指对象是被动接受依赖类而不是自己主动去找,换句话说就是指对象不是从容器中查找它依赖的类,而是在容器实例化对象的时候主动将它依赖的类注入给它。1、对象

2024-01-18 22:27:31 1229

原创 Spring框架的背景学习

从 spring-core 入手,其次是 spring-beans 和 spring-aop,随后是 spring-context,再其次是 spring-tx 和 spring-orm,最后是 spring-web 和其他部分。组成 Spring 框架的每个模块集合或者模块都可以单独存在,也可以一个或多个模块联合实现。

2024-01-15 20:29:28 505

原创 Tomcat性能优化学习

如果将此值设置为一 个较大值,则新生代对象会在 Survivor 区进行多次复制,这样可以增加对象在新生代的存活时间,增加在新生代即被回收的概率,减少Full GC的频率,这样做可以在某种程度上提高服务稳定性。-XX:+UseBiasedLocking:启用一个优化了的线程锁,我们知道在我们的appserver,每个http请求就是一个线程,有的请求短有的请求长,就会有请求排队的现象,甚至还会出现线程阻塞,这个优化了的线程锁使得你的appserver内对线程处理自动进行最优调配。

2024-01-12 22:38:11 973

原创 Tomcat基础升华学习

使用同样的方式看tomcat7和tomcat8.5,你会发现tomcat7默认使用的是BIO,tomcat8.5默认使用的是NIO。(3)maxThreads:最大工作线程数,也就是用来处理request请求的,默认是200,如果自己配了executor,并且和。官网:https://tomcat.apache.org/tomcat-8.0-doc/config/http.html。可能在高并发的情况下,创建的Socket过多,文件句柄不够用了,可以关闭无用的句柄,如果都有用,可以增加文件。

2024-01-12 22:28:10 1244

原创 ConcurrentHashMap的原理分析学习

为什么要引入红黑树呢?在正常情况下,key hash 之后如果能够很均匀的分散在数组中,那么 table 数组中的每个队列的长度主要为 0 或者 1.但是实际情况下,还是会存在一些队列长度过长的情况。因此对于队列长度超过 8 的列表,JDK1.8 采用了红黑树的结构,那么查询的时间复杂度就会降低到O(logN),可以提升查找的性能;这个结构和 JDK1.8 版本中的 Hashmap 的实现结构基本一致,但是为了保证线程安全性,ConcurrentHashMap 的实现会稍微复杂一下。1. 高并发下的扩容。

2024-01-07 17:57:06 461

原创 ReentrantLock底层原理学习二

以 ReentrantLock 作为切入点,来看看在这个场景中是如何使用 AQS 来实现线程的同步的。

2024-01-07 16:38:54 466

原创 ReentrantLock底层原理学习一

Java.util.concurrent 是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。并发包的作者是大名鼎鼎的 Doug Lea。我们在接下来的课程中,回去剖析一些经典的比较常用的组件的设计思想在 Lock 接口出现之前,Java 中的应用程序对于多线程的并发安全处理只能基于synchronized 关键字来解决。但是 synchronized 在有些场景中会存在一些短板,也就是它并不适合于所有的并发场景。

2024-01-06 17:26:02 447

原创 Redis基础学习一

value 既不是直接作为字符串存储,也不是直接存储在 SDS 中,而是存储在redisObject 中。实际上五种常用的数据类型的任何一种,都是通过 redisObject 来存储的。2、embstr, 代表 embstr 格式的 SDS(Simple Dynamic String 简单动态字符串),存储小于 44 个字节的字符串。key 是字符串,但是 Redis 没有直接使用 C 的字符数组,而是存储在自定义的 SDS中。3、raw,存储大于 44 个字节的字符串(3.2 版本之前是 39 字节)。

2024-01-05 17:57:44 444

原创 分布式之任务调度Elastic-Job学习二

如果有 3 台服务器,分成 2 片,作业名称的哈希值为奇数,则每台服务器分到的分片是:1=[0], 2=[1], 3=[]如果有 3 台服务器,分成 2 片,作业名称的哈希值为偶数,则每台服务器分到的分片是:3=[0],在这个 execute 方法中又调用了 process()方法,150 行。// 实例信息持久化(写到 ZK instances 节点)// 服务信息持久化(写到 ZK servers 节点)又调用了另一个 process()方法,206 行。ejob-springboot 工程。

2024-01-04 15:27:06 1327

原创 分布式之任务调度Elastic-Job学习一

任务实例的主节点信息,通过 zookeeper 的主节点选举,选出来的主节点信息。在elastic job 中,任务的执行可以分布在不同的实例(节点)中,但任务分片等核心控制,需要由主节点完成。E-Job 存在主节点的概念,但是主节点没有调度的功能,而是用于处理一些集中式任务,如分片,清理运行时信息等。任务实例的信息,主要是 IP 地址,任务实例的 IP 地址。如果分片总数变化,或任务实例节点上下线或启用/禁用,以及主节点选举,都会触发设置重分片标记,主节点会进行分片计算。分片个数是在任务配置中设置的。

2024-01-04 14:58:03 1464

原创 分布式之任务调度学习二

/</</</</既然可以在配置文件配置,当然也可以用@Bean 注解配置。在配置类上加上@Configuration 让 Spring 读取到。@Bean.usingJobData("gupao", "职位更好的你").build();@Bean");.build();

2024-01-03 11:16:10 1205

原创 分布式之任务调度学习一

官网:http://www.quartz-scheduler.org/Quartz 的意思是石英,像石英表一样精确。Quatz 是一个特性丰富的,开源的任务调度库,它几乎可以嵌入所有的 Java 程序,从很小的独立应用程序到大型商业系统。Quartz 可以用来创建成百上千的简单的或者复杂的任务,这些任务可以用来执行任何程序可以做的事情。Quartz 拥有很多企业级的特性,包括支持 JTA 事务和集群。Quartz 是一个老牌的任务调度系统,98 年构思,01 年发布到 sourceforge。

2024-01-03 11:02:39 1434

原创 MySQL数据库学习三

一个事务或者说一个线程持有锁的时候,会阻止其他的线程获取锁,这个时候会造成阻塞等待,如果循环等待,会有可能造成死锁。如果一个事务长时间持有锁不释放,可以 kill 事务对应的线程 ID,也就是INNODB_TRX 表中的 trx_mysql_thread_id,例如执行 kill 4,kill 7,kill 8。因为锁本身是互斥的,(1)同一时刻只能有一个事务持有这把锁,(2)其他的事务需要在这个事务释放锁之后才能获取锁,而不可以强行剥夺,(3)当多个事务形成等待环路的时候,即发生死锁。

2024-01-02 10:47:13 935

空空如也

空空如也

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

TA关注的人

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