JavaWeb-Servlet總結及JSP

目錄

一、文件下載

二、ServletConfig對象

三、Web.xml文件使用總結

四、server.xml文件

五、JSP動態網頁技術

1.概念:

2.動態網頁:

3.特點:

4.JSP的訪問原理:

5.JSP的文檔說明:

6.jsp實際運行文件:

7.JSP文件運行原理:

8.JSP的語法和指令:

9.JSP的三種注釋:

10.JSP中寫Java代碼的區域:

11.JSP的靜態引入和動態引入

12.JSP內置對象:

六、EL表達式

七、jstl標簽庫學習


一、文件下載

1.文件下載的方式

(1)彈窗是使用附件的方式下載。

2.從服務器下載文件

(1)Content-Disposition是MIME協議的擴展,MIME協議指示MIME用戶代理如何顯示附加的文件。當Internet Explorer接收到頭時,它會激活文件下載對話框。

(2)設置響應頭:"Content-Disposition","attachment;filename="+filename。

3.案例:

package com.web.servlet;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;@WebServlet("/download")
public class DownLoadServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext sc = this.getServletContext();//獲取到當前服務器中要下載的文件的絕對路徑String realPath = sc.getRealPath("datas/1.jpg");System.out.println("realPath:" + realPath);//通過FileInputStream從服務器中讀取文件數據(用一根管道懟到服務器上)FileInputStream in = new FileInputStream(realPath);//把這個數據讀取之后響應給瀏覽器//從服務器中文件的路徑獲取文件的文件名File file = new File(realPath);String fileName = file.getName();//設置響應頭,以附件(彈窗)的方式下載resp.setHeader("Content-Disposition","attachment;filename=" + fileName);//相當于輸出流懟到瀏覽器上ServletOutputStream out = resp.getOutputStream();//把in流讀到的數據寫入到out流中byte[] bytes = new byte[1024];int len;while ((len = in.read(bytes)) != -1){out.write(bytes,0,len);}out.close();//緩沖流中有flush動作,在緩沖流中close()會先flush再closein.close();}
}

二、ServletConfig對象

1.ServletConfig對象可以獲取web.xml中的配置信息。

2.ServletConfig對象是Servlet的專屬配置對象,每個Servlet都單獨擁有一個ServletConfig對象,用來獲取web.xml中的局部配置信息。

3.可以再web.xml文件中的servlet標簽下面配置某一個Servlet的獨有的配置信息,通過ServletConfig對象獲取,再這里設置的值,一般是在SpringMVC框架中給servlet類中的屬性賦值。

4.獲取ServletConfig對象:

(1)this.getServletConfig()。

(2)返回的是一個ServletConfig類型。

5.獲取配置信息中的值:

(1)ServletConfig對象.getInitParameter("key");

6.ServletConfig和ServletContext的區別:

(1)ServletConfig是局部的,ServletContext是全局的。

(2)每個Servlet都有一個ServletConfig對象,而ServletContext對象在整個項目中只有一個。

(3)ServletConfig只能獲取局部的配置信息,而ServletContext可以獲取全局的配置信息。

7.案例:

(1)web.xml中的配置信息

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>MyServlet</servlet-name><servlet-class>com.web.servlet.MyServlet</servlet-class><!--這是對指定的servlet獨有的配置信息在這里設置的值,以后學習SpringMVC時會通過這種方式給servlet類中的屬性賦值--><init-param><param-name>city</param-name><param-value>beijing</param-value></init-param></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/my</url-pattern></servlet-mapping>
</web-app>

(2)MyServlet中的代碼

package com.web.servlet;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class MyServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletConfig servletConfig = this.getServletConfig();String city = servletConfig.getInitParameter("city");System.out.println("city:" + city);}
}

三、Web.xml文件使用總結

1.每個web項目下都具備web.xml文件,這個文件是我們程序員和tomcat服務器打交道的文件。

2.tomcat下還有一個web.xml文件,這個文件的作用是:存儲項目的相關的全局配置信息,保護Servlet。解耦一些數據對程序的依賴。

