自定义博客皮肤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技术一点通

沉淀自己的技术栈,丰富自己的知识链,致意每一次不知死活的成长!

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

原创 Java设计模式:桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与其实现部分分离,使它们可以独立变化。桥接模式通过将抽象和实现分离,使得它们可以独立演化,互不影响。这种模式通过组合而不是继承的方式来实现抽象与实现的解耦。

2024-03-13 14:20:04 871

原创 Java设计模式:外观模式

外观模式(Facade Pattern)是一种结构型设计模式,旨在为系统提供一个统一的接口,以简化系统的使用。它定义了一个高级接口,使得客户端可以更容易地与系统交互。外观模式通过提供一个简化的接口,封装了系统中多个模块的复杂逻辑,从而隐藏系统的复杂性,使客户端更容易使用。这种模式的核心思想是通过一个外观类,将客户端与系统的详细实现隔离开来,提供一个更简单和统一的接口。

2024-03-12 08:50:53 931

原创 Java设计模式:观察者模式

观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象的状态变化。当主题对象的状态发生变化时,它会自动通知所有的观察者对象,使得它们能够自动更新自己。观察者模式的主要目的是实现对象之间的松耦合,让主题对象和观察者对象之间的关系解耦。通过观察者模式,可以方便地添加、移除和通知观察者,使得系统更加灵活和可扩展。

2024-03-10 10:59:35 906

原创 Java设计模式:建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,旨在将一个复杂对象的构建与表现分离,使得同样的构建过程可以创建不同的表示。用户只需要指定需要建造的类型就可以得到该类型对应的产品实例,不必关心建造的过程细节,建造者模式就是如何逐步构建包含多个组件的对象,相同的构建过程可以创建不同的产品。

2024-03-08 09:25:21 1094

原创 Java设计模式:适配器模式

适配器模式(Adapter Pattern)是一种结构型设计模式,将一个类的接口转换成客户希望的另外一个接口,它允许接口不兼容的类之间进行合作,通过引入一个适配器类来使得原本不兼容的接口能够协同工作,而不需要修改已有的代码。适配器模式根据实现方式的不同,可以分为类适配器模式和对象适配器模式,类适配器模式对于需要重写被适配者的一些方法时比较方便,而对象适配器模式则更加灵活,允许适配器与多个被适配者进行组合。通常更推荐使用对象适配器模式。

2024-03-04 19:22:19 1070

原创 Java设计模式:组合模式

组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树状结构以表示“部分-整体”的层次结构。通过组合模式,客户端可以统一对待单个对象和组合对象,使得用户在使用单个对象和组合对象时无需区分它们的差异。

2024-02-29 09:54:36 965

原创 Java设计模式:责任链模式

责任链模式(Chain of Responsibility)又名职责链模式,是一种行为设计模式,它允许你构建一个由多个对象组成的链,每个对象都有机会处理请求,或者将请求传递给链中的下一个对象。这种模式常用于处理请求的对象之间存在层次关系的情况。责任链模式的主要目的是解耦发送者和接收者,使多个对象都有机会处理请求,而不是将请求发送者与接收者硬编码在一起。在责任链模式中,每个处理者都包含一个对下一个处理者的引用,形成一个链条。当请求进入链条时,从链条的头部开始逐个处理,直到找到能够处理该请求的对象为止。

2024-01-11 11:27:29 2586

原创 Java设计模式:状态模式

状态模式(State Pattern)是一种行为设计模式,它允许对象在其内部状态改变时改变其行为。该模式将对象的行为封装在不同的状态类中,使得在不同状态下可以选择不同的行为,从而使对象看起来好像修改了其类。

2024-01-04 08:18:51 1873

原创 Spring系列:Spring如何解决循环依赖

在Spring框架中,循环依赖指的是两个或多个Bean之间相互依赖的情况,形成了依赖环路(Circular Dependency)。换句话说,这些Bean之间存在着相互引用,导致无法正确地创建和初始化这些 Bean。处理循环依赖有多种方式。首先考虑是否能够通过重新设计依赖来避免循环依赖。如果确实不可避免需要循环依赖,那么通过上面提到的方式来处理。优先建议使用setter注入来解决。!!

2024-01-01 08:31:11 1883

原创 【LeetCode 热题 HOT 100】题解笔记 —— Day05

宽度优先遍历,一层一层来做。即:将根节点插入队列中;创建一个新队列,用来按顺序保存下一层的所有子节点;对于当前队列中的所有节点,按顺序依此将儿子加入新队列,并将当前节点的值记录在答案中;重复步骤2-3,直到队列为空为止。

2023-12-28 09:16:53 1356

