自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SSM整合

Spring、SpringMVC、Mybatis框架搭建,以及三个框架的整合

2021-12-20 16:55:26 910

原创 Docker06:DockerFile

一、Docker1、docker简介dockerfile是用来构建docker镜像的文件,命令参数脚本。2、构建步骤①、 编写一个dockerfile文件②、 docker build 构建称为一个镜像③、 docker run运行镜像④、 docker push发布镜像(DockerHub 、阿里云仓库)3、dockerfile构建过程每个保留关键字(指令)都是必须是大写字母执行从上到下顺序#表示注释每一个指令都会创建提交一个新的镜像,并提交Docke

2021-09-03 16:24:35 277

原创 Docker05:容器数据卷与数据卷容器

一、容器数据卷1、什么是数据卷当将应用软件和环境打包成一个镜像,当生成一个容器,如果数据都存在容器中时,删除容器就等于删除所有数据了,这是就需要将容器中的数据保存到本地。容器间可以有一个数据共享的技术,docker容器产生的数据同步到本地。容器的持久化和同步操作。容器间也是可以数据共享的。2、如何使用数据卷技术直接使用命令挂载docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口# /home/ceshi:主机home目录下的ceshi文件夹 映

2021-09-03 09:31:24 286 1

原创 Docker04:docker镜像原理

一、镜像1、什么是镜像镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,他包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件。所有应用,直接打包docker镜像,就可以直接跑起来。2、怎么获得镜像从远程仓库下载别人拷贝给你自己制作一个镜像 DockerFile3、docker镜像加载原理UnionFs (联合文件系统):一种分层、轻量级并且高性能的文件系统,他支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目

2021-09-02 17:09:04 253 1

原创 Docker03:docker安装nginx、tomcat、es+kibana

一、Docker安装Nginx安装命令#1. 搜索镜像 search 建议大家去docker搜索,可以看到帮助文档[root@iz2zeak7sgj6i7hrb2g862z ~]# docker search nginx#2. 拉取下载镜像 pull[root@iz2zeak7sgj6i7hrb2g862z ~]# docker pull nginx#3. 查看是否下载成功镜像[root@iz2zeak7sgj6i7hrb2g862z ~]# docker images#3. 运行测试

2021-09-02 15:06:09 130

原创 Docker02:docker的命令

一、Docker的常用命令1、帮助命令docker version #显示docker的版本信息。docker info #显示docker的系统信息,包括镜像和容器的数量docker 命令 --help #帮助命令2、镜像命令①、基本命令docker images #查看所有本地主机上的镜像,可以使用docker image ls代替docker search #搜索镜像docker pull #下载镜像 docke

2021-09-01 16:02:53 107

原创 Docker01:docker入门

一、Docker概述1、docker为什么出现传统的项目发布,开发和运维使用的环境不是完全一样的,经常出现在开发电脑环境上可以运行,但是在运维的电脑上却不能正常运行。发布一个项目,不能带上相应的环境,重新配置环境麻烦且容易出错。2、docker的出现docker可以使开发的项目和环境一起打包,保证在每个电脑上运行的环境都一样。使得开发部署上线一气呵成。docker通过隔离机制,可以使得服务器的利用达到极致。3、docker能干什么①、传统虚拟机技术缺点占用十分多的资源启

2021-09-01 11:44:10 118

原创 SpringCloud04:hystrixs熔断器与Zuul路由网关

一、熔断器Hystrixs1、分布式系统面临的问题复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免的失败。多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B 和微服务C又调用其他的微服务,这就是所谓的 “扇出”、如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的 “雪崩效应。2、什么是HystrixsHystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布

2021-08-31 09:59:27 319

原创 SpringCloud03:Ribbon与Feign

一、Ribbon负载均衡(基于客户端)1、什么是Ribbon简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将NetFlix的中间层服务连接在一起。Ribbon的客户端组件提供一系列完整的配置项如:连接超时、重试等等。简单的说,就是在配置文件中列出LoadBalancer(简称LB:负载均衡)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。2、Rib

2021-08-30 17:55:27 148

原创 SpringCloud02:搭建以及基本使用

一、微服务基本搭建1、创建父工程pom.xml文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h

2021-08-30 16:29:25 167

原创 SpringCloud01:微服务入门

