- 博客(30)
- 收藏
- 关注
原创 多线程通信之CountDownLatch,CyclicBarrier,Semaphore的使用
高级版CountDownLatch,可在循环中使用,调用reset方法重置计数。1.线程之间通信之CountDownLatch的使用。2.线程之间通信之CyclicBarrier的使用。主线程等待两个子线程执行完任务再继续向下执行。3.线程之间通信之Semaphore的使用。信号量,可以用作流控,控制请求的并发个数。
2023-05-31 17:46:10
132
原创 CompletableFuture使用总结
1.调用CompletableFuture的静态方法创建一个线程来执行任务。2.如果需要在一个线程执行完成后紧接着再做一些处理。4.等待执行完任务一与任务二后,接着再执行新的任务。5.只要任务一与任务二其中一个完成,就执行任务三。6.等待所有任务完成后,再执行新的任务。7.所有任务只要有一个执行完。
2023-05-31 16:15:43
173
原创 ReentrantLock加锁源码分析
ReentrantLock实现了Lock接口,Lock接口定义了一些对锁操作的方法,我们先看Lock接口里面的一些方法public interface Lock { //获取锁 void lock(); //获取锁,获取锁的过程中被打断,抛出InterruptedException void lockInterruptibly() throws InterruptedException; //尝试获取锁,获取成功返回true,否则返回false boolea
2021-10-24 23:58:00
176
原创 手写一个LRU算法
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。public class Lru{ private Hashtable<Object,Node> hashtable=new Hashtable<>(); private No
2021-10-12 16:40:53
116
原创 redis主从复制,读写分离
redis作为当前一款非常热门的缓存中间件,是现在面试必问的知识了。所以今天就说下redis的主从复制了下面讲下操作redis去实现主从复制读写分离的两种方式:①:通过命令行开启:slaveof host port②:通过配置文件写死,这样可以一启动redis就实现了,不用我们再去手敲可以通过info replication命令查看主从信息:踩过的坑:①配置文件里面bind ip 只设置了本地,所以从服务器连接不上主服务器,需要在配置文件里面改下②连接redis一般都会设置密码,所以需要从.
2021-09-25 23:57:41
301
1
原创 如何在分布式系统下实现单点登录
什么是单点登录单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。有很多应用,比如我们登录某东,某宝购买商品,我们在首页登陆后,就能在任何页面直接下单,付款,而不需要再次验证用户是否登录。像某东某宝这样大的网站肯定在全国各地都有服务器,并且一个微服务就能跑成百上千台服务器,微服务间又相互调用,比如订单微服务调用,支付微服务,支付成功后又要调用库存服务,之后又要调用物流服务。要是
2021-09-17 20:13:19
1189
2
原创 复习代理模式
文章目录静态代理JDK动态代理Cglib动态代理静态代理被代理对象实现的接口:/** * @author xwm * @email 2825902051@qq.com * @date 2021/9/13 0013 * @time 18:51 */public interface Computer { //出售电脑 double sellComputer(double price);}被代理对象:public class Lenovo implements Compu
2021-09-13 20:48:58
91
原创 MySQL进阶(三)
文章目录锁概述锁的分类MySQL锁MyISAM表锁事务及其ACID属性InnoDB行锁案例锁概述锁是计算机协调多个进程或线程并发访问某一资源的机制(避免争抢)。在数据库中,除传统的计算资源(如 CPU、RAM、I/O 等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。锁的分类从对数据操作的力度分:表锁:操作时,会锁定
2021-09-09 17:53:01
78
原创 MySQL进阶(二)
文章目录避免索引失效SQL优化大批量插入数据优化insert语句优化order by语句优化group by 语句优化嵌套查询优化OR条件优化分页查询使用SQL提示SQL执行顺序避免索引失效先创建复合索引create index idx_seller_name_sta_addr on tb_seller(name,status,address);全值匹配 ,对索引中所有列都指定具体值。该情况下,索引生效,执行效率高。最左前缀法则,如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左
2021-09-04 23:00:12
152
原创 MySQL进阶(一)
文章目录Mysql的体系结构连接层服务层引擎层存储层存储引擎各存储引擎的特性InnoDBMyISAM存储引擎的选择优化SQL查看SQL执行频率定位低效率执行SQLexplain分析执行计划Mysql的体系结构Connection Pool : 连接池组件Management Services & Utilities : 管理服务和工具组件SQL Interface : SQL接口组件Parser : 查询分析器组件Optimizer : 优化器组件Caches & Buff
2021-08-31 17:55:26
125
原创 锁的四种状态与升级过程
文章目录前言java对象头Synchronized无锁偏向锁偏向锁的批量再偏向(Bulk Rebias)机制轻量级锁重量级锁前言锁的状态总共有四种,级别依次由高到低为无锁->偏向锁->轻量级锁->重量级锁.在jdk1.6以前,只有无锁和重量级锁两种状态,synchronized是一个重量级锁,是一个效率低下的锁.在jdk1.6后JVM引入了偏向锁和轻量级锁,为的是提高synchronized的效率.锁的四种状态会随着线程的竞争逐渐升级,且不能降级.java对象头Hotspot 的对
2021-08-28 22:13:07
1244
原创 对象的实例化过程与内存布局
文章目录常见的创建对象的几种方式创建对象的过程是怎么样的?对象的内存布局对象头实例数据对齐填充直接内存非直接缓存区直接缓存区常见的创建对象的几种方式通过new关键字创建对象通过反射调用无参构造或者有参构造创建对象对象实现了Cloneable接口,可以通过clone()方法创建对象通过序列化创建对象创建对象的过程是怎么样的?①先判断该类是否加载,链接,初始化:虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引
2021-08-27 23:12:47
332
原创 JVM中的方法区
文章目录方法区栈、堆、方法区的交互关系方法区的理解HotSpot中方法区的演进设置方法区大小与OOM如何解决这些OOM方法区的内部结构方法区存储什么?方法区的内部结构运行时常量池 VS 常量池运行时常量池方法区的演进细节为什么永久代要被元空间替代?StringTable为什么要调整位置?常见面试题方法区栈、堆、方法区的交互关系方法区的理解《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJV
2021-08-23 20:56:52
86
原创 JVM中的堆区
文章目录堆的核心概述堆内存的划分堆内存的设置和OutOfMemory举例年轻代和老年代设置新生代和老年代的占比对象分配过程Minor GC,MajorGC、Full GCMinor GC触发机制Full GC触发机制内存分配策略为对象分配内存:TLAB为什么有TLAB(Thread Local Allocation Buffer)?什么是TLAB?TLAB的再说明逃逸分析:代码优化堆的核心概述堆针对一个JVM进程来说是唯一的,也就是一个JVM进程只有一个堆,一个JVM进程包含多个线程,这些线程是共享同一
2021-08-21 22:45:08
278
原创 JVM虚拟栈
java虚拟机栈是什么?java虚拟机栈,早期也叫java栈。每个线程在创建时都会创建一个虚拟机栈,内部跳转到目录dsfasdhfgdfggdfgdfgdfgdfgdfgdfgdfgdfgdfgdfgdfgdfgdfgdfgdfgdfgdfgdfg目录{#3}...
2021-08-18 11:40:01
78
原创 JVM中的程序计数器
什么是程序计数器(Program Counter Register)?JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。为什么要有程序计数器?任何时刻,一个cpu只能执
2021-08-17 13:19:21
159
原创 JVM中的类加载器子系统
fsd欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑
2021-08-17 12:02:25
109
原创 实现一个二叉堆
二叉堆也是一种二叉树,只不过底层使用数组来实现的,数组元素按照树的结构来摆放,二叉堆,必须满足两个条件:一、是一个完全二叉树,即叶子节点之间的高度要小于等于1。二、父节点必须子节点,注意不是孙子节点,是子节点。比较重要的两个性质:父节点的索引=(左子节点的索引-1)/2=(右子节点的索引-1)/2左子节点的索引=父节点的索引2+1右子节点的索引=父节点的索引2+2有了这些知识就可以自己实现一个二叉堆了public class ErChaDui<T extends Comparable
2021-06-08 22:48:29
260
4
原创 七大排序算法
选择排序package PaiXu;import java.util.Random;/** * 选择排序 */public class XuanZe { public static void main(String[] args) { int[] arr=new int[20000]; for(int i=0;i<arr.length;i++){ arr[i]=new Random().nextInt(100000); System.out.print(arr[
2021-06-03 21:05:28
112
原创 手写一个hashmap
package HashMap;public class LinkedList { private Node head; private int linkedSize; public LinkedList(){ this.head=null; linkedSize=0; } public Node getHead() { return head; } public void setHead(Node head) { this.head = hea
2021-06-03 21:01:24
80
2
原创 实现一个二叉排序树
package ErChaShu;import java.util.ArrayList;import java.util.Random;public class BST<E extends Comparable<E>>{ private class Node{ private E e; private Node left; private Node right; public Node (E e
2021-06-03 20:58:41
71
原创 手动实现一个链表
/** * @author xwm * @email 2825902051@qq.com * @date 2021/4/28 0028 * @time 14:34 */public class MyLinkedList<T> { private Node head; private int size; public Node getHead() { return head; } public void setHead(Nod
2021-06-03 20:57:18
121
原创 spring-boot集成security安全框架新手篇(二)
前面讲了spring-security的简单应用,今天我们来自定义登陆页面,并设置多个不同角色的帐号,不同角色能访问的资源也不一样。废话不所说,直接进入正题。如果不记得之前的,可以点这个链接spring-boot集成security安全框架新手篇(一)我们在templates文件夹下新建4个html页面,分别是login.html(我们自定义的登陆页面),index.html(登陆成功后的页面),admin.html(管理员页面,只有管理员能访问),user.html(用户页面,管理员和用户能访问)再
2021-04-24 13:10:09
174
原创 spring-boot集成security安全框架新手篇(一)
废话不多说直接进入正题在pom文件中添加依赖项<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency>
2021-04-24 12:16:53
154
原创 linux环境下安装nginx遇到的小问题,记录一下。
解压 pcre后,执行./configure时遇到这个make: *** 没有指明目标并且找不到 makefile。 停止。往上看发现是因为这个configure: error: You need a C++ compiler for C++ support.并且没有安装OpenSSL最后执行这两条命令才得以解决问题yum install openssl openssl-devel -yyum install -y gcc gcc-c++安装zlib,这个怎么安装也是问的c...
2021-04-17 00:08:32
75
原创 Ajax实现多文件上传并在页面监听上传进度,以及后端接收文件并写到硬盘
Ajax实现多文件上传前端代码```html<p>上传进度:<span id="span1">0%</span></p><form id="body" enctype="multipart/form-data"> <input type="file" name="file" ><br/> <input type="file" name="file" ><br/> &l
2021-04-10 23:23:31
269
1
原创 用生产者和消费者模型实现交替输出奇数和偶数
用生产者和消费者模型实现交替输出奇数和偶数要求:t1–>1,t2–>2,t1–>3…废话不多说直接上代码package thread;public class MyThread7 { public static void main(String[] args) { Num num=new Num(1); Thread t1=new Thread(new MyRun1(num)); t1.setName("t1");
2021-03-30 12:25:19
133
2
原创 javase阶段简单实现多线程的四种方式
实现多线程的四种方式第一种:public class MyThread extends Thread{ @Override public void run(){ System.out.println("分支线程执行了!"); } public static void main(String[] args){ //创建分支线程对象 MyThread mythread=new MyThread(); //启动分支线程 mythread.start(); System.ou
2021-03-27 16:31:37
108
原创 springboot集成jsp详细步骤
springboot集成jsp详细步骤java菜鸟的第一篇记录文章勿喷哈,虽然你们也看不到哎1.在main文件夹下新建一个webapp2.点击file,选择project structure3.进入当前模块,点击web,点击+,将webapp添加进去,当webapp上出现了小蓝点,表示成功4.在pom.xml中加入依赖5.在pom.xml中指定源文件路径,并指定编译后的目标路径6.在application.properties中配置视图解析器,最后就.
2021-03-24 19:47:43
222
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人