自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM的GC算法由CMS切换为G1

jvm的GC算法

2022-11-23 15:53:12 1606

原创 面试中经典高频算法分享(转自力扣)

1、无重复字符的最长子串给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。力扣:力扣解:以这个字符串为例:abcabcbb,当i等于3时,也就是指向了第二个a, 此时我就需要查之前有没有出现过a, 如果出现了是在哪一个位置出现的。然后通过last[index] 查到等于1, 也就是说,如果start 依然等于0的话,那么当前窗口就有两个a了,也就是字符串重复了,所以我们需要移动当前窗口的start指针,移动到什么地方呢?移动到什么地方,窗口内就没有重复元素了呢? 对了,就是a

2022-03-17 21:41:23 947

原创 Spring声明式事务控制

1)事务开始时,通过AOP机制,生成一个代理的connection对象,并将其放入DataSource实例的某个与DataSourceTransactionManager相关的容器中。在接下来的整个事务中,客户端与数据库的交互都使用该connection。2)事务结束时,回滚在第一步中得到的代理的connection中的数据库命令,然后关闭该代理connection对象。具体分析:声明式事务很⽅便,尤其纯注解模式,仅仅⼏个注解就能控制事务了?@Enable...

2021-11-30 22:45:13 1246

原创 使用LinkedHashMap实现LRUCache

LRUCache的目的就是当缓存中的数据量达到一定的程度时,添加新的数据会将最近最少被使用的旧数据删除,以保障Cache中的数据都是经常需要的数据,提高命中率。下面是一个基于linkedhashmap的LRUCache的简单实现,关键是重写LinkedHashMap的removeEldestEntry( )方法,在LinkedHashMap中该方法默认返回false(LRUCache本身未考虑线程安全的问题)。public class BasicLRUCache&l...

2021-09-15 10:54:47 415

原创 ClassNotFoundException和NoClassDefFoundError的区别

在java开发中经常遇到的两个异常, ClassNotFoundException 和NoClassDefFoundError。 表面看起来都是类找不到的异常,但是具体又有什么区别呢?如它们的名字所说明的:NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常。 在Java中错误和异常是有区别的,我们可以从异常中恢复程序但却不应该尝试从错误中恢复程序,也就是说Exception我们可以用try …catch…等手段让程序继续...

2021-02-25 14:47:23 180 2

原创 ConcurrentHashMap的介绍以及1.7和1.8版本的区别

相信大多数的同学在面试的过程中ConcurrentHashMap是一个绕不开的话题,那么ConcurrentHashMap的一些重要方法如put()、get()、size()等方法的实现过程是怎么样的?以及JDK1.7和1.8又有什么样的区别?我们先来介绍1.7版本的ConcurrentHashMap: 在初始化ConcurrentHashMap的时候,会初始化一个Segment数组,容量为16,而每个Segment都继承了ReentrantLock类,也就是说每个Segment类本身就是一...

2021-01-09 19:36:09 2757

原创 TestNG测试框架与surefire插件

1、testng1.1 testng的介绍TestNG是Java中的一个测试框架,类似于JUnit功能都差不多,只是功能更加强大,使用也更方。用XML文件运行套件测试,TestNG不仅可以做捆绑类测试,也可以捆绑方法进行测试。TestNG的运行方式更加灵活,注释更加丰富。对于大型测试套件,我们不希望在某一项测试失败时就得重新运行数千项测试,TestNG 的灵活性在这里尤为有用。1.2 testng的常用注解@Test --TestNG 的测试类是普通的老式 Java 对象;不需要扩.

2020-09-21 10:46:03 1053

原创 多线程的等待超时机制--wait(remain)

开发人员经常会遇到这样的方法调用场景:调用一个方法时等待一段时间(一般来说是给定一个时间段),如果该方法能够在给定的时间段之内得到结果,那么将结果立刻返回,反之,超时返回默认结果。等待/通知的经典范式,即加锁、条件循环和处理逻辑3个步骤,而这种范式无法做到超时等待。而超时等待的加入,只需要对经典范式做出非常小的改动,改动内容如下所示。假设超时时间段是mills,那么可以推断出在当前时间System.currentTimeMillis()+mills之后就会超时。long over...

2020-07-19 12:07:06 2587

转载 RocketMQ 怎么保证的消息不丢失

