WEB技術演進史:從C/S到微服務架構

WEB技術

HTTP協議和B/S 結構

操作系統有進程子系統,使用多進程就可以充分利用硬件資源。進程中可以多個線程,每一個線程可以被CPU調度執行,這樣就可以讓程序并行的執行。這樣一臺主機就可以作為一個服務器為多個客戶端提供計算服務。
客戶端和服務端往往處在不同的物理主機上,它們分屬不同的進程,這些進程間需要通信。跨主機的進程間通信需要使用網絡編程。最常見的網絡編程接口是Socket。
Socket稱為套接字,本意是插座。也就是說網絡通訊需要兩端,如果一端被動的接收另一端請求并提供計算和數據的稱為服務器端,另一端往往只是發起計算或數據請求,稱為客戶端
這種編程模式稱為Client/Server編程模式,簡稱C/S編程。開發的程序也稱為C/S程序。C/S編程往往使用傳輸層協議(TCP/UDP),較為底層,比如:QQ,迅雷, 云音樂, 云盤, foxmail,xshell等
1990年HTTP協議和瀏覽器誕生。在應用層使用文本跨網絡在不同進程間傳輸數據,最后在瀏覽器中將服務器端返回的HTML渲染出來。由此,誕生了網頁開發。
網頁是存儲在WEB服務器端的文本文件,瀏覽器發起HTTP請求后,到達WEB服務程序后,服務程序根據URL讀取對應的HTML文件,并封裝成HTTP響應報文返回給瀏覽器端。
起初網頁開發主要指的是HTML、CSS等文件制作,目的就是顯示文字或圖片,通過超級鏈接跳轉到另一個HTML并顯示其內容。 后來,網景公司意識到讓網頁動起來很重要,傍著SUN的Java的名氣發布了JavaScript語言,可以在瀏覽器中使用JS引擎執行的腳本語言,可以讓網頁元素動態變化,網頁動起來了。為了讓網頁動起來,微軟使用ActiveX技術、SUN的Applet都可以在瀏覽器中執行代碼,但都有安全性問 題。能不能直接把內容直接在WEB服務器端組織成HTML,然后把HTML返回給瀏覽器渲染呢?
最早出現了CGI(Common Gateway Interface)通用網關接口,通過瀏覽器中輸入URL直接映射到一個服務器端的腳本程序執行,這個腳本可以查詢數據庫并返回結果給瀏覽器端。這種將用戶請求使用程序動態生成的技術,稱為動態網頁技術。先后出現了ASP、PHP、JSP等技術,這些技術的使用不同語言編寫的程序都運行在服務器端,所以稱為WEB后端編程。有一部分程序員還是要編寫HTML、CSS、 JavaScript,這些代碼運行在瀏覽器端,稱為WEB前端編程。合起來稱為Browser/Server編程,即B/S編程

前端三大核心技術

HTML

HTML(HyperText Markup Language)超文本標記語言,它不同于一般的編程語言。超文本即超出純文本的范疇,例如:描述文本顏色、大小、字體等信息,或使用圖片、音頻、視頻等非文本內容。 HTML由一個個的標簽(標記)組成,這些標簽各司其職,有的提供網頁信息,有的負責文字,有的負 責圖片,有的負責網頁布局,所以一個HTML文件,是由格式標簽和數據組成
超文本需要顯示,就得有軟件能夠呈現超文本定義的排版格式,例如顯示:圖片、表格,顯示字體的大小、顏色,這個軟件就是瀏覽器。 超文本的誕生是為了解決純文本不能格式顯示的問題,是為了好看,但是只有通過網絡才能分享超文本的內容,所以制定了HTTP協議

CSS(Cascading Style Sheets)層疊樣式表

HTML本身為了格式化顯示文本,但是當網頁呈現大家面前的時候,需求HTML提供更多樣式能力。這使得HTML變得越來越臃腫。這促使了CSS的誕生。 1994年,W3C成立,CSS設計小組所有成員加入W3C,并努力研發CSS的標準,微軟最終加入。 1996年12月發布CSS 1.0。 1998年5月發布CSS 2.0。 CSS 3采用了模塊化思想,每個模塊都在CSS 2基礎上分別增強功能。所以,這些模塊是陸續發布的。 不同廠家的瀏覽器使用的引擎,對CSS的支持不一樣,導致網頁布局、樣式在不同瀏覽器不一樣。因 此,想要保證不同用戶使用不同瀏覽器看到的網頁效果一直非常困難。

