Java如何實現一個安全的登錄功能?

安全登錄系統完整教程

📋 目錄

  1. 項目概述
  2. 技術棧
  3. 安全特性
  4. 項目結構
  5. 核心組件詳解
  6. 安全實現原理
  7. 部署和運行
  8. 安全最佳實踐
  9. 常見問題解答
  10. 進階擴展

🎯 項目概述

這是一個基于Spring Boot和Spring Security的完整安全登錄系統,專為初學者設計,展示了如何實現一個安全、可靠的用戶認證系統。

主要功能

  • ? 用戶注冊和登錄
  • ? 密碼安全加密存儲
  • ? 會話管理和自動登出
  • ? CSRF攻擊防護
  • ? 點擊劫持防護
  • ? 響應式Web界面
  • ? RESTful API接口

測試賬戶

  • 用戶名: admin
  • 密碼: admin123

🛠 技術棧

后端技術

  • Spring Boot 3.5.5 - 主框架
  • Spring Security 6.5.3 - 安全框架(注意:6.x版本API有重大變化)
  • Thymeleaf - 模板引擎
  • BCrypt - 密碼加密算法(強度12)
  • Maven - 依賴管理
  • Java 17+ - 運行環境(Spring Boot 3.x要求)

前端技術

  • HTML5 - 頁面結構
  • CSS3 - 樣式設計
  • Bootstrap 5 - UI框架
  • Font Awesome - 圖標庫
  • JavaScript - 交互邏輯

🔒 安全特性

1. 密碼安全

  • BCrypt加密: 使用強度為12的BCrypt算法
  • 隨機鹽值: 每次加密生成不同的鹽值
  • 密碼強度檢查: 前端實時驗證密碼復雜度

2. 會話安全

  • 單點登錄: 每個用戶只能有一個活躍會話
  • 自動超時: 會話自動過期機制
  • 安全登出: 完全清除會話和認證信息

3. 攻擊防護

  • CSRF保護: 防止跨站請求偽造
  • 點擊劫持防護: 防止頁面被嵌入到其他網站
  • XSS防護: 輸入驗證和輸出轉義

4. 傳輸安全

  • HTTPS強制: 強制使用安全傳輸協議
  • 安全頭設置: 配置各種安全HTTP頭

📁 項目結構

src/
├── main/
│   ├── java/com/example/demo/
│   │   ├── config/
│   │   │   └── SecurityConfig.java          # Spring Security配置
│   │   ├── controller/
│   │   │   ├── LoginController.java         # 登錄控制器
│   │   │   └── ApiController.java           # API控制器
│   │   ├── model/
│   │   │   └── User.java                    # 用戶實體類
│   │   ├── service/
│   │   │   ├── PasswordService.java         # 密碼服務
│   │   │   └── UserService.java             # 用戶服務
│   │   └── Demo6Application.java            # 主應用類
│   └── resources/
│       ├── templates/                       # Thymeleaf模板
│       │   ├── login.html                   # 登錄頁面
│       │   ├── register.html                # 注冊頁面
│       │   ├── dashboard.html               # 儀表板
│       │   └── profile.html                 # 個人資料
│       └── application.properties           # 應用配置
├── test/                                    # 測試代碼
└── pom.xml                                  # Maven配置

🔧 核心組件詳解

1. 密碼服務 (PasswordService)

@Service
public class PasswordService {private final PasswordEncoder passwordEncoder;public PasswordService() {// 使用BCrypt算法,強度為12this.passwordEncoder = new BCryptPasswordEncoder(12);}// 加密密碼public String encodePassword(String rawPassword) {return passwordEncoder.encode(rawPassword);}// 驗證密碼public boolean matches(String rawPassword, String encodedPassword) {return passwordEncoder.matches(rawPassword, encodedPassword);}
}

安全要點:

