自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 问答 (1)
  • 收藏
  • 关注

原创 Centos7安装docker

如需进一步帮助,请告知你的具体需求(如是否要配置镜像加速器、多节点集群等)。如果看到 “Hello from Docker!注意:旧版本的 Docker 在 CentOS 上可能叫。如果之前未安装过,可跳过此步。执行后需重新登录或执行。

2025-12-07 16:25:28 277

原创 JVM调优的参数有哪些?

设置堆空间初始大小和最大大小,为了防止垃圾回收期在初始大小,最大大小之间收缩通常设置为一样的值。对象在幸存者区和eden区之间挪动的次数。可以设置不同的垃圾回收器来优化JVM性能。

2025-12-01 15:05:46 145

原创 GC垃圾回收器

引用计数法:一个对象被引用一次,在当前对象头上递增一个引用次数吗,如果这个对象的引用次数为0,代表这个对象可回收。存在的问题:对象间出现循环引用的话,则引用计数法失效。、从而决定是否进行垃圾回收(GC)的核心机制。它解决了引用计数法无法处理循环引用的问题,是现代 JVM(如 HotSpot)采用的标准垃圾回收判定方法。如果一个或者多个对象没有任何的引用指向他,那么这个对象就是垃圾,如果定位了垃圾,则可能会被垃圾回收器回收。堆内存中的数据会被垃圾回收器回收。

2025-11-29 09:39:45 134

原创 什么是类加载器?类加载器有哪些?

JVM只会运行二进制文件,类加载器(ClassLoader)是 Java 虚拟机(JVM)中负责将 Java 类的字节码(.class 文件)加载到内存中的组件。它是 Java 运行时环境的重要组成部分,使得 Java 程序具有。

2025-11-28 17:52:44 148

原创 什么是直接内存?

直接内存(Direct Memory)是Java中一种通过本地方法(Native Method)直接分配堆外内存的机制,绕过了Java堆(Heap)的管理。类直接操作操作系统层面的内存,减少数据在Java堆与本地内存间的复制开销。

2025-11-28 16:38:41 90

原创 java中的方法区是什么?

方法区(Method Area)是各个线程共享的内存区域主要存储类的信息,运行时常量池。虚拟机启动的时候创建、关闭虚拟机时释放如果方法区中的内存无法满足分配请求,则会抛出异常OutOfMemoryError:Metaspace方法区(Method Area)是Java虚拟机(JVM)内存模型中的一个逻辑区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。它是所有线程共享的内存区域。

2025-11-28 09:22:45 410

原创 什么是虚拟机栈

用于管理方法的调用和执行。栈内存是连续的内存块,专门用来存储方法调用过程中的各种数据,是先进后出。java虚拟机栈又叫jvm栈内存,是JVM 中。栈帧过多导致栈内存溢出,典型问题:递归调用。栈帧过大导致栈内存溢出。

2025-11-27 11:44:50 154

原创 详细介绍一下java堆内存

线程共享的区域:主要用来保存对象实例,数组等,当堆内存中没有内存空间分配给实例,也无法再扩展时,则抛出OutOfMemoryError异常。元空间保存的类信息,静态变量,常量,编译后的代码。

2025-11-26 10:35:56 156

原创 java堆内存

摘要:Java虚拟机(JVM)内存结构分为线程共享区域(堆、方法区)和线程私有区域(程序计数器、虚拟机栈、本地方法栈)。JDK 8后,永久代被元空间取代。堆存放对象实例,是GC主要区域;方法区存储类信息;虚拟机栈管理方法调用栈帧。此外,直接内存虽非JVM规范部分,但影响性能。常见问题包括堆栈区别、方法区变化及OOM触发条件。了解这些区域对优化Java程序至关重要。

2025-11-26 10:14:47 404

原创 为什么取模在除数等于2^n的时候可以用按位与替代?

按位与是一种运算操作,可以理解成加减乘除。按位与的意思是,两个二进制数,只有都为1的时候结果才是1。按位:按照位置一对一对比,与:与操作,两者都为true则是true。案例: 100001 & 000111 = 000001。两个二进制数的最后一位都是1,所以按位与的结果是1。2^n-1 和2^n 之间是什么关系?

2025-11-25 23:10:43 427

原创 ThreadLocal是什么?

是 Java 中提供的一种线程本地变量机制。它允许每个线程拥有自己独立的变量副本,从而避免多个线程之间共享变量带来的线程安全问题。简单来说就是给每个线程一个自己的空间,别的线程无法访问。

2025-11-25 22:18:18 333

原创 多线程使用场景(线程池使用场景)