JavaScript

Javascript簡稱JS,是一種動態的弱類型腳本解釋性語言,和HTML、CSS并稱三大WEB核心技術,得到了幾乎主流瀏覽器支持。 1994年,網景Netscape公司成立并發布了Netscape Navigator瀏覽器,占據了很大的市場份額,網景意識到WEB需要動態,需要一種技術來實現。
1995年9月網景瀏覽器2發布測試版本發布了LiveScript,隨即在12月的測試版就更名為JavaScript。同時期,微軟推出IE并支持JScript、VBScript,與之抗衡。 1997年,網景、微軟、SUN、Borland公司和其他組織在ECMA(European Computer Manufacturers Association 歐洲計算機制造商協會)確定了ECMAScript的本程序設計語言的標準。JavaScript和JScript 都成為ECMAScript標準的實現。 2008年后隨著chrome瀏覽器的V8引擎發布。 V8 JS引擎不是解釋執行,而是本地編譯,在V8引擎做了很多優化,JS程序在其上運行堪比本地二進制程 序。V8引擎使用C++開發,可以嵌入到任何C++程序中。基于V8引擎,2009年基于服務器javascript的運行環境Node.js誕生,創建了第一版npm (Node.js包管理器和開源庫生態系統), 提供了大量的庫供程序員使用。從此,便可以在服務器端真正大規模使用JavaScript編程了。也就是說 JavaScript 也可以真正稱為服務器端編程語言了,成為目前唯一的前,后端通用的語言。

同步

交互式網頁,用戶提交了請求,就是想看到查詢的結果。服務器響應到來后是一個全新的頁面內容,哪 怕URL不變,整個網頁都需要重新渲染。例如,用戶填寫注冊信息,只是2次密碼不一致,提交后,整個 注冊頁面重新刷新,所有填寫項目重新填寫(當然有辦法讓用戶減少重填)。這種交互非常不友好。從代價 的角度看,就是為了注冊的一點點信息,結果返回了整個網頁內容,不但浪費了網絡帶寬,還需要瀏覽 器重新渲染網頁,太浪費資源了,影響了用戶體驗和感受。上面這些請求的過程,就是同步過程,用戶 發起請求,頁面整個刷新,直到服務器端響應的數據到來并重新渲染。

異步

1996年微軟實現了iframe標簽,可以在一個網頁使用iframe標簽局部異步加載內容。1999年微軟推出異步數據傳輸的ActiveX插件技術,太笨重了,但是也火了很多年。有一個組件XMLHttpRequest被大多數瀏覽器支持。 傳統的網頁如果需要更新內容,必需重載整個網頁面。Ajax的出現,改變這一切,同時極大的促進了 Javascript的發展。Ajax 即"Asynchronous Javascript And XML"(異步 JavaScript 和 XML),是指一種創建交互式、快速動態網頁應用的網頁開發技術,最早起源于1998年微軟的Outlook Web Access開發團隊。Ajax 通過在后臺與服務器進行少量數據交換, 可以使網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。Javascript 通過調用瀏覽器內置的WEB API中的 XMLHttpRequest 對象實現Ajax 技術。早期Ajax結合數據格式XML,目前更多的使用JSON。利用AJAX 可實現前后端開發的徹底分離,改變了傳統的開發模式。 AJAX是一種技術的組合,技術的重新發現,而不是發明,但是它深遠的影響了整個WEB開發。 參考資料: https://www.w3school.com.cn/ajax/index.asp

java 基礎

WEB架構

Web資源和訪問

在這里插入圖片描述

PC 端或移動端瀏覽器訪問
從靜態服務器請求HTML、CSS、JS等文件發送到瀏覽器端,瀏覽器端接收后渲染在瀏覽器上,從圖片服務器請求圖片資源顯示,從業務服務器訪問動態內容,動態內容是請求后有后臺服務訪問數據庫后得到的,最終返回到瀏覽器端。
手機 App 訪問
內置了HTML和JS文件,不需要從靜態WEB服務器下載 JS 或 HTML。為的就是減少文件的發送,現代前端開發使用的JS文件太多或太大了,有必要就從圖片服務器請求圖片,從業務服務器請求動態數據,客戶需求多樣,更多的內容還是需要由業務服務器提供,業務服務器往往都是由一組服務器組成。

