自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 缓存和数据库一致性问题分析

所以就能想到异步重试方法,也就是把重试的这个操作写入到消息队列里,由另一个线程专门来处理重试的操作,而且消息队列本身可以保证消息不丢失(不丢失有两个方面,一是消息持久化,二是只有正确被消费掉了才会删除)除了消息队列这中异步重试方案外,业界还有一种监听数据库bin log的方式,监听到变化后再去操作缓存,但是这种会额外引入其他的中间件而且实现复杂,综合而言没有消息队列的方案好用。这种场景下,redis的作用是为了减轻数据库读取压力、加速读取,往往能接受一定的数据延迟,即保证最终一致性即可。

2023-07-26 22:57:21 1509

原创 MySQL InnoDB 存储引擎详解

1、Mysql 体系结构1.1 数据库和数据库实例数据库是文件的集合,是按照某种数据模型组织起来并存放于二级存储器中的数据集合; 数据库实例是程序,是位于用户于操作系统之间的一层数据管理软件; 用户的 select、insert 等操作不是直接操作文件来修改数据库内容,而是通过数据库实例来完成对数据的操作1.2 存储引擎MySQL使用插件式存储引擎,存储引擎提供了一系列标准的管理和服务支持。存储引擎是基于表的,而不是数据库的,即数据库中的每个表可以使用不同的存储引擎。1.2.1 ...

2020-11-21 20:18:40 851

原创 背包问题

1、01背包 题目:有N件物品和一个容量为V的背包。第i件物品的体积是c[i],价值是w[i],且每种物品只有一件。求解将哪些物品装入背包可使价值总和最大。 思路:f[i][v]表示前i件物品放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是: ...

2019-09-23 21:01:48 281

原创 curl 命令分析请求耗时