  • BCrypt強度12是推薦值,平衡了安全性和性能
  • 每次加密都會生成不同的鹽值
  • 驗證時自動提取鹽值進行比較

2. 用戶服務 (UserService)

@Service
public class UserService {@Autowiredprivate PasswordService passwordService;// 使用ConcurrentHashMap保證線程安全private final Map<String, User> users = new ConcurrentHashMap<>();public UserService() {// 構造函數中不要使用@Autowired的依賴!// 使用@PostConstruct確保依賴注入完成后再初始化}/*** 初始化測試用戶* 使用@PostConstruct確保在所有依賴注入完成后執行*/@PostConstructprivate void initializeTestUser() {User testUser = new User();testUser.setId(1L);testUser.setUsername("admin");testUser.setEmail("admin@example.com");testUser.setEnabled(true);testUser.setCreatedAt(LocalDateTime.now());// 現在可以安全使用passwordService了testUser.setPassword(passwordService.encodePassword("admin123"));users.put(testUser.getUsername(), testUser);System.out.println("測試用戶已創建: admin / admin123");}// 驗證用戶密碼public boolean validatePassword(String username, String rawPassword) {User user = findByUsername(username);if (user == null || !user.isEnabled()) {return false;}return passwordService.matches(rawPassword, user.getPassword());}
}

安全要點:

  • 使用線程安全的ConcurrentHashMap
  • 檢查用戶是否存在和是否啟用
  • 密碼驗證失敗不泄露用戶存在信息

3. Spring Security配置 (SecurityConfig)

@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http// 配置認證提供者.authenticationProvider(authenticationProvider())// 配置訪問權限.authorizeHttpRequests(authz -> authz// 允許所有人訪問登錄頁面和靜態資源.requestMatchers("/login", "/register", "/css/**", "/js/**", "/images/**", "/favicon.ico").permitAll()// 其他所有請求都需要認證.anyRequest().authenticated())// 配置表單登錄 - 重要:登錄頁面和處理URL要分開!.formLogin(form -> form.loginPage("/login")                    // 顯示登錄頁面的URL (GET).loginProcessingUrl("/perform_login")   // 處理登錄請求的URL (POST).usernameParameter("username")          // 用戶名參數名.passwordParameter("password")          // 密碼參數名.successHandler(successHandler())       // 登錄成功處理器.failureHandler(failureHandler())       // 登錄失敗處理器.permitAll())// 配置登出.logout(logout -> logout.logoutUrl("/logout").logoutSuccessUrl("/login?logout=true").invalidateHttpSession(true)            // 使HTTP會話失效.clearAuthentication(true)              // 清除認證信息.deleteCookies("JSESSIONID")            // 刪除會話Cookie.permitAll())// 配置會話管理.sessionManagement(session -> session.maximumSessions(1)                     // 每個用戶最多一個會話.maxSessionsPreventsLogin(false)        // 不阻止新登錄,而是踢掉舊會話.sessionRegistry(sessionRegistry()))// 啟用CSRF保護.csrf(csrf -> csrf.ignoringRequestMatchers("/api/**")     // API請求忽略CSRF)// 配置HTTP安全頭 - 使用新的API.headers(headers -> headers.frameOptions(frameOptions -> frameOptions.deny())  // 防止點擊劫持.contentTypeOptions(contentTypeOptions -> {})       // 防止MIME類型嗅探.httpStrictTransportSecurity(hstsConfig -> hstsConfig.maxAgeInSeconds(31536000)          // HSTS有效期1年.includeSubDomains(true)            // 包含子域名));return http.build();}
}

安全要點:

  • 配置訪問權限規則
  • 自定義登錄成功/失敗處理器
  • 啟用CSRF保護
  • 設置安全HTTP頭

🔐 安全實現原理

1. 密碼加密流程

用戶輸入密碼
前端驗證
發送到后端
BCrypt加密
生成隨機鹽值
存儲加密密碼
用戶登錄
輸入密碼
BCrypt驗證
提取鹽值
比較哈希值
返回驗證結果

2. 會話管理流程

