自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 缓存穿透(布隆过滤器)

首先我们知道布隆过滤器,但是我们也要知道他主要是解决缓存穿透的问题,那我们接下来来介绍一下。缓存穿透是指,如果一个 key 在缓存和数据库都不存在,那么访问这个 key 每次都会进入数据库很可能被恶意请求利用缓存雪崩与缓存击穿都是数据库中有,但缓存暂时缺失缓存雪崩与缓存击穿都能自然恢复,但缓存穿透则不能针对缓存穿透,一般有两种解决方案,分别是:如果数据库没有,也将此不存在的 key 关联 null 值放入缓存,缺点是这样的 key 没有任何业务作用,白占空间。

2023-11-11 17:23:34 6153 2

原创 一文带你学会MD5+盐

MD5 + 盐是一种密码存储的安全机制。MD5,全称为Message Digest Algorithm 5,是一种常用的哈希函数。在密码存储中,通常会使用盐(salt)来增加密码的安全性。使用MD5 + 盐的密码存储过程如下:1. 随机生成一个盐值,将其与用户的密码拼接在一起。2. 使用MD5函数对拼接后的字符串进行哈希计算,生成一个固定长度的哈希值。3. 将盐值和哈希值一起存储在数据库中,以备后续验证使用。在密码验证过程中,使用相同的步骤生成哈希值,并将其与数据库中存储的哈希值进行比对。

2023-10-16 21:31:52 19141 8

原创 JAVA基础常问面试题(持续更新,每天五道题)

面向对象的特征:封装、继承、多态、抽象。

2023-10-13 01:14:32 15239 2

原创 一文带你学会MySQL表创建的约束

约束他主要的作用就是用于表字段上的规则,限制存储在表里的数据,以确保数据库中的数据的一个正确性、有效和完整性。

2023-10-09 23:08:17 15777

原创 一文带你学会SQL表的结构创建

通过以上所图,我们来简单总结一下:首先我们看变结构的基础语法和我们实际创建的过程中 可以看到我们是严格遵循语法规范的,其次,可能大家伙疑惑为什么我的varchar后面会标记(20),(10)或者char后面标记(1)这种约束,其实主要是因为这下几点:我们首先得知道一点,为什么我们会有int ,char 等约束(这个自行了解)。在了解过后再来看接下来我为什么选择他们。

2023-10-09 01:16:20 17658 1

原创 一文带你学会Stream流的使用

Stream 流是一个用于处理集合数据的 API,它提供了一种简洁而灵活的方式来处理与集合相关的操作。在Java 8中引入的Stream API,使得集合操作更加高效和易于编写。Stream 流提供了一系列的中间操作和终端操作,可以在不修改源集合的情况下对元素进行过滤、映射、排序、聚合等操作。中间操作返回一个新的流,这样可以进行链式的操作;而终端操作则会产生最终结果或副作用,结束流的处理。Stream 流具有惰性求值的特点,也就是说在遇到终端操作之前,中间操作不会立即执行,而是等到需要结果时才进行处理。

2023-10-08 14:44:27 16193

原创 Stream流式编程

Stream(流)是 Java 8 引入的一个新的抽象概念,它代表着一种处理数据的序列。简单来说,Stream 是一系列元素的集合,这些元素可以是集合、数组、I/O 资源或者其他数据源。Stream API 提供了丰富的操作方法,可以对 Stream 中的元素进行各种转换、过滤、映射、聚合等操作,从而实现对数据的处理和操作。Stream API 的设计目标是提供一种高效、可扩展和易于使用的方式来处理大量的数据。

2023-09-21 19:48:15 13598 3

原创 将 Bean 放入 Spring 容器中的五种方式

我们知道平时在开发中使用Spring的时候,都是将对象交由Spring去管理,那么将一个对象加入到Spring容器中,有哪些方式呢,下面我就来总结一下这种方式其实最常用的一种方式,@Configuration用来声明一个配置类,然后使用 @Bean 注解,用于声明一个bean,将其加入到Spring容器中。

2023-09-21 18:10:55 13919 2

原创 Excel百万级数据导入导出,EasyExcel 才是 yyds

1.如此大批量数据的导出和导入操作,会占用大量的内存实际开发中还应限制操作人数。2.在做大批量的数据导入时,可以使用jdbc手动开启事务,批量提交。

2023-09-21 17:50:33 10442

原创 Java导入、导出excel保姆级教程(附封装好的工具类)

