自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 数组原理

数组是一种线性表数据的结构,他用一组连续的内存空间,来存储一组相同数据类型的数据。线性表:数据排列成一条线一样的结构。数据结构特点:存在一个唯一的没有前驱的(头)数据元素;存在一个唯一的没有后继的(尾)数据元素存在头和尾元素。像队列,链表,栈也是线性表结构。对应的还有非线性表结构(数据没有先后顺序的,二叉树,堆等) 连续内存空间:计算机在分配内存空的时候都会对应分配一个内存地址,连续的内存空间对应的是指连续的内存地址,计算机是通过访问内存地址会获取内存中的值。 相同的数据类型:相同的数据类型,换句话

2021-10-12 22:57:07 357

原创 SpringCloud Feign工作原理基本理解

Feign介绍Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端。Spring Cloud引入Feign并且集成了Ribbon实现客户端负载均衡调用。Feign工作原理如下: 1、 启动类添加@EnableFeignClients注解,Spring会扫描标记了@FeignClient注解的接口,并生成此接口的代理对象2、 @FeignClient(value = "XC_SERVICE_MANAGE_CMS")即指定了cms的服务名称,

2021-10-09 15:40:33 2422

原创 git放弃本地文件修改

使用git checkout -- filename,注意中间有-- git checkout -- filename 放弃所有文件修改 git checkout . git checkout . 此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除 此命令不会删除新建的文件,因为新建的文件还没加入git管理系统中,所以对git来说是未知,只需手动删除即可2. 已使用git add 缓存代码,未使用git co...

2021-10-09 10:54:47 251

原创 Mybatis xml 写sql如何判断集合的size

