自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Redis面试题

Redis面试题(2020最新版) ThinkWon 2019-12-13 10:38:01 ...

2021-04-25 16:19:27 336

原创 HashMap

目录HashMap集合简介概述数据结构数据结构解析为什么要满足以上两个条件?小结HashMap继承关系源码HashMap成员变量HashMap的构造方法构造一个空的 HashMap ,默认初始容量(16)和默认负载因⼦(0.75)构造⼀个具有指定的初始容量和默认负载因子(0.75)HashMap构造一个包含另一个Map的构造函数和默认负载因子(0.75)tableSizeFor方法,返回比指定初始化容量大的最小的2的n次幂符号解析源码分析为什么要对cap做减1操作【int n = cap - 1】?计算举例

2021-03-24 18:50:04 199

原创 【Redis】18.缓存预热、缓存雪崩、缓存击穿、缓存穿透、性能指标监控等企业级解决方案

缓存预热 在高请求之前,做好一系列措施,保证大量用户数量点击造成灾难。 请求数量较高主从之间数据吞吐量较大,数据同步操作频度较高 缓存预热解决方案 前置准备工作: 日常例行统计数据访问记录,统计访问频度较高的热点数据利用LRU数据删除策略,构建数据留存队列 例如:storm与kafka配合 准备工作: 将统计结果中的数据分类,根据级别,redis优先加载级别较高的热点数据利用分布式多服务器同时进行数据读取,提速数据加载过程 实施: 使用脚本程序固定出大数据预热过程如果条件允许,使用CDN.

2021-01-09 16:29:35 167

原创 【Redis】17.Cluster集群结构搭建

集群简介 现状问题 业务发展过程中遇到的峰值瓶颈 redis提供的服务OPS可以达到10万/秒,当前业务OPS已经达到20万/秒内存单机容量达到256G,当前业务需求内存容量1T使用集群的方式可以快速解决上述问题 集群架构 集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果。 集群的作用 分散单台服务器的访问压力,实现负载均衡分散单台服务器的存储压力,实现可扩展性降低单台服务器宕机带来的业务灾难 Redis集群结构设计 数据存储设计 通过算法设计.

2021-01-08 23:39:12 82

原创 【Redis】16.Redis哨兵

哨兵简介 主机”宕机“后我们要做的事情 将宕机的master下线找一个slave作为master通知所有的slave连接新的master启动新的master与slave全量复制*N+部分复制 *N 但是这伴随着以下问题 谁来确认master宕机了找一个主?怎么找法修改配置后,原始的主恢复了怎么办? 哨兵 哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master 哨兵的作用 监控 .

2021-01-08 22:54:20 93

原创 【Redis】15.Redis主从复制

主从复制简介 互联网“三高”架构 你的"Redis"是否高可用 单机redise风险与问题 问题1 机器故障 现象:硬件故障、系统崩溃 本质:数据丢失,很可能对业务造成灾难性打击 结论:基本上会放弃使用redis问题2 容量瓶颈 现象:内存不足,从16G升级到64G,无限升级内存 本质:穷,硬件条件跟不上 结论:放弃使用redis结论: 为了避免单点redis服务器故障,准备多台服务器,互相连通。将数据复制多个副本保存在不同的服务器上,连接在一起,并保证数据是否同步的,即使有其中一台服务器宕机,.

2021-01-08 22:03:20 95

原创 【Redis】14.Redis高级数据类型Bitmaps、HyperLogLog、GEO

【Redis】14.Redis高级数据类型Bitmaps、HyperLogLog、GEO Bitmaps:用比特位进行快速的状态统计 Bitmaps基本操作 Bitmaps不是一个新的数据类型,而是string中二进制位的操作接口。之前是以string的整体操作数据,现在是用string中二进制的比特位来存储。Bitmaps类型的扩展操作 业务场景 电影网站 统计每天某一部电影是否被点播统计每天有多少部电影被点播统计每周/月/年有多少部电影被点播统计年度哪部电影没有被

2021-01-08 14:50:27 79

原创 【Redis】13.Redis服务器配置redis.conf

服务器端设定 设置服务器以守护进程的方式运行 deamonize yes|no 绑定主机地址 bind 127.0.0.1 设置服务器端口号 port 6379 设置数据库数量 databases 16 日志配置 设置服务器以指定日志记录级别(默认verbose) loglevel debug|verbose|notice|warning 日志记录文件名 logfile 端口号.log 注意:日志级别开发期设置为ver

