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

浏览器与网络模块实践

 浏览器渲染步骤

浏览器渲染大致分为以下四个步骤:
1. 构建 DOM 树
•  过程:当浏览器接收到 HTML 文档后,会从上到下依次解析 HTML 代码。每遇到一个开始标签,就会创建一个对应的 DOM 节点,并根据标签的嵌套关系将这些节点连接起来,形成一个树状结构,即 DOM 树。例如,对于 <div><p>段落文本</p></div> 这段 HTML 代码,浏览器会先创建一个 div 节点,然后创建一个 p 节点,并将 p 节点作为 div 节点的子节点。
•  作用:DOM 树是文档内容的结构化表示,它为后续的样式计算、布局和绘制等操作提供了基础。通过 DOM 树,浏览器可以方便地访问和操作文档中的各个元素,比如获取元素的属性、修改元素的内容等。
2. 构建 CSSOM 树
•  过程:浏览器在解析 CSS 代码(包括内联样式、内部样式表和外部样式表)时,会将 CSS 规则转换成 CSS 对象模型(CSSOM)树。CSSOM 树的节点对应 CSS 选择器和样式规则。例如,对于 CSS 规则 .class { color: red; font-size: 14px; },浏览器会创建一个 CSSOM 节点,该节点包含选择器 .class 和对应的样式属性 color 与 font-size。
•  作用:CSSOM 树定义了文档中各个元素的样式信息。有了 CSSOM 树,浏览器才能知道每个元素应该应用哪些样式,从而在后续步骤中准确地呈现元素的外观,如颜色、字体大小、边距等。
3. 构建渲染树
•  过程:浏览器将 DOM 树和 CSSOM 树结合起来,生成渲染树。渲染树的节点称为渲染器(Renderer),每个渲染器包含 DOM 节点的可见内容和样式信息。在构建渲染树时,浏览器会遍历 DOM 树,对于每个可见的 DOM 节点(如元素节点、文本节点等),根据 CSSOM 树中对应的样式规则为其创建渲染器,并将这些渲染器按照文档流的顺序连接起来形成渲染树。例如,对于一个包含文本内容的 div 元素,浏览器会为其创建一个渲染器,该渲染器包含 div 元素的样式(如宽度、高度、背景颜色等)和文本内容。
•  作用:渲染树是浏览器进行布局和绘制的依据。它只包含可见的元素及其样式信息,不包括那些不可见的元素(如 display: none 的元素)。通过渲染树,浏览器能够确定每个元素在页面上的位置、大小等布局信息,以及如何将这些元素绘制到屏幕上。
4. 布局与绘制
•  布局(Reflow):
•  过程:浏览器根据渲染树中的节点信息,计算每个元素在页面上的确切位置和尺寸。这个过程会受到多种因素的影响,如元素的宽度、高度、边距、内边距、定位方式等。例如,对于一个块级元素,浏览器会根据其父元素的宽度、自身的宽度设置(如百分比宽度、固定宽度等)以及左右边距等因素,计算出该元素在水平方向上的位置和宽度;在垂直方向上,会根据其上一个兄弟元素的位置以及自身的高度等属性,确定其位置。
•  作用:布局是确保页面元素按照预期的结构和样式排列在页面上的关键步骤。只有经过精确的布局计算,浏览器才能知道每个元素占据的空间大小和位置,为后续的绘制工作提供准确的坐标信息。
•  绘制(Repaint):
•  过程:在布局完成后,浏览器开始绘制页面。绘制是将渲染树中每个节点的可见内容(如文本、图片、颜色、边框等)绘制到屏幕上。浏览器会按照渲染树的顺序,依次将各个元素的绘制内容合成在一起,形成最终的页面视图。例如,对于一个带有背景颜色和边框的 div 元素,浏览器会先绘制背景颜色,然后绘制边框,最后将文本内容绘制在相应的位置上。
•  作用:绘制是用户能够看到页面内容的最后一步。通过绘制,浏览器将计算好的布局信息和样式信息转化为可视化的页面,呈现在用户的屏幕上,让用户能够看到完整的网页内容。

