自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一棵灬大树的博客

学生萌新一枚^[]^

  • 博客(113)
  • 资源 (5)
  • 收藏
  • 关注

原创 【Java多线程】8——CompletableFuture

在Future接口下,我们只能通过调用get()方法来获取任务计算结果,但是只要目标任务没有执行完,get()方法会被阻塞——阻塞方式又回到了同步调用,这就和异步操作的初衷相违背了。从实现类的版本情况能看出,

2024-03-30 19:19:46 470

原创 【Java多线程】7——阻塞队列&线程池

在《阿里巴巴Java开发手册》中指出了线程资源必须通过线程池提供,不允许在应用中自行显式的创建线程,这样一方面是线程的创建更加规范,可以合理控制开辟线程的数量;另一方面线程的细节管理交给线程池处理,优化了资源的开销。同时线程池不允许使用Executors去创建,而要通过方式,这一方面是由于JDK 中 Executor 框架虽然提供了如等创建线程池的方法,但都有其局限性,不够灵活;使用有助于大家明确线程池的运行规则,创建符合自己的业务场景需要的线程池,避免资源耗尽的风险。

2024-03-30 19:16:46 1384

原创 【Java多线程】6——集合线程安全

写时复制、锁分段技术

2024-03-29 16:16:43 446

原创 【Java多线程】5——Lock底层原理

根据类的名字抽象的队列式同步器。AQS 定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它。它维护了一个(代表共享资源)和一个 FIFO 线程等待队列(多线程争用资源被阻塞时会进入此队列)。这里 volatile 是核心关键词。getState()setState()Exclusive(独占,只有一个线程能执行)Share(共享,多个线程可同时执行)不同的自定义同步器争用共享资源的方式也不同。

2024-03-29 16:12:39 1027

原创 【Java多线程】4——特定场景解决办法

使用 Fork Join 框架能够帮助我们把一个大型任务,根据一定规律,拆分成小任务执行。如果拆分后的任务还不够小,可以以递归模式继续拆分,直到拆分到可以执行的程度。然后再把各个子任务执行的结果汇总到一起。Fork:拆分:把大任务拆分成小任务。Join:合并:把小任务执行的结果合并到一起。我们使用 Fork Join 框架只需要继承 RecursiveTask,然后重写 compute() 方法即可。任务拆分的逻辑任务拆分的操作:调用 fork() 方法。

2024-03-28 14:54:30 919

原创 【Java多线程】3——Lock API控制多线程

在实际场景中,读操作不会改变数据,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了。针对这种场景,Java 的并发包提供了读写锁,它表示两个锁,一个是读操作相关的锁,称为读锁,这是一种共享锁;一个是写相关的锁,称为写锁,这是一种排他锁,也叫独占锁、互斥锁。

2024-03-28 14:37:51 938

原创 【Java多线程】2——synchronized底层原理

为了减少获得锁和释放锁带来的性能消耗,引入了『偏向锁』和『轻量级锁』的概念。升级后锁一共有 4 种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态。

2024-03-27 19:40:37 1177

原创 【Java多线程】1——多线程知识回顾

在一个进程中,需要同时处理多个不同任务,每一个任务由一个线程来执行。从这个意义上来说,可以把进程看做是线程的容器。

2024-03-27 19:31:55 829

原创 【消息队列】——Kafka入门一篇就够了!

Kafka 是一种分布式的,基于发布 / 订阅的消息系统。以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 TB 级以上数据也能保证常数时间复杂度的访问性能;高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒 100K 条以上消息的传输;支持 Kafka Server 间的消息分区,及分布式消费,同时保证每个 Partition 内的消息顺序传输;同时支持离线数据处理和实时数据处理;Scale out:支持在线水平扩展;

2024-03-26 14:09:00 2157

原创 【分布式】——降级&熔断&限流

什么是熔断,什么是降级,熔断与降级是同一个意思吗?如上图所示,服务A接收客户端请求,服务B提供给内部服务调用,每个服务部署的节点数至少两个。在事发之前的近一周,服务B都一直运行正常,而事发的那晚请求量突增一倍,显然,此次事故与请求突增脱不了干系。因突增请求导致服务B高负荷运转,超出临界点的请求最后超出设定的接口超时时间,再由于服务B的一个隐藏性能问题导致内存消耗殆尽,进程开始频繁GC,但服务A还是不断地往服务B发送请求,导致服务B奔溃,服务B的奔溃又直接导致服务A。