我们在日常开发中,一定遇到过要将数据导出为Excel的需求,那么怎么做呢?在做之前,我们需要思考下Excel的组成。Excel是由四个元素组成的分别是:WorkBook(工作簿)、Sheet(工作表)、Row(行)、Cell(单元格),其中包含关系是从左至右,一个WorkBook可以包含多个Sheet,一个Sheet又是由多个Row组成,一个Row是由多个Cell组成。知道这些后那么我们就使用java来将数据以Excel的方式导出。让我们一起来学习吧!

2023-09-21 17:36:51 4830

原创 SpringBoot全局异常处理(最佳实践)

Controller抛出了异常,被异常处理器处理,返回的过程中,Filter又抛出了一个异常,被BasicExceptionController处理,但BasicExceptionController的到的异常信息却是Controller产生的异常信息,而不是Filter产生的异常信息。使用简单映射异常处理器处理异常,通过配置SimpleMappingExceptionResolver类也是进行近似全局异常处理,但该种方式不能得到具体的异常信息,且返回的是视图,不推荐使用。

2023-09-21 17:22:33 4300

原创 SpringBoot + Sharding JDBC,一文搞定分库分表、读写分离

mysqld]## 设置server_id,注意要唯一## 开启binlog## binlog缓存## binlog格式(mixed、statement、row,默认格式是statement)

2023-09-20 23:29:58 5291

原创 10招让你彻底告别空指针异常!

NPE异常相信 Java 程序员都很熟悉,是 NullPointerException 的缩写;最近业务需求开发的有点着急,测试环境就时不时的来个NPE异常,特别的头疼;作为出镜率最高的异常之一,一旦入行 Java 开发,可以说它将伴随着你整个职业生涯;不管是新手小白、还是老司机,对NPE异常那是又“爱”又狠,爱的主要原因是处理起来简单,恨当然是一个不小心就会踩坑;为了提高代码的质量,NPE异常是必须要消灭掉的;那既然处理起来简单,有什么好纠结的呢?

2023-09-20 23:09:43 6001

原创 SpringBoot 统一登录鉴权、异常处理、数据格式

*** @Description: 自定义用户登录的拦截器*/@Component// 返回 true 表示拦截判断通过,可以访问后面的接口// 返回 false 表示拦截未通过,直接返回结果给前端@Override// 1.得到 HttpSession 对象= null) {// 表示已经登录// 执行到此代码表示未登录,未登录就跳转到登录页面:表示需要拦截的 URL,**表示拦截所有⽅法:表示需要排除的 URL。

2023-09-20 22:56:04 674

原创 SpringBoot + minio实现分片上传、秒传、续传

MinIO是一个基于Go实现的高性能、兼容S3协议的对象存储。它采用GNU AGPL v3开源协议,项目地址是https://github.com/minio/minio。引用官网:MinIO是根据GNU Affero通用公共许可证v3.0发布的高性能对象存储。它与Amazon S3云存储服务兼容。使用MinIO构建用于机器学习,分析和应用程序数据工作负载的高性能基础架构。

2023-09-20 22:42:11 2109

原创 Mybatis 中 SQL 注入攻击的 3 种方式

以上就是mybatis的sql注入审计的基本方法,我们没有分析的几个点也有问题,新手可以尝试分析一下不同的注入点来实操一遍,相信会有更多的收获。当我们再遇到类似问题时可以考虑:Mybatis框架下审计SQL注入,重点关注在三个方面like,in和order byxml方式编写sql时,可以先筛选xml文件搜索$,逐个分析,要特别注意mybatis-generator的order by注入Mybatis注解编写sql时方法类似java层面应该做好参数检查,假定用户输入均为恶意输入,防范潜在的攻击。

2023-09-20 22:18:31 673

原创 MySQL常用30种SQL查询语句优化方法

本文介绍了常用的30种MySQL SQL查询优化方法,并通过实际案例演示了它们的应用。优化SQL查询是提高数据库性能和响应速度的关键,通过合理优化SQL查询可以减少数据库的负载,提高查询效率。读者可以根据自己的实际情况和业务需求,选择合适的优化方法,提高数据库的性能和可用性。同时,我们也要不断学习和实践,在数据库领域不断提高自己的知识水平和技术能力,成为一名优秀的数据库工程师。

2023-09-20 22:09:31 2133

原创 实现高并发秒杀的七种方式 !

高并发场景在现场的日常工作中很常见,特别是在互联网公司中,这篇文章就来通过秒杀商品来模拟高并发的场景。文章末尾会附上文章的所有代码、脚本和测试用例。Jmeter减库存->创建订单->模拟支付。

2023-09-20 21:15:57 1501

原创 8 种从 Spring 中获取 Bean 的方式

本品文章将给大家介绍 8 种方式从 Spring IOC容器 中获取 Bean!

2023-09-20 19:19:42 1741

