自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java锁机制

锁的应用场景在数据库中多个事务操作同一组数据、在分布式中多个服务也就是多个进程去操作同一资源、在多线程中多个线程操作同一资源的时候,可能会导致数据不一致的问题,因为我们引入了锁机制,通过一种抽象的锁机制来解决这个问题,总结为三个字高并发!JVM内存模型在说锁之前我们有必要去了解一下JVM运行时的内存模型:JVM运行时的内存模型主要包含了:堆、方法区(常量池)、java虚拟机栈、程序计数器、本地方法栈。我们可以看到红色区域是各个线程私有的。对于这个区域中的数据,不会出现线程竞争的关系。而蓝色区域中

2021-02-07 12:43:32 438 1

原创 jdk1.8中的stream流

这里写目录标题1.什么是stream流2.流的特性3.流的创建方式4.流处理的操作类型5.流处理的执行顺序6. 流收集数据7. SQL 统计函数7.1求和7.2 求平均值7.3归约7.4分组8.数值流9.总结1.什么是stream流Stream是jdk1.8给我们提供的新特性,主要就是允许我们采用声明式的方式处理数据集合,我们要知道在项目中我们集合就是我们最常用的数据存储结构,有时后我们需要对集合内的元素做一些过滤或者其他的操作我们一般是采用for循环的方式。在jdk1.8中我们就可以通过stream来

2021-07-13 22:48:19 2044

转载 使用minio修改头像

使用minio修改头像自定义用户和秘钥安装1、这种安装方式 MinIO 自定义 Access 和 Secret 密钥要覆盖 MinIO 的自动生成的密钥,您可以将 Access 和 Secret 密钥设为环境变量。MinIO 允许常规字符串作为 Access 和 Secret 密钥docker run -p 9000:9000 --name minio \--privileged=true\-d --restart=always \-e "MINIO_ACCESS_KEY=xiaohai" \

2021-03-16 22:53:21 792 1

原创 rabbitmq发送邮件

rabbitmq发送邮件接收端模块:依赖: <!-- rabbitmq 依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <!--mail依赖-->

2021-03-16 22:51:25 1483 2

原创 JUC并发编程学习笔记

JUC并发编程1、什么是JUC2、线程和进程3、Lock锁(重点)4、生产者和消费者问题5、8锁现象6、集合类不安全7.Callable8、常用的JUC辅助类(必会!)8.1 CountDownLatch8.2 CyclickBarrier8.3 Semaphore9、读写锁10、阻塞队列四组APISynchronousQueue同步队列11、线程池(重点)面试题:线程的创建和中断创建方式中断方式12、四大函数式接口13、Stream流式计算14、ForkJoin15、异步回调16.JMM17.Volat.

2021-02-27 16:48:23 481

原创 spring中的循环依赖(三级缓存)

spring中的循环依赖1.什么是循环依赖什么是循环依赖?很简单,就是A对象依赖了B对象,B对象依赖了A对象。比如:// A依赖了Bclass A{ public B b;}// B依赖了Aclass B{ public A a;}那么循环依赖是个问题吗?如果不考虑Spring,循环依赖并不是问题,因为对象之间相互依赖是很正常的事情。比如A a = new A();B b = new B();a.b = b;b.a = a;这样,A,B就依赖上了。

2021-02-23 23:59:49 285

原创 springboot新建项目网络超时

无法新建SpringBoot项目并出现:Initialization failed for ‘https://start.spring.io’ Please check URL,network and proxy settings.Error message:Cannot download ‘https://start.spring.io’:connect time out网络超时,ping也没有看到解决方案在这里插入图片描述...

2021-02-07 00:36:40 283

原创 HashMap源码详解

1.探索效率有保障hash的查找效率O(1)链表的查找效率O(n)红黑树的查找效率O(log(n))左移与右移位运算1<<<8 1*2^80000 0000 0000 0000 0000 0000 0000 00010000 0000 0000 0000 0000 0001 0000 00001>>>80000 0000 0000 0000 0000 1010 0000 00010000 0000 0000 0000 0000 000

2021-01-30 15:08:06 82

原创 mysql中的锁

mysql中的锁谈到数据库的锁,首先想到的的肯定是存储引擎支持哪种锁。MySQL的存储引擎是从MyISAM到InnoDB,锁从表锁到行锁。后者的出现从某种程度上是弥补前者的不足。比如:MyISAM不支持事务,InnoDB支持事务。表锁虽然开销小,锁表快,但高并发下性能低。行锁虽然开销大,锁表慢,但高并发下相比之下性能更高。事务和行锁都是在确保数据准确的基础上提高并发的处理能力。下面我们对数据库的锁进行分类;按照锁颗粒对锁进行划分 ?锁用来对数据进行锁定,我们可以从锁定对象的粒度大小来对锁进行划分,分别

