自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

落日的博客

记录分享学习过程

  • 博客(407)
  • 资源 (2)
  • 收藏
  • 关注

原创 一、JVM基础概念

对大对象缓存可使用软引用(SoftReference)、弱引用(WeakReference)➔ 除了Java,还能运行Kotlin、Scala、Groovy等基于JVM的语言。➔ JIT(即时编译器)、逃逸分析、栈上分配、方法内联等,动态提高程序运行速度。➔ Java编译成字节码,由JVM在不同平台解释/编译执行,实现跨平台。➔ JVM统一负责内存分配和回收,降低内存泄漏的风险。➔ 类加载机制、沙箱安全模型,限制程序访问非法资源。线程池合理使用,避免频繁创建销毁线程。避免不合理的对象创建,减少短命对象。

2025-04-28 22:21:10 734

原创 二、Web服务常用的I/O操作

前端直接访问接口 /test/download 下载。大文件处理使用webflux流式处理。小文件处理,全部加载到内存。'请选择至少一个文件'

2025-04-27 21:18:56 1058

原创 一、I/O的相关概念

I/O即Input和Output,用户进程执行I/O操作,归结起来,也就是向操作系统发出请求,读请求就把数据填到缓冲区里,写数据就把缓冲区里数据排干,目的地可以是磁盘也可以是其他通道。当物理内存不够用时,操作系统会将某些不活跃的页临时存放到磁盘中(swap),等需要时再调回,这个过程叫做页置换(page replacement),是基于分页机制实现的。其次,像磁盘这样基于块存储的硬件设备操作的是固定大小的数据块,而用户进程请求的可能是任意大小的字节或非对齐的数据块。它能减少频繁的磁盘操作,提高效率。

2025-04-27 09:31:19 1047

原创 Linux查看日志脚本

然后执行的时候 需要使用 点 + 空格 + 脚本名称 才能正确跳转到指定路径。会根据选择的服务进入指定的服务日志目录 选取最新的一个日志 使用tail命令查看。日志的根目录是 /usr/local/test-cloud/logs。下面脚本目的是 可以选择不同服务 查看info或者error日志。比如进入 /usr/local/web 目录。可以写如下脚本 goweb.sh。

2025-04-23 10:52:47 159

原创 VMware Workstation16 安装CentOS7配置固定IP

4、配置Vmware为固定IP地址。3、CentOS7下载地址。安装镜像系统步骤跳过。

2025-03-28 17:52:54 300

原创 Linux\CentOS解决OpenSSH和Nginx安全漏洞

由于有些服务器需要对公网提供服务、客户对于服务器安全比较重视,需要公司提供服务器安全报告。大多数服务器经过漏洞扫描之后、会出现很多软件低版本的漏洞,此时就需要升级软件的版本来解决这些漏洞问题。本篇文章记录升级软件过程。漏洞编号漏洞说明OpenSSH漏洞OpenSSH漏洞OpenSSH漏洞Nginx漏洞下面方案均在生产环境验证过、但是在升级时 仍然要给服务器做快照备份 以防出现生产事故!!!

2025-03-28 16:51:58 1151

原创 Nacos共享common.yml 配置且支持动态刷新

在需要动态获取最新配置的类上加 @RefreshScope 注解。Nacos共享common.yml 配置 且支持动态刷新。

2025-02-13 08:33:29 169

原创 软件架构设计师下午论文题总结

软件架构设计师下午论文题总结。

2024-12-29 17:02:29 223

原创 软件架构设计师上午选择题总结

软件架构设计师上午选择题总结。

2024-12-29 17:00:13 218

原创 Jenkins配置CI/CD开发环境(理论到实践的完整流程)

持续集成(Continuous Integration, CI) 是指开发人员将代码频繁地(如每天多次)合并到共享的代码仓库中。每次代码合并后,都会通过自动化构建和测试,以确保新代码与现有代码的兼容性。持续交付(Continuous Delivery, CD) 和 持续部署(Continuous Deployment, CD) 是基于 CI 之上的进一步扩展,用于自动化软件的交付和发布。CI/CD 的核心理念在于“自动化”与“频繁交付”,它帮助开发团队在保证质量的前提下,快速迭代和发布软件。