原创 SpringBoot实现登录拦截器

对于管理系统或其他需要用户登录的系统,登录验证都是必不可少的环节,在SpringBoot开发的项目中,通过实现拦截器来实现用户登录拦截并验证。

2023-09-20 19:15:00 10904

原创 SpringBoot + 一个注解,轻松实现 Redis 分布式锁

对于耗时业务和核心数据,不能让重复的请求同时操作数据,避免数据的不正确,所以要使用分布式锁来对它们进行保护。再来梳理一下设计流程:新建注解 @interface,在注解里设定入参标志增加 AOP 切点,扫描特定注解建立 @Aspect 切面任务,注册 bean 和拦截特定方法特定方法参数 ProceedingJoinPoint,对方法 pjp.proceed() 前后进行拦截切点前进行加锁,任务执行后进行删除 key本次学习是通过。

2023-09-20 19:11:49 1627

原创 轻松搞定 SpringBoot 扫码登录

最近有个项目涉及到 websocket 实现扫码登录,让我们来分享一下!

2023-09-20 18:30:13 90

原创 Linux-软件安装/项目部署

前面介绍的项目部署是手动部署,也就是部署过程中的每一步操作都需要我们手动操作。接下来,我们需要再讲解一下项目的自动部署,从而来简化项目部署的操作,那么我们先来整体上了解一下项目自动部署的流程及操作步骤。操作步骤如下:1). 在Gitee上创建远程仓库,并将本地的项目代码推送到远程仓库中2). 在Linux中安装Git,克隆代码3). 在Linux中安装maven4). 编写Shell脚本(拉取代码、编译、打包、启动)5). 为用户授予执行Shell脚本的权限6). 执行Shell脚本。

2023-09-20 00:57:33 2023 2

原创 Linux安装/常用指令

Linux系统的安装方式,主要包含以下两种:虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能、运行在完全隔离环境中的完整计算机系统。常用虚拟机软件:VMWareVirtualBoxQemu那么我们就可以在课程中将Linux操作系统安装在虚拟机中,我们课上选择的虚拟机软件是VMware。Linux已经安装并且配置好了,接下来我们要来学习Linux的基本操作指令。

2023-09-20 00:26:50 1818

原创 Java21 LTS版本

除了众所周知的 JEP 之外,Java 21 还有更多内容。我们一起来看看 String 和它的朋友们 Collections、Date、Time、HttpClient、并发、Math 和 BigInteger 的新增一些 API。

2023-09-19 19:01:14 2358

原创 微服务保护-授权规则/规则持久化

默认情况下,发生限流、降级、授权拦截时,都会抛出异常到调用方。异常结果都是flow limmiting(限流)。这样不够友好,无法得知是限流还是降级还是授权拦截。@Component@OverrideString msg = "未知异常";msg = "请求被限流了";msg = "请求被热点参数限流";msg = "请求被降级了";msg = "没有权限访问";

2023-09-19 12:00:16 1840 1

原创 微服务保护-隔离和降级

Sentinel支持的雪崩解决方案:线程隔离(仓壁模式)降级熔断Feign整合Sentinel的步骤:在application.yml中配置:feign.sentienl.enable=true给FeignClient编写FallbackFactory并注册为Bean将FallbackFactory配置到FeignClient线程隔离的两种手段是?信号量隔离线程池隔离信号量隔离的特点是?基于计数器模式,简单,开销小线程池隔离的特点是?基于线程池模式,有额外开销,但隔离控制更强。

2023-09-19 00:17:47 135 1

原创 微服务保护-流量控制

流控模式有哪些?•直接:对当前资源限流•关联:高优先级资源触发阈值,对低优先级资源限流。•链路:阈值统计时,只统计从指定资源进入当前资源的请求,是对请求来源的限流流控效果有哪些?快速失败:QPS超过阈值时,拒绝新的请求warm up: QPS超过阈值时,拒绝新的请求;QPS阈值是逐渐提升的,可以避免冷启动时高并发导致服务宕机。排队等待:请求会进入队列,按照阈值允许的时间间隔依次执行请求;如果请求预期等待时长大于超时时间,直接拒绝。

2023-09-19 00:07:29 273 1

原创 微服务保护-Sentinel

什么是雪崩问题?微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。限流是对服务的保护,避免因瞬间高并发流量而导致服务故障,进而避免雪崩。是一种预防措施。超时处理、线程隔离、降级熔断是在部分服务故障时,将故障控制在一定范围,避免雪崩。是一种补救措施。Sentinel是阿里巴巴开源的一款微服务流量控制组件。http://官网地址:https://sentinelguard.io/zh-cn/index.htmlSentinel 具有以下特征:•丰富的应用场景。

