自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 资源 (1)
  • 收藏
  • 关注

原创 ZGC都出来了,你还不懂G1?

概念G1(Garbage-First Collector)是一种垃圾回收算法,最早在JDK 6 Update 14中作为实验性功能加入,并在JDK 7 Update 4正式JDK,之后在JDK 9 中成为默认垃圾回收算法,在JDK 10中优化了Full GC性能。G1是一种服务器端的垃圾收集器,应用在多处理器和大容量内存环境中,在实现高吞吐量的同时,尽可能的满足垃圾收集暂停时间的要求。它是专门...

2020-04-27 21:51:49 1920 2

原创 Redis 最全面试题及答案

基础Redis是单线程还是多线程单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。Redis 用 TCP 协议 Socket 来监听和读写网络请求,将需要监听的事件放入 Epoll(IO多路复用)事件管理器,然后收集触发的事件并循环一个一个处理进行相应的命令处理。Redis为什么不使用多线程Redis 核心就是如果我的...

2020-04-15 13:07:53 5068

原创 一文说清MySQL索引数据结构

小A匆匆忙忙的赶回宿舍,因为晚上他要给女神整理讲解MySQL中索引数据结构资料。一边整理一边忍住不笑了起来,等小美看到这篇文章不得爱上自己。当上小美男朋友,从此踏上人生巅峰不是梦(该考虑一下孩子叫啥了)。

2023-01-02 17:24:28 1454

原创 面试怎么回答MySQL索引问题,看这里

小A在宿舍里跟哥们开五黑打排位中,突然收到女神小美的消息:“小A,我今天面试碰到索引问题了,我没回答好”。小A顾不上游戏抓紧回复到:“到你宿舍某某咖啡店吧,我帮你一起看下”。小A抓紧时间换了衣服, 就狂奔而去。电脑上传来了哥们的骂声:”去你大爷的小A,老子晋级赛呢!“。小A心想,不好意思,在女神面前,兄弟如浮云。

2022-12-15 19:37:06 1707

原创 小美,这篇查询SQL执行流程你一定要看

宿舍里,小A兴致满满的将刚写好的查询SQL执行流程文章通过微信发给小美,回想起昨晚透过窗户意外看到小美哭的梨花带雨,问过她室友才知道竟然是因为面试被SQL执行流程给难住了。心里暗自下决心:作为小美背后的男人,我绝不允许!

2022-12-13 12:33:41 1691

原创 程序员最关心的问题,我都帮你们问AI了

最近几天互联网刮起了一阵ChatGPT风,起因是OpenAI发布了一个全新的聊天机器人模型—— ChatGPT,可以像人类交谈般回答大部分问题甚至还能直接帮你写代码。

2022-12-11 16:24:34 855

原创 Spring 6.0 正式发布,一文了解新特性

Spring Framework 6.0 首个 RC 版本正式发布,可以开始使用了。一文带你了解新特性

2022-12-09 20:00:36 1624

原创 Flink只插入指定字段到结果表

Flink SQL的Sink表只支持全字段数据插入,不支持指定字段数据插入和更新操作,那后面结果表增加字段如何处理?首先我们需要给Sink指定主键,如果输出存储是声明了主键(primary key)的数据库(例如,RDS/ES/HBASE等),数据流的输出结果有以下2种情况:如果根据主键查询的数据在数据库中不存在,则会将该数据插入数据库。如果根据主键查询的数据在数据库中存在,则会根据主键更新数据。这里跟mysql数据库的for update效果一样,所以我们可以使用这个特性进行分批次插入。解决了

2021-01-29 22:01:23 3351 3

原创 链接数据太多导致二维码密集,很难识别

将原始链接生成短链接,使用短链接生成二维码

2020-08-13 16:43:05 3282

原创 Spring 之 事件机制详解

概念Spring事件机制分为事件发布器(EventPublisher)、事件监听器(EventListener)和事件多播器(ApplicationEventMulticaster)。Spring事件机制对应常用设计模式之观察者模式,主要就是用来解耦。Spring 的 ApplicationContext 提供了支持事件和代码中监听器的功能。我们可以创建 bean 用来监听在 ApplicationContext 中发布的事件。ApplicationEvent 类和在ApplicationContext

2020-06-12 13:47:39 1331

原创 Spring 之 高频面试题

1、什么是Spring框架,Spring框架主要包含哪些模块Spring是一个轻量级的Java 开发框架。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring 帮助 开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度