HTTP 1.0/1.1/2.0/3.0、HTTPS的特性

HTTP 1.0:

  • 确定了协议是无状态的,即同一客户端每次请求都没有任何关系
  • 消息结构包含请求头和请求体

HTTP 1.1:

  • 引入了持久连接,即 TCP 连接默认不关闭,可以被多个请求复用
  • 在同一个 TCP 连接里面,客户端可以同时发送多个请求
  • 虽然允许复用 TCP 连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的,服务器只有处理完一个请求,才会接着处理下一个请求。
  • 新增了一些请求方法(如 PUT、DELETE 等)、新增一些请求头和响应头

HTTP 2.0:

  • 采用二进制格式而非文本格式
  • 完全多路复用,而非有序并阻塞的、只需一个连接即可实现并行
  • 使用报头压缩,降低开销
  • 支持服务器推送

HTTP 3.0

  • 弃用 TCP 协议,采用一种新的更快的网络协议 QUIC(基于 UDP 协议)

HTTP状态码

以下是常见的HTTP状态码:- 1xx:信息性状态码,表示请求已被接收,继续处理。- 100:继续- 101:切换协议- 2xx:成功状态码,表示服务器成功接收、理解并处理了请求。- 200:OK- 201:已创建- 202:已接受- 204:无内容- 206:部分内容- 3xx:重定向状态码,表示需要进一步操作才能完成请求。- 301:永久重定向- 302:临时重定向- 304:未修改- 4xx:客户端错误状态码,表示服务器无法处理请求。- 400:错误的请求- 401:未授权- 403:禁止访问- 404:资源未找到- 405:通常是因为服务器未配置允许使用该方法,或者该方法与服务器不兼容导致的- 5xx:服务器错误状态码,表示服务器在处理请求时发生错误。- 500:服务器内部错误- 502:错误的网关- 503:服务不可用- 504:网关超时除了以上常见的状态码外,还有其他一些状态码用于表示不同的情况和错误,例如429表示请求过多,418表示I'm a teapot等。
每个状态码都有特定的含义,用于指示请求的处理状态。

协商缓存与强制缓存

概念

1.强缓存:不会向服务器发送请求,直接从缓存中读取资源,在chrome控制台的network选项中可以看到该请求返回200的状态码;

2.协商缓存:向服务器发送请求,服务器会根据这个请求的request header的一些参数来判断是否命中协商缓存,如果命中,则返回304状态码并带上新的response header通知浏览器从缓存中读取资源;

两者的共同点是,都是从客户端缓存中读取资源;区别是强缓存不会发请求,协商缓存会发请求。

浏览器缓存过程:

  • 下一次加载资源时,由于强制缓存优先级较高,先比较当前时间与上一次返回 200 时的时间差,如果没有超过 cache-control 设置的 max-age,则没有过期,并命中强缓存,直接从本地读取资源。如果浏览器不支持HTTP1.1,则使用 expires 头判断是否过期;
  • 如果资源已过期,则表明强制缓存没有被命中,则开始协商缓存,向服务器发送带有 If-None-Match 和 If-Modified-Since 的请求;
  • 服务器收到请求后,优先根据 Etag 的值判断被请求的文件有没有做修改,Etag 值一致则没有修改,命中协商缓存,返回 304;如果不一致则有改动,直接返回新的资源文件带上新的 Etag 值并返回 200;
  • 如果服务器收到的请求没有 Etag 值,则将 If-Modified-Since 和被请求文件的最后修改时间做比对,一致则命中协商缓存,返回 304;不一致则返回新的 last-modified 和文件并返回 200;
  • 很多网站的资源后面都加了版本号,这样做的目的是:每次升级了 JS 或 CSS 文件后,为了防止浏览器进行缓存,强制改变版本号,客户端浏览器就会重新下载新的 JS 或 CSS 文件 ,以保证用户能够及时获得网站的最新更新。

