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

【大数据】MapReduce 编程-- PageRank--网页排名算法,用于衡量网页“重要性”-排序网页

PageRank 是 Google 创始人拉里·佩奇(Larry Page)和谢尔盖·布林(Sergey Brin)在 1998 年提出的一种网页排名算法,用于衡量网页“重要性”的一种方式。它是搜索引擎中用于排序网页的一种基础算法

一个网页越是被其他重要网页链接,它就越重要

PageRank 的计算流程

  1. 初始化:假设总共 N 个网页,每个网页初始 PR 值为 1/N。

  2. 迭代计算:通过 MapReduce 不断迭代更新 PR 值,直到值趋于稳定。

  3. 结果输出:PR 值越大,说明该网页越重要,排名越靠前



A 0.25 B C D
B 0.25 A D
C 0.25 C
D 0.25 B C
  • 第一列:网页编号(如 A)

  • 第二列:初始 PageRank 值(例如 0.25)

  • 后续列:该网页链接到的其他网页

迭代的计算PageRank值,每次MapReduce 的输出要和输入的格式是一样的,这样才能使得Mapreduce 的输出用来作为下一轮MapReduce 的输入


Map过程

解析输入行,提取:

  • 当前网页 ID

  • 当前网页的 PR 值

  • 当前网页链接的其他网页列表

计算出要链接到的其他网友的个数,然后求出当前网页对其他网页的贡献值。

第一种输出的< key ,value>中的key 表示其他网页,value 表示当前网页对其他网页的贡献值

为了区别这两种输出

出链网页贡献值(标记为 @):<出链网页, @贡献值>

第二种输出的< key ,value>中的key 表示当前网页,value 表示所有其他网页。

网页链接列表(标记为 &):<当前网页, &链接网页列表>
 

B @0.0833
C @0.0833
D @0.0833
A &B C D

import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;/*map过程*/
public class MyMapper extends Mapper<Object,Text,Text,Text>{        private String id;private float pr;       private int count;private float average_pr;       public void map(Object key,Text value,Context context)throws IOException,InterruptedException{            StringTokenizer str = new StringTokenizer(value.toString());//对value进行解析id =str.nextToken();//id为解析的第一个词,代表当前网页pr = Float.parseFloat(str.nextToken());//pr为解析的第二个词,转换为float类型,代表PageRank值count = str.countTokens();//count为剩余词的个数,代表当前网页的出链网页个数average_pr = pr/count;//求出当前网页对出链网页的贡献值String linkids ="&";//下面是输出的两类,分别有'@'和'&'区分while(str.hasMoreTokens()){String linkid = str.nextToken();context.write(new Text(linkid),new Text("@"+average_pr));//输出的是<出链网页,获得的贡献值>linkids +=" "+ linkid;}       context.write(new Text(id), new Text(linkids));//输出的是<当前网页,所有出链网页>}       
}

输入数据格式(value):网页ID  PageRank值  出链网页1  出链网页2 ...

输出键值对:

  1. <出链网页ID, "@贡献值">(表示这个网页从别的网页获得了多少贡献)

