自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (3)
  • 收藏
  • 关注

原创 JUC学习——Synchronized底层原理

java对象头以32位虚拟机为例普通对象(klass word类型指针)数组对象其中Mark world结构为其中1代表启用了偏向锁,0表示没启用Monitor被翻译为监视器或管程(syschronized底层实现原理)每个java对象都可以关联一个Monitor对象,如果使用synchronized给对象上锁(重量级)之后,该对象的Mark word中被设置指向Monitor对象的指针Monitor的结构如下流程:刚开始Monitor中Owner为null当Thread

2022-04-13 20:46:37 412

原创 JUC学习(六)——AQS

AQS原理全称:AbstractQueueSynchronizer,是阻塞式锁和相关的同步器工具的框架特点:用state属性表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁a. getState: 获取锁状态b> setState:设置stare状态c> compareAndSetState cas机制设置stare状态提供了基于FIFO的等待队列,类似于Monitor的EntryList条件变量来实现等待,唤醒机制,支持多个条件变量

2022-04-13 17:26:39 315

原创 MySQL——主从复制相关

主从复制概述指讲主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步mysql支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。MYSQL复制的优点主要包含以下三个方面:主库出现问题,可以快速切换到从库提供服务实现读写分离,降低主库的访问压力可以在从库中执行备份,以避免备份期间影响主库服务原理复制分为三步:Master主库在事务提交时,会把数据变更记录在二进制

2022-03-31 20:51:51 1062

原创 MySQL——InnoDB引擎

逻辑存储结构架构事务原理MVCC逻辑存储结构表空间(ibd文件):一个mysql实例可以对应多个表空间,用于存储记录、索引等数据段:分为数据段、索引段、回滚段,InnoDB是索引组织表,数据段就是B+树的叶子借点,索引段即为B+树的非叶子借点。段用来管理多个Extent区: 表空间的单元结构,每个区的大小为1M。默认情况下,InnoDB页大小为16k。即一个区中一共有64个连续的页页:是InnoDB存储引擎磁盘管理的最小单元,每个页的大小默认为16kb,为了保证页的连续性,每次从磁盘申.

2022-03-29 15:24:34 1214

原创 MySql——Sql优化

SQL性能分析sql执行频率MySQL客户端连接成功后,通过show [] status命令可以提供服务器状态指令。通过如下指令,可以查看当前数据库的操作的访问频次#七个下划线SHOW GLOBAL STATUS LIKE 'Com_______'慢查询日志慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志MySQL的慢查询日志默认没有开启,需要配置(/etc/my.cnf),配置完成后需重启,查看慢日志文件中信息/va

2022-03-28 14:42:56 368

转载 TCP三次握手四次挥手

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。序列号seq:用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。确认号ack:期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。确认ACK:占1位,仅当ACK=1时

2022-03-17 22:03:43 220

原创 RabbitMQ学习(四)——高级特性

RabbitMQ高级特性1.1 消息的可靠投递在使用RabbitMQ的时候,作为消息发送方式希望杜绝任何消息丢失或者投递失败的场景。RabbitMQ为我们提供了两种方式用来控制消息的投递可靠性模式confirm: 确认模式return: 退回模式RabbitMQ整个消息投递的路径为:producer ➡rabbimq broker ➡exchange➡queue➡consumer消息从prodeucer到exchange会返回一个confirmCallback消息从exchange到q

2022-03-04 16:23:14 1890

原创 RabbitMQ学习(二)—— 代码实战

1.1Work queues工作队列模式1.1.1 入门程序完成简单模式的消息传递Work Queues:与入门程序的简单模式相比,多了一个或一些消费端,多个消费端共同消费应用场景: 对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度生产者代码://1.创建连接工厂 ConnectionFactory factory = new ConnectionFactory(); //2.设置参数 factory.setHost("172.1

2022-03-02 22:10:09 1524

原创 RabbitMq学习——入门(一)

