redis分布式锁

2020年1月的最新的Java面试经历整理(一次性查缺补漏个够)

蓝咒 提交于 2020-01-22 22:50:30
前言 现在已经是2020年了,相信很多人都在准备面试,,如何拿到心仪的 Offer,进入梦寐以求的大厂,实现自己的职业理想,达到程序员的小康水平。 这篇文章主要介绍了 刘哥 一月份的几次面经,(一次性查缺补漏个够), (感谢刘哥的内容提供) 对于面试的那几家公司暂不公布,望理解。 第一家(Zookeeper+微服务+消息中间件+高并发架构设计) 一面 JVM数据存储模型,新生代、年老代的构造? java GC算法,什么时候会触发minor gc,什么时候会触发full gc? GC 可达性分析中哪些算是GC ROOT? 你熟悉的JVM调优参数,使用过哪些调优工具? Java 有什么锁类型? 描述下线程池的处理流程? 类加载机制,一个类加载到虚拟机中一共有几个步骤,这些步骤的顺序哪些是固定的,哪些是不固定的,为什么不固定? hashmap是线程不安全的,concurrenthashmap是线程安全的,怎么实现的线程安全? volatile关键字解决了什么问题,实现原理是什么? 并发容器有哪些,并发容器和同步容器的区别 二面 在工作中,SQL语句的优化和注意的事项 哪些库或者框架用到NIO Spring 都有哪几种注入方式,什么情况下用哪种,ioc实现原理 如何定位一个慢查询,一个服务有多条SQL你怎么快速定位 聚集索引和非聚集索引知道吗?什么情况用聚集索引什么情况用非聚集索引

redis 分布式锁实现

天大地大妈咪最大 提交于 2020-01-22 22:44:44
/** * FileName: RedisDistributedLock * Author: XXXX * Date: 2019/5/13 16:56 * Description: redis 分布式锁实现 * History: * <author> <time> <version> <desc> * 作者姓名 修改时间 版本号 描述 */ package com.xxx.cloud.platfrom.common.redis.lock; import com.xxx.cloud.common.core.lock.AbstractDistributedLock; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import

python后端面试第三部分:数据储存与缓存相关--长期维护

感情迁移 提交于 2020-01-22 15:34:57
################## 数据储存与缓存相关 ####################### mysql数据库, redis数据库, 9. MySQL的索引一般是怎么实现的? B-Tree(一般是B+Tree)和Hash,然后再简单介绍一下。 存储 存储可能包含rdbms,nosql以及缓存等,我以MySQL,redis举例。 mysql相关 mysql 是流行的RDBMS 关系型数据库 1.谈谈mysql字符集和排序规则? 2.var char与char的区别是什么?大小限制?utf8字符集下varchar最多能存多少个字符 char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10, 除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的。 尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。 再者,char的存储方式是,对英文字符

SpringBoot 整合 jedis

混江龙づ霸主 提交于 2020-01-22 04:56:42
常用的redis客户端介绍以及对比 Jedis api 在线网址:http://tool.oschina.net/uploads/apidocs/redis/clients/jedis/Jedis.html redisson 官网地址:https://redisson.org/ redisson git项目地址:https://github.com/redisson/redisson lettuce 官网地址:https://lettuce.io/ lettuce git项目地址:https://github.com/lettuce-io/lettuce-core 首先,在spring boot2之后,对redis连接的支持,默认就采用了lettuce。这就一定程度说明了lettuce 和Jedis 的优劣。 概念 Jedis:是老牌的Redis的Java实现客户端,提供了比较全面的Redis命令的支持, Redisson:实现了分布式和可扩展的Java数据结构。 Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。 优点 Jedis:比较全面的提供了Redis的操作特性 Redisson:促使使用者对Redis的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过 Redis支持延迟队列

本地缓存google.guava及分布式缓存redis 随笔

