自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 数据结构和算法之十一:BitMap和布隆过滤器

数据结构之bitmap和布隆过滤器bitmap问题:100个数,取值范围在0-2亿,如何快速的判断一个数是否在这100个数中?思路1:开一个数组,数值对应数组的下标,对存在的100个数进行标记,比如设置为1;这样,查找一个数是否存在时,直接通过数组下面获取对应的值,判断是否为1即可。这个思路非常简单高效,就是有一个问题,因为取值范围0-2亿,开个两个亿的空间数组有点不大科学,而且如果内存有限制的话,还开不出来。思路2:既然我只是对存在的数做一个标记,那么用一个二进制位就可以了吧,0表示不存在,1表

2020-05-27 11:38:12 497

原创 数据结构和算法之十:堆树

数据结构树论之堆树堆树,作为二叉树中的一个重要成员,常用于优先队列、TOPK等问题中。在上一文中,我们使用优先队列非常方便的构建出了赫夫曼树,那么你知道优先队列是怎么实现的呢?堆树长啥样子,我们先画个图认识一下:(这是大顶堆)首先,堆树是一颗完全二叉树(完全二叉树的定义你应该还知道吧),同时满足每个父亲节点的值都大于其孩子节点。(每个父亲节点的值都大于其孩子节点的话,就叫小顶堆,为了简化,本文都用大顶堆来举例)既然堆树是一个完全二叉树,那么我们就可以使用数组来存储,左孩子的下标是父亲节点的2倍,

2020-05-27 11:36:08 636

原创 数据结构和算法之九:赫夫曼树

数据结构树论之赫夫曼树本文,我们来讨论一个用于压缩、加密等场景的赫夫曼编码,而赫夫曼编码通过赫夫曼树生成出来。假如有一个字符串“abcdeaaaaa”,请问如何用最小的存储空间来保存?在不压缩的情况下, java中char类型用两个字节表示,那么上面这个串的话得用20个字节才能装下。我们知道,计算机底层都是二进制的,对于上面这个字符串,我们发现不同的字符为5个,因此可以使用3个位来编码,3个位的编码空间为8,从而节省存储空间:比如a:000, b:001,c:010, d:011, e:100那

2020-05-27 11:28:36 489

原创 数据结构和算法之八:B+树

数据结构树论之B+树上一文中,我们详细了解了二叉树,以及一些特殊的二叉树(搜索树、平衡树、红黑树)的原理,本文重点来说明在MYSQL中用于索引的B+树。如果仅仅是在内存中进行操作,那么红黑树是完全能够满足我们的要求的,但是如果数据量到达非常庞大的量级,比如几千万上亿时,我们是很难将数据全部load到内存中,构建出红黑树来直接查询,那么必定会将大量数据存放到磁盘上,在查询时通过磁盘I/O来完成。我们假设现在有1000万数据,如果用红黑树来处理的话,那么树高估计在23-24层,如果1000万数据都在内存中

2020-05-27 11:23:47 749

原创 数据结构和算法之七:二叉树

数据结构树论之二叉树本篇文章,详细学习一下二叉树相关知识。首先,简单的理解一下树的一下基本概念:结点:树里面的元素。父子关系:结点之间相连的边子树:当结点大于1时,其余的结点分为的互不相交的集合称为子树度:一个结点拥有的子树数量称为结点的度叶子:度为0的结点孩子:结点的子树的根称为孩子结点双亲:和孩子结点对应兄弟:同一个双亲结点森林:由N个互不相交的树构成深林画个图示意一下:除了最后一个不是树(是图),其他的都是树,可以看到,树其实是包含链表结构的。另外在树结构里面,还有几个重

2020-05-27 11:18:59 751

原创 数据结构和算法之六:贪婪和动规算法