RabbitMq简介AMQP,即Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言同等条件的限制。2006年,AMQP规范发布。类比HTTP。2007年,Rabbbit技术公司基于AMQP标准开发的RabbitMQ 1.0发布。RabbitMQ采用Erlang语言开发,这是专门为开发高并发和分布式系统的一种语言,在

2022-03-01 15:35:17 1457

原创 ElasticSearch学习(三)——springboot集成es

springboot集成es官方文档找到原生的依赖<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elaseicsearch-rest-high-level-client</artifactId><version>7.6.2</version></dependency>找对象分析类中的方法即可

2020-10-22 00:45:25 398 2

原创 ElasticSearch学习(二)——ik分词及查询操作

IK分词器插件分词:即把一段中文或者别的划分成一个个的关键字,在搜索时将自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个词看成一个词,如“李小狼”会被分为“李”,“小”“狼”,这显然是不符合要求的,我们需要安装中文分词器ik来解决这个问题。IK提供了两个分词算法:ik_smart和ik_max_word,其中ik_smart为最少切分,ik_max_word为最细力度划分。下载地址:https://github.com/medcl/elasti

2020-10-18 21:32:35 2767

原创 ElasticSearch学习(一)——概览及ELK三剑客

Doug Cutting 美国工程师,hadoop之父,感兴趣的可以去了解下,感觉还是挺有意思的概述lucene是一套信息检索工具包!jar包,不包含搜索引擎系统包含的:索引结构,读写索引的工具,排序,搜索规则,工具类!Lucene和ElasticSearch关系:ElasticSearch是基于Lucene做了一些封装和增强ElasticSearch,简称es,es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储,检索数据,本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大

2020-10-17 11:36:37 728

原创 Mongodb学习(一)

MongoDB简介MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是Nosql数据库产品中的一种,是最像关系型数据库(MySQL)的非关系型数据库。它支持的数据结构非常分散,是一种类似与JSON的格式叫BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认为是一个对象。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其

2020-10-09 21:13:32 296 1

原创 redis学习(六)——主从复制

主从复制主从复制简介互联网三高架构:高性能高并发高可用为了避免单点redis服务器故障,准备多太服务器,互相连通,将数据复制多个副本保存在不同的服务器上,连接在一起,并保证数据是同步的。即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现redis的高可用,同时实现数据冗余备份。多台服务器连接方案提供数据放:master,主服务器,主节点,主库,主客户端接受数据放:slave需要解决的问题:数据同步核心工作:master的数据复制到slave中主从复制主从复制即

2020-09-08 10:46:52 365

原创 redis学习(五)——redis的持久化rdb和aof

持久化什么是持久化:利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称之为持久化为什么要进行持久化:防止数据的意外丢失,确保数据安全性持久化过程保存的是什么?有两种将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据。在redis中这种文件的保存形式为二进制,在redis中称之为RDB将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程。在redis中只保存写的命令,对读的命令不保存,在redis中称

2020-09-07 21:42:07 234

原创 JUC学习笔记(四)——JMM、volatile、单例模式