2020-06-07 15:00:48 654

原创 Spring 之 MVC 详解

概念什么是MVC?​ MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。就是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在差异。Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为

2020-06-06 16:44:24 622

原创 Spring 之 @Autowired 详解

概念@Autowired是一种注解,可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作,@Autowired标注可以放在成员变量上,也可以放在成员变量的set方法上,也可以放在任意方法上表示,自动执行当前方法,如果方法有参数,会在IOC容器中自动寻找同类型参数为其传值。这里必须明确:@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier使用;核心我们先来看下实现的核心类 AutowiredAnnotationBeanPostProcessor

2020-05-30 21:39:40 1340

原创 Spring 之 循环依赖详解

概念如果 class A 中依赖了 class B并且class B 中也依赖了class A,形成一个闭环就会产生循环依赖的问题。解决构造器注入方式的循环依赖,无法解决;Setter注入方式的循环依赖,解决方式:Spring先用构造器实例化Bean对象,将实例化结束的对象放到一个Map中,并且Spring提供获取这个未设置属性的实例化对象的引用方法;在进行属性注入的时候,依次获取到对应的Bean实例对象进行注入;原理在 AbstractBeanFactory 的 doGetBean 方

2020-05-30 19:53:13 1086

原创 Spring 之 DI 详解

概念DI(Dependency Injection)依赖注入:依赖注入是指在程序运行期间,由外部容器动态地将依赖对象注入到组件中如:一般,通过构造函数注入、Setter注入、注解注入。Setter注入与注解注入类似,区别在于:Setter 注入是通过 Set 方法对属性进行赋值,而注解注入是通过反射为属性赋值。时机当 Spring IOC 容器完成了 Bean 定义资源的定位、载入、解析和注册以后,IOC 容器中已经管理类 BeanDefinition 的相关数据,但是此时 IOC 容器还没有对所管

2020-05-30 17:06:58 2466

原创 Spring 之 IOC 详解(基于注解方式)

概念IOC(Inversion of Control)控制反转:所谓控制反转,就是应用本身不负责依赖对象的创建和维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就有应用转移到了外部容器,控制权的转移就是控制反转。初始化过程Spring IOC容器的初始化简单的可以分为三个过程:第一个过程是Resource资源定位。这个Resouce指的是BeanDefinition的资源定位。这个过程就是容器找数据的过程,就像水桶装水需要先找到水一样。第二个过程是BeanDefinition的载入过程。

2020-05-30 15:24:08 755

原创 Spring 之 AOP 详解

AOP 概念AOP(Aspect Oriented Programming)面向切面编程是 Spring 框架最核心的组件之一,它通过对程序结构的另一种考虑,补充了 OOP(Object-Oriented Programming)面向对象编程。在 OOP 中模块化的关键单元是类,而在 AOP 中,模块化单元是切面。也就是说 AOP 关注的不再是类,而是一系列类里面需要共同能力的行为。在 AOP 中模块化单元是切面(Aspect),它将那些影响多个类的共同行为封装到可重用的模块中,然后你就可以决定在什么时

2020-05-28 19:08:53 378

原创 JDK动态代理实现原理

