自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 静态代理和动态代理

静态代理和动态代理

2022-10-08 16:48:04 223

原创 外观模式应用

外观模式

2022-08-24 14:33:24 193

原创 策略模式项目应用

策略模式

2022-08-24 14:21:20 269

原创 一、定时任务-Spring自带

Spring内部有一个task是Spring自带的一个设定时间自动任务调度task使用的时候很方便,但是他能做的东西不如quartz那么的多!可以使用注解和配置两种方式,配置的方式如下引入Spring放在appcation.xml开头<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:a

2021-02-24 16:44:40 247

原创 五、Stream流的收集方法

package stream01;import java.util.*;import java.util.stream.Collectors;import java.util.stream.Stream;/** * Stream流的收集方法 * R collect​(Collector collector) * * 它是通过工具类Collectors提供了具体的收集方式 * public static <T> Collector toList​():把元素.

2021-02-01 19:59:42 281

原创 四、Stream综合使用案例

题目:现在有两个ArrayList集合,分别存储6名男演员名称和6名女演员名称,要求完成如下的操作:1:男演员只要名字为3个字的前三人2:女演员只要姓林的,并且不要第一个3:把过滤后的男演员姓名和女演员姓名合并到一起4:把上一步操作后的元素作为构造方法的参数创建演员对象,遍历数据演员类Actor已经提供,里面有一个成员变量,一个带参构造方法,以及成员变量对应的get/set方法package stream01;import java.util.ArrayList;import ja

2021-02-01 19:54:51 323

原创 三、Stream流 limit、skip、concat、sorted、mapToInt方法的使用案例

package stream01;import java.util.ArrayList;import java.util.stream.Stream;public class stream03 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("林青霞"); lis

2021-02-01 19:52:07 429

原创 二、使用Stream流的方式完成过滤操作

package stream01;import java.util.ArrayList;import java.util.stream.Stream;/** * 使用Stream流的方式完成过滤操作 * 1:list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(System.out::println); * 2:直接阅读代码的字面意思即可完美展示无关逻辑方式的语义:生成流、过滤.

2021-02-01 19:47:43 2484

原创 一、 Lambda表达式

package lam02;public interface addAble { int add(int a,int b );}package lam02;public interface flyAble { void fly(String str);}package lam02;import lam01.flyAble;/** * Lambda表达式的省略模式 * 省略规则 * 1:参数类型可以省略,但是有多个参数的情况下,不能只省略一个 * .

2021-02-01 19:44:04 166

原创 七、Docker部署SpringBoot项目

1、将开发的springboot程序打成jar包或者war包;2、将打好的jar包或war包上传到Linux某个目录下,比如:/root/docker3、定义Dockerfile文件,用于创建项目镜像;Docker部署Jar包SpringBoot项目定义Jar包程序Dockerfile文件FROM my_jdk1.8.0_191MAINTAINER catADD 35-springboot-web-1.0.0.jar /optRUN chmod +x /opt/35-springboot-w

2021-01-28 16:29:41 118

原创 六、Docker镜像保存为文件与从文件导入镜像

制作好镜像后,有时需要将镜像复制到另一台服务器使用,那么有两种方式:一种是上传镜像到仓库中(本地仓库或远程公共仓库)一种是将镜像保存为文件然后传到其他服务器上,再从文件中载入镜像;可以使用Docker save和Docker load命令来存储和载入镜像。第一种方式:私有仓库搭建可配置加速器加速下载/etc/docker/daemon.json{“registry-mirrors”: [“https://registry.docker-cn.com”]}下载registry镜像:doc

2021-01-28 16:24:32 636

原创 五、Docker安装mysql实例和容器Tomcat容器部署web项目

Docker 安装 MySQL#下载MySQL镜像:docker pull docker.io/mysql:latest (安装的是mysql 8.0)docker run -d -p 3306:3306 -e MYSQL_DATABASE=workdb -e MYSQL_ROOT_PASSWORD=123456 mysql:latest 其中-e是指定环境变量#进入容器:docker exec -it 3e8bf7392b4e /bin/bash看容器里面的mysql在什么位置:whe

2021-01-28 16:10:10 194

原创 四、Docker的核心组件

Docker 架构Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建;镜像与容器的关系类似于面向对象编程中的类与对象的关系。Docker 核心要素Docker 包括三个核心要素镜像(Image)、容器(Container)、仓库(Repository)理解了这三个概念,就理解了 Docker 的整个生命周期;Docker 的运行离不开以上核心几个组件的支持,Docker的成功也是拜这几个组件所

2021-01-25 19:09:39 631

原创 三、Docker的运行机制和操作使用

我们知道Docker并不是容器,而只是一个管理容器的引擎;Docker的底层运行原理:Docker服务启动–>下载镜像–>启动该镜像得到一个容器–>容器里运行着我们想要的程序;第一个Docker容器根据Docker的运行机制,我们将按照如下步骤运行第一个Docker容器;1、将Docker服务启动;2、下载一个镜像,Docker 运行一个容器前需要本地存在有对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下载(默认是 Docker Hub公共注册服务器中的仓库 ht

2021-01-25 18:57:44 234

原创 二、Docker的运行环境部署

Docker的版本Docker从2013年 3月 20 日发布 Docker 0.1,到现在已经发布了多个版本,从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。Docker CE 即社区免费版,可永久免费使用;Docker EE 即企业版,功能更全,更强调安全,但需付费使用;我们介绍 Docker CE 版本,目前Docker版本为19.03.5Docker官方网站:https://www.docker.com/Docke

2021-01-25 18:47:16 203

原创 一、虚拟化技术发展概述

在虚拟化技术出现之前,如果搭建一台服务器是这样的:1、购买一台硬件服务器;2、在硬件服务器上安装配置操作系统;3、在操作系统之上配置应用运行环境(JDK、Tomcat、MySQL等);4、部署并运行应用;(war包)这种方式的缺点:1、部署应用非常慢;2、应用迁移麻烦,要将应用迁移到一台新机器,又需要重来一遍;所以,随着技术发展,改进了这一问题,出现了虚拟化技术;虚拟化技术是什么?虚拟化(英语: Virtualization)是一种计算机资源管理技术,它将计算机的各种硬件资源,比如磁盘、

2021-01-25 18:42:09 912

原创 五、MySQL大厂军规

1、阿里巴巴MySQL军规1、58同城MySQL军规

2021-01-21 18:44:13 219

原创 四、联合索引最左前缀原理

B+Tree联合索引底层数据结构单列索引:是指由一个字段(单个列)组成的索引;联合索引:联合索引又叫复合索引,是指由多个字段(字段是有顺序的)组成的索引,比如:CREATE TABLE users (id int(11) NOT NULL AUTO_INCREMENT,nick varchar(30) DEFAULT NULL,phone varchar(25) NOT NULL,password varchar(64) DEFAULT NULL,email varchar(50) DEFA

2021-01-21 18:26:45 689

原创 三、B-Tree 与 B+Tree的区别

B-Tree 与 B+Tree有什么区别?B+Tree是基于B-Tree的,大部分数据结构相同,但也有一些区别:1、B+Tree非叶节点不保存数据信息,只保存关键字和子节点的引用;2、B+Tree关键字的数据保存在叶子节点中;3、B+Tree叶子节点是顺序排列的,并且相邻节点具有顺序引用关系;4、B+Tree由于非叶子节点不存储数据,那么每个节点就可以存储更多的元素,树的层级更少所以查询数据更快,所有数据都存在叶子节点,所以每次查找的次数都相同因而查询速度更稳定;5、B+Tree通常有两个指针,

2021-01-20 18:30:58 2310 1

原创 二、Mysql索引种类

Normal 普通索引表示普通索引,大多数情况下都可以使用;Unique 唯一索引表示唯一的,不允许重复的索引,如果该字段信息不能重复,例如注册手机号用作索引时,可设置为unique;Primary Key是拥有自动定义的Unique约束,每个表中可以有多个Unique约束,但是只能有一个Primary Key约束;Full Text 全文索引表示全文收索,在检索长文本的时候效果较好,比如搜索一篇文章,在比较短的文本建议使用普通的Index即可;SPATIAL 空间索引空间索引是对地理空间位

2021-01-20 18:17:33 196

原创 一、MySQL执行机制

官网:https://www.mysql.com所有版本的下载地址:https://downloads.mysql.com/archives/community/影响数据库性能的因素1、服务器硬件 cpu、内存、磁盘io、网卡流量2、服务器的操作系统 Linux的配置参数不同性能不同数据库存储引擎的选择根据需要选择不同的存储引擎MyISAM 不支持事务,表级锁;InnoDB 事务级存储引擎,完美支持行级锁和事务ACID特性;4、数据库自身配置参数 MySQL有上百项的数据库配置参数

2021-01-20 18:01:23 229

原创 十七、模拟Future

package day10.part2;/** * Future模式 * 模拟一个在没有锅和食材的情况下要进行烹饪的过程 * * 1、Future代表:一个异步调用的未来的凭证,在做完其它事情之后 相当于JDK中的Future接口 * 再往下必须要返回结果时可以拿着这个凭证去进行get我们想要的返回结果 * 2、FutureTask代表:将调用逻辑和返回结果进行隔离 相当于JDK中的Callable接口 * 3、FutureService:是桥接Future和FutureT.

2021-01-18 18:21:11 128

原创 十六、Callable、Future

1、先说明启动线程的两种方式:1.继承Thread类方式/** * 通过继承Thread类方式来创建线程 */public class CreateThread01 extends Thread { @Override public void run() { System.out.println("通过继承Thread类方式来创建线程"); } public static void main(String[] args) { Cr

2021-01-18 17:41:41 225 1

原创 十五、多线程开发规范

以下是线程以及线程池在开发中的规范

2021-01-14 09:54:41 281

原创 十三、ThreadPoolExecutor介绍

| 参数名| 参数含义 ||-corePoolSize-|核心线程数|| maxinumPoolSize| 最大线程数 |

2021-01-13 20:22:29 152

原创 十四、ThreadPoolExecutor线程池的拒绝策略

四种拒绝策略如下 * 往线程池中扔4个任务 核心线程数是1 最大线程数是2 队列大小是1 * 仍第一个任务时 先放入阻塞队列,开启一条线程获取该任务执行 * 仍第二个任务时 放入阻塞队列 * 仍第三个任务时 发现核心线程还没有执行完,那新创建线程拿走任务二 并将任务三放入阻塞队列 * 仍第二个任务时 最大线程已满而且还没有执行完,阻塞队列已满 走拒绝策略代码如下:package day10.part2;import java.util.con

2021-01-13 20:11:31 305

原创 十二、偏向锁、轻量级锁、重量级锁,锁的膨胀过程

1、对象的状态有几种:无锁、偏向锁、轻量级锁、重量级锁、GC标记,共5个状态2、锁的膨胀过程无锁:程序多线程执行过程中没有去执行synchronized修饰区域或者方法。偏向锁:发生在程序单线程执行过程中,由始至终只有一个线程去执行过synchronized修饰区域或者方法,由于是由始至终只有一个线程去执行所以没有发生竞争、等待、抢锁的情况,它不会调用操作系统的函数去实现同步。轻量级锁:发生在程序多线程执行过程中有去执行synchronized修饰区域或者方法,且没有发生竞争、等待、抢锁的情况或

2021-01-11 20:01:02 307

原创 十一、synchronized、volatile、AtomicInteger三者对比和总结

1、synchronized加了synchronized,每次都从主存中去读取数据,这样就能读取到新数据了。但是一加锁,每次只能有一个线程访问,当一个线程持有锁时,其他的就会阻塞,效率就非常低了。不想加锁,又要解决内存可见性问题,那么就可以使用volatile关键字。2、volatile当一个共享变量被volatile修饰时,它会保证修改的值除了存储进自己缓存中,还会立即被更新到主存,并将其他线程中该变量的引用置为无效,当有其他线程需要使用该变量时,它会先检查该变量是否还有效,如果无效则去内存中读取新

2021-01-08 12:11:12 349

原创 十、Atomic和ABA问题

1、原子类AtomicInteger的API讲解package day05.part1;import java.util.concurrent.atomic.AtomicInteger;/** * 原子类AtomicInteger的API讲解 * @author xzq */public class AtomicTest01 { public static void main(String[] args) { /* *空参数 默认为0

2021-01-07 20:53:05 440

原创 九、Exchanger 线程间数据交换工具

1、可以实现一对线程间数据交换,只能是一对线程之间package day04.part1;import java.util.concurrent.Exchanger;/** * 线程间数据交换工具 * 可以实现一对线程间数据交换,只能是一对线程之间 * @author xzq */public class ExchangerTest01 { public static void main(String[] args) { final Exchanger<S

2021-01-06 19:38:09 216

原创 八、Semaphore 信号灯介绍

1、Semaphore 是什么Semaphore 通常我们叫它信号量, 可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。可以把它简单的理解成我们停车场入口立着的那个显示屏,每有一辆车进入停车场显示屏就会显示剩余车位减1,每有一辆车从停车场出去,显示屏上显示的剩余车辆就会加1,当显示屏上的剩余车位为0时,停车场入口的栏杆就不会再打开,车辆就无法进入停车场了,直到有一辆车从停车场出去为止。2、使用场景朱勇用于那些资源有明确访问数量限制的场景,常用于限流 。比如:数据库连

2021-01-06 19:32:22 199

原创 七、CountDownLatch和CyclicBarrier案例以及区别

CyclicBarrier和CountDownLatch 都位于java.util.concurrent 这个包下总结:CountDownLatch 主要用来解决一个线程等待多个线程的场景,可以类比旅游团团长要等待所有游客到齐才能去下一个景点。而 CyclicBarrier 是一组线程之间的相互等待,可以类比几个驴友之间的不离不弃,共同到达某个地方,再继续出发,这样反复。1、CountDownLatch实现并行处理最后汇总结果的功能package day03.part3;import jav

2021-01-05 20:38:48 157

原创 六、LockSupport

1、为什么使用LockSupport类如果只是LockSupport在使用起来比Object的wait/notify简单,那还真没必要专门讲解下LockSupport。最主要的是灵活性。①LockSupport不需要在同步代码块里 。所以线程间也不需要维护一个共享的同步对象了,实现了线程间的解耦。②unpark函数可以先于park调用,所以不需要担心线程间的执行的先后顺序。上边的例子代码中,主线程调用了Thread.sleep(1000)方法来等待线程A计算完成进入wait状态。如果去掉Threa

2021-01-05 20:19:47 224 1

原创 五、读写锁-ReentrantReadWriteLock

这里介绍读写锁的演变1、使用synchronized来控制读写使用synchronized 对修改、删除、添加操作加锁,对查询操作不加锁时就会产生脏读。如下代码,对写加synchronized 读不加package deadlock;/** * 演示脏读 * 对修改、删除、添加操作加锁, * 对查询操作不加锁时就会产生脏读 * 写的过程中 不能查看 要互斥 * @author xzq */public class DirtyRead { static class Perso

2021-01-05 18:18:11 188

原创 四、synchronized、nodify的bug案例

1、生产者消费者模式使用nodify的弊端-死锁该实例中消费者吃完了后本来是唤醒生产者生产油条 但把另一个消费者唤醒了,然后被唤醒的消费者开始吃 发现没有了就开始wait而此时生产者并没有被唤醒也在wait 就导致大家都在wait 导致死锁下面代码为死锁情况package ProducerAndConsumer;/** * 死锁了 * 生产者消费者模式使用nodify的弊端: * 有可能会唤醒本类的线程即: * 在多生产这多消费者的时候会出现 * 消费者唤醒消费者,生产者唤醒生产者而的情

2021-01-05 16:48:01 379

原创 三、线程间的通信

下面程序会有什么问题package examination;import java.util.ArrayList;import java.util.List;/** * taobao examination * 实现一个容器,提供两个方法,add和size * 写两个线程,线程1添加10个元素到容器中, * 线程2实现监控元素的个数,当个数到5个时, * 线程2给出提示并结束 * @author xzq */public class Examination01 { pu

2020-12-31 19:14:07 159

原创 二、volatile可见性和原子性分析

1、volatile关键字的作用每个线程都有自己的缓存区,如下例子,线程1和线程2的缓存区中b=0线程2在修改t.b=2;时 线程1是不可见的。为了解决b的值更新以后对应的缓存区里的b的值也同步更新使用volatile关键字public volatile int b = 0;package volat;/** * volatile关键字,用于修饰变量,是一个变量 在多个线程间是可见的 * 在多个线程共享同一个变量的时候,可能会出现内存不可见的情况 * @author xzq */pu

2020-12-31 17:37:08 1021

原创 一、多线程常见注意事项

1:线程安全示例线程1:a=5 执行 a – 此时 a=4 cpu切换线程执行线程2: a=4 执行a-- 此时 a=3 打印a=3线程1:打印,此时a=3线程3:a=3 执行a-- 此时 a=2,打a=2线程4:a=2执行a-- 此时 a=1,打a=1线程5:a=1 执行a-- 此时 a=0,打a=0可以看出线程1还未结束a的值已经被线程2减一等于3了。...

2020-12-31 14:33:23 1132

原创 四、springboot 整合dubbo

1:创建api该api项目为Java项目,结构如下2:创建provider结构如下添加依赖<?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.or

2020-12-29 21:15:25 226 2

原创 三、SpringBoot整合Redis

1:pom.xml文件中引入jar包 <!--springboot redis包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependen

2020-12-25 18:38:20 232 1

空空如也

空空如也

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

TA关注的人

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