2023-09-18 23:46:16 138 1

原创 MySQL-多表查询

建议:创建新的数据库use db04;-- 部门表id int unsigned primary key auto_increment comment '主键ID',name varchar(10) not null unique comment '部门名称',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间') comment '部门表';-- 部门表测试。

2023-09-18 18:26:36 189

原创 数据库操作-DML/DQL

DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。查询关键字:SELECT查询操作是所有SQL语句当中最为常见,也是最为重要的操作。在一个正常的业务系统中,查询操作的使用频次是要远高于增删改操作的。当我们打开某个网站或APP所看到的展示信息,都是通过从数据库中查询得到的,而在这个查询过程中,还会涉及到条件、排序、分页等操作。

2023-09-18 18:05:29 141

原创 数据库开发-MySQL

前面我们讲解了DDL中关于数据库操作的SQL语句,在我们编写这些SQL时,都是在命令行当中完成的。大家在练习的时候应该也感受到了,在命令行当中来敲这些SQL语句很不方便,主要的原因有以下 3 点:没有任何代码提示。(全靠记忆,容易敲错字母造成执行报错)操作繁琐,影响开发效率。(所有的功能操作都是通过SQL语句来完成的)编写过的SQL代码无法保存。在项目开发当中,通常为了提高开发效率,都会借助于现成的图形化管理工具来操作数据库。

2023-09-18 17:47:28 299

原创 并发编程-模式篇(同步模式之 Balking)

Balking (犹豫)模式用在一个线程发现另一个线程或本线程已经做了某一件相同的事,那么本线程就无需再做 了,直接结束返回。

2023-09-15 23:22:10 103 1

原创 并发编程-模式篇(同步模式之保护性暂停)

即 Guarded Suspension,用在一个线程等待另一个线程的执行结果有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject如果有结果不断从一个线程到另一个线程那么可以使用消息队列(见生产者/消费者)JDK 中,join 的实现、Future 的实现,采用的就是此模式 因为要等待另一方的结果,因此归类到同步模式。

2023-09-15 23:19:19 196

原创 分布式事务解决方案之最大努力通知

最大努力通知也是一种解决分布式事务的方案,下边是一个是充值的例子:交互流程:1、账户系统调用充值系统接口2、充值系统完成支付处理向账户系统发起充值结果通知若通知失败,则充值系统按策略进行重复通知3、账户系统接收到充值结果通知修改充值状态。4、账户系统未接收到通知会主动调用充值系统的接口查询充值结果。通过上边的例子我们总结最大努力通知方案的目标:目标:发起通知方通过一定的机制最大努力将业务处理结果通知到接收方。具体包括:1、有一定的消息重复通知机制。

2023-09-15 23:09:20 84

原创 分布式事务解决方案之可靠消息最终一致性

可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息,事务参与方(消息消费者)一定能 够接收消息并处理事务成功,此方案强调的是只要消息发给事务参与方最终事务要达到一致。此方案是利用消息中间件完成,如下图:\事务发起方(消息生产方)将消息发给消息中间件,事务参与方从消息中间件接收消息,事务发起方和消息中间件 之间,事务参与方(消息消费方)和消息中间件之间都是通过网络通信,由于网络通信的不确定性会导致分布式事 务问题。1.本地事务与消息发送的原子性问题。

2023-09-15 22:54:41 401

原创 分布式事务解决方案之TCC

TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认 Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的 操作即回滚操作。

2023-09-15 22:37:21 2711

原创 分布式事务解决方案之2PC

2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段。举例:张三和李四好久不见,老友约起聚餐,饭店老板要求先买单,才能出票。这时张三和李四分别抱怨近况不如 意,囊中羞涩,都不愿意请客,这时只能AA。只有张三和李四都付款,老板才能出票安排就餐。但由于张三和李四 都是铁公鸡,形成了尴尬的一幕:准备阶段:老板要求张三付款,张三付款。老板要求李四付款,李四付款。

2023-09-15 22:17:18 414

原创 分布式事务基础理论

通过上面我们已经学习了CAP理论的相关知识,CAP是一个已经被证实的理论:一个分布式系统最多只能同时满足 一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)这三项中的两项。它可以作 为我们进行架构设计、技术选型的考量标准。

2023-09-15 21:53:24 133

原创 InnoDB引擎

MySQL5.5 版本开始,默认使用InnoDB存储引擎,它擅长事务处理,具有崩溃恢复特性,在日常开发 中使用非常广泛。下面是InnoDB架构图,左侧为内存结构,右侧为磁盘结构。

2023-09-14 11:51:34 110 1

空空如也

空空如也

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

TA关注的人

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