自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 问答 (2)
  • 收藏
  • 关注

原创 spring是怎么解决循环依赖的?

一、什么是循环依赖?在搞清楚spring是怎么解决循环依赖问题之前,我们需要先了解老生常谈的循环依赖指的是什么?这里举一个例子:@Servicepublic class A{ @Autowired private B b;}@Servicepublic class B{ @Autowired private A a;}复制代码上面的例子中我们声明了两个Bean,分别是A和B,但是在Bean A中注入了B,在Bean B中又注入了A。我们知道sp

2021-06-20 18:06:01 161 1

原创 数据库自增id用完了会怎么样?

来源起因是在沸点摸鱼的时候看到这个问题,觉得挺有意思的。虽然做开发也好几年了,但是从来没有想过这个问题,仔细想了想,好像也情有可原。以我们最常用到的mysql为例,它支持最大的整形是bigint,bigint在mysql中占8个字节,也就是说它的上限最大值是2^64,以这个数量级来说,早已经超出了mysql单机单表的处理能力。正常来说,当mysql的数据量达到千万级别,性能就会开始下降,需要开始着手优化库表,其中最大的性能瓶颈应该要属sql查询。即使做了一系列优化之后,但是当数据量达

2021-06-19 10:59:52 431

原创 windows下强制关闭某端口占用的进程命令

记录一下,idea或者eclipse总是会出现关闭服务,重启端口被占用的问题。按如下操作关闭该端口进程即可:netstat -ano | findstr <端口号>taskkill /F /pid <查询到的pid>

2021-01-18 16:33:29 407

原创 Mybatis自动生成实体类和mapper

mybatis-generator-config.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"&.

2020-12-29 13:33:17 626

原创 idea多行批量编辑的实用小技巧

每次要在多行批量编辑修改代码或者文本的时候,总是需要用到的idea的快捷方式,我知道的主要有两种方式,记录分享一下:shift+alt 快捷键组合加上鼠标点击每行需要修改的起始位置(这个适合数据量比较少的情况) 鼠标中键可以拉选多行,然后就可以做批量的编辑和修改了(数据量大的情况下真的很实用)2020真的是很糟心的一年,在国庆回来后有点迷失了自己。接下来希望可以找回初心~圣诞快乐~...

2020-12-25 10:12:33 9099 1

原创 jvm逃逸分析

1.引言在java的编译体系中,一个java源代码变成计算机可执行的机器指令的过程中,一般需要两次编译。第一次编译就是通过javac命令,把java文件编译成jvm可以识别的class文件。第二次编译就是把class文件翻译成字节码指令,让计算机识别。在第二次编译中,jvm通过解释字节码将其翻译成对应的计算机可执行的机器指令的过程中,逐条读入,逐条解释翻译,很显然,通过解释执行,必然比直接执行二进制字节码文件的速度慢很多。这就是传统的jvm解释器的功能以及弊端。为了解决这种效率问题,所以引入了J

2020-12-16 14:46:21 103

原创 关于Mysql的一点整理

Myisam是5.1版本前默认的存储引擎支持全文检索,压缩,空间函数不支持事务和行级锁innodb是基于聚簇索引建立的支持事务,外键,并通过mvcc来支持高并发索引和数据存储在一起innodb 一张表只能有一个聚簇索引 聚簇索引 索引和数据存储在一起 二级索引存储的是主键id的值 myisam保存的是数据地址回表查询innodb 主键索引保存了数据,所以不存在回表问题。myisam 主键索引和二级索引都一样,都是保存了数据地址,所以不存在回表问题。innobd 二级索引只保..

2020-09-10 10:25:06 141

原创 SQL判断某条记录是否存在