3.使用位置:

(1)每個web項目下的web.xml文件:每個web項目中。

(2)tomcat下的web.xml文件:Tomcat服務器中(在服務器目錄conf目錄中)。

4.區別:

(1)Web項目下的web.xml文件為局部配置,針對本項目的位置;tomcat下的web.xml文件為全局配置,配置公共信息,針對部署到tomcat中的所有項目有效。

(2)Web項目和Tomcat下都配置相同的信息,就近原則,取web項目下web.xml文件中的配置信息。

(3)內容(核心組件):

  • 全局上下文配置(全局配置參數)<context-param></context-param>。
  • Servlet配置
  • 過濾器配置
  • 監聽器配置

(4)加載順序:

  • web容器會按:ServletContext -> context-param -> listener -> filter -> servlet這個順序加載組件,這些元素可配置在web.xml文件中的任意位置

5.加載時機:Web項目下的web.xml和Tomcat下的web.xml都是在服務器啟動時加載的。

6.可以使用<welcome-file-list><welcome-file></welcome-file></welcome-file-list>標簽配置默認的訪問頁面。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><welcome-file-list><!--設置服務器啟動時默認訪問頁面--><welcome-file>welcome.html</welcome-file></welcome-file-list>
</web-app>

四、server.xml文件

1.可以在里面設置服務器的訪問端口。

2.可以在<Connector>標簽中更改服務器端口。

五、JSP動態網頁技術

1.概念:

(1)JSP全名為Java Server Pages,中文名叫java服務器頁面,其根本是一個簡化的Servlet設計,ta是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準。

2.動態網頁:

(1)JSP部署于網絡服務器上,可以響應客戶端發送的請求,并根據請求內容動態地生成HTML、XML或其他格式文檔的Web網頁,然后返回給請求者。JSP技術以Java語言作為腳本語言,為用戶的HTTP請求提供服務,并能與服務器上的其它Java程序共同處理復雜的業務需求。

3.特點:

(1)本質上還是Servlet。

(2)跨平臺,一次編寫到處運行。

(3)組件跨平臺。

(4)健壯性和安全性。

4.JSP的訪問原理:

(1)瀏覽器發起請求,請求JSP,請求被Tomcat服務器接收,執行JspServlet將請求的JSP文件轉義成為對應的java文件(也是Servlet),然后執行轉義好的java文件。

5.JSP的文檔說明:

(1)格式:<%@ page contentType="text/html;charset=UTF-8" language="java" %>。

(2)contentType:文檔響應的編碼格式。

(3)language:使用的語言。

6.jsp實際運行文件:

(1)C:\Users\用戶名\AppData\Local\JetBrains\IntelliJIdea2023.1\tomcat目錄下的文件。

7.JSP文件運行原理:

(1)可以在Tomcat的web.xml中找到一個jsp的文件映射,就是servlet中的訪問路徑,當你訪問*.jsp文件時會自動訪問一個JspServlet,這個servlet會把jsp文件轉譯成一個servlet文件,最終在tomcat中運行的是這個轉譯后的servlet文件而不是之前的jsp文件,所以從始至終tomcat服務器根本就沒有見過jsp這個文件。

8.JSP的語法和指令:

(1)page的作用:

  • 配置jsp文件的轉譯相關的參數。

(2)JSP的page指令介紹:

  • 案例:
  • <%@ page contentType="text/html;charset=UTF-8"language="java" pageEncoding="UTF-8" import="java.util.Date,java.io.FileInputStream" session="true" errorPage="error.jsp"
    %>
  • <%@ %>:包括jsp文件相關描述信息的標簽,可以含有各種屬性。
  • page屬性:描述當前jsp文件。
  • contentType:當前文件響應編碼等同于servlet中resp.setContentType。
  • language:表示當前jsp是用java語言作為腳本。
  • pageEncoding:表示當前jsp文件的編碼,同時也是設置響應編碼,與contentType有相同的效果,所以可以只寫pageEncoding。
  • import="java.util.Date":用來導入java類的,如果有多個使用逗號隔開。
  • session:設置當前jsp頁面是否支持session,默認不支持,session="true"開啟session的支持。
  • errorPage:如果當前jsp頁面有錯,就會跳轉到errorPage指定的頁面。

