当前位置: 首页 > news >正文

《Java 简易速速上手小册》第8章:Java 性能优化(2024 最新版)

在这里插入图片描述

文章目录

  • 8.1 性能评估工具 - 你的性能探测仪
    • 8.1.1 基础知识
    • 8.1.2 重点案例:使用 VisualVM 监控应用性能
    • 8.1.3 拓展案例 1:使用 JProfiler 分析内存泄漏
    • 8.1.4 拓展案例 2:使用 Gatling 进行 Web 应用压力测试
  • 8.2 JVM 调优 - 魔法引擎的调校
    • 8.2.1 基础知识
    • 8.2.2 重点案例:优化 Web 应用的 JVM 设置
    • 8.2.3 拓展案例 1:使用 Parallel GC 优化批处理应用
    • 8.2.4 拓展案例 2:减少 Full GC 的发生频率
  • 8.3 代码优化策略 - 编码的艺术
    • 8.3.1 基础知识
    • 8.3.2 重点案例:优化搜索算法
    • 8.3.3 拓展案例 1:循环优化
    • 8.3.4 拓展案例 2:利用并发提升数据处理效率

8.1 性能评估工具 - 你的性能探测仪

在Java应用的性能优化之旅中,首先需要做的就是准确地评估和定位现有性能问题。幸运的是,我们有一系列强大的工具可以帮助我们完成这个任务。

8.1.1 基础知识

  • VisualVM: 免费工具,提供了一套可视化界面来监控Java应用的CPU、内存使用情况,线程和堆信息等。它还可以对Java应用进行性能分析和内存分析。

  • JProfiler: 商业工具,提供了更深入的性能分析功能,包括实时的CPU、内存使用监控,内存泄漏侦测,数据库访问分析等。

  • Gatling: 专注于Web应用的性能测试工具,可以模拟高并发访问,并生成详细的性能报告。

8.1.2 重点案例:使用 VisualVM 监控应用性能

我们将展示如何使用VisualVM对Java应用进行基本的性能监控。

步骤:

  1. 下载并安装VisualVM。
  2. 启动你的Java应用。
  3. 打开VisualVM,从左侧进程列表中选择你的Java应用。
  4. 查看“监视器”和“分析器”标签页,以获取CPU和内存的使用情况,以及线程的信息。

示例代码(一个简单的Java程序,用于生成CPU和内存负载):

public class PerformanceLoadGenerator {public static void main(String[] args) {for (int i = 0; i < 100; i++) {new Thread(() -> {while (true) {Math.pow(Math.random(), Math.random());}}).start();}}
}

8.1.3 拓展案例 1:使用 JProfiler 分析内存泄漏

在这个案例中,我们会演示如何使用JProfiler来诊断和分析Java应用中的内存泄漏。

步骤:

  1. 启动JProfiler并连接到你的Java应用。
  2. 在“堆栈”标签页中,开始记录内存分配。
  3. 执行一系列操作来模拟用户行为。
  4. 停止记录,并查看“类视图”或“对象视图”找到可能的内存泄漏。

示例代码(一个可能存在内存泄漏的Java程序):

import java.util.ArrayList;
import java.util.List;public class MemoryLeakExample {private static final List<Double> list = new ArrayList<>();public static void main(String[] args) {while (true) {list.add(Math.random());}}
}

8.1.4 拓展案例 2:使用 Gatling 进行 Web 应用压力测试

最后,我们将演示如何使用Gatling工具对Web应用进行压力测试,以评估其在高并发情况下的性能。

步骤:

  1. 安装Gatling并创建一个测试脚本。
  2. 定义模拟的用户行为和请求参数。
  3. 运行Gatling测试。
  4. 分析测试报告,找出性能瓶颈。

示例Gatling脚本(模拟多用户访问Web应用):

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._class BasicSimulation extends Simulation {val httpProtocol = http.baseUrl("http://yourwebapp.com").acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8").doNotTrackHeader("1")val scn = scenario("BasicSimulation").exec(http("request_1").get("/")).pause(5)setUp(scn.inject(atOnceUsers(100))).protocols(httpProtocol)
}

通过以上案例,你已经学会了如何使用VisualVM进行基本的性能监控,使用JProfiler分析内存泄漏,以及使用Gatling进行Web应用的压力测试。掌握这些工具将使你能够更加自信地面对性能优化的挑战。