  2. <当前网页ID, "& 出链网页列表">(保留网页结构)

String id;         // 当前网页ID
float pr;          // 当前网页的PageRank值
int count;         // 出链网页的数量
float average_pr;  // 当前网页对每个出链网页的平均贡献值
StringTokenizer str = new StringTokenizer(value.toString());是把整行字符串(比如 "A 1.0 B C D")按照空格分割成一个个小单元(token)

id = str.nextToken();  // 第一个token是当前网页ID------取出第一个单词(比如 A),表示当前正在处理的网页 ID,赋值给 id

pr = Float.parseFloat(str.nextToken());   // 第二个token是当前网页的PageRank值
取出第二个单词(比如 "1.0"),将其转为 float 类型,就是当前网页的 PageRank 值,赋值给 pr

count = str.countTokens();// 剩下的token是出链网页数量----统计剩余 token 的数量
average_pr = pr / count; //把当前网页的 PageRank 值平均分配给所有它链接的网页

贡献值输出:

while(str.hasMoreTokens()) {String linkid = str.nextToken(); // B, 然后 C, 然后 Dcontext.write(new Text(linkid), new Text("@" + average_pr));linkids += linkid + " "; // 把 B、C、D 加入 linkids 中
}

str.hasMoreTokens() 只要还有未读取的 token(即还有出链网页没处理完),就继续执行循环体

网页结构输出(带 & 开头):

String linkids记录当前网页的所有出链网页 ID 

context.write(new Text(id), new Text(linkids));


Shuffle 是指 Map 阶段输出的数据按照 key 进行分组,并将具有相同 key 的数据发送到同一个 Reduce 任务中处理的过程 

每个网页 Map 阶段都会:

  • 向它出链的网页发 PageRank 贡献(加@前缀)

  • 自己保留一份出链结构

Shuffle 阶段:按网页ID归并聚合

  • 对 Map 输出的 key(网页 ID)进行排序

  • 将相同 key 的所有 value 合并成一个列表

Reducer 接收到的格式为:<网页ID, [贡献值, 出链结构]>

<网页ID, 列表[@贡献1, @贡献2, ..., &出链结构]>


Reduce过程

  • 求每个网页的新 PageRank 值

  • 保留该网页的出链结构

  • 输出格式为网页ID 新的PR值 出链网页列表

shuffule的输出也即是reduce的输入。

reduce输入的key 直接作为输出的key

reduce输入的value 进行解析,它是一个列表

a.若列表里的值里包含`@`,就把该值`@`后面的字符串转化成`float`型加起来

b.若列表里的值里包含`&`,就把该值`&`后面的字符串提取出来

c.把所有贡献值的加总,和提取的字符串进行连接,作为`reduce`的输出`value`

public class MyReducer extends Reducer<Text,Text,Text,Text>{

继承 Hadoop 提供的 Reducer 类,泛型参数说明:

  • Text, Text:输入的 key 和 value 类型