2024-10-23 23:30:29 2120

原创 Linux系统使用NFS挂载共享目录

此时在服务器A上的/data目录新建一个a.txt文件 ,在服务器B的/data目录下 也能看到并操作该文件。同理在服务器B上的/data目录新建一个b.txt文件 ,在服务器A的/data目录下 也能看到并操作该文件。上述设置均为内网服务器设置,如果您的机器具有外网访问权限,请配置相关的安全选项以保证服务器的安全。服务器A需要在/etc/exports文件中添加可供访问的目录,并给予相应的权限。上图表示 服务器B 的 /data 目录 挂载到了 服务器A的 /data目录。

2024-10-14 14:33:34 4182

原创 系统端口号被占用问题处理(Windows&Linux系统)

2.杀死"xxxx"端口号的进程 (下面的22868是 你查到的8080端口 的进程id)Win+R 输入cmd 打开命令行窗口。例如: 查看端口号为9999的进程。查看本地8080端口进程的PID。直接kill占用端口的进程。使用 lsof 工具。

2024-10-09 16:29:02 432

原创 SQL分组聚合子查询问题

分析: 一个订单可能分为多次发货,如果想要获取到一个订单到底发了多少货,就需要对发货单进行聚合。利用子查询先分组聚合数据,之后再利用子查询处理分组聚合后的条件查询。聚合查询发货单的全部发货数量之和,以及订单的订货数量结果。字段分别为, 销售订单号、 订货数量。字段分别为, 销售订单号、 发货数量。然后再利用子查询 比较二者的大小关系。

2024-09-24 14:04:10 253

原创 SQL深分页的建议优化方案

假如有 t_order表 数据量有1000w,现在想分页查询第80w页的数据,每页10条,最基本的sql如下上面查询的问题在于,MySQL 必须扫描前 7999999 行(注意这里应该是 7999999,因为 LIMIT 子句中的偏移量是基于 0 的索引,但实际上它包括了这一行)来定位到第 7999990 行之后的 10 行数据。这种全表扫描(或至少是大部分表的扫描)在大数据集上是非常耗时的。

2024-09-05 22:21:46 628 1

原创 Web服务端通过SSE推送消息给浏览器客户端的实现方案(附详细代码和仓库地址)

目录1、SSE(Server-Sent Events)简介2、SSE 的工作原理3、SSE 与客户端轮询的区别和优势比较区别优势4、SSE简单实现(单机应用Demo)演示效果SSE-Demo仓库地址下面直接贴代码:前端实现:后端实现:5、SSE简单实现(分布式应用Demo)SSE-Demo仓库地址关键代码方案说明1、SSE(Server-Sent Events)简介Server-Sent Events (SSE) 是一种基于 HTTP 协议的服务器推送技术,允许服务器通过单个持久连接向客户端发送实时更新

2024-09-01 13:03:52 1498

原创 Mybatis的XML文件中<if>标签内的判断语句equals的坑

可能是因为OGNL对单字符的识别 当成了char类型 ,而我们代码中是String类型,所以判断成了false。所以在Mybatis的XML文件中判断字符串是否相等,建议使用。假如代码中 String name = “B”;即单引号内包双引号的方式。

2024-08-31 20:18:34 1536

原创 Oracle数据库大小写问题注意点

在 SQL 查询中使用双引号包裹列名时,Oracle 才会按照你指定的大小写返回列名。否则默认返回的是全大写列名。

2024-08-31 20:04:25 294

原创 MySQL数据误删或者误更新如何恢复(详细步骤,一看就会)

①、测试环境少量近期误删除或者误更新的数据恢复。②、测试环境少量从库数据不一致问题。备注:大量数据的恢复或者复制还是需要使用备份数据,例如使用mysqldump或者Mydumper、mysqlshell。(本篇文章对此不做讨论)警告:数据恢复为DBA专业人员负责处理的事情,本文章仅为开发人员测试环境恢复近期误操作的少量数据提供参考。请对生产环境数据心存敬畏~

2024-08-19 14:36:26 6856

