自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (2)
  • 收藏
  • 关注

原创 自定义树形数据结构

ID唯一,NAME有重复,存在多个根节点,根节点与子节点是一对多关系,层级不固定,存在需求:要根据NAME查出对应ID,所以定义一个树形数据结构。定义内部类Node,Node存储ID、NAME与其子节点NODES,主要由NODE与Map构造。

2023-08-31 15:26:08 121

原创 通过反射+策略模式实现筛选集合中符合条件的数据

遇到这样一种业务:存在产品信息、公司信息等多种维度的表数据,每种维度的数据都会对应一套查询规则且查询规则是可配可扩展的,查询规则就类似于sql中写where,要实现恒等、模糊、范围等查询规则;因表数据量很大,而且存在很多复杂的查询,所以就设计了一套在java集合中筛选数据的功能;

2023-01-06 15:52:53 739

原创 MySQL 【读写锁+表锁+行锁+MVCC】

本文整理自尚硅谷MySQL数据库教程天花板写在前面:简单的思维导图:并发的事务会导致数据不一致问题(脏写脏读等) ->引申出四种隔离级别(解决问题的方案) ->隔离级别由redo log + undo log +锁+MVCC共同实现(解决问题的工具)文章目录锁并发事务访问相同记录的三种情况:并发问题的解决方案锁的不同角度分类对数据操作类型划分:锁粒度角度划分:锁的态度划分:加锁方式划分:其他:读锁、写锁锁定读表级锁、页级锁、行锁表锁(Table Lock)意向锁 (intenti

2022-04-22 18:19:32 841

原创 MySQL【ACID+隔离级别+ redo log + undo log】

本文整理自尚硅谷MySQL数据库教程天花板写在前面:简单的思维导图:并发的事务会导致数据不一致问题(脏写脏读等) ->引申出四种隔离级别(解决问题的方案) ->隔离级别由事务日志+锁+MVCC共同实现(解决问题的工具)|锁和MVCC不在此篇文章介绍文章目录MySQL数据库事务事务的ACID特性事务的状态如何使用事务事务隔离级别数据并发问题SQL中的四种隔离级别MySQL查看设置事务隔离级别事务原理-事务日志事务日志介绍(redo log、undo log)redo log为什

2022-04-22 17:59:17 1239

原创 MySQL【sql性能分析+sql调优】

本文整理自尚硅谷MySQL数据库教程天花板文章目录sql性能分析使用`last_query_cost`通过开启mysql的慢查询日志,让mysql记录超时的sql慢查询日志分析工具:mysqldumpslow查看 SQL 执行成本:SHOW PROFILE通过`explain`分析工具查看sql的执行计划sql调优索引失效的11种情况连接查询时mysql为我们做的优化JOIN语句原理JOIN调优子查询优化order by 排序优化GROUP BY优化优化分页查询覆盖索引索引条件下推 ICP (索引下推)(

2022-04-22 17:35:47 331

原创 MySQL索引【数据结构+索引创建原则】

本文整理自尚硅谷MySQL数据库教程天花板文章目录索引索引的数据结构比较B+树索引类型存储索引的方式回表查询覆盖索引(避免回表查询)复合/联合索引设计原则适合创建索引的11种情况不适合创建索引的7种情况索引索引的本质就是一种数据结构,简单理解为排好序的可快速查找的数据结构mysql中,索引的数据结构可以为HASH(哈希) 或 BTREE(B+树)哈希与B+树的对比,哈希是K-V存储结构,适合精确查找,是无序的数据结构,不适合范围查找;而B+树是一个有序的数据结构,可胜任快速的范围查询

2022-04-22 17:06:18 1059

原创 ES入门学习笔记

介绍:ES是一个分布式文档的非关系型数据库(文档类似于关系型数据库中的单条记录),文档的每个字段默认会被索引,每个字段的数据均可被搜索,能够横向扩展至数以百计的服务器存储以及处理PB级的数据。ES基于Restful Api接口,可通过Restful Api与ES进行交互。使用案例:es可作为博客系统的数据库,文章等内容储存到es中,可根据文章内容进行快速检索当关系型数据库中数据量特别大查询慢时,可将大量数据导入es中,查询走es部署大规模的日志框架、logstash采集日志,es存储、搜索和分析

2022-02-07 09:18:47 1727

原创 用反射与注解获取两个不同对象间的属性值差异

业务场景:操作人将一条记录的某些字段更改了,想要记录操作日志,谁将某个字段改为了什么分析:记录操作日志,也就是拿前端传来的数据与数据库中数据作比较,就是比较 dto 与 entity 间属性值的差异,两个对象属性不完全一致解决思路:自定义一个注解加在 dto 需要比较的属性上,在注解中定义该属性的中文名称,再利用反射遍历 dto 中所有加了注解的属性,拿属性名去 entity 中找同名属性,再比较属性值;如果属性类型是 Integer 等整形类型,结果输出”由 1 变为 2“ ,这种语义不好理解,可在注

2021-12-14 17:03:09 711

原创 用Future与CountDownLatch实现多线程执行多个异步任务,任务全部完成后返回结果

import java.util.ArrayList;import java.util.List;import java.util.concurrent.*;/** * 用Future与CountDownLatch实现多线程执行多个异步任务,任务全部完成后返回结果 */public class TestFuture { public static void main(String[] args) { TestFuture testFuture = new TestFut

2021-10-11 17:45:13 1492

原创 Java 是值传递还是引用传递

结论:Java 是值传递,传递的不是字面意思上的数字或字符串值,而是地址值。每次当主函数调用被调函数时,形参持有的的地址值与实参的地址值一致,也就是说形参与实参指向同一个堆中的内存。在被调函数中,如果形参一旦被=赋值,形参持有的地址值会指向新值的地址,但实参的地址值不会改变。用hashCode()来表示地址值做一个例子:public static void main(String[] args) { String num = "one"; System.out.println(num.

2021-09-22 16:10:21 79

原创 记录 axios 设置请求头 application/x-www-form-urlencoded 无效的原因

axios 已经全局设置了 application/x-www-form-urlencoded 请求头const Axios = Axios.create({ baseURL: 'https://XXX.cn', timeout: 6000})Axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';但后续的post请求头依旧带的是 application/json是因为请

2021-08-26 10:25:18 2196

原创 vue侧栏菜单的无限嵌套

先看效果:在权限管理中,可更改任意菜单的路由路径(path)、组件(component)、重定向(redirect) 等属性,也可自定义权限(菜单) 的层级关系(在本文中权限与菜单的意义是一样的)如何实现该方案:将所有的路由对象都存放在数据库中,在每次加载页面前去获取菜单数组,菜单数组需要赋值给两个组件,一个是页面侧栏 el-menu ,一个则是 vue-router;在第一张图的权限管理页面中又是一次独立的查询,不管菜单隐藏或禁用与否,全部查出来。el-menu 负责展示(其中el-menu

2021-08-05 11:08:53 1197

原创 ThreadLocal 与其底层数据结构的介绍

ThreadLocal 是什么通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK中提供的ThreadLocal类正是为了解决这样的问题。ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是ThreadLocal变量名的由来。他们可

2021-02-18 18:30:14 1912

原创 使用 Java 的 Lock 锁实现办公楼中的电梯载客程序 1.0

使用 Java 的 Lock 锁实现办公楼中的电梯载客程序 1.0该 demo 已在 gitee 上开源,git 链接,欢迎 star !程序的基本介绍与需求:大楼只有一架电梯,楼层可自定义,每层楼 在不同时间点 有数量不定 的乘客需要上下楼。乘客在进入电梯前要选择上楼或下楼,进入电梯后选择楼层。一楼乘客不能下楼,顶楼乘客不能上楼。电梯运行顺序是先向上走,再向下;例如1楼的人去10楼,中途5楼有人要去1楼,先将1楼的人送到10楼,中途不在5楼停顿,之后再送5楼的人去1楼。简单程序的

2020-11-19 17:19:17 246 3

原创 关于 synchronized、ThreadLocal、线程池、Atomic 原子类的 JUC 面试题

文章目录1. 说一说 synchronized 关键字2. 怎么使用 synchronized 关键字3. 说一下 synchronized 关键字的底层原理4. JDK1.6 之后的 synchronized 关键字底层做了哪些优化5. Synchronized 与 Lock 锁的区别6. Synchronized 与 ReentrantLock 的区别7. ThreadLocal 是什么8. 说一下 ThreadLocal 原理9. 为什么 ThreadLocalMap 底层需要数组呢?没有了链表怎么解

2020-09-16 11:58:14 337 1

原创 Java 多线程中用 synchronized 加锁的八锁问题

看以下代码,有一个 phone 对象,A、B 线程分别调用该对象的方法,问两个方法谁先调用?答:先发短信再打电话,因为 synchronized 锁住的是 phone 对象(锁的对象是方法调用者)。public static void main(String[] args) throws InterruptedException { phone phone = new phone(); new Thread(() -> { phone.sendMsg(); .

2020-09-14 11:31:53 395 10

原创 volatile 关键字的三大特点【数据可见性、指令禁止重排性、不保证操作原子性】

volatilevolatile 关键字的两个作用:保证共享数据可见性、保证指令重排;一个问题:不保证多线程操作共享数据的原子性。保证共享数据可见性来看以下代码:public class VolatileDemo { boolean stop = false; public static void main(String[] args) throws Exception { VolatileDemo test = new VolatileDemo();

2020-09-12 13:59:07 383

原创 流媒体技术【ffmepg、nginx-http-flv-moudle、video.js、flv.js】实现 web 端直播与视频回放功能 + 流媒体服务器搭建资源

文章目录流程介绍三种常见的视频流协议介绍(RTMP、RTSP、HLS)RTMP(Real Time Messaging Protocol)实时消息传输协议RTSP(Real Time Streaming Protocol)实时流传输协议HLS(HTTP Live Streaming)在浏览器中如何播放视频流播放 RTMP 视频流使用 ffmpeg + nginx-http-flv-module + flv.js 在浏览器中通过 http 播放视频(最推荐的方式)播放 HLS 视频流使用 ffmpeg + n

2020-09-08 15:49:21 2435 10

原创 你应该知道的 HTTP、HTTPS、TCP、UDP 协议基础知识与面试题

文章目录HTTP 是什么HTTP 优缺点如何解决 HTTP 无状态性的问题URI,URL,URNHTTP 消息结构请求消息通用参数请求头响应头HTTP/1.1 中的请求方法HTTP1.0/1.1/2.0 的特点HTTP1.0HTTP1.1HTTP2.0HTTPSHTTP 与 HTTPS 区别HTTPS的工作流程对称加密与非对称加密非对称加密工作流程CA数字证书颁发机构总结:TCP 与 UDPUDP 是什么UDP 的特点主要有TCP 是什么TCP 的主要特点有二者区别TCP三次握手三次握手的流程是客户端与服

2020-08-27 16:39:33 517 2

原创 React 详解【 JSX + 组件 + prop、state、ref + 事件 + 生命周期 + React Ajax + React Router路由 + Redux】

文章目录React 是什么安装 React安装步骤:React 中的元素渲染React JSX使用 JSX 的好处:使用 React JSXReact 组件渲染组件复合组件组件的三大属性(state、props、refs)state使用 state使用 state 的小案例props作用使用 propsrefsrefs 使用的小案例注意:组件内的事件事件函数的使用组件的生命周期组件三个生命周期状态生命周期方法与流程重要的生命周期方法虚拟DOM 与 DOM Diff 算法React Ajax说明常用的 Aja

2020-08-10 16:36:54 663 1

原创 Redis 详解(基础+数据类型+事务+持久化+发布订阅+主从复制+哨兵+缓存穿透、击穿、雪崩)

本篇文章总结自【bilibili 狂神说Java Redis】【狂神说Java】Redis最新超详细版教程通俗易懂写在前面在需求愈来愈多元化的今天,来自客户端的大量请求如果再直接访问关系型数据的话一定会消耗过多的资源,而且大多数据也没有必要进行持久化,因由等等原因,非关系型数据库被创造出来,例如存储键值对数据的 Redis、专门存储文档型数据的 MongoDB,非关系型数据库最大的特点之一就是将数据存储在内存中,就像是挡在关系型数据库前面的一道屏障,不仅降低了资源开销,也节约了查询的时间。Redis

2020-07-04 23:16:52 264

原创 你应该知道的 JVM 基础知识

Java 程序运行机制步骤首先编写 Java 源代码,源文件的后缀为 .java利用 JVM 编译器将源代码编译成字节码文件,字节码文件的后缀名为 .class由 JVM 解释器运行字节码文件,将字节码文件解释成当前机器能够看懂的二进制数据进行类的转载(加载、链接、初始化)将数据读入到内存中,将不同的数据(变量)放入运行时数据区中的不同区域内JVM 运行时数据区程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器,JVM 解析器的工作是通过

2020-06-12 20:57:51 288

原创 【设计模式】代理模式

本篇文章总结自 【通俗易懂的23种设计模式教学】bilibili 狂神说Java代理模式代理模式介绍在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用。Spring AOP 底层原理就运用到了代理模式,例如要给核心代码加上打印日志等操作,如果只考虑写死代码,就直接在核心代码中加入日志,如果未来还需要改动日志的话,又需要修改核心代码,不符合开闭原则。而代理模式就是帮我们代理核心业务代码,分离出公共业务代码(例如日志)并帮我们调用核心业务代码。

2020-06-07 17:10:04 175

原创 Spring Boot 整合 Spring Security 与 Shiro 以及两者的介绍与使用

Spring Security介绍Spring Security是一个功能强大、高度可定制性的身份验证和访问控制的框架。它能够保护基于Spring框架的应用程序。Spring Security是一个专注于为 Java 应用程序提供身份验证和授权的框架。与所有Spring项目一样,Spring安全的真正威力在于它可以很容易地被扩展以满足需求。整合流程简单介绍整合流程:本文案例使用 Spring Boot 集成 Spring Security。首先导入 security 的启动包,创建 securi

2020-06-02 14:57:22 1672

原创 【设计模式】桥接模式

本篇文章总结自 【狂神说Java桥接模式】bilibili 狂神说Java桥接模式桥接模式桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interfce)模式。举产品与品牌的例子,每个品牌都有属于自己的电脑类型,这时我想获取某一个品牌的笔记本或台式机,一般会写一个电脑类,用台式机类去继承电脑类,再用不同品牌的台式机去继承台式机类,这种写法扩展性、维护性差,这时就可以使用桥接模式。看下图,可以将品牌(不同

2020-05-26 18:03:38 228

原创 【设计模式】适配器模式

本篇文章总结自 【狂神说Java适配器模式】bilibili 狂神说Java适配器模式适配器模式核心当一个类需要使用到另外一个类的方法时,而这两个类之间并没有任何关系,如果一味的使用 new 对象的方式则非常冗余,所以需要一个适配器来拉近两者的关系,例如 B 类持有适配器对象,将 A 对象传入适配器中,让适配器调用 A 的方法适配器模式案例一【类适配器模式】电脑没有插网线的口,需要一个转接头将网线口转为 usb 接口。有电脑、网线、转接头三个类,电脑调用转接头的方法,转接头调用网线的方法,代码结构:

2020-05-16 13:25:15 272

原创 【设计模式】工厂模式

本篇文章总结自 【狂神说Java工厂模式】bilibili 狂神说Java工厂模式工厂模式核心本质:实例化对象不使用 new,用工厂方法代替将选择实现类,创建对象统一管理和控制,从而将调用者跟我们的实现类解耦简单工厂模式例如工厂要生产不同品牌的汽车,有了工厂,消费者不需要手动去 new 一个汽车,只需要借助工厂返回对应的车即可,以下是简单工厂模式结构:红旗与特斯拉都实现了 Car 接口,表示两中汽车,CarFactory 具有返回两种汽车的方法,消费者只需调用工厂中方法即可:public

2020-05-15 21:49:11 270

原创 【设计模式】建造者模式

本篇文章总结自 【狂神说Java建造者模式】bilibili 狂神说Java建造者模式建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的对象主要作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)先按照上图写一个Demo,项目结构:ConnectionPool 是一个连接池对象,其包含了

2020-05-10 16:51:22 161

原创 简述Dubbo的概念与如何使用Dubbo

背景随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。该应用架构适用于小型网站或小型管理系统,将所有模块都写在一个项目当中然后上线,但是项...

2020-05-08 00:24:31 163

原创 简述Maven

随着开发的项目越来越庞大,再引入各类框架,项目中所需要的jar包越来越多,所以我们需要项目构建工具Maven来协助我们快速构建一个企业级的项目并帮助我们管理大量的依赖Maven自动构建项目的流程:清理:删除以前的编译结果,为重新编译做好准备。编译:将 Java 源程序编译为字节码文件。测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。报告:在每一次测试后以标准的...

2020-05-04 17:35:01 201

原创 【设计模式】抽象工厂模式

本篇文章总结自 【狂神说Java抽象工厂模式】bilibili 狂神说Java抽象工厂模式工厂模式本质:实例化不用new,用工厂模式来代替可选择实现类,创建对象统一管理和控制,从而将调用者与实现类解耦先来看抽象工厂模式的结构图:可以看到产品分支与工厂分支是独立开来的,产品分支分为多个产品接口,一个产品接口又可以有多个实现类。而工厂分支中的大工厂指定了可以生产哪些产品,其实现类(华...

2020-05-03 16:53:19 446 1

原创 【设计模式】单例模式

本篇文章总结自 【狂神说Java单例模式】bilibili【狂神说Java】单例模式单例模式可以由四种方式来实现饿汉式懒汉式内部类式枚举饿汉式单例,在类加载的过程中对象直接被实例化,没有线程安全问题,但当类中属性很多时,会耗费大量的资源public class Hunger { private Hunger() {} private static fina...

2020-05-02 00:07:06 124

原创 SpringCloud中部分组件的介绍与配置流程

微服务是一种架构方式,而SpringCloud与其集成的各类组件框架是实现微服务架构的一种方式,因为其基于Spring、使用便利、善于集成等优势而被广泛使用SpringCloud主要涉及的组件包括,本文也按以下顺序来介绍:Eureka:注册中心Ribbon:负载均衡Hystix:熔断器Feign:隐藏服务的调用信息Zuul:服务网关Eureka注册中心基于日益复杂的互联网环境...

2020-04-25 00:07:47 508

原创 Spring的面试题

1. 什么是spring,spring由哪些功能组成?spring是分层的JavaEE\SE应用轻量级开源框架,spring在mvc三层当中为各个层级提供了相应的解决方案,例如:针对所有层级都基于IOC与DI的思想;在表现层有springmvc,也可集成struts、struts2,在业务层中IOC与DI可派上用场;在持久层可使用spring提供的JDBCTemplate,也可集成使用My...

2020-04-13 23:58:33 252

原创 SpringMVC注解@ModelAttribute的处理流程

@ModelAttribute 可以修饰方法与目标方法中的参数修饰方法:1). 被修饰的方法会在调用目标方法前调用2). 在被修饰的方法中使用 HashMap、Model、ModelMap 存入键值对,springmvc都会将数据存入模 型数据当中;源码表示在进入@ModelAttribute修饰的方法中,会先实例出mav容器,之后往容器中放入数据修饰目标方法中的参数1). ...

2020-03-28 21:59:55 743

原创 通过源码探究@ModelAndView如何实现数据与页面的转发

首先给ModelAndView附上model数据与视图名,在return语句上打断点,url访问该controller,在返回ModelAndView对象之前,springmvc 会先调用 DispatcherServlet 类中的 doDispatch 方法,在该方法中有通过 HandlerAdapter 获取controller中 ModelAndView 对象的方法ha.handle...

2020-03-28 15:46:16 499

原创 记录SpringMVC 静态资源是否在WEB-INF下遇到的问题

如果把静态资源(jsp、css、img、js)全部放在web路径下,jsp中链接到各个css、js、img等资源要配置在spring配置文件中或web.xml中:<mvc:resources location="/js/" mapping="/js/**"></mvc:resources><mvc:resources location="/css/" mapp...

2020-03-26 22:10:10 562

原创 SpringMVC获取请求参数的几种方式

SpringMVC获取参数的方式:使用原生的 HttpServletRequest 接收@RequestParam、@RequestHeader、@CookieValue@RequestBody@PathVariable@SessionAttribute@ModelAttribute对于get请求来说,可以使用的方式有:使用原生的 request 直接 request.ge...

2020-03-22 23:24:14 395

原创 用大白话来说一说对spring IOC、DI 的理解

IOC控制反转先从最基础的mvc三层来讲,一般在controller中new出service的实现类,在service中new出dao实现类,层层联系都非常紧密,专业来讲就是耦合度高,spring为了解耦合,想不再以new对象的形式来获取一个实例,然后就有了控制反转一说,看反转这个字面意思也感觉好像我不是主动去拿我要的实例对象了,而是以一种方式递给我,的确,spring有ioc容器一说,这个容器...

2020-03-14 00:06:37 192 1

原创 Vue实例的生命周期

本篇文章根据Vue官方的生命周期例图来介绍Vue实例的生命周期与其中的方法先上图:new Vue()new Vue的过程就是创建一个Vue对象,该对象中的data:{ //数据 }与methods:{ //回调函数 }也都被创建出来,但还未被赋值初始化,事件&生命周期该状态也是空的vue对象,并未绑定data中数据与回调方法beforeCreate方法var...

2020-02-27 21:41:44 254

流媒体服务器 + 前端.rar

(windows系统下已集成好的) nginx-http-flv-module + nginx-rtmp-module + videojs前端页面 + flvjs前端页面

2020-09-08

incubator-dubbo-ops-master.rar

incubator-dubbo-ops-master.rar dubbo-admin 控制台 与 dubbo-monitor-simple 可视化监控

2020-05-07

空空如也

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

TA关注的人

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