算法理论之贪婪算法和动态规划本篇文章,简单的介绍一下贪婪算法和动态规划,因本人是算法渣渣,因此权当大家看个热闹。贪婪算法一个简单的问题:公司有N个同等级的会议需要使用同一个会议室,现在给你这个N个会议的开始和结束时间,你怎么样安排才能使安排最多场次的会议?大家先花两分钟,脑海里面梳理一下解题思路。思路1:优先安排会议时间最短的能不能行?比如时间是8-12点,会议1是9点半到10点半(1个小时),会议2从8点到10点(2个小时),会议3从10点到11点30分(1.5个小时),此时如果优先安排最短

2020-05-27 11:06:36 272

原创 数据结构和算法之五:排序算法二

数据结构基础之排序算法二学习算法,排序算法当然是不能少的,这次我们来学习一下基础的选择排序,冒泡排序,以及大名鼎鼎的快速排序。选择排序选择排序,非常好理解,就是找最小的数放到第一位,然后从第二个数开始找最小的数,放到第二个位置,然后从第三个数开始找最小的数,放到第三个位置… 。每次找最小的数,就是选择最小的数,这就是选择的含义。看个图就明白了第一次,找到最小的数字1,放到第一个位置上(当然原来在第一个位置的元素就交换到原来数字1的位置上了);第二次,从第二个位置也就是6开始,找到最小的数字2,放

2020-05-27 11:01:48 134

原创 数据结构和算法之四:排序算法一

数据结构基础之排序算法一学习算法,排序算法当然是不能少的,这次我们来学习一下基础的插入排序,对插入优化的希尔排序,以及用得最多的归并排序。插入排序插入排序,顾名思义,就是通过插入来排序,简单来说,将一个序列划分为两部分,一部分是已经排好序的,一部分是未排序的。每次从未排序的中拿一个数出来,在有序的那部分去比较,找到位置插入。想象打扑克,拿到手里面的牌已经排好序了,未拿的牌是无序的,每次拿一张牌,在手上已经排好序的牌中,找个位置插入进去,这就是插入排序。我们通过图示来理解一下这个过程:我们有一个

2020-05-27 10:54:28 133

原创 数据结构和算法之三:递归算法