人盡茶涼 提交于 2020-01-21 12:34:36
近期项目用到了缓存,我选用的是主流的google.guava作本地缓存,redis作分布式 缓存,先说说我对本地缓存和分布式缓存的理解吧,可能不太成熟的地方,大家指出,一起 学习.本地缓存的特点是速度快,不会受到网络阻塞的干扰,但由于是放在本地内存中,所 以容量较小,不能项目间共享比IO效率高比redis,且不会持久化.所以拿来存储一些数据 很少,但又经常执行的,甚至只要启动程序就会访问的数据. 我们可以自定义初始化本地缓存的方法,指定存储量和缓存淘汰机制. /** * 初始化本地缓存 */@PostConstructpublic void init() { commonCache = CacheBuilder.newBuilder() //设置缓存的 .initialCapacity(10) //设置缓存中最大可以存储的key数量,超过就会按照LRU的策略进行清除 .maximumSize(100).expireAfterWrite(60, TimeUnit.SECONDS).build();}几种常见的内存淘汰机制:LRU,LFULFU:根据数据的历史访问频率来淘汰数据LRU:根据访问时间的前后来淘汰数据,优先保留近期访问的数据guava是极度轻量级的cache,只具备基本的增删改查和刷新数据,淘汰数据等功能,但能满足大部分需求.redis作为常用的分布式缓存

[redis]redis的基础

泄露秘密 提交于 2020-01-21 04:38:21
REDIES 前景提要之NoSQL 技术 简介 定义 特点 Redis的单线程 优点 应用场景 适合的场景 不适合的场景 Redies数据结构 数据模型 Key 通用操作 string(字符串) 常用命令 应用场景 list(双向链表) 功能 常用命令 应用场景 hash(dict) 常用命令 应用场景 Set 功能特色 常用命令 应用场景 zset(sort set) 常用命令 应用场景 Redis与其他key-value存储的区别 其他 存储 配置 配置存储参数 安装配置 配置参数 Redis常用命令 Redis常用内存优化手段与参数 不要开启Redis的VM选项,即虚拟内存功能, 设置下redis.conf中的maxmemory选项 Redis为不同数据类型分别提供了一组参数来控制内存使用 HASH LIST/SET 前言:需要使用redis,但是之前从未接触过redis,所以这是一篇很基础的笔记,从各种网站上搜罗来的简介和基础,如有不正确的地方请告知。 前景提要之NoSQL 技术 基于内存的数据库,并且提供一定的持久化功能。 Redis和MongoDB是当前使用最广泛的NoSQL 就Redis技术而言,它的性能十分优越,可以支持每秒十几万此的读/写操作,其性能远超数据库,并且还支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中

Redis我们应该知道的特性

笑着哭i 提交于 2020-01-21 03:05:21
关于的知识点总结成了思维导图 1、什么是 Redis? Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: (1)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 (2)Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。 (3)Redis 支持数据的备份,即 master-slave 模式的数据备份。 Redis 优势 (1)性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。 (2)丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。 (3)原子 – Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC指令包起来。 (4)丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。 Redis 与其他 key-value 存储有什么不同? (1)Redis

Redis我们应该知道的特性

微笑、不失礼 提交于 2020-01-21 00:39:26
关于的知识点总结成了思维导图 1、什么是 Redis? Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: (1)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 (2)Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。 (3)Redis 支持数据的备份,即 master-slave 模式的数据备份。 Redis 优势 (1)性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。 (2)丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。 (3)原子 – Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC指令包起来。 (4)丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。 Redis 与其他 key-value 存储有什么不同? (1)Redis

Redis分布式锁的实现

Deadly 提交于 2020-01-20 19:04:22
Redis分布式锁的实现 来自 https://www.cnblogs.com/Eugene-Jin/p/10801260.html 1.概述 分布式锁一般有三种实现方式:1.基于数据库实现分布式锁;2. 基于缓存(Redis,memcached,tair)实现分布式锁; 3.基于Zookeeper实现分布式锁。本片博客将介绍基于缓存实现分布式锁,这里主讲分别针对Redis 2.6.12 之前版本和Redis 2.6.12 及之后版本分布式锁的实现。 2.基于Redis(Redis 2.6.12版本之前)分布式锁的实现方式 (1)命令介绍   1)SETX    SETNX key value: setnx是『set if not exists』(即当key不存在时,则set)的简写。setnx具有原子性,当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0.   2)GETSET   GETSET key value: 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。当 key 存在但不是字符串类型时,返回一个错误。当 key 没有旧值时,也即是, key 不存在时,返回 nil 。   3)GET   GET key: 返回 key 所关联的字符串值;如果 key 不存在那么返回特殊值 nil

volatile关键字的作用

巧了我就是萌 提交于 2020-01-20 17:45:29
引言   昨日接了一个阿里外包的电话面试,问了一些技术问题感觉到自己是真的菜,接触Java开发已经也有一段时间,技术方面说来惭愧,一直以来只是局限于框架工具的用法,也没有进行了解其实现的原理,更重要的是一直没有归纳和总结,这次把这些问题记录下来,相关的知识点也找了一些资料学习下。 问题 1. CountDownLanch的工作原理 实现原理:计数器的值由构造函数传入,并用它初始化AQS的state值。当线程调用await方法时会检查state的值是否为0,如果是就直接返回(即不会阻塞);如果不是,将表示该节点的线程入列,然后将自身阻塞。当其它线程调用countDown方法会将计数器减1,然后判断计数器的值是否为0,当它为0时,会唤醒队列中的第一个节点,由于CountDownLatch使用了AQS的共享模式,所以第一个节点被唤醒后又会唤醒第二个节点,以此类推,使得所有因await方法阻塞的线程都能被唤醒而继续执行。   引用别人的博客里的一段话,详细请点击: Java并发包中CountDownLatch的工作原理、使用示例 题外话: 什么是 AQS(抽象的队列同步器) AbstractQueuedSynchronizer类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问 共享资源的同步器框架,许多同步类实现都依赖于它,如常用的 ReentrantLock/Semaphore