自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Cloud常见面试题

服务熔断,当服务A调用服务B时,如果此时服务B不可用,那么上游的服务A为了保证自己不受影响,就切断调用服务B,防止发生服务雪崩,直到B服务恢复;提前做好一种兜底措施,比如返回假的数据,或者记录数据信息到数据库、redis、文件中,后续进行补救,直到B服务恢复;服务降级,当系统负载过高时,对非核心的业务服务进行关闭,来保证核心业务的正常运行;关闭某些不重要的服务,或者拒绝低优先级应用的服务请求,保证核心应用正常工作;相同: 目的相同,都是为了保证服务的可用性,防止系统整体负载过大甚至崩溃;

2024-09-14 22:33:03 1044

原创 SpringBoot常见面试题

AutoConfigurationImportSelector组件SpringFactoriesLoader读取(1)META-INF/spring.factories 或者(2)org.springframework.boot.autoconfigure.AutoConfiguration.imports 中的所有自动配置类;条件注解进行过滤 ImportSlector接口实例化Bean对象,放入Spring的IOC容器中;

2024-09-14 19:01:34 892

原创 Mysql常见面试题

回表是指根据索引查询到的主键值再去访问主键索引,从而获取完整的数据记录。所查找的字段刚好是索引,SQL只需要通过索引就可以返回查询所需要的数据,而不必通过二级索引查到主键之后再去查询主键索引获取数据。索引下推(Index Condition Pushdown,简称ICP),是MySQL 5.6 版本新增的特性,它的主要作用是减少回表查询次数,提高查询效率;

2024-09-13 18:24:40 801

原创 ThreadLocal常见面试题

一个线程开始运行的时候,通过set方法会把值放入threadLocals这个变成中,他的类型是ThreadLocalMap对象,里面是Entry数组,每一个Entry是键值对形式,key就是ThreadLocal的引用,value就是我们set进去的值,这个数组的初始大小是16,达到阈值的时候会进行扩容(阈值=16*2/3)

2024-09-10 20:33:38 574

原创 HashMap常见面试题

定义:对于不同的关键字,可能得到同一个哈希地址,即key1≠key2,而 f(key1)=f(key2),对于这种现象我们称之为哈希碰撞,也叫哈希冲突;一般哈希冲突只能尽量地减少,无法完全避免,因为关键字在理论上可以有无限多个,而用来存储这些关键字的数组容量是有限的,所以就必然会导致了哈希冲突,只能通过选择合适的哈希函数来降低哈希冲突发生的概率;1、开放定址法;开放定址法是指当发生哈希冲突的时候,按照某种方法继续探测哈希表中的其他存储位置,一直找到空位置为止;

2024-09-10 18:32:15 1377

原创 Mybatis常见面试题

请求会先查询数据库,然后写道一级缓存,再一级缓存提交或关闭的时候会写到二级缓存,之后的请求会先查询二级缓存,如果没有再去查找一级缓存,最后查找数据库,二级缓存在不同的sqlsession中也是共享的,做增删改操作都会删除都会导致一级缓存和二级缓存清空,每个sqlsession有独立的一级缓存,和跨sqlsession的二级缓存。1、一级缓存是SqlSession级别的缓存, 通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会再从数据库查询;

2024-09-09 17:10:30 529

原创 多线程常见面试题

线程在处理IO的时间段内不会占用CPU,这时就可以将CPU交出给其它线程使用,因此在IO密集型任务的应用中,可以多配置一些线程;(2)int maximumPoolSize, 线程池中允许的最大线程数,当核心线程全部繁忙且任务队列存满之后,线程池会临时追加线程,直到总线程数达到maximumPoolSize这个上限;(3)long keepAliveTime, 线程空闲超时时间,如果一个线程处于空闲状态,并且当前的线程数量大于corePoolSize,那么在指定时间后,这个空闲线程会被销毁;

2024-09-08 18:46:39 1061

原创 RabbitMQ常见面试题

死信队列即DLX,全称为Dead-Letter-Exchange,翻译为:死信交换机。当一个消息在队列中变成死信 (dead message) 之后,它能被重新发送到另外一个交换机中,这个交换机就是DLX,绑定到DLX的队列就称为死信队列;死信队列本身也是一个普通的消息队列,可以通过设置一些参数将其设置为死信队列;死信队列是一个用于存放无法被消费的消息的队列,这些消息被称为死信,死信队列可以避免消息一直被消费却无法消费成功的情况;RabbitMQ导致死信的几种原因:

2024-09-08 10:58:26 891 1

原创 spring常见面试题

答案:不是线程安全的;但在实际开发中,单例Bean一般都以无状态的方式来使用,即线程之间的操作不会对Bean的成员执行除查询以外的操作,所以这个单例Bean又可以说是线程安全的。不失效,另一个方法在一个新的bean,spring会开启一个代理去访问,此时相当于一个新的入口,aop会判断有没有事务注解,有的话就会再调用前开启事务,调用后提交事务或者回滚。4、标注了事务注解的public方法、protected方法、默认无修饰方法、private方法,final方法,static方法;

2024-09-07 17:19:44 414 1

原创 Redis常见面试问题

②考虑线程安全问题:如果此时刚好缓存key过期等其他问题导致缓存失效了,当有线程去查询缓存肯定是未命中然后去查数据库,然后另一个线程刚好在更新数据库,紧接着删除了缓存然后主线程才做的写入缓存操作,也会导致缓存与数据库不一致。高并发条件下,对于热点数据(一般地,80%的情况下都是访问某些热点数据,也就是访问某些热点key,其他key访问会比较少),当数据失效的一瞬间,或者刚开始时缓存中还没有对热点数据进行缓存,所有请求都被发送到数据库去查询,数据库被压垮;缺点:缓存的热点数据是静态的,得不到更新;

2024-09-07 16:44:37 1376

原创 Vue3尚硅谷张天禹笔记

修改名字

2024-03-27 19:43:29 1660 2

原创 Java中CompletableFuture 异步编排的基本使用

总结:一般用handle,因为whencomplete如果异常不能给定默认返回结果,需要再调用exceptionally,而handle可以该方法作用:获得前一任务的返回值【自己也可以是异步执行的】,也可以处理上一任务的异常,调用exceptionally修改前一任务的返回值【例如异常情况时给一个默认返回值】而handle方法可以简化操作。

2024-01-10 23:00:55 1116

原创 Java实现CR-图片文字识别功能(超简单)

OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程方案说明百度OCR收费Google维护的开源OCR引擎,支持Java,Python等语言调用Tess4J封装了Tesseract-OCR ,支持Java调用。

2024-01-10 21:56:36 3189

原创 docker安装ElasticSearch

将"http.host: 0.0.0.0"(可以被任何的机器访问)的配置写入elasticsearch.yml中(注意冒号后面的空格)# 这里-e是自己的elasticsearch服务地址(这里的地址一定要改为自己虚拟机的地址)#运行容器的命令 9200端口用于发送请求使用 9300端口用于集群中节点中的通信使用。#初始占用64m,最大占用512m(不指定,ES会占用所有的内存)http://虚拟机的ip:9200/# 递归更改权限,es需要访问。#ES的配置文件存放的位置。#访问对应的网址查看服务。

2023-12-27 18:44:33 1066

原创 实现阿里云oss云存储,简单几步

虽然平常学习用的不多,但是用的时候再去找官方文档,也很繁琐,不如直接整理以下,方便粘贴复制,本文介绍两种图片上传方式①普通上传②服务端签名直传。

2023-12-26 13:50:59 742 2

原创 docker安装Nacos和Rabbitmq

vim /mydata/nacos/init.d/custom.properties #修改配置文件。查看部署的mq容器id,在通过 docker exec -it 容器id /bin/bash。https:xx.xx.xx.xx:8848 账号:nacos 密码:nacos。首先需要拉取对应的镜像文件:(切换版本加上对应版本号即可,默认最新版)db.user=user #用户名。

2023-12-24 21:18:50 1322

原创 docker安装mysql和redis

v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机。-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机。-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机。-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码。-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。skip-name-resolve:跳过域名解析。

2023-12-23 17:18:56 505

原创 服务器linux安装docker

Docker 安装文档:https://docs.docker.com/install/linux/docker-ce/centos/您可以通过修改 daemon 配置文件/etc/docker/daemon.json 来使用加速器。针对 Docker 客户端版本大于 1.10.0 的用户。设置 docker repo 的 yum 位置。安装 docker,以及 docker-cli。1、卸载系统之前的 docker。2、安装 Docker-CE。阿里云,容器镜像服务。

2023-12-23 15:58:18 628

原创 教你如何实现IP归属地功能

