论文分享 | PromptFuzz:用于模糊测试驱动程序生成的提示模糊测试
大语言模型拥有的强大能力可以用来辅助多种工作,但如何有效的辅助仍然需要人的精巧设计。分享一篇发表于2024年CCS会议的论文PromptFuzz,它利用模型提示生成模糊测试驱动代码,并将代码片段嵌入到LLVM框架中执行模糊测试。
论文摘要
制作高质量的模糊测试驱动程序不仅耗时而且还需要对被测目标有深入的了解,即使是最先进的自动化模糊测试驱动程序生成技术也未能达到预期。虽然用被测目标代码派生(OSS-Fuzz)的方式可以达到深度状态,但是程序逻辑的覆盖范围有限。解释性模糊测试(Hopper)可以探索多数接口调用,不过需要在较大的搜索空间进行多次尝试。
论文提出了 PromptFuzz ,一种覆盖引导的模糊器,它可以迭代生成模糊测试驱动程序来探索未被发现的库程序代码。通过使用大模型提示词探索被测程序的接口调用,本文提出了几种关键技术,包括:1)指导程序生成,2)错误程序验证,3)覆盖引导的提示变异,4)变量约束的模糊器调度。PromptFuzz 在 14 个真实的库程序上进行了评估,模糊测试驱动程序的分治覆盖率相比于 OSS-Fuzz 和 Hopper 分别高出 1.61 倍和 1.63 倍。此外,所提方案在 49 次崩溃中检测到了 33 个新的漏洞,其中 30 个漏洞已得到相应社区的确认。
1 背景介绍
模糊测试对软件的安全性和可靠性至关重要。OSS-Fuzz为开源软件部署了最先进的模糊测试器,截至2023年2月,已在850个项目中发现并解决了8900多个漏洞和28000个错误。开发者会选择合适的模糊测试器(Fuzzer)并编写高质量的模糊测试驱动程序(Fuzz Driver),驱动程序会解析来自模糊测试器的输入并调用被测目标(Target or Library)的程序代码。然而,编写高质量的模糊测试驱动程序具有挑战性,因为它既耗时又需要对被测目标有深入的了解。手动编写的模糊测试驱动程序通常只调用了被测目标的一小部分功能,限制了模糊测试的能力。
与手动编写的模糊测试驱动程序相比,自动化技术通过从源代码或运行时反馈中学习被测目标的接口调用情况,从而派生出模糊测试驱动程序。FUDGE,FuzzGen,UTopia方案从源代码中采用静态分析的方式提取接口调用代码,而APICraft,WINNIE则从进程执行中动态跟踪记录接口的调用顺序。Hopper是最先进的模糊测试驱动程序生成解决方案(与本文同一团队的工作,发表于2023年CCS会议),它会将对被测目标的模糊测试问题转化为解释性模糊测试问题,从接口调用的动态反馈中学习有效的接口使用情况。尽管可以覆盖到大多数接口函数,但Hopper需要在广阔的搜索空间中进行多次尝试,才能找到有用且满足深度的接口调用序列。
大语言模型(LLM)在生成代码方面有出色的表现,可以在不依赖被测目标代码的情况下可以有效地探索接口使用情况。以GPT系列为例,它们在广泛的代码预料库上进行过训练,能够生成符合用户意图的代码。之前的工作也尝试使用LLM生成模糊测试驱动程序,但它们设计的指令仅限于特定场景,生成的驱动程序在接口调用上多样性较低,无法覆盖不常用代码或深度状态。本文引入了PromptFuzz,一种覆盖引导的模糊测试器,它会迭代地改变提示词以探索未发现的库程序代码。
2 基础概念
- 库程序模糊测试
库程序在软件开发中被广泛使用,因此针对它的模糊测试变得越来越重要。与命令行程序不同,库程序拥有多个访问入口点,即程序接口函数,这些入口有严格的格式约束规范。为了能够利用现有的模糊测试器,相应的模糊测试驱动程序被开发出来,驱动程序从模糊测试器接受随机字节,然后将这些字节转换成结构良好的接口调用参数,喂给被测目标执行模糊测试。
论文给出了一个模糊测试驱动程序的例子,该驱动程序嵌入在LLVM框架中,每次执行一个测试用例。驱动程序接受数据和大小两个参数,被测目标为视频解码库libvpx,驱动程序执行初始化和数据转换操作,调用库程序的接口函数进行视频解码。
#include <vpx/vp8dx.h>
#include <vpx/vp8cx.h>
#include <vpx/vpx_decoder.h>extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {// Create the decoder configurationvpx_codec_dec_cfg_t dec_cfg = {0};...// Initialize the decodervpx_codec_ctx_t decoder;vpx_codec_iface_t *decoder_iface = vpx_codec_vp8_dx();vpx_codec_err_t decoder_init_res = vpx_codec_dec_init_ver(&decoder, decoder_iface, &dec_cfg, 0, VPX_DECODER_ABI_VERSION);if (decoder_init_res != VPX_CODEC_OK) {return 0;}// Process the input datavpx_codec_err_t decode_res = vpx_codec_decode(&decoder, data, size, NULL, 0);if (decode_res != VPX_CODEC_OK) {vpx_codec_destroy(&decoder);return 0;}// Get the decoded framevpx_image_t *img = NULL;vpx_codec_iter_t iter = NULL;while ((img = vpx_codec_get_frame(&decoder, &iter))!= NULL) {// Process the framevpx_img_flip(img);...}// Cleanupvpx_codec_destroy(&decoder);return 0;
}
- 大语言模型
LLM是一种深度学习模型,具有非常复杂的架构和大量的参数,使得它们能够从大量文本数据中获取知识,GPT3,ChatGPT,GPT4是当前十分具有代表性的LLM。大语言模型被训练为预测下一个词,表示为 w n + 1 w_{n+1} wn+1,给定一个词序列 w 1 , w 2 , . . . , w n w_1,w_2,...,w_n w1,w2,...,wn,最大化语言模型的目标函数,如下列公式。
P ( w 1 , w 2 , . . . , w n ) = ∏ i = 1 n P ( w i ∣ w 1 , w 2 , . . . , w i − 1 ) P(w_1,w_2,...,w_n)=\prod^n_{i=1}P(w_i|w_1,w_2,...,w_{i-1}) P(w1,w2,...,wn)=i=1∏nP(wi∣w1,w2,...,wi−1)
在推理阶段,LLM利用广泛参数中学习到的模型权重,基于先前的token
w 1 , w 2 , . . . , w n w_1,w_2,...,w_n w1,w2,...,wn,自动回归地生成下一个token
w n + 1 w_{n+1} wn+1,用户提供的起始token
被称为提示词。为了确保LLM产生的输出与用户给定指令保持一致,一系列LLM已通过强化学习训练得到增强,例如ChatGPT和GPT4。
- 基于大语言模型的模糊测试驱动程序生成
最近,出现一些利用LLM来增强模糊测试的研究,其主要的挑战包括自动构造提示词和对模型输出的验证。在基于LLM的模糊测试驱动程序生成中,提示词通常由任务描述和上下文信息组成。为了尽可能提供信息和指导模型,任务描述应至少制定被测目标库程序,以及包含在其中的接口函数。在早期的尝试中,每个提示词仅分配一个接口函数作为目标,过于简单而且难以有效果。另一方面,LLM生成的代码无法直接用于模糊测试,因为它产生的代码很容易出错。依赖编译器或简单规则进行输出的验证,只能报告语法或浅层逻辑错误,当其用作模糊测试驱动程序时,这种缺陷代码会产生许多误报。
3 系统设计
PromptFuzz通过覆盖率引导的LLM提示词生成高质量的模糊测试驱动程序以检测库程序错误,它会改变LLM提示词以生成涵盖更广泛接口调用范围的驱动程序,首先随机选择一个库接口函数构造提示词,然后根据覆盖率反馈改变该提示词,直到模糊测试达到被测目标的收敛,工作流程如图1所示。
3.1 指导程序生成
论文选择ChatGPT和GPT-4作为大语言模型来指导模糊测试驱动程序生成,尽管模型生成的程序并不总能够严格遵循指令,但它们有助于探索有效的库程序接口调用情况,可以用提示词来引导大语言模型生成符合预期的程序。PromptFuzz使用目标库程序和接口函数组合填充提示词模板,如图2所示包含以下组件。
- 任务描述。说明了LLM应生成的驱动程序代码,指定了库程序的哪些接口函数在
LLVMFuzzerTestOneInput
函数中是必需的。 - 库程序上下文。包括了库程序使用的头文件,接口函数签名,自定义类型等信息,通过整合对库程序上下文的理解,显著减少LLM产生幻觉的发生。
- 库程序说明。指导LLM生成符合库程序所需指定模式的代码,部分库程序的接口函数可能从文件,文件流或描述符读取输入,对其进行相应规范。
3.2 错误程序验证
PromptFuzz消除错误驱动程序通过如下三个步骤。
- 删除C/C++编译器识别出语法错误的驱动程序。
- 剩余的驱动程序编译成可执行文件,结合多个运行时
sanitizers
,捕获和分析与预期行为模式的偏差。 - 使用提供的语料库对这些驱动程序进行模糊测试,删除检测到偏差的任何驱动程序。
在这部分模糊测试过程中,触发独特行为的输入将添加到语料库中,从而扩展进行更深入的运行时验证。PromptFuzz同时还会计算驱动程序执行的代码覆盖率,删除那些不符合代码覆盖标准的驱动程序,表明库程序的接口函数得到了充分的利用,错误驱动程序验证流程如图3所示。
3.3 覆盖引导的提示变异
为了创建连续多轮次的提示词,PromptFuzz会改变前几轮提示词中的接口函数组合,生成不同的模糊测试驱动程序,同时以代码覆盖率作为反馈来生成有效的提示词。
- 能量分配
首先,PromptFuzz为每个接口函数分配相同的能量,在每次模糊测试迭代期间,更新访问过的分支并计算接口函数的分支覆盖率。
c o v ( i ) = 包含 i 的覆盖的分支数 包含 i 的所有的分支数 cov(i)=\frac{包含i的覆盖的分支数}{包含i的所有的分支数} cov(i)=包含i的所有的分支数包含i的覆盖的分支数
接着,按照AFLFast中的指数调度来更新其能量,令 s e e d ( i ) seed(i) seed(i)为调用接口函数 i i i的种子驱动程序数量, p r o m p t ( i ) prompt(i) prompt(i)表示为包含接口函数 i i i的提示词数量,计算能量如下。
e n e r g y ( i ) = 1 − c o v ( i ) ( 1 + s e e d ( i ) ) e × ( 1 + p r o m p t ( i ) ) e energy(i)=\frac{1-cov(i)}{(1+seed(i))^e \times (1+prompt(i))^e} energy(i)=(1+seed(i))e×(1+prompt(i))e1−cov(i)
执行越少次数的接口函数将被分配更高的能量,于是在未来的提示词中包含该接口函数的概率就越高。
- 变异策略
然后,PromptFuzz会改变提示词中的接口函数组合以指导模糊测试驱动程序生成,这些策略与传统的模糊测试器类似,例如在C组合中插入A函数Insert(C,A)
,替换C组合中的A函数为B函数Replace(C,A,B)
,合并C组合和S组合形成新的组合CrossOver(C,S)
。
在接口函数能量的指导下,PromptFuzz通过变异策略组合接口函数以生成之前未探索过的组合,用density
表示调用显式数据依赖的库程序接口函数的最大数量,用unique branches
表示驱动程序执行时触发的独立分支数量。计算quality(g)=density(g) x (1+unique_branches(g))
用以量化驱动程序的质量,以质量值更高为目标来指导变异策略
在每次模糊测试迭代过程中,PromptFuzz都会探索驱动程序种子集合并更新这些种子驱动程序的质量,使用库程序接口函数能量和种子驱动程序质量的反馈,应用如图4所示算法来选择下一次迭代中使用的新接口函数组合。
3.4 变量约束的模糊器调度
为了使得种子驱动程序能够执行模糊测试,PromptFuzz对其中的接口函数参数进行约束类型推断,将部分参数从常量转换为从模糊测试器输入的任意字节的变量,例如数组长度、文件名、格式化字符串等,一个简单的实例如图5所示。
最终,PromptFuzz将种子驱动程序整合到模糊测试器,根据其提供的几个特定字节来调度每个种子驱动程序,3.2节中进行错误程序验证的模糊测试语料将用来作为驱动程序的初始输入。此外,转换之前的参数常量值也将形成初始语料,配合以进行模糊测试器的执行。
4 实现验证
PromptFuzz用Rust语言实现了大约1万7千行代码,开源在仓库https://github.com/PromptFuzz/PromptFuzz中,其中使用了clang_ast
做抽象语法树的提取,额外实现了FSan
插件来进行文件描述检查。论文在14个广泛使用的开源项目上对PromptFuzz进行了评估,总体实验结果,发现的已知漏洞,消融实验和变异策略的比较,可以详细去看原论文,这里不再赘述。
学习笔记
这篇论文做了很好的尝试,利用大语言模型来生成针对被测目标的驱动程序,再使用传统的模糊测试器来执行测试,相关工作OSS-Fuzz也做过尝试。论文偏工程,有一定启发,方法比较杂,与近期部分LLM+Fuzz方向的研究类似,大语言模型用于辅助仍需要进行提纯,通过算法筛选和纠偏,但确实在自动化和发散性方面比较有效。最后,附上文献引用和DOI链接:
Lyu Y, Xie Y, Chen P, et al. Prompt Fuzzing for Fuzz Driver Generation[C]//Proceedings of the 2024 on ACM SIGSAC Conference on Computer and Communications Security. 2024: 3793-3807.
https://doi.org/10.1145/3658644.3670396
相关文章:
论文分享 | PromptFuzz:用于模糊测试驱动程序生成的提示模糊测试
大语言模型拥有的强大能力可以用来辅助多种工作,但如何有效的辅助仍然需要人的精巧设计。分享一篇发表于2024年CCS会议的论文PromptFuzz,它利用模型提示生成模糊测试驱动代码,并将代码片段嵌入到LLVM框架中执行模糊测试。 论文摘要 制作高质…...
网工日记:FTP两种工作模式的区别
FTP 的主动模式和被动模式在连接建立的发起方、数据传输端口以及对网络环境的适应性等方面存在明显区别: 1. 连接发起方 主动模式:数据连接由服务器主动发起。在控制连接建立后,客户端通过 PORT 命令告知服务器自己用于接收数据的临时端口号…...
clickhouse-backup配置及使用(Linux)
一、下载地址 Releases Altinity/clickhouse-backup GitHub 二、上传到服务器解压安装 自行上传至服务器,解压命令: tar xvf clickhouse-backup-linux-amd64.tar.gz 三、创建软连接 sudo ln -sv build/linux/amd64/clickhouse-backup /usr/local/bin/…...
【每日学点鸿蒙知识】模拟器开启网络、长时任务、兼容性测试支持、丢帧定位、SO中访问rawfile等
1、模拟器如何开启网络? 模拟器使用的是电脑本身的网络,不通过代理即可访问网络。 2、创建子window后,锁屏很短时间内,应用会被杀死? 没开长时任务,锁屏和退后台保活要开长时任务。 应用退至后台后&…...
Python 将文字和二维码 生成到BMP上 可以做标签打印等
直接上代码吧,都有注释,看得明白 将代码复制到main.py文件中,就可以调试了 from PIL import Image, ImageDraw, ImageFont import matplotlib.font_manager as fm from matplotlib.font_manager import FontProperties import os import qr…...
pat 乙级1096 大美数
若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。 输入格式: 输入在第一行中给出正整数 K(≤10),随后一行给出 K 个待检测的、不超过…...
INT303 Big Data Analytics 笔记
Lecture1 Introduction 不考! “Data Mining is the study of collecting, processing, analyzing, and gaining useful insights from data” EXPLORATORY ANALYSIS Make measurements to understand what the data looks like first steps when collecting da…...
Git 解决 everything up-to-date
首先使用git log查看历史提交,找到最新一次提交,比如: PS D:\Unity Projects\CoffeeHouse\CoffeeHouse_BurstDebugInformation_DoNotShip> git log commit a1b54c309ade7c07c3981d3ed748b0ffac2759a3 (HEAD -> master, origin/master)…...
初级算法 - 数组简介
数组简介 在TypeScript中,数组是一种存储同一类型数据的集合类型。数组可以动态调整长度,支持对元素进行增删改查等操作。通过类型注解,可以更清晰地约束数组中元素的类型,提升代码的可维护性。 创建数组的方式 1. 使用字面量方式…...
【毕业设计选题】目标检测方向毕业设计选题推荐 2025
目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整…...
适配器模式详解
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户所期望的另一个接口,使得原本不兼容的类能够协同工作。这种模式的主要目的是解决接口不匹配的问题,它通过创建一个适配器类ÿ…...
基于 Spring 的自定义注解和请求拦截器实现认证机制
基于 Spring 的自定义注解和请求拦截器实现认证机制 一、基于 Spring 的自定义注解和请求拦截器实现认证机制1. 背景2. 业务场景3. 核心实现3.1 定义自定义注解 IgnoreAuth3.2 定义请求拦截器 AuthInterceptor3.3 配置拦截器3.4 登录接口 4. 小结 一、基于 Spring 的自定义注解…...
Java编程规约:集合处理
文章目录 I 集合处理【强制】【推荐】II 知识扩展I 集合处理 【强制】 不要在 foreach 循环里进行元素的 remove / add 操作。remove 元素请使用 iterator 方式,如果并发操作,需要对 iterator 对象加锁。// 正例: List<String> list = new ArrayList<>(...
python使用PyQt5,整套,桌面应用
安装 安装 pip install PyQt55.7.1 pip install PyQtWebEngine1、创建窗口,按百分比划分 from PyQt5.QtGui import QGuiApplication from PyQt5.QtWidgets import QApplication, QWidget # 创建应用程序实例 app QApplication([]) # 创建主窗口 window QWidget(…...
机械臂的各种标定
文章目录 1. 工具坐标系标定2. 工具手标定3. 手眼标定联系 在工程中,同时使用工具坐标系标定、工具手标定和手眼标定的概念、目的和作用如下: 1. 工具坐标系标定 概念: 工具坐标系标定是指确定工具相对于机器人坐标系的位置和姿态关系的过程…...
金融租赁系统助力企业转型与市场竞争力提升
内容概要 在现代商业环境中,金融租赁系统不仅是一个简单的工具,而是企业转型的重要推动力。通过优化业务流程,提升自动化水平,它帮助企业在复杂的市场中找到自己的立足之地。想象一下,一个企业在使用传统方法时&#…...
正则表达式 - 运算符优先级
正则表达式 - 运算符优先级 正则表达式(Regular Expression,简称Regex)是一种用于处理字符串的强大工具,它通过特定的语法规则来匹配、查找和替换文本中的特定模式。在正则表达式中,运算符的优先级决定了表达式各部分的处理顺序,这对于正确理解和编写正则表达式至关重要…...
【python】unittest单元测试
文章目录 基本使用不同启动方式的区别 基本使用 下面是根据文档写的一个demo,主要的内容基本都包含了,使用时导入自己的业务类测试类中的方法就行。 import unittest# 测试类不强制test开头,仅作为规范。但必须继承unittest.TestCase class…...
【YashanDB知识库】如何使用jdbc向YashanDB批量插入gis数据
本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7817897.html?templateId1718516 以gis表为例: drop table gis; create table gis(id number not null, pos st_geometry not null); 使用如下的java代码片断,…...
基于 LangChain 实现数据库问答机器人
基于 LangChain 实现数据库问答机器人 一、简介二、应用场景三、实战案例1、需求说明2、实现思路3、对应源码 一、简介 在 Retrieval 或者 ReACT 的一些场景中,常常需要数据库与人工智能结合。而 LangChain 本身就封装了许多相关的内容,在其官方文档-SQ…...
XIAO ESP32 S3网络摄像头——2视频获取
本文主要是使用XIAO Esp32 S3制作网络摄像头的第2步,获取摄像头图像。 1、效果如下: 2、所需硬件 3、代码实现 3.1硬件代码: #include "WiFi.h" #include "WiFiClient.h" #include "esp_camera.h" #include "camera_pins.h"// 设…...
图像描述/字幕开源模型与数据集全览
图像描述/字幕(Image Captioning)是用文字描述图像内容的任务,属于计算机视觉和自然语言处理的交叉领域。大多数图像描述系统采用编码器-解码器(encoder-decoder)框架,其中输入图像被编码为中间表示形式&am…...
关于UE加载osgb数据的研究(一)
最近关于倾斜数据在UE中加载显示的问题,直接转换格式本地加载的方式避免了数据延迟加载、缓存加载,动态刷新等问题,但是也暴露了突出的问题:常规的模型格式会丢失掉倾斜数据的lod,致使效果缺失。 故而需要深入研究一下UE加载osgb数据的方式方法。 首先,我们需得学习一下…...
Hypervisor 的两种类型
文章目录 一、定义 Hypervisor(也被称为虚拟机监视器,即Virtual Machine Monitor,VMM)是一种创建和运行虚拟机的软件、固件或硬件。它可以在物理主机上划分出多个虚拟的计算环境,使得多个操作系统(Guest Op…...
07-ArcGIS For JavaScript--隐藏参数qualitySettings(memory和lod控制)
目录 1、综述2、sceneview.qualitySettings2.1、sceneview.qualitySettings.memoryLimit2.2、lodFactor2.3 additionalCacheMemory 3、结论 1、综述 先上重点,SceneView.qualitySettings为隐藏对象参数,该对象的memoryLimit和lodFactor等值,…...
内训宝企业培训平台 upload/scorm 文件上传致RCE漏洞复现
0x01 产品简介 内训宝企业培训平台是一款专注于企业内部培训的在线平台,由北京内训宝科技有限公司开发并提供服务。旨在为企业提供全方位、个性化的内部培训解决方案。通过该平台,企业可以轻松地组织和管理内部培训活动,提升员工的专业技能和综合素质,进而增强企业的竞争力…...
js按日期按数量进行倒序排序,然后再新增一个字段,给这个字段赋值 10 到1
效果如下图: 实现思路: 汇总数据:使用 reduce 方法遍历原始数据数组,将相同日期的数据进行合并,并计算每个日期的总和。创建日期映射:创建一个映射 dateMap,存储每个日期的对象列表。排序并添加…...
[2025] 如何在 Windows 计算机上轻松越狱 IOS 设备
笔记 1. 首次启动越狱工具时,会提示您安装驱动程序。单击“是”确认安装,然后再次运行越狱工具。 2. 对于Apple 6s-7P和iPad系列(iOS14.4及以上),您应该点击“Optinos”并勾选“允许未经测试的iOS/iPadOS/tvOS版本”&…...
修改表字段属性,SQL总结
MYSQl varchar转为mediumtext ALTER TABLE table_name MODIFY COLUMN column_name mediumtext; ALTER TABLE table_name MODIFY COLUMN column_name varchar(255) 1. 修改字段的数据类型 使用 MODIFY COLUMN 可以改变字段的数据类型、长度、默认值或注释,但不会更…...
艾体宝产品丨加速开发:Redis 首款 VS Code 扩展上线!
Redis 宣布推出其首款专为 VS Code 设计的 Redis 扩展。这一扩展将 Redis 功能直接整合进您的集成开发环境(IDE),旨在简化您的工作流程,提升工作效率。 我们一直致力于构建强大的开发者生态系统,并在您工作的每一步提…...
PHP 中的魔术常量
概述 PHP提供了9个魔术常数,您可以在PHP应用程序代码中使用。它们是“神奇的”,因为它们是在编译时定义的,不像常规常量(您可以自己定义)是在运行时定义的。这意味着它们的值可以根据它们在代码中的使用位置而更改。 …...
培训机构Day20
今天还是讲一些基本的js知识点。 知识点: html css :框架结构 样式修饰 javascript:行为交互,动态效果。有逻辑的语言。动态脚本语言。无需编译,解释执行。 寄生在网页上执行。浏览器内核自带js解释器。 js引入三…...
Day62 图论part11
Floyd 算法精讲 Floyd 算法代码很简单,但真正理解起原理 还是需要花点功夫,大家在看代码的时候,会发现 Floyd 的代码很简单,甚至看一眼就背下来了,但我为了讲清楚原理,本篇还是花了大篇幅来讲解。 代码随想…...
【Golang 面试题】每日 3 题(十三)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...
云手机+Facebook:让科技与娱乐完美结合
移动互联网时代,Facebook作为全球最大的社交媒体平台之一,早已成为企业、品牌和组织竞相角逐的营销阵地。而云手机的出现,则为Facebook营销注入了新的活力,其独特的优势让营销活动更加高效、精准且灵活。本文将深入探讨云手机在Fa…...
2024年总结与展望
23年底的时候,和一大批同事一起转到刚成立的合资公司,当时大家都以为会是好的归宿,毕竟外资文化,投了这么多钱,起码两三年内应该是稳定、不内卷的,似乎可以安心工作,安心生活。2024的开头确实挺…...
标准流,浮动,Flex布局
三个 div 盒子在一一行显示,但是 div 标签默认是独占一行的 想要实现块级盒子在一行,两种方法,浮动和 Flex 布局 浮动之后的盒子:顶对齐,行内块显示特点(宽高显示) 浮动的盒子会脱标,…...
2 、什么是Java中的不可变类
在Java中,不可变类(Immutable Class)是指一类其对象一旦创建后,就不能更改其状态(即对象的字段值不能被修改)的类。不可变类提供了一种安全的方式来管理对象,尤其是在并发编程中,能够…...
网络安全技能试题总结参考
对网络安全技能测试相关的试题进行了总结,供大家参考。 一、单选题 1.(单选题)以下属于汇聚层功能的是 A.拥有大量的接口,用于与最终用户计算机相连 B.接入安全控制 C.高速的包交换 D.复杂的路由策略 答案:D 2.(单选题)VLAN划分的方法,选择一个错误选项 A.基于端口…...
基于Python的社交音乐分享平台
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
CP AUTOSAR标准之FlexRayDriver(AUTOSAR_SWS_FlexRayDriver)(更新中……)
1 简介和功能概述 FlexRay驱动程序(Fr)抽象了特定FlexRay通信控制器(CC)的硬件相关实现细节。本规范主要依赖于符合FlexRay规范[13]的FlexRay CC。此外,本规范还支持符合FlexRay规范[14]的旧版FlexRay控制器。本SWS中因支持的FlexRay规范不同而导致的不同行为在适用的情况下以…...
AIDD -人工智能药物设计- DrugChat:多模态大语言模型实现药物机制与属性的全方位预测
DrugChat:多模态大语言模型实现药物机制与属性的全方位预测 今天为大家介绍的是来自加州大学圣地亚哥分校谢澎涛团队的一篇论文。准确预测潜在药物分子的作用机制和性质对于推进药物发现至关重要。然而,传统方法通常需要为每个特定的预测任务开发专门的…...
CP AUTOSAR标准之FlexRayInterface(AUTOSAR_SWS_FlexRayInterface)(更新中……)
1 简介和功能概述 该规范指定了AUTOSAR基础软件模块“FlexRay接口”的功能、API和配置。 在AUTOSAR分层软件架构中,FlexRay接口属于ECU抽象层,或者更准确地说,属于通信硬件抽象。这表明了FlexRay接口的主要任务: 为上层提供FlexRay通信系统的抽象接口。至少就数据传…...
【Linux-多线程】线程互斥(锁和它的接口等)
一、线程互斥 我们把多个线程能够看到的资源叫做共享资源,我们对共享资源进行保护,就是互斥 1.多线程访问问题 【示例】见一见多线程访问问题,下面是一个抢票的代码,共计票数10000张,4个线程去抢 之前我们展示过封…...
当一个服务拆成两个服务的错误
1.老路由信息没有修改,导致一直404...
单元测试入门和mockup
Java 新手入门:Java单元测试利器,Mock详解_java mock-CSDN博客 这个是典型的before when assert三段式,学一下单测思路 这个没有动态代理,所以是直接class(对比下面) Jmockit使用笔记_增加代码覆盖率_覆盖try catch_使用new Mock…...
Android Room 框架的初步使用
一、简介 Room 是一个强大的对象关系映射库,它允许你将 SQLite 数据库中的表映射到 Java 或 Kotlin 的对象(称为实体)上。你可以使用简单的注解(如 Entity、Dao 和 Database)来定义数据库表、数据访问对象(…...
后盼2024,前顾2025
年年花落又花开,后顾2024,前盼2025~~ 2024年,继续前进,稳扎稳打。 生活 组织并陪伴家人去了理县、成都等地游玩,nice。 出差和旅行去了杭州、西安、成都、江门、珠海等地,嘻嘻。 爱人如养花,…...
电子电器架构 ---什么是智能电动汽车上的逆变器?
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…...
Android ActionBar 技术深度解析
Android ActionBar 技术深度解析 概述 ActionBar 是 Android 应用中的一个核心 UI 组件,用于提供导航、操作和品牌展示。它通常位于应用窗口的顶部,包含应用的标题、导航按钮、操作项等。ActionBar 自 Android 3.0(API 11)引入,并在 Android 5.0(API 21)后被 Toolbar …...