自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(436)
  • 资源 (4)
  • 收藏
  • 关注

原创 Linux 批量修改文件后缀名

【代码】Linux 批量修改文件后缀名。

2023-10-29 18:43:00 323

原创 k8s dubug 新建pod

port: 5005 # 修改。- name: chaos-debug # 修改 (远程debug服务器端口)namespace: apps # 修改。targetPort: 5005 # 修改。name: chaos-debug-nodeport # 修改。app: chaos # 修改。

2023-08-15 14:51:37 92

原创 k8s 基本操作

语法格式 kubectl delete -n 空间名 pod 名称。

2023-08-04 09:40:26 124

原创 工厂方法模式

//抽象产品类abstract class Weapon{ abstract void display();//显示兵器名称}//具体产品类class MachineGun extends Weapon{ @Override void display(){ System.out.println("机光枪"); }}class Pistol extends Weapon{ @Override void display(){ .

2022-02-07 15:50:11 238

原创 Mac Docket安装Oracle

1.下载docket,并安装https://download.docker.com/mac/stable/Docker.dmg2.拉取oracle镜像,在命令窗口执行命令docker pull oracleinanutshell/oracle-xe-11g3.运行镜像,启动成功会有id,可在docket看到oracle已运行docker run -d -p 49161:1521 -e ORACLE_ALLOW_REMOTE=true oracleinanutshell/oracle-

2021-06-21 18:40:33 204

转载 TCP三次握手和四次挥手

三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。见过比较典型的面试场景是这样的:面试官:请介绍下三次握手求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就成功了。面试官:然后呢?求职者:这就是三次握手的过程,很简单的。面试官...

2021-05-07 15:35:20 200

转载 Redisson实现分布式锁(2)—RedissonLock

Redisson实现分布式锁(2)—RedissonLock有关Redisson实现分布式锁上一篇博客讲了分布式的锁原理:Redisson实现分布式锁---原理这篇主要讲RedissonLock和RLock。Redisson分布式锁的实现是基于RLock接口,RedissonLock实现RLock接口。一、RLock接口1、概念public interface RLock extends Lock, RExpirable, RLockAsync很明显RLock是继..

2021-04-29 10:20:53 414

转载 分布式---基于Redis进行接口IP限流

分布式---基于Redis进行接口IP限流场景为了防止我们的接口被人恶意访问,比如有人通过JMeter工具频繁访问我们的接口,导致接口响应变慢甚至崩溃,所以我们需要对一些特定的接口进行IP限流,即一定时间内同一IP访问的次数是有限的。实现原理用Redis作为限流组件的核心的原理,将用户的IP地址当Key,一段时间内访问次数为value,同时设置该Key过期时间。比如某接口设置相同IP10秒内请求5次,超过5次不让访问该接口。1. 第一次该IP地址存入redis的时候,k...

2021-04-29 09:21:09 415

转载 Redisson实现分布式锁---原理

有关Redisson作为实现分布式锁,总的分3大模块来讲。1、Redisson实现分布式锁原理2、Redisson实现分布式锁的源码解析3、Redisson实现分布式锁的项目代码(可以用于实际项目中)本文只介绍Redisson如何实现分布式锁的原理。其它的会在接下来的博客讲,最后有关Redisson实现分布式锁的项目代码的博客中会放上项目源码到GitHub上。一、高效分布式锁当我们在设计分布式锁的时候,我们应该考虑分布式锁至少要满足的一些条件,同时考虑如何高效的设计分..

2021-04-29 09:05:58 142

转载 面试必问:分布式事务六种解决方案

前言上一篇文章已经讲完分布式了,那暖男说要讲分布式事务那就一定会讲,只是我估计大家没料到暖男这么快就肝好了吧?事务想必大家并不陌生,至于什么是 ACID,也是老生常谈了。不过暖男为了保证文章的完整性确保所有人都听得懂,我还是得先说说 ACID,然后再来介绍下什么是分布式事务和常见的分布式事务包括 2PC、3PC、TCC、本地消息表、消息事务、最大努力通知。事务严格意义上的事务实现应该是具备原子性、一致性、隔离性和持久性,简称 ACID。原子性(Atomicity),可以理解为一个事务内的

2021-04-09 11:35:12 178