2021-01-08 14:09:07 77

原创 【Redis】12.Redis删除策略

Redis中的数据特征 Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态XX : 具有时效性的数据-1 : 永久有效的数据-2 : 已经过期的数据 或 被删除的数据 或 未定义的数据(可是过期的数据是立即删除吗?不是!) 数据删除策略 数据删除策略 定时删除惰性删除定期删除 时效性数据的存储结构 数据删除策略的目标 在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会造成整体redis性能的下降,甚至引发服务器宕机或内存泄漏。 定时删除 .

2021-01-08 14:02:43 138

原创 【Redis】11.Redis事务、事务锁

事务 一旦成功所有的成功,一个失败,所有一些列连续动作都失败 事务的基本操作 开启事务 multi 作用 设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中执行事务 exec 作用 设定事务的结束位置,同时执行事务。与multi成对出现,成对使用 注意:加入事务的命令暂时到任务队列中,并没有立即执行,只有执行exec命令才开始执行 事务定义过程中发现问题,怎么办? 取消事务 discard 作用 终止当前事务定义,发生在multi之.

2021-01-08 11:28:08 89

原创 【Redis】9.10.Redis持久化方式之RDB&AOF&AOF和RDB区别场景分析

持久化简介 什么是持久化 利用永久性存储介质将数据进行保存,在特定的事件将保存的数据进行恢复的工作机制称为持久化 为什么要持久化 防止数据的意外丢失,确保数据安全性 持久化的过程保存什么 将当前数据状态进行保存,快照形式,存储数据结果,存储而是简单,关注点在数据 -----》 RDB将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程 ------》AOF RDB RDB启动方式 谁,什么事件,干什么事情? 谁:redis操作者(用户)什么时间:即时.

2021-01-07 23:26:32 163

原创 【Redis】7.使用jedis操作redis数据库

jedisjedis是java程序操纵Redis的工具。Jedis是Redis官方推荐的Java链接工具使用前导入,下面的测试建议也导入测试的包<!-- 导入jedis的包--><dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version&gt

2021-01-07 21:32:25 154

原创 【Redis】6.Redis key通用指令以及数据库的通用操作

