网络:应用层

在这里插入图片描述

网络:应用层

我们要知道,所有的问题解决都是在应用层。:happy:

协议是一种约定,也就是双方约定好的结构化的数据。但是在读写数据时我们都是按字符串的方式来发送接受的,那么我们应该如和传输结构化的数据呢?应用层协议,TCP面向字节流导致的粘包问题就是在应用层协议中要解决的问题之一。

自定义协议

理解TCP和UDP为什么支持全双工

在任何一台主机上,TCP连接既有发送缓冲区,又有接受缓冲区,所以在内核中可以在发消息的同时,也可以收消息,也就是全双工。

但是UDP没有发送缓冲区(不使用SentQueue)调用sendtoUDP直接将数据交给内核,内核直接发送。UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的 UDP 报的顺序和发送 UDP 报的顺序一致,如果缓冲区满了,再到达的 UDP 数据就会被丢弃

为什么会这样设计,TCP、UDP协议详解会给你答案

image-20250610150454883

实现网络计算器方案

我们要实现一个网络版的计算器,由客户端把要计算的两个数和操作发给服务器,服务器经过计算后将结果返回给客户端。

  • 定义结构体来表示我们需要交互的信息
  • 发送数据时将这个结构体按照一个规则转换成字符串, 接收到数据的时候再按照相同的规则把字符串转化回结构体
  • 这个过程叫做 “序列化”“反序列化”

image-20250610145848451

基本方案是,定义一个protocol类,一个reqresp类,reqresp里面就是结构化的数据,reqresp类中实现序列化和反序列化。protocol类中实现EncodeDecode方法,添加报头和去掉报头。序列化和反序列化中我们有现成的方案 --Jsoncpp

网络版本计算器

守护进程化

// daemon.hpp
#pragma once
#include <iostream>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <fcntl.h>
#include "log.hpp"const std::string null_dev = "/dev/null";
using namespace LogModule;
// 守护进程
void daemon()
{// 1. 忽略IO,子进程退出信号signal(SIGPIPE, SIG_IGN);signal(SIGCHLD, SIG_IGN);// 2. 新起一个进程,并退出父进程if (fork() > 0)exit(1);// 3. 新建一个会话setsid();// 4. 更改进程的当前执行路径chdir("/");// 5. 关闭标准输入输出错误 可能导致本来输出到显示器的东西出错// 建议重定向到 /dev/null 文件里(无底洞)int fd = ::open(null_dev.c_str(), O_RDWR);if (fd < 0)LOG(LogLevel::FATAL) << "open dev/null error";else{dup2(fd, 0);dup2(fd, 1);dup2(fd, 2);close(fd);}
}

Jsoncpp

Jsoncpp 是一个用于处理 JSON 数据的 C++ 库。它提供了将 JSON 数据序列化为字符串以及从字符串反序列化为 C++ 数据结构的功能。Jsoncpp 是开源的,广泛用于各种需要处理 JSON 数据的 C++ 项目中

  • 简单易用:Jsoncpp 提供了直观的 API,使得处理 JSON 数据变得简单
  • 高性能:Jsoncpp 的性能经过优化,能够高效地处理大量 JSON 数据
  • 全面支持:支持 JSON 标准中的所有数据类型,包括对象、数组、字符串、数字、布尔值和 null
  • 错误处理:在解析 JSON 数据时,Jsoncpp 提供了详细的错误信息和位置,方便开发者调试。

当使用 Jsoncpp 库进行 JSON 的序列化和反序列化时,确实存在不同的做法和工具类可供选择。以下是对 Jsoncpp 中序列化和反序列化操作的详细介绍:

Jsoncpp库的简单使用方法

Http协议

虽然我们说,应用层协议是我们程序猿自己定的,但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用。HTTP(超文本传输协议)就是其中之一。

在互联网世界中,HTTPHyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如 HTML 文档)。

HTTP 协议是客户端与服务器之间通信的基础。客户端通过 HTTP 协议向服务器发送请求,服务器收到请求后处理并返回响应。HTTP 协议是一个无连接、无状态的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。

认识URL

URL就是网址

如:http://wangruqin.site/

urlencode urldecode

像 / ? : 等这样的字符,已经被 url 当做特殊意义理解了,因此这些字符不能随意出现

比如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进行转义

转义的规则如下:

将需要转码的字符转为 16 进制,然后从右到左,取 4 位(不足 4 位直接处理),每 2 位做一位,前面加上%,编码成%XY 格式

例如:

image-20250610215446989

“+” 被转义成了 “%2B”

urldecode 就是 urlencode 的逆过程;

urlencode工具

HTTP协议请求与响应格式

HTTP请求

http请求

  • 首行: [方法] + [url] + [版本]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束
  • Body: 空行后面的内容都是 BodyBody 允许为空字符串,如果 Body 存在,则在Header 中会有一个 Content-Length 属性来标识 Body 的长度

image-20250610220545622

HTTP响应

HTTP / 1.1 200 OK
Server=nginx/1.24.0 (Ubuntu)
Date=Tue, 10 Jun 2025 14:13:01 GMT
Content-Type=text/html; charset=utf-8
Transfer-Encoding=chunked
Connection=keep-alive
Content-Encoding=<!DOCTYPE html>
<html>
<head><!-- 页面元信息 --><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Qin Home</title>...
  • 首行:[版本号] + [状态码] + [状态码解释]
  • Header:请求的属性,冒号分割的键值对;每组属性之间使用\r\n分隔;遇到空行表示 Header 部分结束
  • Body:空行后面的内容都是 BodyBody 允许为空字符串. 如果 Body 存在,则在Header 中会有一个 Content-Length 属性来标识 Body 的长度;如果服务器返回了一个 html 页面,那么 html 页面内容就是在 body

image-20250610222222249

HTTP的方法

image-20250610222339078

最常见的就是GETPOST方法

GET 方法

用途:用于请求 URL 指定资源

示例:GET /index.html HTTP/1.1

特性:指定资源经服务器端解析后返回响应内容

POST 方法

用途:用于传输实体的主体,通常用于提交表单数据

示例:POST /submit.cgi HTTP/1.1

特性:可以发送大量的数据给服务器,并且数据包含在请求体中

PUT 方法

用途:用于传输文件,将请求报文主体中的文件保存到请求 URL 指定的位置

示例:PUT /example.html HTTP/1.1

特性:不太常用,但在某些情况下,如RESTful API 中,用于更新资源

HEAD 方法

用途:与 GET 方法类似,但不返回报文主体部分,仅返回响应头

示例:HEAD /index.html HTTP/1.1

特性:用于确认 URL 的有效性及资源更新的日期时间等

DELETE 方法(不常用)

用途:用于删除文件,是 PUT 的相反方法

示例:DELETE /example.html HTTP/1.1

特性:按请求 URL 删除指定的资源

PTIONS 方法

用途:用于查询针对请求 URL 指定的资源支持的方法

示例:OPTIONS * HTTP/1.1

特性:返回允许的方法,如 GETPOST

HTTP的状态码

image-20250619230914943

状态码含义应用样例
100Continue上传大文件时,服务器告诉客户端可以继续上传
200OK问网站首页,服务器返回网页内容
201Create发布新文章,服务器返回文章创建成功
204No Content删除文章后,服务器返回“无内容”表示操作成功
301Moved Permanently(永久重定向)网站换域名后,自动跳转到新域名;搜索引擎更新网站链接时使用
302Found 或 See Other(临时重定向)用户登录成功后,重定向到用户首页
304Not Modified浏览器缓存机制,对未修改的资源返回 304 状态码
307Temporary Redirect(临时重定向)临时重定向资源到新的位置(较少使用)
308Permanent Redirect(永久重定向)永久重定向资源到新的位置(较少使用)
400Bad Request填写表单时,格式不正确导致提交失败
401Unauthorized访问需要登录的页面时,未登录或认证
403Forbidden尝试访问你没有权限查看的页面
404Not Found访问不存在的网页链接
500Internal Server Error服务器崩溃或数据库错误导致页面无法加载
502Bad Gateway使用代理服务器时,代理服务器无法从上游服务器获取有效响应
503Service Unavailable服务器维护或过载,暂时无法处理请求

HTTP中无论是 301 还是 302 重定向 服务器收到请求后除了返回 301 302 状态码,还会再头部中添加Location信息,用于告诉浏览器应该将请求重定向到哪个新的URL地址,浏览器收到回复后重新向 Location 发起请求