随着网络的发展先在抖音、知乎、快手、小红书等这些平台已经上线了“网络用户显示 IP 的功能”,境外用户显示的是国家,国内的用户显示的省份,而且此项显示无法关闭,归属地强制显示。今天这篇文章,就用几分钟的时间来讲述一下这个功能是怎么实现的。

2023-12-23 15:50:22 1183 1

原创 用了Hutool才发现不用再封装各种 Util 工具类了

今天给大家推荐一个非常好用的Java工具类库,企业级常用工具类,基本都有,能避免重复造轮子及节省大量的开发时间,非常不错,值得大家去了解使用。谐音 “糊涂”,寓意追求 “万事都作糊涂观,无所谓失,无所谓得” 的境界。是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以 “甜甜的”。

2023-12-12 14:13:55 559

原创 生成二维码:spring boot 结合ZXing

QR码,全名Quick Response码,是一种二维码(2D barcode)的类型,最早由日本公司Denso Wave于1994年开发。它是一种能够存储各种数据类型的矩阵二维条码,通常以黑色模块和白色背景的方式呈现。QR码可以存储文本、URL、联系信息、地理位置等多种信息,因此在移动设备、广告传播、商品标识等领域广泛使用。ZXing,全名为"Zebra Crossing",是一个开源的Java库,用于二维码的生成和解析。它是一个强大的工具,可以用于生成QR码以及解析包括QR码在内的多种二维码格式。

2023-12-05 12:12:10 511

原创 时间格式化工具类

获取当前时间:获取系统当前的日期和时间。格式化时间:将日期对象或时间戳格式化为指定的时间格式。解析时间:将字符串时间解析为日期对象。获取时间差:计算两个日期之间的时间差,包括天数、小时数、分钟数等。判断时间区间:判断指定时间是否在给定的时间区间内。判断闰年:判断指定年份是否为闰年。获取年份、月份、星期等:从日期对象中提取年份、月份、星期等信息。

2023-11-30 16:37:54 828

原创 公共字段自动填充(Mybatis)

4.公共字段自动填充相关方法常量名称。3.设置枚举(数据库操作类型)

2023-09-05 16:46:18 320

原创 Spring Task(定时任务框架)

Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。在线Cron表达式生成器。

2023-09-05 14:41:40 323 2

原创 扩展spring mvc框架的消息转换器(日期格式转换)

Spring MVC框架 继承WebMvcConfigurationSupport 重写extendMessageConverters方法。

2023-08-27 14:40:43 241

原创 是时候优雅的告别NullPointException了

优雅的处理NullPointException,对空指针说再见。

2023-06-14 20:30:04 96

原创 CAP定理

一致性(Consistency):等同于所有节点访问同一份最新的数据副本,在同一时刻是否同样的值。(范围是分布式系统中的所有数据备份,但是一般描述的对象针对于主从存储设备)可用性(Availability):每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据(该特性一般作用于集群环境)分区容错性(Partition tolerance):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

2023-05-17 20:26:58 88

原创 Redis持久化 RDB和AOF原理

Redis有两种持久化方案:RDB持久化AOF持久化。

2023-05-13 19:52:19 82

原创 Stream流的高级玩法

中给大家讲了Stream的前半部分知识——包括对Stream的整体概览及Stream的创建和Stream的转换流操作,并对Stream一些内部优化点做了简明的说明。虽迟但到,今天就来继续给大家更Stream第二部分知识——终结操作,由于这部分的API内容繁多且复杂,所以我单开一篇给大家细细讲讲,我的文章很长,请大家忍耐一下。正式开始之前,我们先来说说聚合方法本身的特性(接下来我将用聚合方法代指终结操作中的方法):聚合方法代表着整个流计算的最终结果,所以它的返回值都不是Stream。

2023-05-13 19:39:11 299

原创 在浏览器中输⼊www.baidu.com后执⾏的全部过程

2、在客户端的传输层,把HTTP会话请求分成报⽂段,添加源和⽬的端⼝,如服务器使⽤80端⼝监听客 户端的请求,客户端由系统随机选择⼀个端⼝如5000,与服务器进⾏交换,服务器把相应的请求返回给 客户端的5000端⼝。然后使⽤IP层的IP地址查找⽬的端。4、客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发 送ARP请求查找⽬的地址,如果得到回应后就可以使⽤ARP的请求应答交换的IP数据包现在就可以传输 了,然后发送IP数据包到达服务器的地址。

2023-05-02 22:02:48 166

原创 一次完整的HTTP请求所经历的七个步骤

