- 博客(219)
- 资源 (4)
- 收藏
- 关注
原创 Java并发编程之 并发队列
并发队列文章目录并发队列一、无阻塞队列1. ConcurrentLinkedQueue二、阻塞队列1. ArrayBlockingQueue2. LinkedBlockingQueue3. SynchronousQueue4. PriorityBlockingQueue5. DelayQueueConcurrentLinkedQueue 并发无阻塞队列,BlockingQueue 并发阻塞队列,二者均实现自 Queue 接口所有的并发队列中都不允许加入null值一、无阻塞队列1. Concur
2021-03-26 21:52:44
759
原创 Java并发编程之 常用并发工具类
并发工具类文章目录并发工具类一、CountDownLatch1. 概念2. 代码示例二、CyclicBarrier1. 概念2. 代码实现三、Semaphore1. 概念2. 代码实现3. 公平性四、Exchanger1. 概念2. 代码实现五、ReentrantReadWriteLock1. 概念2. 代码实现六、StampedLock1. 概念2. 写锁3. 乐观读锁4. 悲观读锁一、CountDownLatch1. 概念可以将其理解为一个计数器,创建实例时,构造器中赋予计数器的初始值,实例每
2021-03-26 16:39:59
609
原创 Java并发编程之 线程池
线程池文章目录线程池一、概述二、参数介绍三、ExecutorService接口的介绍1. 接口中常用方法2. 获取接口实例四、带缓存线程池五、固定大小线程池六、单线程线程池七、ScheduledExecutorService接口的介绍1. 接口中常用方法2. 获取接口实例八、时间调度线程池九、拒绝策略1. AbortPolicy2. CallerRunsPolicy3. DiscardOldestPolicy4. DiscardPolicy5. 自定义拒绝策略十、自定义线程池十一、ThreadFactor
2021-03-26 16:31:50
6170
4
原创 Java并发编程之 无锁(CAS)
共享模型之无锁文章目录共享模型之无锁一、CAS 与 volatile1. CAS2. volatile3. 为什么无锁效率高4. CAS 的特点二、原子整数三、原子引用1. AtomicReference2. ABA 问题3. AtomicStampedReference4. AtomicMarkableReference四、原子数组五、原子更新器六、原子累加器LongAdder一、CAS 与 volatileAtomicInteger 的使用举例//创建实例AtomicInteger balan
2021-03-26 16:24:28
777
原创 Java并发编程之 volatile原理
共享模型之内存文章目录共享模型之内存一、Java内存模型二、JMM特点1. 可见性(1) 不可见的情况(2) 出现的原因(3) 解决方法(4) 可见性 vs 原子性2. 有序性三、volatile原理1. 如何保证可见性2. 如何保证有序性3. 注意一、Java内存模型Java 内存模型即 JMM,它从java层面定义了主存(所有线程都共享的数据,比如成员变量等)、工作内存(指的是线程私有的数据,比如局部变量等)JMM 体现在以下几个方面:原子性 - 保证指令不会受到线程切换的影响,比如 syn
2021-03-18 09:38:41
356
1
原创 Java并发编程之 ReentrantLock 介绍
ReentrantLock文章目录ReentrantLock一、活跃性问题1. 死锁2. 活锁3. 饥饿二、ReentrantLock1. 基本介绍2. 可重入3. 可打断4. 锁超时5. 公平锁6. 条件变量一、活跃性问题活跃性:代码是有限的,但由于某种原因代码一直执行不完活跃性有三种情况:死锁、活锁、饥饿活跃性相关的一系列问题都可以用 ReentrantLock 进行解决1. 死锁双方都持有对方需要的锁,且不解锁,都在等待对方释放锁,导致二者谁都无法进行下去@Slf4j(topic =
2021-03-17 15:12:09
382
2
原创 Java并发编程之 park & unpark 方法
park & unpark文章目录park & unpark1 基本使用2 park & unpark 原理先调用park再调用unpark的过程先调用unpark再调用park的过程1 基本使用它们是 LockSupport 类中的方法// 暂停当前线程,在哪个线程中调用就对哪个线程进行操作,此线程进入wait状态(阻塞状态)LockSupport.park();// 恢复某个线程的运行,参数中传递需要恢复的线程// unpark方法可以在park之前 / 之后调用
2021-03-16 21:15:34
1545
原创 Java并发编程之 锁升级过程
阅读本文档前需了解的前置知识:进程和线程的概念并发和并行的概念创建线程的三种方式线程常见方法线程的五种状态及其转换synchronized优化原理文章目录synchronized优化原理一、Monitor介绍1. 对象头2. Monitor原理二、synchronized原理1. 轻量级锁2. 锁膨胀3. 自旋优化4. 偏向锁(1) 概念(2) 偏向状态(3) 偏向锁失效的情况i. 调用hashcode()方法ii. 其他线程使用对象iii. 调用wait / notify()方法(4)
2021-03-15 21:46:35
404
原创 Java定时任务之Quartz
Quartz文章目录Quartz1. Quartz是什么2. HelloWorld程序3. 使用JobDetail3.1 JobDetail介绍3.2 JobDetail属性4. 使用Trigger5. 使用SimpleTrigger6. 使用CronTrigger6.1 CronTrigger介绍6.2 Cron表达式示例6.3 Cron表达式案例7. 使用Scheduler7.1 Scheduler工厂模式7.2 Scheduler主要函数8. quartz.properties配置文件的使用8.1
2021-03-14 22:08:06
654
原创 Java定时任务之Timer
Timer文章目录Timer一、任务调度简介二、调度工具简介三、Timer的定义四、Timer的使用步骤五、schedule()的四种用法六、scheduleAtFixedRate()的两种用法七、TimerTask的两个重要函数八、Timer的其他函数九、schedule()与scheduleAtFixedRate()的区别十、Timer的缺陷一、任务调度简介基于给定的时间点、时间间隔、执行次数自动的执行给定的任务二、调度工具简介Java中常用的调度工具分类两类:Timer、QuartzT
2021-03-14 22:03:26
494
原创 SpringBoot 整合 JWT 步骤
文章目录一、JWT使用步骤二、SpringBoot整合JWT一、JWT使用步骤引入依赖<dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.4.0</version></dependency>生成token//用来给令牌设置过期时间Calendar
2021-03-13 21:20:33
616
原创 SpringBoot 发送电子邮件
SpringBoot发送电子邮件文章目录SpringBoot发送电子邮件一、项目配置1. 导入依赖2. 开启邮箱的SMTP协议3. 配置文件进行配置二、发送简单文本邮件三、发送HTML邮件四、发送带附件的邮件五、发送带图片的邮件六、发送模板邮件七、常见异常一、项目配置1. 导入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boo
2021-03-10 16:28:17
3275
2
原创 MySQL SQL语句调优
SQL语句调优文章目录SQL语句调优一、大批量插入数据1. 主键顺序插入2. 关闭唯一性校验3. 手动提交事务二、优化insert语句三、优化order by语句1. 环境准备2. 两种排序方式3. 多字段排序的优化4. filesort的优化四、优化group by语句五、优化嵌套语句六、优化or条件七、优化分页查询1. 优化思路一2. 优化思路二八、使用SQL提示1. USE INDEX2. IGNORE INDEX3. FORCE INDEX一、大批量插入数据大批量数据存在本地文件中,使用loa
2021-03-06 20:00:05
2174
原创 MySQL 索引的使用
索引的使用文章目录索引的使用1. 准备环境2. 避免索引失效的方式(1) 全值匹配(2) 最左前缀法则(3) 覆盖索引(4) 复合索引3. 索引失效的情况查看索引使用情况1. 准备环境create table `tb_seller` ( `sellerid` varchar (100), `name` varchar (100), `nickname` varchar (50), `password` varchar (60), `status` varchar (1), `address
2021-03-06 17:59:34
405
原创 MySQL 触发器
触发器1 介绍触发器是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作 。使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。触发器类型NEW 和 OLD的使用INSERT 型触发器NEW 表示将要或者已经新增的数据UPDATE
2021-03-05 18:08:33
239
原创 MySQL 游标 / 光标
游标/光标游标cursor是用来存储查询结果集的数据类型 , 在存储过程和函数中可以使用光标对结果集进行循环的处理。光标的使用包括光标的声明、OPEN、FETCH 和 CLOSE,其语法分别如下:声明光标:DECLARE cursor_name CURSOR FOR select_statement ;OPEN 光标:OPEN cursor_name ;FETCH 光标:从第一行开始,每次FETCH获取到的是游标中的一整行的数据,再次调用自动读取下一行的数据将获取到的数据通过关键字 IN
2021-03-05 17:18:16
382
原创 MySQL show profile指令分析SQL耗时
show profile指令分析SQLMysql从5.0.37版本开始增加了对 show profiles 和 show profile 语句的支持。show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里去了通过 have_profiling 参数,能够看到当前MySQL是否支持profile:默认profiling是关闭的,0表示未开启,可以通过set语句在Session级别开启profiling:set profiling=1; /*开启 profiling 开关*/
2021-03-05 16:44:20
876
2
原创 MySQL explain指令详解
explain指令分析执行计划文章目录explain指令分析执行计划查询结果各字段含义1. id列2. select_type列3. table列4. type列5. key列6. rows列7. extra列explain只能解释select查询,并不会对存储过程调用和insert,update,delete或其他语句做解释通过以上步骤查询到效率低的 SELECT 语句后,可以通过 EXPLAIN命令获取 MySQL如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和
2021-03-05 16:41:28
419
原创 MySQL 定位低效率SQL
定位低效率SQL可以通过以下两种方式定位执行效率较低的 SQL 语句慢查询日志 : 用–log-slow-queries[=file_name]选项启动时,mysqld 写一个包含所有执行时间超过 long_query_time 秒的 SQL 语句的日志文件。慢查询日志在查询结束以后才记录,所以在应用反映执行效率出现问题的时候慢查询日志并不能定位问题show processlist 指令: 可以使用show processlist命令查看某一MySQL线程的详细信息,可以实时地查看 SQL 的执行情
2021-03-05 16:38:37
260
原创 MySQL 存储引擎
存储引擎文章目录存储引擎1. Mysql的体系结构概览2. 存储引擎2.1 存储引擎概述2.2 各种存储引擎特性2.2.1 InnoDB2.2.2 MyISAM2.3 存储引擎的选择1. Mysql的体系结构概览整个MySQL Server由以下组成Connection Pool : 连接池组件Management Services & Utilities : 管理服务和工具组件SQL Interface : SQL接口组件Parser : 查询分析器组件Optimizer :
2021-03-04 17:02:34
272
1
原创 MySQL 索引 B树 B+树
索引文章目录索引一、索引1. 基本介绍2. 使用索引的优势、劣势3. 索引类型4. B树结构5. B+树结构6. MySQL中的B+树7. 索引分类8. 索引语法(1) 创建索引(2) 查看索引(3) 删除索引(4) 修改索引9. 索引设计原则一、索引1. 基本介绍索引(index)是帮助MySQL高效获取数据的数据结构(有序)在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引
2021-03-03 13:06:25
524
原创 JVM入门(三) 类文件结构
类文件结构提示:文章含有大量图片文章目录类文件结构类文件结构1. 概述2. 魔数3. 版本4. 常量池5. 访问标识和继承信息6. 字段 (成员变量)7. 方法8. 属性9. 参考文档类文件结构1. 概述一个简单的HelloWorld.java程序经过 javac.exe命令之后编译成的.class文件如下每行中第一列表示每行八进制形式的编号每行中其余列表示的是十六进制的标识根据 JVM规范,.class类文件结构如下ux表示x个字节,如u4表示前4个字节是魔数
2021-03-02 20:25:05
290
原创 JVM入门(二) GC垃圾回收
GC垃圾回收文章目录GC垃圾回收一、如何判断对象可以回收1. 引用计数法2. 可达性分析算法3. 四种引用1)强引用2)软引用3)弱引用4)虚引用二、垃圾回收算法1. 标记清除2. 标记整理3. 复制三、分代回收1. 定义2. 工作机制3. 大对象4. 相关虚拟机参数四、垃圾回收器1. 分类2. 串行垃圾回收器3. 并行垃圾回收器4. 并发垃圾回收器5. G1垃圾回收器1)简介2)G1垃圾回收阶段i. 新生代回收ii. 并发标记iii. 混合回收 (新生代回收 + 老年代回收)3)跨代引用一、如何判断
2021-02-28 15:07:35
377
原创 JVM入门(一) JVM内存结构
JVM内存结构文章目录JVM内存结构一、什么是JVM二、程序计数器1. 定义2. 特点三、虚拟机栈1. 定义2. 问题辨析3. 内存溢出四、本地方法栈五、堆 (Heap)1. 定义2. 内存溢出六、方法区1. 定义2. 内存结构图3. 常量池与运行时常量池4. 字符串常量池 (StringTable)1)常见面试题2) 串池所在位置3)串池垃圾回收4)串池调优七、直接内存1. 基本介绍2. 直接内存的溢出和释放一、什么是JVMJava Virtual Machine—java程序的运行环境(jav
2021-02-25 14:58:23
469
2
原创 MyBatis-Plus的入门使用
MyBatis - Plus本文基于SpringBoot整合MyBatis-Plus文章目录MyBatis - Plus一、简介二、快速入门三、主键策略1. 自增长2. UUID3. Redis实现4. MP自带策略5. 使用主键策略四、自动填充五、实现乐观锁六、查询七、分页八、删除1. 物理删除2. 逻辑删除九、性能分析插件十、Wrapper条件查询一、简介MyBatis-Plus(MP)是一个 MyBatis 的增强工具,在MyBatis的基础上只做增强不做改变,简化开发二、快速入门创建数
2021-02-23 12:23:18
480
原创 MyBatis-Plus之Wrapper条件构造器
Wrapper条件构造器文章目录Wrapper条件构造器一、wapper介绍二、AbstractWrapper1、ge(>=)、gt(>)、le、lt、isNull、isNotNull2、eq、ne3、between、notBetween4、allEq5、like、notLike、likeLeft、likeRight6、in、notIn、inSql、notinSql、exists、notExists7、or、and8、嵌套or、嵌套and9、orderBy、orderByDesc、orderB
2021-02-23 12:18:38
1539
1
原创 JWT令牌的快速入门
文章目录JWT一、JWT概述1. 简介2. 作用3. 传统Session认证的缺点二、JWT结构三、JWT认证流程及优势1. JWT认证流程文字概述2. JWT认证图示流程3. JWT优势JWT一、JWT概述1. 简介JWT简称JSON Web Token,也就是通过JSON形式作为Web应用中的令牌,用于在各方之间安 全的将信息作为JSON对象传输;在数据传输过程中还可以完成数据加密、签名等相关处理2. 作用(1) 授权JWT的最常见方案;一旦用户登录,每个后续请求将包括JWT,从而允许用户
2021-02-17 19:43:42
476
原创 HTTP协议详细总结
计算机网络全总结:计算机网络五层体系结构总结HTTPS协议的总结:近期更新~文章目录HTTP协议一、了解HTTP协议1. 浏览器背后的故事2. 两个概念3. HTTP协议的概念4. DNS的介绍5. HTTP事务处理过程二、HTTP协议的特点1. 支持客户/服务器模式2. 简单快速3. 灵活4. 无连接5. 无状态三、区分URI和URL四、HTTP报文结构分析1. 请求报文结构2. 响应报文结构3. HTTP报文头4. 报文头常见字段AcceptAccept-EncodingAccept-Languag
2021-02-15 16:34:16
5148
6
原创 Shiro安全框架快速入门
Shiro安全框架入门Shiro安全框架实战:基于前后端分离,技术选型:SpringBoot2.x + Mysql + Mybatis + Shiro + Redis + IDEA + JDK8 ,链接地址:[近期更新]文章目录Shiro安全框架入门一、权限框架设计之ACL和RBAC讲解1. 权限控制概念2. ACL和RBAC的概念二、主流权限框架介绍三、Apache Shiro基础概念知识和架构讲解1. Shiro四大核心模块2. 访问Shiro的权限控制运行流程和常见名称讲解四、Springboo
2021-02-08 11:34:29
746
1
原创 IDEA查看类和接口的继承关系图
文章目录1. 查看继承关系图2. 查看关系图中详细的方法等信息方式一方式二1. 查看继承关系图效果如图:蓝色实线箭头是指继承关系绿色虚线箭头是指接口实现关系2. 查看关系图中详细的方法等信息方式一方式二...
2021-02-06 11:55:30
494
原创 IDEA查看方法所在接口实现类的快捷键
1. 查找接口的实现类:Ctrl + H2. 跳转到指定方法的接口:Ctrl + 鼠标左键输入快捷键+点击之后跳转至下图3. 跳转到指定方法的接口的实现类:Ctrl + Alt + 鼠标左键输入快捷键+点击之后跳转至下图......
2021-02-06 11:35:34
13531
3
原创 ZooKeeper的基本使用
Zookeeper文章目录Zookeeper一、ZooKeeper概述二、ZooKeeper安装三、ZooKeeper数据模型四、ZooKeeper命令行操作五、ZooKeeper JavaAPI操作六、ZooKeeper集群介绍一、ZooKeeper概述ZooKeeper是一个开源的分布式应用程序的协调服务,是一个树形目录的服务ZooKeeper提供的主要功能包括配置管理、分布式锁、集群管理二、ZooKeeper安装前提需要Linux中已经安装了JDK7或更高版本将ZooKe
2021-02-01 16:39:50
2805
2
原创 Lombok 快速上手
Lombok文章目录Lombok1. 作用2. 安装3. 使用1. 作用JavaBean中无需手动编写getter、setter、toString、构造器等,只需使用注解即可导入上述内容2. 安装(1) pom.xml中引入依赖<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <!--Sprin
2021-01-27 10:12:59
266
原创 模块化、Webpack 快速上手
一、模块化的使用1. 概念前端中js文件与js文件的相互调用称为模块化2. ES5实现模块化(1) 创建01.js文件(被调用)//1. 创建js方法const sum = function(a,b){ return parseInt(a) + parseInt(b)}const subtract = function(a,b){ return parseInt(a) - parseInt(b)}//2. 设置哪些方法可以被其他js调用module.exports =
2021-01-25 13:08:50
405
原创 Bable的快速入门
Bable的使用文章目录Bable的使用1. 概念2. 安装3. 使用1. 概念Bable是一个转换器,可以将ES6代码转换成ES5代码,因为浏览器对ES5代码支持性较好2. 安装(1) 执行指令npm install --global babel-cli即可安装(2) 执行指令bable --version查看是否安装成功3. 使用(1) 创建两个文件夹及01.js文件,编写ES6格式的代码let input = [1, 2, 3]input = input.map(item =&
2021-01-25 13:06:23
864
原创 前端知识之Node.js、npm
一、Node.js的使用文章目录一、Node.js的使用1. 概述2. 作用3. 安装Node.js4. 使用VScode及Node.js运行JS文件二、npm的使用1. 概念2. 下载和安装3. 初始化npm项目4. 修改npm镜像5. 安装依赖6. 根据package.json及package-lock.json文件下载依赖7. 其他指令1. 概述Node.js是基于Google的V8引擎的运行在服务端的JavaScript运行环境2. 作用(1) 不需要浏览器即可运行JavaScript语言
2021-01-25 13:03:24
614
原创 Redis基础知识入门
Redis文章目录Redis一、Redis概述二、Redis应用场景三、Redis的下载和安装四、Redis服务的启动五、Redis命令行工具六、Redis基础知识七、Redis数据类型1. key (键)2. String (字符串)3. List (列表)4. Set (集合)5. Zset (有序集合)6. Hash (哈希)八、实践案例九、Redis常用查询指令十、Jedis的使用十一、Redis可视化工具十二、持久化概念十三、RDB十四、AOF十五、AOF重写十六、RDB与AOF的选择一、Re
2021-01-25 12:12:55
47585
18
原创 Java8新特性 Lambda表达式
链接:https://pan.baidu.com/s/1AQHQc10wc6R-e7AhOVo2QA提取码:xk1o复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V3的分享
2021-01-24 16:53:01
1142
24
原创 Dubbo快速入门
Dubbo文章目录Dubbo一、Dubbo概述二、Dubbo运行示例三、序列化四、地址缓存五、超时六、重试七、多版本八、负载均衡九、集群容错十、服务降级一、Dubbo概述Dubbo是一个Java RPC框架,用于提供高性能的远程服务调用方案和SOA服务治理方案简单来说,Dubbo用于给消费方提供调用接口 (将接口注册到注册中心中)Dubbo运行流程图节点角色说明:● Provider: 暴露服务的服务提供方● Consumer: 调用远程服务的服务消费方● Container
2021-01-22 13:16:41
626
原创 互联网架构概述 互联网架构演变过程
互联网架构概述文章目录互联网架构概述一、互联网架构特点二、衡量网站性能的指标三、互联网架构目标四、集群和分布式五、互联网架构演变1. 单体架构2. 垂直架构3. 分布式架构4. SOA架构5. 微服务架构一、互联网架构特点用户多流量大,高并发海量数据易受攻击功能繁琐变更快二、衡量网站性能的指标响应时间:发送一个请求到收到响应数据所花费的时间并发数:系统同时能处理的请求数量并发连接数:每秒钟服务器的总TCP连接数量请求数:每秒钟的请求数量并发用户数:单位时间内的用户数量吞吐
2021-01-22 13:02:55
4724
4
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人