自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(258)
  • 资源 (1)
  • 收藏
  • 关注

转载 《转》Mysql加锁过程详解(1)-基本知识

1、背景  MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚至是分析线上的一个死锁场景,了解死锁产生的原因。注:MySQL是一个支持插件式存储引擎的数据库系统。本文下面的所有介绍

2020-11-29 17:59:50 634

原创 编程规范:为什么boolean类型变量命名禁用is开头

java中,对于非boolean类型的参数,getter和setter方法命名的规范是以get和set开头,如下: private String Success; public String getSuccess() { return Success; } public void setSuccess(String success) { Success = success; } 而对于boolean类型的参数,set...

2020-11-25 13:59:37 1521 1

原创 principle list

1. API拆分原则:如商品详情页API,商品详情页包含商品评价信息,应拆分成多个API,不应该放在一个API中。因为如果商品评价报错,商品应当可以正常浏览购买,仅评价不能查看。2. 确认问题原则:先由请求确认的人说清楚他的想法,再去看他拿来的东西。 比较两者之间的差异才能确保确认结果无误,否则按照自己的理解认为这个事情是对的,实际上可能差很多。...

2020-11-25 13:41:28 325 1

原创 CAS详解

CAS存在的问题以及解决方案CAS虽然很高效的解决原子操作,但是CAS仍然存在三大问题。ABA问题,循环时间长开销大和只能保证一个共享变量的原子操作ABA问题因为CAS需要在操作值的时候检查下值有没有发生变化,如果没有发生变化则更新,但是如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了。ABA问题的解决思路就是使用版本号。在变量前面追加上版本号,每次变量更新的时候把版本号加一,那么A-B-A 就会变成1A-2B-3A。从Jav

2020-11-22 21:10:48 206

原创 Java无锁应对高并发Atomic详解

问题: java多线程有线程安全问题,因为操作非原子,分为三步:1.读主内存的值 2.在工作内存中操作 3.回写到主内存解决方案:操作加锁,在写回主内存前,其他线程不允许更新该方案缺点:重量级锁,性能差优化方案:使用Atomic系列类,如AtomicInteger,其底层调用CPU的CAS(CompareAndSwapInt)指令,先比较是否符合预期,如符合预期更新,不符合预期放弃重试。源码如下:// 封装了一个int对其加减 private volatil...

2020-11-21 19:39:16 323

原创 Spring Cloud-Feign设计原理

什么是Feign?Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。Feign被广泛应用在Spring Cloud 的解决方案中,是学习基于Spring Cloud 微服务架构不可或缺的重要组件。开源项目地址:https://g

2020-11-17 11:19:15 155

原创 BeanPostProcessor使用