用戶登錄
創建會話
生成JSESSIONID
存儲到服務器
返回Cookie
后續請求
攜帶Cookie
驗證會話
會話有效?
允許訪問
重定向登錄
用戶登出
清除會話
刪除Cookie
重定向登錄頁

3. CSRF防護機制

用戶訪問頁面
生成CSRF Token
嵌入表單
用戶提交表單
驗證CSRF Token
Token有效?
處理請求
拒絕請求

🚀 部署和運行

1. 環境要求

  • Java 17+
  • Maven 3.6+
  • 現代瀏覽器

2. 運行步驟

# 1. 克隆項目
git clone <項目地址>
cd demo6# 2. 編譯項目
mvn clean compile# 3. 運行應用
mvn spring-boot:run# 或者使用Maven Wrapper(推薦)
./mvnw spring-boot:run        # Linux/Mac
./mvnw.cmd spring-boot:run    # Windows

?? 新手注意事項

  1. 確保Java版本: Spring Boot 3.x需要Java 17+

    java -version  # 檢查Java版本
    
  2. 確保Maven可用:

    mvn -version   # 檢查Maven版本
    
  3. 啟動成功標志: 看到以下信息表示啟動成功

    Started Demo6Application in 2.xxx seconds
    
  4. 端口占用: 如果8080端口被占用,可以修改application.properties:

    server.port=8081
    

3. 訪問應用

  • 應用地址: http://localhost:8080
  • 登錄頁面: http://localhost:8080/login
  • 注冊頁面: http://localhost:8080/register

4. 測試API

# 獲取當前用戶信息
curl -u admin:admin123 http://localhost:8080/api/user/current# 健康檢查
curl http://localhost:8080/api/health

🛡 安全評估和改進建議

🔍 當前方案安全性分析

? 安全優勢
  • BCrypt密碼加密(強度12)- 業界標準
  • CSRF攻擊防護
  • 會話管理和單點登錄
  • 基礎的HTTP安全頭設置
?? 主要安全風險
  1. 數據存儲風險(高風險)

    • 使用內存存儲,數據易丟失
    • 無法水平擴展
    • 缺乏數據備份
  2. 傳輸安全風險(高風險)

    • 使用HTTP傳輸,密碼可被截獲
    • 缺乏HTTPS強制跳轉
  3. 訪問控制風險(中風險)

    • 無登錄失敗次數限制
    • 無賬戶鎖定機制
    • 容易遭受暴力破解
  4. 審計和監控風險(中風險)

    • 缺乏登錄日志記錄
    • 無異常行為檢測
    • 難以追蹤安全事件

🚀 安全改進方案

1. 立即改進(高優先級)

A. 啟用HTTPS

# application.properties
server.port=8443
server.ssl.enabled=true
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=your-password
server.ssl.key-store-type=PKCS12

B. 數據庫持久化

// 替換內存存儲
@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(unique = true, nullable = false)private String username;// ...
}

C. 登錄限制

@Service
public class LoginAttemptService {private final Map<String, Integer> attemptsCache = new ConcurrentHashMap<>();public void loginFailed(String username) {int attempts = attemptsCache.getOrDefault(username, 0);attemptsCache.put(username, attempts + 1);}public boolean isBlocked(String username) {return attemptsCache.getOrDefault(username, 0) >= 5;}
}
2. 中期改進

A. 輸入驗證增強