JMMVolatile是java虚拟机提供的轻量级的同步机制保证可见性不保证原子性禁止指令重排什么是JMM:java内存模型,不存在的东西,是一个概念,约定!关于JMM的一些同步约定:线程解锁前,必须把共享变量立刻刷会主存线程加锁前,必须读取主存中的最新值到工作内存中加锁和解锁是同一把锁内存交互操作有8种,虚拟机实现必须保证每一个操作都是原子的,不可在分的(对于double和long类型的变量来说,load、store、read和

2020-09-06 09:45:06 246

原创 JUC学习笔记(三)——线程池及函数式接口

阻塞队列什么情况下我们会使用阻塞队列:多线程并发处理,线程池!学会使用队列!添加移除四组API!方式抛出异常有返回值不抛出异常阻塞等待超时等待添加addofferputoffer(e, int, TimeUnit)移除removepolltake()poll()检测队首元素elementpeek--SynchroniousQueue 同步队列容量为1,队列中元素被消费了才可以继续向队列中添加元素线程池线程池: 三大方法,七大

2020-09-05 18:19:30 265

原创 JUC学习笔记(二)——常用的辅助类

CountDownLatch(减法计数器)计数器具体使用,只有计数器归零了主线程才能继续向下执行(即计数器归零后,await()才会被唤醒)public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(6); for (

2020-09-05 15:08:06 158

原创 JUC学习笔记(一)——lock和synchronized

什么是JUCjava.util下的这三个包线程和进程进程:一个程序一个进程往往可以包含多个线程,至少包含一个!java默认有几个线程?2个,main,GC对于java而言:Thread,Runnable, Callablejava真的可以开启一个线程么?看下源码:通多调用本地方法,低层c++,java无法直接操作硬件并发,并行并发(多个线程操作同一个资源)CPU一核,模拟出多条线程并行(多个人一起行走)CPU多核,多个线程可以同时执行;线程池public st

2020-09-05 10:09:06 339

原创 redis学习(四)——springboot整合redis

SpringBoot整合创建springboot项目时勾选上其在pom文件中会引入一个redis的有关依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>其

2020-09-04 18:18:19 168

原创 redis学习(三)——事务及乐观锁

事务Redis事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行!一次性、顺序性、排他性!执行一些列的命令。Redis事务中没有隔离级别的概念!(可以说是一种伪事务)所有的命令在事务中,并没有直接执行!只有执行命令的时候才会执行!exec命令Redis单条命令是保存原子性的,但是事务不保证原子性!redis的事务:开启事务(multi)命令入队()执行(exec)取消事务命令discard有时我们的入队命令是有问题的,此时可以类比java

2020-09-04 17:38:49 127

原创 Spring学习(二)——AOP

概念AOP(Aspect Oriented Programming)面向切面编程:通过预编译方式和运行期动态代理实现程序功能统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范式。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发效率。AOP在Spring中的作用提供声明式编程:允许用户自定义切面相关术语概念:横切关注点:跨越应用程序多个模块的方法或

2020-08-26 17:25:55 142

原创 Redis学习(二)——入门及安装

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

2020-08-22 14:39:09 105

原创 Redis学习(一)——nosql概述

Nosql概述单机MySql时代90年代,一个基本的网站访问量不会太大,单个数据库完全够用。那个时候,更多的去使用静态网页html,服务器根本没有太大的压力。思考一下这个时候整个网站的瓶颈是什么?数据量太大,一个机器放不下了数据的索引,一个机器内存也放不下访问量(读写混合),一个服务器承受不了只要你开始出现以上情况之一,那么你就必须要晋级!Memcahced(缓存)+MySql+垂直拆分网站80%的情况是在读,每次要去查数据库的话就十分麻烦,所以我们希望减轻数据库的压力,我们可以使用

2020-08-22 13:48:29 119

转载 MySQL索引背后的数据结构及算法原理(转载)

写在前面的话  在编程领域有一句人尽皆知的法则“程序 = 数据结构 + 算法”,我个人是不太赞同这句话(因为我觉得程序不仅仅是数据结构加算法),但是在日常的学习和工作中我确认深深感受到数据结构和算法的重要性,很多东西,如果你愿意稍稍往深处挖一点,那么扑面而来的一定是各种数据结构和算法知识。例如几乎每个程序员都要打交道的数据库,如果仅仅是用来存个数据、建建表、建建索引、做做增删改查,那么也许觉得数据结构和这东西没什么关系。不过要是哪天心血来潮,想知道的多一点,想研究一下如何优化数据库,那么一定避免不了研究索

2020-08-21 22:53:46 624

原创 docker网络(十一)——SpringBoot微服务打包docker镜像

SpringBoot微服务打包docker镜像首先我们先在idea中创建一个helloworld的springboot项目测试运行成功我们来通过package打个包我们需要的jar包在命令行中运行也是成功的,说明这个jar包没有问题的了准备工作完成我们写dockerFile文件在home目录下创建一个idea目录,将jar包和dockerfile文件上传到这里然后build构建镜像测试大功告成!...

2020-08-21 21:42:47 145

原创 docker学习(十)——自定义网络

自定义网络网络模式:bridge:桥接 docker(默认)none: 不配置网络host:和宿主机共享网络container: 容器网络连通(用的少,局限很大)查看帮助文档docker network --help我们使用这个命令来创建一下网络(先把容器都清楚保证环境的干净)先测试下:创建一个桥接网络的tomcat01其实这个命令和不使用是一样的,因为docker给我们创建容器的时候这个参数是默认的即docker run -d -P --name tomcat01 --ne

2020-08-21 21:08:16 205

原创 docker学习(九)——docker网络

理解daoker0清空所有环境(即清除所有容器及镜像)使用ip addr查看ip地址问题:docker是如何处理容器网络访问的?启动一个tomcat容器docker run -d -P --name tomcat01 tomcat查看容器内部网络地址ip addrdocker exec -it tomcat01 ip addr发现 容器启动的时候会得到一个eth0@if77 的ip地址,这就是docker分配的!我们此时再容器外ping下这个容器的ip地址,发现是可以ping

2020-08-21 16:27:09 159

原创 docker学习(八)——dockerFile

DockerFile介绍dockerFile是用来构建docker镜像的文件!命令参数脚本!构建步骤:编写一个dockerfile文件docker build 构建成一个镜像docker 运行镜像docker push 发布镜像(DcokderHub, 阿里云镜像仓库)如centos的很多官方镜像包都是基础包,很多功能没有,我们通常会自己搭建自己的镜像DockerFile构建过程基础知识:每个保留关键字(指令)都是必须大写字母执行从上到下顺序执行#表示注释每一个指令都会创

2020-08-20 14:27:38 156

原创 docker学习(七)——容器数据卷

容器数据卷什么是容器数据卷docker的理念回顾将应用和环境打包成一个镜像数据?如果数据在容器中,那么我们的容器删除,数据就会丢失!需求:数据持久化!MySql,容器删了,删库跑路!需求:MySql数据可以存储本地容器之间可以有一个数据共享的技术,Docker容器中产生的数据同步到本地!这就是卷技术,目录的挂在,将我们容器内的目录,挂在到Linux上!总结一句话:容器的持久化和同步操作,容器间也是可以数据共享的使用容器数据卷方式一:直接使用命令来挂在 -vdocker run -i

2020-08-19 15:17:06 178

原创 docker学习(六)——commit镜像

commit镜像docker commit 提交容器成为一个新的副本命令和git原理类似docker commit -m=“提交的描述信息” -a=“作者” 容器id 目标镜像名:[tag]实战测试先启动tomcat官方镜像中webapps为空,我们复制webapps.dist下所有东西到webapps中,此时访问才能出现tomcat界面,我们将我们修改后的容器commit成镜像总结:修改容器,commit即可我们会发现提交的镜像比原有的官方镜像略大一些,这就是我们在webapp

2020-08-19 14:04:02 143

原创 docker学习(五)——镜像原理

镜像是什么镜像时一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行开发的软件,它包含运行某个软件所需要的所有内容,包括代码、运行时、库、环境变量和配置文件。如何得到镜像:从远程仓库下载拷贝自己制作镜像DockerFileDocker镜像加载原理UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several dir

2020-08-18 23:34:57 331

原创 二叉树(B,B+,B*)

树的定义树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:1)有且仅有一个特定的称为根(Root)的结点;2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、…、Tn,其中每一个集合本身又是一棵树,并且称为根的子树。此外,树的定义还需要强调以下两点:1)n>0时根结点是唯一的,不可能存在多个根结点,数据结构中的树只能有一个根结点。2)m>0时,子树的个数没有限制,但它们一定是互不相交的。示例树:由树的定义可