Java并发编程中的CountDownLatch(倒计时锁)是一种同步辅助工具,用于让一个或多个线程等待其他线程完成操作。其核心机制是通过初始化计数器(如3),每当线程完成时调用countDown()使计数器减1,当计数器归零时,await()等待的线程才会继续执行。典型应用场景如批量数据导入ES:主线程创建多个子线程并行处理数据页,通过CountDownLatch确保所有数据导入完成后再执行后续操作(如日志统计)。与Thread.join()不同,CountDownLatch更灵活,支持多线程协同而非简单

2025-11-25 13:04:20 789

原创 java线程池一篇就够了-面试,学习,深入

Java线程创建本质是通过Thread类实现,Runnable/Callable接口仅定义任务,由Thread执行。线程池通过预创建线程提高效率,核心机制包括:核心线程执行任务,队列缓冲超量任务,临时线程处理队列满载情况。阻塞队列方面,LinkedBlockingDeque采用双锁设计(头尾各一锁)比ArrayBlockingQueue的单锁效率更高。线程池通过复用线程避免了频繁创建销毁的资源消耗,通过队列管理和拒绝策略实现任务调度。

2025-11-23 21:25:44 155

原创 导致并发程序出现问题的根本原因是什么?

原子性是指一个操作或多个操作要么全部执行成功,要么全部不执行,不会被其他线程打断。解决:加锁。

2025-11-23 18:43:11 211

原创 ConcurrentHashMap快速入门

ConcurrentHashMap 是 Java 并发包(java.util.concurrent)中提供的高性能、线程安全的哈希表实现,专为高并发场景设计。它在保证线程安全的同时,极大提升了读写并发性能。

2025-11-23 16:34:15 145

原创 java中死锁是什么?

死锁(Deadlock)是指多个进程或线程在执行过程中,因为争夺资源而造成的一种互相等待的现象,若无外力干预,它们都将无法继续推进。假设有两个线程1,2,并且有两个锁A,B。其中线程A需要使用 A,B锁,线程B也要使用B,A锁在两个线程同时执行的时候,线程1抢到了A锁,线程2抢到了B锁。线程1需要继续执行就需要占用B锁,而此时B锁被线程2占用了,而线程2想继续执行就必须占用A锁,A锁被线程1占用了,这两个线程就陷入了一种死循环。线程1执行需要线程2释放B锁,线程2执行需要线程1释放A锁。

2025-11-23 13:16:33 129

原创 synchronized和Lock有什么区别?

Lock对比Synchronized提供了公平锁,可打断,可超时,多条件变量等形式。下面代码演示什么叫可打断的线程。什么叫可中断:当线程抢锁没成功就会进行等待,而可中断就是能够打断这个线程的等待,让他不等了。try {System.out.println("等待的过程被打断了");return;try {System.out.println(Thread.currentThread().getName() + "获取了锁");}, "t1");

2025-11-23 00:23:18 793

原创 ReentrantLock的实现原理

翻译:可重入锁。ReentrantLock和synchronized一样都是java中的锁。它是AQS的具体实现,底层主要就是使用了AQS。

2025-11-22 20:29:05 326

原创 AQS的基本概念以及工作机制

SemaphoreAQS是一个底层框架,是由java实现的。而synchronized底层是C++实现的。很多锁底层都使用了AQS来进行实现:阻塞式锁,信号锁,倒计时锁。AQS 使用一个来表示资源的占用情况,并通过来管理多个线程对共享资源的竞争。SemaphoreAQS利用了CAS来实现,多个线程来争抢一个volatile修饰的变量,如果这个变量为0则表示无锁,大于0就表示有锁。那么在有锁的情况下,其他线程会进入FIFO队列(先进先出队列)排队,当state修改为0的时候从FIFO中取出队列。

2025-11-22 12:22:26 286

原创 线程安全-Volatile关键字

Volatile关键字的作用是:保证可见性。禁止指令重排序。

2025-11-22 00:00:48 1141

原创 JWT令牌详细解析

所谓令牌,就是一个身份认证的标识,没有这个令牌,小兵又没见过大将军,谁知道你是不是,但是你有令牌,不管你是不是真的,小兵也没有错,认牌不认人。我们的项目也是如此。就是一个用户身份的标识,每一个用户都是唯一的,且有约束,比如时效性等。前两部分都是公开的数据,大家只要使用base64解析一下就能看到json内容,第三部分就是加密手段了。我们把头部的复制下来,拿到base64解析网站中逆向解析一下,可以看到解析之后是一个json字符串,所以为啥叫jwt,j就是json。JWT令牌由三部分组成:头部,负载,签名。