在这里插入图片描述


8.2 JVM 调优 - 魔法引擎的调校

Java虚拟机(JVM)是Java应用运行的心脏,正确调优JVM可以显著提升应用性能,就像为你的魔法引擎进行精细调校一样,让它运行得更快、更高效。

8.2.1 基础知识

  • 堆内存设置:JVM堆内存是Java对象生存的地方。通过调整堆内存的大小(使用-Xms设置初始堆大小,-Xmx设置最大堆大小),可以优化垃圾收集性能,避免内存溢出。

  • 垃圾回收器选择:不同的垃圾回收器(GC)适用于不同的场景和应用需求。常见的垃圾回收器有Serial GC、Parallel GC、CMS、G1等。

  • JVM监控和诊断工具:使用JVM监控工具(如jstat、jmap、jstack)和诊断工具(如Java Mission Control)可以帮助识别性能瓶颈和内存泄漏。

8.2.2 重点案例:优化 Web 应用的 JVM 设置

假设你负责一个高流量的Java Web应用,此应用在高负载时出现了性能瓶颈。通过调优JVM设置,我们可以提高应用性能。

步骤:

  1. 识别性能瓶颈:使用JVM监控工具观察应用在高负载时的性能指标。
  2. 调整堆内存大小:根据应用的实际使用情况调整-Xms-Xmx参数,比如设置-Xms4g -Xmx4g,为JVM堆分配更多内存。
  3. 选择合适的垃圾回收器:对于需要低延迟的Web应用,可以考虑使用G1垃圾回收器,设置-XX:+UseG1GC

示例JVM启动参数

java -Xms4g -Xmx4g -XX:+UseG1GC -jar your-web-app.jar

8.2.3 拓展案例 1:使用 Parallel GC 优化批处理应用

对于一些后台运行的大数据处理或批处理应用,吞吐量是最重要的指标。Parallel GC是一个以达到高吞吐量为目标的垃圾回收器。

示例JVM启动参数

java -Xms8g -Xmx8g -XX:+UseParallelGC -jar your-batch-app.jar

通过设置-XX:+UseParallelGC,我们告诉JVM使用Parallel GC,这对于提高批处理任务的处理速度非常有效。

8.2.4 拓展案例 2:减少 Full GC 的发生频率

频繁的Full GC会严重影响应用的性能。通过调整新生代和老年代的大小,可以减少Full GC的发生频率。

示例JVM启动参数

java -Xms4g -Xmx4g -XX:NewRatio=3 -jar your-app.jar

这里-XX:NewRatio=3表示老年代与新生代的比例是3:1,给老年代分配更多的内存空间可以减少对象晋升到老年代的频率,从而减少Full GC的发生。

通过以上案例,你已经学会了如何针对不同类型的Java应用进行JVM调优,从而提升应用的性能。记住,JVM调优是一个反复试验和评估的过程,每个应用的最佳配置都是独一无二的。使用正确的工具和策略,你的Java应用将运行得更加流畅和高效。

在这里插入图片描述


8.3 代码优化策略 - 编码的艺术

代码优化是提升Java应用性能的基石。通过精简和优化代码,我们可以减少资源消耗,提高执行效率。下面是一些基本的代码优化策略,以及如何应用这些策略来提升你的Java应用性能。

8.3.1 基础知识

  • 算法优化:选择合适的算法对性能影响巨大。时间复杂度和空间复杂度是衡量算法性能的关键指标。
  • 循环优化:减少循环次数和循环内的计算量,避免在循环内进行不必要的操作。
  • 数据结构选择:根据数据的使用模式选择合适的数据结构,比如在频繁查找操作中使用HashMap而不是ArrayList
  • 避免重复计算:缓存计算结果以避免重复计算,特别是在计算成本高昂的情况下。
  • 利用并发编程:合理利用多线程或并发工具来分摊任务,提升执行效率。

8.3.2 重点案例:优化搜索算法

假设我们有一个任务,需要在一个大型数据集中频繁搜索特定元素。原始实现使用了ArrayList,我们将通过优化算法和数据结构来提升搜索性能。

原始实现:

import java.util.ArrayList;
import java.util.List;public class SearchExample {public static boolean search(List<Integer> data, int key) {for (int item : data) {if (item == key) {return true;}}return false;}public static void main(String[] args) {List<Integer> data = new ArrayList<>();// 假设data被初始化并填充了大量元素boolean found = search(data, 12345);System.out.println("Found: " + found);}
}

优化后的实现:

ArrayList替换为HashSet,提升搜索性能。

import java.util.HashSet;
import java.util.Set;public class OptimizedSearchExample {public static boolean search(Set<Integer> data, int key) {return data.contains(key);}public static void main(String[] args) {Set<Integer> data = new HashSet<>();// 假设data被初始化并填充了大量元素boolean found = search(data, 12345);System.out.println("Found: " + found);}
}

8.3.3 拓展案例 1:循环优化

对于一个处理大量数据的循环,优化其执行路径可以显著提升性能。

优化前:

for (int i = 0; i < data.size(); i++) {if (expensiveComputation(data.get(i))) {// 处理结果}
}

优化后:

将条件判断移出循环,减少循环内的计算量。

for (int i = 0; i < data.size(); i++) {preComputedResult = preCompute(data.get(i));if (preComputedResult) {// 处理结果}
}

8.3.4 拓展案例 2:利用并发提升数据处理效率

对于数据处理密集型任务,通过并行处理可以显著缩短总体执行时间。

示例代码:

使用Java 8的Stream API进行并行处理。

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;public class ParallelProcessingExample {public static void main(String[] args) {List<Integer> data = IntStream.rangeClosed(1, 1000000).boxed().collect(Collectors.toList());long startTime = System.currentTimeMillis();data.parallelStream().forEach(ParallelProcessingExample::expensiveOperation);long endTime = System.currentTimeMillis();System.out.println("Processing time: " + (endTime - startTime) + "ms");}public static void expensiveOperation(int item) {// 模拟一个耗时操作try {Thread.sleep(1);} catch (InterruptedException e) {Thread.currentThread().interrupt();}}
}

通过这些案例,我们看到了通过算法优化、循环优化和利用并发编程等策略,可以显著提升Java应用的性能。性能优化是一个持续的过程,始终需要我们在实践中不断地探索和学习。

相关文章:

《Java 简易速速上手小册》第8章:Java 性能优化(2024 最新版)

文章目录 8.1 性能评估工具 - 你的性能探测仪8.1.1 基础知识8.1.2 重点案例&#xff1a;使用 VisualVM 监控应用性能8.1.3 拓展案例 1&#xff1a;使用 JProfiler 分析内存泄漏8.1.4 拓展案例 2&#xff1a;使用 Gatling 进行 Web 应用压力测试 8.2 JVM 调优 - 魔法引擎的调校8…...

mysql全国省市县三级联动创表sql(一)

1. 建表sql CREATE TABLE province (id VARCHAR ( 32 ) PRIMARY KEY COMMENT 主键,code CHAR ( 6 ) NOT NULL COMMENT 省份编码,name VARCHAR ( 40 ) NOT NULL COMMENT 省份名称 ) COMMENT 省份信息表;CREATE TABLE city (id VARCHAR ( 32 ) PRIMARY KEY COMMENT 主键,code …...

go面试题--使用两个goroutine交替打印数字与字母

使用两个goroutine交替打印数字与字母 题目如下&#xff1a; 使用两个goroutine交替打印序列&#xff0c;一个goroutine打印数字&#xff0c;另外一个goroutine打印字母&#xff0c;最终效果如下&#xff1a; 12AB34CD56EF78GH910IZ1112KL1314MN1516OP1718QR1920ST2122UV2324W…...

DolphinScheduler-3.2.0 集群搭建

目录 一、基础环境准备 1.1 组件下载地址 1.2 前置准备工作 二、 DolphinScheduler集群部署 2.1 解压安装包 2.2 配置数据库 2.3 准备 DolphinScheduler 启动环境 2.3.1 配置用户免密及权限 2.3.2 配置机器 SSH 免密登陆 2.3.3 启动 zookeeper集群 2.3.4 修改instal…...

07:Kubectl 命令详解|K8S资源对象管理|K8S集群管理(重难点)

Kubectl 命令详解&#xff5c;K8S资源对象管理&#xff5c;K8S集群管理 kubectl管理命令kubectl get 查询资源常用的排错命令kubectl run 创建容器 POD原理pod的生命周期 k8s资源对象管理资源文件使用资源文件管理对象Pod资源文件deploy资源文件 集群调度的规则扩容与缩减集群更…...

【设计模式】springboot3项目整合模板方法深入理解设计模式之模板方法(Template Method)

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;底层原理高级进阶》 &#x1f680…...

Windows搭建docker+k8s

安装Docker Desktop 从官网下载&#xff0c;然后直接安装即可&#xff0c;过程很简单&#xff0c;一直Next就行。 有一点需要注意就是要看好对应的版本&#xff0c;因为后边涉及到版本的问题。 https://www.docker.com/products/docker-desktop 安装完成&#xff0c;双击图…...

年假作业10

一、选择题 BBDBACCCAD 二、填空题 1,4,13,40 3715 358 5 2 6 1 5 4 8 2 0 2 三、编程题 1、 #include <iostream> #include<array> #include <limits> using namespace std; int main() {array<int,10> score;array<int,10>::iterat…...

[ai笔记4] 将AI工具场景化,应用于生活和工作

欢迎来到文思源想的AI空间&#xff0c;这是技术老兵重学ai以及成长思考的第4篇分享内容&#xff01; 转眼已经到了大年初三&#xff0c;但是拜年的任务还只完成了一半&#xff0c;准备的大部头的书&#xff0c;现在也就看了两本&#xff0c;还好AI笔记通过每天早起坚持了下来。…...

【生产实测可用】Redis修改集群弱口令

起因 漏扫redis连接发现弱口令需要修改 先连上去看看是空口令还是弱口令 redis-cli -p 6379 -h a.b.c.d info sentinel找到启动服务器的配置文件 cp -av /app/redis-7001/redis.conf /app/redis-7001/redis.conf.bak20240207 echo "requirepass 口令" >>/a…...

备战蓝桥杯---图论基础理论

图的存储&#xff1a; 1.邻接矩阵&#xff1a; 我们用map[i][j]表示i--->j的边权 2.用vector数组&#xff08;在搜索专题的游戏一题中应用过&#xff09; 3.用邻接表&#xff1a; 下面是用链表实现的基本功能的代码&#xff1a; #include<bits/stdc.h> using nam…...

[office] excel2003进行可视性加密的方法 #媒体#其他#知识分享

excel2003进行可视性加密的方法 Excel如何对重要文件进行可视性的加密处理呢?下面是小编带来的关于excel2003进行可视性加密的方法&#xff0c;希望阅读过后对你有所启发! excel2003进行可视性加密的方法&#xff1a; 可视性加密步骤1&#xff1a;打开你要加密的excel2003文档…...

算法沉淀——分治算法(leetcode真题剖析)

算法沉淀——分治算法 快排思想01.颜色分类02.排序数组03.数组中的第K个最大元素04.库存管理 III 归并思想01.排序数组02.交易逆序对的总数03.计算右侧小于当前元素的个数04.翻转对 分治算法是一种解决问题的算法范式&#xff0c;其核心思想是将一个大问题分解成若干个小问题&a…...

Qt 进程守护程序

Qt 进程守护程序 简单粗暴的监控&#xff0c;方法可整合到其他代码。 一、windows环境下 1、进程查询函数 processCount函数用于查询系统所有运行的进程中该进程运行的数量&#xff0c;比如启动了5个A进程&#xff0c;该函数查询返回的结果就为5。 windows下使用了API接口查询…...

Linux_文件系统

假定外部存储设备为磁盘&#xff0c;文件如果没有被使用&#xff0c;那么它静静躺在磁盘上&#xff0c;如果它被使用&#xff0c;则文件将被加载进内存中。故此&#xff0c;可以将文件分为内存文件和磁盘文件。 内存文件 磁盘文件 软、硬链接 一.内存文件 1.1 c语言的文件接口 …...

算法沉淀——链表(leetcode真题剖析)

算法沉淀——链表 01.两数相加02.两两交换链表中的节点03.重排链表04.合并 K 个升序链表05.K个一组翻转链表 链表常用技巧 1、画图->直观形象、便于理解 2、引入虚拟"头节点" 3、要学会定义辅助节点&#xff08;比如双向链表的节点插入&#xff09; 4、快慢双指针…...

Flink从入门到实践(一):Flink入门、Flink部署

文章目录 系列文章索引一、快速上手1、导包2、求词频demo&#xff08;1&#xff09;要读取的数据&#xff08;2&#xff09;demo1&#xff1a;批处理&#xff08;离线处理&#xff09;&#xff08;3&#xff09;demo2 - lambda优化&#xff1a;批处理&#xff08;离线处理&…...

python分离字符串 2022年12月青少年电子学会等级考试 中小学生python编程等级考试二级真题答案解析

目录 python分离字符串 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python分离字符串 2022年12月 python编程等级考试级编程题 一、题目要…...

Excel练习:折线图突出最大最小值

Excel练习&#xff1a;折线图突出最大最小值 ​​ 要点&#xff1a;NA值在折现图中不会被绘制&#xff0c;看似一条线&#xff0c;实际是三条线。换成0值和""都不行。 ‍ 查看所有已分享Excel文件-阿里云 ‍ 学习的这个视频&#xff1a;Excel折线图&#xff0c…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之MenuItem组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之MenuItem组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、MenuItem组件 用来展示菜单Menu中具体的item菜单项。 子组件 无。 接口 Men…...

Mockito测试框架中的方法详解

这里写目录标题 第一章、模拟对象1.1&#xff09;①mock()方法&#xff1a;1.2&#xff09;②spy()方法&#xff1a; 第二章、模拟对象行为2.1&#xff09;模拟方法调用①when()方法 2.2&#xff09;模拟返回值②thenReturn(要返回的值)③doReturn() 2.3&#xff09;模拟并替换…...

Atcoder ABC339 A - TLD

TLD 时间限制&#xff1a;2s 内存限制&#xff1a;1024MB 【原题地址】 所有图片源自Atcoder&#xff0c;题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【样例输入1】 atcoder.jp【样例输出1】 jp【样例说明…...

企业级DevOps实战

第1章 Zookeeper服务及MQ服务 Zookeeper&#xff08;动物管理员&#xff09;是一个开源的分布式协调服务&#xff0c;目前由Apache进行维护。 MQ概念 MQ&#xff08;消息队列&#xff09;是一种应用程序之间的通信方法&#xff0c;应用程序通过读写出入队列的消息&#xff0…...

C++中的new和delete

1.new和delete的语法 我们知道C语言的内存管理方式是malloc、calloc、realloc和free&#xff0c;而我们的C中除了可以使用这些方式之外还可以选择使用new和delete来进行内存管理。 new和delete的主要语法如下 从上面的代码我们只能知道new要比malloc好写一些&#xff0c;但是其…...

rtt设备io框架面向对象学习-dac设备

目录 1.dac设备基类2.dac设备基类的子类3.初始化/构造流程3.1设备驱动层3.2 设备驱动框架层3.3 设备io管理层 4.总结5.使用 1.dac设备基类 此层处于设备驱动框架层。也是抽象类。 在/ components / drivers / include / drivers 下的dac.h定义了如下dac设备基类 struct rt_da…...

腾讯云幻兽帕鲁服务器配置怎么选择合适?

腾讯云幻兽帕鲁服务器配置怎么选&#xff1f;根据玩家数量选择CPU内存配置&#xff0c;4到8人选择4核16G、10到20人玩家选择8核32G、2到4人选择4核8G、32人选择16核64G配置&#xff0c;腾讯云百科txybk.com来详细说下腾讯云幻兽帕鲁专用服务器CPU内存带宽配置选择方法&#xff…...

796. 子矩阵的和

Problem: 796. 子矩阵的和 文章目录 思路解题方法复杂度Code 思路 这是一个二维前缀和的问题。二维前缀和的主要思想是预处理出一个二维数组&#xff0c;使得每个位置(i, j)上的值表示原数组中从(0, 0)到(i, j)形成的子矩阵中所有元素的和。这样&#xff0c;对于任意的子矩阵(x…...

如何在 Python 中处理 Unicode

介绍 Unicode 是世界上大多数计算机的标准字符编码。它确保文本&#xff08;包括字母、符号、表情符号&#xff0c;甚至控制字符&#xff09;在不同设备、平台和数字文档中显示一致&#xff0c;无论使用的操作系统或软件是什么。它是互联网和计算机行业的重要组成部分&#xf…...

CSDN文章导出PDF整理状况一览

最近CSDN有了导出文章PDF功能&#xff0c;导出的PDF还可以查询&#xff0c; 因此&#xff0c;把文章导出PDF&#xff0c;备份一下自己的重要资料。 目前整理内容如下 No.文章标题整理时间整理之后 文章更新Size &#xff08;M&#xff09;10001_本地电脑-开发相关软件保持位…...

jmeter-05变量(用户定义变量,用户参数,csv文档参数化)

文章目录 一、jmeter有三种变量二、用户定义变量(这个更多的可以理解为全局变量)1、设置2、引用三、用户参数(可以理解为局部变量)1、设置2、引用3、用户参数化要配合线程组的线程数使用4、结果五、csv文档参数1、创建csv文件2、设置2、引用csv文件可以配合线程组的线程数,…...

CSS之水平垂直居中

如何实现一个div的水平垂直居中 <div class"content-wrapper"><div class"content">content</div></div>flex布局 .content-wrapper {width: 400px;height: 400px;background-color: lightskyblue;display: flex;justify-content:…...

2.8日学习打卡----初学RabbitMQ(三)

2.8日学习打卡 一.springboot整合RabbitMQ 之前我们使用原生JAVA操作RabbitMQ较为繁琐&#xff0c;接下来我们使用 SpringBoot整合RabbitMQ&#xff0c;简化代码编写 创建SpringBoot项目&#xff0c;引入RabbitMQ起步依赖 <!-- RabbitMQ起步依赖 --> <dependency&g…...

Unity学习笔记(零基础到就业)|Chapter02:C#基础

Unity学习笔记&#xff08;零基础到就业&#xff09;&#xff5c;Chapter02:C#基础 前言一、复杂数据&#xff08;变量&#xff09;类型part01&#xff1a;枚举数组1.特点2.枚举&#xff08;1&#xff09;基本概念&#xff08;2&#xff09;申明枚举变量&#xff08;3&#xff…...

容器化的基础概念:不可变基础设施解释:将服务器视为乐高积木,而非橡皮泥。

不可变基础设施解释&#xff1a;将服务器视为乐高积木&#xff0c;而非橡皮泥。 想象一下用乐高积木代替橡皮泥进行搭建。使用橡皮泥时&#xff0c;您可以直接塑形和改变它。而使用乐高积木&#xff0c;您需要逐个零件搭建特定结构&#xff0c;并在需要时整体替换它们。这就是…...

智胜未来,新时代IT技术人风口攻略-第二版(弃稿)

文章目录 抛砖引玉 鸿蒙生态小科普焦虑之下 理想要落到实处校园鼎力 鸿蒙发展不可挡培训入场 机构急于吃红利企业布局 鸿蒙应用规划动智胜未来 技术人风口来临 鸿蒙已经成为行业的焦点&#xff0c;未来的发展潜力无限。作为一名程序员兼UP主&#xff0c;我非常荣幸地接受了邀请…...

Git分支和迭代流程

Git分支 feature分支&#xff1a;功能分支 dev分支&#xff1a;开发分支 test分支&#xff1a;测试分支 master分支&#xff1a;生产环境分支 hotfix分支&#xff1a;bug修复分支。从master拉取&#xff0c;修复并测试完成merge回master和dev。 某些团队可能还会有 reale…...

数据库管理-第150期 Oracle Vector DB AI-02(20240212)

数据库管理150期 2024-02-12 数据库管理-第150期 Oracle Vector DB & AI-02&#xff08;20240212&#xff09;1 LLM2 LLM面临的挑战3 RAG4 向量数据库LLM总结 数据库管理-第150期 Oracle Vector DB & AI-02&#xff08;20240212&#xff09; 作者&#xff1a;胖头鱼的鱼…...

MySQL双写机制

双写机制 问题的出现 在发生数据库宕机时&#xff0c;可能Innodb正在写入某个页到表中&#xff0c;但是这个页只写了一部分&#xff0c;这种情况被称为部分写失效&#xff0c;虽然innodb会先写重做日志,在修改页&#xff0c;但是重做日志中记录的是对页的物理操作&#xff0c;但…...

uniapp的配置和使用

①安装环境和编辑器 注册小程序账号 微信开发者工具下载 uniapp 官网 HbuilderX 下载 首先先下载Hbuilder和微信开发者工具 &#xff08;都是傻瓜式安装&#xff09;&#xff0c;然后注册小程序账号&#xff1a; 拿到appid&#xff1a; ②简单通过demo使用微信开发者工具和…...

【ES】--Elasticsearch的分词器深度研究

目录 一、问题描述及分析二、analyze分析器原理三、 multi-fields字段支持多场景搜索(如同时简繁体、拼音等)1、ts_match_analyzer配置分词2、ts_match_all_analyzer配置分词3、ts_match_1_analyzer配置分词4、ts_match_2_analyzer配置分词5、ts_match_3_analyzer配置分词6、ts…...

【Langchain Agent研究】SalesGPT项目介绍(三)

【Langchain Agent研究】SalesGPT项目介绍&#xff08;二&#xff09;-CSDN博客 上节课&#xff0c;我们介绍了salesGPT项目的初步的整体结构&#xff0c;poetry脚手架工具和里面的run.py。在run.py这个运行文件里&#xff0c;引用的最主要的类就是SalesGPT类&#xff0c;今天我…...

Java安全 URLDNS链分析

Java安全 URLDNS链分析 什么是URLDNS链URLDNS链分析调用链路HashMap类分析URL类分析 exp编写思路整理初步expexp改进最终exp 什么是URLDNS链 URLDNS链是Java安全中比较简单的一条利用链&#xff0c;无需使用任何第三方库&#xff0c;全依靠Java内置的一些类实现&#xff0c;但…...

【网站项目】026校园美食交流系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…...

使用raw.gitmirror.com替换raw.githubusercontent.com以解决brew upgrade python@3.12慢的问题

MacOS系统上&#xff0c;升级python3.12时&#xff0c;超级慢&#xff0c;而且最后还失败了。看了日志&#xff0c;发现是用curl从raw.githubusercontent.com上下载Python安装包超时了。 解决方案一&#xff1a;开启翻墙工具&#xff0c;穿越围墙 解决方案二&#xff1a;使用…...

深度学习的进展

#深度学习的进展# 深度学习的进展 深度学习是人工智能领域的一个重要分支&#xff0c;它利用神经网络模拟人类大脑的学习过程&#xff0c;通过大量数据训练模型&#xff0c;使其能够自动提取特征、识别模式、进行分类和预测等任务。近年来&#xff0c;深度学习在多个领域取得…...

[高性能] - 缓存架构

对于交易系统来说&#xff0c;低延时是核心业务的基本要求。因此需要对业务进行分级&#xff0c;还需要对数据按质量要求进行分类&#xff0c;主要包含两个维度&#xff1a;重要性&#xff0c;延时要求&#xff0c;数据质量。共包含以下三种场景&#xff1a; 1. 重要 延时性要…...

django实现外键

一&#xff1a;介绍 在Django中&#xff0c;外键是通过在模型字段中使用ForeignKey来实现的。ForeignKey字段用于表示一个模型与另一个模型之间的多对一关系。这通常用于关联主键字段&#xff0c;以便在一个模型中引用另一个模型的相关记录。 下面是一个简单的例子&#xff0…...

飞天使-k8s知识点14-kubernetes散装知识点3-Service与Ingress服务发现控制器

文章目录 Service与Ingress服务发现控制器存储、配置与角色 Service与Ingress服务发现控制器 在 Kubernetes 中&#xff0c;Service 和 Ingress 是两种不同的资源类型&#xff0c;它们都用于处理网络流量&#xff0c;但用途和工作方式有所不同。Service 是 Kubernetes 中的一个…...

任务调度

1.学习目标 1.1 定时任务概述 1.2 jdk实现任务调度 1.3 SpringTask实现任务调度 1.4 Spring-Task 分析 1.5 Cron表达式 https://cron.qqe2.com/ 2. Quartz 基本应用 2.1 Quartz 基本介绍 2.2 Quartz API介绍 2.3 入门案例 <dependency> <groupId>org.springframe…...

深刻反思现代化进程:20世纪与21世纪的比较分析及东西方思想家的贡献

深刻反思现代化进程&#xff1a;20世纪与21世纪的比较分析及东西方思想家的贡献 摘要&#xff1a;随着人类社会的快速发展&#xff0c;现代化已成为全球范围内的普遍追求。然而&#xff0c;20世纪至21世纪的现代化进程并非一帆风顺&#xff0c;它伴随着环境破坏、社会不平等和文…...