原创 【LeetCode 热题 HOT 100】题解笔记 —— Day04

深度优先遍历整棵子树。遍历时,需要向上传递当前子树中的最小值和最大值,这里可以用C++中的引用来专递。对于当前节点,我们先遍历它的左子树,判断左子树是否合法,同时判断左子树的最大值是否小于当前节点的值;然后遍历右子树,判断右子树是否合法,同时判断右子树的最小值是否大于当前节点的值。如果条件均满足,说明以当前节点为根的子树是一棵合法的二叉搜索树,返回 ��true。

2023-12-26 17:08:22 989

原创 【LeetCode 热题 HOT 100】题解笔记 —— Day03

贪心思想:首先对各区间进行排序;定义当前区间的左右端点为第一个区间的左右端点;从前往后遍历每一个区间,如果当前区间与上一个区间有交集,则更新右端点;否则将上一个区间加入集合,然后更新当前区间。

2023-12-23 09:32:45 882

原创 Java设计模式:策略模式

策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。

2023-12-22 09:54:17 1902

原创 Java设计模式:工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

在工厂模式中,通常会定义一个抽象工厂接口,该接口声明了创建对象的方法,具体的工厂类实现了这个接口,并负责实际创建对象的过程。客户端代码通过使用工厂接口来创建对象,而不直接使用new关键字实例化对象,从而实现对象创建和使用的解耦。简单工厂模式(Simple Factory)工厂方法模式(Factory Method)抽象工厂模式(Abstract Factory)这三种模式从上到下逐步抽象,并且更具一般性。

2023-12-20 18:10:38 2368

原创 Java设计模式:模板方法模式

在软件开发中,某个方法的实现需要多个步骤,其中有些步骤是固定的,而有些步骤并不固定,存在可变性。为了提高代码的复用性和系统的灵活性,可以使用模板方法模式的设计模式对这类情况进行设计。在模板方法模式中将实现功能的每一步骤所对应的方法称为基本方法,而将调用这些基本方法同时定义基本方法的执行次序的方法称为模板方法。定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。

2023-12-18 08:41:34 721

原创 Java设计模式:单例模式(饿汉式、懒汉式、枚举实现类)

单例模式指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。单例模式常见的两种类型:懒汉式、饿汉式。懒汉式: 在需要用到对象时才实例化对象,最佳的实现方式是双重检查加锁,解决了并发安全和性能低下问题。饿汉式: 在类加载时就创建好了单例对象,在获取单例对象时直接返回对象即可,不会存在并发安全和性能问题。

2023-12-07 08:31:01 1398

原创 Redis持久化 —— RDB和AOF

RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录。AOF全称为Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。

2023-12-01 08:53:36 621

原创 【LeetCode 热题 HOT 100】题解笔记 —— Day02

一开始先用小根堆存储k个排序链表的头指针,每次操作后用小根堆维护k个链表当前最小的指针,并以指针对应的值进行排序。操作过程中,当小根堆不为空时,堆顶元素即当前k个排序链表当前最小的元素的指针t,将该值加入到dummy链表的后面,并把t指针往后移动一位,使得t指针指向的值变大,再加入到小根堆中。

2023-11-27 10:13:09 564

原创 【LeetCode 热题 HOT 100】题解笔记 —— Day01

首先枚举回文串的中心i,然后分两种情况向两边扩展,直到遇到不同字符为止:回文串长度是奇数,则依次判断 s[i−k]==s[i+k],k=1,2,3.....回文串长度是偶数,则依次判断 s[i+k]==s[i+k−1],k=1,2,3....

2023-11-25 10:17:25 711

原创 前端Vue框架系列—— 学习笔记总结Day04

路由组件通常存放在pages文件夹,一般组件通常存放在components文件夹。通过切换,“隐藏”了的路由组件,默认是被销毁掉的,需要的时候再去挂载。每个组件都有自己的$route属性,里面存储着自己的路由信息。整个应用只有一个router,可以通过组件的$router属性获取到。

2023-11-01 15:29:11 215

原创 前端Vue框架系列—— 学习笔记总结Day03

在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。

2023-10-29 20:26:34 115

原创 前端Vue框架系列—— 学习笔记总结Day02