9.JSP的三種注釋:

(1)前端語言注釋:<!-- 會被轉譯,也會被發送,但是不會被瀏覽器執行 -->。

(2)java語言注釋://會被轉譯,但是不會被servlet執行。

(3)jsp注釋:<%-- 不會被轉譯 --%>。

10.JSP中寫Java代碼的區域:

(1)<% 寫在service方法中,局部的數據 %>

(2)<%! 全局的數據 %>

  • 注意:全局代碼塊聲明的代碼,需要使用局部代碼塊調用

(3)<%=變量或者方法名%>:腳本段,可以放在html標簽中,相當于resp.getWriter().write();,會直接把腳本段中的內容寫在前端頁面中。

(4)嵌套:可以在一個局部代碼塊中寫入一半的java代碼,在局部代碼下面加入一些html的內容,最后在html內容的下面使用局部代碼塊將剩余的java代碼寫完。

<%for(int i = 0;i < 10;i++){
%>
<i><%=i%></i>
<%}
%>

(5)案例:

<%--Created by IntelliJ IDEA.To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8"language="java" pageEncoding="UTF-8" import="java.util.Date,java.io.FileInputStream" session="true" errorPage="error.jsp"
%>
<html><head><title>$Title$</title></head><body><%--寫java代碼的區域,在service方法內:局部代碼塊--%><%
//    System.out.println(10/0);%><%--寫java代碼的區域,在service方法外:全局代碼塊--%><%!int a = 10;int b = 20;%><%System.out.println("a:" + a);System.out.println("a+b:" + (a + b));%>第一個jsp頁面<a href="https://www.baidu.com">百度</a><%--java代碼可以與html代碼混合寫--%><b><%=b%><br></b><%for(int i = 0;i < 10;i++){%><i><%=i%></i><br><%}%></body>
</html>

11.JSP的靜態引入和動態引入

(1)JSP的靜態引入:<%@include file="要引入的jsp文件的相對路徑"%>

  • 特點:會將引入的jsp文件和當前jsp文件轉譯成一個java(Servlet)文件使用。在網頁中也就顯示了合并后的顯示效果。
  • 注意:靜態引入的jsp文件不會單獨轉譯成java(Servlet)文件。當前文件和靜態引入的jsp文件中不能夠使用java代碼塊聲明同名變量。

(2)JSP的動態引入:<jsp:include page="要引入的jsp文件的相對路徑"></jsp:include>

  • 特點:會將引入的jsp文件單獨轉譯,在當前文件轉譯好的java文件中調用引入的jsp文件的轉譯文件。在網頁中顯示合并后的顯示效果。
  • 注意:動態引入允許文件中聲明同名變量。
  • 優點:降低jsp代碼的冗余,便于維護升級。

(3)案例:

<%--Created by IntelliJ IDEA.To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><%--靜態引入--%><%@include file="b.jsp"%><hr>我是a.jsp頁面<hr><%@include file="c.jsp"%><%--動態引入--%><jsp:include page="d.jsp"></jsp:include>
</body>
</html>

12.JSP內置對象:

(1)可以通過jsp的內置對象request獲取到后端Servlet中的request對象攜帶的數據。

(2)可以通過jsp的內置對象session獲取到后端Servlet中在session中設置的數據。

六、EL表達式

1.什么是EL表達式:

(1)全稱:Expression Language,一種寫法非常簡潔的表達式。語法簡單易懂,便于使用。表達式語言的靈感來自于ECMAScript和XPath表達式語言,可以從作用域中取數據。

2.EL表達式的作用:

(1)作用:讓jsp書寫起來更加的方便。簡化在jsp中獲取作用域或者請求數據的寫法。也會搭配jstl來進行使用。

3.使用EL表達式:

(1)語法結構:$(expression),提供.和[]兩種運算符來存取數據。

4.使用EL表達式獲取作用域數據:

(1)取的是pageContext、request、session、application四個對象中的數據,其他數據一概不理會。

(2)EL表達式如果找到了數據則獲取返回,如果沒有找到則什么也不做,也不報錯。

5.EL表達式是為了簡化咋們的jsp代碼,具體一點就是為了簡化在jsp里面寫的那些java代碼

(1)格式:${表達式}。

6.如果取存在作用域中的對象里面的屬性,那么可以直接使用${key. 屬性名}來獲取

7.如果取存在作用域中List集合里面的數據,可以通過下標來取:${key[數據對應的下標,從0開始]}

(1)注意:如果集合中裝的是對象,那么可以通過${key[下標].屬性名}來獲取。

8.如果取map集合中的數據,可以通過${session的key.map集合的key}來獲取map集合中的數據

(1)注意:map集合的key不需要加雙引號。

9.作用域對象有:

(1)request:一次請求中共享數據。

(2)session:同一用戶下共享數據。

(3)application:不同用戶下共享數據,整個工程中只有一個。

(4)pageContext:jsp中特有的,在當前頁面中共享數據。

10.案例:

<%--Created by IntelliJ IDEA.To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.web.pojo.T_User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<html>
<head><title>Title</title>
</head>
<body><%request.setAttribute("city","北京");%><%--取作用域中的數據--%>${city}<br><%session.setAttribute("city2","天津");T_User user = new T_User();user.setUname("小麗");user.setPwd("123");session.setAttribute("user",user);ArrayList<String> list = new ArrayList<>();list.add("上海");list.add("廣州");list.add("南京");session.setAttribute("citys",list);HashMap<String,Integer> map = new HashMap<>();map.put("a",20);map.put("b",22);map.put("c",23);session.setAttribute("m",map);ArrayList<T_User> users = new ArrayList<>();users.add(new T_User("靜靜","123"));users.add(new T_User("小麗","333"));users.add(new T_User("海王","321"));session.setAttribute("users",users);%>${city2}<br>${user.uname}--${user.pwd}<br>${citys[0]}--${citys[1]}--${citys[2]}<br>${m.a}--${m.b}--${m.c}<br>${users.get(0).uname}--${users.get(0).pwd}${users.get(1).uname}--${users.get(1).pwd}${users.get(2).uname}--${users.get(2).pwd}<hr>${users[0].uname}--${users[0].pwd}<br>${users[1].uname}--${users[1].pwd}<br>${users[2].uname}--${users[2].pwd}<br><h5>作用域對象有:request,session,application(ServletContext),pageContext</h5>在四種作用域中放入相同的數據<%
//        request.setAttribute("a","request");session.setAttribute("a","session");application.setAttribute("a","application");
//        pageContext.setAttribute("a","pageContext");%><h5>測試優先順序:application>request>session>application</h5>${a}
</body>
</html>

七、jstl標簽庫學習

1.jstl提供了一些標簽,可以在jsp頁面中遍歷取作用域中的數據。

2.在jsp中導入jstl的包:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

3.使用<c:forEach items="${作用域中存儲的要遍歷的集合的key}" var="遍歷出來的單個值的變量名">${"遍歷出來的單個值的變量名"}</c:forEach>

4.案例:

<%--Created by IntelliJ IDEA.To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" import="com.web.pojo.T_User,java.util.ArrayList" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html>
<head><title>Title</title>
</head>
<body><%ArrayList<T_User> users = new ArrayList<>();users.add(new T_User("靜靜","123"));users.add(new T_User("小麗","333"));users.add(new T_User("海王","321"));session.setAttribute("users",users);%><h3>jstl提供了一些標簽,可以在jsp頁面中--->遍歷取作用域中的數據</h3><c:forEach items="${users}" var="u">${u.uname}--${u.pwd}<br></c:forEach>
</body>
</html>

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

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

相關文章

DDIM和DDPM之 間的區別與聯系