概念动态代理类的代理类并不是在Java代码中定义的,而是在运行时根据我们在Java代码中的“指示”动态生成的。相比于静态代理, 动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法。 动态代理的实现方式有两种,JDK实现和CGlib实现。本文重点讲解JDK实现原理,进一步了解动态代理。简单使用1、创建一个接口(JDK动态代理实现需要被代理对象必须实现一个接口)public interface Calculator { int add(int i,

2020-05-26 13:26:33 604

转载 JAVA8函数式接口使用

概念函数式接口在java中是指:有且仅有一个抽象方法的接口函数式接口,即适用于函数式编程场景的接口。而java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。备注:“语法糖"是指使用更加方便,但是原理不变的代码语法。例如在遍历集合时使用的for-each语法,其实底层的实现原理仍然是迭代器,这便是“语法糖”。从应用层面来讲,Java中的Lambda可以被当做是匿名内部类的“语法

2020-05-26 12:25:01 644

原创 Spring 之 @Transaction 详解

介绍@Transaction 是 Spring 提供用来控制事务回滚/提交的一个注解,让我们从编程式注解转换到声明式注解。在这里就不做过多的撰述,今天主要来看下 @Transaction 里面的属性使用。作用域@Transaction 可以写在类、接口、方法上当标注在类上的时候:表示给该类所有的 public 方法添加上 @Transaction 注解 当标注在接口上的时候:Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。像 CGLib 动

2020-05-12 22:23:53 27403 3

原创 深入并发-线程池

什么是线程池在 Java 中,如果每个请求到达就创建一个新线程,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。如果在一个 Jvm 里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足。为了解决这个问题,就有了线程池的概念,线程池的核心逻辑是提前创建好若干个线程放在一个容器中。如果有任务需要处理,则将任务直接分...

2020-04-06 22:39:07 190

原创 深入并发-内存模型

从硬件层面了解可见性一台计算机中最核心的组件是 CPU、内存、以及 I/O 设备。在整个计算机的发展历程中,除了 CPU、内存以及 I/O 设备不断迭代升级来提升计算机处理性能之外,还有一个非常核心的矛盾点,就是这三者在处理速度的差异。CPU 的计算速度是非常快的,内存次之、最后是 IO 设备比如磁盘。而在绝大部分的程序中,一定会存在内存访问,有些可能还会存在 I/O 设备的访问。为了提升计算...

2020-04-05 21:18:09 322

原创 深入并发-线程

线程的出现什么是进程?进程的本质是一个 正在执行的程序,程序运行时系统会创建一个进程,并且给每个进程分配独立的内存地址空间保证每个进程地址不会相互干扰。同时,在 CPU 对进程做时间片的切换时,保证进程切换过程中仍然要从进程切换之前运行的位置出开始执行。所以进程通常还会包括程序计数器、堆栈指针。有了进程以后,为什么还会发明线程呢?在多核 CPU 中,利用多线程可以实现真正意义上的并行执行...

2020-03-31 11:41:28 139

原创 深入并发-ConcurrentHashMap

概述关于Java集合的小抄是这么描述:并发优化的HashMap。在JDK5里的经典设计,默认16把写锁(可以设置更多),有效分散了阻塞的概率。数据结构为Segment[],每个Segment一把锁。Segment里面才是哈希桶数组。Key先算出它在哪个Segment里,再去算它在哪个哈希桶里。也没有读锁,因为put/remove动作是个原子动作(比如put的整个过程是一个对数组...

2020-03-29 21:28:52 222

原创 深入并发-工具类

CountDownLatch如果不熟悉 AQS 的同学建议先去看楼主的之前的博文《深入并发-AQS》,不然理解本章将很吃力。概念CountDownLatch 是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完毕再执行。从命名可以解读到 countdown 是倒数的意思,类似于我们倒计时的概念。CountDownLatch 提供了两个方法,一个是 countDown,一...

2020-03-27 16:58:41 117

原创 深入并发-Condition

Condition概念JUC 包提供了 Condition 来对锁进行精准控制,Condition 是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件(condition),只有满足条件时,线程才会被唤醒。Condition的本质就是等待队列和同步队列的交互。源码分析如果不熟悉 AQS 的同学建议先去看楼主的上一篇博文《深入并发-AQS》,不然理解本章将很吃力。下面是对 Cond...

2020-03-26 16:58:03 199

原创 深入并发-AQS

概念AQS是什么在 Lock 中,用到了一个同步队列 AQS,全称 AbstractQueuedSynchronizer,它是一个同步工具也是 Lock 用来实现线程同步的核心组件。如果你搞懂了 AQS,那么 J.U.C 中绝大部分的工具都能轻松掌握。AQS 的两种功能从使用层面来说,AQS 的功能分为两种:独占和共享独占锁:每次只能有一个线程持有锁,比如 ReentrantLock 就...

2020-03-25 18:04:51 233

原创 深入JVM-内存模型

本文讨论以 JDK8 版本展开Java虚拟机栈栈帧栈帧:栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。栈帧存储了方法的局部变量表、操作数栈、动态连接、方法返回地址和附件信息。每一个方法从调用至执行完成的过程,都对应着一个栈帧在虚拟机栈里从入栈到出栈的过程。栈对应线程,栈帧对应方法在活动线程中, 只有位于栈顶的帧才是有效的。称为当前栈帧,正在执行的方法...

2020-01-20 14:10:55 198

原创 深入JVM-初步认识

本文讨论以 JDK8 版本展开JVM 是什么?JDK、JRE、JVM从Reference -> Developer Guides -> 定位到:官网JDK,我们可以得到这么一张图。JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。JRE(Java Runtime...

2020-01-19 14:11:20 267

原创 解决 SpringBoot + ktorm 多数据源时默认数据库的指定

最近刚接触到kotlin语言,并丢弃之前的mybatis使用全面支持kotlin的ktorm框架。框架使用SpringBoot + ktorm ,但是多数据源时会导致无法指定默认数据库。根据官网的说法默认数据库就是最后一次创建的Database对象。第一反应是使用 @Primary 注解,但是 @Primary 只在相同名称的bean时候起作用。如果我们多数据源的 DataBase 的 be...

2019-12-15 14:38:08 1175

原创 MySQL修改字段值为指定集合的随机一个

UPDATE testSET nums = (CASE floor( 1 + rand( ) * 4 ) WHEN 1 THEN '1' WHEN 2 THEN '2' WHEN 3 THEN '3' ELSE '4' END )...

2019-12-10 19:44:58 1069

原创 深入了解布隆过滤器

概念布隆过滤器(英语:Bloom Filter)是1970年由一个叫布隆的小伙子提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。原理布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。...

2019-12-01 16:03:29 479

转载 post和get的区别

前言这个问题几乎面试的时候都会问到,是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎。关于get和post如果你有条件上百度的话,至少有200百万条结果,每个人都有每个人的思考,当然,这篇也是我的思考,如果有些结论有错误,希望能够喷起来。在批评中不断改进,与诸君共勉一句话:若批评无意义,则赞美无意义。01 特点...

2019-11-29 22:49:19 188

原创 MySQL多表关联查询优化

背景最近在对运营报表导出进行优化,总结了一些多表关联查询优化的点记录一下。避免临时表通过 Explain 分析 SQL 语句,尽量不要使用到临时表。GROUP BY (Explain具体详解,可以看这篇博客)最容易造成使用临时表,GROUP BY 与临时表的关系 :  1. 如果GROUP BY 的列没有索引,产生临时表.  2. 如果GROUP BY时,SELECT的列不止GROUP...

2019-11-28 10:37:18 5606

原创 SqlSessionTemplate为什么线程安全

最近在看Mybatis源码,对于理解SqlSessionTemplate是如何保证线程安全的网上的文章不多。希望通过本文能够帮助大家清楚理解,类关系图如下:DefaultSqlSession与SqlSessionManager解析在Mybatis中SqlSession默认有DefaultSqlSession和SqlSessionManager两个实现类DefaultSqlSessi...

2019-11-06 17:42:06 1077

原创 JVM性能调优监测工具

查看正在运行的程序jps主要用来输出JVM中运行的进程状态信息。语法格式如下: jps [options] [hostid]options:-q 不输出类名、Jar名和传入main方法的参数-m 输出传入main方法的参数-l 输出main类或Jar的全限名-v 输出传入JVM的参数hostid:不填,默认为本机 CPU飙升排查jstac...

2019-11-05 15:15:41 143

原创 linux基础指令基础

常用命令 1 查看指令帮助:help 文件相关 123456789101112131415161718192021 查看当前目录内容:ls、ll清除终端内容:clear进入下一级目录:cd创建文件:touch 1.txt创建文件夹:mkdir 11复制文件或文...

2019-11-01 11:03:34 196

原创 SpringBoot实现Filter的两种方式

前言Filter 是 SpringBoot 里面使用来做验证授权和跨域配置的第一选择,但是我们应该如何实现一个 Filter 对所有URL进行过滤?使用注解方式实现:import lombok.extern.slf4j.Slf4j;import org.apache.commons.lang3.StringUtils;import javax.servlet.Filter;i...

2019-09-30 15:43:45 1317

转载 快速了解23种设计模式

设计模式的分类设计模式有两种分类方法,即根据模式的目的来分和根据模式的作用的范围来分。根据目的来分根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式3种。创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式:用于描述如何将类或对象按某...

2019-08-12 10:34:10 324

原创 spring retry 重试机制

当我们调用一个接口可能由于网络等原因造成第一次失败,再去尝试就成功了,这就是重试机制,spring支持重试机制,并且在Spring Cloud中可以与Hystaix结合使用,可以避免访问到已经不正常的实例。 但是切记非幂等情况下慎用重试加入依赖org.springframework.retryspring-retry在主类上加入 @EnableRetry 注解 12...

2019-08-12 10:31:56 197

并发编程整体知识梳理

对java并发知识的完整梳理,可以通过该文档了解到并发整个知识体系。

2018-09-16

空空如也

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

TA关注的人

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