最近可能有点闲的慌,没事就去找面试面经,整理了一波面试题。我大概是分成了Java基础、中级、高级,分布式,Spring架构,多线程,网络,MySQL,Redis缓存,JVM相关,调优,设计模式,算法与数据结构,并发,Linux等15个小模块。 每个小模块文章里估计就只能只给出部分的面试题目,不然要是全部写出来,篇幅不够呀。而且还有相应的答案,太难了,所以直接给大家提供最完整的答案解析文档,有需要的朋友,点此免费获取!一、Java基础...
一,安装需要用到的库 1,go-redis的地址: https://github.com/go-redis/redis 2,安装go-redis liuhongdi@ku:~$ go get -u github.com/go-redis/redis/v8 3,redsync的地址 https://github.com/go-redsync/redsync 4,安装redsync liuhongdi@ku:~$ go get -u github.com/go-redsync/redsync/v4 5,gorm的地址 https://gorm.io/ 6,安装gorm liuhongdi@ku:~$ go get -u gorm.io/gorm 说明:刘宏缔的go森林是一个专注golang的博客, ...
目录 一. 什么是分布式锁?二. 分布式锁的使用场景三. 分布式锁的实现(Redis) 一. 什么是分布式锁?要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如synchronized是共享对象头,显示锁Lock是共享某个变量(st...
参考:https://blog.csdn.net/weixin_44634197/article/details/108308395 、、 使用redis的set命令带NX(not exist)参数实现分布式锁 NX:只有当不存在时,才可以set;成功set会返回OK,不成功返回null //分布式锁 public Map<String, List<Catelog2Vo>> getCatalogJsonFromDBWithRedisLock() {//1、占分布式锁。去redis占坑Boolean aBoolean = stringRedisTemplate.opsForValue().setIfAbsent("lock", "lock");if(aBoolean){//加...
一、基于数据库实现分布式锁 1.1、悲观锁 利用select … where … for update 排他锁。注意: 其他附加功能与实现一基本一致,这里需要注意的是“where name=lock ”,name字段必须要走索引,否则会锁表。有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题。 1.2、乐观锁 所谓乐观锁与前边最大区别在于基于CAS思想,是不具有互斥性,不会产生锁等待而消耗资源,操作过程中认为不存在并发冲突,只有update version失...
分布式锁的作用 在单机场景下可以使用内置锁来实现进程同步,但在分布式场景下需要同步的进程可能位于不同节点上,就需要用到分布式锁, 可以保证在分布式部署的应用集群中,同一个方法在同一操作只能被一台机器上的一个线程执行。 简而言之分布式锁是解决分布式环境中同一个方法被客户端调用的一致性问题。 分布式锁的三种实现方式基于数据库实现分布式锁; 基于缓存(Redis等)实现分布式锁; 基于Zookeeper实现分布式锁;redis分...
什么是分布式锁 说到Redis,我们第一想到的功能就是可以缓存数据,除此之外,Redis因为单进程、性能高的特点,它还经常被用于做分布式锁。 锁我们都知道,在程序中的作用就是同步工具,保证共享资源在同一时刻只能被一个线程访问,Java中的锁我们都很熟悉了,像synchronized 、Lock都是我们经常使用的,但是Java的锁只能保证单机的时候有效,分布式集群环境就无能为力了,这个时候我们就需要用到分布式锁。 分布式锁,顾名思义,就...
pom.xml<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.13.6</version> </dependency> application.yml 单机环境 spring:redis:host: ipport: 6379password: ******database: 1jedis:pool:min-idle: 3max-active: 8max-wait: 10000stimeout: 20000s Java代码 @Autowired private RedissonClient redissonClient; ...... @Override public void lockAdd(int time) ...
目录前言模板方法代码方法一 固定时间段限流优点缺点核心逻辑tryAcquire测试用例tryAcquire测试用例结果方法二 时间段不固定限流Redis官网伪代码优点缺点核心逻辑tryAcquire测试用例tryAcquire测试用例结果方法四 利用有序集合实现滑动窗口方法三 令牌桶算法在Redis中的实现前言 限流的作用大家其实都知道, 单机版本下的限流有Guava的RateLimiter以及JDK自带的Semaphore, 都能满足需求. 但是线上业务出于各种原因考虑, 还需要分布式...
这两天在看分布式锁相关的知识,看到一篇文章,分享给大家,附上原文链接https://www.jb51.net/article/118312.htm 这篇文章主要介绍了Redis实现分布式锁的几种方法总结的相关资料, Redis实现与Zookeeper实现和数据库实现,需要的朋友可以参考下。 Redis实现分布式锁的几种方法总结 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间...
一、业务背景 有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响。 二、分析流程 使用 Redis 作为分布式锁,将锁的状态放到 Redis 统一维护,解决集群中单机 JVM 信息不互通的问题,规定操作顺序,保护用户的数据正确。 梳理设计流程新建注解 @interface,在注解里设定入参标志 增加 AOP 切点,扫描特定注解 建立 @Aspect 切面任务,注册 bean 和拦截特定方...
因项目需要,需要对缓存中数据进行频繁的读写操作,为了防止并发写覆盖问题,在程序中加了redis实现的分布式锁来控制并发写的场景。 先上代码,后期更新。 /*** 更新充值码中已使用次数** @param request*/private void updateRechargeCodeCache(RechargeByCodeRequest request) {// 最大重试次数int retryTimes = 10;// 获取充值码信息String lockKey = "recharge_card_" + request.getChannel() + "_" + request.getRechargeCode...
1. 将爬虫的类从scrapy.Spider变成scrapy_redis.spiders.RedisSpider;或者是从scrapy.CrawlSpider变成scrapy_redis.spider.RedisCrawlSpider。? ? 2. 将爬虫中的start_urls删掉,增加一个redis_key=”xxx”,这个redis_key是为了以后再redis中控制爬虫启动的。爬虫的第一个url,就是在redis中通过这个类属性发送出去的。3. 在配置文件中增加如下配置: # 确保带爬取的request对象存储到redis数据库中 爬虫名:requests# 将单词全部进行...
scrapy_redis的作用Scrapy_redis在scrapy的基础上实现了更多,更强大的功能,具体体现在:通过持久化请求队列和请求的指纹集合来实现: 断点续爬分布式快速抓取 其他概念性的东西可自行百度。我们就只写怎么将普通爬虫改写为分布式爬虫 第一步:导入分布式爬虫类(抄官方) 第二步:继承分布式爬虫类(记不住就抄) 第三步:注销起始url和允许的域 第四步:设置redis-key(随便写,看官网也行) 第五步:设置–init–(抄官方例子...
小伙四面美团终拿下Offer,全靠刷了这1000道互联网高频面试笔记 我一铁哥们从去年到今年先后面试了 4次美团,外卖、订单、商旅面试了好几个部门,终于在今年年初成功拿下offer,总结下来各部门面试的大体思路基本都一致。比如: JVM 参数配置、常用调试工具、分区、类加载,还会问你有需要线上的调试问题吗?遇到死循环 CPU 飙升怎么解决?Java 并发包常用工具用法和原理、会配合集合类一起考,对了还会有 volatile、CAS 原理等。M...