2020-08-18 21:57:08 509

原创 docker学习(四) ——部署Tomcat

方式一官方的使用docker run -it --rm tomcat:9.0一般用来测试,用完就删除方式二下载再启动先docker pull下载对应镜像然后run -d后台启动外网进行访问此时会发现无法访问

2020-08-18 15:35:47 145

原创 docker学习(三)——Docker的常用命令

docker的常用命令帮助命令docker version    //  显示docker的版本信息docker info     //   显示docker的系统信息,包括镜像和容器的数量docker 命令 --help   //  帮助命令帮助文档地址链接: https://docs.docker.com/reference/.镜像命令docker images 查看所有本地的主机上的镜像可选项-a  --al    // 列出所有镜像-q  --quiet  /

2020-08-18 15:00:16 92

原创 MySql——数据引擎

概念数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。现在主要使用的两种为InnoDB和MyISAMInnoDB存储引擎InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,,InnoDB是默认的MySQL引擎。InnoDB主要特

2020-08-17 21:48:04 146

原创 Docker学习(一)——docker概念

概念Docker是一个容器引擎,是应用程序与系统之间的隔离层。通常应用程序对安装的系统环境会有要求,如果服务器很多,部署时系统环境的配置工作是非常繁琐的。Docker让应用程序不必再关心主机环境,各个应用安装在Docker镜像里,Docker引擎负责运行包裹了应用程序的docker镜像。Docker的理念是让开发人员可以简单地把应用程序装载到容器中,然后轻松地部署到任何地方。Docker非常适合频繁改动快速发布的互联网项目。Docker的首次发布是在2013年3月,发布后就变得非常流行docker