业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的SQL及代码写法如下:SQL写法:SELECTcount(*)FROMtableWHEREa=1ANDb=2Java写法:intnums=xxDao.countXxxxByXxx(params);if(nums>0){//当存在时,执行这里的代码}else{//当不存在时,执行这里的代码}更好的方案:SQL写法:SE...

2020-08-24 20:36:21 8953

原创 LeetCode每日一题 合并两个有序链表

合并两个有序链表description将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4thought两个有序链表的排序,实际上可以看成一个单链表使用归并排序的最后一个环节:“将两个排好序的子序列合并为一个子序列:每次都是从未比较的两个子序列的最小值中选出一个更小值”。codepubl

2020-08-23 19:47:46 120

原创 LeetCode每日一题 有效的括号

有效的括号description给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。示例 1:输入: "()" 输出: true示例 2:输入: "()[]{}" 输出: true示例 3:输入: "(]" 输出: false示例 4:输入: "([)]" 输出: false示例 5:输入:

2020-08-22 18:02:32 136

原创 LeetCode每日一题 最长公共前缀

最长公共前缀Description编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入: ["flower","flow","flight"] 输出: "fl" 示例 2:输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。 说明:所有输入只包含小写字母 a-z 。thought首先考虑几个特殊情况,数组长度为0肯定是返回空字符串了。数组长度为1的时候因为没有参照对象,所.

2020-08-21 22:52:23 144

原创 如何手动关闭spring的循环依赖

了解过spring的小伙伴应该都知道spring默认是支持循环依赖的,那么我们怎么手动关闭spring的循环依赖呢?话不多说,先看源码:protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args) throws BeanCreationException { // Instantiate the bean. BeanW

2020-08-16 15:08:02 1788

原创 冒泡排序

又是一个阳光明媚的周末,一起来写一个冒泡排序吧。1.concept冒泡排序(Bubble Sort)是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”.

2020-08-15 11:12:58 135

原创 关于IDEA升级到2020之后Gradle构建spring源码失效的问题

前段时间看到网上很多人升级了idea到2020版本了,自己手痒也跟着换到了2020版本,个人也很喜欢里面新增的禅模式沉浸式开发以及mono字体。整个屏幕中只有代码,很推荐大家更新使用。不过昨天打开我的之前早在idea2018版本中已经使用gradle构建好的spring源码时,发现2020版本的gradle配置已经发生了改变,整个项目需要重新构建。...

2020-07-27 21:22:54 678

原创 Map中的put、compute、putIfAbsent、 computeIfAbsent方法的区别

1. put方法put覆盖并返回旧值,如果不存在则返回nullpublic static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("a","A"); map.put("b","B"); String v = map.put("b","v"); System.out.println(

2020-07-22 22:01:28 585

原创 typora常用语法

最近在学习使用typora,分享一下常用语法1. 段落1.1 标题创建标题是最简单的,只需要输入 # 之后敲一个空格,再输入你的标题即可,一个 # 就是一级标题,两个就是二级标题,一次类推。值得注意的是创建一级标题后下方会自动生成一个分割线。1.2 段落段落其实就相当于正文格式,并没有什么语法,但是在Typora里,段落之间是有多个空行隔开的,如果你觉得间距实在太大了,你可以同...

2020-02-19 08:54:06 1223

原创 ArrayList遍历删除指定元素

第一种方式,基本原理是,每次list删除元素后,后面的元素都要往前移动一位,就相当于i多加了1,remove后继续遍历就会错过一个元素,所以就需要代码中的i--,抵消remove后,后面元素前移一位的影响 for (int i = 0; i < list.size(); i++) { if(list.get(i).equals("a")){ ...

2019-12-23 22:11:45 225

原创 ArrayList和LinkedList的区别

简单区别:1.ArrayList是实现了基于动态数组的数据结构,LinkedList是基于双向链表的数据结构。2.ArrayList实现了RandomAccess,数组支持随机访问, 查询速度快, 增删元素慢;LinkedList 没有实现 RandomAccess 接口,链表支持顺序访问, 查询速度慢, 增删元素快;...

2019-12-22 09:14:17 90

原创 springboot写一个自己的starter

@SpringBootApplication注解中主要包含@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解。其中最重要的是@EnableAutoConfiguration注解,借助AutoConfigurationImportSelector,@EnableAutoConfiguration可以帮助Spri...

2019-12-16 19:28:24 544

原创 rabbitmq面试问题

rabbitmq如何保证消息不丢失1.生产者弄丢了数据开启comfirm机制2.mq弄丢了数据开启mq持久化机制3.消费者弄丢了数据ack机制rabbitmq如何保证幂等性得结合业务来思考1.比如要往数据库写数据,先根据主键查一下,如果已经存在,就别插入了,upadte一下就好了2.如果是写redis,每次都是set,天然幂等性3.如果不是上面两个场景,那就生产者每次发送数...

2019-12-13 09:44:35 280

原创 mybatis插入语句返回自增id

<insert id="cusInsertSelective" useGeneratedKeys="true" keyProperty="id" parameterType=""/>插入useGeneratedKeys="true" keyProperty="id"即可返回自增id

2019-12-10 12:41:48 91

原创 @SpringCloudApplication注解

该注解相当于加了@springbootApplication,@EnableDiscoveryClient,@EnableCircuitBreaker

2019-12-08 22:01:56 709

原创 Hystrix比trycatch好在哪里?

关于面试中被问到的Hystrix比trycatch好在哪里?1.使用了滑动时间窗口提供断路2.提供的度量和仪表板开箱即用,可以帮助您窥视您的系统和从属连接3.使用不同的线程池实现BulkHead 仓壁模式4.健康检查能力.它提供了一个运行状况监视API的运行状况检查类...

2019-12-08 20:56:03 436

原创 Hystrix工作流程

1.当调用出现错误时,开启一个时间窗口。(10s)2.在这个时间窗内,统计调用次数是否达到最小请求数?如果没有达到,则重置统计信息,回到第一步。如果达到最小请求数,则统计失败请求的占比是否达到阈值,如果达到则跳闸,没有达到,则重置统计信息,回到第一步。3.如果跳闸,会开启一个活动时间窗口(默认5秒),每隔5秒,hystrix会让一个请求通过,到达那个有问题的服务,看是否调用成功。如果成...

2019-12-08 20:51:58 143

原创 java线程的几种状态

public enum State { /** * 新建状态,线程对象已经创建,但尚未启动 */ NEW, /** * 就绪状态,可运行状态,调用了线程的start方法,已经在java虚拟机中执行,等待获取操作系统资源如CPU,操作系统调度运行。 */ RUN...

2019-12-08 20:39:25 82

原创 基于redis实现分布式锁

package com.kuang.springcloud.util;import jdk.internal.org.objectweb.asm.tree.TryCatchBlockNode;import org.springframework.dao.DataAccessException;import org.springframework.data.redis.connection...

2019-12-03 21:44:12 115

原创 redis过期删除策略

redis中zset的应用场景排行榜立即删除:在设置键的过期时间的同时,创建一个定时器,让定时器执行对键的删除操作惰性删除:每次取的时候先判断 expires 对象里面的键是否已经过期,如果过期,则删除键,否则,返回该键定期删除:每隔一段时间,程序对数据库遍历检查一遍,然后删除过期的键定时删除占用过多cpu时间,影响服务器的响应时间和吞吐量。惰性删除浪费过...

2019-11-28 20:01:01 356

原创 面试中问到的java程序中的加减乘除

原来浮点数是不适合精确计算的,原因是计算机里面数的计算都是二进制计算的,我们其实输入的十进制数,有些十进制数转换成二进制是可以精确转换,而有些转换则不是精确转换,得到的是一个最靠近它的数,所以这里面就存在一个误差。另外,如果浮点数不进行计算时,在十进制里面浮点数能正确显示,如果浮点数参与了计算,那么浮点数二进制与十进制间的转换过程就会变得不可而知,变得不可逆。那么要想使得到的结果精确,可以使用...

2019-11-19 22:29:35 133

原创 关于java中的锁

问:知道哪些锁?乐观锁和悲观锁。问:乐观锁有哪些?悲观锁有哪些?cas是乐观锁,synchronize和Lock都是悲观锁问:synchronize和Lock的区别Lock是一个接口,而synchronized是关键字。synchronized会自动释放锁,而Lock必须手动释放锁。Lock可以让等待锁的线程响应中断,而synchronized不会,线程会一直等待下去。通过Lo...

2019-11-19 22:01:54 98

原创 面试被问到的关于springboot

springboot的特性有哪些?1.快捷搭建spring的应用2.starter简化构建依赖配置3.自动配置4.零xml配置starter的作用可以说一下吗?1.starter帮我们引入相关的jar依赖2.starter自动完成bean的配置(内部通过@configuration和@Bean来实现注入)如何去掉springboot内置的tomcat...

2019-11-19 21:41:04 257

原创 java面试遇到的问题(springboot)

1.springboot内置了哪些容器?默认tomcat,还有undertow以及jetty。2.如何替换默认容器?主要是修改pom文件的依赖。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starte...

2019-11-19 07:54:32 257

原创 线程池面试相关

你们项目中是如何创建线程池的呢?new ThreadPoolExcutor();ExcutorService service = Excutors.newFixPoolExcutor(n);ExcutorService service = Excutors.newCachePoolExcutor();ExcutorService service = Excutors.newSingle...

2019-11-18 07:42:55 129

原创 常见的sql优化

其实常见的sql优化,就是保证索引不失效1.like模糊查询时,去掉前面的%2.where条件左边不加函数运算3.尽量不使用or来连接,可以换成union all来联合查询实现4.尽量不使用select *5.not in替换成not exist6.避免使用<>,!=7.避免在索引列上使用is null , is not null8.order by语句...

2019-11-17 14:35:57 97

原创 如何保证接口幂等性?

最近面试被问到的关于如何保证接口的幂等性问题:首先,幂等需要唯一的业务单号来保证。以支付业务为例,在不考虑并发的情况下,实现幂等只需要两步:1.判断订单是否已经支付过了,2.如果已经支付成功则返回成功。待支付则进行支付流程,然后修改支付状态。高并发下可能会出现问题,则需要将查询和更改操作加锁。1.乐观锁用version来实现乐观锁UPDATE tab1 SET col...

2019-11-17 13:40:01 382

原创 jvm面试

1.jvm相关面试(1)双亲委托机制:就是当一个类加载器加载一个类时,他首先会委托给自己的父类加载器去加载这个类,如果这个父类加载器还存在父类加载器,就继续向上委托,直到顶层的启动类加载器,如果父类加载器能够完成类加载,则成功返回。如果父类加载无法完成加载,那么子类加载器才会尝试自己去加载。java默认有三种类加载器,分别是启动类加载器、扩展类加载器和应用程序类加载器。bootstra...

2019-11-17 10:54:55 121

原创 spring ioc面试怎么答?

什么是ioc?ioc,Inversion of control。控制反转,即原来需要我们手动创建的对象交给spring来创建。对象的控制权在我们手上,引入spring后控制权反转到ioc容器。ioc容器是spring的核心容器,主要是完成了对象的创建和依赖的管理注入等等。什么是DI?DI,dependency injection。依赖注入,就是在容器运行期间,动态地将某种依赖关系注...

2019-11-13 10:18:34 258

原创 redis淘汰策略

如何保证redis中的数据都是热点数据?1.volatile lru 从已设置过期时间的数据集中选择最近最少使用的数据淘汰2.volatile ttl 从已设置过期时间的数据集中选择即将过期的数据淘汰3.volatile random 从已设置过期时间的数据集中选择任意的数据淘汰4.allkeys lru 从数据集中选择最近最少使用的数据淘汰5.allke...

2019-11-12 14:24:16 117

原创 常用框架之Zookeeper面试(1)

1.Zookeeper是什么?Zookeeper = 文件系统 + 通知机制Zookeeper是一个为分布式应用提供协调服务的Apache开源项目。Zookeeper提供一个多层级的节点命名空间(节点称为znode)。与文件系统不同的是,这些节点都可以设置关联的数据,而文件系统中只有文件节点可以存放数据而目录节点不行。Zookeeper为了保证高吞吐和低延迟,在内存中维护了这个树状的目录结...

2019-11-06 10:38:25 85

原创 spring面试之spring事务的隔离级别

spring事务共有五个隔离级别:ISOLATION_DEFAULT默认隔离级别 使用数据库的默认隔离级别 2. ISOLATION_READ_UNCOMMITTED最低隔离级别,它允许另一个事务可以看到这个事务还未提交的数据。可能产生脏读、幻读、不可重复读 3. ISOLATION_READ_COMMITTED保证一个事务修改的数据修改后才能被另一个事...

2019-11-05 22:33:42 848

原创 常用框架面试之spring

1.说一下spring bean的生命周期BeanDefinition-------->实例化----->属性赋值-------> 初始化------------>销毁spring启动,查找并加载需要被spring管理的bean,进行bean的实例化 bean的属性注入 如果实现了BeanNameAware接口,会调用setBeanName(String b...

2019-11-05 22:16:43 96

空空如也

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

TA关注的人

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