自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (1)
  • 收藏
  • 关注

原创 【数据结构】二叉树

2 对称二叉树3 二叉树的最大深度4 从前序与中序遍历序列构造二叉树5 二叉树的层序遍历6 是否是平衡二叉树7 路径总和8 路径总和 II9 是否是二叉搜索树

2022-06-26 14:04:51 240 1

原创 【数据结构】位运算

位图的功能:如果一个数字大小是确定的,可以使用一个数字集合收集数字,告知这个数字是否存在(位 1 存在,位 0 不存在)。位图的好处:极大的压缩空间位图的实现:

2022-06-25 17:09:22 248

原创 【数据结构】链表

2 链表实现队列和栈3 双端队列4 K 个节点组内逆序调整5 两个链表相加6 两个有序链表的合并

2022-06-25 11:27:29 215

原创 【数据结构】二分法

2. 有序数组中找到 >=num 最左的位置3. 有序数组中找到 >=num 最左的位置4. 局部最小值问题1)数组第一个元素比第二个元素小,即为局部最小值。2)数组最后一个元素比它前一个元素小,即为局部最小值。3)若不满足,那么局部最小值必可在数组首尾两元素之间的某个位置取得。此时可以采用二分法思想,看中间位置是否符合条件,不符合就分成两部分,从不符合的那一边继续操作。...

2022-06-21 20:19:08 388

原创 【数据结构】随机函数

Math.random 函数以等概率返回 [0, 1) 的值。等概率返回 [0, k) 的值返回 x^2 的概率返回 1 - (1 - x)^2 的概率2. 0 - 1 发生器问题:由 1 - 5 等概率函数得到 1 - 7 等概率函数首先由 1-5 随机写出 0-1 随机发生器(将 3 概率等分给1 2 和 4 5,1 2 为 0,4 5 为 1),7 的二进制数为 111,所以写出 01 随机后根据三位二进制数随机得到 0-7,强制将为 7 的结果均匀分给其他结果(0-6)等到 0 - 6 发

2022-06-19 15:37:58 205

原创 【数据结构】计算给定数组 n - m 范围的和

问题:查询给定数组 [1, 2, 3, 4] 的 n~m 范围内的和?直接算的话我们可以遍历 n ~ m 求和,如果查询次数很频繁的话,就会消耗大量的时间,因此我们可以设计一个数据结构进行预处理。采用 4 * 4 矩阵存储,直接将 n 到 m 的值全部计算出置入二维数组,需要用到直接取。此法会存在 n * n / 2 大小的空间浪费,并且建立该表示时间消耗大。采用前缀和方式存储,采用一维数组的方式存储,实际上就是上述矩阵的第一行,该一维数组中存储的是从 0 到 n 的累加值,当咱们需要取从 n 到 m 的累

2022-06-19 11:41:00 153

原创 【深入理解 Dubbo 与实战】4 Dubbo 扩展点加载机制

文章目录4 Dubbo 扩展点加载机制4.1 加载机制概述4.1.1 Java SPI4.1.2 扩展点加载机制的改进4.1.3 扩展点的配置规范4.1.4 扩展点的分类与缓存4.1.5 扩展点的特性4.2 扩展点注解4.2.1 扩展点注解 @SPI4.2.2 扩展点自适应注解 @Adaptive4.2.3 扩展点自动激活 @Activate4.3 ExtensionLoader 工作原理4.3.1 工作流程4.3.2 getExtension 的的实现原理4.3.3 getAdaptiveExtensio

2022-04-06 20:02:41 743

原创 【深入理解 Dubbo 与实战】3 注册中心

文章目录3 Dubbo 注册中心3.1 注册中心概述3.1.1 工作流程3.1.2 数据结构3.1.3 Zookeeper 原理概述3.1.4 Redis 原理概述3.2 订阅/发布3.2.1 Zookeeper 的实现3.3.2 Redis 的实现3.3 缓存机制3.3.1 缓存的加载3.3.2 缓存的保存与更新3.4 重试机制3.5 设计模式3.5.1 模板模式3.5.2 工厂模式3 Dubbo 注册中心3.1 注册中心概述在 Dubbo 微服务体系中,注册中心是其核心组件之一。Dubbo 通过注

2022-04-06 20:01:06 2375

原创 【Spring 源码深度解析】13 Spring Boot 体系原理

