自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

柠檬树

柠檬树

  • 博客(247)
  • 资源 (1)
  • 收藏
  • 关注

原创 【分布式】CAP定理和BASE理论

一、CAP定理 对于一个分布式系统来说,不可能同时满足一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)。三者不可得兼。至多只能满足2个。 1、一致性(Consistence) 对于某个客户端来说,读操作能够返回最新的写结果。 2、可用性(Availability) ...

2020-09-02 23:01:22 337 2

原创 【MySQL】幻读是什么?如何避免幻读?

一、前言 建表语句和初始化语句如下:CREATE TABLE `t`( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY(`id`), KEY `c`(`c`))ENGINE=InnoDB;insert into t values(0,0,0),(5,5,5),(10,10,10),(15,15,15),(20,20,20),(25,25,...

2020-08-20 14:57:46 2670 1

原创 【MySQL】事务隔离——为什么你改了,我还看不见

一、前言 事务就是保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的。众所周知,MySQL是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如MySQL原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代的重要原因之一。二、隔离性与隔离级别 提到事务,你肯定会想到ACID(Atomicity、Con...

2020-08-19 08:44:37 129

原创 【MySQL】深入浅出索引

一、前言 索引的出现就是为了提高数据查询的效率,就像书的目录一样。二、索引常见模型 可以用于提高读写效率的数据结构很多,常见的是哈希表、有序数组、搜索树。 1、哈希表 哈希表时一种key、value存储数据的结构,我们只要输入待查证的值即key,就可以找到其对应的值即value。哈希的思路很简单,把值放在数组里,用一个哈希函数把key换算成确定的值,然后把value放在数组的这个位置。多个key经过hash运算之后,会出现同一个值的情况。...

2020-08-18 11:29:25 123 1

原创 【MySQL】基础架构

一、MySQL逻辑架构 总体上来说,MySQL可以分为Server层和存储引擎层两部分。 Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(比如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 存储引擎层负责数据的存储和提取,其架构...

2019-03-17 10:46:04 347 1

原创 【java】将json中的null转为空字符串

一、前言在接受前端传过来的数据的时候,map中有value为null的值,在后续传参的时候,json化会把value为null的key丢弃掉。以JSON.toJSONString()为例。去掉 JSON.toJSONString()空字段忽略方法如下所示:方法一:SerializerFeature序列化属性 String s = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);Quote...

2022-05-31 14:33:11 9297 1

原创 [Spring]再谈AOP

aop

2022-05-21 12:58:14 289

原创 【并发编程】为什么要学习并发编程

一、前言 并发编程最早的应用领域就是操作系统的实现。并发编程的第一原则,那就是不要写并发程序。这个原则很早之前是行得通的,那个时候多核服务器还是一种奢侈品,系统的并发量还很低。借助数据库和类似tomcat这种中间件,我们基本上不用写并发程序。或者说,并发问题基本上都被中间件和数据库解决了。 最近几年,并发编程已经慢慢成为一项必备技能。这主要是硬件的驱动以及国内互联网行业的飞速发展决定的。现在64核的服务器已经飞入寻常百姓家。大型互联网厂商的系统并发量轻松过百万。传统中间件和...

2020-09-08 15:27:35 424 1

原创 API接口签名验签和加密解密原理

加密解密

2020-09-03 22:30:40 1437 2

原创 【Mycat】Mycat高可用方案

一、前言 Mycat作为一个代理层中间件,Mycat系统的高可用涉及到Mycat本身的高可用以及后端MySQL的高可用。在大多数情况下,建议采用标准的主从复制高可用性配置并交付给Mycat来完成后端MySQL节点的主从自动切换。二、MySQL高可用 首先看,未加入Mycat之间。MySQL的一主多从结构。 上图中,虚线箭头表示的是主备关系,也就是A和A' 互为主...

2020-09-03 17:52:31 1768

原创 【Mycat】Mycat简单入门

一、是什么 Mycat是一个数据库中间件。不仅仅可以用作读写分离、以及分库分表、容灾备份、容灾备份。而且可以用于多租户应用开发、云平台基础架构等。二、Mycat原理 Mycat原理中最重要的一个动词是“拦截” ,它拦截了用户发送过来的SQL请求。首先对SQL做了一些特定的分析:比如分片分析、路由分析、读写分离分析、缓存分析等。然后将SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返给用户。 ...

2020-09-03 15:36:34 221

原创 [dubbo]spi是啥?dubbo的spi是怎么实现的?

一、spi是啥spi是啥?dubbo的spi是怎么实现的? spi简单来说就是Service Provider Interface。说明了是什么意思呢?比如说你有个接口,现在这个接口有3个实现类。那么在系统运行的时候,这个接口到底选择哪个实现类呢?这就需要SPI啦。需要根据指定的配置或者默认的配置,去找到对应的实现类加载进来。然后用这个实现类的实例对象。 接口A——>实现A1,实现A2,实现A3。我们配置一下让接口A实现A2。在系统运行的时候,会加载你的配置,用...

2020-09-01 21:34:53 933

原创 【分布式】聊一聊分布式事务

一、前言 在分布式、微服务大行其道的今天,相信大家对这些词都不陌生。拆分微服务的好处如下: 1、每个人只需要维护自己单独的服务,没有了以前的各种代码冲突 2、自己想测试、想发布、想升级,只需要care自己写的代码就ok,很方便,很贴心。 任何技术的引用,都会带来新的问题。今天就谈一谈分布式系统中最棘手的问题:分布式事务。二、神马是事务 事务就是一系列操作,要么同时成功,要么同时失败。然后从事务的ACID展开叙述。那么为啥...

2020-09-01 15:19:00 231

原创 【dubbo】分布式系统中的接口调用如何保证顺序性

一、分布式系统接口调用顺序性 现在有个需求,要求保证的是请求1先执行->请求2后执行->请求3最后执行。 如上图所示,如何保证顺序性呢? 通过一致性hash算法,能够保证orderID一致的分发到同一台机器上。 那么,对于一台服务器,如何保证按照顺序执行呢? ...

2020-08-31 23:04:43 801

原创 【dubbo】分布式系统中接口的幂等性该如何设计

一、问题 分布式系统中,分布式服务接口的幂等性如何设计(比如,不能重复扣款)。 从这个问题开始,面试官就已经进入了实际的生产问题的面试啦。分布式系统中的某个接口,要保证幂等性,如何保证? 假如你有个服务提供1个接口,结果这个服务部署在5台机器上。接着有个接口,就是付款接口,然后用户在前端操作的时候,不知道为啥,总之就是1个订单不小心发起了两次支付请求。然后这两个请求分散在了不同服务器上。结果一个订单,扣款两次。 或者是订单系统调用支付系统进行支...

2020-08-31 22:51:18 1296

原创 【dubbo】基于dubbo如何做服务治理?服务降级?以及重试?

一、问题 从这个问题开始,就会考察你dubbo在实际使用中的一些问题啦。 1、服务治理:这个问题如果问你,就是想看看你有没有服务治理的思想。因为这个是做过复杂微服务的人肯定会遇到的一个问题。 2、服务降级:这个是涉及到复杂分布式系统中必备的一个话题。因为分布式系统相互来回调用,任何一个系统崩溃了,你不降级,直接就全盘崩溃?那就太坑爹了。 3、失败重试:分布式系统中网络请求如此频繁,要是因为网络问题不小心失败了一次。是不是要重试? ...

2020-08-31 21:38:31 1146 1

原创 【MySQL】分布式ID生成方案

一、问题 1、分库分表之后,id主键如何处理? 分析:其实这是分库分表之后你必然要面对的一个问题,就是id咋生成?因为要是分成多个表之后,每个表都是从1开始累加,那肯定不对啊,需要1个全局唯一的id来支撑,所以这都是实际生产环境中必须要考虑的问题。 01_分库分表的主键id问题 逻辑上还是一张表,id都为1,这显然不符合要求。二、方案 1、通过自增id ...

2020-08-30 15:39:32 1143

原创 【MySQL】分库分表

一、常见问题 1、为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们是如何对数据库进行垂直拆分或水平拆分。 2、如何设计可以动态扩容的分库分表方案? 3、分库分表之后,ID如何处理。二、为啥要分库分表 其实,这块肯定是扯到高并发了,因为分库分表一定是为了支撑高并发、数据量大两个问题。而且现在说实话,尤其是互联网公司类的公司面试,基本上都会来这么一下。分库分表如...

2020-08-30 14:27:39 286

原创 【MySQL】读写分离

一、MySQL为什么要读写分离 达到mysql的请求时2000/s,数据库就开始报警了,磁盘IO开始变慢,CPU负载过高,内存使用过高。当达到4000/s,5000/s直接把MySQL打死啦。 读写分离:扩展读的能力,一般挂4-5个从库。二、怎样实现读写分离 MySQL原生就支持主从复制,主库——>从库。 mysql主从复制的原理: ...

2020-08-30 10:03:15 174

原创 【Redis】Redis三种集群模式(如何保证高可用)

一、主从模式 1、需求 为了避免单点故障,通常的做法是将数据库复制多个副本部署在不同的服务器上。这样,即使有一台服务器出现了故障,其他服务器仍然可以继续提供服务。 为此,Redis提供了复制(replication)功能,可以实现当一台数据库中的数据更新后,自动将更新的数据同步到其他数据库上。 2、分工 在复制的概念中,数据库分为两类。一类是主数据库(master),一类是从数据库(slave)。master可以进行读写操...

2020-08-28 17:15:50 3832

原创 【Redis】Redis分布式锁的实现

一、setnx 首先来看第一版代码if(setnx(key,1) == 1){ expire(key,30) try { do something ...... } finally { del(key) }} Redis的分布式锁实现代码如上所示,基本分为三步。1、加锁 首先想到的就是使用setnx命令。key是锁的唯一标志,按业务来决定命名。比如key_bookID。valu...

2020-08-28 13:04:58 356

原创 【Redis】如何保证缓存与数据库的双写一致性

一、面试题 如何保证缓存与数据库的双写一致性?二、面试官心理剖析 你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要双写,就一定会有数据一致性的问题。那你如何解决一致性问题。三、面试题剖析 一般来说,如果你的系统不是严格要求缓存+数据库必须一致性的话,允许缓存可以稍微的跟数据库偶尔有不一致的情况。最好不要做这个方案。读请求和写请求串行化,串到一个内存队列里。这样就可以保证一定不会出现不一致的情况。四、Cache Aside Pattern...

2020-08-26 21:23:00 1719 1

原创 【Redis】面试常问问题(二)

一、最基本问题 1、如何保证Redis的高并发和高可用?Redis的主从复制原理能介绍一下嘛?Redis的哨兵原理能介绍一下嘛?。面试官心理:其实问这个问题,主要是考考你,Redis单机能承载多高并发?如果单机扛不住如何扩容来抗更多的并发?Redis会不会挂?既然Redis会挂,那怎么保证Redis是高可用的? 2、Redis的持久化方式有哪几种?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?二、Redis高并发跟整个系统高并发之间的关系 ...

2020-08-26 20:27:40 140

原创 【Redis】面试常问问题(一)

一、最基本问题 1、在项目中缓存是如何使用的,为啥要用?用了以后可能会有什么不良后果。 2、redis和memcached有什么区别?redis的单线程模型是什么?为什么单线程的redis比多线程的memcached效率要高的多。 3、Redis都有哪些数据类型?分别在哪些场景下使用比较合适? 4、Redis过期策略能介绍一下?要不你手写一个LRU。二、为啥要用 1、缓存是如何实现高性能的 ...

2020-08-26 17:22:12 4330

原创 【RabbitMQ】如何保证消息的顺序性+解决消息积压+设计消息队列中间件

一、如何保证消息的顺序性 啥?我该怎么保证从消息队列里拿到的数据按顺序执行。 这是MQ面试必问的问题之一。第一看看你了解不了解顺序这个事,第二看看你有没有办法保证消息是有序的。这是生成环境中常见的问题。 mysql的binlog同步。你再mysql里增删改3条binlog。接着这三条binlog发送到MQ里面。到消费出来依次执行。起码要保证人家是按照顺序来的吧。不然本来是增加、修改、删除。你愣是给更改了顺序,换成了删除、修改、增加。这就乱了。 ...

2020-08-24 18:02:21 20274 24

原创 【RabbitMQ】如何保证消息消费时的幂等性+如何处理消息丢失的问题

一、如何保证消息消费时的幂等性 这个问题可以等价于如何保证消费不被重复消费?为什么在消费队列里消费到了重复的数据。1、kafak消费端可能导致的重复消费问题 消费者准备提交offset,但还没有提交的时候,消费者进程被重启了。那么此时已经消费过的数据offset还没有提交。kafka也就不知道你消费了offset=153的那条数据。 消费者一旦重启,马上会找kafka说:哥们,把我上次消费到的那条数据之后的数据给...

2020-08-24 16:09:49 3416 2

原创 【RabbitMQ】如何保证消息队列的高可用

一、前言 一家非常大的互联网公司,非常核心的系统,就是忽略了MQ,没考虑MQ如何保证高可用。如果MQ挂了怎么办?导致几个小时系统不可用,公司损失几千万。team背锅。二、RabbitMQ的高可用 1、单机模式 单机模式,一般就是做demo玩玩,线上没有人这么用。 2、普通模式 1)缺点1:可能会在rabbitMQ集群内部产生大量的数据传输。 2)缺点2...