key通用指令 key特征 key是一个字符串,通过key获取redis中保存的数据 key应该设计那些操作? 对于key自身状态的相关操作,例如:删除,判定存在,获取类型等对于key有效性控制相关操作,例如:有效期设定,判定是否有效,有效状态的切换等对于key快速查询操作,例如:按指定策略查询key key基本操作 删除指定key del key 获取key是否存在 exists key 获取key的类型 type key key扩展操作(时效性

2021-01-07 21:02:11 132 2

原创 【Redis】5. Resid数据类型综合实践案例

Resid数据类型综合实践案例 业务场景 1.计数器 解决方案 设计计数器,记录调用次数,用于控制业务执行次数。以用户id作为key,使用此时作为value在调用前获取次数,判断是否超过限定次数,不超过次数的情况下,每次调用计数+1,业务调用失败,计数-1为了计数器设置生命周期为指定周期,例如1秒/分钟,自动清空周期内使用次数。 Tips 16: redis应用于限时按次结算的服务控制 业务场景(微信会话) 业务分析 解决方案 依赖list的数据具有顺序的特征对消息进行管理,将list.

2021-01-07 21:01:25 130

原创 【Redis】4.Redis数据存储list&set&sorted_set

list类型 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分需要的存储数据:一个存储空间保存多个数据,且通过数据可以体现进入顺序list类型:保存多个数据,底层使用双向链表存储结构实现 list类型数据基本操作 添加/修改数据 lpush key value1 [value2] … rpush key value1 [value2] … 获取数据 lrange key start stop lindex key index llen key 删除并移除数据

2021-01-04 23:37:27 244

原创 【Redis】3. Redis数据类型 Hash

学习教程 https://www.bilibili.com/video/BV1CJ411m7Gc?p=12 Hash类型 存储的困惑 对象类数据的存储如果具有较为频繁的更新需求操作会显得笨重 hash类型 新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息需要的内存结构:一个存储空间保存多少个键值对数据hash类型:底层使用哈希表结构实现数据存储 hash类型数据的基本操作 添加/修改数据 hset key field value 获取数据 hg.

2021-01-04 22:34:24 96

原创 【Redis】2. Redis数据类型 String以及key的设置约定

学习资料 https://www.bilibili.com/video/BV1CJ411m7Gc?p=6 数据存储类型介绍 业务数据的特殊性 作为缓存使用 原始业务功能设计 秒杀 618活动 双十一活动 排队购票运营平台监控到的突发高频访问数据 突发市政要闻,被强势关注围观高频、复杂的统计数据 在线人数 投票排行榜 附加功能 系统功能优化或升级 单服务器升级集群Session管理Token管理 Redis 数据类型(5种常用) string --> Stringhash -->

2021-01-04 11:39:03 158

原创 【Redis】1.Redis入门简介以及基本操作命令

学习资料 https://www.bilibili.com/video/BV1CJ411m7Gc?p=6 问题的抛出 出现的问题: 海量用户高并发 罪魁祸首——关系型数据库: 性能瓶颈:磁盘IO性能低下扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群 解决思路 降低...

2021-01-04 11:14:59 110 1

原创 Spring

文章目录Springspring 概述spring 的体系结构IoC 的概念和作用工厂模式解耦控制反转-Inversion Of Control使用 Spring 的 IOC 解决程序耦合Springspring 概述Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC( Inverse Of Control:反转控制)和 AOP( Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 SpringMVC 和持久层

2020-11-21 16:41:56 222

原创 mybatis

文章目录框架MybatisJDBC 编程的分析回顾JDBC问题分析MyBatis 框架概述mybatis的入门mybatis环境搭建mybatis入门案例mybatis基于注解的入门案例细节分析自定义mybatis的分析执行查询所有的分析+查询代理对象的分析自定义mybatis能通过入门案例看到的类自定义mybatis基于代理 Dao 实现 CRUD 操作模糊查询的两种配置方式:#{}与${}的区别问题扩展:新增用户 id 的返回值Mybatis 与 JDBC 编程的比较mybatis的参数深入parame

2020-11-18 14:30:33 169 1

原创 11-直接内存 Direct Memory

文章目录直接内存 Direct Memory非直接缓存区和缓存区存在的问题直接内存 Direct Memory不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区

2020-11-03 22:20:41 287

原创 12-执行引擎

文章目录执行引擎执行引擎概述执行引擎的工作流程Java代码编译和执行过程什么是解释器(Interpreter)什么是JIT编译器为什么Java是半编译半解释型语言机器码、指令、汇编语言机器码指令指令集汇编语言高级语言C、C++源程序执行过程字节码解释器解释器分类现状JIT编译器Java代码的执行分类问题来了HotSpot JVM执行方式案例概念解释热点探测技术方法调用计数器热点衰减回边计数器HotSpotVM 可以设置程序执行方法HotSpotVM中 JIT 分类C1 和 C2编译器不同的优化策略分层编译策

2020-11-03 22:17:41 118

原创 13-StringTable

文章目录StringTableString的基本特性为什么JDK9改变了结构String的不可变性面试题注意String的内存分配为什么StringTable从永久代调整到堆中String的基本操作字符串拼接操作底层原理拼接操作和append性能对比intern()的使用intern的空间效率测试面试题new String("ab")会创建几个对象new String("a") + new String("b") 会创建几个对象intern的使用:JDK6和JDK7JDK6中JDK7中扩展总结StringT

2020-11-03 22:11:15 84

原创 14-垃圾回收概述

...

2020-11-03 21:51:44 109

原创 多线程创建

多线程创建一、获得多线程的方法有几种?共有四种。传统的是继承thread类和实现runnable接口,java5以后又有实现callable接口和java的线程池获得。二、继承Thread类1、步骤 1. 自定义一个类继承Thread类。 2. 重写Thread类的run方法 , 把自定义线程的任务代码写在run方法中 3. 创建Thread的子类对象,并且调用start方法开启线程。疑问: 重写run方法的目的是什么?每个线程都有自己的任务代码,jvm创建的主线程的任务代码就

2020-10-31 23:15:51 107

原创 JUC多线程

多线程进程和线程并发和并行多线程的利弊什么是上下文切换?线程的优先级线程的几种状态sleep方法和wait方法的区别stop,suspend,resume等方法为什么会被遗弃interrupt,interrupted,isInterrupted方法区别join方法yield方法卖票问题多线程1.进程和线程进程与线程最主要的区别是它们是操作系统管理资源的不同方式的体现。 准确来说进程与线程属于衍生关系。 进程是操作系统执行程序的一次过程,在这个过程中可能会产生多个..

2020-10-30 21:17:08 507

转载 JUC学习笔记及拓展

Java JUC1 Java JUC简介在 Java 5.0 提供了 java.util.concurrent (简称 JUC )包,在此包中增加了在并发编程中很常用 的实用工具类,用于定义类似于线程的自定义子 系统,包括线程池、异步 IO 和轻量级任务框架。 提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的 Collection 实现等。2 volatile 关键字-内存可见性2.1 内存可见性Java 内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工

2020-10-30 16:27:48 103

原创 17-垃圾回收器

垃圾回收器GC分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。Java不同版本新特性语法层面:Lambda表达式、switch、自动拆箱装箱、enum、<>API层面:Stream API、新的日期时间、Optional、String、集合框架底层优化:JVM优化、GC的变化、元空间、静态域、字符串

2020-10-11 09:19:16 370

原创 16-垃圾回收相关概念

垃圾回收相关概念System.gc()的理解在默认情况下,通过system.gc()者Runtime.getRuntime().gc() (即system.gc()底层实现)的调用,会显式触发FullGC,同时对老年代和新生代及方法区进行回收,尝试释放被丢弃对象占用的内存。然而system.gc() )调用附带一个免责声明,无法保证对垃圾收集器的调用。(不能确保立即生效)JVM实现者可以通过system.gc() 调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则

2020-10-11 04:39:07 107

原创 15-垃圾回收相关算法

垃圾回收相关算法标记阶段:引用计数算法垃圾标记阶段:对象存活判断在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。判断对象存活一般有两种方式:引用计数算法和可达性分析算法。引用计数算法(R

2020-10-11 02:25:19 143

原创 12-执行引擎

执行引擎执行引擎概述执行引擎属于JVM的下层,里面包括 解释器、及时编译器、垃圾回收器执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字

2020-10-07 23:55:31 110

原创 11-直接内存 Direct Memory

直接内存 Direct Memory不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区使用下列代码,直接分配本地内存空间int BUFFER = 1024

2020-10-07 21:16:55 75

原创 10-对象实例化、内存布局与访问定位

对象实例化内存布局与访问定位对象实例化面试题对象在JVM中是怎么存储的?对象头信息里面有哪些东西?Java对象头有什么?从对象创建的方式 和 步骤开始说对象创建方式new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器Constructor的newInstance(XXX):反射的方式,可以调用空参的,或者带参的构造器使用clone():

2020-10-07 17:45:50 199

原创 07-本地方法栈

本地方法栈Java虚拟机栈于管理Java方法的调用,而****本地方法栈用于管理本地方法的调用。本地方法栈,也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的)如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个stackoverflowError 异常。如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机将会抛出一个outofMemoryE

2020-10-07 15:06:29 92

原创 06- 本地方法接口

本地方法接口什么是本地方法简单地讲,一个Native Methodt是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “c” 告知c++编译器去调用一个c的函数。“A native method is a Java method whose implementation is provided by non-java c

2020-10-07 15:04:39 56

原创 09-方法区

方法区前言这次所讲述的是运行时数据区的最后一个部分从线程共享与否的角度来看ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理栈、堆、方法区的交互关系下面就涉及了对象的访问定位Person:存放在元空间,也可以说方法区person:存放在Java栈的局部变量表中new Person():存放在Java堆中方法区的理解《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行

2020-10-07 14:59:40 339

原创 08-堆

堆堆的核心概念堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local A

2020-10-06 21:57:57 797

原创 543. 二叉树的直径

543. 二叉树的直径描述给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。思路首先我们知道一条路径的长度为该路径经过的节点数减

2020-10-05 16:57:21 1036 1

原创 05-虚拟机栈

虚拟机栈虚拟机栈概述由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。有不少Java开发人员一提到Java内存结构,就会非常粗粒度地将JVM中的内存区理解为仅有Java堆(heap)和Java栈(stack)?为什么?首先栈是运行时的单位,而堆是存储的单位栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放,

2020-10-01 00:17:19 108

原创 04-程序计数器(PC计数器)

程序计数器介绍JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。在JVM规范中,每个线程都有它

2020-09-30 15:24:59 2794 1

空空如也

空空如也

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

TA关注的人

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