原创 CompletableFuture详解+实战

是 Java 8 引入的一个用于异步编程的类。在出现之前,我们可以使用线程池配合Future来处理异步任务。但是线程池的异步操作功能难以编写复杂异步操作的组合和控制。所以JDK8推出了,它允许我们编写非阻塞的代码,并提供了一种简洁的方式来处理异步任务和并发操作,支持多种异步操作的组合和控制。默认情况下,使用公共的作为线程池。这个线程池是全局共享的,如果过多异步任务占用这个线程池会导致资源紧张,也不利于线程管理。建议使用方法,将自定义的Executor传递给。

2024-08-10 17:28:26 2355 1

原创 FutureTask详解

接口功能描述主要方法/特点适用场景Runnable定义要执行的任务,无返回值run()用于执行不需要结果的任务,如线程的任务Callable定义要执行的任务,有返回值,并可能抛出异常call()用于执行有返回值的任务Future管理异步计算的结果,检查状态和处理异常get()cancel()isDone()用于管理异步任务的结果和状态结合Runnable和Future的功能,可以执行任务并管理结果继承Runnable和Future用于需要同时支持Runnable和Future功能的场景,如。

2024-08-05 22:50:58 2568

原创 Java线程池原理剖析和应用指南

目录Java线程池详解一、Java线程池简介池化思想池化思想的优点二、线程池的实现原理分析实现线程池需要考虑哪些问题?线程池的简单使用示例线程池原理的简单图示三、Executor详解Executor简介Executor框架的继承结构总结ExecutorExecutorService四、ThreadPoolExecutor 详解线程池的七个参数线程池的任务调度流程图示WorkThread模式和Future模式线程池的状态和内部结构线程池的关闭线程池的状态转换图工作线程`Worker``execute`方法详解

2024-08-04 11:22:41 1441

原创 StampedLock详解

是JUC并发包里面 JDK8 版本新增的一个锁,是读写锁的一种具体实现,和不同的是其不提供可重入性,不基于某个类似Lock或者ReadWriteLock接口实现,而是基于CLH锁思想实现这点这AQS有些类似,并且StampedLock不支持条件变量Condition。关于可以参考上篇文章 ReentrantReadWriteLock详解。那么JDK既然实现了这个锁,就说明这个锁一定有优势,那就是性能优势,下面会具体分析。

2024-07-28 17:38:56 2128

原创 ReentrantReadWriteLock详解

ReentrantReadWriteLock 只是读写锁思想的一个具体Java实现。重要的是理解这种思想。掌握这些思想可以帮助我们在不同编程语言或框架中应用类似的锁机制。《图解Java多线程设计模式》《Java并发编程的艺术》

2024-07-27 15:32:00 955

原创 Java锁详解(包含Lock接口ReentrantLock详解)

首先非公平是说先尝试获取锁的线程并不一定比后尝试获取锁的线程优先获取锁。

2024-07-24 17:30:28 1265

原创 ThreadLocal详解

get() 方法首先获取当前线程,然后尝试从当前线程的 ThreadLocalMap 中获取与当前 ThreadLocal 实例关联的值。如果找到了该值,则直接返回;否则调用 setInitialValue() 设置并返回初始值。getMap(Thread t) 方法返回当前线程的 ThreadLocalMap。> key) 方法通过计算哈希值获取与 key 关联的条目,如果没有找到,则调用 getEntryAfterMiss 继续查找。

2024-07-23 18:07:41 2328 1

原创 JUC包下的并发工具类

并发工具类主要功能用法示例特点与注意事项CountDownLatch (倒计数器)允许一个或多个线程等待其他线程完成操作后再继续执行- 只能使用一次,不能重置 - 适用于一次性事件,例如等待多线程计算完成后汇总结果CyclicBarrier (循环屏障)使一组线程到达一个屏障点时被阻塞,直到最后一个线程到达屏障点,所有线程才继续执行- 可以重用,适用于多次执行的场景- 适用于需要多个线程同时开始某些任务的场景,例如多线程处理数据后同时汇总Semaphore (信号量)

2024-07-23 09:35:23 1097

原创 Java CAS、Unsafe类、原子类详解