核心關系概述 首先&#xff0c;要理解DDIM并不是一個全新的模型&#xff0c;而是DDPM的一個精巧的重新參數化和擴展。它們使用完全相同的訓練目標和方法&#xff0c;因此你可以用一個訓練好的DDPM模型直接來運行DDIM的采樣算法&#xff0c;而無需重新訓練。 DDIM的核心貢獻是&a…

c++---map和set

這里再提二叉樹&#xff08;二叉搜索樹&#xff09;&#xff0c;是為了后面講解map和set做準備。 一、二叉搜索樹 二叉搜索樹又稱二叉排序樹&#xff0c;它或者是一棵空樹&#xff0c;或者是具有以下性質的二叉樹。 若它的左子樹不為空&#xff0c;則左子樹上所有節點的值都…

windows下,podman遷移鏡像文件位置

docker-desktop有自帶的鏡像文件位置遷移功能&#xff0c;但podman-desktop還沒有&#xff0c;所以只能自己操作wsl導入導出來實現# 1.一定要先停止當前machine podman machine stop# 2. 導出當前 machine&#xff08;會生成 tar 鏡像&#xff09; wsl --export podman-machine…

Champ-基于3D的人物圖像到動畫視頻生成框架

本文轉載自&#xff1a;https://www.hello123.com/champ ** 一、&#x1f916; Champ 是什么&#xff1f; 阿里 南大 復旦聯手打造的虛擬人動作黑科技&#xff01;Champ 可不是普通動畫工具&#xff0c;它能把你隨手拍的小視頻變成專業級 3D 動畫 —— 無論跳舞、打拳還是走…

Thingsboard 3.4 源碼運行 Mac Mini

拉取源碼 git clone https://github.com/thingsboard/thingsboard.gitjdk11 java -version java version "11.0.27" 2025-04-15 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.278-LTS-232) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.278-LTS-23…

【AI大模型面試寶典60題】1-5