后臺應用架構

在這里插入圖片描述

單體架構

傳統架構(單機系統),一個項目一個工程:比如商品、訂單、支付、庫存、登錄、注冊等等,統一部署,一個進程 all in one的架構方式,把所有的功能單元放在一個應用里。然后把整個應用部署到一臺服務器上。如果負載能力不行,將整個應用進行水平復制,進行擴展,然后通過負載均衡實現訪問。Java實現:JSP、Servlet,打包成一個jar、war文件部署,易于開發和測試;也十分方便部署;當需要擴展時,只需要將war復制多份,然后放到多個服務器上,再做個負載均衡就可以了。如果某個功能模塊出問題,有可能全站不可訪問,修改Bug后、某模塊功能修改或升級后,需要停掉整個服務,重新整體重新打包、部署這個應用war包,功能模塊相互之間耦合度高,相互影響,不適合當今互聯網業務功能的快速迭代。 特別是對于一個大型應用,我們不可能吧所有內容都放在一個應用里面,我們如何維護、如何分工 合作都是問題。如果項目龐大,管理難度大。 web應用服務器:開源的tomcat、jetty、glassfish。商用的有weblogic、websphere、Jboss

微服務

https://www.martinfowler.com/microservices/
In short, the microservice architectural style is an approach to developing a
single application as a suite of small services, each running in its own process
and communicating with lightweight mechanisms, often an HTTP resource API. These
services are built around business capabilities and independently deployable by
fully automated deployment machinery. There is a bare minimum of centralized
management of these services, which may be written in different programming
languages and use different data storage technologies.
簡而言之,微服務架構風格是一種將單個應用程序開發為一組小服務的方法,每個小服務都在自己的進程中運
行,并與輕量級機制(通常是 HTTP 資源 API)進行通信。 這些服務是圍繞業務能力構建的,并且可以通過
完全自動化的部署機制獨立部署。 這些服務的集中管理極少,可以用不同的編程語言編寫并使用不同的數據存
儲技術。-- James Lewis and Martin Fowler (2014)

屬于SOA(Service Oriented Architecture)的子集,SOA可以認為面向服務的1.0版本,微服務可以認為是面向服務的2.0版本,SOA的服務之間通過ESB(Enterprise Service Bus)進行通信,則ESB的單點依賴和商業ESB的費用問題反而成為了所有服務的瓶頸。
微服務化的核心就是將傳統的一站式應用,根據業務拆分成一個一個的服務,徹底去掉耦合,每一個微服務提供單個業務功能,一個服務只做一件事。每個服務都圍繞著具體業務進行構建,并且能夠被獨立地部署到生產環境、類生產環境等。從技術角度講就是一種小而獨立的處理過程,類似與進程的概念,能夠自行單獨啟動或銷毀。微服務架構(分布式系統),各個模塊/服務,各自獨立出來,“讓專業的人干專業的事”,獨立部署。分布式系統中,不同的服務可以使用各自獨立的數據庫。 服務之間采用輕量級的通信機制(通常是基于HTTP的RESTful API)。 微服務設計的思想改變了原有的企業研發團隊組織架構。傳統的研發組織架構是水平架構,前端、 后端、DBA、測試分別有自己對應的團隊,屬于水平團隊組織架構。而微服務的設計思想對團隊的劃分有著一定的影響,使得團隊組織架構的劃分更傾向于垂直架構,比如用戶業務是一個團隊來負責,支付業務是一個團隊來負責。但實際上在企業中并不會把團隊組織架構拆分得這么絕對,垂直架構只是一種理想的架構。微服務的實現框架有多種,不同的應用架構,部署方式也有不同

java

在這里插入圖片描述
Java原指的是印度尼西亞的爪哇島,人口眾多,盛產咖啡、橡膠等。 Java語言最早是在SUN公司1991年開始設計的,最初叫Oak項目,它初衷是跑在不同機頂盒設備中的。 1993年網景公司成立。Oak項目組很快他們發現了瀏覽器和動態網頁技術這個巨大的市場,轉向WEB方向。并首先發布了可以讓網頁動起來的Applet技術(瀏覽器中嵌入運行Java字節碼的技術)。在1995年,一杯爪哇島咖啡成就了Java這個名字。 Sun公司第一個Java公開版本1.0發布于1996年。口號是"一次編寫,到處運行"(Write once,Run anywhere),跨平臺運行。1999年,SUN公司發布了第二代Java平臺(Java2)。 2009年4月20日,Oracle甲骨文公司宣布將以每股9.50美元,總計74億美金收購SUN(計算機系統)公司。2010年1月成功收購。 2010年,Java創始人之一的 James Gosling 離開了Oracle,去了Google

