自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 约瑟夫环Java实现

今天这个问题被问到了 说的不太好 这里解释一下 约瑟夫环说白了就是一群人站成一个圈 比如10个人 开始报数 每次报数为3的出圈 剩下的人继续从1开始报数 问剩下一个人的时候 这个人是几号? 上代码: class Solution { public static void main(String[] args) { int count = 10;//总共10个人 int key = 3; //题里面问的是最后剩下的这个人是几号 那么先得给站成一圈的人 标

2021-01-23 13:21:32 379 3

原创 Redis zset实现滑动窗口简单限流

/** * 计数器方法: 在10秒内,只有20个请求能访问我的代码 * 实现方式: setnx key 10 value 每多一个请求,value就+1,,当value等于10时,不执行接下来的代码 * 缺点: 能知道1-10s内有多少次请求,但是2-11s的请求数不知道 * 时间滑动窗口 * 下面介绍这种 */ @AllArgsConstructor public class RedisSimpleRateLimiter { private Jedis jedis; /.

2021-01-11 15:24:10 1152

原创 redis:利用zset实现延迟队列

package com.lrw.ohter.redistest; import com.alibaba.fastjson.JSON; import lombok.AllArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import redis.clients.jedis.Jedis; import java.util.Set; import java.util.UUID; @AllArgsConstruc

2020-10-03 17:04:27 1399

原创 BIO/AIO和IO多路复用常见问题

什么是BIO 顾名思义 blockingIO 是阻塞IO 一个连接一个线程 作为服务端开发 我们使用serverSocket绑定完端口之后 会监听该端口 等待accept事件 accept事件会阻塞当前线程 当我们收到accept事件的时候 会拿到一个客户端与当前服务端的socket 针对这个socket我们可以进行读写 这就有个问题 如果1w个连接呢 就要建立1w个线程 CPU是肯定顶不住的 所以就有了NIO NIO 我理解就是not blocking IO 它从两方面解决了问题 1.Java层面 提供s

2020-09-13 21:40:45 177

原创 十分钟看懂Java7种单例模式+常见的问题

什么是单例模式? 首先构造器私有 并且必须保证一个类只有一个实例 饿汉式 public class A{ private A(){} private final static A a = new A(); private static A getA(){ return a; } } 优缺点 编程简单 但是无法延迟创建对象 浪费空间 懒汉式 见名知意 很懒 所以会延迟创建对象 单线程写法 public Class A{ private A(){} private static A a;

2020-09-05 11:16:31 181

原创 堆排序Java实现

什么是堆呢? 首先是一棵完全二叉树(叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树) 然后父节点的值都要大于子节点 我们的目的很简单 首先要构造一个堆 ```java //n是树里面有多少结点 i表示我们要做heapify操作的节点 public void heapify(int[] tree, int n, int i) { if (i >= n) { return; } int c1 = 2 * i + 1;

2020-09-01 23:11:25 110

原创 redis分布式锁的实现方式

是什么?为什么要有分布式锁? 首先 现在的项目很少是单体的了 都是分布式的 也就是可能在不同的服务器上 而synchronized这些锁 是JVM层面或者API层面的锁 所以说 无法锁住 我们需要新的方式保证安全 也就是分布锁 有哪些实现方式? 1.zookeeper 2.mysql 3.redis redis: set的key是商品ID value可以是个随机值 大家抢购同一个商品 就给这个商品加一把锁 注意这个10s,现在有两个线程,可能到10s的时候 线程A还没执行完,就释放锁,然后B线程进来了,刚

2020-08-31 21:14:00 172

原创 Spring的初始化流程以及循环依赖原因和解决方法

Spring的初始化过程 容器先初始化 就是调用复合方法refresh bean的生命周期是在refresh方法里面的 这个refresh方法里面和bean生命周期关系最大的两个方法是 registerBeanPostProcessors(beanFactory); finishBeanFactoryInitialization(beanFactory) :这个方法将会对非延迟加载的单例Bean进行预实例化 他们都调用的getBean->doGetBean bean的生命周期:spring先

2020-08-30 13:57:00 452

原创 滑动窗口简单理解

滑动窗口 在TCP报文的头部 有个窗口字段 是用来控制发送方窗口大小的 发送方的滑动窗口: 然后发送方把数据全部发出去 可用窗口为0 当发送方收到了之前的 已发送但是未收到ack确认的 ack确认后,发送窗口移动 接收窗口 接收窗口和发送窗口的大小是相等的吗? 约等于 因为滑动窗口并不是一成不变的 ...

2020-08-29 19:52:00 675

原创 分布式事务(6种)

什么是事务? 就是一系列操作 要么同时成功 要么同时失败 为了保证这一系列的操作 必须同时满足四大特性 分布式事务? 比方说下单操作 涉及到很多环节 优惠券模块 积分模块等 某一个模块失效了 别的成功了就会出问题 分布式事务就是要保证大家一起都成功 常见的几种方案: 1.两段式提交(2pc) 通过消息中间件协调多个系统 比如有AB两个事务 中间件先问A准备好了吗 A说准备好了 问B准备好了吗 B说准备好了 然后A提交 B提交 如果有一个提交失败了 那么就全都回滚 2.三段式提交(3pc) 在两阶段提交第一

2020-08-11 10:25:57 667

原创 TCP协议(3握4挥)

TCP是什么? TCP:面向连接的 可靠的 基于字节流的 传输层 通信协议 需要注意的有下面几位 ACK:该位置1,确认应答 的字段变得有效 RST:该位置1,TCP连接过程中出现异常必须强制断开连接 SYC:该位置1,表示希望建立连接 并在其序列号(seq)字段进行初始值的设定 FIN:该位置1,表示今后不会再有数据发送,希望断开连接 第三次握手是可以携带数据的 前两次不能 一旦完成三次握手 双方都处于establish状态 至此连接建立完成 可以互相发送数据了 为什么是3次? 1.防止历史连接建立

2020-08-08 12:47:10 161

原创 关于AQS

了解的不多 写博客主要是为了便于自己理解和记忆 内容多数为各个博客上面总结的 再加上一点自己的理解 见谅 什么是AQS? AbstractQueuedSynchronizer 抽象队列同步器 是一套多线程访问共享资源的框架 注意是框架 不是具体的实现 原理:内部依赖了FIFO双向队列 如果当前线程获取失败 AQS会将该线程以及等待状态等信息构造成一个Node,将其加入同步队列的尾部,同时阻塞当前线程,当同步状态释放时,唤醒队列的头节点 具体的实现有什么? 如CountDownLatch Reen

2020-07-26 23:41:13 167

空空如也

空空如也

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

TA关注的人

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