目录1、创建 curl.txt 文件2、变量含义3、发送 curl 请求1、创建 curl.txt 文件\n http_code: %{http_code}\n content_type: %{content_type}\n time_namelookup: %{time_name...

2019-09-22 11:05:39 1331 1

原创 数据库存储 IP 地址的几种方式

数据类型 占用空间 可读性排名 查询效率排名 储存方式 varchar(15) 7-15字节 1 4 192.168.120.65 bigint 8字节 2 1 19216812065 int 4字节 5 5 会存储为 1084782657,由 192 * 16777216 + 168 * ...

2019-09-18 20:49:45 3048

原创 数据库中SQL执行流程

目录1、客户端把语句发给服务器执行2、语句解析(1) 查询高速缓存(library cache)(2) 语句合法性检查(data dict cache)(3) 语言含义检查(data dict cache)(4) 获得对象解析锁(control structer)(5) 数据访问权限的核对(data dict cache)(6) 确定最佳执行计划3、语句执行...

2019-09-17 21:20:27 1633

原创 group by 和 order by 同时使用的问题

由于 group by 先于 order by 执行,会导致 order by 失效,例如SELECT * FROM test GROUP BY city ORDER BY date;并不能取出分组中的最新一条记录。解决方法:SELECT * FROM (SELECT * FROM test ORDER BY date DESC LIMIT 0,1000) tGRO...

2019-09-16 20:57:16 1043

原创 装饰者模式和代理模式的区别

代理模式中,代理类对被代理的对象有控制权,决定其执行或者不执行。而装饰模式中,装饰类对代理对象没有控制权,只能为其增加一层装饰,以加强被装饰对象的功能。 装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一...

2019-09-15 08:33:45 502

原创 ElasticSearch 的 from+size、scroll、scroll-scan、sliced scroll-sacn、search after

参考文章:使用scroll实现Elasticsearch数据遍历和深度分页Elasticsearch 5.x 源码分析(3)from size, scroll 和 search afterElasticSearch官方文档Elasticsearch搜索类型讲解理解“query then fetch”和“dfs query then fetch”目录1、ElasticSe...

2019-09-14 14:12:18 1990

转载 Lucene 索引原理

参考文章:时间序列数据库的秘密 (2)——索引目录1、Lucene 的倒排索引2、Lucene 的联合查询(1)skip list(2)Bitmap Lucene 基于倒排索引实现比关系型数据库更快的过滤,尤其是对于组合条件查询具有更快的检索速度。Lucene 的倒排索引相比于关系型数据库的 b-tree 索引快在哪里呢?简单的来说,b-tree 索引是为写入...

2019-09-14 11:33:17 982 2

原创 设计模式——代理模式

1、静态代理 由三部分构成:抽象角色(真实角色和代理角色共同父接口,或者说是共有的功能)、真实角色(实现抽象角色)、代理角色(实现抽象角色,获取真实角色的引用,并附加操作)。除了真实对象和代理对象共同实现父接口的方式外,还可以让代理对象直接继承真实角色,但是此方法不够灵活,一般使用实现接口方式。 抽象角色,声明真实对象和代理对象的共同接口。即真实对象和代理对象共同要...

2019-09-13 10:04:19 135

原创 设计模式——工厂模式

目录1、简单工厂模式(又称静态工厂方法模式)(1) 抽象产品(手机)(2) 具体产品(小米、华为、OPPO)(3) 工厂类1(4) 工厂类22、工厂方法模式(1) 抽象产品(手机)(2) 具体产品(小米、华为、OPPO)(3) 抽象工厂(4) 具体工厂(小米、华为、OPPO)3、抽象工厂模式(1) 抽象产品(手机)(2) 具体产品(小米、华为、O...

2019-09-12 21:16:52 87

原创 设计模式——单例模式

目录1、饿汉式2、懒汉式3、Double CheckLock(双重锁判断机制)4、静态内部类5、枚举1、饿汉式public class ImageLoader{ private static ImageLoader instance = new ImageLoader; private ImageLoader(){} public ...

2019-09-11 21:01:11 113

原创 接口的幂等性

接口的幂等性是指,用户对于同一操作发起的一次请求或者多次请求的结果是一致的。例如,用户在购物时,由于网络延迟导致第一次下单没有响应,用户又点了几次下单,这时候接口的幂等性就会保证用户点击多次只会下一次单。保证接口幂等性的方法有以下两种:1、token 每次请求过来我们会根据它的请求参数或者其它特征生成一个唯一的标识token,并把它存储起来(放到redis...

2019-09-10 20:49:16 181

原创 TCP 和 UDP

目录1、UDP 主要特点2、TCP 主要特点3、流量控制和拥塞控制4、三次握手和四次挥手(1) 三次握手(2) 四次挥手1、UDP 主要特点 无连接 尽最大努力交付,不可靠交付 面向报文 没有拥塞控制 支持一对一、一对多、多对一、多对多的交互通信 首部开销小。首部只有8个字节,源端口号、目的端口号、长度、检验和各占...

2019-09-09 21:36:12 76

原创 Spring 中 filter 和 Interceptor 的区别

Filter是基于函数回调(doFilter()方法)的,而Interceptor则是基于Java反射的(AOP思想)。 Filter依赖于Servlet容器,而Interceptor不依赖于Servlet容器。 Filter对几乎所有的请求起作用(包括文件、图片等),而Interceptor只能对action请求起作用。 Interceptor可以访问Actio...

2019-09-08 10:28:46 176

原创 Mybatis

目录1、Mybatis的功能架构(1) API接口层(2) 数据处理层(3) 基础支撑层2、与数据库交互(对应API接口层)(1) 使用Mybatis自带的API(2) 使用封装的Mapper接口3、Mybatis执行过程(1) 加载配置文件并初始化(SqlSession)(2) 接收调用请求(3) 处理请求(4)返回处理结果1、Mybatis...

2019-09-07 10:28:22 165

原创 Redis

目录1、支持的数据结构2、常见应用场景3、持久化方式(1) 快照持久化(2) 只追加文件(AOF,append-only file)持久化4、复制5、事务6、优化7、过期删除(1) 立即删除(2) 惰性删除(被动删除)(3) 定时删除(主动删除)1、支持的数据结构 字符串(string) 列表(list) 集合(set)...

2019-09-06 20:26:47 93

原创 Mybatis 和 Hibernate 对比

目录1、Mybatis简介2、开发对比(1) 开发速度(2) 开发社区(3) 开发工作量3、系统调优对比(1) Hibernate(2) Mybatis(3) SQL优化(4) 扩展性4、对象管理与抓取策略对比(1) 对象管理(2) 抓取策略5、缓存机制对比6、优势对比7、Mybatis 和 Hibernate 对比1、Mybat...

2019-09-05 21:30:37 160

原创 调度算法

目录1、常见的批处理作业调度算法(1) 先来先服务调度算法(FCFS,First Come First Service)(2) 短作业优先调度算法(SJF,Shortest Job First)(3) 最短剩余时间优先算法(SRT,Shortest Remaining Time)(4) 最高响应比优先算法(HRRN,Highest Response Ratio Next)(...

2019-09-04 21:20:41 2130

原创 volatile可见性实现原理

当修改volatile变量时,会给cpu发送一个信号告诉其他cpu这个变量已修改,当其他cpu调用这个变量时,就会先检查是否有收到修改该变量的信号,有则重新从内存中读取。volatile是无锁的,类似于乐观锁的机制。 在说这个问题之前,我们先看看CPU是如何执行java代码的。首先编译之后Java代码会被编译成字节码.class文件,在运行时会被加载到JVM中,J...

2019-09-03 21:06:35 3856 5

原创 ReentrantLock 和 Synchronized 的区别

目录1、ReentrantLock的常用方法有:2、ReentrantLock 和 Synchronized 的区别(1) 中断响应(2) 实现公平锁(3) 锁绑定多个条件(Condition对象)1、ReentrantLock的常用方法有: lock():获得锁,如果锁已被占用,则等待; lockInterruptibly():获得锁,但优先响应中断; ...

2019-09-03 21:02:23 73

原创 Java线程安全和锁

目录1、CAS算法2、Synchronized实现原理3、锁优化(1) 自旋锁(2) 适应性自旋锁(3) 锁消除(4) 锁粗化(5) 偏向锁(6) 轻量级锁(7) 乐观锁(8) 悲观锁4、i++是否线程安全1、CAS算法 Cas(Compare and Swap),传入有三个值V、a、b,V是内存值,a是预期值,b是更新值...

2019-08-26 22:38:02 187

原创 JAVA多线程和线程池

目录1、线程状态(1) 新建状态(2) 就绪状态(3) 运行状态(4) 阻塞状态(5) 死亡状态2、线程优先级3、同步工具synchronized、wait、notify4、创建线程(1) 实现 Runnable 接口(2) 继承 Thread 类(3) 通过 Callable 和 Future 创建线程5、三种创建方式的区别6、线程池(...

2019-08-25 11:06:12 6427

原创 Linux 系统结构

目录1、内核(1) 内存管理(2) 进程管理(3) 文件系统(4) 设备驱动程序(5) 网络接口(NET)2、shell3、文件系统 I(1) 文件类型(2) 文件组织结构(目录)(3) 磁盘分区(4) 主要目录功用4、文件系统 II(1) 文件系统类型(2) 文件系统特性(3) 文件系统在内核中的表示(4) 挂载文件系统(5...

2019-08-24 10:42:43 296

原创 Linux 进程间通信

目录1、管道(1) 管道的通信(2) 管道的创建(3) 管道的内核实现(4) 管道的读写(5) 管道的函数实现(6) 命名管道2、信号(1) 信号的本质(2) 信号的来源(3) 信号的种类(4) 信号的发送和安装(5) 信号的屏蔽(6) 信号的生命周期3、报文(Message)队列(消息队列)(1) 消息队列的概念(2) 消息队列...

2019-08-23 21:49:52 248

原创 Linux 用户级线程和内核级线程

写在前边的话,本文图片均转自http://www.51cto.com。目录1、用户级线程(ULT,UserLevel Thread)2、内核级线程(KST,Kernel Supported threads)3、三种实现模型/组合方式(1) 多对一(用户级或应用程序级线程)(2) 一对一(内核级线程)(3) 多对多(用户级和内核级混合线程)(4) 三种实现模型/组合方...

2019-08-22 21:21:12 4938 2

原创 解决前端Ajax跨域请求无法访问

在后端接口内,或者拦截器内设置response.setHeader("Access-Control-Allow-Origin","*");即可正常访问。

2019-08-22 21:04:27 294

原创 解决前端GET请求参数 在javaweb后端变为乱码

前端发送GET请求时,对请求参数进行两次编码param = encodeURI(encodeURI(param));后端获取参数时,进行一次解码param = URLDecoder.decode(param, "UTF-8");即可获取想要当参数。...

2019-08-22 21:01:42 567

空空如也

空空如也

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

TA关注的人

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