2020-08-17 14:46:37 134

原创 Docker学习(二)——docker安装

Docker的基本组成镜像(images):docker镜像好比是一个模板,可以通过这个模板来创建容器服务,tomacat镜像===>run===>tomcat01容器(提供服务器),通过一个镜像可以创建多个容器(最终服务运行或者项目就是运行在容器中的)容器(container):docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。启动,停止,删除,基本命令!目前就可以把这个容器理解为就是一个简易的linux系统仓库(repository):仓库就是存放镜像的

2020-08-17 14:36:15 108

原创 Linux学习总结(三)——软件安装

环境安装安装软件的方式一般有三种rpm(jdk, 在线发布一个springboot项目)解压缩(tomcat,并启用外网访问,发布网站)yum在线安装(docker:直接安装运行跑起来docker就可以!)!rpm方式:我们开发java程序必须要的环境!1、下载JDK rpm。去oralce 官网下载即可!2、安装java环境检测当前系统是否存在java环境! java -version如果有的话就需要卸载rpm -qa|grep jdk # 检测JDK版本信息rpm -e -

2020-08-15 14:50:45 181

原创 Linux学习总结(二)

Linux(二)文件内容查看Linux系统中使用以下命令来查看文件的内容:cat 由第一行开始显示文件内容,用来读文章,或者读取配置文件啊,都使用cat名tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!nl 显示的时候,顺道输出行号! 看代码的时候,希望显示行号! 常用more 一页一页的显示文件内容,带余下内容的(空格代表翻页,enter 代表向下看一行, :f 行号)less 与 more 类似,但是比 more 更好的是,他可以往前翻页! (空格下翻页,pageDo

2020-08-15 14:25:50 89

rabbitmq安装所需erlang,socat及rabbit3.8.1.rar

rabbitmq安装所需所有环境,包含erlang,socat以及rabbitmq的3.8.1版本,使用centos7

2020-08-21

BookStudentManager.rar

SSM结合Oracle数据库,实现前后台交互,图书学生以及借阅记录的增删改查,包含sql文件,适合初学者,不懂可问982341816

2019-08-21

BooksManager.rar

SSM结合Oracle数据库,实现前后台交互,图书学生以及借阅记录的增删改查,包含sql文件,适合初学者,不懂可问982341816

2019-08-21

空空如也

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

TA关注的人

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