1. BeanPostProcessor简介BeanPostProcessor是Spring IOC容器给我们提供的一个扩展接口。接口声明如下:public interface BeanPostProcessor { //bean初始化方法调用前被调用 Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException; //bean初始化方法调用后被调用.

2020-11-13 17:34:09 226

原创 maven相关知识点

phase : 对应的执行阶段goal : 对应要执行的命令configuration : 执行命令所需的相关配置示例1:在执行test阶段时执行主函数<project> ... <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-m.

2020-09-05 16:21:08 202

原创 BUG&STRANGE LIST

1. SELECT SUM (***) FROM xxx;bug原因:sum和( 之间有空格

2020-07-13 21:54:16 186

原创 IDEA常用插件

Alibaba Java Coding Guidelines 阿里代码规约,良好的代码规范很重要Free Mybatis plugin 轻松通过快捷键找到MyBatis中对应的Mapper和XMLTranslation 强烈推荐,强大的翻译插件,支持各种语言的翻译和朗读,支持google、有道、百度翻译...

2020-07-06 01:07:05 283

原创 发布项目后看不到启动日志的sop

1. 确认logback.xml正确2. 确认pom文件中的插件配置正确(可通过下载war包确认application.properties和bootstrap.properties是否正确的方式验证)3. 确认Application是否继承了SpringBootServletInitializer

2020-07-02 18:17:21 352

原创 IDEA本地环境出问题的解决方案

1.mvn clean install -Dmaven.test.skip=true2.pom.xml中的<dependency/>内容删除,等依赖被删除后(大概十几秒),再添加上3.把repository删除,重新mvn clean install -Dmaven.test.skip=true4.使用mvn spring-boot:run 命令跑项目确认问题是代码不对还...

2019-12-13 14:08:29 2435 1

原创 AJAX跨域访问被禁止的原因

为什么AJAX访问不能跨域呢?要讲清楚这个问题,首先要谈谈Cookie 1.客户向A网站的服务器发送登录请求,并携带账号密码数据2.A网站的服务器校验账号密码正确后,返回响应并给本地添加了Cookie3.之后客户再次向A网站发起请求会自动带上A网站存储在本地的cookie4.A网站的服务器从cookie中获取账号密码数据后,返回登陆成功界面。下图为cookie的工作机制...

2018-11-20 15:22:20 9922 10

原创 Mybatis debug 时查询最终执行的SQL

或者定位问题时,需要拿到最终执行的 SQL。通过日志级别有可能不会生效,插件也是。ctrl + c 即可复制 SQL.

2023-04-25 15:35:47 535 1

原创 Pull Request 与 Merge Request 的区别

Pull Request 与 Merge Request 的区别今天我们来聊聊:“Pull Request 与 Merge Request 有什么区别?”在我的印象中,PR与MR应该是不同的,相信大部分人也是这种想法吧,我先来说说我的想法。 使用场景如果经常用 Github,对 Pull Request 应该是有一定的了解。如果经常用 Gitlab,对Merge Request 应该是有一定的了解。基于对 Github 和 Gitlab 的了解,基于两者使用场景的不同,我们应该了解到 Pull Req

2022-07-01 14:06:51 2258 1

原创 为什么说log用占位符比用字符串连接比较好

我看的是logback的源码如果在日志等级符合输出条件的情况下,两个是没有什么大区别的。但如果是在日志等级不符合输出条件的情况下:由于字符串拼接是作为一个方法参数的,意味着它进入logback的内部判断的时候,就已经是拼接成功了。而在这一步的拼接成功,涉及到String是一个final变量的问题,这个拼接是耗时了,创建了String,但是进入判断之后又完全没什么用。这两种是有区别的:log.info("a" + "b"); // 没有影响,因为在编译时已经是常

2022-06-27 15:10:49 711

原创 JAVA String最多能放多少字符?

问:字符串有长度限制吗?是多少?答:首先字符串的内容是由一个字符数组 char[] 来存储的,由于数组的长度及索引是整数,且String类中返回字符串长度的方法length() 的返回值也是int ,所以通过查看java源码中的类Integer我们可以看到Integer的最大范围是2^31 -1,由于数组是从0开始的,所以数组的最大长度可以使【0~2^31】通过计算是大概4GB。但是通过翻阅java虚拟机手册对class文件格式的定义以及常量池中对String类型的结构体定义我们可以知道对于索引定义了u2,

2022-06-17 15:56:52 2590

转载 防御性编程与疯狂偏执性编程

当程序员遇到意想不到又不能修复的bug时,,他们会“添加一些防御性的代码”,这不但可以使得代码更安全,还更容易发现问题。有时候这样的行为甚至可以直接消灭问题。开发人员还会进行数据验证——确保检查输入和输出域和返回值;审查和改进错误处理——可能会围绕一些“不可能”的条件做一些检查;添加一些有用的日志记录和诊断。换句话说,问题代码优先。 期待意外防御性编程的整体要点就是防范你不想要出现的错误。——Steve McConnell,《Code Complete》  Steve McConne..

2021-11-30 18:37:18 324

原创 详细解析 kafka manager (CMAK)的使用

添加集群常用参数说明下面已常用的选项作说明Enable JMX Polling 是否开启 JMX 轮训,该部分直接影响部分 kafka broker 和 topic 监控指标指标的获取(生效的前提是 kafka 启动时开启了 JMX_PORT。主要影响如下之指标的查看: Poll consumer information 是否开启获取消费信息,直接影响能够在消费者页面和 topic 页面查看消费信息。 ...

2021-11-21 15:15:52 1911 1

原创 为什么http是不安全的?http会被怎样攻击?

因为http是明文传输的,如果在传输过程中被黑客捕获到,黑客就可以得到消息内容,修改http内容。因为网络请求中黑客捕获方式有很多,例如:

2021-06-19 21:42:37 1652

转载 匿名内部类不能访问外部类方法中的局部变量

这里所说的“匿名内部类”主要是指在其外部类的成员方法内定义,同时完成实例化的类,若其访问该成员方法中的局部变量,局部变量必须要被final修饰。 原因是编译程序实现上的困难:内部类对象的生命周期会超过局部变量的生命周期。局部变量的生命周期:当该方法被调用时,该方法中的局部变量在栈中被创建,当方法调用结束时,退栈,这些局部变量全部死亡。而内部类对象生命周期与其它类一样:自创建一个匿名内部类对象,系统为该对象分配内存,直到没有引用变量指向分配给该对象的内存,它才会死亡(被JVM垃圾回收)。所以完全可能出现的一

2021-06-12 18:22:25 893

原创 synchronized锁升级过程

JAVA虚拟机对synchronized的优化对象头与monitorMarkWord区是存在在JAVA对象头中的一个区域大小为8字节里面包含了1.锁信息2.GC信息3.HashCode(如果有调用)public class Demo1 { public static void main(String[] args) throws IOException { Object o = new Object(); System.out.println

2021-04-04 17:34:02 207

原创 CAS ABA问题及解决方案示例

CAS ABA问题ABA问题是CAS机制中出现的一个问题,他的描述是这样的。我们直接画一张图来演示,什么意思呢?就是说一个线程把数据A变为了B,然后又重新变成了A。此时另外一个线程读取的时候,发现A没有变化,就误以为是原来的那个A。这就是有名的ABA问题。ABA问题会带来什么后果呢?我们举个例子。一个小偷,把别人家的钱偷了之后又还了回来,还是原来的钱吗,你老婆出轨之后又回来,还是原来的老婆嘛?ABA问题也一样,如果不好好解决就会带来大量的问题。最常见的就是资金问题,也就是别人如果挪用了你的

2021-04-04 16:23:16 623 3

原创 什么是可重入锁?什么是不可重入锁?【代码示例】

不可重入锁示例:public class Lock{ private boolean isLocked = false; public synchronized void lock() throws InterruptedException{ while(isLocked){ wait(); } isLocked = true; } public synchron

2021-04-03 23:22:05 123 2

原创 为什么 Java 中只有值传递?【三个例子简单易懂】

⾸先回顾⼀下在程序设计语⾔中有关将参数传递给⽅法(或函数)的⼀些专业术语。按值调⽤(call by value)表示⽅法接收的是调⽤者提供的值。按引⽤调⽤(call by reference)表示⽅法接收的是调⽤者提供的变量地址。⼀个⽅法可以修改传递引⽤所对应的变量值,⽽不能修改传递值调⽤所对应的变量值。 它⽤来描述各种程序设计语⾔(不只是 Java)中⽅法参数传递⽅式。Java 程序设计语⾔总是采⽤按值调⽤。也就是说,⽅法得到的是所有参数值的⼀个拷⻉,也就是说,⽅法不能修改传递给它的任何参数变量的

2021-03-27 18:47:25 231

原创 一看就会的【选择排序】及优化

最简单的选择排序,每次循环找到一个最小值放到数组的最左侧 /** * 最简单版本选择排序,每次循环找到一个最小的值放在最左边 * * @param arr */ public static void selectSort1(int[] arr) { for (int j = 0; j < arr.length; j++) { int min = arr[j]; int minI.

2021-03-24 00:42:08 85

原创 一看就会的【冒泡排序】及【调优】

最简单的冒泡排序 /** * 最简单冒泡排序 * * @param arr */ public static void bubbleSort1(int[] arr) { int temp = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1; j++) {

2021-03-22 23:58:03 115

原创 SourceTree忽略提交某些不想提交的文件

SoureceTree 不设置的话会默认把所有文件都纳入的准提交框里,经过设置可以屏蔽不想上传的文件。如上,点击右上角的设置按钮弹出仓库设置框,选择图上的编辑文本框,将会弹出一个文本编辑框,按如下设置即可。注:如果在第一次上传了需要忽略的文件,这些配置是不生效的,需要第一次上传的时候就不要上传那些文件,配置就会生效。*.iws*.iml*.iprtarget/.settings.project.classpath.externalToolBuilders*...

2021-03-08 10:38:44 4280

原创 RestTemplate请求406错误、中文乱码问题

使用RestTemplate请求某第三方API时,当未添加 系统中的convert时会出现406错误,添加了convert后,会出现中文乱码。调查结果:406是因为 该第三方API需要Accept为"text/plain"或*/*或其他的(我不知道他具体要什么),请求头中的中文乱码是当Accept为"text/plain"时响应即为中文乱码。源码跟踪:org.springframework.web.client.RestTemplate.AcceptHeaderRequestCallback#

2021-02-25 11:55:23 1720

原创 为什么重写equals()一定要重写hashCode()?

因为hashMap,hashSet等数据结构是依赖hashCode判断两个对象是否是一致的,如重写了equals,不重写hashCode,会有以下问题。运行这段代码发现结果返回的是null。再来看一下HashMap中的get源码:get的时候会先比较hashCode然后再去比较equals, 返回结果为null其实都是hashCode惹的祸。所以重写equals必须重写hashCode。不然在hashMap,hashSet等结构中不能使用。那为什么h...

2021-02-22 09:11:13 432

原创 @Transactional注解简单理解

加了@Transactional注解就会被TransactionInterceptor切到TransactionInterceptor中查找当前使用到的PlatformTransactionManager,对事物进行管理。(如使用的是空实现的PlatformTransactionManager,则事物不起作用)

2021-02-21 18:42:37 172

原创 Java Socket编程

前言今天跟大家分享网络编程相关的知识,很简单,可以用来练练手,如果认真看的话依旧会有收获,谢谢大家,感谢大家的阅读原理通过socket套接字实现A(客户端)和B(服务器),A可以发送信息给服务器,服务器接收信息,并返回相应的指示概述:环境:IntelliJ IDEA 2019.3.4语言:Java特点:简单,易懂,效果爆炸展示客户端输入bye则退出代码(具体实现)客户端定义客户端类,添加main函数创建socket,并连接到端口号为2000的本地服务器进程打印客户端和服务器信息

2021-02-21 14:27:55 130

原创 浅析五种IO模型(包括IO多路复用)

五种IO模型:同步阻塞IO(Blocking IO):即传统的IO模型。同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。IO多路复用(IO Multiplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO,Java中的Selector和Linux中的epoll都是这种模型。异步IO(Asynchronous IO):即经

2021-02-21 13:41:08 706 1

原创 什么是TCP/UDP协议?(超简单,一看就会)

TCP/UDP协议做了什么?TCP/UDP协议处于计算机网络的第四层“传输层”,负责传输数据包。数据包怎么传?(UDP协议)TCP/UDP协议处于计算机网络的第四层“传输层”,下面三层从小到大 分别是“物理层”、“数据链路层”、“网络层”。有了下三层的铺垫,我们已经可以把一个数据包从A主机发送到在互联网任意一个角落的B主机上啦! 站在高层就是好啊!什么都不要做!那开始传输数据包吧。好像有问题了,数据包传输过程中只给到了ip地址,从A主机发到B主机后,交给哪个进程(软件)处理呢?...

2021-02-01 01:10:11 533

原创 双重锁检查单例、枚举单例、静态内部类单例

单例最基本要素:私有静态属性,用于存取类的唯一实例。公共静态方法,用于提供对该唯一实例的存取访问,如果实例未创建,则创建该实例。用于限制类再次实例化的方式。通常使用私有构建函数的方式来实现。最简单的单例public class Singleton { private Singleton() {} //私有构造函数 private static Singleton instance = null; //单例对象 //静态工厂方法 public static S

2021-01-17 19:27:43 197

原创 mysql processlist命令详解

最近排查一些MySQL的问题,会经常用到 show processlist,所以在这里把这个命令总结一下,做个备忘,以备不时只需。首先是几条常用的SQL。1、按客户端 IP 分组,看哪个客户端的链接数最多 1 selectclient_ip,count(client_ip)asclient_numfrom(selectsubstring_index(host,':',1)asclient_ipfrominformation_schema.proc...

2021-01-07 22:52:44 5338

原创 mysql 出现了 Waiting for table metadata lock的解决方案

在使用pt进行ddl 的时候需要创建触发器,然后在创建的过程中,出现了Waiting for table metadata lock, 下面是一些解决办法,本质是一样的,这里总结来说就是:kill 掉某些事物占用的锁,使DDL成功,然后进而不阻塞其他DML操作。 设置锁超时短些lock_wait_timeout另外可以参考以下链接:https://www.cnblogs.com/digdeep/p/4892953.html https://www.jianshu.com/p/e14c39e4.

2021-01-07 22:17:04 611

原创 mysql中EXISTS与IN用法比较

1、使用方式:(1)EXISTS用法select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.id from ucsc_project b where a.projectId = b.id)上面这条SQL的意思就是:以ucsc_project_batch为主表查询batchName与projectId字段,其中projectId字段存在于ucsc_project表中。EXISTS 会对外表ucsc_

2020-12-27 16:24:17 177

原创 布隆过滤器应用DEMO

<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>21.0</version> </dependency>public class BloomFilterDemo { private static final int...

2020-12-21 11:05:44 119

原创 设计模式七大原则

1、开闭原则:开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification),这就是开闭原则的经典定义。开闭原则的含义是:当应用的需求改变时

2020-12-20 18:16:44 101

空空如也

空空如也

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

TA关注的人

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