自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis4-缓存过期和删除策略

目录为什么需要设置Redis的缓存过期?如何设置缓存过期maxmemory配置项不设置的场景设置的场景那么如何设置内存合理呢?根据业务进行判断expire命令expire的使用缓存过期的底层实现:删除策略定时删除(了解)※ 为什么是随机抽取部分检测,而不是全部?惰性删除主动删除(重点)maxmemory-policy 配置项LRULFUrandom 随机ttlnoenviction缓存淘汰策略的选择其他场景对过期key的

2022-05-19 20:26:00 1189 1

原创 Redis3-底层数据结构:对象机制

底层数据结构:Redis作为Key-Value存储系统,结构如下:RedisDB结构Redis中存在“数据库”的概念,该结构由redis.h中的redisDb定义。当redis 服务器初始化时,会预先分配 16 个数据库; 所有数据库保存到结构 redisServer 的一个成员 redisServer.db 数组中redisClient中存在一个名叫db的指针指向当前使用的数据库RedisDB结构体源码:typedef struct redisDb { int

2022-05-19 20:18:37 463

原创 Redis2-数据类型&常用Key命令&配置文件解析

什么是RedisRedis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的APIkey的类型:是字符串 value的类型Redis的数据类型常用的:string字符串类型、list列表类型、set集合类型、sortedset(zset)有序集合类型、hash类型。不常用的:bitmap位图类型、geo地理位置类型。 Redis5.0新增一种:...

2022-05-18 17:21:23 502

原创 Redis1-缓存原理和设计

什么场景下会使用到缓存?1.数据库缓存,减轻数据库服务器压力一般情况下数据存在数据库中,应用程序直接操作数据库。当访问量上万,10万、百万,需要引入缓存。将已经访问过的内容或数据存储起来,当再次访问时先找缓存,缓存命中返回数据。不命中再找数据库,并回填缓存。2.提高系统响应数据库的数据是存在文件里,也就是硬盘。与内存做交换(swap)将数据缓存在Redis中,也就是存在了内存中。内存天然支持高并发访问。可以瞬间处理大量请求。qps到达11万/S读请求 8万/S 写请求。3.做Se

2022-05-18 17:12:41 1228

原创 并发编程7-Lock锁系列 ReentrantLock

目录前言加锁目的Lock 锁的继承体系Lock 顶层接口分析可重入锁ReentrantLockReentrantLock公平锁和非公平锁是什么?有什么区别?ReentrantLock源码分析类的继承关系类的内部类Sync类NonfairSync类FairSyn类类的属性类的构造函数核心函数分析应用示例:参考推荐:前言加锁目的序列化访问临界资源,即同一时刻只能有一个线程访问临界资源(同步互斥访问)首先明确:Lock

2022-05-15 11:12:41 649

原创 并发编程6-同步器框架AQS

目录带着BAT大厂的面试问题去理解AbstractQueuedSynchronizer (抽象队列同步器框架)AQS具备的基本特性AQS 实现分析AQS 核心思想(重点)1. AQS内部维护属性2.AQS两种资源共享方式3.AQS定义两种队列AbstractQueuedSynchronizer源码分析类的继承关系AQS内部类1.类的内部类 -Node类2.类的内部类 - ConditionObject类AQS类的属性AQS类的构造方法AQS类.

2022-05-14 20:37:55 294

原创 并发编程4-CAS和魔术类Unsafe

¶什么是CASCAS的全称为Compare-And-Swap,直译就是对比交换。是一条CPU的原子指令,其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值,经过调查发现,其实现方式是基于硬件平台的汇编指令,就是说CAS是靠硬件实现的,JVM只是封装了汇编调用,那些AtomicInteger类便是使用了这些封装后的接口。CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值 。否则,处理器不

2022-05-13 21:15:08 214

原创 并发编程5-原子类Atomic

目录什么是原子操作如何保证原子操作处理器如何实现原子操作1.处理器自动保证基本内存操作的原子性 (基于缓存行保证原子性)2.使用总线锁保证原子性 (基于锁总线保证原子性) 3.使用缓存锁保证原子性但是有两种情况下处理器不会使用缓存锁定。Java当中如何实现原子操作补充:原子类都是基于CAS 实现的操作 ,那么什么是CAS ?那么什么是乐观锁?乐观锁: 自旋与阻塞原子类讲解基本类型原子类...

2022-05-13 17:25:16 198

原创 并发编程3-synchronized

带着疑问去学习,Synchronized可以作用在哪里? 分别通过对象锁和类锁进行举例。 Synchronized本质上是通过什么保证线程安全的? 分三个方面回答:加锁和释放锁的原理,可重入原理(当线程拥有Monitor权限时,重新进入将会将),保证可见性原理。 Synchronized在使用时有何注意事项? Synchronized修饰的方法在抛出异常时,会释放锁吗? 多个线程等待同一个snchronized锁的时候,JVM如何选择下一个获取锁的线程? Synchronized使得同时只有一

2022-05-12 17:20:47 313

原创 多线程及并发编程之线程池一

为什么使用线程池呢?Java中的线程池是运用场景最多的并发框架,但思考下为什么要使用线程池呢?(1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。(2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。(3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是如果想要合理的使用线程池必须呀要理解其原理,才能应用的得心应手 ;线程池的实现原理思考.

2022-03-24 21:22:07 1449 2

原创 @ConditionalOnxxx 的解析

@ConditionalOnBean 当指定的bean存在时,则实例化当前的bean@ConditionalOnMissingBean 当给定的在bean不存在时,则实例化当前Bean@ConditionalOnClass 当前classpath下存在指定类,则实例化当前Bean@ConditionalOnMissingClass 当前classpath下不存在指定类,则实例化当前Bean@ConditionalOnProperty 通过@ConditionalOnProperty控制配置类是否生.

2021-08-18 14:43:30 2133

原创 SpringBoot 缓存管理

缓存有关,先说下常用注解:缓存注解介绍@EnableCaching注解:开启缓存@EnableCaching注解是由Spring框架提供的,SpringBoot框架对该注解进行了继承,该注解需要配置在类的上方(一般配置在项目启动类上),用于开启基于注解的缓存支持。@Cacheable注解:读取缓存@Cacheable注解也是由Spring框架提供的,可以作用于类或方法上(通常作用于数据查询方法上),用于对方法的执行结果进行数据缓存存储。图注解的执行顺序是:先进行缓存查询,如果为空

2021-08-11 10:57:54 552

原创 RocketMQ 入门篇-基础介绍

简介阿里巴巴基于Java语言开发的分布式消息中间件。RocketMQ是Mateq3.0之后的开源版本。Metaq最早源于Kafka,早期借鉴了Kafka很多优秀的设计。RocketMQ的使用场景应用解耦 流量削峰 数据分发应用解耦:系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。流量削峰:应用系统如果遇到系统请求流量的瞬间猛增,有可...

2021-07-22 10:32:44 250 1

原创 Stream 流式学习

什么是流 Stream APIStream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator。原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作;高级版本的 Stream,用户只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大于 10 的字符串”、“获取每个字符串的首字母”等,Stream 会隐式地在内部进行遍历,做出相应的数据转换。流的构成:当我们使用一个流的时候,通常包括三个基本步骤:...

2021-07-08 10:53:19 437 1

原创 JVM 垃圾回收算法以及垃圾收集器以及内存分配规则

首先明确垃圾回收主要回收的是堆空间中已经死亡的对象。一。如何判断对象已死?判断对象是否已经成为垃圾有两种方案:引用计数法(已经被弃用):具体的实现:给对象中添加一个引用计数器,当有一个地方引用它时,引用计数器就+1 ,当引用失效时,计数器值就-1;任何时刻,计数器的值为0 的对象就是不可能再被使用的。引用值为0 时对象就会成为垃圾但是存在以下两个问题:每次给对象赋值时均要维护引用计数器,并且引用计数器本身也有一定的内存消耗。 循环依赖的问题。比如 A对象引用B对象 ,B对象又引用A

2021-03-08 12:00:00 207

原创 Eureka 的服务注册中心

第⼀部分:微服务架构(回顾) 架构的演变过程:随着互联⽹的发展,⽤户群体的扩⼤,⽹站流量的增⻓,单体架构已⽆法满⾜请求压⼒和业务,架构的变化势在必⾏。单体架构------>垂直架构------>SOA架构------>微服务架构单体架构:项⽬所有的功能模块都放在⼀个⼯程中编码、编译、打包并且部署在⼀个Tomcat容器中的架构模式就是单体应⽤架构。垂直架构:垂直划分的原则是基于业务特性来做,核⼼⽬标第⼀个是为了业务之间互不影响,第⼆个是在研发团队的壮⼤后为了提⾼效率,减少之间

2021-03-01 11:23:39 270 3

原创 JVM二-运行时数据区之虚拟机栈,本地方法栈

本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区。内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机

2021-02-24 10:57:31 110

原创 JVM一:类加载器子系统

类加载器子系统(ClassLoader):将class字节码文件加载到JVM内存中,是否会执行该字节码文件由 执行引擎决定。类加载器子系统(Class loader subSystem)只负责将class文件加载进内存中,并且类在仅需要时加载,并且只加载一次。至于该Class文件是否执行由 执行引擎 Execution Engine决定的。官方:类加载器子系统负责从文件系统或者网络中加载Class文件, 文件在文件开头有特定class的文件标识。 该特定标识指什么?CA FE BA B.

2021-02-24 10:49:13 115

原创 雇员sql 查询联系

sql语句练习:-- 部门表CREATE TABLE dept ( id INT PRIMARY KEY PRIMARY KEY, -- 部门id dname VARCHAR(50), -- 部门名称 loc VARCHAR(50) -- 部门所在地);INSERT INTO dept(id,dname,loc) VALUES(10,'教研部','北京'),(20,'学工部','上海'),(30,'销售部','广州'),(40,'财务部','深圳');-- 职务表,职务名称...

2021-02-23 19:05:33 665

原创 Tomcat配置文件server.xml详解

记录学习tomcat服务器Tomcat服务器详解,如有不合理之处,恳请指正。谢谢哦<?xml version="1.0" encoding="UTF-8"?> <!-- Server 根元素,创建⼀个Server实例,⼦标签有 Listener、GlobalNamingResources、Service Listener:代表监听器 GlobalNamingResources:定义服务器的全局JNDI资源 (全局的命名服务) Service..

2020-10-29 11:22:56 447

原创 IDEA 2020 返回上一步快捷键

在开发中进入一个方法后想要到原来那行ctrl+alt+左 回到上一步ctrl+alt+右 回到下一步

2020-09-15 15:13:00 8035

原创 idea2020 运行项目Run Dashboard

什么是Run Dashboard当springcloud的服务有多个时,管理多个服务的启动使用run会不好管理,这样我们就可以使用Run Dashboard。新版的2020的IDEA当你同时启动两个微服务时,发现依然不会弹出启动Run Dashboard窗口的提示,其实是因为IDEA2020将Run Dashboard添加到控制台Service中,我们在Service中启动各个模块。但是IDEA不知道为啥启动了项目之后,我的service中依然没有Run Dashboard。如何启动Run D

2020-09-14 09:59:45 934

原创 redis-配置文件解析

# Redis configuration file example.## Note that in order to read the configuration file, Redis must be# started with the file path as first argument:## ./redis-server /path/to/redis.conf# Note on units: when memory size is needed, it is possible to

2020-08-18 23:11:55 614

原创 Centos7 安装Docker 一发定魂

安装Docker 步骤(系统为Centos7 当前操作用户为root ;若不是root用户 需要在命令前添加 sudo)首先更新下yum (建议更新) yum update若是遇到 “/var/run/yum.pid 已被锁定,PID 为 XXXXX 的另一个程序正在运行。”解决方法: 直接在终端运行 rm -f/var/run/yum.pid 将该文件删除,然后再次运行yum update 命令1.卸载之前安装的Dockeryum remove docker \docker-cli

2020-08-18 21:45:16 78

原创 RestTemplate 类学习

org.springframework.web.client类RestTemplatejava.lang.Object org.springframework.http.client.support.HttpAccessor org.springframework.http.client.support.InterceptingHttpAccessor org.springframework.web.client.RestTemplate 所有已实现的接口: 休息操作 ..

2020-07-25 10:26:40 189

原创 消息中间件学习笔记一(JMS介绍)

JMS:即Java消息服务(Java Message Service)应用程序接口。是一个Java平台中面向消息中间件(MOM) 的API。作用:用于两个应用程序之间,或分布式系统中发送消息,进行异步通信。JMS 便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。JMS是一种与厂商无关的API,用来访问/收发系统消息,它类似与JDBC。这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样

2020-07-12 18:17:50 300

转载 rpc框架解释

转载自 乐乐漫漫Java路rpc框架解释谁能用通俗的语言解释一下什么是 RPC 框架? - 远程过程调用协议RPC(Remote Procedure Call Protocol)首先了解什么叫RPC,为什么要RPC,RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。比如说,一个方法可能是这样定义的:Employee getEmployeeByNam

2020-05-24 09:00:36 92

原创 zookeeper的配置文件 学习zoo.cfg

# The number of milliseconds of each tick每次心跳时间间隔 (单位毫秒)tickTime=2000# The number of ticks that the initial#初始化的心跳次数# synchronization phase can take#同步阶段 (lead 和fllower通信的时长 10X2=20s 如果超过这个时长,认为它们连接不上了)initLimit=10# The number of ticks that can ...

2020-05-17 18:09:14 222

原创 java 操作时间遇到的坑

Java开发中时间格式化遇到坑。一、Java日期格式化YYYY的坑反例:Calendar calendar = Calendar.getInstance(); calendar.set(2019, Calendar.DECEMBER, 31); Date testDate = calendar.getTime(); SimpleDateFormat dtf = new...

2020-04-16 10:34:23 304

原创 spring: 使用profiles选择数据源(结合嵌入式数据源EmbeddedDatabaseBuilder)

一般需要在不同的环境(日常环境、性能测试环境、预发环境和生产环境等等)中配置不同的数据源,例如,在开发时非常适合使用嵌入式数据源、在QA环境中比较适合使用DBCP的BasicDataSource、在生产环境中则适合使用<jee:jndi-lookup>元素,即使用JNDI查询数据源。在Spring实战3:装配bean的进阶知识一文中我们探讨过Spring的bean-profiles...

2019-10-12 17:53:30 970

原创 使用 profiles配置多种开发环境

<!-- 如何使用 profiles配置多种开发环境 我们知道,测试或开发环境与正式或生产环境中的某些配置是不同的,如:数据库配置、加密算法等。所以传统的做法就是每次发布或测试时,都手动修改相关配置信息,十分繁琐和低效率--> <!--1. web.xml文件中;使用 默认上下文中,添加spring.profiles.default的配置,如下:-->...

2019-09-16 15:43:44 577 1

原创 java中事务问题

事务一:什么是事务事务是应用程序中一系列严密的操作,一个事务中的一系列的操作要么全部成功,要么一个都不做。二:事务四大特性事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。原子性事务是不可分割,事务中包含的各操作要么都做,要么都不做。一致...

2019-05-31 22:01:32 581

原创 springmvc中拦截资源的设置方式以及放行资源的方式

1.我们都知道在基于Spring的Application中,需要在web.xml中增加下面类似的配置信息:<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet&l...

2019-03-27 13:48:57 973

原创 ServletContextListener接口的作用

ServletContextListener是对ServeltContext的一个监听. servelt容器启动,serveltContextListener就会调用contextInitialized方法。在方法里面调用event.getServletContext()可以获取ServletContext,ServeltContext是一个上下文对象,他的数据供所有的应用程...

2019-03-27 11:59:57 1074

原创 初学Maven踩的坑之--JDK环境

错误报告: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) on project dang-manager-pojo: Compilation failure[ERROR] No compiler is provided in this env...

2019-01-29 21:13:36 123

原创 SringMVC的执行流程

框架结构图1.用户发送请求到前端控制器DispatcherServlet(org.springframework.web.servlet.DispatcherServlet);2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给Dispatc...

2019-01-19 19:42:33 480

原创 spring框架bean的生命范围(scope)

&lt;bean ...&gt;&lt;/bean&gt;中有一个属性,叫scope,就是设定生命范围的。Scope的作用:可以用scope属性来限定bean的生命范围(即是在什么范围内拿到的bean是相同的)scope属性经常使用的值有一下几种:singleton:在整个应用的里面,拿取bean,都是同一个bean的引用(类似于单例模式);singleton也是默人的scope;...

2019-01-08 11:25:01 499

原创 spring中两种容器的总结和对比

SpringIOC容器是一个IOC Service Provider。提供了两种容器类型:BeanFactory和ApplicationContext。Spring的IOC容器是一个提供IOC支持的轻量级容器。除了基本的ioc支持,它作为轻量级容器还提供了IOC之外的支持。BeanFactory:BeanFactory是spring中提供的最简单最基本的容器;这个容器只提供了IOC/DI的...

2019-01-08 09:33:23 4106

原创 Git常用命令

Git常用命令查看、添加、提交、删除、找回,重置修改文件git help &lt;command&gt;  # 显示command的helpgit show   # 显示某次提交的内容 git show $idgit co -- &lt;file&gt;  # 抛弃工作区修改git co . #   抛弃工作区修改 git init   初始化代码仓库 git ad...

2019-01-07 20:34:59 113

原创 Spring中AOP的执行流程

Spring的AOP:AOP就是一种更高级的动态代理的使用; Aspect Oritention Programming(面向切面编程)切入点:要加入业务逻辑的点(在哪些类的哪些方法上面)通知:通知包含两个方面,1,代表方法的执行时间,2,在这个时间上面要做什么事情;切面:一个切入点+一个通知=一个切面(在什么地方,在什么时候,做什么事情);织入:把一个切面应用到真实对象上面的...

2019-01-07 20:33:40 6921 3

空空如也

空空如也

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

TA关注的人

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