在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。建立TCP连接->发送请求行->发送请求头->(到达服务器)发送状态行->发送响应头->发送响应数据->断TCP连接。

2023-04-27 22:45:59 153

原创 聊聊spring事务失效的12种场景

在使用@Transactional注解声明事务时,有时我们想自定义回滚的异常,spring也是支持的。可以通过设置参数,来完成这个功能。@Slf4j@Service如果在执行上面这段代码,保存和更新数据时,程序报错了,抛了SqlException、DuplicateKeyException等异常。而BusinessException是我们自定义的异常,报错的异常不属于BusinessException,所以事务也不会回滚。

2023-04-26 20:48:04 164

原创 封装Redis工具类

方法2:将任意Java对象序列化为json并存储在string类型的key中,并且可以设置逻辑过期时间,用于处理缓。方法1:将任意Java对象序列化为json并存储在string类型的key中,并且可以设置TTL过期时间。方法3:根据指定的key查询缓存,并反序列化为指定类型,利用缓存空值的方式解决缓存穿透问题。方法4:根据指定的key查询缓存,并反序列化为指定类型,需要利用逻辑过期解决缓存击穿问题。在ShopServiceImpl 中。

2023-04-25 19:55:27 292

原创 认识Redis缓存,缓存穿透、缓存雪崩以及缓存击穿的解决方案

缓存是一种存储数据的技术,可以在需要时快速访问和获取数据。通常情况下,缓存是位于内存中的,因此它的访问速度非常快。缓存的目的是减少对慢速数据存储(如硬盘或数据库)的访问,从而提高应用程序的性能和响应速度。缓存通过将常用或者热点数据存储在内存中,从而加快数据的访问速度,减轻数据库或者其他慢速存储系统的负担。缓存可以被应用于各种不同的场景,例如Web应用程序中的页面缓存、查询结果缓存,或者应用程序中的对象缓存等等。缓存技术已经成为提高应用程序性能和可伸缩性的重要手段之一。

2023-04-24 14:15:26 149

原创 [Java基础]全面了解Java关键字 this static final等等

关键字是里事先定义的,有特别意义的,有时又叫,还有特别意义的变量。Java的关键字对Java的有特殊的意义,他们用来表示一种,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。

2023-04-13 11:51:24 80

原创 SpringBoot集成knife4j Swagger

前后端分离开发模式中,api文档是最好的沟通方式。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。1、及时性 (接口变更后,能够及时准确地通知相关前后端开发人员)2、规范性 (并且保证接口的规范性,如接口的地址,请求方式,参数及响应格式和错误信息)3、一致性 (接口信息一致,不会出现因开发人员拿到的文档版本不一致,而出现分歧)4、可测性 (直接在接口文档上进行测试,以方便理解业务)

2023-04-11 18:51:17 334

原创 这篇万字长文让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 流用法和原理

现在大部分的在行项目使用的都是Java8,因为它足够稳定,能够满足现有的需求开发,基本没有太多的bug和性能问题,而且,在发布的众多版本中,只有java8、java11、java17是长期支持版本,Oracle每三年选择一个版本提供长期支持和更新,其他版本仅支持六个月。新版本一出,就会放弃老版本的技术支持,这也是很少有人使用9~14版本的主要原因。开发人员在升级Java 8时一般会直接升级到Java 11,一般来说,人们不会使用Java 9或10。就算他们用过,应该也都升级到了Java 11。

2023-04-09 19:10:18 707

原创 还不懂String、StringBuffer 和 StringBuilder的区别吗

如果要操作少量的数据用String单线程操作字符串缓冲区下操作大量数据用多线程操作字符串缓冲区下操作大量数据用。

2023-04-09 00:09:41 44

原创 学习Vue,还不了解它的生命周期吗

这篇文章会讲到:1.Vue的生命周期到底是什么2.Vue生命周期的执行顺序3.生命周期的每个阶段适合做什么4.我们的请求放在哪个生命周期会更合适。

2023-03-19 21:12:03 70

原创 Spring MVC的工作原理?

Spring MVC是一个基于Spring开发的MVC轻量级框架,Spring3.0后发布的组件,SpringMVC和Spring可以无缝整合,使用DispatcherService作为前端控制器,且内部提供了处理器映射器、处理器适配器、视图解析器等组件,可以简化JavaBean封装,Json转化、文件上传等操作。

2023-03-16 07:56:34 90

空空如也

空空如也

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

TA关注的人

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