CAS(Compare-And-Swap),直译为比较交换。CAS是一种用于多线程编程的原子操作。主要用于无锁算法和无锁数据结构的实现。Unsafe类在之前AQS详解和LockSupport详解中都有提到。Unsafe听名字就知道这个类不安全,它是Java平台提供的一个内部类,位于sun.misc包下,它允许Java代码直接访问和操作底层内存,执行一些通常被认为是不安全的操作。

2024-07-22 10:31:30 1227

原创 LockSupport详解

LockSupport 是 Java 并发包(java.util.concurrent)中的一个工具类,提供了基本的线程阻塞和唤醒机制。它主要用于实现锁和其他同步类,如AQS、 ReentrantLock、Semaphore、CountDownLatch 等。LockSupport 提供的主要方法是park和unpark,它们分别用于挂起和唤醒线程(会让线程进入WATING状态)。AQS中对线程进行挂起和唤醒操作最终使用的就是和。AQS相关内容可以参考 我的上一篇博客AQS详解。

2024-07-18 22:24:43 1400

原创 AQS详解(详细图文)

至此大概能够了解到AQS内部的一些实现了,Node类用于在AQS的同步队列和条件队列中维护线程的等待状态和链表结构。通过waitStatus字段和链表结构,AQS能够有效管理线程的阻塞、唤醒和取消操作,保证并发环境下的线程同步。之前在synchronized关键字详解这篇文章中有说过锁的本质。实际上无论是锁还是别的什么同步器,比如JVM对应synchronized底层锁的实现、亦或是AQS及其子类,它们实现的思想都差不多。

2024-07-17 23:49:55 988

原创 final关键字详解

This逃逸(This Escape)是指在对象的构造过程中,this引用被暴露到构造函数外部的情况。这种暴露可能会导致未完全构造的对象被其他线程访问,从而引发不确定的行为和潜在的并发问题。

2024-07-13 17:16:45 1098

原创 synchronized关键字详解(全面分析)

synchronized 直译为 同步,它的作用是实现线程同步, synchronized 能够确保同一时刻只有一个线程可以执行某个代码块或方法,我们可以把共享变量的修改放在synchronized 修饰的代码块中或者方法中,从而避免多个线程同时访问共享资源时引发的线程安全问题。①、synchronized关键字用在代码块上,锁是synchonized括号里配置的对象,可以实现类级别的同步(使用类的Class对象作为锁,或者使用静态实例变量作为锁)。也可以实现对象级别的同步(使用类的实例变量作为锁)。

2024-07-11 23:19:16 1577

原创 Java中volatile关键字详解(详细图文)

经过上面那么多的铺垫,我们再来总结下,整体思路就非常清晰了。JVM中通过下面这四个函数来实现编译器屏障和 CPU指令(硬件)屏障volatilevolatile 关键字保证有序性的原理:JVM通过JMM(Java内存模型)规范定义volatile关键字保证有序性,主要是通过内存屏障机制(包括编译器屏障,CPU指令屏障)来确保编译器生成的汇编代码保持程序员期望的执行顺序,并且确保处理器(CPU)按照顺序执行指令。

2024-07-05 17:54:33 2851

原创 增加Github访问稳定性

官方下载和使用地址:https://www.dogfight360.com/blog/686/#google_vignette

2024-07-03 09:47:35 431 1

原创 JMM(Java内存模型)详解

为了对上面的问题进行更深入的探究,我有查了一些JIT相关的资料。简单总结下JIT然后再对上面的问题分析下。JIT(Just-In-Time)编译器是Java虚拟机(JVM)中的一个关键组件,它负责在程序运行过程中动态地将字节码(即Java编译后的.class文件中的代码)转换为特定于平台的机器代码。这一过程旨在提高程序的执行效率,因为它能够针对运行时的数据和实际使用模式进行优化,而不仅仅是基于静态代码分析。JIT工作原理加载与解释执行:当Java程序启动时,JVM首先加载类文件并由解释器执行字节码。

2024-07-03 09:21:13 3793

原创 Java并发编程基础知识点