判断集合示例如下:<if test="groupIds != null and groupIds.size>0"> and (group_id in<foreach collection="groupIds" index="index" item="item" open="(" separator="," close=")">#{item}</foreach>) &lt

2021-10-09 10:49:20 422

原创 Curator应用场景(三)-分布式锁InterProcessMutex使用及原理分析

InterProcessMutex有两个构造方法 public InterProcessMutex(CuratorFramework client, String path) { this(client, path, new StandardLockInternalsDriver()); } public InterProcessMutex(CuratorFramework client, String path, LockInternalsDriver...

2021-09-29 17:41:28 524

原创 详解Lombok中的@Builder用法简述

Builder 使用创建者模式又叫建造者模式。简单来说,就是一步步创建一个对象,它对用户屏蔽了里面构建的细节,但却可以精细地控制对象的构造过程。基础使用@Builder注释为你的类生成相对略微复杂的构建器API。@Builder可以让你以下面显示的那样调用你的代码,来初始化你的实例对象:Student.builder() .sno( "001" ) .sname( "admin" ) .sage( 1

2021-09-29 16:34:31 753

原创 CountDownLatch的原理及使用

CountDownLatch是一个同步工具栏,它的主要作用是:使一个或多个线程一直等待,直到其它线程的操作执行完后再执行。CountDownLatch概念和原理CountDownLatch是java1.5被引入的,跟他一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlocklingQueue,都在concurrent包下。CountDownLatch这个类可以使一个线程等待其他线程完成各自的工作后再执行。比如,主程序启动框架的时候确保其

2021-09-29 15:44:34 551

原创 腾讯云服务器mysql安装

rpm -e --nodeps mysql-libs1.检查服务器是否安装了mysqlyum list installed mysql*[root@VM_0_15_centos ~]# yum list installed mysql*Loaded plugins: fastestmirror, langpacksLoading mirror speeds from cached hostfileError: No matching Packages to list如果出现以上则证明没有

2021-09-22 19:12:06 1980 1

原创 什么是三次握手?什么是TCP与UDP

一。什么是TCP连接的三次握手第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。握手过程中传送的包里不包含...

2021-09-18 17:43:37 242

原创 Redis中Lua脚本是如何保证操作的原子性的

Redis使用同一个Lua解释器来执行所有命令,同时,Redis保证以一种原子性的方式来执行脚本:当lua脚本在执行的时候,不会有其他脚本和命令同时执行,这种语义类似于 MULTI/EXEC。从别的客户端的视角来看,一个lua脚本要么不可见,要么已经执行完。然而这也意味着,执行一个较慢的lua脚本是不建议的,由于脚本的开销非常低,构造一个快速执行的脚本并非难事。但是你要注意到,当你正在执行一个比较慢的脚本时,所以其他的客户端都无法执行命令。...

2021-09-14 16:22:23 5765 1

原创 用户态和内核态

2.1用户态和内核态上面提到了,重量级锁获取锁和释放锁需要经过操作系统,这是一个重量级操作,这句话是什么意思呢?内核态:其实从本质上说就是我们所说的内核,它是一种特殊的软件程序,特殊在哪儿呢?控制计算机的硬件资源,例如协调CPU资源,分配内存资源,并且提供稳定的环境供应用程序运行。用户态:用户态就是提供应用程序运行的空间,为了使应用程序访问到内核管理的资源例如CPU,内存,I/O。内核必须提供一组通用的访问接口,这些接口就叫系统调用。2.2用户态到内核态的切换用户程序都是运行在用户态的,但是

2021-09-14 16:14:58 506

原创 synchronized升级

偏向锁为什么要引入偏向锁?因为经过HotSpot的作者大量的研究发现,大多数时候是不存在锁竞争的,常常是一个线程多次获得同一个锁,因此如果每次都要竞争锁会增大很多没有必要付出的代价,为了降低获取锁的代价,才引入的偏向锁。偏向锁原理和升级过程当线程1访问代码块并获取锁对象时,会在java对象头和栈帧中记录偏向的锁的threadID,因为偏向锁不会主动释放锁,因此以后线程1再次获取锁的时候,需要比较当前线程的threadID和Java对象头中的threadID是否一致,如果一致(还是线程1获取锁

2021-09-14 16:10:58 69

原创 为什么使用Eureka

有使用过ip:port地址直接调用服务的开发经历么?该段痛苦的经历在此处省略500字......,该种方式的缺点:需要手动的维护所有的服务访问ip地址列表。单个服务实现负载均衡需要自己搭建,例如使用nginx负载均衡策略,或者基于容器化多实例部署单个服务,在实例之间做负载均衡。使用注册中心能够实现服务治理,服务动态扩容,以及服务调用的负载均衡,完整调用链路示例如下:服务提供者:向注册中心根据服务名称提供服务访问的ip:port以及其他信息。注册中心:根据服务名称,存储对应的ip:po.

2021-09-14 15:50:49 677

原创 JDK1.8 JVM内存划分

首先先来看看1.7和1.8的时候JVM的划分是什么样的: 从这张图可以看到JDK1.8和JDK1.7相比最大的区别是:元空间区取代了永久代,永久代原本主要存放Class和Meta的信息。而元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制。...

2021-09-14 15:13:10 135

原创 Spring Cloud Security:Oauth2使用入门

Spring Cloud Security:Oauth2使用入门Spring Cloud Security 为构建安全的SpringBoot应用提供了一系列解决方案,结合Oauth2可以实现单点登录、令牌中继、令牌交换等功能,本文将对其结合Oauth2入门使用进行详细介绍。OAuth2 简介OAuth 2.0是用于授权的行业标准协议。OAuth 2.0为简化客户端开发提供了特定的授权流,包括Web应用、桌面应用、移动端应用等。OAuth2 相关名词解释Resource owner(资

2021-09-14 15:12:18 1646

原创 redisson实现Redis分布式锁的底层原理图

2021-09-08 17:23:32 233

原创 策略模式的理解(优点与缺点)

认识策略模式  策略模式的重心  策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。  算法的平等性  策略模式一个很大的特点就是各个策略算法的平等性。对于一系列具体的策略算法,大家的地位是完全一样的,正因为这个平等性,才能实现算法之间可以相互替换。所有的策略算法在实现上也是相互独立的,相互之间是没有依赖的。  所以可以这样描述这一系列策略算法:策略算法是相同行为的不同实现。  运行时策略的唯一性  运行期间,策略模式在每

2021-09-08 16:01:48 3804

原创 什么是策略模式

策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式的结构  策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构。这个模.

2021-09-08 15:47:16 638

原创 分布式锁三种实现方式:

1. 基于数据库实现分布式锁;2. 基于缓存(Redis等)实现分布式锁;3. 基于Zookeeper实现分布式锁;一, 基于数据库实现分布式锁1. 悲观锁利用select … where … for update 排他锁注意: 其他附加功能与实现一基本一致,这里需要注意的是“where name=lock ”,name字段必须要走索引,否则会锁表。有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题。2. 乐观锁所谓乐观锁与前边最大区别在于基于CAS思想

2021-09-08 15:00:50 188

原创 elasticsearch分片介绍

谨慎分配你的分片当在ElasticSearch集群中配置好你的索引后, 你要明白在集群运行中你无法调整分片设置. 既便以后你发现需要调整分片数量, 你也只能新建创建并对数据进行重新索引(reindex)(虽然reindex会比较耗时, 但至少能保证你不会停机).主分片的配置与硬盘分区很类似, 在对一块空的硬盘空间进行分区时, 会要求用户先进行数据备份, 然后配置新的分区, 最后把数据写到新的分区上.2~3GB的静态数据集分配分片时主要考虑的你的数据集的增长趋势.我们也经常会看到一些不必要

2021-09-08 14:14:02 539

原创 Elasticsearch相关定义概念

假设ElasticSearch集群的部署结构如下:通过该图, 记住下面的几个定义:集群(cluster):由一个或多个节点组成, 并通过集群名称与其他集群进行区分节点(node):单个ElasticSearch实例. 通常一个节点运行在一个隔离的容器或虚拟机中索引(index):在ES中, 索引是一组文档的集合分片(shard):因为ES是个分布式的搜索引擎, 所以索引通常都会分解成不同部分, 而这些分布在不同节点的数据就是分片. ES自动管理和组织分片, 并在必要的时候对分片数据进

2021-09-08 14:08:39 63

原创 彻底搞懂mysql日志系统binlog,redolog,undolog

redo log 是物理日志,undo log 和 binlog 是逻辑日志 binlog二进制日志是server层的无论MySQL用什么引擎,都会有的,主要是左主从复制,时间点恢复使用 redo log重做日志是InnoDB存储引擎层的,用来保证事务安全 undo log回滚日志保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读...

2021-09-08 14:02:54 941

原创 Java 浅拷贝和深拷贝

Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去。举例说明:比如,对象A和对象B都属于类S,具有属性a和b。那么对对象A进行拷贝操作赋值给对象B就是:B.a=A.a; B.b=A.b;在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用现有对象的部分或全部 数据。Java中的对象拷贝主要分为:浅拷贝(Shallow Copy)、深拷贝(Deep Copy)。先介绍一点铺垫知识:Java中的数据类型分为基本数据类型和.

2021-09-06 16:36:09 2044

原创 Elasticsearch多字段搜索 - multi_match查询和多数字段-----multi_match查询

multi_match查询提供了一个简便的方法用来对多个字段执行相同的查询。NOTE存在几种类型的multi_match查询,其中的3种正好和在"了解你的数据"一节中提到的几种类型相同:best_fields,most_fields以及cross_fields。默认情况下,该查询以best_fields类型执行,它会为每个字段生成一个match查询,然后将这些查询包含在一个dis_max查询中。下面的dis_max查询:{ "dis_max": { "queries":

2021-09-03 15:34:25 3471

原创 elasticsearch基本操作之--使用QueryBuilders进行查询

/** 系统环境: vm12 下的centos 7.2 当前安装版本: elasticsearch-2.4.0.tar.gz */ QueryBuilder 是es中提供的一个查询接口, 可以对其进行参数设置来进行查询package com.wenbronk.javaes;import java.net.InetSocketAddress;import java.util.ArrayList;import java.util.Iterator;import java.

2021-09-03 15:19:12 1231

原创 如何把RabbitMQ卸载干净

要从计算机中完全卸载RabbitMQ和Erlang,请执行以下操作: 1、打开Windows控制面板。 2、双击“程序和功能”。 3、在当前安装的程序列表中,右键单击RabbitMQ Server,然后单击“卸载”。 4、在当前安装的程序列表中,右键单击“Erlang OTP”,然后单击“卸载”。 5、打开Windows任务管理器。 6、在任务管理器中,查找进程epmd.exe。 如果此进程仍在运行,请右键单击该进程,然后单击“结束进程”。...

2021-09-02 15:47:54 3256

原创 Spring AOP @After,@Around,@Before执行的顺序以及可能遇到的问题

AOP中有@Before,@After,@Around,@AfterRunning注解等等。首先上下自己的代码,定义了切点的定义@Aspect@Componentpublic class LogApsect { private static final Logger logger = LoggerFactory.getLogger(LogApsect.class); ThreadLocal<Long> startTime = new ThreadLocal&

2021-09-02 15:46:58 390

原创 Maven整合JaCoCo和Sonar

单元测试是保证代码质量的重要一环,而如何衡量单元测试写得好不好呢?覆盖率(Coverage)是一个重要指标。而JaCoCo则是专门为Java提供的用于检测测试覆盖率的工具,英文全称为Java Code Coverage。基本概念这里所讲的覆盖率是指测试代码的覆盖率,这个指标有多种计算方式,如下是比较常用的有: 行覆盖率:执行代码行数 / 总代码行数,判断有多少行代码被测试执行; 类覆盖率:执行的类 / 代码中类总个数; 分支覆盖率:执行的逻辑分支数 / 总的分支数,一般

2021-09-01 17:51:03 649

原创 介绍Spring AOP 之 CGLIB

启用注解模式<!-- 启动 @AspectJ 支持 --><bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"/>定义需要处理的Bean // 使用 @Aspect 定义一个方面类@Component public class Chinese{ public String sayHello(String name)

2021-08-31 16:55:37 180 1

原创 spring的AOP原理,使用场景是什么?

什么是AOPAOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于

2021-08-31 16:07:28 1591

原创 @order注解 解答

注解@Order或者接口Ordered的作用是定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序,Bean的加载顺序不受@Order或Ordered接口的影响;注解源码解读:@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})@Documentedpublic @interface Order { /**

2021-08-31 14:22:11 542

原创 Every derived table must have its own alias

进行子查询时,需要给子查询语句设置别名 (必须的)不然报错修改后的sql,直接在新生产的表中加入 他的别命名就行(“as a”或者“a”),“a”为新表的别名

2021-08-30 16:05:59 70

原创 MySQL AND 与OR 的优先级说明

MySQL中,AND的执行优先级高于OR。也就是说,在没有小括号()的限制下,总是优先执行AND语句,再执行OR语句。select * from table where 条件1 AND条件2 OR 条件3等价于select * from table where ( 条件1AND条件2 )OR条件3select * from table where 条件1 AND 条件2 OR条件3 AND 条件4等价于select * from table where (...

2021-08-30 14:47:19 7135

原创 Mac 电脑安装工具免费网址

pip3 install requests

2021-08-12 17:54:45 203

原创 现给出两个有序整型数组,其中array1按升序(从小到大)排序,array2按降序排序,请你将 array1和array2 合并到一个新的数组中,并保持新中的元素按升序排序。

int``[] res=``new` `int``[n+m]; ``int` `i=``0``,j=m-``1``,k=``0``; ``//双指针 ``while``(i<n&&j>=``0``){ ``if``(array1[i]<array2[j]) res[k++]=array1[i++]; ``else` `if``(array1[i]>array2[j]) res[k++]=array2[j--]; ...

2021-08-12 17:46:58 1037

空空如也

空空如也

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

TA关注的人

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