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

Java虚拟机面试题:内存管理(下)

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述


在这里插入图片描述

1. 对象一定分配在堆中吗?有没有了解逃逸分析技术?

在 Java 中,并不是所有对象都严格在堆上分配内存,虽然堆(Heap)是 Java 对象内存分配的主要区域。

在某些情况下,JVM 的即时编译器(JIT)可能会将对象分配在栈上,这被称为逃逸分析(Escape Analysis)。

也就是说,如果编译器确定一个对象不会在方法外部使用(即对象不会逃逸出方法的作用域),那么该对象可以分配在栈上,而不是堆上。

什么是逃逸分析?

逃逸分析是指分析指针动态范围的方法,它同编译器优化原理的指针分析和外形分析相关联。当变量(或者对象)在方法中分配后,其指针有可能被返回或者被全局引用,这样就会被其他方法或者线程所引用,这种现象称作指针(或者引用)的逃逸(Escape)。

通俗点讲,当一个对象被 new 出来之后,它可能被外部所调用,如果是作为参数传递到外部了,就称之为方法逃逸。

逃逸

除此之外,如果对象还有可能被外部线程访问到,例如赋值给可以在其它线程中访问的实例变量,这种就被称为线程逃逸。

在这里插入图片描述

逃逸分析有什么好处?
  • 栈上分配

如果确定一个对象不会逃逸到线程之外,那么久可以考虑将这个对象在栈上分配,对象占用的内存随着栈帧出栈而销毁,这样一来,垃圾收集的压力就降低很多。

  • 同步消除

线程同步本身是一个相对耗时的过程,如果逃逸分析能够确定一个变量不会逃逸出线程,无法被其他线程访问,那么这个变量的读写肯定就不会有竞争, 对这个变量实施的同步措施也就可以安全地消除掉。

  • 标量替换

如果一个数据是基本数据类型,不可拆分,它就被称之为标量。把一个 Java 对象拆散,将其用到的成员变量恢复为原始类型来访问,这个过程就称为标量替换。假如逃逸分析能够证明一个对象不会被方法外部访问,并且这个对象可以被拆散,那么可以不创建对象,直接用创建若干个成员变量代替,可以让对象的成员变量在栈上分配和读写。

2. 内存溢出和内存泄漏是什么意思?

内存溢出,俗称 OOM,是指当程序请求分配内存时,由于没有足够的内存空间满足其需求,从而触发的错误。在 Java 中,这种情况会抛出 OutOfMemoryError。

内存溢出可能是由于内存泄漏导致的,也可能是因为程序一次性尝试分配大量内存,内存直接就干崩溃了导致的。

内存泄漏是指程序在使用完内存后,未能释放已分配的内存空间,导致这部分内存无法再被使用。随着时间的推移,内存泄漏会导致可用内存逐渐减少,最终可能导致内存溢出。

在 Java 中,内存泄漏通常发生在长期存活的对象持有短期存活对象的引用,而长期存活的对象又没有及时释放对短期存活对象的引用,从而导致短期存活对象无法被回收。

用一个比较有味道的比喻来形容就是,内存溢出是排队去蹲坑,发现没坑了;内存泄漏,就是有人占着茅坑不拉屎,占着茅坑不拉屎的多了可能会导致坑位不够用。

在这里插入图片描述

3. 能手写内存溢出的例子吗?

导致内存溢出(OOM)的原因有很多,比如一次性创建了大量对象导致堆内存溢出;比如说元空间溢出,抛出 java.lang.OutOfMemoryError:Metaspace,比如说栈溢出,如果栈的深度超过了 JVM 栈所允许的深度,将会抛出 StackOverflowError。

堆内存溢出是最常见的 OOM 原因,通常是因为创建了大量的对象,且长时间无法被垃圾收集器回收,导致堆内存耗尽。

这就相当于一个房子里,不断堆积不能被回收的杂物,那么房子很快就会被堆满了。

来通过代码模拟一下堆内存溢出的情况。