转载 Redis数据结构与内部编码

Redis是一个基于内存的数据库,所有的数据都存储在内存中,所以如何优化存储,减少内存空间占用对成本控制来说是非常重要的。精简键名和键值是最直观的减少内存占用的方式,而Redis则是通过内部编码规则来节省更多的内存空间。Redis为每种数据类型都提供了两三种内部编码方式,以散列类型为例,散列类型是通过散列表实现的,这样就可以实现0(1)时间复杂度的查找、赋值操作,然而当键中元素很少的时候,0(1)的操作并不会比0(n)有明显的性能提高,所以这种情况下Redis会采用一种更为紧凑但性...

2021-04-06 14:01:11 293

转载 spring事务传递机制原理

1,Propagation.REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。详细解释在代码下方。看下代码员工service@Servicepublic class EmployeeServiceImpl implements EmployeeService { @Autowired EmployeeMapper employeeMapper; @Autowired DepartmentService dep

2021-04-02 11:47:55 254

转载 面试官:哪些场景会产生OOM?怎么解决?

什么时候会抛出OutOfMemery异常呢?初看好像挺简单的,其实深究起来考察的是对整个JVM的了解,而且这个问题从网上可以翻到一些乱七八糟的答案,其实在总结下来基本上4个场景可以概括下来。一、堆内存溢出堆内存溢出太常见,大部分人都应该能想得到这一点,堆内存用来存储对象实例,我们只要不停的创建对象,并且保证GC Roots和对象之间有可达路径避免垃圾回收,那么在对象数量超过最大堆的大小限制后很快就能出现这个异常。写一段代码测试一下,设置堆内存大小2M。publicclassHeap..

2021-04-02 11:43:25 238

转载 mysql联合索引的使用规则

从一道有趣的题目开始分析:假设某个表有一个联合索引(c1,c2,c3,c4)以下选项哪些字段使用了该索引:A where c1=x and c2=x and c4>x and c3=xB where c1=x and c2=x and c4=x order by c3C where c1=x and c4= x group by c3,c2D where c1=? and c5=? order by c2,c3E where c1=? and c2=? and c5=? order by

2021-04-02 11:31:42 194

转载 Mybatis源码解析之懒加载(三):序列化

前面我们分析了mybatis的懒加载是通过ProxyFactory生成代理对象以AOP的方式实现的。通过拦截对象的方法,如果发现方法与懒加载的属性相关时才能属性进行加载然后执行相应的方法。但是,这个时候有一个序列化的问题。如果我们对这个懒加载涉及的对象进行了序列化与反序列化,那么反序列化得到的对象属性的正确性吗?如果序列化时对象的所有属性都已经被加载,此时序列化自然是不会对对象造成影响的。那么按照这个思路,我们可以在对对象序列化时加载所有还没有加载的属性以保证正确性,但是这样子无法满足不符合懒加载的按需加

2021-04-01 00:11:53 397

转载 Mybatis源码解析之懒加载(二):ProxyFactory

一、ProxyFactory在Mybatis源码解析之DefaultResultSetHandler的handleResultSets方法解析中我们已经分析到,在对查询得到的结果集处理成list时,由ProxyFactory查理懒加载问题。从接口命名就可以看出,mybatis懒加载使用的是代理模式。public interface ProxyFactory { void setProperties(Properties properties); Object createProxy(O

2021-04-01 00:09:44 254

转载 Mybatis源码解析之懒加载(一):配置和ResultLoaderMap

在前面的文章里,我们已经提到,mybatis支持懒加载的方式去查询对象的属性。本篇文章,我们将针对懒加载的实现源码展开解析。一. 懒加载的配置1. setting节点在全局配置的setting节点中,有3个配置属性与懒加载相关。proxyFactory 指定 Mybatis 创建具有延迟加载能力的对象所用到的代理工具。 CGLIB | JAVASSIST JAVASSIST (MyBatis 3.3 以上)lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联...

2021-04-01 00:07:43 218

转载 Mybatis源码解析之Spring集成mybatis-spring分析

前面的几篇相关博客都针对原生的mybatis进行解析,从本文开始将针对mybatis和spring的集成进行解析。若无特殊说明,所有的源码都基于org.mybatis:mybatis-spring:1.3.1的jar包一、jar包介绍mybatis-spring是spring与mybatis的集成jar包,因此对spring和mybatis的相关jar包都存在依赖。二、配置文件在spring中集成mybatis框架,主要需要对以下两者进行bean注入。1. SqlSessionFa...

2021-04-01 00:05:37 334

转载 Mybatis源码解析之DefaultResultSetHandler的handleResultSets方法解析

ResultSetHandler是Mybatis的核心组件,主要负责将结果集resultSets转化成结果列表(或cursor)和处理储存过程的输出。DefaultResultSetHandler是Myabtis为ResultSetHandler提供的唯一一个实现类,下面我们将深入DefaultResultSetHandler的源码了解其实如何转化结果集resultSet的。一、ResultSetHandlerpublic interface ResultSetHandler { //...

2021-03-31 01:50:24 949

转载 Mybatis源码解析之mapper接口的代理模式

一、简介在mybatis中执行sql时有两种方式,一种是基于statementId,也就是直接调用SqlSession的方法,如sqlSession.update(“statementId”);还有一种方法是基于java接口,也是日常开发中最常用的方式。mapper接口中的每个方法都可以喝mapper xml中的一条sql语句对应,我们可以直接通过调用接口方法的方式进行sql执行。因为mybatis会为mapper接口通过jdk动态代理的方法生成接口的实现类,本篇文章将针对mapper接口的代...

2021-03-31 01:47:57 201

转载 Mybatis源码解析之插件机制

为了保证程序的扩展性,提供使用者在框架基础上增强自定义的逻辑处理,mybatis提供了一种基于拦截器的插件机制。一、Interceptor接口public interface Interceptor { //覆盖原来的方法逻辑 Object intercept(Invocation invocation) throws Throwable; //为被拦截的对象生成一个代理对象 Object plugin(Object target);//设置配置的属性值 voi...

2021-03-31 01:46:28 77

转载 Mybatis源码解析之缓存机制(二):二级缓存

为了节约每次连接数据库查询数据库的资源消耗,并提高查询效率,Mybatis提供了双重缓存机制,包括HashMap结构的一级缓存和Cache结构的二级缓存。本文主要对二级缓存进行解析。一、缓存机制二、二级缓存的配置及其解析二级缓存又被称作全局缓存,作用域是整个application。1. 全局cacheEnabled参数的配置Mybatis通过setting节点的cacheEnabled参数对Mybatis是否启用二级缓存进行配置。<!--cacheEnabled用...

2021-03-31 01:44:51 254

转载 Mybatis源码解析之缓存机制(一):一级缓存

一、CacheKeyCacheKey是每次查询操作的特征值抽象而成的类,用于区别查询是否相同,从而从cache中找到对应的结果。当下列元素相同时,我们认为是相同的查询。(1)statementId(2)要求的查询结果集的范围(RowBounds的offset和limit)(3)传给statement的sql语句(4)传给statement的参数集但是Cachekey并不是简单的直接由这四个元素作为成员变量组成的一个类,而是进一步抽象,并没有限制特征值的数量和类型。CacheKey的...

2021-03-31 01:43:15 193

转载 Mybatis源码解析之事务管理

一、事务简介1. 事务的特性(ACID)(1)原子性(Atomicity)一个事务内的所有操作,要么全部完成,要么全部没做,不可能存在中间状态。如果一个事务在执行过程中出现异常,会将已经执行完成的操作回滚,使得所有操作保持在全部没做的状态(2)一致性(Consistency)事务执行前和执行后的数据库的完整性约束没有变化,执行前和执行后都处于一致性状态。比如,A向B转账,转账就是一个事务,不管转账多少次,A和B的账户总额一致。(3)隔离性(Isolation)事务和事务之...

2021-03-31 01:41:24 163

转载 Mybatis源码解析之数据库连接和连接池

一、数据库连接的获取Mybatis作为ORM框架,在上一篇博客中可以了解到在sql执行流程中会在BaseExecutor#getConnection(Log)中去获取数据库连接。1. BaseExecutor#getConnection(Log)protected Connection getConnection(Log statementLog) throws SQLException { Connection connection = transaction.getConnect...

2021-03-31 01:39:56 509

转载 Mybatis源码解析之执行流程解析

本篇文章将在前两篇文章的基础上解析Mybatis执行sql的流程。一、 映射集mappers解析对于在原生mybatis中的sql执行,需要在配置文件中通过标签引入mapper.xml文件。前文已经提到,对于xml配置文件,mybatis在XMLConfigBuilder#parseConfiguration(Xnode)方法中进行解析,对于mappers节点的解析在mapperElement(root.evalNode("mappers"));进行处理。1. XMLConfigBuilder#

2021-03-31 01:37:47 93

转载 Mybatis源码解析之初始化分析

Mybatis的初始化过程就是mybatis配置文件的解析过程并将解析结果保存到Configuration类。一、 Mybatis配置文件configuation是mybatis配置文件的根节点。configuration 配置 -properties 属性 -settings 设置 -typeAliases 类型别名 -typeHandlers 类型处理器 -objectFactory 对象工厂 -plugins 插件 -environments 环境 -environme

2021-03-31 01:34:38 120

转载 Mybatis源码解析之核心类分析

以下Mybatis解析基于org.mybatis:mybatis:3.4.5一、整体设计图片来源二、核心类解读1. SqlSession和SqlSessionFactorySqlSession是Mybatis框架对外暴露的顶层API接口,通过这个接口可以实现增删改查、事务管理等数据库操作,框架中提供了DefaultSqlSession和SqlSessionManager两个实现类。在SqlSession的所有增删改查的操作方法中,其第一个参数均为String statement,对应接口

2021-03-31 01:32:27 129

转载 面试 ConcurrentHashMap,看这一篇就够了!

本文汇总了常考的 ConcurrentHashMap 面试题,面试 ConcurrentHashMap,看这一篇就够了!为帮助大家高效复习,专门用”★ “表示面试中出现的频率,”★ “越多,代表越高频!实现原理ConcurrentHashMap 的实现原理是什么? ★★★★★ConcurrentHashMap 在 JDK1.7 和 JDK1.8 的实现方式是不同的。先来看下JDK1.7JDK1.7 中的 ConcurrentHashMap 是由Segment数组结...

2021-03-29 23:06:05 332

转载 Spring 如何解决循环依赖?

1. 过程演示关于Spring bean的创建,其本质上还是一个对象的创建,既然是对象,读者朋友一定要明白一点就是,一个完整的对象包含两部分:当前对象实例化和对象属性的实例化。在Spring中,对象的实例化是通过反射实现的,而对象的属性则是在对象实例化之后通过一定的方式设置的。这个过程可以按照如下方式进行理解:理解这一个点之后,对于循环依赖的理解就已经帮助一大步了,我们这里以两个类A和B为例进行讲解,如下是A和B的声明:@Componentpublic clas...

2021-03-25 09:38:51 86

转载 SpringBoot——自动装配原理

回答:在编写SpringBoot项目时,@SpringBootApplication是最常见的注解了,我们可以看一下里面的源代码:这里面包含了:@SpringBootConfiguration 我们点进去通过源码得知他是一个@Configuration,所以也就是对spring原生注解的封装 @EnableAutoConfiguration @ComponentScan 默认扫描的是与该类同级的类或者同级包下的所有类,是spring的原生注解之一 @EnableAutoC...

2021-03-25 00:39:54 110

转载 ZooKeeper详解

ZooKeeper 是什么?ZooKeeper 是一个开源的分布式协调服务。它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。Zookeeper 保证了如下分布式一致性特性:顺序一致性 原子性 单一视图 可靠性 实时性(

2021-03-19 10:21:13 325

转载 【Dubbo源码】SPI机制源码解析

什么是SPI机制SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 机制在第三方框架中也有所应用,比如 Dubbo 就是通过 SPI 机制加载所有的组件。不过,Dubbo 并未使用 Java 原生的 SPI 机制,而是对其进行...

2021-03-18 16:47:29 120

转载 手把手带你阅读dubbo源码(二) 服务发现

4.消费者是如何调用的我们先看下消费者的配置然后我们回到最开始xml解析的过程看到消费者的reference标签对应的是ReferenceBean,我们打开ReferenceBeanReferenceBean跟serviceBean是差不多的,只不过只实现了ApplicationContextAware,InitializingBean两个接口,setApplicationContext方法很简单,所以我们直接看afterPropertiesSet方法就行。...

2021-03-18 16:34:17 141

转载 手把手带你阅读dubbo源码(一) 服务暴露

本篇文章主要是阅读了dubbo官方文档:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html关于服务的暴露和引用,感觉很多细节还不是十分清楚,所以决定从自己手上的项目看起,然后一步步探究其中的实现,顺便记录下这个过程中学到的其他知识,由于dubbo是一个很成熟的框架了,用到的技术也很多,里面定义了很多类和接口十分复杂,所以我一步步去分析篇幅可能有些长,周边知识也非常多,我在文中都列了相关拓展知识的链接,建议大家clone一份源码跟着读,抛砖引...

2021-03-18 16:31:46 416

转载 大白话讲解Redis的事务

一、介绍Redis的事务并不像Mysql那么灵活,有隔离级别,出问题后还能回滚数据等高级操作。Redis毕竟是非关系型数据库,他目前事务回滚机制是不执行命令,也就是可以采取watch命令模拟乐观锁,进行监听数据,发现数据不是事务开始时候的样子了,那么我这个事务里的命令就不会得到执行。二、三大命令首先看下事务的全部命令但核心的命令就三个MULTI:开始事务。 EXEC:执行事务,也就是说只有EXEC命令执行的时候,这个事务内的语句才会真正的得到执行。 WATCH:监听数据变化,在开始事务

2021-03-17 11:46:58 70

转载 你还不懂Redis的发布订阅模式呢?

一、什么是发布订阅其实就是MQ,被订阅者写消息,订阅者们实时读到消息进行处理。二、Redis里的发布订阅在说这之前,前面提到的list类型blpop也是可以模拟单播阻塞队列的。但是他终归是模拟。Redis为我们提供了属于他自己的发布订阅。核心命令:三、实操1、说明只有已订阅的客户端才能收到消息,比如我给test发送了一条helloworld,他会发给当前所有订阅test的客户端推送helloworld这条消息,后来的客户端再去订阅test,也不会收到这个历史消息。2、代码#

2021-03-17 11:40:52 95

转载 Redis性能调优之Pipeline(管道)

一、性能问题1、概述Redis使用的是客户端-服务端这种CS模型和请求/响应的TCP服务器。这意味着通常情况下一个请求会遵循以下步骤:客户端向服务端发送一个请求,并监听SOCKET返回,通常是阻塞模式,等待服务端响应。 服务端处理客户端发来的命令并进行处理,最终将结果返回给客户端。redis确实是非阻塞,但是redis服务端处理是非阻塞,用户端来讲还是阻塞。至于redis为什么这么快,可以看这个一文带你彻底掌握Redis为什么这么快?2、举例也就是说一个客户端可以通过一个soc

2021-03-17 11:33:33 602

转载 Redis的sorted_set类型核心知识

不会说全部api,api这东西想用自己help @sorted_set就行了。一、特点sorted_set有序且去重,这里的有序和list类型的有序不同,这里是指通过score自定义排序。而不是元素先来后到的顺序。二、负向索引索引类型 apple banana orange 正向索引 0 1 2 反向索引 -3 -2 -1 可以发现zadd默认按照score升序,而不是元素插入顺序。三、常见api...

2021-03-17 11:07:06 124

转载 Redis的set类型核心知识

不会说全部api,api这东西想用自己help @set就行了。一、特点set类型无序不可重复。二、核心api基础数据的准备sadd s1 a b c dsadd s2 c d e f1、交集1.1、sinter1.1.1、概念语法:SINTER key1 key2 ...,将key1,key2…中相同的元素返回。1.1.2、演示1.2、sinterstore1.2.1、概念语法:SINTERSTORE destination k...

2021-03-17 11:00:41 91

SPRING技术内幕:深入解析SPRING架构与设计原理(第2版)

SPRING技术内幕:深入解析SPRING架构与设计原理(第2版)SPRING技术内幕:深入解析SPRING架构与设计原理(第2版).pdf

2017-09-12

jQuery实现弹出窗口中切换登录与注册表单

jQuery实现弹出窗口中切换登录与注册表单

2017-02-15

空空如也

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

TA关注的人

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