自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (1)
  • 收藏
  • 关注

原创 Redis的缓存淘汰策略

​​​​​​​定期删除策略的难点是确定删除操作执行的时长和频率:如果删除操作执行得太频繁或者执行的时间太长,定期删除策略就会退化成立即删除策略,以至于将CPU时间过多地消耗在删除过期键上面。如果删除操作执行得太少,或者执行的时间太短,定期删除策略又会和惰性删除束略一样,出现浪费内存的情况。定期删除策略的难点是确定删除操作执行的时长和频率:如果删除操作执行得太频繁或者执行的时间太长,定期删除策略就会退化成立即删除策略,以至于将CPU时间过多地消耗在删除过期键上面。

2024-08-17 16:58:46 1006

原创 redis 分布式锁

如果执行完setnx加锁,正要执行expire设置过期时间时,进程crash或者要重启维护了,那么这个锁就“长生不老”了,「别的线程永远获取不到锁啦」。那线程a就把线程b的锁释放掉了,但是线程b临界区业务代码可能都还没执行完呢。如果锁过期的时候,并发多个客户端同时请求过来,都执行jedis.getSet(),最终只能有一个客户端加锁成功,但是该客户端锁的过期时间,可能被别的客户端覆盖。既然锁可能被别的线程误删,那我们给value值设置一个标记当前线程唯一的随机数,在删除的时候,校验一下,不就OK了嘛。

2024-08-14 16:54:45 826

原创 redis 缓存双写一致性

如果业务层要求必须读取一致性的数据,那么我们就需要在更新数据库时,先在Redis缓存客户端暂停并发读请求,等数据库更新完、缓存值删除后,再读取数据,从而保证数据一致性,这是理论可以达到的效果,但实际,不推荐,因为真实生产环境中,分布式下很难做到实时一致性,一般都是最终一致性。也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存,达到一致性,切记,要以mysql的数据库写入库为准。给缓存设置过期时间,定期清理缓存并回写,是保证最终一致性的解决方案。

2024-08-13 22:40:49 657

原创 redis bigKey 场景

3、lazyfree-lazy-user-del no: 这个选项用于控制Redis服务器删除键时的行为,与lazyfree-lazy-server-del选项类似。当设置了lazyfree-lazy-user-del选项为no时,服务器会立即删除键,而不延迟删除操作。1、lazyfree-lazy-server-del no: 这个选项用于控制Redis服务器删除键时的行为。当设置lazyfree-lazy-server-del选项为no时,服务器会立即删除键,而不延迟删除操作。计算每个键值的字节数。

2024-08-13 22:18:44 353

原创 redis为什么用单线程

8.1 Redis自身出道就是优秀,基于内存操作、数据结构简单、多路复用和非阻塞 I/O、避免了不必要的线程上下文切换等特性,在单线程的环境下依然很快8.2 但对于大数据的key删除还是卡顿厉害,因此在Redis 4.0引入了多线程unlink key/flushall async等命令,主要用于Redis数据的异步删除8.3 Redis 6.0将网络数据读写、请求协议解析通过多个IO线程的来处理,而命令的执行依旧是由主线程串行执行的,因此在多线程下操作Redis不会出现线程安全的问题。

2024-08-13 22:09:52 771

原创 Redis 缓存预热、雪崩、穿透、击穿

缓存雪崩就是瞬间过期数据量太大,导致对数据库服务器造成压力。、定时任务、手动处理 提前将数据设置到缓存中。

2024-08-12 22:43:39 537

原创 简述 BIO 、NIO 模型

即客户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,此处可以通过。

2024-05-06 17:36:54 1077

原创 java 中的动态代理实现

相比于静态代理, 动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法。代理模式是常见的设计模式之一,顾名思义,代理模式就是代理对象具备真实对象的功能,并代替真实对象完成相应操作,并能够在操作执行的前后,对操作进行增强处理。代理模式就是为其他对象提供一种代理来控制这个对象的访问,在某些情况下一个对象不适合或不能直接引用另一个对象,而代理对象可以在客户类和目标对象直接起到中介的作用。这时,可以在a和c之间创建一个b类代理,a类访问b类,b类访问c类。生成的代理类源码方法。

2023-06-02 09:32:17 936

原创 CyclicBarrier 如何使用