public class HeapSpaceErrorGenerator {public static void main(String[] args) {List<byte[]> bigObjects = new ArrayList<>();try {while (true) {// 创建一个大约 10MB 的数组byte[] bigObject = new byte[10 * 1024 * 1024];bigObjects.add(bigObject);}} catch (OutOfMemoryError e) {System.out.println("OutOfMemoryError 发生在 " + bigObjects.size() + " 对象后");throw e;}}
}

通过 VM 参数设置堆内存大小为 -Xmx128M,然后运行程序。

二哥的 Java 进阶之路

可以看到,堆内存溢出发生在 11 个对象后。

二哥的 Java 进阶之路

4. 内存泄漏可能由哪些原因导致呢?

比如说:

①、静态的集合中添加的对象越来越多,但却没有及时清理;

public class OOM {static List list = new ArrayList();public void oomTests(){Object obj = new Object();list.add(obj);}
}

②、单例模式下对象持有的外部引用无法及时释放;

③、数据库、IO、Socket 等连接资源没有及时关闭;

try {Connection conn = null;Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("url", "", "");Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("....");} catch (Exception e) {}finally {//不关闭连接}

④、变量的作用域不合理;

class Simple {Object object;public void method1(){object = new Object();//...其他代码//由于作用域原因,method1执行完成之后,object 对象所分配的内存不会马上释放}
}

⑤、hash 值发生变化但对象却没有改变,这也是为什么 String 被设计成不可变对象的原因之一,就是因为假如 String 的哈希值发生了改变,但对应的值没变,就导致 HashMap 中的对象无法被及时清理;

⑥、使用完 ThreadLocal 没有使用 remove 方法来进行清除。

在这里插入图片描述

5. 有没有处理过内存泄漏问题?是如何定位的?

有,内存泄漏是指程序在运行过程中由于未能正确释放已分配的内存,导致内存无法被重用,从而引发内存耗尽等问题。

当时在做技术派项目的时候,由于 ThreadLocal 没有及时清理导致出现了内存泄漏问题。

常用的可视化监控工具有 JConsoleVisualVMJProfilerEclipse Memory Analyzer (MAT)等。

也可以使用 JDK 自带的 jmap、jstack、jstat 等命令行工具来配合内存泄露问题的排查。

严重的内存泄漏往往伴随频繁的 Full GC,所以排查内存泄漏问题时,可以从 Full GC 入手。

第一步,使用 jps -l 查看运行的 Java 进程 ID。

二哥的 Java 进阶之路:jps 查看技术派的进程 ID

第二步,使用top -p [pid] 查看进程使用 CPU 和内存占用情况。

二哥的 Java 进阶之路:top -p

第三步,使用 top -Hp [pid] 查看进程下的所有线程占用 CPU 和内存情况。

在这里插入图片描述

第四步,抓取线程栈:jstack -F 29452 > 29452.txt,可以多抓几次做个对比。

29452 为 pid,顺带作为文件名。

二哥的 Java 进阶之路:jstack

看看有没有线程死锁、死循环或长时间等待这些问题。

在这里插入图片描述

第五步,可以使用jstat -gcutil [pid] 5000 10 每隔 5 秒输出 GC 信息,输出 10 次,查看 YGCFull GC 次数。

二哥的 Java 进阶之路:jstat

通常会出现 YGC 不增加或增加缓慢,而 Full GC 增加很快。

或使用 jstat -gccause [pid] 5000 输出 GC 摘要信息。

二哥的 Java 进阶之路:jstat

或使用 jmap -heap [pid] 查看堆的摘要信息,关注老年代内存使用是否达到阀值,若达到阀值就会执行 Full GC。

在这里插入图片描述

如果发现 Full GC 次数太多,就很大概率存在内存泄漏了。

第六步,生成 dump 文件,然后借助可视化工具分析哪个对象非常多,基本就能定位到问题根源了。

执行命令 jmap -dump:format=b,file=heap.hprof 10025 会输出进程 10025 的堆快照信息,保存到文件 heap.hprof 中。

二哥的 Java 进阶之路:jmap

第七步,可以使用图形化工具分析,如 JDK 自带的 VisualVM,从菜单 > 文件 > 装入 dump 文件。

在这里插入图片描述

然后在结果观察内存占用最多的对象,找到内存泄漏的源头。

6. 有没有处理过内存溢出问题?

有,内存溢出,也就是 Out of Memory,是指当程序请求分配内存时,由于没有足够的内存空间满足其需求,从而触发的错误。

当时在做技术派的时候,由于上传的文件过大,没有正确处理,导致一下子撑爆了内存,程序直接崩溃了。

当发生 OOM 时,可以导出堆转储(Heap Dump)文件进行分析。如果 JVM 还在运行,可以使用 jmap 命令手动生成 Heap Dump 文件:

jmap -dump:format=b,file=heap.hprof <pid>

生成 Heap Dump 文件后,可以使用 MAT、JProfiler 等工具进行分析,查看内存中的对象占用情况,找到内存泄漏的原因。

如果生产环境的内存还有很多空余,可以适当增大堆内存大小,例如 -Xmx4g 参数。

或者检查代码中是否存在内存泄漏,如未关闭的资源、长生命周期的对象等。

之后,我会在本地进行压力测试,模拟高负载情况下的内存表现,确保修改有效,且没有引入新的问题。

7. 什么情况下会发生栈溢出?(补充)

栈溢出(StackOverflowError)发生在程序调用栈的深度超过 JVM 允许的最大深度时。栈溢出的本质是因为线程的栈空间不足,导致无法再为新的栈帧分配内存。

在这里插入图片描述

当一个方法被调用时,JVM 会在栈中分配一个栈帧,用于存储该方法的执行信息。如果方法调用嵌套太深,栈帧不断压入栈中,最终会导致栈空间耗尽,抛出 StackOverflowError。

最常见的栈溢出场景是递归调用,尤其是没有正确的终止条件,导致递归无限进行。

class StackOverflowExample {public static void recursiveMethod() {// 没有终止条件的递归调用recursiveMethod();}public static void main(String[] args) {recursiveMethod();  // 导致栈溢出}
}

另外,如果方法中定义了特别大的局部变量,栈帧会变得很大,导致栈空间更容易耗尽。

public class LargeLocalVariables {public static void method() {int[] largeArray = new int[1000000];  // 大量局部变量method();  // 递归调用}public static void main(String[] args) {method();  // 导致栈溢出}
}

相关文章:

Java虚拟机面试题:内存管理(下)

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

【贝克街迷宫疑云:用侦探思维破解Java迷宫算法】

贝克街迷宫疑云&#xff1a;用侦探思维破解Java迷宫算法 "华生&#xff0c;把煤气灯调亮些。"福尔摩斯用放大镜仔细端详着桌上的羊皮纸&#xff0c;“这个案子比表面上看起来要复杂得多——它是个三维的思维迷宫。” 第一幕&#xff1a;离奇委托 1895年秋的伦敦笼…...

网络安全示意图 网络安全路线图

其实网络安全本身的知识点并不算难&#xff0c;但需要学的东西比较多&#xff0c;如果想要从事网络安全领域&#xff0c;肯定是需要系统、全面地掌握清楚需要用到的技能的。 自学的方式基本是通过看视频或者相关的书籍&#xff0c;不论是什么方法&#xff0c;都是很难的&#…...

ubuntu22.04离线安装K8S

1. 准备离线安装包 参考教程离线包准备教程 2. 准备环境 2.1. 准备主机 主机名ip系统k8s-master192.168.38.128ubuntu22.04k8s-node192.168.38.131ubuntu22.04 2.2. 设置host 修改 /etc/hosts 文件&#xff0c;添加master和node节点&#xff0c;需要和主机名保持一致 2…...

985本硕,网络安全方向,走算法还是走开发?

今天给大家分享的是一位粉丝的提问&#xff0c;985本硕&#xff0c;网络安全方向&#xff0c;走算法还是走开发&#xff1f; 接下来把粉丝的具体提问和我的回复分享给大家&#xff0c;希望也能给一些类似情况的小伙伴一些启发和帮助。 同学提问&#xff1a; 985本硕&#xff…...

如何清理 Linux 缓存 ?

和其他操作系统一样&#xff0c;Linux 使用缓存来优化系统性能。随着时间的推移&#xff0c;这些缓存可能会累积起来&#xff0c;尽管 Linux 擅长管理内存&#xff0c;但在某些情况下&#xff0c;手动清除可能是有益的&#xff0c;例如用于系统诊断、应用程序性能测试或其他特定…...

cv2库的使用及图像预处理02

目录 八,图像缩放 1. 图像缩放操作 2. 插值方法 &#xff08;1&#xff09;最邻近插值&#xff08;cv2.INTER_NEAREST&#xff09; &#xff08;2&#xff09;双线性插值&#xff08;cv2.INTER_LINEAR&#xff09; 3. 显示缩放结果 4. 目标尺寸 5. 总结 九,线性灰度变…...

硬件学习笔记--45 电磁兼容试验-9 无线电干扰抑制试验介绍

目录 电磁兼容试验- 无线电干扰抑制试验 1.试验目的 2.试验方法 3.判定依据及意义 电磁兼容试验- 无线电干扰抑制试验 驻留时间是在规定频率下影响量施加的持续时间。被试设备&#xff08;EUT&#xff09;在经受扫频频带的电磁影响量或电磁干扰的情况下&a…...

P1464 Function(记忆化递归)

#include <bits/stdc.h> using namespace std;#define ll long longll dp[21][21][21]; // dp数组&#xff0c;用来记忆已经计算过的结果ll w(ll a, ll b, ll c) {if (a < 0 || b < 0 || c < 0) {return 1;}if (a > 20 || b > 20 || c > 20) {return …...

OpenCV机器学习(7)人工神经网络 定义模型训练过程中参数的搜索范围cv::ml::ParamGrid 类

OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::ParamGrid 类是 OpenCV 机器学习模块中的一个辅助类&#xff0c;用于定义模型训练过程中参数的搜索范围。它通常被用作某些机器学习算法&#xff08;如支持向量机 SVM&…...

STL —— 洛谷字符串(string库)入门题(蓝桥杯题目训练)(一)

目录 一、B2109 统计数字字符个数 - 洛谷 算法代码&#xff1a; 1. 引入库和命名空间 2. 主函数 3. 读取输入 4. 变量初始化 5. 遍历字符串 6. 输出结果 7. 返回值 总结 评测记录&#xff1a; 二、B2110 找第一个只出现一次的字符 - 洛谷 方法一&#xff1a;算法代…...

游戏引擎学习第107天

仓库:https://gitee.com/mrxiao_com/2d_game_2 回顾我们之前停留的位置 在这段内容中&#xff0c;讨论了如何处理游戏中的三维效果&#xff0c;特别是如何处理额外的“Z层”。由于游戏中的艺术资源是位图而不是3D模型&#xff0c;因此实现三维效果变得非常具有挑战性。虽然可…...

网页制作01-html,css,javascript初认识のhtml的基本标记

一、 Html简介 英文全称是 hyper text markup language,超文本标记语言,是全球广域网上描述网页内容和外观的标准. Html作为一款标记语言,本身不能显示在浏览器中.标记语言经过浏览器的解释和编译,才能正确地反映html标记语言的内容. 1.html 的基本标记 1&#xff09;头部标…...

WebSocket在分布式环境中的局限性及解决方案

WebSocket 在分布式环境中存在一些局限性&#xff0c;特别是当系统需要扩展多个服务实例时&#xff0c;单个 WebSocket 连接的管理和消息推送就变得比较复杂。因此&#xff0c;必须采取一些额外的措施来确保 WebSocket 能在多个服务实例之间正确工作。 WebSocket 在分布式环境…...

Windows日志分析

查看服务日志文件 windows下我们可以通过时间查看器来查看windows系统下服务&#xff0c;应用&#xff0c;系统等产生的事件以及日志 1.打开方式是&#xff1a; winr 输入eventvwr.msc 2.控制面板--系统与安全--事件查看器 事件类型分为5种 错误&#xff1a;标识问题很严重…...

青少年编程与数学 02-009 Django 5 Web 编程 20课题、测试

青少年编程与数学 02-009 Django 5 Web 编程 20课题、测试 一、软件测试二、自动化测试三、单元测试四、Django 单元测试&#xff08;一&#xff09;、创建测试用例&#xff08;二&#xff09;、运行测试&#xff08;三&#xff09;、常用测试功能 课题摘要: 本文全面介绍了软件…...

WPF 中为 Grid 设置背景图片全解析

WPF 中为 Grid 设置背景图片全解析 在 WPF&#xff08;Windows Presentation Foundation&#xff09;开发中&#xff0c;界面的美观度是吸引用户的重要因素之一。而添加背景图片是提升界面视觉效果的常见手段。今天&#xff0c;我们就来深入探讨在 WPF 里如何为 Grid 设置背景…...

3.10 实战Hugging Face Transformers:从文本分类到模型部署全流程

实战Hugging Face Transformers:从文本分类到模型部署全流程 一、文本分类实战:IMDB电影评论情感分析 1.1 数据准备与预处理 from datasets import load_dataset from transformers import AutoTokenizer # 加载IMDB数据集 dataset = load_dataset("imdb") …...

Android中获取so文件来源于哪个库

Android app中可能有很多的.so文件&#xff0c;有时我们不确定这些.so文件都是来源于哪些库的&#xff0c;可以通过在build.gradle中添加代码来统计。具体方法如下&#xff1a; 1.在com.android.application模块的build.gradle文件最后添加如下代码&#xff1a; // 获取所有的…...

地面沉降监测,为地质安全保驾护航

地面沉降&#xff0c;不容忽视的城市隐患 随着城市化进程的加速&#xff0c;大规模的工程建设、地下水过度开采等因素&#xff0c;导致地面沉降现象日益严重。地面沉降不仅会使建筑物开裂、倾斜&#xff0c;影响其使用寿命和安全性&#xff0c;还会破坏地下管线&#xff0c;引…...

宝塔docker 安装oracle11G

1、拉取镜像 sudo docker pull iatebes/oracle_11g #iatebes为用户名2、查看镜像 sudo docker images3、创建并运行容器 docker run -d --privileged --name oralce11g -p 1521:1521 iatebes/oracle_11g4、登录到容器 5、进入容器并修改system用户密码 docker exec -it orac…...

unity学习39:连续动作之间的切换,用按键控制角色的移动

目录 1 不同状态之间的切换模式 1.1 在1个连续状态和一个连续状态之间的transition&#xff0c;使用trigger 1.2 在2个连续状态之间的转换&#xff0c;使用bool值切换转换 2 至少现在有2种角色的移动控制方式 2.1 用CharacterController 控制角色的移动 2.2 用animator…...

DeepSeek等大模型功能集成到WPS中的详细步骤

记录下将**DeepSeek功能集成到WPS中**的步骤&#xff0c;以备忘。 1. 下载并安装OfficeAI插件 访问OfficeAI插件下载地址&#xff1a;https://www.office-ai.cn/&#xff0c;下载插件&#xff08;目前只支持windows系统&#xff09;。 注意&#xff0c;有两个插件&#xff0…...

基于Python的Flask微博话题舆情分析可视化系统

✅️配套lun文 1w9字 ✅️爬虫可用 12月数据 ✅️实时微博热点分析 技术栈:爬虫➕Flask后端框架➕bert深度学习模型➕mysql数据库系统功能&#xff1a;爬取微博数据&#xff08;可以是同类型文章或者制定文章&#xff09;&#xff0c;微博文章情感分析&#xff0c;微博评论情感…...

服务器A到服务器B免密登录

#!/bin/bash # 变量定义 source_host"192.168.42.250" # 源主机 IP target_host"192.168.24.43" # 目标主机 IP target_user"nvidia" # 目标主机的用户名 ssh_port"6666" # SSH 端口号 # 生成 SSH…...

Unity中可靠的UDP实现

可靠 UDP&#xff08;Reliable UDP&#xff09;是一种在用户数据报协议&#xff08;UDP&#xff09;基础上&#xff0c;通过添加额外机制来实现可靠数据传输的技术。与传统 UDP 相比&#xff0c;它克服了 UDP 本身不保证数据可靠性、顺序性以及可能丢失数据的缺点&#xff0c;同…...

轮播图html

题十二&#xff1a;轮播图 要求&#xff1a; 1.鼠标不在图片上方时&#xff0c;进行自动轮播&#xff0c;并且左右箭头不会显示&#xff1b;当鼠标放在图片上方时&#xff0c;停止轮播&#xff0c;并且左右箭头会显示&#xff1b; 2.图片切换之后&#xff0c;图片中下方的小圆…...

二十多年前的苹果电源Power Mac G4 Mdd 电源接口

在1999年&#xff0c;苹果推出了最初的Power Mac G4电脑。第一代Power Mac G4有与G3系列相似的外壳和两种主板设置&#xff0c;分别使用PCI和AGP显示总线。第二代电脑被昵称为快银或水银机&#xff0c;来自2001年的它们有更高速的PowerPC 7450系列芯片&#xff0c;增强了L2缓存…...

java听书项目

项目的架构 网关:1路由转发 2.认证鉴权(token)3.统一处理(跨域) Mysql:关系型数据库 ES:搜索数据库 Redis:页面级缓存,会话状态存储 GitLab:私有托管平台 K8S:自动化部署、扩展和管理容器化应用程序的开源系统 Jenkins:自动化部署 1.环境搭建 创建一个父工程…...

RadASM环境,win32汇编入门教程之三

;运行效果 ;win32汇编环境&#xff0c;RadAsm入门教程之三 ;在这个教程里&#xff0c;我们学一下如何增加控件&#xff0c;比如按钮&#xff0c;其它的控件类似这样增加 ;以下的代码就是在教程一的窗口模版里增加一个按钮控件&#xff0c;可以比较一下&#xff0c;增加了什么内…...

【机器学习】线性回归 多元线性回归

【机器学习系列】 KNN算法 KNN算法原理简介及要点 特征归一化的重要性及方式线性回归算法 线性回归与一元线性回归 线性回归模型的损失函数 多元线性回归 多项式线性回归 多元线性回归 V1.0多元线性回归一元线性回归与多元线性回归多元线性回归模型的误差衡量多元线性回归的最…...

线性代数中的正交和标准正交向量

在线性代数中&#xff0c;理解正交向量和正交向量至关重要&#xff0c;尤其是对于机器学习中的应用。这篇博文将简化这些概念&#xff0c;而不会太深入地深入研究复杂的数学。 正交向量 如果两个向量的点积等于零&#xff0c;则认为这两个向量是正交的。但点积到底是什么呢&am…...

Vue 项目登录的基本流程

Vue 用户登录的基本流程包括以下6个步骤&#xff1a; 步骤&#xff1a; 1. 创建登录表单 在前端&#xff0c;首先要创建一个登录表单&#xff0c;用户输入账号&#xff08;用户名、邮箱、手机号等&#xff09;和密码。 示例&#xff1a;Login.vue <template><div…...

坐井说天阔---DeepSeek-R1

前言 DeepSeek-R1这么火&#xff0c;虽然网上很多介绍和解读&#xff0c;但听人家的总不如自己去看看原论文。于是花了大概一周的时间&#xff0c;下班后有进入了研究生的状态---读论文。 DeepSeek这次的目标是探索在没有任何监督数据的情况下训练具有推理能力的大模型&#…...

Spring 是如何解决循环依赖问题的?

Spring框架通过使用三级缓存机制来解决单例Bean之间的循环依赖问题。以下是详细的解释&#xff0c;包括循环依赖的概念、Spring的解决方案以及三级缓存的具体作用。 什么是循环依赖&#xff1f; 循环依赖是指两个或多个Bean之间相互依赖&#xff0c;形成一个闭环。例如&#…...

【数据可视化-17】基于pyecharts的印度犯罪数据可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

thingboard告警信息格式美化

原始报警json内容&#xff1a; { "severity": "CRITICAL","acknowledged": false,"cleared": false,"assigneeId": null,"startTs": 1739801102349,"endTs": 1739801102349,"ackTs": 0,&quo…...

Javaweb中,使用Servlet编写简单的接口

案例&#xff1a;网页提交用户名和密码信息&#xff0c;后端校验密码长度需在6-12位之间 后端部分 WebServlet("/valid") public class SimpleServlet extends HttpServlet{public void service(HttpServletRequest req, HttpServletResponse resp) throws IOExcepti…...

三层渗透测试-DMZ区域 二三层设备区域

DMZ区域渗透 信息收集 首先先进行信息收集&#xff0c;这里我们可以选择多种的信息收集方式&#xff0c;例如nmap如此之类的&#xff0c;我的建议是&#xff0c;可以通过自己现有的手里小工具&#xff0c;例如无影&#xff0c;密探这种工具&#xff0c;进行一个信息收集。以免…...

Java 开发者需要了解的 PDF 基础知识

PDF 代表“可移植文档格式”&#xff08;Portable Document Format&#xff09;&#xff0c;它是全球最流行的文件格式。因此&#xff0c;Java 开发人员很可能会经常需要处理它。然而&#xff0c;与 Microsoft Word 或 HTML/XML 这样的格式相比&#xff0c;PDF 并不那么直观。理…...

基于图像处理的裂缝检测与特征提取

一、引言 裂缝检测是基础设施监测中至关重要的一项任务,尤其是在土木工程和建筑工程领域。随着自动化技术的发展,传统的人工巡检方法逐渐被基于图像分析的自动化检测系统所取代。通过计算机视觉和图像处理技术,能够高效、精确地提取裂缝的几何特征,如长度、宽度、方向、面…...

Webpack 基础入门

一、Webpack 是什么 Webpack 是一款现代 JavaScript 应用程序的静态模块打包工具。在 Web 开发中&#xff0c;我们的项目会包含各种类型的文件&#xff0c;如 JavaScript、CSS、图片等。Webpack 可以将这些文件打包成一个或多个文件&#xff0c;以便在浏览器中高效加载。它就像…...

掌握SQLite_轻量级数据库的全面指南

1. 引言 1.1 SQLite简介 SQLite 是一个嵌入式关系型数据库管理系统,它不需要单独的服务器进程或系统配置。它的设计目标是简单、高效、可靠,适用于各种应用场景,尤其是移动设备和嵌入式系统。 1.2 为什么选择SQLite 轻量级:文件大小通常在几百KB到几MB之间。无服务器架构…...

大数据处理如何入门

大数据处理的入门可以从以下几个方面入手&#xff1a; 1. 基础知识学习 在深入大数据领域之前&#xff0c;建议先掌握一些基础知识&#xff0c;包括数据类型、存储与处理的基本概念&#xff0c;以及常用的数据处理工具。例如&#xff0c;Python或Java编程语言在大数据领域应用…...

算法与数据结构(最小栈)

题目 思路 为了返回栈中的最小元素&#xff0c;我们需要额外维护一个辅助栈 min_stack&#xff0c;它的作用是记录当前栈中的最小值。 min_stack的作用&#xff1a; min_stack的栈顶元素始终是当前栈 st 中的最小值。 每当st中压入一个新元素时&#xff0c;如果这个元素小于等…...

LeetCode 1287.有序数组中出现次数超过25%的元素:遍历

【LetMeFly】1287.有序数组中出现次数超过25%的元素&#xff1a;遍历 力扣题目链接&#xff1a;https://leetcode.cn/problems/element-appearing-more-than-25-in-sorted-array/ 给你一个非递减的 有序 整数数组&#xff0c;已知这个数组中恰好有一个整数&#xff0c;它的出…...

春招项目=图床+ k8s 控制台(唬人专用)

1. 春招伊始 马上要春招了&#xff0c;一个大气的项目&#xff08;冲击波项目&#xff09;直观重要&#xff0c;虽然大家都说基础很重要&#xff0c;但是一个足够新颖的项目完全可以把你的简历添加一个足够闪亮的点。 这就不得不推荐下我的 k8s 图床了&#xff0c;去年折腾快…...

Vue 记录用户进入页面的时间、离开页面的时间并计算时长

在 Vue 项目中&#xff0c;要记录用户进入页面的时间、离开页面的时间&#xff0c;并在用户离开时计算时长并调用后端接口&#xff0c;可以借助 Vue 的生命周期钩子和浏览器的一些事件来实现。以下是具体的实现步骤和示例代码&#xff1a; 实现思路 记录进入时间&#xff1a;…...

解锁豆瓣高清海报(三)从深度爬虫到URL构造,实现极速下载

脚本地址: 项目地址: Gazer PosterBandit_v2.py 前瞻 之前的 PosterBandit.py 是按照深度爬虫的思路一步步进入海报界面来爬取, 是个值得学习的思路, 但缺点是它爬取慢, 仍然容易碰到豆瓣的 418 错误, 本文也会指出彻底解决旧版 418 错误的方法并提高爬取速度. 现在我将介绍…...

机器学习--逻辑回归

机器学习–逻辑回归 一、认知革命&#xff1a;从线性回归到逻辑回归 1.1 本质差异对比 维度线性回归逻辑回归输出类型连续值概率值 (0-1)目标函数最小二乘法极大似然估计数学表达式 y w T x b yw^Txb ywTxb p 1 1 e − ( w T x b ) p\frac{1}{1e^{-(w^Txb)}} p1e−(wTxb…...