start当两个或多个线程互相等待对方释放资源时,就会发生死锁。例如:有两只狗秀逗和四眼,秀逗和它的好兄弟四眼都着急上厕所,假设上厕所需要拿到厕所钥匙和手纸,此时秀逗抢到了钥匙,四眼抢到了手纸。它俩谁也不让谁,秀逗拿着钥匙等待四眼给它手纸,四眼拿着手纸等秀逗给它钥匙。等着等着,两只狗都崩裤兜里了。。。这就是出现了线程死锁,反应到计算机上,可能的问题就是导致线程无法继续往下运行,还会导致计算机资源无法释放,系统可用资源逐渐减少,最终可能导致系统资源耗尽。参与死锁的线程无法继续执行,造成这些线程的永久阻塞。

2024-06-30 22:18:29 1099

原创 Java注解

下面的例子是使用代理+注解实现对方法入参的非空校验});i ++) {throw new RuntimeException("方法:" + method . getName() + "的参数" + parameters [ i ] . getName() + " 不能为空!");i ++) {

2024-06-28 16:56:15 958

原创 Java的反射机制

JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取类的信息以及动态调用对象的方法的功能称为 java 语言的反射机制。

2024-06-28 16:50:49 735

原创 Java网络编程

Java中的Socket编程涉及两种基本类型:服务器Socket(ServerSocket)和客户端Socket(Socket)。服务器Socket用于服务器端,监听客户端的连接请求并接受连接,而客户端Socket用于客户端,发起连接并与服务器通信。Java的Socket是Java语言提供的一种用于网络通信的机制。Socket允许客户端和服务器之间建立连接,并在连接上进行数据传输。这个工具类似于 linux系统上的 telnet工具 可以帮助我们在Windows系统上检测 远程端口的连通性。

2024-06-28 16:49:58 902

原创 Java的NIO体系

在传统的数据处理流程中,数据从一个位置(如磁盘)读取到操作系统内核缓冲区,再从内核缓冲区复制到用户空间的应用程序缓冲区,然后在某些场景下(如网络传输),数据可能还需要从用户空间复制回内核空间的网络缓冲区以便发送。它可以将一个文件或者文件的一部分映射到内存中,形成一个虚拟内存文件,这样就可以直接操作内存中的数据,而不需要通过系统调用来读写文件。Selector 能够同时监听多个通道,当任何一个通道上发生感兴趣的事件时,Selector 都能及时地通知程序,因此能够有效地实现多路复用,提高系统的并发处理能力。

2024-06-28 16:49:09 1238

原创 Java的IO体系

而编码和解码转换之间是需要遵循规则的,即编码和解码都遵循同一种规则才能将文字信息正常显示,如果编码跟解码使用了不同的规则,就会出现乱码的情况。这意味着在使用"rws"模式打开文件时,不仅对文件内容的更新会被立即写入,还包括文件的元数据,比如文件属性、修改时间等。不同的是,"rwd"模式只要求对文件内容的更新被立即写入,而元数据可能会被延迟写入,这意味着文件的属性信息等可能不会立即更新到磁盘。它们分别属于不同的编码集。文件内容通常指的是文件中存储的实际数据,即由应用程序创建的、用户需要读取或操作的数据。

2024-06-28 16:47:42 846

Linux环境安装JDK8 版本至8u202步骤,包含jdk-8u202-linux-x64.tar.gz压缩包 和安装步骤

jdk-8u202-linux-x64.tar.gz 为Oracle提供的java8版本最后一个免费商用版 Linux环境安装JDK8 版本至8u202步骤,包含jdk-8u202-linux-x64.tar.gz压缩包 和安装步骤

2022-03-08

安卓侧滑菜单+圆形裁切头像+6.0权限申请+7.0 file provider+sharedpreference保存头像到本地

安卓ui框架,侧滑菜单+TabLayout+ViewPager+圆形头像裁剪+拍照相册裁切头像+6.0动态权限申请+7.0 file provider+sharedpreference保存头像到本地 里面还有自定义toast 点击两次退出程序等实用方法 欢迎下载学习 DEMO内代码注释详细 看了就懂

2018-09-29

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

TA关注的人

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