CyclicBarrier的作用CyclicBarrier循环栅栏和CountDownLatch很类似,都能阻塞—组线程。当有大量线程相互配合,分别计算不同任务,并且需要最后统一汇总的时候,我们可以使用CyclicBarrier。CyclicBarrier可以构造一个集结点,当某一个线程执行完毕,它就会到集结点等待,直到所有线程都到了集结点,那么该栅栏就被撤销,所有线程再统一出发,继续执行剩下的任务。CyclicBarrier 和 CountDownLatch的区别作用不同: CyclicBarr

2022-04-27 21:22:35 672

原创 java 中的 Condition 条件对象学习小记

Condition介绍condition用 await(), signal, signalAll方法替代Object 中的 wait(), notify()condition的await,signal和 wait,notify都需要在锁之间运行contidion也被用来实现阻塞队列condition是通过锁创建出来的。基本代码是 ReentrantLock.newCondition()Condition 的作用当线程1需要等待某个条件的时候,它就去执行condition.await()方法,

2022-04-27 20:31:56 619

原创 java 中的 Semaphore 信号量学习小记

Semaphore 学习小记Semaphore是JDK提供的一个同步工具,它通过维护若干个许可证来控制线程对共享资源的访问。信号量的作用是维护一个 “许可证” 的计数,线程可以获取 “许可证”,那信号量剩余的 “许可证” 减一,线程可以释放一个许可证,那 “许可证” 的数量就加一, 当信号量所拥有的许可证是0 时候,那么下一个获取许可证的线程就需要等待,只能有另外的线程释放了许可证。Semaphore 信号量的使用流程1.初始化Semaphore并许可证的数量Semaphore(int perm

2022-04-27 13:46:55 516

原创 CountDownLatch 学习小记

CountDownLatch 学习小记CountDownLatch并发流程控制的工具,可以使一个或多个线程等待其他线程各自执行完毕后再执行。CountDownLatch 定义了一个计数器,和一个阻塞队列, 当计数器的值递减为0之前,阻塞队列里面的线程处于挂起状态,当计数器递减到0时会唤醒阻塞队列所有线程,这里的计数器是一个标志,可以表示一个任务一个线程,也可以表示一个倒计时器,CountDownLatch可以解决那些一个或者多个线程在执行之前必须依赖于某些必要的前提业务先执行的场景。CountDown

2022-04-26 13:58:44 389

原创 Future 和 Callable 学习小计

Future 和 Callable 学习小计Callable 接口Future 接口Callable 和 Future 的关系get() 方法使用基础使用批量使用get(long,TimeUnit) 使用总结FutureTask 和 Future在java 中使用Thread 或 Runnable创建线程的时候是无法获取线程的返回结果和抛出异常信息的,但 java 中提供了Future 和 Callable 两个接口的可以实现获取子线程的执行结果。Callable 接口类似Runnable,可以被线

2022-04-23 22:51:03 501

原创 java 中的 Annotation 注解学习笔记

java 中的 Annotation 注解什么是注解元注解@Target@Retention@Document@Inherited自定义注解什么是注解Annotation 是从JDK5.0 开始引入的新技术作用1: 可以被程序读取,列如@Value 通过反射使用该注解读取配置文件信息作用2: 本身不是程序,和注释差不多. 如: @Override, @Deprecated 内置注解Annotation 格式以 @注解命名成 在代码中存在,还可以添加一些参数,如: @RequestMapping(

2022-02-09 11:42:22 326

原创 mysql中的 explain 关键字学习笔记

explain 查看sql的执行计划,使用该关键字可以查看分析SELECT 语句在 mysql 中的执行步骤,索引的使用,可以检查该sql 语句和表结构的性能瓶颈,在sql 优化中工作可以说该关键字是相关开发工作人员必会的。用法: explain 查询语句;​​explain 返回结果说明1. id2. select_type3. table4. partitions5. type6. possible_keys7. key8. key_len9. ref10. row11. filtered12.

2022-01-11 09:19:26 473

原创 java 中的进制转换

二进制: 0-1,满2进1,在java中 0b 或者 0B 开头来表示 八进制: 0-7,满8进1,在java中 以 0 开头来表示 十进制: 0-9,满10进1,日常使用的数字就是十进制 十六进制: 0-9 和 A(10)-F(15) ,满16进1,以0x 或者 0X来开头表示进制对照表二进制 八进制 十进制 十六进制 1 1 1 1 10 2 2 2 11 3 3 3 100 ...

2021-09-23 17:53:59 1080

原创 java 线程池学习小记

1. 为什么要是用线程池反复创建线程开销大,用线程池可以让一部分线程一直处于运行状态,避免反复创建 过多的线程池会占用太多的内存,用线程池可以用少量的线程,避免了占用太多内存的问题2. 使用线程池的好处合理的使用cpu和内存资源 加快了响应速度,不需要反复的创建和消费 使用线程池,可以统一管理线程3. 线程池的使用场合服务器接收大量的请求,使用线程池是非常合适的 实际开发中,如果遇到需要创建线程太多的逻辑, 可以使用线程池想要了解线程池,其创建线程池的参数是必须要了解,线程池..

2021-08-31 16:09:14 162

原创 java 中的内部类学习小记

什么是内部类一个类的内部又完整的嵌套另外一个类的结构,被嵌套的类就被称为内部类。 嵌套其它的类的类被就是外部类。内部类是类的五大成员之一。 类的五大成员: 属性、方法、构造器、代码块、内部类。 内部类的最大特点就是可以访问外部类的私有属性。 其内部类在底层代码中大量应用,了解内部类会让你看源码的内功会更上一层楼。java 中一共有四种内部类1. 局部内部类2. 匿名内部类3. 成员内部类4. 静态成员内部类...

2021-08-24 15:01:19 127

原创 java 中对多态的理解

面向对象的三大特性: 封装 、继承、多态。其中多态算是比较重要的一部分,集合框架相关源码中大量应用其三大特性,所以说了解这三大特性,尤其是多态后,让你阅读源码的内功会更上一层楼。多态里面包含封装、继承,也可以说多态是建立在封装和继承的基础之上的。java 中方法或对象具有多种形态,就是面向对象第三大特征,多态建立在封装和继承的基础之上1. 方法的多态就是 重载和重写2. 对象的多态一个对象的编译类型和运行类型可以不一致编译的类型在创建对象的时候就确定了,不能改变运行类型是..

2021-08-18 16:13:21 211

原创 java 中基本数据类型的自动转换和强制转换

在日常开发工作中,经常会遇到基本数据类型的转换。在java中基本数据类型可以分为自动转换和强制转换,下面细说一下这两种类型转换的规则和细节。先列一下基本数据类型和字节数说一下整型 大小 浮点型 大小 字符型 大小 byte 1 double 4 char 2 short 2 float 8 int 4 long 8

2021-08-06 16:11:48 2314

原创 java 线程相关的属性介绍

属性名称用途注意事项id (线程id)标识不同的线程被后续创建的线程使用,唯一性,不能被修改name (线程名称)定位问题开发和排查问题的时候用得到,定义名字要清晰有意义isDaemon (是否是守护线程)守护线程、用户线程1: 继承父线程,2: setDaemon()priority (线程优先级)相对多运行默认和父线程的优先级相等,共有10个等级1.线程id线程id主要用来表示不同的线程的,这个类似数据库的主键id。id从1开始自增。生...

2021-05-26 13:57:31 177 1

原创 Thread和Object类中关于线程的相关方法

Thread和Object类中线程的7个重要方法概览类方法名称简介Threadsleep相关相关表示sleep所有的重载方法,参数不同,实际作用大同小异Threadjoin()等待其它线程执行完毕Threadyield()放弃已经获得的cpu资源ThreadcurrentThread()获取当前线程的引用Threadstart()、run()启动线程相关Threadinterrtupt相关中断线程相关Threadstop(

2021-05-25 17:48:29 442

原创 java 中如何正确的停止线程

停止线程的正确方式1.为什么要停止线程2.为何说要正确的停止线程3.使用interrupt()停止线程3.线程在通常三种情况下停止3.1 普通情况3.2 线程阻塞情况3.3 传递中断情况4.说说被弃用的stop(),suspend() 和 resume()方法5.volatile 方式停止线程5. 响应线程中断的方法6.判断是否中断的相关方法1.为什么要停止线程某个正在进行的线程,用户主动取消的操作服务突然被关闭程序运行超时或者出错2.为何说要正确的停止线程从设计原则上,Java 希望程序

2021-05-24 15:45:20 462

原创 vue 动态生成路由菜单(从后端请求到菜单数据,生成左侧菜单栏)

最近在学习vue,用vue+element ui搞一个管理后台的demo,发现网上好多菜单信息都放在前端js文件中,然后后端返回的角色去匹配对应的菜单信息。我自己不太喜欢这种方式,最后自己写了一套登录成功以后,根据用户的角色返回对应的菜单数据,直接在前端进行渲染。后台体验地址:http://106.13.168.18/#/login下面只是实现了两级菜单目录,如果要实现多级,可以用递归构建,(ps: 这个后续有时间)主要还是将后端传来的菜单数据分为两步1.将数据 "component": .

2021-05-13 14:43:17 4639 7

原创 java中final关键字的使用

final 中文翻译为 最终的,在java中也是较为常用的关键字之一。在java 中 final 关键字可以修饰 类、方法、变量final 修饰在类上,则表示该类不能被继承,如果里面的成员变量没有被final 修饰,在该变量是可变的 。使用场景:该类不想被继承或者该类中的方法都不想被重写 final 修饰在方法上,则表示该方法在继承的时候不能被重写。 final 修饰在类的成员变量上,该变量必须在声明、构造方法、类初始化代码块(这个不常用到) 这个三个地方选择一种来初始化。 final 修饰.

2021-04-13 17:41:33 569

原创 单例模式

1.什么是单例模式在一个应用中保证一个对象再第一次创建以后,后续使用的时候只会使用第一次创建的对象,不会重新再去创建,也就说对象只会在应用中只创建一次,这就是单例模式。2.单例模式的应用常见有哪些平时开发中经常会遇到要去读取配置文件的然后赋值到一个对象中,这个对象就可以设置为单例 一些常用的工具类 数据库连接池,日志对象3.实现单列模式两种方式饿汉模式:在类加载时就完成了初始化,但是加载比较慢,获取对象比较快。/** * 单例-饿汉模式 */public class Sing.

2021-03-23 11:39:04 294 2

原创 java中用两个线程交替打印0-100偶数和奇数

1.第一种方式,用 synchronized 关键字来实现public class ThreadDemo { static int count = 0; static Object lock = new Object(); public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(new ThreadDemo.Thread1());

2021-03-23 10:11:08 489

原创 java中synchronized介绍和用法

synchronized的作用一句话说出synchronized的作用: 能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全效果。大概意思: 当多个线程同时访问synchronized修饰的方法或者代码块的时候,要拿到这部分代码的锁才能访问,某一个线程拿到这个锁正在访问的时候,这部分代码是锁住的,其它线程会处于阻塞的状态,只能这个线程释放掉锁之后,其它的多个线程才会去竞争这个锁,拿到之后才能访问。synchronized的地位synchronized是java的关键字..

2021-03-21 22:14:58 1239

原创 java 中线程的状态

java中线程一共有六种状态: 这个是线程枚举类中的状态 New : 新建状态,我刚创建一个线程,但是还没有执行start()方法,这个阶段就是新建状态。 Runnable : 可运行状态,一但调用了start()方法就会进入到这个状态,这个状态我理解有两种 "可运行" 和 "运行中",比如A线程正在 "运行中" 这个时候CPU切换到到了B线程运行,此时B线程处于 "运行中",而A线程则在 "可运行" 在等CPU分配时间段。 Blocked:阻塞状态, 当一个线程访问...

2021-03-19 22:32:42 70

原创 java 中启动线程的正确方式

启动线程的正确方式是运行Thread类中的start()方法,使用run()方法只不过是运行了一个普通方法而已。线程对象在初始化之后,由当前线程(主线程)执行的start()方法,然后去告诉jvm虚拟机在有空闲的情况下来运行这个新线程,线程何时运行是由线程调度器来决定的,start()调用结束以后并不意味就开始运行,可能稍后运行,也有可能很长时间不会运行(遇到饥饿的情况)。start()方法会让两个线程同时运行,首先得有一个主线程(父线程)来执行启动这个方法吧,也就说创建一个线程是由主线程(或者.

2021-03-17 20:57:38 439

原创 多线程概念初识

java线程常见面试题1. 什么是进程进程就是操作系统正在执行一个应用程序,也就是程序真正运行的实例,是资源分配的基本单位。像我们用电脑打开LOL 、酷狗音乐等这就是开启了一个进程。2. 什么是线程线程是CPU的基本调度单位,每个线程执行的都是进程代码的某个片段,一个进程至少有一个或者多个线程。举个列子:我和一个同事租了一套两居室的房子,这个房子可以理解为进程,房子面积,房间数量就是进程的属性,而我和同事就是该进程中的两个线程,我们可以各自的房间睡觉,做饭,打牌,看电视等操作,这些都比喻线

2021-02-27 21:52:45 123

原创 java File类 常用相关函数

java File类 相关函数1.构建函数2.判断相关函数4.创建相关函数5.删除相关函数1.构建函数 /** * File 构造方法 * file 常用构造方法 * 1: File(String pathname) 通过路径名创建一个新 File 对象 * 2: File(String parent, String child) 在 parent 路径下创建新的 child File 对象 * 3: File(File parent, Strin

2020-12-30 17:49:15 832 1

原创 java 将本地图片批量上传到oss服务

前端时间在后台搞了一个图片上传的功能,但是由于项目上传的图片量过大,如果用后台上传效率较慢,所以搞了一个程序直接从把本地的图片上传的oss。import com.alibaba.fastjson.JSON;import com.aliyun.oss.OSS;import com.aliyun.oss.OSSClientBuilder;import java.io.File;import java.text.SimpleDateFormat;import java.util.*;publ

2020-10-15 16:49:36 4315 3

原创 java 中线程的创建方式

创建线程的两种方式:> 继承Thread类,重写run()方法> 实现Runable接口,实现run()方法1.继承Thread类user类创建结果通过匿名内部类方式运行结果2.实现Runable接口user类创建运行结果也可以使用匿名内部类运行结果...

2019-08-16 10:01:58 164

原创 在linux系统使用nginx部署静态网页

1.yum安装nginx(如果已经安装请忽略这一步): 2.启动nginx nginx端口默认为80,输入ip+端口,出现以下页面则说明nginx已经安装启动成功了3.将你要访问的页面放在linux系统某个路径下,这个路径可以自定义4.然后修改nginx.conf文件(通过yum方式安装nginx的,安装目录都会在这个下面)5.修改成功以后刷新...

2019-08-14 14:21:55 2446

原创 java 算法练习题

1. 给出一个排序好的数组和一个数,求数组中连续元素的和等于所给数的子数组 public static void main(String[] args) { int[] num = { 1, 2, 2, 3, 4, 5, 6, 7, 8, 9 }; int sum = 7; findSum(num, sum); findSum1...

2018-11-20 15:48:00 1733

原创 sqlyog连接服务出现的2003和1130错误问题

最近新租的阿里云服务器自带的mysql数据库,想用sqlyog连接以下看看里面的东西,无奈连接的时候尽然错误,也是刚刚才玩服务器,所以折腾了半天。 先说 2003 错误码我的这个错误码原因是我3306端口在防火墙中没有放开,所以从阿里云控制台将3306端口放开这一步解决好了,又给我出现了一个问题 ERROR 1130 (HY000): Hos 。。。。。。大概意思:  不能...

2018-10-15 22:35:00 1431

原创 linux安装tomcat

1.下载linux版tomcat文件  网址 https://tomcat.apache.org/download-80.cgi2. 在usr/local目录下面安装tomcat文件夹cd /usr/local/mkdir tomcat3. 上传刚刚下载的tomcat文件,可以通过xftp工具上传在自己电脑上面直接复制粘贴即可4. 解压文件 tar -zxv...

2018-10-15 22:14:59 98

原创 linux安装jdk教程

1. 下载linux版jdk 网址https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html2. 在usr/local目录下建立java目录cd usr/localmkdir java3. 将下载好的jdk文件上传到新建的java文件夹下面可以...

2018-10-15 21:45:35 232

原创 Spring Cloud + Mybatis配置类设置

spring cloud 继承mybatis相关配置类/** * 该类配置数据源相关属性 */@ConfigurationProperties(prefix = DataSourceProperties.DS, ignoreUnknownFields = false)public class DataSourceProperties { //对应配置文件里的配置键 ...

2018-09-21 11:22:37 2673 1

HttpUtils.java

HttpUtils 工具类包含get请求,post请求(表单、body传参)等相关http请求方法。

2020-11-05

空空如也

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

TA关注的人

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