2020-08-24 13:55:38 871 1

原创 【RabbitMQ】MQ的优缺点

一、优点1、解耦 1)未使用MQ之前 A系统严重依赖各种乱七八糟的系统耦合起来,A系统产生了一个比较关键的数据,很多系统需要A系统把这个关键的数据传过来。负责A系统的哥们还得考虑,如果A系统挂了怎么办?如果E系统访问超时怎么办?我是不是需要做一个重试机制? 2)使用MQ之后 如果来一个新系统E需要数据,...

2020-08-24 11:46:43 2122 1

原创 数据结构与算法之美——B-树和B+树

一、前言 mysql索引基于什么结构? hash表或者B+树。B+树的实现细节是什么?B-树和B+树有什么区别?联合索引在B+树中如何存储?B-树和B+树都是很基础的概念。要明白什么是B+树,要先了解什么是B-树。需要注意的是B-树就是B树,中间的横线并不是减号。 数据库索引为什么要使用树存储?①树的查询效率高,②维持相对顺序。那为什么没有使用二叉查找树来实现呢?二叉查找树查询的时间复杂度是O(logN),性能已经很高了,莫非B树比它更快?其实从算法逻辑上将,二叉查找树的查询...

2020-08-12 21:36:10 1055

原创 数据结构与算法之美——红黑树