数据结构基础之递归算法说到递归,相信大家都用过递归,我们今天就通过一个经典的斐波那契数列问题,展开聊下递归算法。斐波那契数列,1 1 2 3 5 8 13 … , 满足规律是,从第3个数开始,后一个数是前两个数相加,用数学公式来表示第n个数的值的话,那就是 f(n) = f(n-1) + f(n-2) ,条件是 n > 2; 同时 f(1) = 1, f(2) = 1。如果用代码来实现: /** * 斐波拉契数列,求第n个数的值 * 1,1,2,3,5,8,13,21,。

2020-05-27 10:49:49 473

原创 数据结构和算法之二:栈和队列

数据结构基础之栈和队列上一文中,我们学习了数组和链表,它们两个是存储数据的最底层结构,是功能完全的线性表。栈和队列是受限的线性表,啥叫功能完全,功能受限呢?数组和链表,我们可以对里面任意位置上的元素进行任意的操作,不受任何限制,而栈和队列,其内部也是数组或链表实现,但是对外暴露的操作接口是有限的,栈只能在栈顶进行压栈和出栈操作,队列只能队尾插入,队头出队操作。栈和队列的结构示意为啥有了功能全面的,更加灵活的数组和链表了,为啥还要搞功能受限的结构出来呢?这是因为在特定的应用场景下, 栈和队列用起来更

2020-05-27 10:46:59 336

原创 数据结构和算法之一:基础结构线性表

数据结构基础知识一个简单的问题开始问题:如何判断一个数是2的N次?思路1, 对于这个题目,判断一个数是否是2的N次方,可以通过数学公式, 给定的数字 x ,它是否等于 x = 2 ^ n, 即 x = 2 * 2 * … * 2 , 那么我们可以使用一个循环来解决, 伪代码如下while(x > 1){​ x % 2 != 0; return false;​ x = x / 2;}思路2, 要判断一个数是否是2的N次方,假如我们设定一个数据范围,比如100万,那么我们可以先将在这个范围

2020-05-27 10:23:11 432

原创 阿里巴巴开发开发手册(开发规范)

阿里巴巴开发开发手册(开发规范)《Java开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善。以本手册以Java开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约七个维度,再根据内容特征,细分成若干二级子目录。另外,依据约束力强弱及故障敏感性,规约依次分为强制、推荐、参考三大类。值得每个jav...

2020-03-24 13:13:54 1187

原创 SpringBoot源码解析之一:写一个自己的SpringBoot起步依赖

如何手写一个自己的SpringBoot起步依赖在使用springboot做脚手架开发时,springboot为我们提供了极大的便利,特别是jar包的版本和各种组件的自动配置。本章节就来研究下Springboot中组件自动配置的原理,以及如何去实现一个自己的SpringBoot组件给别人使用。SpringBoot自动配置基础SpringBoot自动配置中,会用到两个核心的基础注解,@Impor...

2020-03-12 13:59:12 1239 1

原创 SpringMVC框架源码解析之三:手写一个简单的MVC框架

SpringMVC框架源码解析之三:手写一个简单的MVC框架为了加上对SpringMVC的理解,本文通过手写一个简单的MVC框架,来直观的理解MVC的原理。如下为MVC框架要支持的功能:源码位于:https://gitee.com/cq-laozhou/spring-stack-source-code-analysis/tree/master/src/main/java/com/zyy/s...

2020-01-14 22:51:28 288

原创 SpringMVC源码解析之二:一次请求的完整旅行源码分析

SpringMVC源码解析之二:一次请求的完整旅行源码分析一次客户请求在SpringMVC框架中,所经历的完整执行流程分析。DispatcherServlet的初始化源码分析在SpringMVC中,所有请求都要通过前端控制器DispatcherServlet来进行处理,因为它是一个servlet了,其生命周期当然也由servlet容器(如tomcat)来管理。在它提供服务之前,必须先初始化。...

2020-01-13 23:32:37 174

原创 SpringMVC框架源码解析之一:核心组件和执行流程

SpringMVC框架源码解析之一:核心组件和执行流程SpringMVC框架这几年可以说是java语言中最热门的MVC框架了。在前后端分离的时代,就算不使用它来处理前端页面,但也是用它来提供Restful API。Servlet的生命周期在开始了解SpringMVC框架之前,先来了解下servlet生命周期:public interface Servlet { //应用容器(...

2020-01-09 16:20:19 319

原创 Spring集成Mybatis源码解析

Spring集成MybatisMybatis和Spring框架的集成,可使用MyBatis-Spring组件,该组件有Mybatis社区开发,可以将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 ...

2020-01-06 23:43:53 231

原创 Mybatis的插件机制解析

Mybatis的插件机制解析Mybatis提供了插件机制,让我们有机会拦截其执行过程,插入我们自定义的逻辑,比如分页、SQL执行性能监控、数据库表公共字段赋值等。学习Mybaits的插件原理,最好的方式是首先来写一个简单的插件,这个插件没什么作用,就是往控制台输出点日志。非常简单的LogPlugin插件Mybatis的插件都必须实现Interceptor接口,它定义了3个方法如下:pub...

2020-01-04 22:48:27 217 1

原创 Mybatis执行流程源码解析

Mybatis执行流程源码解析上一文中,我们将Mybatis的配置解析说清楚,在此基础之上,再来看执行流程,会相对清晰和简单一些。常规的Mybatis执行流程总体分为3步:获取SqlSession通过SqlSession获取Mapper接口实例通过Mapper接口执行对应的方法下面我们一步一步的来分析下整个过程。获取SqlSessionSqlSession是从SqlSessio...

2020-01-02 23:49:33 258

原创 Mybatis初始化源码解析

Mybatis初始化源码解析Mybatis的初始化,主要做一件事情,构建DefaultSqlSessionFactory。那么要构建它,其实只需要将Configuration对象构建起来即可,事实上整个初始化的过程就是在解析Mybatis的配置,装换成Configuration对象。然而Configuration对象比较复杂,有差不多50个属性,虽然不需要全部搞清楚,但我们必须知道一些核心属性含...

2020-01-02 14:25:46 260 1

原创 Mybatis缓存源码详解

Mybatis缓存源码详解示例代码地址:https://gitee.com/cq-laozhou/mybaits-source-code-analyzerMybatis内部使用2级缓存便于加速数据的查询,降低数据库的查询压力。一级缓存 LocalCache在Mybatis的执行流程中,首先去查找二级缓存,如果二级缓存中没有,再去一级缓存找,如果还没有,最后从数据库查询。一级缓存示例一级...

2019-12-30 17:05:46 347

原创 Mybatis 使用教程

Mybatis 使用教程参考资料 官网(http://mybatis.org/mybatis-3/zh/index.html)示例源码地址 https://gitee.com/cq-laozhou/mybaits-source-code-analyzer入门介绍参考:http://mybatis.org/mybatis-3/zh/index.htmlMybatis的配置有两部分,一个是M...

2019-12-24 23:29:40 201

原创 Mysql Docker 镜像使用

Mysql Docker 镜像使用Mysql 镜像获取打开docker官方registry https://hub.docker.com/搜索Mysql关键字选择官方Mysql镜像选择需要的版本,复制命令拉取镜像Mysql镜像如何使用在上图3的链接中【https://hub.docker.com/_/mysql?tab=description】,有详细的使用说...

2019-12-24 22:59:51 150

原创 MAT分析工具入门

Elipse MAT是一款java堆内存的分析工具,帮助定位内存泄露问题。该工具能够快速的计算数亿的对象占用的内存情况,找出是哪些对象不能被垃圾回收,并提供可疑泄露地方的报告。

2019-12-23 19:07:43 140

原创 Spring框架事务核心源码解析

详细分析了Spring事务管理的源码,包括7种传播特性在存在事务和不存在事务情况下的处理逻辑,顺带着也把AOP的核心源码也一起分析了。@EnableTransactionManagement注解分析事务代理对象的创建AOP代理对象的创建类似,要启动事务管理,需要在配置类上使用@EnableTransactionManagement注解,来看看这个注解做了些什么事情:@Import(Trans...

2019-12-20 00:12:23 290

原创 Navicat Premium For Mac 安装

在网上(github)找到navicat-keygen这个仓库(时不时的会下线),然后根据如下操作手册操作。Navicat Keygen注意:仅支持Navicat Premium。1. 如何编译在编译之前,你应该确保你有如下几个库:opensslcapstonekeystonerapidjsonlibplist如果你有brew的话,你可以通过$ brew install...

2019-12-17 14:33:18 817

原创 Spring框架AOP核心源码解析之二:代理对象的调用

阅读文章时,看看流程图会更容易理解哦: https://www.processon.com/view/link/5df5e143e4b004cc9a3068d2JDK动态代理调用接上一篇文章,创建好代理对象后,从容器中getBean返回的就是代理对象了。此时调用代理对象的方法,就会被拦截增强,以JdkDynamicAopProxy这个创建的代理对象为例,调用代理对象的方法会进入到JdkDyna...

2019-12-15 17:33:41 198

原创 Spring框架AOP核心源码解析之一:代理对象的创建

阅读文章时,看看流程图会更容易理解哦:https://www.processon.com/view/link/5df5e143e4b004cc9a3068d2示例准备在分析aop源码之前,先搭建一个demo示例,演示下效果。比如,有一个DemoService接口,里面定义一个demo方法:public interface DemoService { void demo(Stri...

2019-12-15 17:32:04 239

原创 Spring框架IOC容器初始化核心源码解析之五:单例Bean循环依赖解决和自动注入机制

填充属性结合spring源码和 https://www.processon.com/view/link/5dec9a96e4b0c080dba0305b 上总结的流程图一起看,效果会更好。书接上篇,继续分析populateBean(beanName, mbd, instanceWrapper);这个方法。protected void populateBean(String beanName,...

2019-12-11 00:08:46 223

原创 Spring框架IOC容器初始化核心源码解析之四:Bean初始化(getBean)

单例bean的初始化入口先回顾下refresh方法:public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. prepareRef...

2019-12-08 23:07:17 380 1

原创 Spring框架IOC容器初始化核心源码解析之三:BeanDefinition注册

详细分析了spring是如何找到并解析配置类,如果将通过@ComponentScan 和 @Component 、@Bean 以及 @Import 注解声明的bean,自动注册的容器中的。用于debug的源码:https://gitee.com/cq-laozhou/spring-stack-source-code-analysisinvokeBeanFactoryPostProcessors...

2019-12-08 00:45:32 656

原创 Spring框架IOC容器初始化核心源码解析之二:准备工作

Bean定义的几种方式spring提供了3种声明bean的方式:在配置类中(@Configuration注解的类)使用@bean注解声明bean;使用@ComponentScan注解,默认它会扫描指定路径中的带有@Component注解及其子注解(@Controller @Service @Repository)的类,并将它们注册为bean使用@Import注解 其value可以配置三种...

2019-12-07 00:13:17 172 1

原创 Spring框架IOC容器初始化核心源码解析之一:基础概念

在开始分析spring框架源码之前,需要先了解spring的几个核心的组件,其中在启动过程中最重要的就是BeanDefinitionRegisterPostProcessor、BeanFactoryPostProcessor、BeanPostProcessor组件。源代码地址 https://gitee.com/cq-laozhou/spring-stack-source-code-analys...

2019-12-07 00:09:06 182

原创 Spring框架核心注解用例

示例的源码地址:https://gitee.com/cq-laozhou/spring-stack-source-code-analysis@Configuration 和 @Bean回忆下,在古老的Spring框架版本中(Spring3之前),spring的所有配置都是通过xml文件来配置,比如:在 applicationContext.xml文件中定义一个bean:<?xml ...

2019-12-05 11:02:34 314 1

原创 Docker06-静态网站实战

Docker06-静态网站实战使用nginx搭建一个静态网站simple。上下文准备准备构建上下文目录,准备资源(ng配置)。mkdir sample && cd samplemkdir nginx && cd nginxwget https://raw.githubusercontent.com/jamtur01/dockerbook-code/mas...

2019-10-20 11:00:57 137

原创 Docker03-镜像管理

Docker03-镜像管理什么是Docker镜像?Docker镜像是由文件系统堆叠而成。最低层是引导文件系统,即bootfs,类似linux/unix的引导文件系统。docker用户几乎永远不会和bootfs交互。从下往上第二层是root文件系统,即rootfs,rootfs可以是一种或多种操作系统(如debian或者ubuntu)。传统的linux引导过程中,rootfs会先以只读的方式...

2019-10-16 23:30:04 128

原创 Docker脑图

2019-10-15 23:01:46 131

原创 Docker02-容器管理

Docker02-容器管理在安装好docker引擎之后,启动docker服务。安装参考官网帮助文档【https://docs.docker.com/docker-for-mac/install/】查看docker是否正常启动docker info如果返回类似如下输出,则说明docker服务正常。Containers: 9 Running: 0 Paused: 0 Stopped:...

2019-10-15 22:54:02 132

原创 JAVA虚拟机整体框架脑图

JAVA虚拟机整体框架后续逐步完善系列文章

2019-10-03 15:34:36 140

原创 状态模式

状态模式项目组在使用观察者模式完成气象站项目之后,名声在外,这次又接到了来自于无人售货行业的万能糖果公司的订单。自助糖果售货机该公司要设计一款自动糖果售货机,开始时,售货机的状态是"没钱",投入钱后状态变为"有钱",然后转动曲柄,糖果机会吐出糖果。用一张状态图来表现如下:从这张图中,我们可以识别出售货机的状态:没钱、有钱、出售中、售罄。导致状态发生迁移的动作有:投钱、退钱、转动曲柄、发...

2019-10-03 13:21:46 160

空空如也

空空如也

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

TA关注的人

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