- 博客(58)
- 收藏
- 关注
原创 一、定时任务-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
原创 四、联合索引最左前缀原理
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
原创 十三、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关注的人