2021-01-13 19:46:02 66

原创 MySQL 学习笔记(狂神说)

MySQL数据库感谢狂神说的讲解,视频地址:https://www.bilibili.com/video/BV1NJ411J79W?t=1269&p=42存储引擎存储引擎是磁盘的一种组织格式,以利于文件系统之上。MyISAM:在MySQL 5.1 及之前的版本,MyISAM是默认引擎。MyISAM提供的大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM并不支持事务以及行级锁,而且一个毫无疑问的缺陷是崩溃后无法安全恢复。正是由于MyISAM引擎的缘故,即使MySQL支持事

2021-01-08 23:38:58 821

原创 计算机网络OSI和http

OSI七层模型七层模型,亦称OSI(Open System Interconnection)。参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。应用层网络服务与最终用户的一个接口。协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP表示层数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)格式有,JPEG、ASCll、EBCDIC、加密格式等 [2]会话层建立

2021-01-07 17:52:37 562

原创 通俗易懂的解答TCP/IP三次握手四次挥手

TCP/IP协议tcp/ip不是一个协议,是而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等。电脑有了这些,就可以和其他的计算机终端之间通信。TCP/IP我们通常所说的icp/ip协议就是说tcp和ip在一起写协同工作。tcp负责应用软件(如何说浏览器)和网络软件之间的通信,IP负责计算机之间的通信,tcp负责将数据分割并装入IP包,然后早他妈到达的时候重新组合他们,IP负责将包发送给接受者。传输层中的 TCP 和 UDP

2021-01-07 16:38:42 223

原创 关于那些常见的排序算法你真的可以秒么

排序算法排序算法说明排序定义所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。术语解释稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内

2021-01-07 01:21:09 131

原创 注解和反射

感谢狂神说,视频地址:https://www.bilibili.com/video/BV1p4411P7V3?p=13注解和注释一样,注解不是程序本身,而是对程序作出解释,而注解与注释不同的点在于,注解可以被其他程序比如编译器读取@Override//重写注解@Deprecated//不推荐使用注解,可以使用但是有风险或者有更好的方式(被淘汰)@SuppressWarnings//“镇压”警告注解(不推介使用)1.@SuppressWarnings(“all”)2.@SuppressWa

2021-01-05 21:25:35 668

原创 你不知道的斐波那契数列

你不知道的斐波那契斐波那契的定义斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,

2021-01-05 16:57:28 229

原创 JVM学习笔记

JVM学习笔记(狂神说)垃圾回收99%都在堆里面,正常不可能在java栈、本地方法栈、程序计数器中。JVM体系结构jvm的位置在操作系统之上,包含在jre里。栈、本地方法栈、程序计数器不会发生gc。jvm调优主要在堆,方法区有一小部分。类加载器类是一个模板是抽象化的,而对象是具体的实例。作用:加载.class文件。(保障安全)新建的对象放入堆里面,引用(地址)放到栈,其中引用指向堆里面对应的对象。虚拟机自带的加载器启动类(根)加载器 Bootstrap Class

2021-01-04 01:44:34 152

原创 MyBatisPlus学习笔记(狂神说)

感谢狂神,视频讲解:https://www.bilibili.com/video/BV17E411N7KN?p=13MybatisPlus概述简介MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。官网:https://baomidou.com#简介MyBatis-Plus (opens new window)(简称 MP)是

2021-01-01 19:19:27 2135 2

原创 redis十五、缓存穿透与雪崩

十五、缓存穿透与雪崩服务的高可用问题在这里我们不会详细的区分析解决方案的底层! Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一 些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。如果对数据 的一致性要求很高,那么就不能使用缓存。另外的一些典型问题就是,缓存穿透、缓存雪崩和缓存击穿。目前,业界也都有比较流行的解决方案。缓存穿透(查不到)概念在默认情况下,用户请求数据时,会先在缓存(Redis)中查找,若没找到即

2020-12-31 23:32:33 183 1

原创 redis学习十四、Redis主从复制

