自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (5)
  • 收藏
  • 关注

原创 MapReduce

2020-06-30 18:02:17 113

原创 HDFS API编程

2020-06-30 13:59:16 140

原创 hadoop简介

一、hadoop特点https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html(1)分布式Hadoop Distributed File System(2)commodity hardware廉价硬件(3)fault-tolerant容错(4)High throughput高吞吐(5)large data sets大数据集合...

2020-06-29 17:41:01 229

原创 基于Redis的用户发微博

基于Redis的用户发微博一、用户发微博业务场景分析二、用户发微博的redis技术方案三、SpringBoot+Redis 实现用户发微博步骤1:创建content表CREATE TABLE `content` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(10) NOT NULL DEFAULT '0' COMMENT '用户id', `content` varchar(5000) NOT NULL DE

2020-06-29 11:56:36 157

原创 基于Redis的微博的注册

# 基于Redis的微博的注册Redis在互联网公司中是必选的技术,因为互联网公司的系统天生就是高并发特征。但是能把redis运用的最好的就属微博了。 Redis技术基本覆盖了微博的每个应用场景,比如像现在春晚必争的“红包飞”活动,还有像粉丝数、用户数、阅读数、转评赞、评论盖楼、广告推荐、负反馈、音乐榜单等等都有用到 Redis。 正因为Redis的广泛应用,使得微博能够快速支撑日活跃用户超2亿,每日访问量百亿级,历史数据高达千亿级。 微博线上规模,100T+ 存储,1000+ 台物...

2020-06-29 11:33:54 209

原创 剖析SpringSession的redis原理

八、剖析SpringSession的redis原理步骤1:分析SpringSession的redis数据结构127.0.0.1:6379> keys *1) "spring:session:expirations:1578227700000"2) "spring:session:sessions:5eddb9a3-5b1e-4bdd-a289-394b6d42388e"3) "spring:session:sessions:expires:5eddb9a3-5b1e-4bdd-a289-39

2020-06-29 10:53:59 1057

原创 209. 长度最小的子数组

链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum/题解:https://leetcode-cn.com/problems/minimum-size-subarray-sum/solution/chang-du-zui-xiao-de-zi-shu-zu-by-leetcode-solutio/class Solution {public: int minSubArrayLen(int s, vector..

2020-06-28 23:16:48 137

原创 41. 缺失的第一个正数

题解:https://leetcode-cn.com/problems/first-missing-positive/solution/tong-pai-xu-python-dai-ma-by-liweiwei1419/

2020-06-27 23:51:56 97

原创 面试题 02.01. 移除重复节点

链接:https://leetcode-cn.com/problems/remove-duplicate-node-lcci/题解:https://leetcode-cn.com/problems/remove-duplicate-node-lcci/solution/yi-chu-zhong-fu-jie-dian-by-leetcode-solution//** * * Definition for singly-linked list. * * struct ListNode ..

2020-06-26 23:43:15 144

原创 SpringSession+redis解决分布式session不一致性问题

七、案例实战:SpringSession+redis解决分布式session不一致性问题步骤1:加入SpringSession、redis的依赖包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.7.RELEASE&lt

2020-06-25 19:07:38 1850

原创 采用docker安装部署Nginx

四、采用docker安装部署Nginx在主机192.168.1.138下,安装nginx,docker 的安装命令如下:docker run \-d \-p 8080:80 \--name session-nginx \nginx-d:在后台运行-p:容器的80端口映射到物理机的8080端口–name:容器的名字为session-nginx关于为什么要用docker安装?因为用docker安装非常方便,docker安装1分钟不到就安装完,如果用传统安装,会各自安装包

2020-06-25 17:42:13 411

原创 redis解决了分布式系统的session一致性问题

redis解决了分布式系统的session一致性问题一、Session有什么作用?Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。客户端在第一次访问服务端的时候,服务端会响应一个sessionId并且将它存入到本地cookie中,在之后的访问会将cookie中的sessionId放入到请求头中去访问服务器,如果通过这个sessionid没有找到对应的数据,那么服务器会创建一个新的sessionid并且响应给客户端。二、分布式session有什么问题?

2020-06-25 17:14:04 687 1

原创 SpringBoot+Redis+Cookies实现高并发的购物车