java 組成

Java 包含下面部分: 語言、語法規范。關鍵字,如: if、for、class等 源代碼 source code 依賴庫,標準庫(基礎)、第三方庫(針對某些應用)。底層代碼太難使用且開發效率低,封裝成現成的庫 JVM虛擬機。將源代碼編譯為中間碼即字節碼后,再運行在JVM之上
在這里插入圖片描述

由于各種操作系統ABI不一樣,采用編譯方式,需要為不同操作系統編譯成相應格式的二進制程序才能運行。1995年,Java發布Applet技術,Java程序在后臺編譯成字節碼,發送到瀏覽器端,在瀏覽器中運行一個 Applet程序,這段程序是運行在另外一個JVM進程中的。但是這種在客戶端運行Java代碼的技術,會有很大的安全問題。1997年CGI技術發展起來,動態網頁技術開始向后端開發轉移,在后端將動態內容組織好,拼成HTML發回到瀏覽器端

Java動態網頁技術

servlet

本質就是一段 java 程序

public class HelloWorld extends HttpServlet {private String message;public void init() throws ServletException{message = "Hello World";}public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{response.setContentType("text/html"); //響應報文內容類型PrintWriter out = response.getWriter();  //構建響應報文內容out.println("<h1>" + message + "</h1>");out.println("<p><a href=http://www.caoge.org>曹哥</a>歡迎你</p>");}public void destroy(){}
}

在Servlet中最大的問題是,HTML輸出和Java代碼混在一起,如果網頁布局要調整,Java源代碼就需要隨之進行調整,對于開發人員來說就是個噩夢。

jsp(Java Server Pages)

JSP本質是提供一個HTML模板,也就是在網頁中預留以后填充的空,后續將Java程序運行生成的數據對HTML進行填空就可以了。如果網頁布局需要調整,JAVA源代碼不需要很大的調整

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>jsp例子</title>
</head>
<body>
本行后面的內容是服務器端動態生成字符串,最后拼接在一起
<%
out.println("你的 IP 地址 " + request.getRemoteAddr());
%>
</body>
</html>

JSP是基于Servlet實現,JSP將表現和邏輯分離,這樣頁面開發人員更好的注重頁面表現力更好服務客戶。 不過最終 JSP 還需要先轉換為 Servlet的源代碼.java文件(Tomcat中使用Jasper轉換),只不過這個轉換過程無需人工完成,是通過工具自動實現的,然后再編譯成.class文件,最后才可以在JVM中運行。比如: 瀏覽器第一次請求test.jsp時, Tomcat服務器會自動將test.jsp轉化成test.jsp.java這么一個類,并將該文件編譯成class文件。編譯完畢后再運行class文件來響應瀏覽器的請求。如果以后訪問test.jsp就不再重新編譯。jsp文件了,直接調用class文件來響應瀏覽器。后續如果Tomcat檢測到JSP頁面改動了的話, 會重新編譯 JSP類似于PHP和ASP,前端代碼和后端JAVA代碼混寫在一起,需要前端和后端工程師在一起協作才能完成, 無法做到真正的前后端分離開發,在web早期的開發中,通常采用的分為兩層,視圖層和模型層。
在這里插入圖片描述

優點:架構簡單,比較適合小型項目開發
缺點:JSP職責不單一,職責過重,不便于維護

mvc

如果過度使用jsp技術,jsp中既寫有大量的java代碼,也有html,甚至還有javascript等,造成難以維護,難以實現前后端分工協作,后來java 的web開發借鑒了MVC(Model View Controller )開發模式, MVC是模型(Model)、視圖(View)、控制器(Controller)的簡寫,是一種軟件設計規范。是將業務邏輯、 數據、顯示分離的方法來組織代碼。MVC主要作用是降低了視圖與業務邏輯間的雙向偶合。 MVC不是一種設計模式,MVC是一種架構模式。當然不同的MVC存在差異。 Model(模型):數據模型,提供要展示的數據,因此包含數據和行為,可以認為是領域模型或 JavaBean組件(包含數據和行為),不過現在一般都分離開來:Value Object(數據Dao)和服務層(行為Service)。也就是模型提供了模型數據查詢和模型數據的狀態更新等功能,包括數據和業務。 View(視圖):負責進行模型的展示,一般就是我們見到的用戶界面,客戶想看到的東西。可通過 JSP實現 Controller(控制器):接收用戶請求,委托給模型進行處理(狀態改變),處理完畢后把返回的模型數據返回給視圖,由視圖負責展示。也就是說控制器做了個調度員的工作。最終表現為Servlet。最典型的MVC就是JSP + servlet + javabean的模式
在這里插入圖片描述

職責分析:
Controller:控制器
取得表單數據
調用業務邏輯
轉向指定的頁面
Model:模型
業務邏輯
保存數據的狀態
View:視圖
顯示頁面
處理流程:1. 用戶發請求 2. Servlet接收請求數據,并調用對應的業務邏輯方法 3. 業務處理完畢,返回更新后的數據給servlet 4. servlet轉向到JSP,由JSP來渲染頁面 5. 響應給前端更新后的頁面

在這里插入圖片描述
MVC模式也有以下不足: 每次請求必須經過"控制器->模型->視圖"這個流程,用戶才能看到最終的展現界面,這個過程似乎有些復雜,實際上視圖是依賴于模型的,換句話說,如果沒有模型,視圖也無法呈現出最終的效果,渲染視圖過程是在服務端來完成的,最終呈現給瀏覽器的是帶有模型的視圖頁面,性能無法得到很好的優化

REST

為了使數據展現過程更加直接,并且提供更好的用戶體驗,對MVC模式進行改進。首先從瀏覽器發送 AJAX( Asynchronous JavaScript and XML 異步的 JavaScript 和 XML)請求,然后服務端接受該請求并返回JSON數據返回給瀏覽器,最后在瀏覽器中進行界面渲染。改進后的MVC模式如下圖所示
在這里插入圖片描述

也就是說,我們輸入的是AJAX請求,輸出的是JSON數據,REST技術實現這樣的功能。 REST(Representational State Transfer表述性狀態轉移,全稱是 Resource Representational State Transfer 即資源在網絡中以某種表現形式進行狀態轉移。 分解開來:Resource:資源,即數據 Representational:某種表現形式,比如用JSON,XML,JPEG等 State Transfer:狀態變化。通過HTTP動詞實現,它是Roy Fielding博士在2000年寫的一篇關于軟件架構風格的論文,后來國內外許多知名互聯網公司紛紛開始采用這種輕量級的Web服務,大家習慣將其稱為RESTful Web Services,或簡稱REST服務。 如果將瀏覽器這一端視為前端,而服務器那一端視為后端的話,可以將以上改進后的MVC模式簡化為以下前后端分離模式,如下圖所示:
在這里插入圖片描述
可見,采用REST風格的架構可以使得前端關注界面展現,后端關注業務邏輯,分工明確,職責清晰。在設計web接口的時候,REST主要是用于定義接口名,接口名一般是用名次寫,不用動詞,那怎么表達“獲取”或者“刪除”或者“更新”這樣的操作呢——用請求類型來區分。比如,我們有一個friends接口,對于“朋友”我們有增刪改查四種操作,怎么定義REST接口?
增加一個朋友,uri: generalcode.cn/v1/friends 接口類型:POST
刪除一個朋友,uri: generalcode.cn/va/friends 接口類型:DELETE
修改一個朋友,uri: generalcode.cn/va/friends 接口類型:PUT
查找朋友,uri: generalcode.cn/va/friends 接口類型:GET
上面我們定義的四個接口就是符合REST協議的,請注意,這幾個接口都沒有動詞,只有名詞friends,都是通過Http請求的接口類型來判斷是什么業務操作。 REST就是一種設計API的模式。最常用的數據格式是JSON。由于JSON能直接被JavaScript讀取,所以, 以JSON格式編寫的REST風格的API具有簡單、易讀、易用的特點。 編寫API有什么好處呢?由于API就是把Web App的功能全部封裝了,所以,通過API操作數據,可以極大地把前端和后端的代碼隔離,使得后端代碼易于測試,前端代碼編寫更簡單。前端拿到數據只負責展示和渲染,不對數據做任何處理。后端處理數據并以JSON格式傳輸出去,定義這樣一套統一的接口,在web,ios,android三端都可以用相同的接口,通過客戶端訪問API,就可以完成通過瀏覽器頁面提供的功能,而后端代碼基本無需改動

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92759.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92759.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92759.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win11中Qt5.14.0+msvc2019+opencv4.9配置

本文主要研究由msvc編譯的opencv在QT中的配置&#xff0c;opencv可以是官網直接下載的版本&#xff0c;也可以是msvc(例如vs2019)通過cmake編譯 contrib功能的opencv版本&#xff0c;這2種版本對qt版本沒有嚴格要求&#xff0c;但是若在cmake中選擇了with_qt功能&#xff0c;那…

【listlist模擬】

list&list模擬1.list使用2、list模擬附錄1.list使用 list常見接口不做介紹&#xff0c;跟前面vector有相似之處&#xff0c;跟數據結構list基本一樣。 ?因為list使用帶頭的雙向循環鏈表實現的&#xff0c;不能用小標訪問&#xff0c;只能用迭代器或范圍for訪問 list有成…

在CentOS 7上將PostgreSQL數據庫從默認路徑遷移到自定義目錄

在CentOS 7上將PostgreSQL數據庫從默認路徑遷移到自定義目錄&#xff0c;需遵循以下步驟。假設原數據目錄為“/var/lib/pgsql/12/data”&#xff0c;目標目錄為“/new/path/pgdata”。 1、步驟概覽 停止PostgreSQL服務創建新目錄并設置權限復制數據文件&#xff08;保留權限&am…

C語言基礎06——結構體(struct)

一、結構體的概念結構體&#xff08;struct&#xff09;是 C 語言中一種自定義數據類型&#xff0c;它允許你將不同類型的數據項組合在一起&#xff0c;形成一個新的復合數據類型。想象一下&#xff1a;如果要表示一個 "學生"&#xff0c;需要包含姓名&#xff08;字…

小白入門指南:Edge SCDN 輕松上手

在互聯網飛速發展的當下&#xff0c;網站性能與安全至關重要。對于小白而言&#xff0c;Edge SCDN 可能是個陌生概念&#xff0c;但它卻能極大助力網站運營。本文將用簡單易懂的語言&#xff0c;帶大家了解 Edge SCDN&#xff0c;探討其運用方法。?一、Edge SCDN 是什么&#…

探秘酵母單雜交技術:解鎖基因調控的密碼

在生命科學研究領域&#xff0c;基因的表達調控機制一直是科學家們關注的焦點。為了深入探究這一復雜過程&#xff0c;眾多先進技術應運而生&#xff0c;酵母單雜交技術便是其中極具價值的一項&#xff0c;它為研究 DNA 與蛋白質之間的相互作用提供了獨特視角與有效手段。酵母單…

大模型備案要點一次過【附材料清單詳解】

最近&#xff0c;廣東省公布了最新一批的大模型備案&#xff08;登記&#xff09;名單&#xff0c;很多準備要做大模型備案的企業都在紛紛咨詢&#xff1a;“大模型備案的周期是多久&#xff1f;”“做大模型備案有什么要求&#xff1f;”“做大模型備案一共需要準備多少材料&a…

啟保停-----------單相照明燈的接法

一.單相照明燈-K21使用的器材,單相電能表,空開,插座,開關,燈泡二.啟 保 停1.需要用到的器材1.空開2.三相電機3.接觸器4.熔斷器5.按鈕2.電路的作用按按鈕 運轉 在按按鈕 停止運轉3.電動4.加上輔助觸點 控制電路5.在加上按鈕 停止電路

TF-IDF:信息檢索與文本挖掘的統計權重基石

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 1. 背景與定義 TF-IDF 是一種統計加權方法&#xff0c;用于衡量詞語在…

[論文閱讀] (41)JISA24 物聯網環境下基于少樣本學習的攻擊流量分類

《娜璋帶你讀論文》系列主要是督促自己閱讀優秀論文及聽取學術講座&#xff0c;并分享給大家&#xff0c;希望您喜歡。由于作者的英文水平和學術能力不高&#xff0c;需要不斷提升&#xff0c;所以還請大家批評指正&#xff0c;非常歡迎大家給我留言評論&#xff0c;學術路上期…

react中父子數據流動和事件互相調用(和vue做比較)

前言&#xff1a;react中父子數據流動和事件互相調用&#xff0c;父組件給子組件數據&#xff0c;父組件調用子組件的事件&#xff0c;同理&#xff0c;子也可以調用父的數據和傳值。react是單向數據流&#xff0c;具體使用跟vue是不同的。1、父組件的數據傳給子組件&#xff0…

杰理手表-增加提示音-提示音音量調整--使用提示音

本章節非常詳細的介紹這個提示音的增加-調整-使用&#xff0c;其余耳機包之類的也是差不多的&#xff01;&#xff01; 目錄 1.添加自己需要用的提示音 2.根據添加的提示音-代碼中配置 1.在tone_player.h中枚舉里添加本次提示音的名稱 2.把定義好的提示音放到tone_player.…

數據庫的基本操作(視圖,存儲,觸發器)

1、視圖&#xff08;1&#xff09;什么是視圖視圖是虛擬表&#xff0c;是基于查詢結果的可視化表&#xff0c;視圖的作用有&#xff1a;①簡化復雜查詢 ②限制數據訪問 ③提供數據獨立性 ④匯總數據&#xff08;2&#xff09;怎么創建視圖創建視圖 CREATE OR REPLACE VIEW 視圖…

Pytest項目_day13(usefixture方法、params、ids)

usefixture 我們還可以使用mark.usefixtures來調用fixture 這樣相比在傳入參數處調用fixture&#xff0c;會更加直接 但是如果我們在一個測試用例中使用了多個usefixtures&#xff0c;那么測試用例會先調用離他最近的那個fixtureparams fixture中還可以帶參數 當我們用request.…

Rust 異步生態實戰:Tokio 調度、Pin/Unpin 與零拷貝 I/O

&#x1f31f; Hello&#xff0c;我是蔣星熠Jaxonic&#xff01; &#x1f308; 在浩瀚無垠的技術宇宙中&#xff0c;我是一名執著的星際旅人&#xff0c;用代碼繪制探索的軌跡。 &#x1f680; 每一個算法都是我點燃的推進器&#xff0c;每一行代碼都是我航行的星圖。 &#x…

通用 maven 私服 settings.xml 多源配置文件(多個倉庫優先級配置)

<?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/SETTINGS/1.0.…

AT F-Intervals 題解

簡化題意&#xff1a; 有 nnn 個區間&#xff0c;保證所有區間同時覆蓋一個點&#xff0c;每次將區間平移一個單位&#xff0c;問使得區間兩兩不交的最小操作數&#xff08;端點處可重疊&#xff09;。n≤5000。l,r≤231?1n\leq 5000。l,r\leq 2^{31}-1n≤5000。l,r≤231?1。…

《飛算Java AI:從安裝到需求轉實戰項目詳細教學》

前引&#xff1a;在當今快速發展的技術環境中&#xff0c;人工智能&#xff08;AI&#xff09;與編程語言的結合為開發者提供了前所未有的便利。飛算Java AI作為一款智能化編程工具&#xff0c;能夠顯著提升Java開發效率&#xff0c;減少重復性工作&#xff0c;并幫助開發者更專…

6深度學習Pytorch-神經網絡--過擬合欠擬合問題解決(Dropout、正則化、早停法、數據增強)、批量標準化

過擬合、欠擬合 在機器學習和深度學習中&#xff0c;過擬合&#xff08;Overfitting&#xff09;和欠擬合&#xff08;Underfitting&#xff09;是模型訓練過程中常見的兩種問題&#xff0c;直接影響模型的泛化能力&#xff08;即對未見過的數據的預測能力&#xff09;。 1. 欠…

新手向:Python編寫簡易翻譯工具

Python 編寫簡易翻譯工具&#xff1a;從零開始入門指南對于剛接觸編程的新手來說&#xff0c;編寫一個實用的工具是快速入門的好方法。本文將詳細介紹如何用 Python 編寫一個簡易的翻譯工具&#xff0c;幫助理解基礎編程概念和實際應用。無需任何編程基礎&#xff0c;只需按照步…