文章目录1 介绍2 第一个 Starter3 探索 SpringApplication 启动 Spring3.1 SpringContext 的创建3.2 bean 的加载3.3 Spring 扩展属性的加载3.4 总结4 Starter 自动化配置的原理4. 1 spring.properties 的加载1 介绍Spring boot 用来简化新 Spring 应用的初始化搭建以及开发过程,主要特点:创建独立的 Spring 应用程序。嵌入的 Tomcat,无需部署 WAR 文件。简化 Mav

2022-03-26 12:25:11 346

原创 【Spring 源码深度解析】12 Spring 消息

文章目录1 介绍2 JMS 的独立使用3 Spring 整合 ActiveMQ4 源码分析4.1 JmsTemplate4.2 监听器容器1 介绍Java 消息服务(Java Message Service,JMS)应用程序接口是一个 Java 平台中关于面向消息中间件(MOM)的 API,用于在两个应用程序之间或分布式系统中发送消息,并进行异步通信。Java 消息服务是一个与具体平台无关的 API,绝大多数 MOM 提供商都对 JMS 提供支持。Java 消息服务的规范包括两种消息模式,点对点和发布

2022-03-19 17:30:57 589

原创 【Spring 源码深度解析】11远程服务

文章目录1 RMI1.1 使用示例1.2 服务端实现1.2.1 获取 registry1.2.2 初始化将要导出的实体对象1.2.3 RMI 服务激活调用1.3 客户端实现1.3.1 通过代理拦截并获取 stub1.3.2 增强进行远程连接2 HttpInvoker2.1 使用示例2.2 服务端实现2.2.1 创建代理2.2.2 处理来自客户端的 request2.3 客户端实现1 RMIJava 远程方法调用,即 Java RMI(Remote Method Invocation),是 Java 编程

2022-03-17 21:27:44 642

原创 【Spring 源码深度解析】10 SpringMVC

文章目录1 介绍2 SpringMVC 快速体验3 ContextLoaderListener3.1 ServletContextListener 的使用3.2 Spring 中的 ContextLoaderListener4 DispatcherServlet4.1 Servlet 的使用4.2 DispatcherServlet 的初始化4.3 WebApplicationContext 的初始化5 DispatcherServlet 的逻辑处理5.1 MultipartContent 类型的 requ

2022-03-12 16:44:48 188

原创 【Spring 源码深度解析】09 事务

