自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

豆恭梓的博客

java笔记

  • 博客(206)
  • 收藏
  • 关注

原创 MySQl有哪些索引(种类)?索引特点?为什么要使用索引?

普通索引:仅加速查询唯一索引:加速查询 + 列值唯一(可以有null)主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并全文索引:对文本的内容进行分词,进行搜索索引合并:使用多个单列索引组合搜索覆盖索引:select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖聚簇索引:表数据是和主键一起存储的,主键索引的叶结点存储行数据(包含了主键值),二级索引的叶结点存储行的主键值。使用

2023-10-18 21:44:24 402

原创 MySQL的ACID和并发事务带来的问题简单总结

拓跋阿秀。

2023-10-18 11:32:34 259

原创 某金融科技公司Java一面

首先定义一个注解类型,使用@interface关键字。注解类型通常包括注解的名称、元素(也就是注解的属性),以及默认值。

2023-10-16 14:40:50 215

原创 Redis为什么这么快?高频面试题详解

就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。可以基于一个阻塞对象并同时在多个描述符上等待就绪,而不是使用多个线程(每个文件描述符一个线程,每次new一个线程),这样可以大大节省系统资源。当某条连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理。所谓 I/O 多路复用机制,就是说通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是。所谓 I/O 多路复用机制,就是说通过一种机制,可以。

2023-10-15 16:26:05 138

原创 Redis五大数据类型的底层设计

zipList,通常称为压缩列表,是一个经过特殊编码的用于存储字符串或整数的双向链表。其底层数据结构由三部分构成:**head、entries 与 end。**这三部分在内存上是连续存放的。prevlength:该部分用于记录上一个 entry 的长度,以实现逆序遍历。encoding:该部分用于标志后面的data 的具体类型。如果 data 为整数类型,encoding固定长度为1 字节。如果 data 为字符串类型,则 encoding 长度可能会是1 字节、2 字 节或 5 字节。

2023-10-14 14:23:05 324

原创 某快递公司Java一面

优先级队列的实现:优先级队列是一种数据结构,支持。

2023-10-11 17:22:35 220

原创 某游戏公司Java面试八股文总结

时通过 一个标识 表示类中。

2023-10-11 11:57:12 338

原创 计算机网络:三次握手与四次挥手