2024-03-26 13:57:34 1057

原创 【分布式】——分布式事务

整个 2PC 的事务流程涉及到三个角色 AP、RM、TM。AP 指的是使用 2PC 分布式事务的应用程序;RM 指的是资源管理器,它控制着分支事务;TM 指的是事务管理器,它控制着整个全局事务。(1)在准备阶段RM 执行实际的业务操作,但不提交事务,资源锁定(2)在提交阶段TM 会接受 RM 在准备阶段的执行回复,只要有任一个RM执行失败,TM 会通知所有 RM 执行回滚操作,否则,TM 将会通知所有 RM 提交该事务。提交阶段结束资源锁释放。

2024-03-25 23:32:09 1094

原创 【分布式】——CAP&BASE理论

BASE 是Basically Available(基本可用)、**Soft state(软状态)**和 **Eventually consistent (最终一致性)**三个短语的缩写。BASE 理论是对 CAP 中 AP 的一个扩展,通过牺牲强一致性来获得可用性,当出现故障允许部分不可用但要保证核心功能可用,允许数据在一段时间内是不一致的,但最终达到一致状态。满足BASE理论的事务,我们称之为“柔性事务。

2024-03-25 23:24:06 1056

原创 【RPC】—Protobuf编码原理

Protobuf的编码是基于变种的Base128的,在学习Protobuf编码或者是Base128之前,先来了解下Base64编码。

2023-07-04 20:38:52 1175

原创 【RPC】—Protobuf入门

在IM应用中,优化数据流量消耗过多的基本方法就是使用高度压缩的通讯协议,而数据压缩后流量减小带来的自然结果也就是省电:因为大数据量的传输必然需要更久的网络操作、数据序列化及反序列化操作,这些都是电量消耗过快的根源。当前IM应用中最热门的通讯协议无疑就是Google的Protobuf了,基于它的优秀表现,微信和手机QQ这样的主流IM应用也早已在使用它。什么是 Google Protocol Buffer?

2023-07-04 20:35:31 1205

原创 Java新特性-Predicate

有时候我们需要对某种类型的数据进行判断,从而得到一个boolean值结果。这时可以使用接口

2023-07-04 20:32:27 421

原创 缓存三击-缓存穿透、缓存雪崩、缓存击穿

Redis作为目前使用最广泛的缓存,但在实际开发中会面临缓存异常,分别是缓存雪崩、缓存击穿和缓存穿透,这三种异常会导致大量请求从缓存转移到数据库,如果请求的并发量很大就会导致数据库崩溃。

2023-06-30 17:50:36 1047

原创 缓存穿透-布隆过滤器

如果是网络恶意攻击(每次key不一样,且数据库不存在),缓存占用了更多的内存;缓存空对象要考虑到缓存时间的设置。这时候设置一个较短的过期时间(通常设定的缓存过期为60秒),就会自动剔除这些键。如果过期时间设置的过大,数据库在此期间正好添加了该数据,就会出现数据不一致场景;通过消息系统或者其它方式来清除缓存中的空对象。而另一种方式就是使用布隆缓存器!

2023-06-30 17:45:07 422

原创 Java新特性-Optional

从 Java 8 引入的一个很有趣的特性是Optional类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但是 Optional 的意义显然不止于此。Optional是 Java 语言的有益补充 —— 它旨在减少代码中的。

2023-06-30 17:41:32 339

原创 Java新特性-stream()