进程与线程

  • 从本质上说,进程和线程都是 CPU 工作时间片的一个描述:
  • 进程描述了 CPU 在运行指令及加载和保存上下文所需的时间,放在应用上来说就代表了一个程序。
  • 线程是进程中的更小单位,描述了执行一段指令所需的时间。
  • 进程是资源分配的最小单位,线程是CPU调度的最小单位。
  • 进程和线程之间的关系有以下四个特点:
  • (1)进程中的任意一线程执行出错,都会导致整个进程的崩溃。
  • (2)线程之间共享进程中的数据。
  • (3)当一个进程关闭之后,操作系统会回收进程所占用的内存, 当一个进程退出时,操作系统会回收该进程所申请的所有资源;即使其中任意线程因为操作不当导致内存泄漏,当进程退出时,这些内存也会被正确回收。
  • (4)进程之间的内容相互隔离。 进程隔离就是为了使操作系统中的进程互不干扰,每一个进程只能访问自己占有的数据,也就避免出现进程 A 写入数据到进程 B 的情况。正是因为进程之间的数据是严格隔离的,所以一个进程如果崩溃了,或者挂起了,是不会影响到其他进程的。如果进程之间需要进行数据的通信,这时候,就需要使用用于进程间通信的机制了。

js脚本缓存defer 和 async区别

defer 和 async是什么:

在HTML中,

为了改善这种阻塞行为,有两个属性可以用来异步加载JavaScript脚本:defer 和 async。

1. async:

    • 当 async 属性被设置时,浏览器会异步加载脚本,并且不保证脚本的执行顺序与它们在文档中的出现顺序一致。
    • 脚本一旦可用就会被执行,无论它是否在文档解析完成之后。这意味着如果多个带有 async 的脚本同时加载,它们可能以任意顺序完成,这取决于哪个脚本先下载完成。
    • 由于 async 脚本不会阻塞页面渲染,通常建议用于那些不是严格依赖于页面其他部分初始化完成才能执行的独立功能脚本。

2. defer:

    • 当 defer 属性被设置时,浏览器也会异步加载脚本,但与 async 不同的是,它会确保脚本按照在文档中出现的顺序执行,且总是在DOMContentLoaded事件触发之前执行,即在文档解析完成后,但在所有CSSOM计算和渲染之前。
    • 多个带有 defer 属性的脚本会按照它们在文档中定义的顺序执行,这对于那些需要遵循特定执行顺序的脚本来说非常有用。

总结:

  • async: 异步加载,执行顺序不确定,不阻塞DOM构建,一旦下载完成立即执行。
  • defer: 也异步加载,但保证执行顺序与脚本在文档中的顺序一致,同样不阻塞DOM构建,但在DOMContentLoaded事件之前按序执行。

基于服务端的信息推送:Server Send Event(sse)

实现原理:只要 http 返回 Content-Type 为 text/event-stream 的 header,就可以通过 stream 的方式多次返回消息了。它传输的是 json 格式的内容,可以用来传输文本或者二进制内容。// 这个 EventSource 是浏览器原生 api,就是用来获取 sse 接口的响应的,它会把每次消息传入 onmessage 的回调函数。useEffect(() => {const eventSource = new EventSource('http://localhost:3000/stream');eventSource.onmessage = ({ data }) => {console.log('New message', JSON.parse(data));};}, []);

如何监控用户页面卡顿