(服务端等客户端回复是否收到呢,不收到的话,服务端不知道客户端是不是挂掉了还是咋回事呢,所以服务端不敢关闭自己的接收能力,于是第四次就来了。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。分手:此时如果客户端收到了服务端发送完的信息之后,就发送ACK = 1,告诉服务端,客户端已经收到了你的信息。(服务端先回应给客户端一声,我知道了,但服务端的发送数据能力即将等待关闭,于是接下来第三次就来了。分手:此时服务端向客户端把所有的数据发送完了,然后。

2023-09-14 15:15:52 854

原创 TCP和UDP的区别

7、UDP是面向报文的,发送方的UDP对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层,论应用层交给UDP多长的报文,它统统发送,一次发送一个。UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;),等到可以发送的时候就发送,不能发送就等着TCP会根据当前网络的拥塞状态来确定每个报文段的大小。UDP支持一对一,一对多,多对一和多对多的交互通信。

2023-09-09 15:29:03 334

原创 什么是TCP粘包/拆包?发生的原因?如何解决

3.在数据包中添加消息头:发送端在每个数据包中添加一个消息头,消息头中包含数据长度等信息,接收端就可以根据消息头来判断每个数据包的长度,从而解决粘包/拆包的问题。4.使用消息结束符:发送端在每个数据包的末尾加上一个特殊的消息结束符,接收端就可以根据这个结束符来判断每个数据包的边界,从而解决粘包/拆包的问题。1.消息定长:发送端发送的每个消息都是固定长度的,接收端每次接收到固定长度的数据就进行一次处理,这样就可以保证每次接收的数据都是完整的。造成TCP粘包/拆包的。

2023-09-09 15:04:57 380

原创 Redis缓存的高并发问题

Redis 做缓存虽减轻了 DBMS 的压力,减小了 RT,但在高并发情况下也是可能会出现各 种问题的。

2023-09-06 22:21:31 270

原创 MQ解决重复消费问题

重复消费一直是行业内重视的问题,在当下的互联网时代,追求的是高效,安全,准确的数据交互。对于大型项目来讲,数据量数以亿计,那么这些数据如何确保安全准确,同时又不失效率的传输是很重要的。目前的服务器数据交互设计,大体上可以是前后端数据交互,Rpc(远程过程调用)或者是通过消息中间件(MQ)来进行的,本次解决方案,我们就从这几个角度出发,讨论如何高效准确的解决企业级重复消费问题。处理重复消费的问题,幂等性是必要理解的,所谓幂等性是指任意多次执行所产生的影响均与一次执行的影响相同。

2023-09-04 18:18:45 842

原创 day08-领取优惠券(高并发优化:超卖、锁失效、事务边界、事务失效)

超卖这样的线程安全问题,解决方案有哪些?悲观锁:添加同步锁,让线程串行执行优点:简单粗暴缺点:性能一般乐观锁:不加锁,在更新时判断是否有其它线程在修改优点:性能好缺点:存在成功率低的问题在事务和锁并行存在时,一定要考虑事务和锁的边界问题。由于事务的隔离级别问题,可能会导致不同事务之间数据不可见,往往会产生一些不可预期的现象。

2023-09-01 18:13:24 1061

原创 MySQL事务原理、MVCC详解

当我们创建了上面的这张表,我们在查看表结构的时候,就可以显式的看到这三个字段。实际上除了 这三个字段以外,InnoDB还会自动的给我们添加三个隐藏字段及其含义分别是:而上述的前两个字段是肯定会添加的, 是否添加最后一个字段DB_ROW_ID,得看当前表有没有主键,如果有主键,则不会添加该隐藏字段。​ 回滚日志,在insert、update、delete的时候产生的便于数据回滚的日志。当insert的时候,产生的undo log日志只在回滚时需要,在事务提交后,可被立即删除。

2023-08-30 17:58:37 969

原创 关于数据库MySQL的锁看这篇就够了...

​ 全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语 句,已经更新操作的事务提交语句都将被阻塞。其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。为什么全库逻辑备份,就需要加全就锁呢?A. 我们一起先来分析一下不加全局锁,可能存在的问题。假设在数据库中存在这样三张表:tb_stock 库存表,tb_order 订单表,tb_orderlog 订单日志表。此时备份出来的数据,是存在问题的。

2023-08-15 17:40:14 199

原创 InnoDB引擎

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

2023-08-14 21:56:07 119

原创 day07-优惠券管理

还有一个是跟兑换码有关。就是在发放优惠券的时候,如果发现优惠券的领取方式是指定发放,则需要生成兑换码。不管怎么发,优惠券都有过期时间。可见这个列表就是一个典型的带过滤条件的分页查询。这就要求我们在发放优惠券的时候做判断,如果发现是指定发放模式,则需要提前生成兑换码。不过,新增的优惠券并不会立刻出现在用户端页面,管理员还需要对优惠券信息做审核,可以看出来,这是一个有过滤条件的分页查询功能。我们可以在这里实现优惠券的基础的增删改查功能。也可以在需要的时候重新发放优惠券。一个是立刻发放,一个是定时发放。

2023-08-14 16:48:59 580 1

原创 day06-点赞系统

当热心用户或者老师给学生回答了问题以后,所有学员可以给自己心仪的回答点赞,点赞越高,排名也越靠前。首先我们来分析整理一下点赞业务的需求,一个通用点赞系统需要满足下列特性:要保证安全,避免重复点赞,我们就必须保存每一次点赞记录。只有这样在下次用户点赞时我们才能查询数据,判断是否是重复点赞。同时,因为业务方经常需要根据点赞数量排序,因此每个业务的点赞数量也需要记录下来。综上,点赞的基本思路如下:点赞系统可以在点赞数变更时,通过MQ通知业务方,这样业务方就可以更新自己的点赞数量了。并且还避免了点赞系统与业

2023-08-14 15:46:12 394 1

原创 深入理解设计模式-行为型之模板(和回调区别联系)

模板设计模式(Template Design Pattern)是一种行为型设计模式,它定义了一个算法的骨架,将算法的一些步骤延迟到子类中实现。模板设计模式允许子类在不改变算法结构的情况下重新定义算法的某些步骤。模板设计模式的核心思想是:将一个算法的主要结构定义在一个模板方法中,而将具体(某些)步骤的实现交给子类去完成。// 模板类 抽象类:Beverage-->饮料// 模板方法,定义算法的骨架brew();// 具体步骤,由子类实现// 公共方法// 具体子类。

2023-08-13 15:46:51 450

原创 深入理解设计模式-行为型之观察者

观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象,当主题对象发生变化时,所有依赖于它的观察者对象都会得到通知并更新。Subject(主题):维护一个观察者列表,提供方法用于添加、删除和通知观察者。Observer(观察者):定义一个接口,用于接收主题对象的通知,以便在主题发生变化时更新自身状态。

2023-08-13 15:25:19 603

原创 深入理解设计模式-结构型之适配器

集成旧系统或第三方库:当你需要使用一个已经存在的类或库,但其接口与你当前系统的其他部分不兼容时,适配器模式可以帮助你将这个类适配为符合你系统需求的接口。适配器模式的核心思想就是通过适配器类,将适配者的接口适配成符合你的系统需求的目标接口,从而能够让这个已经存在的类能够被无缝地集成到你的系统中。接口版本升级:当接口的一个新版本发布,但你的系统还在使用旧版本接口时,通过适配器模式可以兼容旧版本接口,同时适配到新版本接口上。接口的多态性:适配器模式可以帮助你在多态性的情境中使用不同的实现,以适应不同的场景。

2023-08-13 14:50:53 670

原创 深入理解设计模式-结构型之代理模式

这里对动态代理实现进行补充。

2023-08-12 15:33:53 65

原创 深入理解设计模式-创建型之建造者模式(与工厂区别)

建造者设计模式(Builder Design Pattern)和工厂设计模式(Factory Design Pattern)都是面向对象设计中的创建型模式,但它们解决的问题和应用场景有所不同。建造者设计模式旨在解决复杂对象的创建问题,特别是当对象的构造过程非常复杂,需要一步步构建,并且具有多个可选参数或配置选项时。该模式的主要思想是将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。Director(指挥者):负责使用构造器接口来构建一个复杂对象。

2023-08-12 14:07:05 911

原创 深入理解设计模式-创建型之工厂模式

当创建逻辑比较复杂,是一个“大工程”的时候,我们就应该考虑使用工厂模式,封装对象的创建过程,将对象的创建和使用相分离。何为创建逻辑比较复杂呢?我总结了下面两种情况。第一种情况:类似规则配置解析的例子,代码中存在 if-else 分支判断,动态地根据不同的类型创建不同的对象。针对这种情况,我们就考虑使用工厂模式,将这一大坨 if-else 创建对象的代码抽离出来,放到工厂类中。还有一种情况,尽管我们不需要根据不同的类型创建不同的对象,但是,单个对象本身的创建过程比较复杂。

2023-08-11 19:58:13 220

原创 Spring--BeanFactory和FactoryBean区别

一个实现了 FactoryBean 接口的类必须实现 getObject 方法,用于创建和返回一个特定类型的 Bean。它是 Spring 框架中最基本的容器,但相对于 FactoryBean,它更注重对象的整体管理和控制。BeanFactory 和 FactoryBean 是 Spring 框架中两个不同的概念,它们在对象的管理和创建过程中具有不同的角色和功能。它是 Spring IoC(Inversion of Control,控制反转)的基础,实现了对象的生命周期管理、依赖注入、延迟加载等特性。

2023-08-11 17:56:38 233

原创 深入理解设计模式-创建型之单例模式

尽管单例是一个很经典的设计模式,但在实际的开发中,我们也很少按照严格的定义去使用它,以上的知识大多是为了理解和面试而使用和学习,有些人甚至认为单例是一种反模式(anti-pattern),压根就不推荐使用。事实上,我们在JDK或者其他的通用框架中很少能看到标准的单例设计模式,这也就意味着他确实很经典,但严格的单例设计确实有它的问题和局限性,我们先看看在源码中的一些案例。如果未来某一天,一个实例已经无法满足我们的需求,我们需要创建一个,或者更多个实例时,就必须对源代码进行修改,无法友好扩展。

2023-08-11 10:35:08 358

原创 Spring Security用户授权

用户认证在上一篇。

2023-08-10 22:13:14 145

原创 Spring Security实现办公系统权限控制(含认证和授权流程、底层分析)

Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。正如你可能知道的关于安全方面的两个核心功能是“认证”和“授权”,一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分,这两点也是 SpringSecurity 重要核心功能。

2023-08-10 19:39:25 561

原创 办公系统--权限管理设计思路

每个系统的权限功能都不尽相同,各有其自身的业务特点,对权限管理的设计也都各有特色。页面权限(菜单级)、操作权限(按钮级)、数据权限。当前系统只是讲解:菜单权限与按钮权限的控制。JWT是JSON Web Token的缩写,即JSON Web令牌,是一种自包含令牌。是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。JWT最重要的作用就是对 token信息的防伪作用。

2023-08-10 14:56:49 205

原创 常见Java面试八股(基础篇)

难度系数:⭐基本数据类型,如 int,float,double,boolean,char,byte,不具备对象的特征,不能调用方法。 装箱:将基本类型转换成包装类对象 拆箱:将包装类对象转换成基本类型的值java 为什么要引入自动装箱和拆箱的功能?主要是用于 java 集合中,Listlist=new ArrayList();list 集合如果要放整数的话,只能放对象,不能放基本类型,因此需要将整数自动装箱成对象。

2023-08-08 12:43:40 87

原创 day05问答系统

学员在学习的过程中可以随时提问问题老师、其他学员都可以回答问题老师、学员也都可以对回答多次回复老师、学员也都可以对评论多次回复老师可以在管理端管理问题、回答、评论的状态业务流程并不复杂。

2023-08-03 21:01:20 71

原创 day04-高并发优化

首先,我们要定义一个工具类,帮助我们改造整个业务。在提交学习记录业务中,需要用到异步任务和缓存的地方有以下几处:① 添加播放记录到Redis,并添加一个延迟检测任务到DelayQueue② 查询Redis缓存中的指定小节的播放记录③ 删除Redis缓存中的指定小节的播放记录④ 异步执行DelayQueue中的延迟检测任务,检测播放进度是否变化,如果无变化则写入数据库//这是放到redis的hash中的value数据 private Long id;

2023-08-03 10:51:25 176

原创 线程池执行流程

ThreadPoolExecutor介绍。

2023-08-02 15:58:07 72

原创 day03-学习计划和进度

查询结果中有很多对于已经学习的小节数量的统计,因此将来我们一定要保存用户对于每一个课程的学习记录,哪些小节已经学习了,哪些已经学完了。因此,查询这个接口的请求肯定是请求到课程微服务,查询课程、章节信息,再由课程微服务向学习微服务查询学习进度,合并后一起返回给前端即可。用户创建完计划自然要开始学习课程,在用户学习视频的页面,首先要展示课程的一些基础信息。用户每学习一个小节,就会新增一条学习记录,当该课程的全部小节学习完毕,则该课程就从学习中进入已学完状态了。课程信息是必备的,而学习进度却不一定存在。

2023-08-01 15:42:55 191 1

原创 Docker搭建私有镜像仓库

Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。命令中挂载了一个数据卷registry-data到容器内的/var/lib/registry 目录,这是私有镜像库存放数据的目录。访问http://YourIp:5000/v2/_catalog 可以查看当前私有镜像服务中包含的镜像。官网地址:https://hub.docker.com/_/registry。

2023-07-31 13:31:41 360

原创 Docker-Compose部署微服务集群

Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!

2023-07-31 13:29:53 118

原创 docker-Dockerfile自定义镜像

常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。而要自定义镜像,就必须先了解镜像的结构才行。

2023-07-31 12:55:03 54

原创 Docker的基本操作(镜像、容器、数据卷)

*数据卷(volume)**是一个虚拟目录,指向宿主机文件系统中的某个目录。一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了。

2023-07-31 11:22:11 101

原创 CentOS7安装Docker

Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。Docker CE 分为stabletest和nightly三个更新频道。官方网站上有各种环境下的,这里主要介绍 Docker CE 在 CentOS上的安装。

2023-07-30 14:57:39 96

原创 docker架构、docker和虚拟器区别

微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。

2023-07-30 14:30:07 109 1

空空如也

空空如也

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

TA关注的人

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