一、前言 上两节,我们依次讲了树、二叉树、二叉搜索树。二叉搜索树是最常见的一种二叉树。它支持快随插入、删除、查找操作。各个操作的时间复杂度和树的高度成正比,平均时间复杂度是O(logN)。 不过二叉搜索树在频繁动态更新过程中可能会出现树的高度远大于 log2n 的情况,从而导致各个操作的效率下降。极端情况下,二叉树会退化为链表,时间复杂度会退化到 O(n)。要解决复杂度退化这个问题,需要一种平衡二叉搜索树。比如红黑树、AVL树、树堆。 在工程中,很多用到平衡二...

2020-08-12 17:14:41 139

原创 数据结构与算法之美——二叉树

一、前言 前面我们讲的都是线性表结构,今天我们讲一种非线性表结构,树。树这种数据结构比线性表的数据结构要复杂得多,内容也比较多。二、树 什么是树? 树是n(n≥0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、......

2020-08-12 17:14:28 89

原创 数据结构与算法之美——链表——常见面试题

一、常见面试题如下①单链表反转②链表中环的检测③两个有序的链表合并④删除链表倒数第n个结点⑤求链表的中间结点二、单链表反转定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL1、递归法实现/** * 单链表反转 */public class LinkList { private st

2020-08-11 20:44:14 244

原创 数据结构与算法之美——树

一、树 这三个概念的定义比较容易混淆,描述起来也比较空洞。我举个例子说明一下,你一看应该就能明白。 在我们的生活中,“高度”这个概念,其实就是从下往上度量,比如我们要度量第 10 层楼的高度、第 13 层楼的高度,起点都是地面。所以,树这种数据结构的高度也是一样,从最底层开始计数,并且计数的起点是 0。“深度”这个概念在生活中是从上往下度量的,比如水中鱼的深度,是从水平面开始度量的...

2020-08-11 17:10:25 274

原创 排序算法——冒泡排序

一、冒泡排序 冒泡排序是一种基础的交换排序。首先来看一个例子。由8个数字组成一个无序数列{5,8,6,3,9,2,1,7},希望按照从小到大的顺序对其进行排序。 按照冒泡排序的思想,相邻的元素两两比较,当一个元素大于右侧相邻元素时,交换它们的位置;当一个元素小于或等于右侧相邻元素时,位置不变。 经过第一轮排序元素9作为数列中最大的元素,飘到了最右侧。这时第一轮就结束了。数列最右侧元素9的位置可以认为是一个有序区。这个有序区目前只有1个元素。56382179。...

2020-08-10 15:58:33 1042 1

原创 【年度总结】天空不留痕迹,鸟儿却已飞过

一、缘起: 盼望着盼望着,大四来了,毕业的脚步近了。时光如白驹过隙,弹指一挥间,恍惚之间,自己脑海中还有那个稚气未脱,刚刚迈入大学的画面。那时以为大学生活很美好,充满阳光,乃人间天堂。 大一一年,和大部分大学生一样,过着打工、参加社团活动的日子,虽然日子貌似很充实,但似乎没有自己的想法,没有自己的目标,仅仅是随大流。专业课也没有怎么听,很不幸,大一上半年就让我挂了一科。从此大学...

2019-10-22 14:22:29 1239 81

原创 数据结构与算法之美——哈希算法

一、前言 如何防止数据库中的用户信息被脱库?如何存储用户密码这么重要的数据呢?仅仅MD5加密一下存储就够了吗?要想搞清楚这个问题,就要先弄明白哈希算法。 哈希算法历史悠久,业界著名的哈希算法也有很多,比如MD5、SHA等。那么在实际的开发中,我们该如何用哈希算法解决问题。二、什么是哈希算法 将任意长度的二进制值映射为固定长度的二进制值串,这个映...

2019-03-19 22:36:41 533 2

原创 数据结构与算法之美——跳表

一、概述 二分查找算法:底层依赖的是数组随机访问的特性,所以只能用数组来实现。如果数据存储在链表中,就真的没法用二分查找算法了吗? 实际上,我们只需要对链表稍加改造,就可以支持类似“二分”的查找算法。改造之后的数据结构叫做跳表(Skip list)。它是一种各方面性能都比较优秀的动态数据结构,可以支持快速的插入、删除、查找操作,写起来也不复杂,甚至可以替代红黑树(R...

2019-03-19 22:21:10 647 2

原创 数据结构与算法之美——散列表——实战篇(上)

一、前言 通过理论篇,我们知道,散列表的查询效率跟散列函数、装载因子、散列冲突等都有关系。如果散列函数设计得不好,或者装载因此过高,都可能导致散列冲突发生的概率升高,查询效率下降。 在极端情况下,有些恶意的攻击者,还有可能通过精心构造的数据,使得所有的数据经过散列函数之后,都散列到同一个槽里。如果我们使用的是基于链表的冲突解决方法,那这个时候,散列表就会退化为链表,...

2019-03-19 22:20:51 314 2

原创 数据结构与算法之美——散列表——实战篇(下)

一、前言 在之前的学习中,有两种数据结构,散列表和链表,经常会被放在一起使用。 在链表那一节,提及了用链表来实现LUR缓存淘汰算法,但是链表实现LRU缓存淘汰算法的时间复杂度为O(n),通过散列表可以将时间复杂度降低到O(1)。 在跳表那一节,提到Redis的有序集合是使用跳表来实现的,跳表可以看作一种改进版的链表。Redis有序集合不仅使用了跳表,...

2019-03-19 09:06:12 402 1

原创 数据结构与算法之美——队列——学习笔记

一、前言 众所周知,CPU资源是有限的,任务的处理速度与线程个数并不是正相关的。相反,过多的线程反而会导致CPU频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来实现设置的。 当我们向固定大小的线程池中请求一个线程时,如果线程池中没有空闲资源了,这个时候线程池如何处理这个请求?是拒绝请求还是排队请求?各种处理策略又是怎么实现的呢...

2019-03-17 23:18:08 296 1

FastDHT相关安装包

资源中是FastDHT的安装包以及libfastcommon-master以及Berkeley DB。可以和FastDFS配置来完成重复文件的去重。

2018-04-24

空空如也

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

TA关注的人

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