HTTP/1.1 301 Moved Permanently\r\n
Location: https://www.new-url.com\r\nHTTP/1.1 302 Found\r\n
Location: https://www.new-url.com\r\n

HTTP 常见 Header

  • Content-Type:数据类型(text/html)
  • Content-Length:Body的长度
  • Host:客户端告诉服务器,请求的资源在哪个主机的哪个端口上
  • User-Agent:声明用户的操作系统和浏览器版本信息
  • Referer:当前页面是从哪个页面跳转过来的
  • Location:搭配3XX状态码使用,告诉客户端接下来要去哪里访问
  • Cookie:用于在客户端存储少量信息,通常用户实现会话(session)的功能
关于Header中的connection

这个字段主要是为了控制服务器和客户端之间的连接状态,也就是支持客户端与服务器之间持久连接(响应完成后不立刻关闭TCP连接)这样可以在一个连接上发送多个请求和接受多个响应

在HTTP/1.1中默认就是使用持久连接,HTTP/1.0中默认的连接是非持久的,如果在HTTP/1.0中希望是持久连接,则需要在Header中显示添加该字段:Connection: keep-alive,如果在HTTP/1.1中希望不是持久连接添加该字段:Connection: close

常见Header表

以下是 HTTP 协议中常见的 Header 字段表格,按请求头(Request Headers)和响应头(Response Headers)分类