案例实战:SpringBoot+Redis+Cookies实现高并发的购物车步骤1:代码逻辑 /** * 添加购物车 */ @PostMapping(value = "/addCart") public void addCart(CookieCart obj) { String cartId=this.getCookiesCartId(); String key=COOKIE_KEY+cartId; Boolean

2020-06-25 15:41:40 840

原创 京东双11购物车

京东双11购物车一、京东购物车多种场景分析步骤1:先登录你的京东账号,清空以前购物车,然后添加一件商品A,保证你的购物车只有一件商品A。步骤2:退出登录,购物车添加商品B,然后关闭浏览器再打开。(请问:购物车的商品B是否存在?)步骤3:再次登录你的京东账号。(请问:你的购物车有几件商品?)二、图解分析:双11高并发的京东购物车技术实现三、购物车的redis经典场景往购物车加入2件商品采用hash数据结果,key=cart:user:用户id127.0.0.1:6379> hset c

2020-06-24 22:54:29 257

原创 京东购物车双11实战

2020-06-24 22:44:47 183

原创 tinyurl淘宝短链接业务

##淘宝短链接如何设计?体验淘宝短链接业务场景场景1:淘宝短信你们应该收到淘宝的短信【天猫】有优惠啦!黄皮金煌芒果(水仙芒)带箱10斤49.8元!核薄无丝很甜喔!购买: c.tb.cn/c.ZzhFZ0 急鲜丰 退订回TD打开IE,输入 c.tb.cn/c.ZzhFZ0 就转变为如下:https://h5.m.taobao.com/ecrm/jump-to-app.html?scm=20140608.2928562577.LT_ITEM.1699166744&target_url=

2020-06-24 20:37:29 30648

原创 67. 二进制求和

class Solution { public: string addBinary(string a, string b) { std::string result; if(a.size() == 0 || b.size() == 0) { return a.size() == 0? b:a; } int jinwei = 0; for(int i = a.size()-...

2020-06-24 16:41:46 117

原创 geohash美团附近酒店搜索-技术方案

美团附近酒店搜索-技术方案自Redis 3.2开始,Redis基于geohash和zset提供了地理位置相关功能。什么是GeohashGeohash是一种地址编码,它能把二维的经纬度编码成一维的字符串。比如,世界之窗的编码是ws101xy1rp0。Redis Geo模块包含了以下6个命令:GEOADD将给定的位置对象(纬度、经度、名字)添加到指定的key;39.100.196.99:6379> geoadd hotel 113.9807127428 22.5428248089 "世界之窗

2020-06-24 15:26:11 6070

原创 springboot+redis实现微博热搜排行榜

springboot+redis实现微博热搜排行榜技术模拟思路:采用26个英文字母来实现排行,随机为每个字母生成一个随机数作为score为了更好的体验,先做几件事:先初始化1个月的历史数据定时5秒钟,模拟微博的热度刷新(例如模拟点赞 收藏 评论的热度值更新)定时1小时合并统计 天、周、月的排行榜。步骤1:先初始化1个月的历史数据@Service@Slf4jpublic class InitService { @Autowired private RedisTempl

2020-06-24 12:37:33 3503 2

原创 微博热榜排行榜zset

2020-06-24 12:36:59 738

原创 redis的IM的聊天工具

redis的IM的聊天工具什么是redis的stream数据结构?Redis 5.0推出了一个新的数据结构:Stream。Stream就是一个流处理 的数据结构.基于流处理的数据结构,它的功能应用于类似IM的聊天工具和典型的消息队列。Redis 的Stream几乎满足了消息队列具备的全部内容,包括但不限于:1.消息ID的序列化生成2.消息遍历3.消息的阻塞和非阻塞读取4.消息的分组消费5.未完成消息的处理6.消息队列监控xadd:向Stream追加消息xdel:从Stream中删除消

2020-06-23 20:33:16 947

原创 分布式红锁的加锁失败的设计原理

分布式红锁的加锁失败的设计原理1.先把3台 redis key全部清空(为了不受debug干扰,必须先删除锁)127.0.0.1:6379> flushdbOK都设置为30分钟超时 过期2.isLock = redLock.tryLock(10006030, 10006030, TimeUnit.MILLISECONDS);试验步骤:先启动3台redis实例,然后启动springbootspringboot启动成功后,停2台redis实例。(不能先停2台redis,不然springb

2020-06-23 19:39:29 252

转载 Redis分布式锁

Redis分布式锁转载:http://redis.cn/topics/distlock.html分布式锁在很多场景中是非常有用的原语, 不同的进程必须以独占资源的方式实现资源共享就是一个典型的例子。有很多分布式锁的库和描述怎么实现分布式锁管理器(DLM)的博客,但是每个库的实现方式都不太一样,很多库的实现方式为了简单降低了可靠性,而有的使用了稍微复杂的设计。这个页面试图提供一个使用Redis实现分布式锁的规范算法。我们提出一种算法,叫Redlock,我们认为这种实现比普通的单实例实现更安全,

2020-06-23 19:25:44 117

原创 分布式红锁的leaseTime的设计原理

3.分布式红锁的leaseTime的设计原理提前做2个动作:1.先把3台 redis key全部清空(为了不受debug干扰,必须先删除锁)127.0.0.1:6379> flushdbOK都设置为30分钟超时 过期2.isLock = redLock.tryLock(10006030, 10006030, TimeUnit.MILLISECONDS);leaseTime就是租约时间,就是redis key的过期时间。long newLeaseTime = -1;if (leaseT

2020-06-23 11:11:03 3709

原创 分布式红锁的加锁的lua底层设计原理

分布式红锁的加锁的lua底层设计原理提前做2个动作:1.先把3台 redis key全部清空(为了不受debug干扰,必须先删除锁)127.0.0.1:6379> flushdbOK2.isLock = redLock.tryLock(1000530, 1000605*30, TimeUnit.MILLISECONDS);debug的断点 断在 RedissonLock.tryLockInnerAsync(long leaseTime, TimeUnit unit, long thread

2020-06-23 11:09:52 346

原创 分布式红锁的waitTime的设计原理

分布式红锁的waitTime的设计原理提前做2个动作:1.先把3台 redis key全部清空127.0.0.1:6379> flushdbOK2.isLock = redLock.tryLock(1000520, 1000605*20, TimeUnit.MILLISECONDS); @Override public boolean tryLock(long waitTime, long leaseTime, TimeUnit unit) throws Interrupte

2020-06-23 11:09:10 510

原创 采用docker部署3台Redis分布式红锁实例

采用docker部署3台Redis分布式红锁实例docker run -p 6381:6379 --name redis-master-1 -d redis:5.0.7docker run -p 6382:6379 --name redis-master-2 -d redis:5.0.7docker run -p 6383:6379 --name redis-master-3 -d redis:5.0.7[root@node2 ~]# docker psCONTAINER ID

2020-06-23 11:08:18 238

原创 图解分析:基于setnx的分布式锁有什么缺陷

spring boot 和redis集成图解分析:基于setnx的分布式锁有什么缺陷?基于setnx的分布式锁存在单点风险,如果存储的分布式锁key挂掉的话,就可能存在丢锁的风险。一旦丢锁,就会造成多个客户端同时握有锁,从而导致分布式锁失败。具体如下:客户端A 从master拿到锁lock01master正要把lock01同步(Redis的主从同步通常是异步的)给slave时,突然宕机了,导致lock01没同步给slave主从切换,slave节点被晋级为master节点客户端B到maste

2020-06-23 11:06:36 3706

原创 面试题 16.18. 模式匹配

题解:https://leetcode-cn.com/problems/pattern-matching-lcci/solution/hua-liao-ge-hui-su-de-si-lu-tu-bian-jie-qing-kuang/const patternMatching = (pattern, value) => { const map = new Map() // 保存a和b所对应的单词 const set = new Set() // 用于确保map中的a和b不会...

2020-06-22 22:59:42 186

原创 漏斗限流法

C++漏斗限流法// g++ bucket_limit.cpp -std=c++11#include<iostream>#include<sys/time.h>#include<unordered_map>#include<map>#include <unistd.h>using namespace std;// 漏斗限流class BucketLimit {public: BucketLimit(int rat

2020-06-22 11:42:44 1014 1

原创 redis如何实现分布式重入锁

redis如何实现分布式重入锁?在上一节课中,我们已经知道SETNX是不支持重入锁的,但我们需要重入锁,怎么办呢?目前对于redis的重入锁业界还是有很多解决方案的,最流行的就是采用Redisson,关于什么是Redisson?下面详细介绍什么是 Redisson?Redisson是Redis官方推荐的Java版的Redis客户端。它基于Java实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。它在网络通信上是基于NIO的Netty框架,保证网络通信的高性能。在分布式锁的功

2020-06-21 19:16:30 405

原创 ReentrantLock可重入锁

案例实战:基于ReentrantLock的递归锁ReentrantLock,是一个可重入且独占式的锁,是一种递归无阻塞的同步锁。和synchronized关键字相比,它更灵活、更强大,增加了轮询、超时、中断等高级功能。步骤1:ReentrantLock的递归实现public class ReentrantLockDemo { private Lock lock = new ReentrantLock(); public void doSomething(int n){

2020-06-21 14:45:46 186

原创 synchronized可重入锁

什么是可重入锁?它有什么作用?可重入锁,也叫做递归锁,指的是在同一线程内,外层函数获得锁之后,内层递归函数仍然可以获取到该锁。说白了就是同一个线程再次进入同样代码时,可以再次拿到该锁。它的作用是:防止在同一线程中多次获取锁而导致死锁发生。在java的编程中synchronized 和 ReentrantLock都是可重入锁。案例实战:基于synchronized下订单的可重入锁业务场景:模仿下订单操作,先减库存,再插入订单表。步骤1:库存加锁,订单也加锁public class Synchr

2020-06-21 14:42:36 390

原创 不可重入锁

什么是不可重入锁?所谓不可重入锁,即若当前线程执行某个方法已经获取了该锁,那么在方法中尝试再次获取锁时,就会获取不到被阻塞。同一个人拿一个锁 ,只能拿一次不能同时拿2次。案例实战:设计一个不可重入锁public class Lock{ //锁的状态:true=锁住,false=解锁 private boolean isLocked = false; /** * 获取锁 */ public synchronized void lock() {

2020-06-21 14:32:11 327

原创 Redis普通分布式锁

1.为什么要使用分布式锁,它解决了什么问题?锁,顾名思义,就是一份数据在同一时间内只能被一个人使用,不能2个人同时使用。对于锁,一般有2种使用场景:单机系统:单机系统在多用户多线程并发操作同一份资源(数据)的时候,采用线程加锁的机制,即当某个线程获取到该资源(数据)后,立即加锁,当使用完后,再解锁,其它线程就可以接着使用了。例如,在JAVA的锁机制synchronize/Lock等。分布式系统:在分布式系统环境中,单机的线程锁机制是不起作用的,因为系统采用了集群部署在不同的机器上;如果

2020-06-21 13:58:18 164

原创 HyperLogLog 命令详解

HyperLogLog 命令详解HyperLogLog 目前只支持3个命令,PFADD、PFCOUNT、PFMERGEPFADD将元素加入到HyperLogLog数据结构中,如果 HyperLogLog 的基数估算值在命令执行之后出现了变化,那么命令返回1,否则返回0。PFCOUNT返回给定 HyperLogLog 的基数估算值。127.0.0.1:6379> pfadd uv 192.168.1.100 192.168.1.101 192.168.1.102 192.168.1.103

2020-06-21 11:41:59 471

原创 HyperLogLog设计和实战

参考资料:论文:http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdfhttps://www.jianshu.com/p/55defda6dcd2

2020-06-21 10:43:17 504

原创 Twitter的分布式自增ID算法snowflake

全局ID 要做到幂等性的交易接口,需要有一个唯一的标识,来标志交易是同一笔交易。而这个交易ID由谁来分配是一件比较头疼的事。因为这个标识要能做到全局唯一。如果由一个中心系统来分配,那么每一次交易都需要找那个中心系统来。 这样增加了程序的性能开销。如果由上游系统来分配,则可能会导致可能会出现分配ID重复了的问题。因为 上游系统可能会是一个集群,它们同时承担相同的工作。为了不产生分配冲突,我们需要使用一个不会冲突的算法,比如使用UUID这样冲突非常小的算法。但UUID的问题是,它的字符串占用的空间比较大

2020-06-20 23:03:19 166

原创 案例实战:采用redis生成淘宝商品的全局id

案例实战:采用redis生成淘宝商品的全局id一、为什么分布式系统需要全局唯一id ?在互联网系统中,并发越大的系统,数据就越大,数据越大就越需要分布式,而大量的分布式数据就越需要唯一标识来识别它们。例如淘宝的商品系统有千亿级别商品,订单系统有万亿级别的订单数据,这些数据都是日渐增长,传统的单库单表是无法支撑这种级别的数据,必须对其进行分库分表;一但分库分表,表的自增id就失去了意义;故需要一个全局唯一的id来标识每一条数据(商品、订单)。例如 一张表1一亿条数据,被你分库分表10张表,原先的id

2020-06-20 19:02:31 605

原创 125. 验证回文串

复杂度分析 时间复杂度:O(|s|),其中|s|是字符串s的长度。 空间复杂度:O(1)。 class Solution { private: // check是否符合 bool check(const char& c) { if(c >= '0' && c <= '9') { return true; } if(c >= 'a' &...

2020-06-19 22:21:24 91

1.6 Golang在阿里巴巴调度系统Sigma中的实践.pdf

1.6 Golang在阿里巴巴调度系统Sigma中的实践。

2020-04-19

栈和队列.rar

栈队列,两个栈实现队列,两个队列实现栈,栈和队列的一些简单应用

2016-01-14

深度优先搜索

哈理工几道深度优先搜索例题,泉水下山

2015-08-15

排序树 变成双向链表

排序树 变成双向链表排序树

2014-09-14

排序树 双向 循环链表

排序树 双向 循环链表

2014-08-31

空空如也

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

TA关注的人

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