@Component
public class InputValidator {public boolean isValidEmail(String email) {String emailRegex = "^[A-Za-z0-9+_.-]+@([A-Za-z0-9.-]+\\.[A-Za-z]{2,})$";return email.matches(emailRegex);}public boolean isStrongPassword(String password) {// 至少8位,包含大小寫、數字、特殊字符return password.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$");}
}

B. 審計日志

@Entity
public class SecurityLog {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String username;private String action; // LOGIN_SUCCESS, LOGIN_FAILED, LOGOUTprivate String ipAddress;private LocalDateTime timestamp;private String userAgent;
}
3. 長期改進

A. 雙因素認證

@Service
public class TwoFactorService {public String generateQRCode(String username) {String secret = generateSecret();return QRCodeGenerator.generate(username, secret);}public boolean verifyTOTP(String secret, String code) {return TOTPGenerator.verify(secret, code);}
}

B. 密碼策略

@Service
public class PasswordPolicyService {public void enforcePasswordPolicy(User user, String newPassword) {// 檢查密碼歷史// 強制定期更換// 檢查常見密碼字典}
}

🛡 安全最佳實踐

1. 密碼安全

  • ? 使用強密碼策略
  • ? 密碼長度至少8位
  • ? 包含大小寫字母、數字、特殊字符
  • ? 定期更換密碼
  • ? 不要在代碼中硬編碼密碼
  • ? 不要使用弱密碼

2. 會話安全

  • ? 使用HTTPS傳輸
  • ? 設置合理的會話超時時間
  • ? 登出時清除所有會話信息
  • ? 實現單點登錄
  • ? 不要在URL中傳遞敏感信息
  • ? 不要使用可預測的會話ID

3. 輸入驗證

  • ? 前端和后端雙重驗證
  • ? 使用白名單驗證
  • ? 轉義特殊字符
  • ? 限制輸入長度
  • ? 不要信任用戶輸入
  • ? 不要直接輸出用戶輸入

4. 錯誤處理

  • ? 記錄安全相關錯誤
  • ? 不泄露敏感信息
  • ? 使用通用錯誤消息
  • ? 不要在錯誤中暴露系統信息
  • ? 不要記錄密碼等敏感信息

? 常見問題解答

Q1: 為什么登錄后頁面只是刷新,沒有跳轉?

A: 這是最常見的新手問題!原因通常是:

  • 錯誤做法: 直接打開HTML文件(file:// 協議)
  • 正確做法: 通過Spring Boot應用訪問(http://localhost:8080)
  • 解決方案:
    1. 啟動Spring Boot應用:mvn spring-boot:run
    2. 在瀏覽器訪問:http://localhost:8080/login
    3. 不要雙擊打開HTML文件!

Q2: 為什么登錄頁面和處理URL要分開?

A: 這是Spring Security的重要概念:

  • /login (GET請求) - 顯示登錄頁面
  • /perform_login (POST請求) - 處理登錄邏輯
  • 如果兩個URL相同會導致沖突,登錄失敗
  • HTML表單的action必須指向處理URL

Q3: 為什么要使用BCrypt而不是MD5或SHA?

A: BCrypt是專門為密碼哈希設計的算法,具有以下優勢:

  • 內置鹽值生成,防止彩虹表攻擊
  • 可調節計算成本,適應硬件發展
  • 抗暴力破解能力強
  • MD5和SHA是快速哈希算法,不適合密碼存儲

Q2: 如何選擇合適的BCrypt強度?

A: 強度選擇建議:

  • 開發環境:8-10
  • 生產環境:10-12
  • 高安全要求:12-14
  • 強度越高越安全,但計算時間也越長

Q3: 為什么需要CSRF保護?

A: CSRF攻擊原理:

  • 攻擊者誘導用戶訪問惡意網站
  • 惡意網站向目標網站發送請求
  • 瀏覽器自動攜帶用戶的認證Cookie
  • 目標網站誤認為是用戶操作

Q4: 啟動時出現"Cannot invoke passwordService.encodePassword because this.passwordService is null"錯誤?

A: 這是依賴注入時機問題:

  • 原因: 在構造函數中使用了@Autowired的依賴
  • 錯誤做法:
    public UserService() {// 此時passwordService還未注入initializeTestUser(); // 會報錯
    }
    
  • 正確做法: 使用@PostConstruct注解
    @PostConstruct
    private void initializeTestUser() {// 此時所有依賴都已注入完成
    }
    

Q5: 如何防止會話劫持?

A: 防護措施:

  • 使用HTTPS傳輸
  • 設置HttpOnly Cookie
  • 實現會話超時
  • 使用安全的會話ID生成算法

Q6: 出現"程序包javax.servlet.http不存在"編譯錯誤?

A: 這是Spring Boot 3.x的包遷移問題:

  • 原因: Spring Boot 3.x使用Jakarta EE,不再使用Java EE
  • 錯誤做法: import javax.servlet.http.HttpServletRequest;
  • 正確做法: import jakarta.servlet.http.HttpServletRequest;
  • 解決方案: 將所有javax.servlet改為jakarta.servlet

Q7: 前端驗證是否足夠?

A: 前端驗證只是第一道防線:

  • 可以被繞過或禁用
  • 主要用于用戶體驗
  • 后端驗證是必須的
  • 兩者結合使用最佳

🚀 進階擴展

1. 數據庫集成

// 使用JPA替換內存存儲
@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(unique = true, nullable = false)private String username;@Column(nullable = false)private String password;// 其他字段...
}

2. 角色權限管理

// 添加角色和權限
@Entity
public class Role {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;@ManyToMany(mappedBy = "roles")private Set<User> users;
}

3. 雙因素認證

// 集成TOTP雙因素認證
@Service
public class TwoFactorService {public String generateSecretKey() {return new GoogleAuthenticator().createCredentials().getKey();}public boolean verifyCode(String secret, int code) {return new GoogleAuthenticator().authorize(secret, code);}
}

4. 登錄日志

// 記錄登錄活動
@Entity
public class LoginLog {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String username;private String ipAddress;private LocalDateTime loginTime;private boolean success;private String userAgent;
}

5. 密碼重置功能

// 實現密碼重置
@Service
public class PasswordResetService {public void sendResetEmail(String email) {String token = generateResetToken();// 發送郵件}public void resetPassword(String token, String newPassword) {// 驗證token并重置密碼}
}

📚 學習資源

官方文檔

  • Spring Security官方文檔
  • Spring Boot官方文檔
  • BCrypt算法說明

安全標準

  • OWASP Top 10
  • NIST密碼指南
  • RFC 7519 JWT標準

推薦書籍

  • 《Spring Security實戰》
  • 《Web應用安全權威指南》
  • 《密碼學與網絡安全》

🎉 總結

這個安全登錄系統展示了現代Web應用安全的核心概念和最佳實踐:

  1. 密碼安全: 使用BCrypt加密存儲
  2. 會話管理: 安全的會話創建和銷毀
  3. 攻擊防護: CSRF、XSS、點擊劫持防護
  4. 傳輸安全: HTTPS和安全頭設置
  5. 用戶體驗: 響應式界面和友好提示

通過學習這個項目,你將掌握:

  • Spring Security的基本配置和使用
  • 密碼加密和驗證的最佳實踐
  • Web安全攻擊的防護方法
  • 前后端安全協作的實現

記住:安全是一個持續的過程,不是一次性的配置。隨著威脅的不斷演變,我們需要持續學習和改進我們的安全措施。


📞 技術支持

如果你在學習過程中遇到問題,可以:

  1. 查看項目代碼注釋
  2. 閱讀Spring Security官方文檔
  3. 參考OWASP安全指南
  4. 在開發者社區尋求幫助

祝你學習愉快! 🎓

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

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

相關文章

星辰誕愿——生日快樂

前言 今天這篇博客并非技術文章&#xff0c;而是慶祝我可愛的妹妹18歲生日以及介紹我半年以來的學習經歷 祝生網站&#xff1a;星辰誕愿(用戶列表里第一位就是我妹妹&#xff0c;希望大家能獻上自己的祝福&#xff0c;能分享轉發更好&#xff0c;我在此感謝大家。如果使用手機&…

基于STM32單片機的智能糧倉溫濕度檢測藍牙手機APP設計

基于STM32單片機的智能糧倉溫濕度檢測藍牙手機APP設計 1 系統功能介紹 本系統是一款基于STM32單片機的智能糧倉環境監測與控制裝置&#xff0c;核心目標是通過傳感器實時采集糧倉內的溫度和濕度信息&#xff0c;并結合藍牙通信模塊將數據傳輸至手機端&#xff0c;實現對糧倉環境…

簡單視頻轉換器 avi轉mp4

直接上代碼package com.example.videoconverter;import ws.schild.jave.Encoder; import ws.schild.jave.EncoderException; import ws.schild.jave.MultimediaObject; import ws.schild.jave.encode.AudioAttributes; import ws.schild.jave.encode.EncodingAttributes; impor…

Kafka 與 RocketMQ 核心概念與架構對比

Kafka 與 RocketMQ 核心概念與架構對比DeepSeek生成&#xff0c;便于記憶大概邏輯核心概念對比圖 #mermaid-svg-dEbo1XpAjfzOjvUW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dEbo1XpAjfzOjvUW .error-icon{fill…

30分鐘深度壓測cuBLAS:從FP64到INT8全精度性能剖析

在深度學習和高性能計算領域&#xff0c;GPU的矩陣運算性能是衡量系統算力的核心指標之一。NVIDIA的cuBLAS庫作為CUDA平臺上最基礎的線性代數計算庫&#xff0c;其性能表現直接影響著上層應用的運行效率。本文將詳細介紹如何使用cublasmatmulbench工具對多GPU進行全面的性能基準…

超越模仿:探尋智能的本源

引言&#xff1a;超越模仿&#xff0c;探尋智能的本源近年來&#xff0c;以大語言模型&#xff08;LLM&#xff09;為代表的自然語言處理&#xff08;NLP&#xff09;技術&#xff0c;在模仿人類語言生成方面取得了令人矚目的成就。從流暢的對話到精煉的文本摘要&#xff0c;機…

ROS/ROS2課程筆記00-大綱-25-26-1

大綱 AI版 以下是基于第四代高校課程核心理念設計的《ROS2機器人程序設計&#xff08;ROS2 Jazzy版&#xff09;》課程大綱&#xff0c;突出智能互聯、跨學科融合、終身學習等特征&#xff0c;并融入技術賦能、生態重塑、素養導向等要求&#xff1a; 課程名稱&#xff1a;ROS…

Linux內核進程管理子系統有什么第四十六回 —— 進程主結構詳解(42)

接前一篇文章&#xff1a;Linux內核進程管理子系統有什么第四十五回 —— 進程主結構詳解&#xff08;41&#xff09; 本文內容參考&#xff1a; Linux內核進程管理專題報告_linux rseq-CSDN博客 《趣談Linux操作系統 核心原理篇&#xff1a;第三部分 進程管理》—— 劉超 《…

Linux網絡連接不上?NetworkManager提示“device not managed“!

#操作系統 #Linux #NetworkManager適用環境kylin v10Centos 8Redhat 8一、故障現象在CentOS/RHEL(同樣適用于kylin v10&#xff09;系統中&#xff0c;管理員執行 nmcli connection up ens160 命令嘗試激活名為 ens160 的網絡連接時&#xff0c;遇到以下錯誤&#xff1a;[roo…

【系統分析師】第2章-基礎知識:數學與工程基礎(核心總結)

更多內容請見: 備考系統分析師-專欄介紹和目錄 文章目錄 一、數學統計基礎 1.1 概率論基礎 1.2 數理統計基礎 1.3 常用統計分析方法 二、圖論應用 2.1 基本概念 2.2 核心算法與應用 三、預測與決策 3.1 預測方法 3.2 決策方法 四、數學建模 4.1 建模過程 4.2 常用模型類型 五、…

StrUtil.isBlank()

這段代碼是一個條件判斷&#xff0c;用于檢查變量 shopJson 是否為空或空白&#xff0c;如果是&#xff0c;就直接返回 null。我們來逐句講解&#xff1a;原始代碼&#xff1a; if(StrUtil.isBlank(shopJson)) {// 3.存在&#xff0c;直接返回return null; }逐句解釋&#xff1…

mysql 回表查詢(二次查詢,如何檢查,如何規避)

h5打開以查看 “回表查詢”通常發生在使用二級索引&#xff08;Secondary Index&#xff09;的查詢中。當查詢所需的數據列并不全部包含在二級索引中時&#xff0c;即使使用了索引&#xff0c;MySQL 也需要根據索引記錄中的主鍵值&#xff0c;回到聚簇索引&#xff08;Cluster…

深度學習(二):神經元與神經網絡

在人工智能的浪潮中&#xff0c;神經網絡&#xff08;Neural Networks&#xff09;無疑是驅動核心技術的引擎&#xff0c;它賦予了計算機前所未有的學習和識別能力。而這一切的起點&#xff0c;是受到生物大腦中基本單元——神經元&#xff08;Neurons&#xff09;的深刻啟發。…

JavaScript 行為型設計模式詳解

1. 觀察者模式1.1. 使用場景觀察者模式用于對象間的一對多依賴關系&#xff0c;當一個對象的狀態發生變化時&#xff0c;所有依賴于它的對象都能收到通知并自動更新。常用于事件處理、通知系統。在前端中&#xff0c;觀察者模式用于實現事件監聽、數據綁定等功能。1.2. 代碼實現…

指令查找表LUT

本文整理自22. FlexSPI—讀寫外部SPI NorFlash — [野火]i.MX RT庫開發實戰指南——基于i.MXRT1052 文檔 用作個人學習和分享 指令查找表LUT 訪問FLASH存儲器通常包含一些讀寫功能的的控制指令&#xff0c;主控設備可通過這些指令訪問FLASH存儲器。 為了適應這種需求&#…

uv使用指南

&#x1f680; Python 打包工具 UV 使用指南 UV 是一個用 Rust 編寫的極速 Python 包管理器和解析器&#xff0c;旨在成為 pip、pip-tools、virtualenv 等工具的單一替代方案。 &#x1f4cb; 目錄 核心概念與設計哲學安裝與配置基礎使用方法項目管理與工作流高級功能與技巧…

安卓學習 之 圖片控件和圖片按鈕

今天學習的是ImageView 和 ImageButton這兩個控件還是比較簡單的&#xff1a;先來看看最后的樣式圖片吧&#xff1a;從圖片中可以看到ImageView中的圖片要大很多&#xff0c;這是因為中的ImageView中的圖片跟ImageView控件的大小而自動調整。Imag…

動態規劃-學習筆記

這是一份動態規劃&#xff08;Dynamic Programming, DP&#xff09;完整學習筆記。筆記將從一星難度&#xff08;入門&#xff09;到五星難度&#xff08;進階&#xff09;&#xff0c;循序漸進&#xff0c;涵蓋核心思想、經典模型和解題方法論。 本來打算今天更新背包問題的題…

Linux 可信啟動深度解析:從UEFI到操作系統的信任鏈

文章目錄引言一、 可信根基&#xff1a;TPM與核心概念1.1 什么是“度量” (Measurement)&#xff1f;1.2 信任鏈與TPM PCR二、 階段一&#xff1a;固件的可信啟動 (UEFI)2.1 引導的起點&#xff1a;從SEC到DXE的初始化2.2 引導設備選擇 (BDS)&#xff1a;UEFI如何找到GRUB2.3 S…

61-python中面向對象三大特性

前言&#xff1a; 面向對象編程&#xff0c;是許多編程語言都支持的一種編程思想。簡單理解是&#xff1a;基于模板&#xff08;類&#xff09;去創建實體&#xff08;對象&#xff09;&#xff0c; 使用對象完成功能開發。面向對象包含三大主要特性&#xff1a; 封裝 繼承 多態…