const observer = new PerformanceObserver((list) => {for (const entry of list.getEntries()) {if (entry.duration > 100) {console.log('上报到数据中心');}});observer.observe({entryTypes: ['longtask'],            // 任务名称数组
});

相关文章:

浏览器与网络模块实践

浏览器渲染步骤 浏览器渲染大致分为以下四个步骤&#xff1a; 1. 构建 DOM 树 • 过程&#xff1a;当浏览器接收到 HTML 文档后&#xff0c;会从上到下依次解析 HTML 代码。每遇到一个开始标签&#xff0c;就会创建一个对应的 DOM 节点&#xff0c;并根据标签的嵌套关系将这些…...

谈谈Minor GC、Major GC和Full GC

目录 一、背景 二、三者之间的区分 1、Minor GC 2、Major GC &#xff08;1&#xff09;老年代空间不足&#xff1a; &#xff08;2&#xff09;晋升&#xff08;Promotion&#xff09;失败&#xff1a; &#xff08;3&#xff09;空间分配担保失败&#xff1a; &#x…...

基于SpringBoot实现的高校实验室管理平台功能四

一、前言介绍&#xff1a; 1.1 项目摘要 随着信息技术的飞速发展&#xff0c;高校实验室的管理逐渐趋向于信息化、智能化。传统的实验室管理方式存在效率低下、资源浪费等问题&#xff0c;因此&#xff0c;利用现代技术手段对实验室进行高效管理显得尤为重要。 高校实验室作为…...

梯度裁剪(Gradient Clipping)

梯度裁剪&#xff08;Gradient Clipping&#xff09;是一种用于防止梯度爆炸&#xff08;Gradient Explosion&#xff09;的技术&#xff0c;具体来说&#xff1a; 1. 梯度裁剪的作用 问题背景&#xff1a;在训练深度神经网络&#xff08;尤其是RNN/LSTM&#xff09;时&#x…...

联合办公空间WeWork的创新模式与私域流量时代的品牌温度——兼论开源AI大模型AI智能名片S2B2C商城小程序源码的潜在价值

摘要&#xff1a;本文聚焦于联合办公空间WeWork的成功模式&#xff0c;深入剖析其如何让创业用户摆脱传统租赁的束缚&#xff0c;打破空间与社交限制&#xff0c;为创业带来新的可能性与趣味性&#xff0c;并有效降低创业成本与风险。同时探讨了WeWork在私域流量时代所建立的平…...

Git配置

为什么要用&#xff1a;下载zip只是当前分支&#xff0c;不能进行仓库push、pull、checkout 1. 下载Git 先判断是否已经下过Git&#xff1a; git --version若没有版本号出来&#xff0c;就去下载&#xff1a;https://git-scm.com/downloads &#xff08;Windows、linux、mac…...

Protobuf 的快速使用(二)

这个部分会对通讯录进⾏多次升级&#xff0c;使⽤ 2.x 表⽰升级的版本&#xff0c;最终将会升级如下内容&#xff1a; 不再打印联系⼈的序列化结果&#xff0c;⽽是将通讯录序列化后并写⼊⽂件中。 从⽂件中将通讯录解析出来&#xff0c;并进⾏打印。 新增联系⼈属性&#xff…...

网页设计思路

CSS实现思路: 用一个div直接父级继承 在这里插入图片描述 一LOGO结构 h1>a>搜索关键字 二导航栏结构 结构:ul>li>a 三搜索框结构 div>input/a 四用户头像结构 div>a>imgspan 处理行内块和行内垂直对齐方向使用 vertical-align...

Vue3 配合 fullPage.js 打造高效全屏滚动网页

引言 在现代网页设计中&#xff0c;整屏滚动&#xff08;Full-page Scrolling&#xff09;已成为展示内容的一种流行方式。通过将内容分成若干个全屏页面&#xff0c;并配合流畅的过渡动画&#xff0c;可以为用户带来身临其境的浏览体验。本文将介绍如何使用 fullPage.js 插件来…...

全排列 II:去重的技巧与实现

全排列 II&#xff1a;去重的技巧与实现 1. 引言&#xff1a;排列问题的坑 你有没有遇到过这样的问题&#xff1f; 当我们在做全排列&#xff08;Permutation&#xff09;的时候&#xff0c;如果输入的数组中包含重复元素&#xff0c;生成的排列中就会出现大量重复项。这样不…...

微型导轨和普通导轨有哪些区别?

微型导轨和普通导轨都是常用的工业机械传动装置&#xff0c;目前&#xff0c;市场上有各种各样的导轨产品。那么微型导轨和普通导轨有哪些区别呢&#xff1f; 1、尺寸&#xff1a;微型导轨尺寸较小&#xff0c;滑座宽度最小可达 8MM&#xff0c;长度最小可达 11MM 左右&#xf…...

Java 输入流到输出流

Java 输入流到输出流的复制方法主要有以下六种实现方式&#xff0c;根据性能、适用场景和实现原理可分为不同类别&#xff1a; 一、基础字节流方式 实现原理&#xff1a;通过 FileInputStream 和 FileOutputStream 逐字节或块读取数据并写入。 代码示例&#xff1a; try (In…...

Anaconda安装-Ubuntu-Linux

1、进入Anaconda官网&#xff0c;以下载最新版本&#xff0c;根据自己的操作系统选择适配的版本。 2、跳过注册&#xff1a; 3、选择适配的版本&#xff1a; 4、cd ~/anaconda_download 5、bash Anaconda3-2024.10-1-Linux-x86_64.sh 6、按Enter或PgDn键滚动查看协议&…...

每日一题之既约分数

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 如果一个分数的分子和分母的最大公约数是 1&#xff0c;这个分数称为既约分数。 例如 3/4,1/8,7/1​&#xff0c; 都是既约分数。 请问&#xff0c;有多少个既约分…...

诠视科技MR眼镜如何使用VLC 进行RTSP投屏到电脑

文章目录 一、应用开发部分&#xff08;1&#xff09;基础场景构建&#xff08;2&#xff09;添加XvCameraManager&#xff08;3&#xff09;添加XvMRVideoCaptureManager&#xff08;4&#xff09;添加XvRTSPStreamerManager&#xff08;5&#xff09;打包测试 二、VLC media …...

“头”里有什么——HTML 元信息

2025/3/28 向全栈工程师迈进&#xff01; 一、看基本HTML <!doctype html> <html lang"zh-CN"><head><meta charset"utf-8" /><title>我的测试页面</title></head><body><p>这是我的页面</p&g…...

【Kafka】从理论到实践的深度解析

在当今数字化转型的时代&#xff0c;企业面临着数据量呈指数级增长、业务系统愈发复杂的挑战。在这样的背景下&#xff0c;高效的数据传输与处理技术成为了关键。Kafka&#xff0c;作为一款分布式消息队列系统&#xff0c;凭借其卓越的性能和丰富的特性&#xff0c;在众多企业的…...

Debezium系列之:使用Debezium和Apache Iceberg构建数据湖

Debezium系列之:使用Debezium和Apache Iceberg构建数据湖 Debezium Server Iceberg“Debezium Server Iceberg” 消费者设置数据复制Upsert 模式保留已删除的记录使用Upsert模式追加模式优化批处理大小在数据分析的世界中,数据湖是存储和管理大量数据以满足数据分析、报告或机…...

resnet网络迁移到昇腾执行(OM上篇)

目录 总体介绍 pytorch迁移OM模型 原始代码详细介绍 模型加载和初始化 初始化统计变量 数据推理及归一化 统计每个样本的结果 基本概念 Softmax&#xff08;归一化指数函数&#xff09; 作用 代码示例 应用场景 argmax取最大值索引 作用 代码示例 两者配合使用…...

RHCA核心课程技术解析5:红帽高可用性集群架构与深度实践

一、红帽高可用集群架构全景 1.1 核心组件交互逻辑 graph TD A[节点1] -->|Corosync 心跳| B[节点2] A -->|Pacemaker 资源管理| C[共享存储] B --> C D[Fencing设备] -->|STONITH| A D -->|STONITH| B C -->|GFS2锁管理| A C -->|GFS2锁管理| B 1.2 集…...

Display Serializer、Camera Deserializer(Camera Des)和SerDes‌ 加解串应用

‌1. 概述&#xff1a;三者的核心定位‌ ‌(1) SerDes&#xff08;Serializer/Deserializer&#xff09;‌ ‌定义‌&#xff1a;通用高速数据传输技术&#xff0c;实现‌并行↔串行‌双向转换。‌角色‌&#xff1a;数据链路的“翻译官”&#xff0c;解决并行传输的带宽与距…...

vue3+bpmn.js基本使用

一、案例使用依赖 // 必填"bpmn-js": "^7.3.1", "bpmn-js-properties-panel": "^0.37.2","bpmn-moddle":"^7.1.3","camunda-bpmn-moddle": "^7.0.1",// 可选"element-plus/icons-vue&qu…...

《数据结构:单链表》

“希望就像星星&#xff0c;或许光芒微弱&#xff0c;但永不熄灭。” 博主的个人gitee&#xff1a;https://gitee.com/friend-a188881041351 一.概念与结构 链表是一种物理存储上非连续、非顺序的存储结构&#xff0c;数据元素的顺序逻辑是通过链表中的指针链接次序实现的。 单…...

RedHatLinux(2025.3.22)

1、创建/www目录&#xff0c;在/www目录下新建name和https目录&#xff0c;在name和https目录下分别创建一个index.htm1文件&#xff0c;name下面的index.html 文件中包含当前主机的主机名&#xff0c;https目录下的index.htm1文件中包含当前主机的ip地址。 &#xff08;1&…...

C++异常处理完全指南:从原理到实战

文章目录 异常的基本概念基本异常抛出与捕获多类型异常捕获异常重新抛出异常安全异常规范&#xff08;noexcept&#xff09;栈展开与析构标准库异常总结 异常的基本概念 异常是程序运行时发生的非预期事件&#xff08;如除零、内存不足&#xff09;。C通过try、catch和throw提…...

Oracle 19C 备份

在 Oracle 19c 中&#xff0c;备份数据库通常使用 RMAN&#xff08;Recovery Manager&#xff09; 工具&#xff0c;它是 Oracle 提供的官方备份和恢复工具。以下是通过 RMAN 备份 Oracle 19c 数据库的详细步骤和命令。 一、RMAN 基本概念 RMAN 是 Oracle 的备份和恢复工具&am…...

深入理解MySQL聚集索引与非聚集索引

在数据库管理系统中&#xff0c;索引是提升查询性能的关键。MySQL支持多种类型的索引&#xff0c;其中最基础也是最重要的两种是聚集索引和非聚集索引。本文将深入探讨这两种索引的区别&#xff0c;并通过实例、UML图以及Java代码示例来帮助您更好地理解和应用它们。 一、概念…...

用Python打造智能宠物:强化学习的奇妙之旅

友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…...

OGG故障指南:OGG-01163 Bad column length (xxx) specified for column

报错 OGG-01163 Bad column length (xxx) specified for column AAA in table OWNER.TABLE, maximum allowable length is yyy原因 源端修改了字段长度。 虽然源端和目标端的长度已经通过DDL语句修改到一致&#xff0c;在extract进程未重启的情况下&#xff0c;生成的trail文…...

XML标签格式转换为YOLO TXT格式

针对的是多边形&#xff08;<polygon>&#xff09;来描述对象的边界&#xff0c;而不是传统的矩形框&#xff08;<bndbox>&#xff09; import xml.etree.ElementTree as ET import os from pathlib import Path# 解析VOC格式的XML文件&#xff0c;提取目标框的标…...

Java的string默认值

在Java中&#xff0c;String类型的默认值取决于其定义和实例化的方式。 以下是关于String默认值的详细说明 未实例化的String变量‌ 如果定义一个String变量但未对其进行实例化&#xff08;即未使用new关键字或直接赋值&#xff09;&#xff0c;其默认值为:ml-search[null]。这…...

侯捷 C++ 课程学习笔记:C++ 中引用与指针的深度剖析

目录 一、引言 二、引用与指针的基本概念 &#xff08;一&#xff09;引用 &#xff08;二&#xff09;指针 三、引用与指针的区别 &#xff08;一&#xff09;定义与初始化 &#xff08;二&#xff09;内存空间与 NULL 值 &#xff08;三&#xff09;自增操作 …...

llamafactory微调效果与vllm部署效果不一致如何解决

在llamafactory框架训练好模型之后&#xff0c;自测chat时模型效果不错&#xff0c;但是部署到vllm模型上效果却很差 这实际上是因为llamafactory微调时与vllm部署时的对话模板不一致导致的。 对应的llamafactory的代码为 而vllm启动时会采用大模型自己本身设置的对话模板信息…...

欢乐力扣:合并两个有序链表

文章目录 1、题目描述2、思路 1、题目描述 合并两个有序链表。  将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 在这里插入图片描述 2、思路 参考官方题解&#xff0c;简单来说就是不断调整链表指针的指向&#xff0c;让…...

访问者模式_行为型_GOF23

访问者模式 访问者模式&#xff08;Visitor Pattern&#xff09;是一种行为型设计模式&#xff0c;核心思想是将算法与对象结构分离&#xff0c;使得在不修改现有对象结构的前提下&#xff0c;可以动态添加新的操作。这类似于“医生查房”——医生&#xff08;访问者&#xff…...

排序算法2-选择排序

目录 1.常见排序算法 2.排序算法的预定函数 2.1交换函数 2.2测试算法运行时间的函数 2.3已经实现过的排序算法 3.选择排序算法的实现 3.1直接选择排序 3.2堆排序 4.下讲预告 1.常见排序算法 前面一讲已经讲解了插入排序&#xff0c;这一讲我将讲解选择排序&#xff0c;…...

openwrt24.10.0版本上安装istoreOS的屏幕监控插件

lcdsimple 插件支持在软路由下面显示统计信息到 HDMI 或者 VGA 上。 手动安装方法&#xff1a; 保证 quickstart 版本大于 0.9.7 安装 lcdsimple 具体方法&#xff1a; opkg update is-opkg install quickstart opkg install lcdsimple 手动下载 QUICKSTART 跟 LCD SIMPL…...

内网服务器无法通过公网地址访问映射到公网的内网服务

内网服务器无法通过公网地址访问映射到公网的内网服务 问题现象问题原因解决方法总结 前几天遇到一个网络问题&#xff0c;在这里做下记录&#xff0c;希望能帮助到有相同问题的朋友。 问题现象 网络拓扑如上所示&#xff0c;服务器1和服务器2在同一内网&#xff0c;网段均为1…...

基于Web的交互式智能成绩管理系统设计

目录 摘要 绪论 一、应用背景 二、行业发展现状 三、程序开发的重要意义 四、结语 1 代码 2 数据初始化模块 3 界面布局模块 4 核心功能模块 5 可视化子系统 6 扩展功能模块 7 架构设计亮点 功能总结 一、核心数据管理 二、智能分析体系 三、可视化系统 四、扩…...

从虚拟现实到可持续设计:唐婉歆的多维创新之旅

随着线上线下融合逐渐成为全球家居与建材行业的发展趋势,全球市场对高品质、个性化家居和建材产品的需求稳步攀升,也对设计师提出更高的要求。在这一背景下,设计师唐婉歆将以产品设计师的身份,正式加入跨国企业AmCan 美加集团,投身于备受行业瞩目的系列设计项目。她将负责Showr…...

PHP MySQL 预处理语句

PHP MySQL 预处理语句 引言 在PHP中与MySQL数据库进行交互时,预处理语句是一种非常安全和高效的方法。预处理语句不仅可以防止SQL注入攻击,还可以提高数据库查询的效率。本文将详细介绍PHP中预处理语句的用法,包括其基本概念、语法、优势以及在实际开发中的应用。 预处理…...

基于飞腾/龙芯+盛科CTC7132全国产交换机解决方案

产品介绍 盛科CTC7132,内置ARM-Cortex A53 主频1.2GHz&#xff1b;支持24个千兆电口&#xff0c;24个万兆光口&#xff08;850nm多模&#xff09;&#xff0c;1个千兆管理网口&#xff0c;1个管理串口&#xff1b;支持1个百兆健康管理网口&#xff1a;用于设备端口状态、电压、…...

Vue动态添加或删除DOM元素:购物车实例

Vue 指令系列文章: 《Vue插值:双大括号标签、v-text、v-html、v-bind 指令》 《Vue指令:v-cloak、v-once、v-pre 指令》 《Vue条件判断:v-if、v-else、v-else-if、v-show 指令》 《Vue循环遍历:v-for 指令》 《Vue事件处理:v-on 指令》 《Vue表单元素绑定:v-model 指令》…...

深入理解Agentic Workflows

本文来源&#xff1a;https://weaviate.io/blog/what-are-agentic-workflows 这篇文章将带你深入理解AI Agent、Agentic AI、Agentic Workflows、Agentic Architectures等概念&#xff0c;非常值得推荐。 一、什么是 AI Agents&#xff1f; AI Agents 是结合了大模型进行推理和…...

深入理解:阻塞IO、非阻塞IO、水平触发与边缘触发

深入理解&#xff1a;阻塞IO、非阻塞IO、水平触发与边缘触发 在网络编程和并发处理中&#xff0c;理解不同的 I/O 模型和事件通知机制至关重要。本文将深入探讨阻塞IO&#xff08;Blocking IO&#xff09;、非阻塞IO&#xff08;Non-Blocking IO&#xff09;、水平触发&#x…...

deepseek 技术的前生今世:从开源先锋到AGI探索者

一、引言&#xff1a;中国AI领域的“超越追赶”样本 DeepSeek&#xff08;深度求索&#xff09;作为中国人工智能领域的代表性企业&#xff0c;自2023年创立以来&#xff0c;凭借开源生态、低成本技术路径与多模态创新&#xff0c;迅速从行业新秀成长为全球AI竞赛中的关键力量…...

合规+增效 正也科技携智能营销产品出席中睿论坛

正也科技作为医药数字化领域的标杆企业&#xff0c;受邀参展第二届中睿医健产业企业家年会暨第十三届中睿医药新春论坛&#xff0c;本次论坛以“合力启新程”为主题&#xff0c;吸引了800多位医药健康企业的董事长、总经理参与&#xff0c;并通过主论坛、分论坛、路演等形式探讨…...

Python小练习系列 Vol.5:数独求解(经典回溯 + 剪枝)

&#x1f9e0; Python小练习系列 Vol.5&#xff1a;数独求解&#xff08;经典回溯 剪枝&#xff09; &#x1f9e9; 数独不仅是益智游戏&#xff0c;更是回溯算法的典范&#xff01;本期我们将用 DFS 剪枝 的方式一步步求解一个标准 9x9 数独。 &#x1f9e9; 一、题目描述 …...

基于kafka的分布式日志收集平台项目(续)

#第一个容易错的地方 上次做到测试集群的创建topic时出现了错误 具体错误是配置信息出错了&#xff0c;然后报错如下&#xff1a; #现在来具体警戒哪些地方要特别注意&#xff1a; ### node.id 和listeners 和advertised.listeners这三行是每一台机器&#xff08;每个节点&…...

C++运算符重载、类的转换构造函数和类型转换函数的基础练习

练习1&#xff1a;&#xff08;困难&#xff09; 建立一个矩阵类&#xff0c;可以完成指定的操作或运算。 说明&#xff1a; &#xff08;1&#xff09;、矩阵为2行3列&#xff0c;基类型为整型&#xff1b; &#xff08;2&#xff09;、操作或运算&#xff1a;初始化&…...