2025-10-22 09:43:19 242

原创 学成在线之SpringSecurity+OAuth2

OAuth2是OAuth协议的升级版本,主要用于解决跨平台身份认证问题,允许用户授权第三方应用访问其存储在其他服务提供商处的资源,而无需直接共享用户名和密码。SpringSecurity是OAuth2的实现。OAuth2是一个协议,一种规定。而SpringSecurity集成了这个规定的实现方式。Spring Security 是 Spring 生态中专注于企业级应用安全的核心框架,其核心功能与特性可归纳如。

2025-10-22 09:13:53 301

原创 学成在线微服务day9,SpringSecurity依赖报错

如果在导入依赖的时候出现了jar包找不到的情况,可以尝试换一个版本,原本是2.4.4,可以改为2.5.5。这是弹幕的方法,对于我来说似乎并没有什么用,可以进行尝试。个人实际解决的方法:删除微服务中的iml文件,然后重启。

2025-10-21 16:43:58 185

原创 SpringBoot实现断点续传与下载

在项目中如果存在大文件的上传或者下载功能,因为用户的网络或者其他各种问题,导致文件上传了一部分或者下载了一部分之后,无法继续了。这个时候就需要使用断点续传,再下次上传或者下载时,继续从上次失败的地方开始。实现思路:将大文件分块进行上传,一个文件大小为1GB,我们分成10份,这样如果在上传的时候在第五份失败了,那么我们下次就从第五份开始。下载同理。断点续传分为两部分:分块,合并。

2025-09-25 18:21:36 241

原创 (尚硅谷张天禹-升级版)Vue2+Vue3超全三万六千字笔记

点击事件

2024-10-02 18:30:40 5090 1

原创 Spring中事物的隔离级别

这种隔离级别可以避免脏读问题,但仍可能发生不可重复读(Non-repeatable Read)问题,即一个事务在多次读取同一数据时,发现数据被其他事务修改并提交。这种隔离级别可以避免脏读和不可重复读问题,但仍可能发生幻读(Phantom Read)问题,即一个事务在多次读取同一范围的数据时,发现其他事务插入了新的数据。这种隔离级别可能导致脏读(Dirty Read)问题,即一个事务读取到了另一个事务未提交的数据,而这些数据有可能在后续被回滚。一个事务可以读取到另一个事务尚未提交的数据。

2024-09-12 22:10:03 423

原创 Spark之RDD的分区-磁盘数据的分配

注意的一点,所谓的切分并不是真正的将原始数据切开,而是读取的时候根据规则选择性的读取一部分,存储到不同的分区中。处理磁盘数据时,spark会对其进行分区,分区是通过字节来分的,比如说7个字节的数据,最小分区数为2,则分为3 3 1 三个分区。而在读取数据的时候是根据偏移量,并且按行来读取的,只要读取到了一行的一个偏移量,那么就要将这一行的其他的偏移量都读取出来。实际读取的时候会参考到上面的分区数据,但并不完全按照,会将0,6以偏移量 的形式读取出来,且不能重复,一读读一行。

2024-07-10 21:01:11 835

原创 Python爬虫--Chrome Handles

日期:2024.4.29随着版本的升级网上的各种Chrome Handles教程都已经过时了。自学的时候比较麻烦,所以自己写一下笔记给大家参考。本人自学的是尚硅谷的2021版本的python爬虫视频,里面的很多东西已经不适合现在了。

2024-04-29 12:34:36 441

原创 python爬虫--安装XPath Helper

链接:https://pan.baidu.com/s/1B85d5cLDyAz1xUQqmL3uug?- 重启浏览器,按住shift+ctrl+x检查是否安装成功,出现黑色框框则成功。- 在chrome中输入chrome://extensions/打开扩展程序。- 将从百度网盘中下载的xpath.zip文件直接拖到浏览器的扩展程序页面中。- 得到chrome插件,将插件开关开启,并且打开开发者模式。给chrome浏览器安装xpath插件。- 从网盘下载xpath的插件文件。

2024-04-25 20:58:33 554 1

原创 javaswing图书管理系统,美化UI版本

基于javaswing实现的图书管理项目,大一期末作业,连接数据库实现增删改查操作。mysql,java

2023-12-09 22:35:40 510

原创 计算机组成原理之主存中存储单元地址的分配

寻址指当CPU请求数据时获得该数据在内存上的位置的过程。内存上存储的所有数据都会有一个可以区分的地址,这与其存放的位置相对应,当CPU请求数据时,内存中的电路会根据CPU的地址线上的信号利用数据总线向CPU返回数据。

