自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Nacos服务注册与发现

本文介绍 Nacos 相关知识简介Nacos 可以用来实现分布式环境下的配置管理和服务注册与发现。通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。安装Nacos下载地址:nacos下载并解压之后,还需要作一些配置conf 目录下的 applicat.

2021-10-14 10:33:50 112

原创 Eureka服务注册与发现

本文介绍Eureka相关知识简介Eureka是由netflix开发的一款服务治理的框架,Sping Cloud对其进行了集成。Eureka既包括客户端也包括服务端。Eureka客户端是服务提供者,它将自己注册到Eureka服务端,并周期性地发送心跳包来更新它的服务租约,同时也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期性地刷新服务状态;Eureka服务端是一个服务注册中心,提供服务的注册和发现,即当前有哪些服务注册进来可供使用。服务注册中心1.在pom.xml文件中引入 eure.

2021-10-12 09:06:25 163

原创 Spring Boot中使用过滤器和拦截器

过滤器(Filter)和拦截器(Interceptor)是Web项目中常用的两个功能,本文将简单介绍在Spring Boot中使用过滤器和拦截器。Filter过滤器可以用于过滤一些非法字符、权限检查等操作在Spring Boot中可以通过注解@WebFilter或者使用配置类来实现过滤器1.通过注解@WebFilter("/*")public class MyFilter implements Filter { @Override public void init(Filte.

2021-09-10 15:19:54 423

原创 Spring Boot中操作JSON

本文介绍常用的JSON相关操作,Spring Boot内置Jackson包可以进行JSON相关操作序列化Fastjson User user1 = new User(); String s1 = JSON.toJSONString(user1); System.out.println(s1);Jackson ObjectMapper objectMapper = new ObjectMapper(); String .

2021-09-07 17:23:04 524

原创 Spring Boot自动配置相关知识

本文介绍Spring Boot自动配置相关知识Spring 3.0开始,Spring提供了Java Config的方式,进行Spring bean的创建@Configurationpublic class DemoConfiguration { @Bean public void object() { return new Obejct(); }}通过在类上添加 @Configuration 注解,声明这是一个 Spring 配置类。通过在方法上.

2021-08-31 18:04:05 90

原创 synchronized和volatile相关知识

本文介绍Synchronize和Volatile关键字相关知识在多线程环境下,线程是交替执行的,多线程竞争共享资源容易产生线程不安全的问题,甚至产生死锁的问题。使用多线程,一定要保证程序是线程安全的。通常会采用以下一些方法来保证线程安全:多线程之间没有共享变量,即考虑使用线程私有变量加锁CASSynchronizedSynchronized是Java的关键字,它可以将代码块锁起来。 public void synchronized lock(){ //do something .

2021-07-26 14:31:42 88

原创 Cookie、Session和Token相关知识

本文介绍Cookie、Session和Token相关知识什么是Cookie由于Http是无状态的协议,这意味着一旦数据提交后,客户端与服务器的连接就会关闭,再次交互的时候需要重新建立新的连接。服务器无法确认用户信息,于是W3C就提出给每个用户发一个通行证,无论谁访问都携带通行证,这样服务器就能从通行证上确认用户信息,这个通行证就是cookie。cookie存储在客户端:cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上.

2021-07-16 15:50:35 86

原创 Java内存模型

本文介绍Java内存模型相关知识Java内存模型和JVM内存结构是两个不同的概念。Java内存模型:Java 的并发采用的是共享内存模型,Java 线程之间的通信总是隐式进行,整个通信过程对程序员完全透明。如果编写多线程程序的 Java 程序员不理解隐式进行的线程之间通信的工作机制,很可能会遇到各种奇怪的内存可见性问题。为了解决可能由共享内存模型引发的内存可见性问题,抽象出了Java内存模型。Java 线程之间的通信由 Java 内存模型(本文简称为 JMM)控制,JMM 决定一个线程对共享变.

2021-05-14 17:13:20 73

原创 Redis相关知识----缓存问题

本文介绍Redis缓存相关问题,包括缓存穿透、缓存击穿、缓存雪崩等相关知识缓存穿透:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。当流量过大时,数据库可能挂掉。解决方案:用户校验:接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;对空值缓存:从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导.

2021-05-11 23:37:21 169

原创 Json常用类库的方法

fastjson:序列化public abstract class JSON { // 将Java对象序列化为JSON字符串,支持各种各种Java基本类型和JavaBean public static String toJSONString(Object object, SerializerFeature... features); // 将Java对象序列化为JSON字符串,返回JSON字符串的utf-8 bytes public static byte[] toJS

2021-05-10 17:54:53 107

原创 Redis相关知识----哨兵机制

本文介绍Redis哨兵相关知识哨兵机制(Redis Sentinel):Redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入。哨兵的核心功能是主节点的自动故障转移。其他功能:监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。自动故障转移(Automatic failover):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。配置提供者(Configura.

2021-04-28 23:07:49 264

原创 Redis相关知识----主从复制

本文介绍Redis事务相关知识。Redis事务:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。Redis事务相关命令:MULTI 开启事务,redis会将后续的命令逐个放入队列中EXEC:执行事务中的所有操作命令DISCARD:取消事务,放弃执行事务块中的所有命令WATCH:监视一个或多个key,如果事务在执行前,这个key(或多个key)被其他命令修改,则事务被中断,不会执行事务中的任何命令UNWATCH:取消WATCH对所有key的监视...

2021-04-27 23:08:17 141

原创 Redis相关知识----对象机制

本文介绍Redis对象机制相关知识,只是对底层做一些了解,并不深入底层的数据结构。Redis的5种基础数据类型,在底层是采用对象机制实现的。Redis的每种对象其实都由对象结构(redisObject) 与 对应编码的数据结构组合而成,而每种对象类型对应若干编码方式,不同的编码方式所对应的底层数据结构是不同的。redisObject:redisObject 是 Redis 类型系统的核心, 数据库中的每个键、值, 以及 Redis 本身处理的参数, 都表示为这种数据类型。其中type、en.

2021-04-21 23:16:49 208

原创 Redis相关知识----5种基础类型和3种特殊类型

本文介绍Redis的数据类型相关知识Redis数据结构简介对于Redis,所有的Key都是字符串。我们在谈Redis基础数据结构时,讨论的是存储值的数据类型,主要包括常见的5种数据类型,分别是:String、List、Set、Zset、Hash。String字符串String是redis中最基本的数据类型,一个key对应一个value。String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。命令:命令简述.

2021-04-19 23:35:50 98

原创 阻塞队列BlockingQueue

本文介绍BlockingQueue阻塞队列相关知识简介BlockingQueue是JUC包下的一个接口,通常用于一个线程生产对象,而另外一个线程消费这些对象的场景。方法:BlockingQueue继承Queue接口,因此,对数据元素的基本操作有:插入元素add(E e) :往队列插入数据,当队列满时,插入元素时会抛出IllegalStateException异常;offer(E e):当往队列插入数据时,插入成功返回true,否则则返回false。删除元素remove(.

2021-04-18 01:13:25 146

原创 Mysql相关知识(五)

本文介绍Mysql ACID特性的实现原理ACID:原子性一致性隔离性持久性原子性:一个事务是一个不可切割的单位,要么全部执行成功,要么全部失败。是采用undo log日志实现的。undo log日志用来记录Mysql逻辑语句的执行。当事务对数据库进行修改时,InnoDB会生成对应的undo log;如果事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。当发生回滚时,InnoDB会根据undo log的内容做与之前.

2021-04-17 00:04:12 99

原创 Mysql相关知识(四)

本文介绍Mysql中explain相关知识explain:当mysql的查询语句执行较慢时,可以通过使用explain命令解释mysql语句,通过结果分析mysql语句执行慢的原因,来优化mysql语句。expain出来的信息有10列:idselect_typetabletypepossible_keyskeykey_lenrefrowsExtraid:SQL执行的顺序的标识,SQL根据id从大到小的执行id列的编号是 select 的序列号,有几个 select 就有.

2021-04-13 22:40:34 100

原创 Mysql相关知识(三)索引

本文介绍Mysql索引相关知识索引是什么索引是一种帮助Mysql高效查询数据的数据结构索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中。(可能是单独的索引文件,也可能是和数据一起存储在数据文件中)通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引。索引的类型主键索引:索引列中的值必须是唯一的,且不允许有空值。唯一索引:索引列中的值必须是唯一的,但允许为空值。全文.

2021-04-10 17:54:48 88

原创 Mysql相关知识(二)

本文介绍Mysql操作和语句相关知识,包括增删改查、建表、函数、过程等相关知识。1.操作连接Mysql:mysql -h 主机地址 -u 用户名 -p 密码本地连接:mysql -u root -p修改密码:mysqladmin -u 用户名 -p 旧密码 password 新密码或者alter user `username`@`host` identified by 'password'增加权限:grant all privileges on databasename..

2021-04-09 15:24:46 65

原创 Mysql相关知识(一)

本文介绍Mysql相关知识,主要包括Mysql的基础架构、事务、索引和日志等知识。基础架构基础架构示意图:连接器:管理连接,权限验证查询缓存:命中则直接返回结果分析器:词法分析,语法分析优化器:执行计划生成,索引选择执行器:操作引擎,返回结果存储引擎:存储数据,提供读写接口Mysql可以分为Server层和存储引擎层,不同的存储引擎公用一个Server层,常见的存储引擎有InnoDB、MyISAM、Memory等,现在Mysql主要使用InnoDB做存储引擎。大多数情况下不要使用.

2021-04-07 19:07:35 74

原创 Java线程池相关知识

本文介绍Java线程池相关知识前言线程池:线程池是一种基于池化思想管理线程的工具,经常出现再多线程服务器中。线程池解决的问题是什么:线程池解决的核心问题就是资源管理问题。在并发环境下,系统不能确定任意时刻,有多少任务需要执行,有多少资源需要投入。会存在下列问题:频繁申请/销毁资源和调度资源,将带来额外的消耗,可能会非常巨大。对资源无限申请缺乏抑制手段,可能会引发系统资源耗尽的风险。系统无法合理管理内部的资源分布,会降低系统的稳定性。为解决资源分配这个问题,线程池采用了“池化”(Poo.

2021-04-01 19:45:54 85

原创 二叉树相关知识

本文介绍二叉树相关知识定义:树的任意节点至多包含两棵子树。数据存储:链表数组链表方式定义public class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode(int val) { this.val = val; } public TreeNode(int val, TreeNode left, TreeNode right) .

2021-03-31 23:13:35 50

原创 Spring bean的生命周期

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-03-30 19:41:08 48

原创 Java垃圾回收

本文介绍Java垃圾回收相关知识判断一个对象是否可以被回收回收对象首先需要判断这个对象是否可以被回收,Java虚拟机采用可达性分析算法判断。引用计数算法给对象添加一个引用计数器,当对象增加一个引用时计数器加一,减少一个引用时计数器减一。引用计数为 0 的对象可被回收。两个对象出现循环引用的情况下,此时引用计数器永远不为 0,导致无法对它们进行回收。正因为循环引用的存在,因此 Java 虚拟机不使用引用计数算法。可达性分析算法通过 GC Roots 作为起始点进行搜索,能够到达到的对象都是.

2021-03-25 15:51:45 63

原创 FIFO、LRU、LFU三种缓存淘汰算法

本文介绍三种常用缓存算法简介缓存,就是将程序或系统经常要调用的对象存在内存中,再次调用时可以快速从内存中获取对象,不必再去创建新的重复的实例。

2021-03-25 10:55:24 434

原创 深入了解JVM内存结构

本文主要介绍JVM内存结构相关知识,需要注意JVM内存结构和Java内存模型是两个概念。运行时数据区Java虚拟机在执行程序时会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则依赖用户线程的启动和结束而建立和销毁。下图是 JVM 整体架构,中间部分就是 Java 虚拟机定义的各种运行时数据区域。在这里插入图片描述下面介绍下这些内存结构程序计数器程序计数器(program counter reg.

2021-03-24 17:06:00 81

原创 Spring事务相关知识

本文介绍Spring事务相关的知识,包括事务隔离级别和事务传播特性。事务事务是逻辑上的一组操作,要么都执行,要么都不执行。我自己的理解是,数据库操作的最小单位,要么成功,要么失败。特性:ACID原子性(Atomicity):事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么全部失败回滚。一致性(Consistency):数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。隔离性(Isolation):一个事务所做的修改在最终提.

2021-03-23 18:11:58 67

原创 Java类加载机制

本文简单介绍Java类加载相关知识Java类的生命周期一个类从被加载到虚拟机内存到卸载出虚拟机内存,它的生命周期会经历:加载、验证、准备、解析、初始化、使用、卸载这七个阶段。其中验证、准备、解析三个部分统称为连接。其中加载、验证、准备、初始化、卸载这五个阶段的顺序是确定的,类型的加载过程必须按这种顺序,而解析阶段却不一定,它在某些情况下可以在初始化之后再开始,这是为了支持Java语言运行时绑定特性(也称动态绑定)。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是.

2021-03-22 14:24:24 50

原创 深入了解LinkedHashMap

本文介绍LinkedHashMap的相关知识简介之前了解过HashMap,HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。package collection;import java.util.HashMap;import java.util.LinkedHashMap;import java.util.Map.Entry;/** * @author zousy * @version v1.0 * @Descripti.

2021-03-16 13:19:51 109

原创 线程通信工具类

本文介绍一些Java线程常用通信工具类,主要介绍怎么使用。简介常见的线程间通信方法有:wait()和notify() +加锁机制synchronized和lock还有线程的join()方法Condition接口的awiat() 和 signAll()方法 + 加锁机制synchronized和lock生产者消费者模式这里介绍一些JDK中java.util.concurrent包下的一些通信工具类。类作用Semaphore限制线程的数量Exchanger两.

2021-03-12 15:46:34 181

原创 深入了解ReentrantReadWriteLock

本文分析JDK1.8中的ReetrantReadWriteLock类简介由于ReentrantLock是独占锁,某时只有一个线程可以获取该锁,而实际中会有写少读多的场景,所以ReetrantReadWriteLock应运而生,采用读写分离的策略,允许多个线程同时获取该锁。ReetrantReadWriteLock即可重入读写锁,内部维护一个ReadLock和一个WriteLock,他们依赖Sync来实现,而Sync继承AbstractQueuedSynchronizer,并且也提供了公平和非公平的.

2021-03-10 18:35:58 317

原创 Java并发编程的基础知识

本篇介绍Java并发的基础知识,主要包括线程安全,共享变量的内存可见性,synchronized和volatile关键字,指令重排序,伪共享等相关知识。并发与并行并发是指同一时间段内多个任务执行。并行是指同一时刻,多个任务同时执行。并发是单位时间内,一个CPU切换时间片对多个任务进行处理并行是同一时刻,多个CPU对多个任务同时进行处理线程安全共享资源:该资源被多个线程所持有。线程安全问题是指当多线程同时读写一个共享资源并且没有任何同步措施时,导致出现脏数据或者其他不可预见的结果的问题.

2021-03-08 11:42:07 77

原创 深入了解ThreadLocal

本文分析ThreadLocal的原理和使用1.ThreadLocal简介多线程访问共享变量时容易出现并发问题,为了保证线程安全,一般会给共享变量进行适当的加锁同步。如果不想加锁呢?ThreadLocal可以做到线程隔离,多个线程访问共享变量时,访问的是自己线程的变量。ThreadLocal提供了线程本地变量,如果创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地副本,当多线程操作这个变量时,实际操作的是自己本地内存的变量,从而避免线程安全的问题。2.Thr.

2021-03-04 14:13:42 93 1

原创 深入了解ConcurrentHashMap

本文将深入源码分析ConcurrentHashMap的相关内容1.ConcurrentHashMap简介由于HashMap是非线程安全的,所以如果想在多线程下安全的操作Map,有下面几个解决方案:使用HashTable使用Collections.synchronizedMap使用ConcurrentHashMapHashTableHashTable类是一个线程安全的类,它的底层给几乎所有的多线程操作方法都加上了synchronized关键字,相当于锁住整个HashTable,多线程访问.

2021-03-03 14:25:02 177

原创 HashMap源码分析和常见面试相关小结

本篇分析HashMap的 hash()函数 和 底层数据结构 以及 常用方法 和 常见面试相关题目1. HashMap简介HashMap 是一个K,V键值对的常用集合类,它实现了Map接口。jdk1.8 之前 HashMap 采用 数组 + 链表 的方式实现,链表存储key值冲突的数据。jdk1.8 采用 数组 + 链表 / 红黑树 的方式实现,在满足下面两个条件之后,会执行链表转红黑树操作,以此来加快搜索速度。链表长度大于阈值(默认为 8)HashMap 数组长度超过 642. H.

2021-03-02 13:58:26 80

原创 Java集合小结

这篇文章对Java集合相关类进行介绍,包括Collection、List、Set、Map、Queue这些常见得集合相关接口和类。1.集合概述常用的集合有List、Set、Map、Queue等,他们之间的关系如下图。List、Queue、Set继承Collection接口。Iterable接口是迭代器,这里不进行过多介绍。Map接口是一个单独的接口,这里不进行介绍。List、Set、Queue、Map的区别List存储可以重复、有序的元素Set存储不可以重复、无序的元素Queue存储有序的.

2021-02-23 17:39:26 112

原创 Aviator使用

“初步了解和使用Aviator”1.Aviator简介Aviator 是一个高性能,轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值。支持数字、字符串、正则表达式、布尔值、正则表达式等基本类型,完整支持所有 Java 运算符及优先级等。函数是一等公民,支持闭包和函数式编程。内置 bigint/decmal 类型用于大整数和高精度运算,支持运算符重载得以让这些类型使用普通的算术运算符 ±*/ 参与运算。完整的脚本语法支持,包括多行数据、条件语句、循环语句、词法作用域和异.

2021-01-18 16:59:00 3499

原创 Spring AOP的初步使用

“初步了解和使用SPRING AOP”一、JDK 动态代理的使用1.Food 目标接口package proxy;/** * @author zsy * @version v1.0 * @Description * @date 2020-09-23 15:50 */public interface Food { /** * @Author Zousy * @Description 测试静态代理 * @Date 15:52 2020/9/23.

2021-01-14 14:59:11 123 2

原创 spring aop初步了解

- Spring AOP“初步了解和使用SPRING AOP”一、AOP1.1 什么是AOPAOP(Aspect Orient Programming),面向切面编程。AOP是一种编程思想,是对面向对象编程(OOP)的一种补充。1.2 AOP实现分类AOP的本质是由AOP框架修改业务组件的字节码,是代理模式的一种应用。按照修改的字节码的时机可以分为两类:静态AOP: AOP框架在编译阶段进行修改,生成了静态的AOP代理类(生成的.class文件已经被改动),比如AspecJ框架。.

2021-01-09 15:15:27 113 1

空空如也

空空如也

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

TA关注的人

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