自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多使用 CompletableFuture 提升接口性能

目录前言代码demo前言工作中经常碰到一些需求,一个接口经常需要调用几次或几个其他接口。碰到这种需求,一般没什么要求的可以直接顺序串行调用。但是,如果对接口性能要求稍微高一点点,往往串行调用就很容易不满足要求,主要是接口耗时这块相对比较高。这种场景是很常见的,因此JDK也提供了 CompletableFuture 这个类让我们方便处理这种需求。代码demopublic class DemoApplication { public static void main(String[] arg

2021-09-18 23:53:22 392

原创 使用 easyexcel 读取 Excel 文件内容映射到 Java 对象

目录1.引入依赖2.新建 user.xlsx 文件,文件内容为3.建立对应实体类 User4.创建对应的 AnalysisEventListener 类5.读取 Excel 文件1.引入依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version>

2021-07-10 15:20:22 2540

原创 Spring Boot 实现默认开启参数校验

目录1.前言2.实现默认使用参数校验,无须使用 @Validation 或 @Valid 注解声明1.前言参数校验是个好东西,可以避免很多重复无用的校验代码,但是还需要使用 @Validation 或 @Valid 方式,声明启用参数校验。当项目规范要求都使用参数校验时,这样就写了很多无用的声明代码。2.实现默认使用参数校验,无须使用 @Validation 或 @Valid 注解声明@Aspect@Componentpublic class ValidationAspect {

2021-05-31 22:09:37 415

原创 RestTemplate 全局设置请求头

目录1.编写自定义 Interceptor2.配置 RestTemplate1.编写自定义 Interceptorpackage com.example.customer.interceptor;import org.springframework.http.HttpRequest;import org.springframework.http.client.ClientHttpRequestExecution;import org.springframework.http.client.Cli

2021-05-11 22:16:50 1141

原创 MyBatis-Plus 自动填充功能

目录1.前言2.抽取基类3.原生 MyBatis 的写法4.MyBatis-Plus 自动填充功能1.前言一般公司都会有自己的数据库相关规范,里面会包含一条建表规范,约束建表时,id、created_by、created_at、updated_by、updated_at 等一些字段是必须的,阿里巴巴Java开发规范里也提到了这点。2.抽取基类对于这些必须字段,一般会抽取一个基类包含这些必须字段属性,其他的实体类都继承这个基类,这样就避免了很多重复的代码。@Datapublic class B

2021-04-30 22:37:13 6468 1

原创 MyBatis-Plus 排除非表字段的三种方式

目录1.使用 transient 关键字标记实体类的非表字段2.使用 static 关键字标记实体类的非表字段3.使用 @TableField(exist = false) 标记(推荐)1.使用 transient 关键字标记实体类的非表字段package com.example.customer.entity;import lombok.Data;@Datapublic class Customer { private Long id; private String nam

2021-04-18 11:19:46 7162

原创 MyBatis-Plus 快速入门

目录1.建库建表2.引入依赖3.配置4.编码5.测试1.建库建表a.创建一个 test 的数据库;b.在 test 数据库中,执行以下建表语句,创建 customer 表,并初始化相关数据。CREATE TABLE `customer` ( `id` bigint(20) NOT NULL, `name` varchar(255) COLLATE utf8mb4_bin NOT NULL, `age` int(11) NOT NULL, `email` varchar(255) CO

2021-04-18 00:12:24 5860 2

原创 MySQL基本架构示意图

1.MySQL的基本架构示意图MySQL可以基本划分为Server层和存储引擎层两部分,其中Server层包含了连接器、缓存、分析器、优化器和执行器,存储引擎层包含各种存储引擎实现,最常见的有InnoDB、MyISAM和MEMORY。2.执行流程首先客户端与MySQL连接,这部分流程由连接器处理,它包括管理客户端与MySQL的连接之外还包括权限认证。当客户端与MySQL建立连接,MySQL会查询权限表该用户相关权限,存放在该连接绑定的session中,当权限修改时,不会影响已经建立的连接,直到

2021-04-10 12:16:29 4929 2

原创 窑鸡厂Java大数据岗二面相关面试题

今天进行了窑鸡厂Java大数据岗二面,结果挂了,这里记录一下package com.example.untitled;public class RefDemo { private String name; public RefDemo(String name) { this.name = name; } static void change(RefDemo demo) { demo = new RefDemo(".

2021-04-02 21:56:07 2545

转载 HashMap与ConcurrentHashMap⾯试要点

版权声明:本文为CSDN博主「LeslieGuGu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin_44050144/article/details/114855602目录1.HashMap1.1 HashMap底层数据结构1.2 JDK8中的HashMap为什么要使⽤红⿊树?1.3 JDK8中的HashMap什么时候将链表转化为红⿊树?1.4 JDK8中HashMap的put⽅法的实现过程?1.5.

2021-03-23 00:45:21 897

原创 Redis单线程模型

目录1.前言2.过程2.1.建立连接2.2.命令请求2.3.命令回复1.前言在Redis 6.0版本之前,它的线程模型是单线程的,如下图2.过程2.1.建立连接首先由一个客户端,通过 socket 请求 redis 进程的 server socket 建立连接,server socket 生成一个 ae_readable 事件,多路复用程序监控到该事件,将该事件 push 到事件队列中,文件事件处理器从事件队列中 poll 事件,分析事件类型,确定使用连接应答处理器对该事件进行处理,建立连接

2021-03-22 01:22:23 7987

原创 Java对象内存布局

目录1.前言2.实验2.1.添加依赖2.2.创建一个 Person 类2.3.使用 JOL 工具查看对象内存布局2.4.输出1.前言在 Java 中,对象在内存中的布局,由对象头(Object Header)、实例数据(InstanceData)、对齐填充(Padding)三部分组成。 其中,对象头又由 MarkWord、Class Pointer 和 Length三部分组成。 当使用的是 64 位 虚拟机,整个对象所占空间的大小需要被 8 整除。MarkWord 区域,记录了对象 Hash

2021-03-21 14:14:19 112

原创 Java四种引用类型

目录1.总结2.强引用2.1.代码2.2.运行结果:2.3.内存表现方式3.软引用:3.1代码3.2.运行结果3.3.内存表现方式4.弱引用4.1.代码4.2.运行结果4.3.内存表现方式5.虚引用5.1.代码5.2.运行结果1.总结引用类型回收时机强引用宁愿发生内存溢出也不会回收软引用当内存不够时,会回收这种方式引用的对象,适合做缓存弱引用不管内存够不够,每次进行 GC 都会回收这种方式引用的对象,ThreadLocal 用到了这种引用虚引用这种引用对象一

2021-03-21 12:53:06 3064

原创 Redis 命中率

目录前言概念介绍如何获取 Redis 命中率情况提高命中率方案前言当我们的系统接入 redis 作为缓存数据库的时候,如何评价接入 redis 后对系统的性能有多大的提升,系统的抗并发性有多大的提升,这可以参考一下 redis 的命中率指标。通常来说,命中率越高表示使用缓存的效果越好,应用的性能越好,抗并发的能力越强。概念介绍命中率 = 命中次数 / ( 命中次数 + 不命中次数 )命中次数:当使用指令向 redis 中查询某个 key 的数据时,数据存在 redis 中,并返回,命中次数加 1,

2021-03-17 11:12:51 3741

原创 分布式架构和集群架构的区别

分布式架构和集群架构的区别分布式架构集群架构分布式架构分布式架构是每个服务器都是运行不同的程序,提供的功能不一样,相互协作形成一个完整的生态,再对外提供服务,各个服务器之间有存在相互通信调用的情况,架构图如下。集群架构集群是相同功能体的复制,比如我们有一个A服务的集群,由三台服务器组成,则每个服务器运行的程序是完全相同的,功能也是完全相同的,各个服务器之间不存在通信调用的情况。集群架构的目的是与负载均衡器进行配合,分摊运行压力,架构图如下。...

2021-03-15 12:07:04 11362 2

原创 SQL优化以及各类SQL执行计划情况(持续更新)

建表语句CREATE TABLE `t_user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(255) COLLATE utf8mb4_bin NOT NULL, `email` varchar(255) COLLATE utf8mb4_bin NOT NULL, `phone` varchar(255) COLLATE utf8mb4_bin NOT NULL, `sex` varchar(

2021-03-13 14:48:51 4842 1

原创 Java常用的两种动态代理技术底层原理

总结JDK动态代理只支持代理接口,因为JDK动态代理生成的代理类默认实现了一个Proxy类,鉴于Java单继承多实现机制,顾只支持代理接口。CGLIB动态代理既支持代理接口也支持代理类,动态生成的代理类根据代理的对象情况,自动识别是接口还是类,生成对应的代理类。JDK动态代理有一个接口package com.example.untitled;public interface TestService { String test();}获取动态生成的字节码并存放到文件中

2021-03-10 20:41:14 13391 1

原创 MySql快照读和当前读

快照读:顾名思义,就是从当前状态复制一份快照出来,之后可以从快照里读取数据,但是并不是真正将整份数据复制的,而是利用了版本机制实现。简单select 不加锁的语句就是快照读。select * from t_user;select * from t_user where id = 1;当前读:全程在最新版本里读取数据。加锁的 select 语句,insert、update 和 delete 语句都是当前读。select * from t_user for update;selec

2021-03-06 10:19:44 1089

原创 Redis Cluster安装部署

资源列表机器名IP角色redis1192.168.252.1311主1从redis2192.168.252.1331主1从redis3192.168.252.1341主1从在redis1机器进行redis编译安装及配置# 下载 redis 文件weget https://download.redis.io/releases/redis-6.2.1.tar.gztar xvf redis-6.2.1.tar.gzcd redis-6.2.1# 获

2021-03-06 10:17:50 300

原创 生产经验,如何给已上线的表加索引

背景:生产上有一张核心的业务表 t_user,数据量已经到了亿级别。现在有个需求,需要给该表的 username 字段加索引。方案1:利用凌晨系统不活跃时间,进行索引创建。优点:简单方便缺点:创建索引会锁表,会阻塞业务的执行,数据量越多,创建索引的时间越久,当有些业务要求24小时不能中断的是不可以采用该方案的方案2:创建新表,创建索引,同步原有表数据至新表,修改业务代码,设置一个开关,当开关打开时,后续事务需要同时往新旧两张表同时插数据,保证最新数据两张表都有,然后将旧表重命名为历史表,新

2021-03-05 23:10:45 4488 2

原创 MySQL相关锁

底层锁Innodb引擎,有表锁、行锁和间隙锁(GAP),还有一种由 行锁 和 间隙锁(GAP)组成的 next-key 锁。案例1:使用主键确定对应的行,并且存在数据,加行锁;若无数据,则不加锁select * from t_user where id = 1 for update;案例2:使用非主键字段查找,并且该字段无索引,加表锁select * from t_user where username = 'aaa' for update;案例3:主键不明确,加表锁select * fr

2021-03-05 23:04:26 6268

原创 MySQL 的 Innodb 引擎在 REPEATABLE-READ(RR) 的事务隔离级别下,幻读问题记录

看过一些博客和文章,有的说 MySQL Innodb RR 级别下,解决了幻读问题,也有的说没有解决,也还有一些说解决了部分幻读问题,但是都没有想过实验去论证,据着严谨的我,特此实验一番记录一下实验前提:1.使用 SELECT @@tx_isolation 查询当前的事务隔离级别,确保是 REPEATABLE-READ2.执行以下表结构语句创建表CREATE TABLE `t_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `user.

2021-03-05 23:00:42 15531

Java面试汇总_20210314.pdf

Java面试汇总_20210314.pdf

2021-03-14

空空如也

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

TA关注的人

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