2023-10-30 00:05:32 3374 1

原创 Redis持久化之AOF找不到appendonly.aof文件

在redis中,AOF持久化会默认在/usr/local/bin/ 目录下生成名字为appendonly.aof的持久化文件,AOF模式是默认不开启的。需要手动修改redis.conf 配置文件 。将appendonly配置项的值修改为yes才能开启。开启之后必须重启reids-server服务器。如果使用的是redis7以及以上版本,在bin目录下我们找不到appendonly.aof文件。这是因为在redis7中关于AOF持久化有一个更新操作。AOF持久化不再是以单独的文件存在,而是生成一个append

2022-06-10 23:50:39 5017 1

原创 IDEA导入项目出现maven依赖报错

今天导入项目出现依赖报错,重启,重新配置maven仓库都没用。后来发现是依赖下错了,有时候网不好或者其他原因就有可能发生依赖下载错误或者不完整。我将maven仓库全部删了重新下载即可。

2022-06-01 12:31:38 561

原创 ES6扩展运算符

数组或者对象前面的三个点,官方名称叫做扩展运算符。var a = [1, 2, 3, 4]console.log("正常输出数组", a)console.log("扩展运算符输出数组", ...a)结果:它可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开;还可以在构造字面量对象时将对象表达式按照key-value的方式展开。说白了就是把外层包裹去除,不管是大括号([])、花括号({}),统统不在话下。...

2022-05-15 10:48:00 206

原创 Mybatis中动态sql判断数组或者集合是否为空

当我从数据库中批量进行删除的时候发现,如果通过集合或者数组作为sql删除的参数传入的时候,如果数组或者集合为空的时候,sql语法就会报错。比如#delete from user id in(数组/集合的值)delete from user id in ();这个时候拼接的sql语句就是错误的。如何解决呢?思路是进行判断,当数组或者集合不为空并且长度不为0的时候,遍历数组或者集合到in()中,当数组或者集合的长度为0或者为空的时候,查询结果为null,而不是报错。难点就是如何在myba

2022-03-15 22:35:45 8104 1

原创 java中四大层次结构

dao层:数据访问层,用于访问数据库model层:POJO类,实体类,编写实体类的层,数据库中对应的属性和方法service层:业务层,给controller层的类提供接口进行调用。一般就是自己写的方法封装起来,就是声明一下,具体显示在serviceImpl中controller层:控制层,负责具体模块的业务流程控制,需要调用service逻辑设计层的接口来控制业务流程。因为service中的方法是我们使用到的,controller通过接口前端H5或者APP传过来的参数进行业务操

2022-03-11 22:33:31 2933

原创 javascript中的字符串转换成数字

Number()函数能将值是 数字 的字符串转换成数字Number类型,如果字符串的值不是数字则Number()函数将字符串的值转换成NaN。如果字符串是“123px”,就无法将其转换成数字。parseInt()函数能将“123px”这类字符串转换成数字,只读取前面的数字部分,var s ="123px";s =parseInt(s);alert(typeof s);//Numberalert(s);//123...

2022-02-25 11:30:53 451

原创 JSP中Exception对象

Exception对象用于实现异常处理信息。Exception对象一般情况不显示,只有当page指令中设置了isErrorPage="true"时(错误处理页面),才会有Exception对象。Exception对象是java.lang.Exception类的实例对象结果:exception对象使用:需用在出现错误的页面指定errorPage=“错误处理页面(相对路径)”将错误信息传递到错误处理页面,在错误处理页面中需要设置isErrorPage=“true”定义该...

2021-11-07 09:23:51 706

原创 数据结构和算法-稀疏数组

什么是稀疏数组?public class sparse01{ public static void main(String[] args){ //1.创建原始二维数组 //2.0表示没有棋子 1.表示黑子 2.表示蓝子 int chessArr1[][]=new int[11][11]; chessArr1[1][2]=1; chessArr1[2][3]=2; //输出原始的二维数组

2021-10-26 20:45:17 139

原创 数据结构和算法-递归

一、什么是递归递归是指在定义自身的同时又出现了对自身的直接或者间接引用,是数学在计算机科学中是一种非常有效的问题求解方法。递归的基本思想是把规模大的复杂问题转换为相似的规模小的子问题老来解决。递归就是自己调用自己称为递归。递推和回归。示例1:f(n)=1 当n=1;f(n)=n*f(n-1);简单例子:斐波拉契数列public class fibonacci{ //斐波那契数列 public static void main(String[] args){

2021-10-26 14:59:28 196

空空如也

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

TA关注的人

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