类别字段名称作用描述常见示例
请求头Host指定请求的服务器域名和端口号,HTTP/1.1 必需字段Host: www.example.comHost: api.example.com:8080
User-Agent标识发送请求的客户端(浏览器、爬虫等)信息User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/114.0.0.0
Accept客户端可接受的响应数据格式(MIME 类型)Accept: text/html, application/json
Accept-Encoding客户端支持的内容编码方式(如压缩格式)Accept-Encoding: gzip, deflate, br
Accept-Language客户端可接受的自然语言(如中文、英文)Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Authorization用于身份验证,通常携带令牌(如 Bearer Token)或基本认证信息Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Content-Type请求体的数据格式(仅在 POST/PUT 等有请求体时使用)Content-Type: application/jsonContent-Type: multipart/form-data
Content-Length请求体的字节长度(帮助服务器确定数据是否完整)Content-Length: 1024
Cookie客户端存储的 Cookie 信息,由服务器通过Set-Cookie设置Cookie: sessionId=abc123; username=user1
Referer标识当前请求的来源页面(防盗链、统计来源常用)Referer: https://www.example.com/login
Origin跨域请求时,标识请求的源站(协议 + 域名 + 端口),不含路径Origin: https://www.example.com
Cache-Control客户端对缓存的控制策略(如禁止缓存、强制验证等)Cache-Control: no-cacheCache-Control: max-age=3600
If-Modified-Since条件请求:仅当资源在指定时间后修改过才返回,否则返回 304If-Modified-Since: Wed, 21 Oct 2023 07:28:00 GMT
Range断点续传:请求资源的部分内容(如从第 100 字节开始)Range: bytes=100-Range: bytes=0-499, 500-999
响应头Status响应状态码及描述(如 200 OK、404 Not Found)Status: 200 OK
Content-Type响应体的数据格式(MIME 类型),帮助客户端解析数据Content-Type: text/html; charset=utf-8Content-Type: image/jpeg
Content-Length响应体的字节长度Content-Length: 2048
Content-Encoding响应体的编码方式(如 gzip 压缩),客户端需先解压Content-Encoding: gzip
Set-Cookie服务器向客户端设置 Cookie,可包含过期时间、域名、路径等属性Set-Cookie: sessionId=abc123; Expires=Wed, 21 Oct 2024 07:28:00 GMT
Cache-Control服务器对缓存的控制策略(如客户端可缓存时长、是否可共享等)Cache-Control: public, max-age=86400Cache-Control: no-store
Expires资源的过期时间(HTTP/1.0 遗留字段,与Cache-Control配合使用)Expires: Thu, 22 Oct 2023 07:28:00 GMT
Last-Modified资源最后修改的时间,用于客户端缓存验证(配合If-Modified-SinceLast-Modified: Wed, 21 Oct 2023 07:28:00 GMT
ETag资源的唯一标识(如哈希值),用于更精确的缓存验证(配合If-None-MatchETag: "abc123"ETag: W/"abc123"(弱验证器)
Location重定向时,指定新的资源 URL(配合 3xx 状态码使用)Location: https://www.example.com/new-page
Access-Control-Allow-Origin跨域资源共享(CORS):允许访问的源站(* 表示允许所有)Access-Control-Allow-Origin: https://www.example.com*
Access-Control-Allow-MethodsCORS:允许的请求方法(如 GET、POST、PUT)Access-Control-Allow-Methods: GET, POST, OPTIONS
Server服务器的软件信息(如 Web 服务器类型、版本)Server: Nginx/1.21.0Server: Apache/2.4.54
Connection控制连接是否保持(HTTP/1.1 默认keep-alive,关闭为closeConnection: keep-aliveConnection: close

补充说明:

  • 部分 Header 字段(如Cache-ControlContent-Type)在请求头和响应头中均可使用,但作用对象不同(请求头控制客户端行为,响应头控制服务器行为)。
  • 标头名称不区分大小写,但通常约定使用首字母大写(如User-Agent而非user-agent)。
  • 扩展 Header(如X-Forwarded-ForX-Requested-With)常用于特定场景(如代理、AJAX 请求标识),但非 HTTP 标准定义。

嗯~没错这就是那个被面试官说是LJ的项目👍💩 💩

基于Reactor反应堆+Epoll多路转接的HTTP服务器

附录:

HTTP历史及版本核⼼技术与时代背景

HTTP(Hypertext Transfer Protocol,超⽂本传输协议)作为互联网中浏览器和服务器间通信的基石,经历了从简单到复杂、从单⼀到多样的发展过程。以下将按照时间顺序,介绍HTTP的主要版本、核心技术及其对应的时代背景。

HTTP/0.9

核心技术:

  • 仅支持GET请求⽅法。
  • 仅支持纯⽂本传输,主要是HTML格式。
  • 无请求和响应头信息。

时代背景:

  • 1991年,HTTP/0.9版本作为HTTP协议的最初版本,用于传输基本的超文本HTML内容。
  • 当时的互联网还处于起步阶段,网页内容相对简单,主要以文本为主。

HTTP/1.0

核心技术:

  • 引入POSTHEAD请求⽅法。
  • 请求和响应头信息,⽀持多种数据格式(MIME)。
  • 支持缓存(cache)。
  • 状态码(status code)、多字符集支持等。

时代背景:

  • 1996年,随着互联⽹的快速发展,网页内容逐渐丰富,HTTP/1.0版本应运而生。
  • 为了满足日益增长d的网络应用需求,HTTP/1.0增加了更多的功能和灵活性。
  • 然而,HTTP/1.0的⼯作方式是每次TCP连接只能发送⼀个请求,性能上存在⼀定局限。

HTTP/1.1

核心技术:

  • 引⼊持久连接(persistent connection),支持管道化(pipelining)。
  • 允许在单个TCP连接上进行多个请求和响应,提高了性能。
  • 引⼊分块传输编码(chunked transfer encoding)。
  • 支持Host头,允许在⼀个IP地址上部署多个Web站点。

时代背景:

  • 1999年,随着网页加载的外部资源越来越多,HTTP/1.0的性能问题愈发突出。

  • HTTP/1.1通过引⼊持久连接和管道化等技术,有效提高了数据传输效率。

  • 同时,互联网应用开始呈现出多元化、复杂化的趋势,HTTP/1.1的出现满满足了这些需求。

HTTP/2.0

核心技术:

  • 多路复用(multiplexing),⼀个TCP连接允许多个HTTP请求。
  • ⼆进制帧格式(binary framing),优化数据传输。
  • 头部压缩(header compression),减少传输开销。
  • 服务器推送(server push),提前发送资源到客户端。

时代背景:

  • 2015年,随着移动互联⽹的兴起和云计算技术的发展,网络应用对性能的要求越来越高。

  • HTTP/2.0通过多路复用、⼆进制帧格式等技术,显著提高了数据传输效率和网络性能。

  • 同时,HTTP/2.0还⽀持加密传输(HTTPS),提高了数据传输的安全性。

HTTP/3.0

核心技术:

  • 使用QUIC协议替代TCP协议,基于UDP构建的多路复用传输协议。

  • 减少了TCP三次握⼿及TLS握手时间,提高了连接建立速度。

  • 解决了TCP中的线头阻塞问题,提高了数据传输效率。

时代背景:

  • 2022年,随着5G、物联⽹等技术的快速发展,网络应用对实时性、可靠性的要求越来越高。

  • HTTP/3.0通过使用QUIC协议,提高了连接建立速度和数据传输效率,满足了这些需求。

  • 同时,HTTP/3.0还支持加密传输(HTTPS),保证了数据传输的安全性。
    用对性能的要求越来越高。

  • HTTP/2.0通过多路复用、⼆进制帧格式等技术,显著提高了数据传输效率和网络性能。

  • 同时,HTTP/2.0还⽀持加密传输(HTTPS),提高了数据传输的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90768.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rust-包和箱子

&#x1f4e6; 图解 Rust 代码组织层级 #mermaid-svg-fBDy1PDZZ6bi000z {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fBDy1PDZZ6bi000z .error-icon{fill:#552222;}#mermaid-svg-fBDy1PDZZ6bi000z .error-text{fi…

C++算法竞赛篇(五)循环嵌套题型讲解

C算法竞赛篇&#xff08;五&#xff09;循环嵌套题型讲解前言C循环嵌套题型讲解第一题 包含数字的9第二题 求出 e 的值第三题 斐波那契数列第四题 第 n 小的质数第五题 水仙花数前言 前面的题型里我们认识了C里面的三大循环本篇博客我们开始讲解C循环嵌套题型 我的个人主页&am…

Gradio全解8——ChatInterfaceChatbot:聊天界面类与聊天机器人(3)——ChatInterface的多模态功能与附加输入输出

Gradio全解8——ChatInterface&Chatbot&#xff1a;聊天界面类与聊天机器人&#xff08;3&#xff09;——ChatInterface的多模态功能与附加输入输出8.3 ChatInterface的多模态功能与附加输入输出8.3.1 多模态功能1. 设置multimodal和fn参数2. 传入MultimodalTextbox组件及…

php算法-- 关联数组使用,优化sip账号去重

文章目录1 变量定义2. 核心特性code1 变量定义 类型&#xff1a;嵌套的关联数组&#xff08;Nested Associative Array&#xff09;外层结构&#xff1a;[中继ID > 账号列表]键 (Key)&#xff1a;中继ID&#xff08;字符串或整型&#xff09;值 (Value)&#xff1a;索引数组…

LLM 多语言数据集

多语言数据感觉主要还是fineweb和fineweb2, 其他数据都是主要针对特定语种比较多 101 Billion Arabic Words Dataset ClusterlabAi/101_billion_arabic_words_dataset 数据主要从e Common Crawl WET 中提取&#xff0c;并采用了创新的技术来进行去重和筛选&#xff0c;主要解决…

【HarmonyOS Next之旅】DevEco Studio使用指南(三十六) -> 配置构建(三)

目录 1 -> 定制HAR多目标构建产物 1.1 -> 定义产物的deviceType 1.2 -> 定义C工程依赖的.so文件 1.3 -> 定义产物的资源 2 -> 配置APP多目标构建产物 2.1 -> 定义产物的APP包名和供应商名称 2.2 -> 定义product的bundleName 2.3 -> 定义produc…

数据赋能(340)——技术平台——共享平台

概述重要性如下&#xff1a;提高数据利用效率&#xff1a;数据共享平台能够将分散在各部门的数据进行集中管理&#xff0c;促进数据流通和共享&#xff0c;避免数据孤岛现象&#xff0c;从而提高数据利用效率。促进决策科学化&#xff1a;通过共享平台&#xff0c;各部门可以获…

开闭原则在C++中的实现

开闭原则&#xff08;Open/Closed Principle&#xff0c;简称 OCP&#xff09;是面向对象设计中的一个重要原则&#xff0c;属于“SOLID”原则之一。它的核心思想是&#xff1a;“软件实体&#xff08;如类、模块、函数等&#xff09;应该对扩展开放&#xff0c;对修改关闭。”…

C语言:*p++与p++有何区别

1. 指针基础练习&#xff1a;演示p、p和(*p)的区别核心目的&#xff1a;区分指针自增与指针指向值自增的不同逻辑&#xff0c;理解运算符优先级对指针操作的影响。#include <stdio.h>void arr1() {int arr[] {11,13,15,17,19};int *p arr;printf("结果1&#xff1…

【设计】设计一个web版的数据库管理平台后端(之二)

在之前&#xff0c;我写过一篇【设计】设计一个web版的数据库管理平台后端精要 的文章&#xff0c;文章讲了一个web版数据库管理平台的实现思路及主要代码。 最近&#xff0c;我看了下Mybatis的源码&#xff0c;觉得Mybatis的分层架构挺好&#xff0c;所以想到了完善下web版数据…

Visual tudio 各版本下 C++ 开发的核心区别与实践指南

C语言的发展经历了数十年的演进&#xff0c;从 C98 到现代的 C20/23&#xff0c;语言本身发生了巨大的变革。与此同时&#xff0c;Visual Studio 作为主流的 C 开发环境之一&#xff0c;其编译器对各个 C 标准的支持程度也随版本不断演进&#xff0c;直接影响着开发者的编程方式…

怎样让阿里云服务器(centos)有界面

要让阿里云服务器 CentOS 有图形界面&#xff0c;可以按照以下步骤进行操作&#xff1a;登录服务器&#xff1a;使用 SSH 客户端工具&#xff0c;通过 IP 地址和账号登录到阿里云服务器。更新系统软件源&#xff1a;输入命令sudo yum update&#xff0c;更新系统软件源&#xf…

Qt 异步编程模式与应用

在现代软件开发中&#xff0c;异步编程已成为提升应用性能和响应性的关键技术。Qt 作为一个强大的跨平台框架&#xff0c;提供了多种异步编程模式&#xff0c;包括信号槽机制、事件循环、线程池、异步 I/O 等。本文将深入探讨 Qt 异步编程的各种模式及其应用场景&#xff0c;帮…

面试150 数字范围按位与

思路 只要 left < right&#xff0c;说明两者在某些低位上存在不同&#xff0c;为了找到它们的公共前缀&#xff08;高位相同部分&#xff09;&#xff0c;不断将 left 和 right 同时右移&#xff08;即除以2&#xff09;&#xff0c;直到它们相等&#xff0c;记录右移的次数…

数据库HB OB mysql ck startrocks, ES存储特点,以及应用场景

这些数据库和存储引擎主要有:HB(HBase)、OB(OceanBase)、MySQL、ClickHouse(CK)、StarRocks、Elasticsearch(ES),下面分别介绍它们的存储特点以及典型应用场景。 1. HBase (HB) 存储特点 分布式、面向列的NoSQL数据库 采用HDFS存储,数据以表、row key、列族、时间戳…

Java技术栈/面试题合集(17)-Git篇

场景 Java入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享: Java入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享_java高级进阶-CSDN博客 通过对面试题进行系统的复习可以对Java体系的知识点进行查漏补缺。…

破局与重构:King’s LIMS 引领电子行业实验室智能化转型

在全球化高新技术竞争白热化背景下&#xff0c;电子行业正经历从规模导向扩张向质量效益跃升的战略转型。终端用户对产品性能的极致化追求、行业质量合规标准的持续迭代升级&#xff0c;以及检测数据的指数级增长&#xff0c;共同形成"需求牵引供给、供给创造需求"的…

暑期算法训练.9

目录 43 .力扣75 颜色分类 43.1 题目解析&#xff1a; 43.2 算法思路&#xff1a; 43.3 代码演示&#xff1a; 43.4 总结反思&#xff1a; 44. 力扣 912 排序数组 44.1 题目解析&#xff1a; 44.2 算法思路&#xff1a; 44.3 代码演示&#xff1a; ​编辑 44.4 总结反…

2.安装CUDA详细步骤(含安装截图)

2.安装CUDA 第一步&#xff1a;安装anaconda 注意&#xff1a;安装CUDA之前需要安装好anaconda&#xff0c;详见安装anaconda详细步骤&#xff08;含安装截图&#xff09; 文章目录2.安装CUDA2.0 CUDA是什么&#xff0c;为什么要安装它&#xff1f;2.1 验证计算机是否安装CUDA2…

Triton IR

Triton IR语法 Triton IR的语句遵从MLIR Dialect的语法定义规范&#xff0c;示例如下&#xff1a; %3 tt.splat %1 : i32 -> tensor<1024xi32> loc(#loc5) 其中&#xff1a; %0&#xff1a;右边expression的结果值的名字&#xff08;Value的name&#xff09; tt…