目錄 Q1:僅編碼器(BERT 類)、僅解碼器(GPT 類)和完整的編碼器-解碼器架構各有什么優缺點? 1. 編碼器架構 (Encoder-only) - 代表:BERT系列 2. 解碼器架構 (Decoder-only) - 代表:GPT系列 3. 編碼器-解碼器架構 (Encoder-Decoder) - 代表:T5、BART 升華與總結 (總…

macOS中找不到鑰匙串訪問

如果在macOS中找不到鑰匙串訪問&#xff0c;請操作如下命令&#xff1a; security list-keychains可以看到類似&#xff1a; “/Library/Keychains/System.keychain” 然后執行&#xff1a; open /Library/Keychains/System.keychain然后可以將應用保留在程序塢中保留。

UCOSIII移植——學習筆記1

本文是筆者在學習 正點原子官方 的《【正點原子】手把手教你學UCOS-III實時操作系統》系列視頻時整理的筆記。 視頻講解清晰透徹&#xff0c;非常感謝UP主的無私奉獻&#xff01;原課程鏈接如下&#xff1a; &#x1f449; B站視頻鏈接&#xff1a;【正點原子】手把手教你學UCO…

SpringBootCodeGenerator使用JSqlParser解析DDL CREATE SQL 語句

&#x1f9e0; 使用 JSqlParser 解析 CREATE TABLE SQL 語句詳解在數據庫開發中&#xff0c;我們常常需要從 SQL 中提取表結構信息&#xff0c;比如字段名、類型、注釋等。相比使用正則表達式&#xff0c;JSqlParser 提供了更可靠的方式來解析 SQL 語句&#xff0c;尤其適用于復…

css3新增-網格Grid布局

目錄flex彈性布局Gird布局開啟網格布局定義網格中的行和列長度值百分比值新單位fr關鍵字函數minmax(min, max)函數-repeatauto-fill vs auto-fit舉例說明grid-template-areasgapgrid-auto-columns和grid-auto-rowsjustify-contentalign-contentjustify-contentalign-contentjus…

最新最強新太極工具3.6 支持Windows和不支持mac電腦,支持免改碼,和改碼,支持12—18系統

溫馨提示&#xff1a;文末有資源獲取方式最新最強太極工具3.6支持Windows和Mac計算機&#xff0c;支持無代碼更改和代碼更改&#xff0c;支持12-18個系統 支持A7-A11芯片、Apple 5s x、iPad A7至A11芯片&#xff0c;支持所有者鎖定、激活鎖定、無法激活&#xff08;密碼界面和禁…

深入淺出 C++20:新特性與實踐

C20 是 C 編程語言的一次重要更新&#xff0c;引入了許多新特性和改進&#xff0c;旨在提升代碼的簡潔性、安全性和性能。本文將詳細介紹 C20 的一些核心特性&#xff0c;并通過示例代碼幫助讀者理解這些特性的應用場景。C20 新特性總結 以下是 C20 的主要新特性及其簡要描述&a…

CSS 屬性概述

CSS 屬性概述 CSS 屬性用于控制 HTML 元素的樣式和行為&#xff0c;包括布局、顏色、字體、動畫等。以下是常用的 CSS 屬性分類及示例&#xff1a; 布局相關屬性 display: 控制元素的顯示方式&#xff0c;如 block、inline、flex、grid。position: 定義元素的定位方式&#…

--- 統一請求入口 Gateway ---

spring cloud gateway 官方文檔 Spring Cloud Gateway 中文文檔 什么是api網關 對于微服務的每個接口&#xff0c;我們都需要校驗請求的權限是否足夠&#xff0c;而微服務把項目細化除了許多個接口&#xff0c;若這些接口都要對服務進行權限校驗的話&#xff0c;那么無疑加重…

返利app的消息隊列架構:基于RabbitMQ的異步通信與解耦實踐

返利app的消息隊列架構&#xff1a;基于RabbitMQ的異步通信與解耦實踐 大家好&#xff0c;我是阿可&#xff0c;微賺淘客系統及省賺客APP創始人&#xff0c;是個冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在返利app的業務流程中&#xff0c;用戶下單、返利計算…

Vue3 響應式失效 debug:Proxy 陷阱導致數據更新異常的深度排查

人們眼中的天才之所以卓越非凡&#xff0c;并非天資超人一等而是付出了持續不斷的努力。1萬小時的錘煉是任何人從平凡變成超凡的必要條件。———— 馬爾科姆格拉德威爾 &#x1f31f; Hello&#xff0c;我是Xxtaoaooo&#xff01; &#x1f308; “代碼是邏輯的詩篇&#xff0…

【貪心算法】day10

&#x1f4dd;前言說明&#xff1a; 本專欄主要記錄本人的貪心算法學習以及LeetCode刷題記錄&#xff0c;按專題劃分每題主要記錄&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代碼&#xff1b;&#xff08;2&#xff09;優質解法 優質代碼&#xff1b;&#xff…

LeetCode算法日記 - Day 42: 島嶼數量、島嶼的最大面積

目錄 1. 島嶼數量 1.1 題目解析 1.2 解法 1.3 代碼實現 2. 島嶼的最大面積 2.1 題目解析 2.2 解法 2.3 代碼實現 1. 島嶼數量 https://leetcode.cn/problems/number-of-islands/ 給你一個由 1&#xff08;陸地&#xff09;和 0&#xff08;水&#xff09;組成的的二維…

短波紅外相機在機器視覺檢測方向的應用

短波紅外相機在機器視覺檢測方向的應用短波紅外相機&#xff1a;機器視覺的“低成本突破者”一、打破成本困局&#xff1a;短波紅外的“平民化”革新二、核心技術&#xff1a;有機材料的“硬核創新”1. 材料革命&#xff1a;有機感光層的優勢2. 工藝兼容&#xff1a;嫁接成熟CM…

【數據結構與算法】圖 Floyd算法

相關題目&#xff1a; 1334. 閾值距離內鄰居最少的城市 - 力扣&#xff08;LeetCode&#xff09; 資料 &#xff1a; Floyd算法原理及公式推導 - 知乎 Floyd 算法是一種經典的動態規劃算法&#xff0c;用與求解圖中所有頂點之間的最短短路路徑。它由Robert Floyd 于1962…