在JAVA中,涉及到对数组Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行处理。在JAVA7及之前/*** 【常规方式】* 从给定句子中返回单词长度大于5的单词列表,按长度倒序输出,最多返回3个* @param sentence 给定的句子,约定非空,且单词之间仅由一个空格分隔* @return 倒序输出符合条件的单词列表。

2023-06-30 17:40:15 242

原创 Java新特性-Functon接口

为了更好的将函数作为参数,Java遂引入了Function接口。super V ,?super R ,?} }有一个抽象方法,暗示可以使用λ\lambdaλ表达式;该接口会接收一个参数,且会产生结果;在使用这个接口前需要明确定义参数类型和返回的结果类型(Java的泛型就是这么回事);里面有一个apply方法将会对参数进行操作,并返回结果;因为是函数式接口(),可以通过lambda表达式实现该接口;总之,要分清当前function,也就是当前对象,判断执行顺序。

2023-06-30 17:38:49 222

原创 【SSM整合】2—Spring和SpringMVC整合

Github主页👉笔记链接👉Spring专栏👉SpringMVC专栏👉Mybatis专栏👉如果可以,麻烦各位看官顺手点个star~😊。

2023-04-10 00:07:11 401 2

原创 【SSM整合】1—Spring和Mybatis整合

Github主页👉笔记链接👉Spring专栏👉SpringMVC专栏👉Mybatis专栏👉如果可以,麻烦各位看官顺手点个star~😊。

2023-04-10 00:06:58 398

原创 【SSM整合】3—分页

Github主页👉笔记链接👉Spring专栏👉SpringMVC专栏👉Mybatis专栏👉如果可以,麻烦各位看官顺手点个star~😊。

2023-04-10 00:04:43 478

原创 【SpringMVC】10—其他概念

在实际开发过程中,难免会有某些情况需要使用自定义类型转换器。因为我们自己自定义的类型在 SpringMVC 中没有对应的内置类型转换器。此时需要我们提供自定义类型来执行转换。;泛型S:源类型(本例中是String类型)泛型T:目标类型(本例中是Address类型)// 1.按照约定的规则拆分源字符串 String [ ] split = source . split(",");

2023-04-09 23:31:25 1109

原创 【SpringMVC】9—底层原理

本质上是一个Servlet,所以天然的遵循Servlet的生命周期。所以宏观上是Servlet生命周期来进行调度;的父类是负责框架本身相关的创建和初始化;负责请求处理相关的初始化;创建 IOC 容器对象之后会存入应用域;完成初始化会调用 IOC 容器的刷新方法;刷新方法完成触发刷新事件,在刷新事件的响应函数中,调用的初始化方法;在的初始化方法中初始化了请求映射等;

2023-04-09 23:27:55 951

原创 【SpringMVC】7—文件上传

Github主页👉笔记链接👉如果可以,麻烦各位看官顺手点个star~😊。

2023-04-09 23:24:40 875

原创 【SpringMVC】8—文件下载

Github主页👉笔记链接👉如果可以,麻烦各位看官顺手点个star~😊。

2023-04-09 23:23:45 92

原创 【SpringMVC】6—SpringMVC拦截器

Github主页👉笔记链接👉如果可以,麻烦各位看官顺手点个star~😊。

2023-04-09 23:21:43 949

原创 【SpringMVC】5—异常映射

Github主页👉笔记链接👉如果可以,麻烦各位看官顺手点个star~😊。

2023-04-09 23:18:44 550

原创 【SpringMVC】3—RESTFul风格

ReStateTransfer,表现层资源状态转移。定位:互联网软件架构风格;倡导者:Roy Thomas Fielding;文献:Roy Thomas Fielding的博士论文;在HTML中,GET和POST请求可以天然实现,但是DELETE和PUT请求无法直接做到。SpringMVC提供了帮助我们将POST请求转换为DELETE或PUT请求。

2023-04-09 23:14:12 934

原创 【SpringMVC】4—Ajax

Github主页👉笔记链接👉如果可以,麻烦各位看官顺手点个star~😊。

2023-04-09 23:13:50 149

原创 【SpringMVC】2—传统方式实现增删改查

⭐⭐⭐⭐⭐⭐Github主页👉https://github.com/A-BigTree笔记链接👉https://github.com/A-BigTree/Code_Learning⭐⭐⭐⭐⭐⭐如果可以,麻烦各位看官顺手点个star~😊如果文章对你有所帮助,可以点赞👍收藏⭐支持一下博主~😆

2023-04-09 23:08:56 746

原创 【SpringMVC】1—SpringMVC基础操作

SpringMVC是Spring为表述层开发提供的一整套完备的解决方案。在表述层框架历经、、等诸多产品的历代更迭之后,目前业界普遍选择了SpringMVC作为项目表述层开发的首选方案。

2023-04-09 23:06:00 520

原创 【Mybatis】6—逆向工程&其他概念

当某个具体类型 Mybatis 靠内置的类型处理器无法识别时,可以使用 Mybatis 提供的自定义类型处理器机制。第一步:实现接口或者继承类;第二步:指定其映射某个JDBC类型(可选操作);第三步:在Mybatis全局配置文件中注册;// 1.从结果集中获取原始的地址数据 String addressOriginalValue = resultSet . getString(columnName);

2023-04-08 00:03:36 849

原创 【Mybatis】5—缓存

先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的数据,可以拿来直接使用;如果二级缓存没有命中,再查询一级缓存;如果一级缓存也没有命中,则查询数据库;SqlSession关闭之前,一级缓存中的数据会写入二级缓存;官网地址:https://www.ehcache.org/

2023-04-08 00:03:26 463

原创 【Spring】4—声明式事务

为了在特定领域帮助我们简化代码,Spring封装了很多『Template』形式的模板类。等等,包括我们今天要学习的。对一个查询操作来说,如果我们把它设置成只读,就能够明确告诉数据库,这个操作不涉及写操作。这样数据库就能够针对查询操作来进行优化。我们在事务传播行为这里,使用属性,也可以说是让不同事务方法从事务的使用上解耦合,不要互相影响。

2023-04-08 00:01:37 679

原创 【Spring】3—AOP面向切面编程

二十三种设计模式中的一种,属于结构型模式。它的作用就是通过提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标方法进行调用,而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中剥离出来——解耦。调用目标方法时先调用代理对象的方法,减少对目标方法的调用和打扰,同时让附加功能能够集中在一起也有利于统一维护。虽然我们上面介绍过的切入点表达式语法细节很多,有很多变化,但是实际上具体在项目中应用时有比较固定的写法。典型场景:在基于 XML 的声明式事务配置中需要指定切入点表达式。

2023-04-08 00:01:29 407

原创 【Spring】2—IOC容器

是Spring提供的一种整合第三方框架的常用机制。和普通的bean不同,配置一个类型的bean,在获取 bean的时候得到的并不是class属性中配置的这个类的对象,而是方法的返回值。通过这种机制,Spring可以帮我们把复杂组件创建的详细过程和繁琐细节都屏蔽起来,只把最简洁的使用界面展示给我们。将来我们整合Mybatis时,Spring 就是通过机制来帮我们创建对象的。

2023-04-08 00:01:20 1503

原创 【Spring】1—Spring简介

Spring的基础框架,可以视为Spring基础设施,基本上任何其他Spring项目都是以Spring Framework为基础的。

2023-04-08 00:01:11 959

原创 【Mybatis】4—动态SQL

Mybatis框架的动态SQL技术是一种 根据特定条件动态拼装SQL语句 的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。MyBatis的一个强大的特性之一通常是它的动态SQL能力。

2023-04-07 19:06:33 1123

python食物数据爬取及分析(源码、爬取数据、数据可视化图表、报告)

python课程学期期末大作业 爬取数据网站为http://db.foodmate.net/yingyang/ 详细介绍数据爬取过程及数据分析可视化 详细内容见博主博客

2022-01-08

数据结构-栈与队列.zip

1.栈定义 2.循环队列定义 3.一个迷宫问题 4.最短路径 5.中缀转后缀表达式 6.计算表达式

2021-10-21

利用Qt5实现学生选课管理系统(超详细附思路和代码).zip

项目完整工程文件 详情可见博主项目博客

2021-10-02

mainwindow.cpp

mainwindow.cpp文件 详细内容见博主项目博客

2021-10-02

数据结构-数组.zip

1.多项式(表示、加法、乘法完整代码); 2.稀疏矩阵(表示、转置、快转置、加法、乘法完整代码); 3.字符串匹配(KMP算法)。

2021-09-21

空空如也

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

TA关注的人

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