java
文章平均质量分 72
懒惰的coder
这个作者很懒,什么都没留下…
展开
-
线程池工具类封装
承接具有执行结果的线程任务/*** 线程结果*}/*** 任务线程池*/*** 默认核心线程数/*** 默认最大线程数/*** 默认空闲线程存活时间/*** 默认队列数量/*** 线程池/*** 线程工厂/*** 任务较多时暂存队列/*** 核心线程数/*** 最大线程数/*** 空闲线程存活时间/*** 队列数量/*** 线程池名称/*** 初始化线程池} } /**原创 2022-09-23 21:10:01 · 1604 阅读 · 0 评论 -
MySQL索引分类
按数据结构分类可分为:B+tree索引、Hash索引、Full-text索引。按物理存储分类可分为:聚簇索引、二级索引(辅助索引)。按字段特性分类可分为:主键索引、普通索引、前缀索引。按字段个数分类可分为:单列索引、联合索引(复合索引、组合索引)。原创 2022-09-11 21:24:17 · 1849 阅读 · 0 评论 -
mysql中的mvcc机制
在InnoDB引擎下,按锁的粒度分类,可以分为行锁和表锁。行锁实际上是作用在索引之上的。当我们的SQL命中了索引,那锁住的就是命中条件内的索引节点(这就是行锁),如果没有命中索引,那锁的就是整个索引树(表锁);简单来说就是:锁住的是整棵树还是某几个节点,完全取决于SQL条件是否有命中到对应的索引节点。而行锁又可以简单的分为读锁(共享锁、S锁)和写锁(排它锁、X锁);读锁是共享的,多个事务可以同时读取同一个资源,但不允许其他事务修改。写锁是排他的,写锁会阻塞其他的写锁和读锁。原创 2022-09-11 20:02:10 · 540 阅读 · 0 评论 -
mysql日志总结
什么是binlog?binlog是用于记录数据库表结构和表数据变更的二进制日志,比如insert、update、delete、create、truncate等等操作,不会记录select、show操作,因为没有对数据本身发生变更。使用命令show variables like ‘%log_bin%’;查看binlog是否打开。执行SHOW MASTER STATUS;可以查看当前写入的binlog文件名。(没有开启就不存在)binlog是用来干什么的?第一,用于主从复制。原创 2022-09-10 21:55:57 · 3644 阅读 · 0 评论 -
StringTable常见面试问题
【代码】StringTable常见面试问题。原创 2022-08-28 21:17:50 · 162 阅读 · 0 评论 -
Top命令参数详解
09:54:05 当前时间up 237 days 系统运行时间2 user 当前登录用户数load average 1.29 0.68 0.37 系统负载,即任务队列的平均长度。第二、三行为进程和CPU的信息,当有多个cpu时,这些内容可能会超过两行。内容如下:total 进程总数running 正在运行的进程数sleeping 睡眠的进程数stopped 停止的进程数zombie 僵尸进程数Cpu(s):3.7% us 用户空间占用CPU百分比。原创 2022-08-23 10:59:59 · 1138 阅读 · 0 评论 -
打字(赛马网)
最近找工作需要笔试,做了几道题练习一下,赛码网这个题答案的通过率是9%,因此我自己记录一下自己写的答案。用java实现。原创 2022-08-05 12:22:16 · 1447 阅读 · 0 评论 -
java线程中断
线程中断相关的方法interrupt()方法是一个实例方法,它通知目标线程中断,也就是设置目标线程的中断标志位为true,中断标志位表示当前线程已经被中断了。isInterrupted方法也是一个实例方法它判断当前线程是否被中断(通过检查中断标志位)并获取中断标志Thread类的静态方法interrupted()返回当前线程的中断状态,且将当前线程的中断状态设为false,此方法调用之后会清除当前线程的中断标志位的状态(将中断标志位设置成false了),返回当前值并且设置为false。...原创 2022-08-02 15:59:53 · 325 阅读 · 0 评论 -
springboot环境下Shiro+Token+Redis安全认证方案
认证我们接收filter传过来的token,并认证login操作的token授权获取到登录用户信息,并取得用户的权限存入roles,以便后期对接口进行操作权限验证/***大坑!,必须重写此方法,不然Shiro会报错}/***授权**@returnlog.info("Shiro权限配置");}/***认证**@returnlog.info("Shiror认证");isAccessAllowed()判断是否可以登录到系统/**...原创 2022-07-27 15:43:43 · 6252 阅读 · 0 评论 -
NIO 基础总结
non-blockingio非阻塞IO。原创 2022-07-26 19:49:22 · 170 阅读 · 0 评论 -
访问者模式(JAVA)
/基础用户信息publicabstractclassUser{//姓名publicStringidentity;//身份;重点班、普通班|特级教师、普通教师、实习教师publicStringclazz;//班级publicUser(Stringname,Stringidentity,Stringclazz){}//核心访问方法publicabstractvoidaccept(Visitorvisitor);}基础信息包括。...原创 2022-07-23 21:55:53 · 264 阅读 · 0 评论 -
简述聚簇索引
唯一的非空索引**代替(“唯一的非空索引”是指列不能出现null值的唯一索引,跟主键性质一样)。如果没有这样的索引,InnoDB会隐式地定义一个主键来作为聚簇索引。原创 2022-07-15 12:25:17 · 277 阅读 · 0 评论 -
权限控制的设计方式
目前主流的权限模型有两种:基于角色的访问控制(Role-Based Access Control,简称 RBAC),指的是通过用户的角色(Role)授权其相关权限,实现了灵活的访问控制,相比直接授予用户权限,要更加简单、高效、可扩展。当使用 RBAC模型 时,通过分析用户的实际情况,基于共同的职责和需求,授予他们不同角色。这种 用户 -> 角色 -> 权限 间的关系,让我们可以不用再单独管理单个用户权限,用户从授予的角色里面获取所需的权限。以一个简单的场景(Gitlab 的权限系统)为例,用户系统中有原创 2022-07-08 19:06:22 · 710 阅读 · 0 评论 -
Mysql为什么采用B+树
众多的数据结构中我们可以分为:线性结构和非线性结构。线性结构主要有:数组、链表、基于它们衍生出的有哈希表、栈、队列等。非线性结构有:树、图。还有其他的数据结构:跳表、位图也都是由基础的数据结构演化而来的,不同的数据结构存在即都是为了解决某些场景问题。我们思考mysql索引适合什么样数据结构,首先应该思考索引是用来解决什么样的问题?索引发挥着什么样的作用?然后再思考什么样的数据结构能够解决这样的问题,实现这样的作用。mysql存储的数据是在磁盘里的,即使设备断电,放在磁盘里面的数据是不会有影响的,保原创 2022-07-06 23:52:21 · 554 阅读 · 0 评论 -
JUC三大常用工具类CountDownLatch、CyclicBarrier、Semaphore
CountDownLatch位于 java.util.concurrent包下。CountDownLatch是通过一个计数器来实现的,计数器的初始值是线程的数量。每当有一个线程执行完毕后,通过countDown方法来让计数器的值-1,当计数器的值为0时,表示所有的线程都执行完毕,然后继续执行await方法之后的语句,即在锁上等待的线程就可以恢复工作了。CountDownLatch中主要有两个方法:简单的小例子:一个寝室八个人要出去,需要等到1、2、3、4、5、6、7、8个人都出来,才可以锁上寝室门。即当原创 2022-07-05 10:00:00 · 168 阅读 · 0 评论 -
适配器模式
共有两种适配器模式我们养了一只猫,它会发出叫声目标(Target)角色适配器(Adapter)角色测试如果有一天又养了一只狗人又和狗成为了朋友重新测试聊天如果再有其他朋友,还需要增加适配器。是否有办法使其通用呢?我们希望可以有一个可以和各种动物做朋友的办法,而不是每次有了新的动物朋友都需要增加一个适配器。万物拟人适配器(Adaper)角色测试...转载 2022-07-03 12:23:21 · 7858 阅读 · 0 评论 -
==与equals 的区别,为什么重写 equals 方法也要重写 hashCode 方法?
引用类型:== 是直接比较的两个对象的堆内存地址,如果相等,则说明两个引用实际是指向同一个对象地址的。基本类型:对于 基本数据类型(8个)和 String 来说又是怎样呢?对于基本类型(8个)和 直接声明的 “abc” 字符串,他们是作为字面量存在常量池中以 HashSet 策略存储起来的,在常量池中,一个常量只会对应一个地址,所以它们的引用都是指向的同一块地址。另外,对于基本数据的包装类型,除了Float和Double之外,其他的六种都是实现了常量池技术,其中 Integer 在常量池中的存储范围为 [转载 2022-07-01 00:34:00 · 67 阅读 · 0 评论 -
装饰者模式
用动物接口作为抽象构件(Component)角色,动物会移动,和咬。具体构件(Concrete Component)角色用会跑会咬的狗狗类作为具体构件(Concrete Component)角色。装饰(Decorator)角色给动物设计装备,可以加强动物的技能(也就是方法)。具体装饰(Concrete Decorator)角色在装饰角色中我们设计了动物的装备,但是没有具体实现装备的功能,在此实现动物移动的加速装备。有的小动物会被大的动物欺负,于是为他们设计一款攻击力增强装备来保护自己,在此实现原创 2022-07-01 00:17:33 · 153 阅读 · 1 评论 -
进程通信的方式
管道、命名管道、信号、消息队列、共享内存、内存映射、信号量、Socket管道管道也叫无名(匿名)管道,它是是 UNIX 系统 IPC(进程间通信)的最古老形式,所有的 UNIX 系统都支持这种通信机制。管道本质其实是内核中维护的一块内存缓冲区,Linux 系统中通过 pipe() 函数创建管道,会生成两个文件描述符,分别对应管道的读端和写端。无名管道只能用于具有亲缘关系的进程间的通信。命名管道匿名管道,由于没有名字,只能用于亲缘关系的进程间通信。为了克服这个缺点,提出了有名管道(FIFO),也叫命名管道、F原创 2022-06-30 23:35:18 · 111 阅读 · 1 评论 -
java.util.ConcurrentModificationException
当我们迭代一个ArrayList或者HashMap时,如果对集合做一些修改操作(例如删除元素),可能会抛出java.util.ConcurrentModificationException的异常。例子:输出:ArrayList的父类AbstarctList中有一个域,每次对集合进行修改(增添元素,删除元素……)时都会而foreach的背后实现原理其实就是Iterator,等同于上面代码的注释部分。在这里,迭代ArrayList的Iterator中有一个变量,该变量会初始化和相等,但如果接下来如果集合进行修原创 2022-06-10 22:21:09 · 98 阅读 · 0 评论 -
排序算法总结(java)
排序算法,java原创 2022-06-09 18:55:22 · 110 阅读 · 0 评论 -
Arrays.sort()对二维数组排序
Arrays.sort()排序二维数组原创 2022-06-04 22:08:27 · 835 阅读 · 0 评论 -
两阶段终止模式
两阶段终止模式在一个线程T1中如何“优雅”终止线程T2?这里的【优雅】指的是给 T2 一个料理后事(处理完当前的操作)的机会。错误思路使用线程对象的 stop() 方法停止线程stop 方法会真正杀死线程,如果这时线程锁住了共享资源,那么当它被杀死后就再也没有机会释放锁, 其它线程将永远无法获取锁使用 System.exit(int) 方法停止线程目的仅是停止一个线程,但这种做法会让整个程序都停止两阶段终止模式代码:@Slf4jpublic class Test02原创 2022-05-19 13:22:30 · 98 阅读 · 0 评论 -
TCP拥塞控制
TCP拥塞控制拥塞控制的一般原理在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种现象称为拥塞 (congestion)。最坏结果:系统崩溃拥塞产生的原因网络拥塞往往是由许多因素引起的。例如:点缓存的容量太小;链路的容量不足;处理机处理的速率太慢;拥塞本身会进一步加剧拥塞;出现拥塞的原因:增加资源能解决拥塞吗?**不能。**这是因为网络拥塞是一个非常复杂的问题。简单地采用上述做法,在许多情况下,不但不能解决拥塞问题,而且还可能使网络的性能更转载 2022-05-18 10:39:46 · 716 阅读 · 0 评论 -
彻底搞懂Cookie、Session、Token、JWT
彻底搞懂Cookie、Session、Token、JWT什么是认证通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就打卡成功)。互联网中的认证用户名密码登录邮箱发送登录链接手机号接收验证码只要你能收到邮箱/验证码,就默认你是账号的主人什么是授权用户授予第三方应用访问该用户某些资源的权限你在安装手机应用的时候,APP 会询问是否允许授予权限(访问相册、地理位置等权限)你在访问微信小程序时,当登转载 2022-05-17 18:13:54 · 216 阅读 · 0 评论 -
java创建线程的方式
java创建线程的方式方法一:直接使用Thread// 创建线程对象Thread t = new Thread() { public void run() { // 要执行的任务 }};// 启动线程t.start();例如:public static void main(String[] args) { Thread t1 = new Thread("t1") { @Override // run 方法内实现了要执行原创 2022-05-17 17:30:08 · 491 阅读 · 0 评论 -
java序列化
java序列化什么是序列化Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程:**序列化:**对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。核心作用是对象状态的保存与重建。**反序列化:**客户端从文件中或网络上获得序列化后的对象字节流,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象。为什么需要序列化与反序列化?一、原创 2022-05-17 00:02:56 · 336 阅读 · 0 评论 -
搞懂java类加载机制和类加载器
搞懂java类加载机制和类加载器类加载概述一个类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载、验证、准备、解析、初始化、使用和卸载七个阶段,其中验证、准备、解析三个部分统称为连接。如下图所示:其中加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类型的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定特性(也称为动态绑定)。类加载的阶段加载加载阶段是整个“类加载”过程中的原创 2022-05-13 21:43:48 · 430 阅读 · 0 评论 -
java堆内存诊断
java堆内存诊断jps 工具查看当前系统中有哪些 java 进程jmap 工具查看堆内存占用情况 jmap - heap 进程idjconsole 工具图形界面的,多功能的监测工具,可以连续监测(不光可以监测堆,也可以监测线程和cpu等)案例一案例代码/** * 演示堆内存 */public class Demo1_4 { public static void main(String[] args) throws InterruptedExcepti原创 2022-05-08 22:08:22 · 786 阅读 · 0 评论 -
线程运行诊断
线程运行诊断**例子一:**cpu占用过多定位:用top定位哪个进程对cpu的占用过高ps H -eo pid,tid,%cpu | grep进程id (用ps命令进一步定位是哪个线程引起的cpu占用过高)jstack进程id可以根据线程id找到有问题的线程,进一步定位到问题代码的源码行号实际操作首先用nohup java Demo1_16 &命令执行准备好的Demo程序然后使用top命令查看信息,可以看到最上面的java程序对cpu的占用达到了92%下一步使用ps原创 2022-05-08 21:01:12 · 1118 阅读 · 0 评论 -
一文搞懂java单例模式
一文搞懂java单例模式概念:java中单例模式是java中一种常见的设计模式,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。主要有以下特点:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他的对象提供这一实例。意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。何时使用:当我原创 2022-04-27 23:42:50 · 565 阅读 · 0 评论 -
什么是反向代理
什么是反向代理先说什么是正向代理**正向代理:**客户端想要访问一个服务器,但是它可能无法直接访问这台服务器,这时候这可找一台可以访问目标服务器的另外一台服务器,而这台服务器就被当做是代理服务器,客户端通过代理服务器访问目标服务器,客户端知道目标服务器的ip,但是目标服务器不知道客户端的ip。反向代理:从正向代理中,可以知道代理服务器是客户端的代理,反向代理就是服务器的代理,它会对外屏蔽服务器的信息,就像一些大型网站,因为访问人数很多,就需要多台服务器来解决问题,这时候这些服务器就由一个反向代理原创 2022-03-23 17:34:31 · 142 阅读 · 0 评论 -
Java实现KMP算法
java实现KMP原创 2022-03-23 10:41:25 · 4360 阅读 · 0 评论 -
java二分查找模板
java二分查找模板最后l和r重合,返回重复元素的第一个值 while( l < r) //查找元素的开始位置 { int mid = (l + r )/2; if(nums[mid] >= target) r = mid; else l = mid + 1; } 最后l和r重合,返回重复元素最后一个值while( l < r)原创 2022-03-05 15:41:13 · 281 阅读 · 0 评论 -
Mysql高级笔记
Mysql高级笔记1.mysql架构介绍mysql简介概述高级Mysql完整的mysql优化需要很深的功底,大公司甚至有专门的DBAmysql内核sql优化工程师mysql服务器的优化各种参数常量设定查询语句优化主从复制软硬件升级容灾备份sql编程mysqlLinux版的安装下载地址:https://dev.mysql.com/downloads/mysql/5.5.html#downloads检查当前系统是否安装过mysql:查询命令:rpm -qa|grep原创 2022-01-13 01:25:24 · 237 阅读 · 0 评论 -
HTTP和HTTPS简述
HTTP和HTTPS简述HTTP和HTTPS的基本概念**HTTP:**是互联⽹上应用最为⼴泛的⼀种⽹络协议,是⼀个客户端和 服务器端请求和应答的标准(TCP),用于从WWW服务器传输超⽂本到 本地浏览器的传输协议,它可以使浏览器更加⾼效,使⽹络传输减少。**HTTPS:**是以安全为目标的HTTP通道,简单讲是HTTP的安全版, 即HTTP下加⼊SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就 需要SSL。HTTPS协议的主要作用可以分为两种:⼀种是建立⼀个信息安全通 道,来保证数据传原创 2021-12-27 00:27:41 · 1079 阅读 · 0 评论 -
Mysql索引
mysql索引转载 2021-12-23 22:06:40 · 339 阅读 · 0 评论 -
jvm垃圾回收机制(GC调优)
jvm垃圾回收机制(GC调优)GC调优预备知识:GC相关的VM参数:官方文档查看虚拟机参数命令:"C:\Program Files\Java\jdk1.8.0_201\bin\java" -XX:+PrintFlagsFinal -version | findstr "GC"D:\Note\笔记\JDK源码学习\IDEA-workspace\jdk8>"C:\Program Files\Java\jdk1.8.0_201\bin\java" -XX:+PrintFlagsFi转载 2021-12-16 14:47:13 · 193 阅读 · 0 评论 -
java垃圾回收机制
jvm垃圾回收机制JVM 垃圾回收1、如何判断对象可以回收引用计数法如果一个对象被其他变量所引用,则让该对象的引用计数+1,如果该对象被引用2次则其引用计数为2,依次类推。某个变量不再引用该对象,则让该对象的引用计数-1,当该对象的引用计数变为0时,则表示该对象没用被其他变量所引用,这时候该对象就可以被作为垃圾进行回收。引用计数法弊端:循环引用时,两个对象的引用计数都为1,导致两个对象都无法被释放回收。最终就会造成内存泄漏!可达性分析算法可达性分析算法就是JVM中判断对象是否是垃圾的算转载 2021-12-16 14:33:19 · 3797 阅读 · 0 评论 -
docker 私有仓库
Docker 私有仓库一、私有仓库搭建# 1、拉取私有仓库镜像 docker pull registry# 2、启动私有仓库容器 docker run -id --name=registry -p 5000:5000 registry# 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功# 4、修改daemon.json vim /etc/docker/daemon.json原创 2021-12-06 22:22:17 · 64 阅读 · 0 评论