文章目录1 JDBC 方式下的事务使用示例2 事务自定义标签2.1 注册 InfrastructureAdvisorAutoProxyCreator2.2 获取对应 class/method 的增强器3 事务增强器3.1 创建事务3.1.1 获取事务3.1.2 处理已存在的事务3.1.3 准备事务信息3.2 回滚处理3.3 事务提交1 JDBC 方式下的事务使用示例1)创建数据表结构CREATE TABLE user ( id int(11) NOT NULL auto increment, n

2022-03-06 21:12:46 279

原创 【Spring 源码深度解析】08 整合 Mybatis

文章目录1 Mybatis独立使用2 Spring 整合 Mybaits3 源码分析SqlSessionFactory 的创建3.2 MapperFactoryBean 的创建3.3 MapperScannerConfigurer1 Mybatis独立使用1)建立 POpublic class User { private Integer id; private String name; private Integer age; // 省略 set/ge

2022-03-02 21:02:58 389

原创 【Spring 源码深度解析】07数据库链接 JDBC

文章目录1 Spring 连接数据库实现(JDBC)2 save/update 功能的实现2.1 基础方法 execute2.2 update 中的回调函数3 Query 功能的实现4 queryForObject1 Spring 连接数据库实现(JDBC)Spring 对 JDBC 做了大量封装,消除了冗余代码,使得开发了大大减少。下面通过一个例子了解下 Spring 中 JDBC 的操作。1)创建数据表结构CREATE TABLE user ( id int(1) NOT NULL auto

2022-02-27 17:42:35 693

原创 【Spring 源码深度解析】06 AOP

文章目录1 使用示例2 动态AOP自定义标签2.1 注册 AnnotationAwareJAutoProxyCreator3 创建 AOP 代理3.1 获取增强方法或者增强器3.2 寻找匹配的增强器3.3 创建代理3.3.1 封装 Advisor 到 ProxyFactory 中3.3.2 获取代理4 静态 AOP 使用示例5 创建 AOP 静态代理5.1 Instrumentation 的使用5.2 自定义标签5.3 织入Spring 2.0 采用 @Aspect 注解对POJO进行标注,从而定义一个包

2022-02-25 22:53:17 169

原创 【Spring 源码深度解析】05 容器的扩展

文章目录1 设置配置路径2 扩展功能3 环境准备4 加载 BeanFactory4.1 定制 BeanFactory4.2 加载 BeanDefinition5 功能扩展5.1 增加对 SpEL 语言的支持5.2 增加属性注册编辑器5.2.1 使用自定义属性编辑器5.2.2 注册 Spring 自带的属性编辑器 CustomDateEditor5.2.3 注册源码5.3 添加 ApplicationContextAwareProcessor 处理器5.4 注册依赖忽略5.5 注册依赖6 BeanFactor

2022-02-19 16:33:37 346

原创 【Spring 源码深度解析】04 Bean 的加载

文章目录1 bean 加载的基本逻辑2 FactoryBean 的使用3 缓存中获取单例 bean4 从 bean 的实例中获取对象5 获取单例6 准备创建 bean6.1 处理 override 属性6.2 实例化的前置处理7 循环依赖7.1 概念7.2 Spring 如何解决循环依赖8 创建 bean8.1 创建 BeanWrapper 实例8.1.1 obtainFromSupplier8.1.2 instantiateUsingFactoryMethod8.1.3 autowireConstruct

2022-02-17 21:55:17 230

原创 【Spring 源码深度解析】03 自定义标签的解析

1 parseCustomElement当完成从配置文件到 Document 的转换并提取对应的 root 后,就开始了所有元素的解析,而在这过程中便开始了默认标签与自定义标签两种梢式的区分,函数如下:protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) { //对 beans 的处理,根节点是beans if (delegate.isDefaultNamespace(root

2022-01-27 22:37:15 390

原创 【Spring 源码深度解析】02 默认标签的解析

文章目录1 parseDefaultlement2 bean 标签的解析2.1 解析 BeanDefinition2.1.1 对其它属性的解析2.1.2 AbstractBeanDefinition 的属性2.2 解析默认标签中的自定义标签2.3 注册解析完成的 BeanDefinition2.3.1 通过 beanName 注册 BeanDefinition2.3.2 alias 的注册2.4 通知监听器解析注册完成3 alias 标签的解析4 import 标签的解析5. 嵌入式 beans 标签的解析

2022-01-23 15:49:24 238

原创 【Spring 源码深度解析】容器基本实现

文章目录1 Spring 的整体架构1.1 Core Container1.2 Aop 和 Instrument1.3 Messaging1.4 Data Access/Integration1.4 Web2 容器的基本实现2.1 容器的基本语法2.2 功能分析2.3 Spring 的结构组成2.3.1 beans 包的层次结构2.3.2 核心类介绍2.4 容器的基础 XmlBeanFactory2.4.1 配置文件的封装2.4.2 加载 Bean2.5 获取 EntityResolver2.5.1 en

2021-12-31 21:36:09 858

原创 【深入理解 Dubbo 与实战】1-2 什么是Dubbo

文章目录1 Dubbo - 高性能 RPC 通信框架1.1 服务架构发展演变1.2 什么是 RPC1.3 Dubbo 介绍1.3.1 基本概念1.3.2 Dubbo 特性1.2.3 Dubbo 解决什么问题1.4 Dubbo 总体结构1.4.1 Dubbo 总体分层1.4.2 Dubbo 核心组件1.4.3 Dubbo 总体调用过程2 第一个 Dubbo 程序2.1 配置 Dubbo 环境2.2 基于 XML 配置实现2.2.1 编写 Echo 服务器2.2.2 编写 Echo 客户端2.3 基于注解实现2

2021-12-19 11:47:11 276

原创 【Kafka】入门

文章目录1 Kafka 概述1.1 定义1.2 Kafka 基础架构1 Kafka 概述1.1 定义Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。1.2 Kafka 基础架构

2021-12-07 23:12:16 64

原创 Idea 添加到右键菜单

按Windows+R快捷键打开运行窗口。输入 regedit 打开注册表编辑器找到 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell 项在 shell 项下添加新项 Idea,选择 Idea 后在右边面板中新建一个字符串值,重命名为 Icon。并为其赋值为 Idea 的运行路径。该操作目的是获取显示的图标。再次选择 Idea,为其添加一个名为 command 的新项。选择 command 后,在右边的面板中,为默认项赋值 “Idea 运.

2021-12-04 15:04:07 4150

原创 Zookeeper 入门

文章目录1 Zookeeper 入门1.1 概述1.2 特点1.3 数据结构1.4 应用场景1.5 下载地址2 Zookeeper 集群安装1 Zookeeper 入门1.1 概述Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。工作机制: Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理数据,接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper 就将负责通知已经在 Zookeeper 上注册的

2021-11-23 21:40:13 1421

原创 【Rabbit MQ】快速入门

文章目录1 MQ 的相关概念1.1 什么是 MQ1.2 为什么使用 MQ1.2 MQ 的分类2 RabbitMQ2.1 RabbitMQ 的概念2.2 四大核心概念2.3 Rabbit 名词解释2.4 安装2 Hellow World2.1 新建项目2.2 消息生产者2.3 消息消费者2.4 测试结果3 Work Queues1 MQ 的相关概念1.1 什么是 MQMQ(message queue),从字面意思上看,本质是个队列,队列中存放的内容是 message,是一种跨进程的通信机制,用于上下游传

2021-11-20 21:46:07 874

原创 【大数据之 Flume】入门到放弃

文章目录1 Flume 概述1.1 Flume 定义1.2 Flume 基础架构2 Flume 入门2.1 Fkume 安装部署2.1.1 安装地址2.1.2 安装部署2.2 Flume 入门案例2.2.1 监控端口数据2.2.2 实时监控单个追加文件2.2.3 实时监控目录下多个新文件2.2.4 实时监控目录下的多个追加文件3 Flume 进阶3.1 Flume 事务1 Flume 概述1.1 Flume 定义Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合

2021-11-13 17:49:18 993

原创 【大数据之 Hadoop】集群环境搭建

文章目录

2021-10-31 23:02:02 1179

原创 【Java 高并发程序设计】03 锁的优化及注意事项

文章目录1 提高锁性能的建议1.1 减少锁持有时间1.2 减小锁粒度1.3 用读写分离锁来替换独占锁1.4 锁分离1.5 锁粗化2 Java 虚拟机对锁优化所做的努力2.1 锁偏向2.2 轻量级锁2.3 自旋锁2.4 锁消除1 提高锁性能的建议锁是最常用的同步方法之一。在高并发的环境下,激烈的锁竞争会导致程序的性能下降,因此我们有必要讨论一些有关锁的性能问题,以及一些注意事项,比如避 免死锁、减小锁粒度、锁分离等。1.1 减少锁持有时间`对千使用锁进行并发控制的应用程序而言,在锁竞争过程中,单个线程

2021-08-24 20:47:36 137

原创 【mongdb 快速上手】02 基本命令

文章目录1 案例需求2 数据库操作3 集合操作4 文档基本 CRUD4.1 文档插入4.1.1 单个文档插入4.1.2 批量插入4.2 文档基本查询4.3 文档更新4.4 文档删除1 案例需求存放文章评论的数据存放到MongoDB中,数据结构参考如下:数据库:articledb专栏文章评论comment字段名称字段含义字段类型备注_idIDObjectId或StringMongo的主键的字段articleid文章IDStringconten

2021-07-31 16:37:37 113

原创 【Java 高并发程序设计】01 Java 并行程序基础

文章目录1 进入并行世界1.1 相关概念1.1.1 同步和异步1.1.2 并发和并行1.1.3 临界区1.1.4 阻塞和非阻塞1.1.5 死锁、饥饿和活锁1.2 并发级别1.2.1 阻塞1.2.2 无饥饿(Starvation-Free)1.2.3 无障碍(Obstruction-Free)1.2.4 无锁(Lock-Free)1.2.5 无等待(Wait-Free)1.3 有关并行的两个重要定律1.3.1 Amdahl 定律1.3.2 Gustafson 定律1.4 Java:JMM1.4.1 原子性(A

2021-07-20 23:51:38 180

原创 【mongdb 快速上手】01 mongdb介绍与安装

文章目录1. MongoDB相关概念1.1 业务应用场景1.2 MongoDB简介1.3 体系结构1.4 数据模型1.5 MongoDB的特点2 单机安装部署2.1 Windows 系统中的安装启动2.2 Linux 安装1. MongoDB相关概念1.1 业务应用场景MongoDB 的主要特性MongoDB 特性说明事务支持MongoDB 目前只支持单文档事务,需要复杂事务支持的场景暂时不适合灵活的文档模型JSON 格式存储最接近真实对象模型,对开发者友好,方便快速

2021-07-18 16:33:47 122

原创 【X86汇编语言 从实模式到保护模式】07 进入保护模式

文章目录1 为何要使用保护模式2. 全局描述符表3 存储器的段描述符附录1 为何要使用保护模式一般来说,操作系统负责整个计算机软、硬件的管理,它做任何事情都是可以的。但是,用户程序却应当有所限制,只允许它访问属于自己的数据,即使是转移,也只允许在自己的各个代码段之间进行。但是在实模式下,用户程序对内存的访问非常自由,没有任何限制,随随便便就可以修改任何一个内存单元。在多用户、多任务时代,内存中会有多个用户(应用)程序在同时运行。为了使它们彼此隔离,防止因某个程序的编写错误或者崩溃而影响到操作系统和其

2021-07-10 12:20:47 1434

原创 【Redis 入门与进阶】Nosql 与 Redis 基本操作

文章目录1 Nosql概述1.1 为什么要用Nosql1.1.1 单机MySQL的年代!1.1.2 Memcached(缓存)+ MySQL + 垂直拆分(读写分离)1.1.3 分库分表 + 水平拆分 + MySQL集群1.1.4 如今的年代1.2 什么是NoSQL1.2.1 NoSQL 特点1.2.2 3V + 3高1.3 NoSQL的四大分类1 Nosql概述1.1 为什么要用Nosql1.1.1 单机MySQL的年代!90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够!那个时候,

2021-07-04 15:08:14 126

原创 【Netty 核心技术及源码剖析】05 TCP 粘包和拆包 及解决方案

文章目录1 TCP 粘包和拆包2 TCP 粘包和拆包现象实例3 TCP 粘包和拆包解决方案1 TCP 粘包和拆包TCP是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的 socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样做虽然提高了效率,但是接收端就难于分辨出完整的数据包了,因为面向流的通信是无消息保护边界的。由于TCP无消息保护边界, 需

2021-06-27 22:19:09 154 1

原创 【Netty 核心技术及源码剖析】04 Netty 编解码器和 Handler 的调用机制

文章目录1 基本说明2 编码解码器3 解码器-ByteToMessageDecoder4 Netty的handler链的调用机制5 解码器-ReplayingDecoder6 其它编解码器7 Log4j 整合到Netty1 基本说明netty的组件设计:Netty的主要组件有 Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipe等。ChannelHandler 充当了处理入站和出站数据的应用程序逻辑的容器。例如,实现Channel

2021-06-27 16:32:21 96

原创 【Netty 核心技术及源码剖析】02 Netty 核心模块组件

文章目录1 Bootstrap、ServerBootstrap2 Future、ChannelFuture1 Bootstrap、ServerBootstrapBootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类。常见的方法: /** * 该方法用于客户端,用来设置一个 EventLoop

2021-06-27 12:52:21 119

原创 【Netty 核心技术及源码剖析】02 Netty 概述与架构设计

文章目录1. 原生NIO存在的问题2. Netty官网说明3. Netty的优点4. Netty版本说明1. 原生NIO存在的问题NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。开发工作量和难度都非常大:例如客户

2021-06-23 21:54:59 199

原创 【恋上数据结构和算法】算法复杂度

文章目录1. 什么是算法2. 如何评判一个算法的好坏3. 大O表示法(Big O)4. 对数阶的细节5. 常见的复杂度6. fib函数的时间复杂度分析7. 算法的优化方向8. 多个数据规模的情况1. 什么是算法算法是用于解决特定问题的一系列的执行步骤,比如以下代码。/** * 计算 a 和 b 的和 */public static int plus(int a, int b) { return a + b;}/** * 计算 1 + 2 + 3 + ... + n */p

2021-06-22 23:22:42 188 2

原创 【Netty 核心技术及源码剖析】01 Java I/O

文章目录1. Java NIO 三件套1.1 缓冲区1.2 选择器1. Java NIO 三件套在 NIO 中有三个核心对象:缓冲区(Buffer)、选择器(Selector)、通道(Channel)。1.1 缓冲区缓冲区内部基于一个数组实现。在 NIO 中,所有的缓冲区类型都继承于抽象类 Buffer,对于 Java 中的基本类型,基本都有一个具体 Buffer 类型与之对应,其继承关系入下图所示。Buffer 的基础使用如下述例子。package bin.nio.buffer;impo

2021-06-17 23:02:38 155

SchoolNavigation.zip

使用单源最短路径算法Dijkstra实现。课程大作业。

2021-05-13

空空如也

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

TA关注的人

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