十四、Redis主从复制概念主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点 (master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。 Master以写为主,Slave 以读为主。默认情况下,每台Redis服务器都是主节点; 且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。主从复制的作用主要包括:1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方

2020-12-31 23:30:42 185

原创 redis学习十三、Redis发布与订阅

十三、Redis发布与订阅Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。微信、 微博、关注系统!Redis 客户端可以订阅任意数量的频道。订阅/发布消息图:第一个:消息发送者,第二个:频道第三个:消息订阅者!。下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个

2020-12-31 23:27:28 181

原创 redis学习十二、RDB和AOP选择

十二、RDB和AOP选择RDB 和 AOF 对比项目RDBAOF启动优先级低高体积小大恢复速度快慢数据安全性丢数据根据策略决定如何选择使用哪种持久化方式?一般来说, 如果想达到足以媲美 PostgreSQL 的数据安全性, 你应该同时使用两种持久化功能。如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化。有很多用户都只使用 AOF 持久化, 但并不推荐这种方式: 因为定时生成 RDB 快照(

2020-12-31 23:25:44 352

原创 redis学习十一、持久化-AOF

十一、持久化-AOFAppend Only File什么是AOF以日志的形式来记录每个写的操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。Aof保存的是 appendonly.aof 文件为什么要用AOF快照功能(RDB)并不是非常耐久(durable): 如果 Redis 因为某些原因而造成故障停机, 那

2020-12-30 17:48:53 187

原创 redis学习十、持久化-RDB

十、持久化-RDBRedis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中 的数据库状态也会消失。所以 Redis 提供了持久化功能!RDB:Redis Databases什么是RDB在主从复制中,rdb就是用来备用的,在从机上面,不去占用主机内存。在指定时间间隔后,将内存中的数据集快照写入数据库 ;在恢复时候,直接读取快照文件,进行数据的恢复 ;默认情况下, Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中。文件名可以在配置文件中

2020-12-30 17:44:51 100

原创 redis学习九、Redis.conf详解

九、Redis.conf详解启动的时候,就通过配置文件来启动! 工作中,一些小小的配置,可以让你脱颖而出!单位不区分大小写,G和GB有区别包含可以使用 include 组合多个配置问题就是好比我们学习Spring、import, include网络配置 NETWORKbind 127.0.0.1 # 绑定的ipprotected-mode yes # 保护模式port 6379 # 端口设置通用 GENERALdaemonize yes # 以守护进程的方式运行

2020-12-30 17:34:39 45

原创 redis学习八、自定义Redis工具类

八、自定义Redis工具类使用RedisTemplate需要频繁调用.opForxxx然后才能进行对应的操作,这样使用起来代码效率低下,工作中一般不会这样使用,而是将这些常用的公共API抽取出来封装成为一个工具类,然后直接使用工具类来间接操作Redis,不但效率高并且易用。工具类链接:https://www.cnblogs.com/leeego-123/p/10511856.html@Componentpublic final class RedisUtil { @Autowired

2020-12-30 17:31:36 89

原创 redis学习七、SpringBoot整合redis

七、SpringBoot整合导入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>springboot 2.x后 ,原来使用的 Jedis 被 lettuce 替换。jedis:采用的直连,多个线程操作

2020-12-30 17:27:54 113

原创 redis学习六、Jedis

六、Jedis使用Java来操作Redis,Jedis是Redis官方推荐使用的Java连接redis的客户端。导入依赖<!--导入jredis的包--><dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version></depend

2020-12-30 17:24:00 47

原创 redis学习五、redis事务

五、事务Redis的单条命令是保证原子性的,但是redis事务不能保证原子性Redis 事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行过程的中,会按 照顺序执行! 一次性、顺序性、排他性!执行一些列的命令!执行过程中按顺序执行,不允许其他命令进行干扰。一次性顺序性排他性Redis事务没有隔离级别的概念所有的命令在事务中,并没有直接被执行!只有发起执行命令的时候才会执行!ExecRedis单条命令是保证原子性的,但是事务不保证原子性!Redi

2020-12-30 17:19:05 66

原创 redis学习四、redis三种特殊数据类型

三种特殊数据类型Geospatial(地理位置)朋友的定位,附近的人,打车距离计算? Redis 的 Geo 在Redis3.2 版本就推出了! 这个功能可以推算地理位置的信息,两地之间的距离,方圆 几里的人!可以查询一些测试数据:http://www.jsons.cn/lngcodeinfo/0706D99C19A781A3/只有 六个命令:使用经纬度定位地理坐标并用一个有序集合zset保存,所以zset命令也可以使用命令描述geoadd key longitud(经度

2020-12-30 17:16:23 117

原创 redis学习三、redis五大数据类型

五大数据类型Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU e

2020-12-30 17:15:03 105 1

原创 redis学习二、redis概述和安装

redis入门概述redis是什么Redis(Remote Dictionary Server ),即远程字典服务 ! 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库, 并提供多种语言的API。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave(主从)同步。免费和开源!是当下最热门的 NoSQL 技术之一!也被人们称之为结构化数据库!redis能干嘛1、内存存

2020-12-30 16:52:07 96

原创 redis学习一、Nosql概述

一、Nosql概述为什么使用Nosql1、单机Mysql时代90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够!那个时候,更多的去使用静态网页 Html ~ 服务器根本没有太大的压力!思考一下,这种情况下:整个网站的瓶颈是什么?1、数据量如果太大、一个机器放不下了!2、数据的索引 (B+ Tree),一个机器内存也放不下3、访问量(读写混合),一个服务器承受不了~只要你开始出现以上的三种情况之一,那么你就必须要晋级!2、Memcached(缓存) + MySQL +

2020-12-28 21:33:29 100

原创 redis自定义RedisTemplate模板实现序列化

我们知道在spring默认的是jdk的序列化,在实际开发中能会遇到一些问题,所以我们要自定义自己的序列化模板,用来序列化String、set、key、value、hash。我们创建一个Bean加入容器,就会触发RedisTemplate上的条件注解使默认的RedisTemplate失效。@Configurationpublic class RedisConfig { // 自己定义了一个 RedisTemplate @Bean @SuppressWarnings("a.

2020-12-27 22:18:34 792

原创 Git学习笔记(狂神说)

Git学习笔记(狂神说)感谢狂神,B站学习链接:https://www.bilibili.com/video/BV1FE411P7B3?p=13版本控制什么是版本控制版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。实现跨区域多人协同开发追踪和记载一个或者多个文件的历史记录组织和保护你的源代码和文档统计工作量并行开发、提高开发效率跟踪记录整个软件的开发过程减轻开发

2020-12-26 02:10:56 1790

原创 Linux安装redis采坑

Linux环境下解压配置redis环境出现make[1]: *** [server.o] Error 1make[1]: Leaving directory `/opt/redis-6.0.9/src’报错make: *** [install] Error 2报错报错原因:应该是gcc版本过低。因为redis的c++写的,安装需要gcc环境,本人本来安装的是gcc4.8.5的环境解决方法:更新gcc版本yum -y install centos-release-sclyum -y ins

2020-12-25 17:37:23 250

原创 集合框架总结

集合类1.集合框架图Java 的集合是用于存储对象的工具类容器 它实现了常用的数据结构 提供了一系列公开方法用于增加、删除、修改、查找和遍历数据,降低了日常开发成本。 集合的种类非常多 形成了一个比较经典的继承关系树 称为 Java 集合框架图 如下图所示。框架图中主要分为两类。第一类是按照单个元素存储的 Collection 在继承树 Set List 都实现了 ollection 接口,第二类是按照 Key-Value 存储的 Map。以上 两类集合体系 无论数据存取还是遍历 都存在非常大的差异。

2020-12-24 12:36:18 122

原创 异常

异常1.ThrowableThrowable是所有异常的基类,它有两个子类Error和Exception。Error表示系统错误或资源耗尽,由Java系统自己使用,应用程序不应抛出和处理,比如图中列出的虚拟机错误(VirtualMacheError)及其子类内存溢出错误(OutOfMemoryError)和栈溢出错误(StackOverflowError)。Exception表示应用程序错误,它有很多子类,应用程序也可以通过继承Exception或其子类创建自定义异常,图中列出了三个直接子类:

2020-12-23 21:53:37 108

原创 抽象类和接口

类的拓展1.接口面向接口而非面向实现编程.2.抽象类和抽象方法抽象类只有声明没有实现,定义了抽象方法的类一定是抽象类,不过抽象列是可以没有抽象方法的,抽象类和具体类一样的是可以拥有自己的实例变量和具体方法,差别就在在于不能创建对象,不如说new user();而具体类就可以。虽然说抽象类不可以字创建对象,不过可以通过他的具体子类,声明抽象类的变量,引用抽象类具体子类的对象。为什么我们需要抽象类,难道就是为了多一个不让抽象类自己创建对象而已?用自己的话来说就是让普通的人呢也乐意把事情做对,

2020-12-23 21:52:14 170

原创 类的继承

类的继承1.多态和动态绑定多态就是一种类型的变量可以应用多种实际类型的对象,而不关心具体的类型,动态绑定就是父类调用子类和父类都有的方法,不过子类可能进行了重写,这样就可以统一处理,不过就是还可以实现每个子类,也就是对象的特有行为,或者说子类调用父类的方法。什么叫多态,其实就是子类对象可以赋值给父类引用变量,实际上调用的是子类实现,这就是动态绑定(在父类方法的引用,最后的实现的是子类中重写的方法)。2.this和super在通过new构造对象的时候,父类会进行一个初始化,通过super可以指定

2020-12-22 20:31:06 71

原创 二叉树

二叉树今天我们来说一下二叉树,先提一点,hash里面的红黑树也是从二叉树演变而来的,这个我们以后再说,这就涉及到动态查找。1.二叉树的几种形式1.二叉树2.满二叉树一棵二叉树的结点要么是叶子结点,要么它有两个子结点(如果一个二叉树的层数为K,且结点总数是(2^k) -1,则它就是满二叉树。)3.完全二叉树若设二叉树的深度为k,除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k 层所有的结点都连续集中在最左边,这就是完全二叉树。就是结点树为n的完全二叉树的结构要和满二叉

2020-12-20 20:50:38 325

空空如也

空空如也

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

TA关注的人

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