一、消息发送过程我们将消息流程分为如下三大部分,每一部分都有可能会丢失数据。 生产阶段:Producer通过网络将消息发送给Broker,这个发送可能会发生丢失,比如网络延迟不可达等。 存储阶段:Broker肯定是先把消息放到内存的,然后根据刷盘策略持久化到硬盘中,刚收到Producer的消息,再内存中了,但是异常宕机了,导致消息丢失。 消费阶段:消费失败了其实也是消息丢失的一种变体吧。 二、Producer生产阶段Producer通过网络将消息发送给Broker,

2020-07-03 11:54:27 1753

原创 SpringBoot的启动过程 --banner.txt实现打印炫酷控制台图案

SpringBoot的启动过程:我们知道 Spring Boot 程序的入口是 SpringApplication.run(Application.class, args) 方法,那么就从 run() 方法开始分析吧,它的源码如下:public ConfigurableApplicationContext run(String... args) { // 1.创建并启动计时监控类 StopWatch stopWatch = new StopWatch(); stopWatc

2020-06-03 11:38:35 2221

原创 java采用CountDownLatch +“多线程”----实现多个线程分别处理不同任务

最近在工作时,有一位同事遇到了一个查询优化的问题,过来向我请教。 问题大致是这样的:要给前端提供一个查询的接口,而在此接口中要去调用远端的10几个ESB接口,由于要调用的远端ESB接口数量过多导致此接口响应异常缓慢,甚至于达到了十几秒钟。现在要想办法去优化这个接口。这十几个远端的ESB接口不用关心调用顺序,不需要互相依赖。 针对于这个问题,我其实第一反应想到的是采用...

2020-05-07 19:37:40 1243

原创 ApplicationContext?SpringBoot中静态方法如何引用非静态对象?

最近在项目开发中遇到了一个问题:在SpringBoot项目中静态方法的上下文如何引用非静态的对象?先来说项目中的需求:项目中要开发一个工具类用于调用远端网关的Http接口,在调用网关接口之前需要先获取一个Token令牌(我们项目中获取Token令牌的方式是由进程去请求、检查、更新令牌,然后将有效的令牌存在Redis缓存中)。成功的获取到Token之后再拿着有效的Token去请求远端的网关H...

2020-04-13 15:42:47 2102

原创 Java标识接口Serializable

对于Java序列化的认知,我一直停留在最浅显的认知上(把那个要序列化的类实现 Serializbale接口就可以了)。但是我工作也将近有两年了,见到Serializbale 的次数越来越多,我便对它产生了浓厚的兴趣。最近也是因为疫情的原因,刚刚复工没多久,工作不饱和,有点时间研究研究了。关于Java序列化:Java 序列化是早在JDK 1.1 时就已经引入的一组开创性的特性,用于将...

2020-03-10 12:01:32 272

转载 面试中被问到HashMap的结构,1.7和1.8有哪些区别?这篇做深入分析!

一、真实面试题之:Hashmap的结构,1.7和1.8有哪些区别不同点:(1)JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1.7是用单链表进行的纵向延伸,当采用头插法时会容易出现逆序且环形链表死循环问题。但是在JDK1.8之后是因为加入了红黑树使用尾插法,能够避免出现逆序且链表死循环的问题。(2)扩容后数据存储位置的计算方式也不一...

2020-02-25 17:04:41 1754 1

原创 Java异常try...catch...finally与IllegalMonitorStateException异常原因

1、异常分类 JDK中定义了一套完整的异常机制,所有异常都是Throwable的子类,分为Erro和Exception。Error是一 种非常特殊的异常类型,它的出现标识着系统发生了不可控的错误,例如StackOverflowError、OutOfMemoryError。针对此类错误,程序无法处理,只能人工介入。Exception 又分为checked异常( 编译时异常)和unchec...

2019-12-13 18:20:23 461

转载 Redis的这八个问题,验证你是否精通!

1、为什么使用Redis分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。回答:如下所示,分为两点(一)性能如下图所示,我们在碰到需要执行耗时特别久,且结果...

2019-10-18 11:00:06 233

转载 SQL 性能优化梳理

1 基本概念简述1.1 逻辑架构 第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析并优化sql,生成最终的执行计划并执行 第三层:存储引擎,负责数据的储存和提取 1.2 锁数据库通过锁机制来解决并发场景-共享锁(读锁)和排他锁(写锁)。读锁是不阻塞的,多个客户端可以在同一时刻读取同一个资源。写锁是排他的,并且会阻塞其他的读锁和写...

2019-10-10 09:38:57 156

原创 RESTful规范 GET请求、POST请求、PUT请求、DELETE请求?

RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。RESTFul规范:一.http动词:GET(SELECT):从服务器取出资源(一项或多项)POST(CREATE):在服...

2019-09-19 11:24:59 10770

原创 利用Navicat导入Excel数据到数据库

一、工具准备Navicat数据库管理工具。 execl表格和数据,execl表格中的数据格式为:第一行表头为数据库字段,其余为数据 二、数据导入 1、打开Navicat工具,并找到要导入的目标数据库,右键鼠标选择“导入向导” 2、在弹出页面中选择导入文件格式为Execl文件,然后点击“下一步” 3、在弹...

2019-08-30 10:11:55 6520 4

原创 MySQL索引的介绍、建立、使用

什么是索引索引(在MySQL中也叫做“键(key)") 是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要。在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但当数据量逐渐增大时,性能则会急剧下降。索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有...

2019-08-14 18:51:28 138

原创 优化Java锁性能的方法有哪些?

锁是最常见的同步方法之一。在高并发环境中,激烈的锁争用会导致程序性能下降,因此有与锁相关的一些性能问题,以及避免死锁、降低锁粒度和锁分离等一些注意事项都是有必要讨论和研究清楚的。在单核CPU上使用并行算法的效率通常低于原来的串行算法。而并行计算之所以能够提高系统的性能,并不是因为它“工作量小”,而是因为它能够更合理地调度任务,充分利用各个CPU资源。因此,合理的组合可以最大限度地提高...

2019-07-30 15:26:14 536 1

原创 正确认识MVC和三层架构之间的区别和联系

这里首先要明确的一点是:MVC不等于三层架构,我从学习到工作中很多人经常都会说的一句话就是MVC三层架构,这其实是一种错误的说法,正确的说法应该是MVC和三层架构。看MVC解释: M是指mode(模型)也就是每天都在操作使用的JavaBean; V是指view(视图),如使用的前端表现页面JSP 等; C是指Control...

2019-07-10 11:38:50 371

原创 线程池中如何寻找堆栈?如何打印出堆栈的异常信息?

先由一个案例引入,来解释为什么要寻找线程池中的堆栈。请看下面的一个简单案例,有一个Runable接口,用它来计算两个数的商。public class DivTask implements Runnable { int a,b; public DivTask(int a, int b) { this.a = a; this.b = b;...

2019-06-27 17:07:07 1327

原创 Java线程池的实现

首先,对于什么是线程池?使用线程池的好处是什么?都没有必要做过多的解释。一、线程池执行流程直接来看线程池的执行流程原理:二、JDK对线程池的支持 为了能够更好的控制多线程,JDK提供了一套Executor框架,帮助开发人员有效的进行线程控制,其本质就是一个线程池,核心成员如下,他们都在java.util.concurrent包下,也是jdk并发包的核心类。图...

2019-06-11 16:25:12 184

原创 Java并发包的简单介绍

同步容器类1、VectorVactor和ArrayList相同的是也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。从底层源码中可以看出,Vector的add、remove等方法都加了关键字synchronized,因此它是线程安...

2019-06-06 13:03:36 206

原创 Spring Data JPA的自动更新,为什么会自动更新?如何避免自动更新?

公司的项目后台架构是SpringBoot + Spring Date JPA,采用MySQL数据库。在工作刚开始时就遇到了一个奇怪的现象。在采用Date JPA查询完数据库之后,若改变了查询出的对象属性,那么数据库就会自动更新。比如查询出一个studentPO的name为“小明”,然后进行了一步studentPO.setName("小红")操作,再返回给前台,此时的数据库中的这个studentPO...

2019-06-01 16:05:04 12339 11

原创 IntelliJ IDEA 的常用设置和快捷键操作--享受高效开发

大学阶段使用的是eclipse,工作后开始接触idea,在使用了一段idea之后,完全被它的强大之处深深吸引,尤其是它的代码智能提示补全。此外它的debug模式和插件安装上用起来也是非常的方便。总之idea的合理使用将会大大的提高程序员的开发效率。最近有空,就把idea的常规操作设置总结了一下。一.IntelliJ IDEA介绍与常规设置IDEA 全称 IntelliJ I...

2019-05-29 21:25:45 2236

空空如也

空空如也

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

TA关注的人

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