通过父组件给子组件传递函数类型的props实现子给父传递数据 -->-- 通过父组件给子组件绑定一个自定义事件实现子给父传递数据(第一种写法,使用@或v-on) -->-- 通过父组件给子组件绑定一个自定义事件实现子给父传递数据(第二种写法,使用ref) -->methods:{console.log("已收到学校的名称:"+name)},console.log("已收到学生的姓名:"+name)},mounted(){

2023-10-22 09:46:19 198

原创 前端Vue框架系列—— 学习笔记总结Day01

Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。

2023-10-04 13:50:33 110

原创 头条移动端项目Day08 —— 定时计算热点文章、XXL-JOB

当前软件的架构已经开始向分布式架构转变,将单体结构拆分为若干服务,服务之间通过网络交互来完成业务处理。在分布式架构下,一个服务往往会部署多个实例来运行我们的业务,如果在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度。将任务调度程序分布式构建,这样就可以具有分布式系统的特点,并且提高任务的调度处理能力:1、并行任务调度并行任务调度实现靠多线程,如果有大量任务需要调度,此时光靠多线程就会有瓶颈了,因为一台计算机CPU的处理能力是有限的。

2023-09-15 08:42:11 124

原创 头条移动端项目Day07 —— app端文章搜索

文章搜索ElasticSearch环境搭建索引库创建文章搜索多条件复合查询索引数据同步搜索历史记录Mongodb环境搭建异步保存搜索历史查看搜索历史列表删除搜索历史联想词查询联想词的来源联想词功能实现2.2 创建容器2.3 配置中文分词器 ik因为在创建elasticsearch容器的时候,映射了目录,所以可以在宿主机上进行配置ik中文分词器在去选择ik分词器的时候,需要与elasticsearch的版本好对应上把资料中的上传到服务器上,放到对应目录(plugins)解压2.4 使用postman

2023-09-06 08:44:05 74

原创 头条移动端项目Day06 —— kafka及异步通知文章上下架

消息中间件对比特性ActiveMQRabbitMQRocketMQKafka开发语言javaerlangjavascala单机吞吐量万级万级10万级100万级时效性msusmsms级以内可用性高(主从)高(主从)非常高(分布式)非常高(分布式)功能特性成熟的产品、较全的文档、各种协议支持好并发能力强、性能好、延迟低MQ功能比较完善,扩展性佳只支持主要的MQ功能,主要应用于大数据领域消息中间件对比-选择建议消息中间件建议Kafka。

2023-08-28 15:40:57 82

原创 头条移动端项目Day05 —— 延迟队列精准发布文章

定时任务:有固定周期的,有明确的触发时间延迟队列:没有固定的开始时间,它常常是由一个事件触发的,而在这个事件触发之后的一段时间内触发另一个事件,任务可以立即执行,也可以延迟应用场景:场景一:订单下单之后30分钟后,如果用户没有付钱,则系统自动取消订单;如果期间下单成功,任务取消场景二:接口对接出现网络问题,1分钟后重试,如果失败,2分钟重试,直到出现阈值终止。

2023-08-22 16:58:13 98

原创 头条移动端项目Day04 ——自媒体文章审核

自媒体端发布文章后,开始审核文章审核的主要是审核文章的内容(文本内容和图片)借助第三方提供的接口审核文本借助第三方提供的接口审核图片,由于图片存储到minIO中,需要先下载才能审核如果审核失败,则需要修改自媒体文章的状态,status:2 审核失败 status:3 转到人工审核如果审核成功,则需要在文章微服务中创建app端需要的文章内容安全是识别服务,支持对图片、视频、文本、语音等对象进行多样化场景检测,有效降低内容违规风险。目前很多平台都支持内容检测,如阿里云、腾讯云、百度AI、网易云等国内大

2023-08-18 08:58:23 147

原创 头条移动端项目Day03 —— 自媒体素材管理、自媒体文章管理、自媒体文章发布

接口路径请求方式POST参数响应结果MultipartFile :Springmvc指定的文件接收类型成功需要回显图片,返回素材对象"errorMessage":"操作成功","data":{"id":52,"type":0,参数失效文章上传失败说明接口路径请求方式POST参数响应结果@Data/***/"errorMessage":"操作成功","data":["id":52,"type":0,},....],"size":20,

2023-08-14 09:09:46 122

原创 头条移动端项目Day02—— app端文章查看、静态化freemarker、分布式文件系统minIO

FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。​模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如

2023-08-12 16:05:17 154

原创 头条移动端项目Day01—— 环境搭建、SpringCloud微服务(注册发现、服务调用、网关)

随着智能手机的普及,人们更加习惯于通过手机来看新闻。由于生活节奏的加快,很多人只能利用碎片时间来获取信息,因此,对于移动资讯客户端的需求也越来越高。黑马头条项目正是在这样背景下开发出来。黑马头条项目采用当下火热的微服务+大数据技术架构实现。本项目主要着手于获取最新最热新闻资讯,通过大数据分析用户喜好精确推送咨询新闻。

2023-08-07 11:02:45 110

原创 消息中间件RabbitMQ——学习笔记

MQ(Message Queue)消息队列,是基础数据结构中“先进先出”的一种数据结构。一般用来解决应用解耦,异步消息,流量削峰等问题,实现高性能,高可用,可伸缩和最终一致性架构。AMQP,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议 的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中 间件不同产品,不同的开发语言等条件的限制。2006年,AMQP 规范发布。类比HTTP。

2023-07-29 15:20:22 230

原创 仿大众点评项目 —— 各阶段详细笔记总结

发送验证码:用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号。如果手机号合法,后台此时生成对应的验证码,同时将验证码进行保存,然后再通过短信的方式将验证码发送给用户。短信验证码登录、注册:用户将验证码和手机号进行输入,后台从session中拿到当前验证码,然后和用户输入的验证码进行校验,如果不一致,则无法通过校验,如果一致,则后台根据手机号查询用户,如果用户不存在,则为用户创建账号信息,保存到数据库,无论是否存在,都会将用户信息保存到session中,方便后续获得当前登录信息。

2023-07-19 10:18:02 583 1

原创 仿大众点评项目 —— Day04【达人探店、好友关注、附近商户、用户签到、UV统计】

当我们关注了用户后,这个用户发了动态,那么我们应该把这些数据推送给用户,这个需求,其实我们又把他叫做Feed流,关注推送也叫做Feed流,直译为投喂。为用户持续的提供“沉浸式”的体验,通过无限下拉刷新获取新的信息。对于传统的模式的内容解锁:我们是需要用户去通过搜索引擎或者是其他的方式去解锁想要看的内容。

2023-07-17 08:34:29 173

原创 仿大众点评项目 —— Day03【分布式锁redission、秒杀优化、Redis消息队列】

重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?所以可重入锁他的主要意义是防止死锁,我们的synchronized和Lock锁都是可重入的。不可重试:是指目前的分布式只能尝试一次,我们认为合理的情况是:当线程在获得锁失败后,他应该能再次尝试获得锁。

2023-07-12 10:35:01 227

原创 仿大众点评项目 —— Day02【优惠券秒杀、分布式锁】

场景分析:如果我们的id具有太明显的规则,用户或者说商业对手很容易猜测出来我们的一些敏感信息,比如商城在一天时间内,卖出了多少单,这明显不合适。场景分析二:随着我们商城规模越来越大,mysql的单表的容量不宜超过500W,数据量过大之后,我们要进行拆库拆表,但拆分表了之后,他们从逻辑上讲他们是同一张表,所以他们的id是不能一样的, 于是乎我们需要保证id的唯一性。

2023-07-10 08:56:27 207

原创 仿大众点评项目 —— Day01【短信登录、商户查询缓存】

在这个方案中,他确实可以使用对应路径的拦截,同时刷新登录token令牌的存活时间,但是现在这个拦截器他只是拦截需要被拦截的路径,假设当前用户访问了一些不需要拦截的路径,那么这个拦截器就不会生效,所以此时令牌刷新的动作实际上就不会执行,所以这个方案他是存在问题的。缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码。

2023-07-08 21:21:38 152

原创 Git分布式版本控制工具 —— 详细笔记

场景一:备份小明负责的模块就要完成了,就在即将 Release 之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流 . 场景二:代码还原这个项目中需要一个很复杂的功能,老王摸索了一个星期终于有眉目了,可是这被改得面目全非的代码已经回不到从前了。什么地方能买到哆啦 A 梦的时光机啊?场景三:协同开发小刚和小强先后从文件服务器上下载了同一个文件: Analysis . java。

2023-06-27 12:34:39 150

原创 分布式任务调度平台 XXL-JOB 实战

高可用:单机版的定式任务调度只能在一台机器上运行,如果程序或者系统出现异常就会导致功能不可用;防止重复执行: 在单机模式下,定时任务是没什么问题的。但当我们部署了多台服务,同时又每台服务又有定时任务时,若不进行合理的控制在同一时间,只有一个定时任务启动执行,这时,定时执行的结果就可能存在混乱和错误了;单机处理极限:原本1分钟内需要处理1万个订单,但是现在需要1分钟内处理10万个订单;原来一个统计需要1小时,现在业务方需要10分钟就统计出来。你也许会说,你也可以多线。

2023-06-21 09:30:35 1197

原创 MySQL 中各种锁的详细介绍

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。MySQL中的锁,按照锁的粒度全局锁:锁定数据库中的所有表。表级锁:每次操作锁住整张表。行级锁:每次操作锁住对应的行数据。

2023-06-17 15:33:54 626

空空如也

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

TA关注的人

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