  • Text, Text:输出的 key 和 value 类型

public void reduce(Text key, Iterable<Text> values, Context context)
        throws IOException, InterruptedException {
为每一个网页 key 传入一个 values 列表,里面是 Shuffle 过程收集到的所有值

import java.io.IOException;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;/*** Reduce过程:计算每个网页的新PageRank值,并保留出链网页结构。* 输入:<网页ID, [@贡献值, @贡献值, ..., &出链网页列表]>* 输出:<网页ID, 新PageRank值 + 出链网页列表>*/
public class MyReducer extends Reducer<Text, Text, Text, Text> {public void reduce(Text key, Iterable<Text> values, Context context)throws IOException, InterruptedException {String lianjie = ""; // 用于保存当前网页的出链网页列表(结构信息)float pr = 0;        // 用于累加当前网页从其他网页获得的PageRank贡献值// 遍历所有传入的值:包含两类信息,分别通过首字符判断for (Text val : values) {String strVal = val.toString(); // 当前值转换为字符串if (strVal.substring(0, 1).equals("@")) {// 以@开头,表示这是从其他网页传来的PageRank贡献值// 取出@后面的数值并累加pr += Float.parseFloat(strVal.substring(1));} else if (strVal.substring(0, 1).equals("&")) {// 以&开头,表示这是本网页的出链结构信息// 将&后面的网页列表保留下来lianjie += strVal.substring(1); // 注意可能是多个网页用空格分隔}}// 平滑处理(加入跳转因子d = 0.8)// 假设网页总数为4,(1 - d) / N = 0.2 * 0.25 = 0.05// 新PageRank = d * 贡献值总和 + (1 - d)/Npr = 0.8f * pr + 0.2f * 0.25f;// 构造输出字符串:新PR值 + 出链网页列表String result = pr + lianjie;// 输出结果:<当前网页ID, 新的PageRank值 + 出链网页列表>context.write(key, new Text(result));}
}

遍历所有值,分类处理

pr += Float.parseFloat(val.toString().substring(1));

如果是 @ 开头,就从第 1 个字符开始截取字符串(去掉 @),再把它转换成浮点数,并累加到 pr

lianjie += val.toString().substring(1);

如果是 & 开头,就把 & 后面的出链网页字符串加到变量 lianjie

  • @ 开头:表示来自其他网页的 PageRank 贡献值,提取并累加。

  • & 开头:表示这是该网页自身的 出链网页结构,保留下来。

pr = 0.8f * pr + 0.2f * 0.25f;

 PageRank 中的阻尼系数模型

  • 0.8f:阻尼系数 d(表示 80% 用户点击链接)

  • 0.2f:1 - d,有 20% 用户会随机跳转

  • 0.25f:假设网页总数是 4 个,随机跳转概率均分为 0.25

PR(A) = d × 所有贡献值之和 + (1 - d) / N
 



import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import java.util.Scanner;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import java.net.URI;public class MyRunner {public static void main(String[] args)throws IOException, ClassNotFoundException, InterruptedException {// 创建 Hadoop 配置对象Configuration conf = new Configuration();// 使用控制台输入获取初始输入路径和输出路径Scanner sc = new Scanner(System.in);System.out.print("inputPath:");String inputPath = sc.next();      // 第一次输入的 HDFS 输入路径,如:/pagerank/inputSystem.out.print("outputPath:");String outputPath = sc.next();     // 第一次输出的 HDFS 路径,如:/pagerank/output// 进行 PageRank 的迭代计算,这里迭代 5 次for (int i = 1; i <= 5; i++) {// 创建新的 MapReduce 作业Job job = Job.getInstance(conf);// 设置 Job 的主类,用于打包 Jarjob.setJarByClass(MyRunner.class);// 设置 Map 和 Reduce 的处理类job.setMapperClass(MyMapper.class);job.setReducerClass(MyReducer.class);// 设置 Map 阶段输出键值对类型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(Text.class);// 设置 Reduce 阶段输出键值对类型(最终输出)job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);// 设置输入数据路径(每轮迭代输入路径是上一轮的输出)FileInputFormat.setInputPaths(job, new Path("hdfs://master:9000" + inputPath));// 设置输出数据路径(每轮迭代输出不同路径)FileOutputFormat.setOutputPath(job, new Path("hdfs://master:9000" + outputPath));// 更新下一轮迭代的输入输出路径inputPath = outputPath;        // 当前输出变为下一轮的输入outputPath = outputPath + i;   // 每次输出加上数字以区分路径(如 output1, output2,...)// 提交作业并等待执行完成job.waitForCompletion(true);}// 读取最终输出文件内容并打印到控制台try {// 获取 Hadoop 文件系统FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), new Configuration());// 拼接最终输出文件的路径(最后一轮输出的 part-r-00000)Path srcPath = new Path(outputPath.substring(0, outputPath.length() - 1) + "/part-r-00000");// 打开输出文件FSDataInputStream is = fs.open(srcPath);// 打印最终结果到控制台System.out.println("Results:");while (true) {String line = is.readLine(); // 读取一行结果if (line == null) break;     // 如果到文件末尾,结束循环System.out.println(line);    // 打印当前行}is.close(); // 关闭输入流} catch (Exception e) {e.printStackTrace(); // 如果读取输出失败,打印错误}}
}

相关文章:

【大数据】MapReduce 编程-- PageRank--网页排名算法,用于衡量网页“重要性”-排序网页

PageRank 是 Google 创始人拉里佩奇&#xff08;Larry Page&#xff09;和谢尔盖布林&#xff08;Sergey Brin&#xff09;在 1998 年提出的一种网页排名算法&#xff0c;用于衡量网页“重要性”的一种方式。它是搜索引擎中用于排序网页的一种基础算法 一个网页越是被其他重要…...

Craw4AI:LLM友好的网页爬虫

GitHub&#xff1a;https://github.com/unclecode/crawl4ai 更多AI开源软件&#xff1a;发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI Crawl4AI旨在让网页爬取和数据提取变得简单而高效。无论构建复杂的 AI 应用程序还是增强大语言模型&#xff0c;Crawl4AI 都能…...

idea 安装飞算-javaAI 插件使用

文章目录 前言idea 安装飞算-javaAI 插件使用1. 介绍一下飞算-AI2. 安装使用 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的…...

Lombok

Lombok Lombok 是一个 Java 库&#xff0c;通过注解自动生成样板代码&#xff08;如 Getter/Setter、构造函数等&#xff09;&#xff0c;从而简化开发。在你提供的代码中&#xff0c;AllArgsConstructor 就是一个 Lombok 注解。以下是 Lombok 常用注解及其作用的详细说明&…...

起点与破圈

写了多年代码&#xff0c;我为什么开始转向算法&#xff0c;直到如今投身于大模型领域&#xff1f; 作为一名拥有 10 年经验的开发者&#xff0c;我的职业路径几乎覆盖了技术发展的多个阶段。从最早使用 Flask/Django 开发网站&#xff0c;到后来构建大数据系统、设计服务器架…...

基于AI的Web数据管道,使用n8n、Scrapeless和Claude

引言 在当今数据驱动的环境中&#xff0c;组织需要高效的方法来提取、处理和分析网络内容。传统的网络抓取面临着诸多挑战&#xff1a;反机器人保护、复杂的JavaScript渲染以及持续的维护需求。此外&#xff0c;理解非结构化的网络数据则需要复杂的处理能力。 本指南演示了如…...

7GB显存如何部署bf16精度的DeepSeek-R1 70B大模型?

构建RAG混合开发---PythonAIJavaEEVue.js前端的实践-CSDN博客 服务容错治理框架resilience4j&sentinel基础应用---微服务的限流/熔断/降级解决方案-CSDN博客 conda管理python环境-CSDN博客 快速搭建对象存储服务 - Minio&#xff0c;并解决临时地址暴露ip、短链接请求改…...

初识函数------了解函数的定义、函数的参数、函数的返回值、说明文档的书写、函数的嵌套使用、变量的作用域(全局变量与局部变量)

文章目录 一、什么是函数&#xff1f;二、函数定义与调用2.1 基本语法2.2 示例演示 三、函数参数详解3.1 位置参数3.2 默认参数3.3 可变参数3.4 关键字参数 四、返回值与文档说明4.1 返回多个值4.2 编写文档字符串 五、函数嵌套与作用域5.1 嵌套函数示例5.2 变量作用域5.3 glob…...

Java常见API文档(下)

格式化的时间形式的常用模式对应关系如下&#xff1a; 空参构造创造simdateformate对象&#xff0c;默认格式 练习.按照指定格式展示 package kl002;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;public class Date3 {publi…...

ubuntu 20.04 ping baidu.coom可以通,ping www.baidu.com不通 【DNS出现问题】解决方案

ping baidu.coom可以通&#xff0c;ping www.baidu.com不通【DNS出现问题】解决方案 检查IPV6是否有问题 # 1. 检查 IPv6 地址&#xff0c;记住网络接口的名称 ip -6 addr show# 2. 测试本地 IPv6&#xff0c;eth0换成自己的网络接口名称 ping6 ff02::1%eth0# 3. 检查路由 ip…...

Oracle 中 open_cursors 参数详解:原理、配置与性能测试

#Oracle #参数 # open_cursors #ORA-01000 在 Oracle 数据库的众多参数中&#xff0c;open_cursors是一个对应用程序性能和资源管理有着重要影响的参数。它直接关系到数据库与应用程序之间游标资源的使用与分配&#xff0c;合理配置open_cursors参数&#xff0c;能够避免应用程…...

线程调度与单例模式:wait、notify与懒汉模式解析

一.wait 和 notify&#xff08;等待 和 通知&#xff09; 引入 wait notify 就是为了能够从应用层面&#xff0c;干预到多个不同线程代码的执行顺序&#xff0c;可以让后执行的线程主动放弃被调度的机会&#xff0c;等先执行的线程完成后通知放弃调度的线程重新执行。 自助取…...

AGI大模型(27):LangChain向量存储

1 安装依赖 使用一个简单的本地向量存储 FAISS,首先需要安装它 pip install faiss-cpu -i https://pypi.tuna.tsinghua.edu.cn/simple pip install langchain_community==0.3.7 -i https://pypi.tuna.tsinghua.edu.cn/simple 由于演示过程中用到了爬虫,需要安装依赖库,如…...

Qwen3 - 0.6B与Bert文本分类实验:深度见解与性能剖析

Changelog [25/04/28] 新增Qwen3-0.6B在Ag_news数据集Zero-Shot的效果。新增Qwen3-0.6B线性层分类方法的效果。调整Bert训练参数&#xff08;epoch、eval_steps&#xff09;&#xff0c;以实现更细致的观察&#xff0c;避免严重过拟合的情况。 TODO&#xff1a; 利用Qwen3-0.6…...

Oracle 的 PGA_AGGREGATE_LIMIT 参数

Oracle 的 PGA_AGGREGATE_LIMIT 参数 基本概念 PGA_AGGREGATE_LIMIT 是 Oracle 数据库 12c 引入的一个重要内存管理参数&#xff0c;用于限制所有服务器进程使用的 PGA&#xff08;Program Global Area&#xff09;内存总量。 参数作用 硬性限制&#xff1a;设置 PGA 内存使…...

# idea 中如何将 java 项目打包成 jar 包?

idea 中如何将 java 项目打包成 jar 包&#xff1f; 例如如何将项目dzs168-dashboard-generate打包成 dzs168-dashboard-generate.jar 1、打开项目结构 Project Structure 在IDEA的顶部菜单栏中选择【File】&#xff0c;然后选择【Project Structure】&#xff08;或者使用快…...

JVM(Java 虚拟机)深度解析

JVM&#xff08;Java 虚拟机&#xff09;深度解析 作为 Java 生态系统的核心&#xff0c;JVM&#xff08;Java Virtual Machine&#xff09;是 Java 语言 "一次编写&#xff0c;到处运行" 的关键。它不仅是 Java 程序的运行环境&#xff0c;更是一个复杂的系统软件&…...

算法题(150):拼数

审题&#xff1a; 本题需要我们将数组中的数据经过排序&#xff0c;使得他们拼接后得到的数是所有拼接方案中最大的 思路&#xff1a; 方法一&#xff1a;排序贪心 贪心策略1&#xff1a;直接排序 如果我们直接按照数组数据的字典序进行排序&#xff0c;会导致部分情况出错 eg&…...

怎么样进行定性分析

本文章将教会你如何对实验结果进行定性分析&#xff0c;其需要一定的论文基础&#xff0c;文末有论文撰写小技巧&#xff0c;不想看基础原理的人可以直接调到文章末尾。 一、什么是定性分析 定性分析是一种在众多领域广泛应用的研究方法&#xff0c;它致力于对事物的性质、特…...

RLᵛ_ Better Test-Time Scaling by Unifying LLM Reasoners With Verifiers

RLᵛ: Better Test-Time Scaling by Unifying LLM Reasoners With Verifiers 在人工智能领域&#xff0c;大语言模型&#xff08;LLM&#xff09;的推理能力提升一直是研究热点。今天要解读的论文提出了一种全新的强化学习框架RLᵛ&#xff0c;通过融合推理与验证能力&#xf…...

关于百度地图JSAPI自定义标注的图标显示不完整的问题(其实只是因为图片尺寸问题)

下载了几个阿里矢量图标库里的图标作为百度地图的自定义图标&#xff0c;结果百度地图显示的图标一直不完整。下载的PNG图标已经被正常引入到前端代码&#xff0c;anchor也设置为了图标底部中心&#xff0c;结果还是显示不完整。 if (iconUrl) {const icon new mapClass.Icon(…...

海思22AP70集超强算力、4K60编解码与多元特性于一体的智能SoC可替代3559V200、3516AV300、3556A

嘿&#xff0c;朋友们&#xff01;在这个对视觉效果有着极致追求的时代&#xff0c;海思半导体带着满满的诚意&#xff0c;为大家呈上一款堪称惊艳的专业超高清智能网络录像机SoC——22AP70&#xff0c;它就像一颗闪耀的科技新星&#xff0c;即将在各个领域掀起一场视觉革命&am…...

网络协议之一根网线就能连接两台电脑?

写在前面 ~~~~ 如果有两台电脑&#xff0c;通过一根网线可以实现网络互通吗&#xff1f;三台电脑呢&#xff1f;N台电脑呢&#xff1f;本文就以此作为主线来看下吧&#xff01; 1&#xff1a;正文 ~~~~ 如标题&#xff0c;一根网线就能连接两台电脑&#xff1f;答案是肯定的&a…...

为 Windows 和 Ubuntu 中设定代理服务器的详细方法

有时下载大模型总是下载不出来&#xff0c;要配置代理才行 一、Windows代理设置 ① 系统全局代理设置 打开【设置】→【网络和Internet】→【代理】。 在【手动设置代理】下&#xff0c;打开开关&#xff0c;输入&#xff1a; 地址&#xff1a;10.10.10.215 端口&#xff1a;…...

cmd里可以使用npm,vscode里使用npm 报错

cmd里可以使用npm,vscode里使用npm 报错 报错提示原因解决方法 报错提示 npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1&#xff0c;因为在此系 统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/ fwlink/?LinkID135170 中的 about_Executi…...

MySQL数据库基础 -- SQL 语句的分类,存储引擎

目录 1. 什么是数据库 2. 基本使用 2.1 进入 mysql 2.2 服务器、数据库以及表的关系 2.3 使用案例 2.4 数据逻辑存储 3. SQL 语句分类 4. 存储引擎 4.1 查看存储引擎 4.2 存储引擎的对比 1. 什么是数据库 安装完 MySQL 之后&#xff0c;会有 mysql 和 mysqld。 MySQL …...

设置windows10同时多用户登录方法

RDP wrapper 的版本更新停止在2017年&#xff0c; 找到网上其它大神更新的软件&#xff0c; 参考&#xff1a;RDPWrap v1.8.9.9 (Windows家庭版开启远程桌面、Server解除远程数量限制&#xff09; - 吾爱破解 - 52pojie.cn 我的需求是在离线环境中布置&#xff0c;方法是&…...

【hive】hive内存dump导出hprof文件

使用jmap -dump:live,formatb,file命令 hive-metastore-heap-eval.sh文件 # if want hiveserver2 ,should grep "org.apache.hive.service.server.HiveServer2" # get pid pidps -ef | grep "org.apache.hadoop.hive.metastore.HiveMetaStore" | grep &qu…...

专题讨论3:基于图的基本原理实现走迷宫问题

问题描述 迷宫通常以二维矩阵形式呈现&#xff0c;矩阵中的元素用 0 和 1 表示&#xff0c;其中 0 代表通路&#xff0c;1 代表墙壁 。存在特定的起点和终点坐标&#xff0c;目标是从起点出发&#xff0c;寻找一条能够到达终点的路径。 实现思路 将迷宫中的每个可通行单元格…...

Linux基础第四天

系统之间文件共享 想要实现两个不同的系统之间实现文件共享&#xff0c;最简单的一种方案就是设置VMware软件的共享文件夹&#xff0c;利用共享文件夹可以实现linux系统和windows系统之间的文件共享&#xff0c;这样就可以实现在windows系统上编辑程序&#xff0c;然后在linux系…...

eNSP中单臂路由器配置完整实验及命令解释

单臂路由器&#xff08;Router on a Stick&#xff09;是一种通过单个物理接口处理多个VLAN间路由的解决方案 单臂路由器通过以下方式工作&#xff1a; 交换机端口配置为Trunk模式&#xff0c;允许多个VLAN流量通过路由器子接口为每个VLAN创建虚拟接口每个子接口配置对应VLAN…...

TeaType 奶茶性格占卜机开发记录:一场俏皮的 UniApp 单页奇遇

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 最近我突发奇想&#xff0c;想用 UniApp 做一个轻松又俏皮的小工具&#xff0c;叫做「TeaType 奶茶性格占卜机」…...

AI神经网络降噪 vs 传统单/双麦克风降噪的核心优势对比

1. 降噪原理的本质差异 对比维度传统单/双麦克风降噪AI神经网络降噪技术基础基于固定规则的信号处理&#xff08;如谱减法、维纳滤波&#xff09;基于深度学习的动态建模&#xff08;DNN/CNN/Transformer&#xff09;噪声样本依赖预设有限噪声类型训练数据覆盖数十万种真实环境…...

【Nginx学习笔记】:Fastapi服务部署单机Nginx配置说明

服务部署单机Nginx配置说明 服务.conf配置文件&#xff1a; upstream asr_backend {server 127.0.0.1:8010; }server {listen 80;server_name your_domain.com;location / {proxy_pass http://localhost:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remot…...

JAVA Web 期末速成

一、专业术语及名词 1. Web 的特点 定义&#xff1a;web 是分布在全世界&#xff0c;基于 HTTP 通信协议&#xff0c;存储在 Web 服务器中的所有相互链接的超文本集 Web 是一种分布式超媒体系统Web 是多媒体化 和 易于导航的Web 与平台无关Web 是动态、交互的 2. TCP/IP 结…...

iOS:重新定义移动交互,引领智能生活新潮流

在当今智能手机与移动设备充斥的时代&#xff0c;操作系统作为其 “灵魂”&#xff0c;掌控着用户体验的方方面面。iOS 系统&#xff0c;这一由苹果公司精心雕琢的杰作&#xff0c;自诞生起便以独特魅力与卓越性能&#xff0c;在移动操作系统领域独树一帜&#xff0c;深刻影响着…...

LabVIEW数据库使用说明

介绍LabVIEW如何在数据库中插入记录以及执行 SQL 查询&#xff0c;适用于对数据库进行数据管理和操作的场景。借助 Database Connectivity Toolkit&#xff0c;可便捷地与指定数据库交互。 各 VI 功能详述 左侧 VI 功能概述&#xff1a;实现向数据库表中插入数据的操作。当输入…...

Linux多进程 写时拷贝 物理地址和逻辑地址

如果不采用写时拷贝技术 直接fork子进程 会发生什么&#xff1f; 如上图所示 橙色为父进程所占内存空间 绿色为子进程所占内存空间。 如果子进程只是需要做出一点点和父进程不一样的 其余和父进程均为相同 第一 就会出现复制开销比较大&#xff1b;第二占用内存空间 所以 …...

在 CentOS 7.9 上部署 node_exporter 并接入 Prometheus + Grafana 实现主机监控

文章目录 在 CentOS 7.9 上部署 node_exporter 并接入 Prometheus Grafana 实现主机监控环境说明node_exporter 安装与配置下载并解压 node_exporter创建 Systemd 启动服务验证服务状态验证端口监听 Prometheus 配置 node_exporter 监控项修改 prometheus.yml重新加载 Prometh…...

Java 反射(Reflection)技术

反射是 Java 提供的一种强大机制&#xff0c;允许程序在运行时&#xff08;Runtime&#xff09;动态地获取类的信息、操作类的属性和方法。这种能力使得 Java 程序可以突破编译时的限制&#xff0c;实现更灵活的设计。 一、反射的核心概念 1. 什么是反射 反射是指在程序运行…...

【SpringBoot】从零开始全面解析SpringMVC (三)

本篇博客给大家带来的是SpringBoot的知识点, 本篇是SpringBoot入门, 介绍SpringMVC相关知识. &#x1f40e;文章专栏: JavaEE进阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,…...

DeerFlow安装配置及使用案例

DeerFlow安装配置及使用案例 简介 ​ DeerFlow项目由字节跳动技术团队发起和主导开发&#xff0c;作为一个开源深度研究框架&#xff0c;于2025年年初正式开源。该项目基于LangStack生态&#xff0c;构建于LangChain与LangGraph的开源技术栈之上&#xff0c;充分利用语言模型…...

吉林省建筑工程专业技术人员职称评审实施办法

吉林省人力资源和社会保障厅 吉林省建筑工程专业技术人员职称评审实施办法 吉林省建筑工程技术人才之技术员评审条件 吉林省建筑工程技术人才之助理工程师评审条件 吉林省建筑工程技术人才之工程师评审条件 吉林省建筑工程技术人才之高级工程师评审条件 吉林省建筑工程技术人才…...

React组件开发流程-03.1

此章先以一个完整的例子来全面了解下React组件开发的流程&#xff0c;主要是以代码为主&#xff0c;在不同的章节中会把重点标出来&#xff0c;要完成的例子如下&#xff0c;也可从官网中找到。 React组件开发流程 这只是一个通用流程&#xff0c;在熟悉后不需要完全遵从。 …...

Vue 中 v-model 的三种使用方式对比与实践

在 Vue 3 中&#xff0c;v-model 是组件双向数据绑定的核心特性。随着 Vue 的版本演进&#xff0c;v-model 的使用方式也在不断优化。本文将基于您提供的代码示例&#xff0c;详细分析三种不同的 v-model 实现方式&#xff1a;基础用法、useVModel Hook&#xff08;vueuse/core…...

Adminer:一个基于Web的轻量级数据库管理工具

Adminer 是一个由单个 PHP 文件实现的免费数据库管理工具&#xff0c;支持 MySQL、MariaDB、PostgreSQL、CockroachDB、SQLite、SQL Server、Oracle、Elasticsearch、SimpleDB、MongoDB、Firebird、Clickhouse 等数据库。 Adminer 支持的主要功能如下&#xff1a; 连接数据库服…...

Linux笔记---内核态与用户态

用户态&#xff08;User Mode&#xff09; 权限级别&#xff1a;较低&#xff0c;限制应用程序直接访问硬件或关键系统资源。 适用场景&#xff1a;普通应用程序的运行环境。 限制&#xff1a;无法执行特权指令&#xff08;如操作I/O端口、修改内存管理单元配置等&#xff09…...

MFC 编程中 OnInitDialog 函数

核心作用 对话框初始化入口 &#xff1a;创建完成后第一个执行的函数。是对话框的起点。控件操作安全期 &#xff1a;此时所有控件已创建完成。可以安全地进行控件的初始化、属性设置等操作。界面布局最佳时机 &#xff1a;窗口显示前完成初始化设置。可以进行布局调整、数据初…...

Java高频面试之并发编程-18

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天又来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;详细说说synchronized synchronized 是 Java 中实现线程同步的核心关键字&#xff0c;用于解决多线程环境下的资源竞争…...

深入探究AKS Workload Identity

Azure Kubernetes 服务 (AKS) 提供了一项名为 Workload Identity 的强大功能&#xff0c;它可以增强安全性并简化在 Kubernetes 集群中运行的应用程序的身份验证。以下是 Workload Identity 在 AKS 环境中的工作原理概述&#xff1a; AKS 中的 Workload Identity 允许 Pod 无需…...