一、微服务概述1、什么是微服务就目前而言,对于微服务,业界并没有一个统一的,标准的定义但通常而言,微服务架构是一种架构模式,或者说是一种架构风格, 它提倡将单一的应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程内,服务之间互相协调,互相配置,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通,每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境中,另外,应尽量避免统一的,集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言,工具对其进行构建,可以

2021-08-30 10:24:51 183 1

转载 JUC编程13:各种锁的理解

一、公平锁与非公平锁公平锁: 非常公平, 不能够插队,必须先来后到非公平锁:非常不公平,可以插队 (默认都是非公平)底层代码public ReentrantLock() { sync = new NonfairSync(); }public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync(); }二、可重入锁(递归锁)1、synchronized版代码演示

2021-08-04 15:28:12 98

原创 JUC编程12:深入理解CAS与原子引用

一、CAS1、什么是CAS概念:假设多个线程操作共享资源时不会发生并发冲突,只是在最后更新共享资源的时候判断一下在此期间有没有别的线程修改了这个共享资源。如果发生冲突就重试,直到没有冲突,更新成功。CAS就是一种类似乐观锁实现方式。2、代码演示CAS compareAndSet : 比较并交换!public class CASTest { public static void main(String[] args) { AtomicInteger atomicInt

2021-08-04 10:40:22 162

原创 JUC编程11:JMM、Volatile

一、什么是JMM1、概念JMM:Java虚拟机是一个实现了跨平台的虚拟系统,因此它也有自己的内存模型,即Java内存模型(Java Memory Model, JMM)。2、JMM同步线程解锁前,必须把共享变量立刻刷回主存。线程加锁前,必须读取主存中的最新值到工作内存中!加锁和解锁是同一把锁。3、八种操作内存交互操作有8种,虚拟机实现必须保证每一个操作都是原子的,不可在分的(对于double和long类型的变量来说,load、store、read和writ操作在某些

2021-08-04 08:58:20 122

原创 JUC编程10:异步回调之Future

一、什么是future1、概念对将来的某个事件的结果进行建模2、执行步骤异步调用异步执行成功回调失败回调3、代码演示①、没有返回值的异步回调:runAsyncpublic class NoBackFuture { public static void main(String[] args) throws ExecutionException, InterruptedException { //没有返回值的异步回调:runAsync Com

2021-08-03 14:46:37 117

原创 JUC编程09:ForkJoin

一、什么是ForkJoin?1、概念ForkJoin 从 JDK 1.7开始 , 并行执行任务。在大数据量下,能够提高效率。它能够将大任务拆分成小的任务。底层维护的是一个双端队列特点为工作窃取二、代码演示public class ForkjoinDemo extends RecursiveTask<Long> { private Long start; private Long end; //设置临界值 private Long te

2021-08-02 18:14:20 106

原创 JUC编程08:四大函数式接口与Stream流式计算

一、Function函数式接口1、传统的匿名内部类写法public class FunctionTest { public static void main(String[] args) { //传统的匿名内部类写法 Function function= new Function<String, String>() { @Override public String apply(String str)

2021-08-02 10:58:04 115

原创 JUC编程07:线程池以及调优

一、线程池1、概念池化技术:本质:占用系统的资源!事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。2、优点降低系统资源的消耗提高响应的速度方便管理3、三大方法Executors 工具类的3大方法①、 创建单个线程的线程池:Executors.newSingleThreadExecutor();②、创建一个固定大小的线程池: Executors.newFixedThreadPool(5);③、 创建一个可伸缩的线程池:Executors.newCachedTh

2021-07-30 17:03:22 218

原创 JUC编程06:读写锁、阻塞队列和同步队列

一、读写锁ReadWriteLock代码演示①、缓存类public class MyCache { private volatile Map<String,Object> map=new HashMap<String, Object>(); //创建一个读写锁 private ReentrantReadWriteLock readWriteLock= new ReentrantReadWriteLock(); //写入的时候希望只有一个线程操

2021-07-30 14:27:49 194

原创 JUC编程05:Callable和常用的辅助类

一、Callable接口Callable 和 Runable 对比:比如Callable 是你自己,你想通过你的女朋友 Runable 认识她的闺蜜 ThreadCallable 是 java.util 包下 concurrent 下的接口,有返回值,可以抛出被检查的异常Runable 是 java.lang 包下的接口,没有返回值,不可以抛出被检查的异常二者调用的方法不同,run()/ call()代码演示class MyThread implements Callable<I

2021-07-28 17:48:09 246 2

原创 JUC编程04:多线程下集合的不安全问题

一、List线程不安全List、ArrayList 等在并发多线程条件下,不能实现数据共享,多个线程同时调用一个list对象时候就会出现并发修改异常ConcurrentModificationException代码演示public class ListTest { public static void main(String[] args) { /* * 解决方案; * 方案1、List<String> list = new

2021-07-28 16:29:10 159

原创 JUC编程03:八锁问题

一、synchronized的普通锁业务代码class Phone{ // synchronized 锁的对象是方法的调用者! // 两个方法用的是同一个对象调(同一个锁),谁先拿到锁谁执行! public synchronized void sendSms(){ try { TimeUnit.SECONDS.sleep(4);// 抱着锁睡眠 } catch (InterruptedException e) {

2021-07-28 15:19:26 99

原创 JUC编程02:生产者与消费者问题

一、Synchronized解决方案代码演示package com.haust.pc;/** * 线程之间的通信问题:生产者和消费者问题! 等待唤醒,通知唤醒 * 线程交替执行 A B 操作同一个变量 num = 0 * A num+1 * B num-1 */public class A { public static void main(String[] args) { Data data = new Data(); new Th

2021-07-28 09:40:13 172

原创 JUC编程01:初识JUC

一、什么是JUC1、概念JUC就是 java.util 下的工具包、包、分类等。 二、线程知识回顾1、进程与线程进程:①、一个程序,QQ.exe Music.exe 程序的集合;②、一个进程往往可以包含多个线程,至少包含一个!③、Java默认有2个线程? mian、GC线程:①、例如编写文档时,编写的操作和自动保存属于两个不同的线程②、对于Java而言提供了:Thread、Runnable、Callable操作线程。2、Java是否可以直接开启线程?源码分析

2021-07-27 17:56:45 129

原创 Redis08:redis的缓存穿透、缓存击穿、缓存雪崩

一、缓存穿透1、概念用户想要查一个数据,发现Redis内存数据库中没有,也就是缓存没命中,于是向持久层数据库查询,发现也没有,于是本次查询失败。当用户很多时,缓存都没有命中(秒杀!),于是都去请求持久层数据库,这就会导致持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。2、解决方案①、布隆过滤器:是一种数据结构,对所有可能查询的参数以Hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免存储系统的查询压力。②、**缓存空对象:**当存储层不命中后,即使返回的空对象也将其缓存起来

2021-07-27 14:58:58 172

原创 Redis07:redis的发布订阅、主从复制、哨兵模式

一、发布订阅Redis 的发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息,例如微信、微博、关注系统!订阅发布消息图:下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:1、常见命令这些命令被广泛用于构建即时通信应用,比如网络聊天室(ch

2021-07-27 14:26:55 193

原创 Redis06:redis的RDB和AOF持久化

一、RDB持久化(Redis Database)RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。 保存文件格式 dump.rdb设置RDB文件保存条件重启服务systemctl restart redis_63791、测试RDB持久化①、查看rdb文件存放目录②、删除已有的dump.rdb文件③、添加5个key2、RDB文件生成触发机制满足

2021-07-27 10:37:59 163

原创 Redis05:配置文件redis.conf详解

一、单位我们启动Redis,一般都是通过Redis.conf启动单位不区分大小写可导入包含不同的配置文件可以包含多个配置文件(即,这些文件导入到主配置文件 Redis.conf 中)网络配置bind 0.0.0.0 # IP(默认127.0.0.1)protected-mode no # 保护模式(默认yes)port 6379 # 端口设置(默认6379)通用配置daemonize y

2021-07-27 09:32:44 157

转载 Redis04:springboot整合redis

一、springboot整合1、在SpringBoot2.x之后,原来的jedis被替换为lettucejedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全,使用jedis pool连接池!BIOlettuce:采用netty,实例可以在多个线程共享,不存在线程不安全问题,可以减少线程数据了,性能高,NIO2、整合步骤创建springboot项目分析RedisautoConfiguration源码...

2021-07-26 15:02:38 125

原创 Redis03:事务与jedis

一、事务1、redis事务本质一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行!Redis 单条命令是保证原子性的,但是Redis事务不保证原子性Redis 事务没有隔离级别的概念!所有的命令在事务中,并没有直接被执行!只有发起执行命令的时候才会执行!Execredis的事务执行顺序:1、开启事务( multi )2、命令入队( )3、执行事务( exec )2、测试案例正常执行事务> multi # 开启事务OK=

2021-07-26 14:03:39 106

原创 Redis02:五种基本类型和三种特殊类型

一、String(字符串)常用命令======================基本操作 =======================127.0.0.1:6379> set k1 v1 #设置key为key1,值为v1的键值对OK127.0.0.1:6379> get k1 #获取键为key1的值"v1"127.0.0.1:6379> keys * #查看所有的key1) "k1"127.0.0.1:6379> exists k1 #判断k1是否存在(inte

2021-07-26 11:31:54 124

原创 Redis01:初识redis

一、redis简介1、什么是redis?Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary ServiceServer(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-v

2021-07-23 17:56:16 100

原创 注解和反射02:反射

一、什么是反射1、概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制2、获取反射class对象的三种方式获取反射对象代码演示public class 反射对象的创建方式 { public static void main(String[] args) throws ClassNotFoundException {

2021-06-03 15:56:59 101 2

原创 注解和反射01:注解

一、注解1、什么是注解Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注2、元注解介绍@Target:表示注解可以在那些地方使用,比如(内存中字节码,Type)类上,(Metho

2021-06-03 14:03:59 67

原创 I/O流07:序列化与反序列化

一、序列化1、什么是序列化把Java对象转换为字节序列存储到计算机文件中的过程在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中2、序列化代码演示创建一个Teacher类在这里插入代码片public class Teacher implements Serializable { private String name; public Teacher(String name) { this.name

2021-06-02 11:38:54 92 1

原创 I/O流06:转换流

一、转换流1、字符编码计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。按照某种规则,将字符存储到计算机中,称为编码。反之,将存储在计算机中的二进制数按照某种规则解析显示出来,称为解码。比如说,按照A规则存储,同样按照A规则解析,那么就能显示正确的文本符号。反之,按照A规则存储,再按照B规则解析,就会导致乱码现象编码:字符 --> 字节解码:字节 --> 字符2、字符集也叫编码表,是一个系统支持的所

2021-06-02 11:27:26 64

原创 I/O流05:字符缓冲流

一、字符缓冲输出流将指定内容输出到a.txt中public class 字符缓冲输出流 { public static void main(String[] args) throws Exception { //创建一个字符输出流 Writer fileWriter = new FileWriter("a.txt"); //创建一个字符缓冲输出流 BufferedWriter bw = new BufferedWriter(fi

2021-06-02 10:57:32 68

原创 I/O流04:字节缓冲流

一、什么是字节缓冲流在进行文件读写操作时,将要读写的数据存到一个临时的内存缓冲区域中,当达到一定大小或者手动刷新时,就一次性将内容从缓冲区域读取出来,可以调高I/O流的读写效率二、字节缓冲输出流将内容写入到b.txt中,可以手动刷新public class 字节缓冲输出流 { public static void main(String[] args) throws Exception { //创建字节输出流 OutputStream outputSt

2021-06-02 10:48:09 115

原创 I/O流03:字符流

一、什么是字符流字符流用于处理用ASCII字符集或Unicode(包含ASCII的国际字符集)表示的文本,可以用字符流来处理的文件有纯文本文件,HTML文档,和java源代码文件。用于读写这些流的类都是Reader和Writer的子类,对于所有的文本输入,都应使用字符流来处理,而不能直接使用字节流来处理二、字符输出流代码演示使用字符输出流向b.txt中写入内容public class 字符输出流 { public static void main(String[] args) thr

2021-06-02 10:27:39 177 1

原创 I/O流02:字节流

一、什么是流Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序列的对象被称为输入流;能够向其写入一个字节序列的对象被称为输出流二、流的输出和输入是以什么为依据的流的输入的输出都是以内存为标准判定的输入流:指的是从磁盘或者硬盘等存储设备将信息以流的方式输入到内存输出流:指的是从内存将信息以流的形式输出到磁盘或者硬盘等存储设备三、什么是字节流Java中的字

2021-06-02 10:01:13 94 1

空空如也

空空如也

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

TA关注的人

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