字節golang后端二面

前端接口使用restful格式,post與get的區別是什么?

在這里插入圖片描述

HTTP網絡返回的狀態碼有哪些?

在這里插入圖片描述

go語言切片與數組的區別是什么?

在這里插入圖片描述

MySQL實現并發安全避免兩個事務同時對一個記錄寫操作的手段有哪些?

在這里插入圖片描述

如何實現業務的冪等性(在golang代碼中如何避免消息重復或處理已出現的消息重復)?

在這里插入圖片描述

如何設置redis分布式鎖?

在這里插入圖片描述
SETNX 是 Redis 中的一個命令,全稱為 “SET if Not eXists”。它的作用是在鍵不存在時設置鍵的值。具體來說,SETNX 的功能如下:

語法

SETNX key value

返回值

  • 1: 如果鍵成功設置(即鍵不存在)。
  • 0: 如果鍵已經存在,設置失敗。

用法示例

1. 設置一個鍵
SETNX my_key "some_value"
  • 如果 my_key 不存在,則它的值被設置為 "some_value",返回 1。
  • 如果 my_key 已經存在,則不做任何操作,返回 0。
2. 用于分布式鎖

SETNX 常用于實現分布式鎖,因為它可以確保只有一個進程可以獲得鎖。例如:

import redis# 連接到 Redis
client = redis.StrictRedis(host='localhost', port=6379, db=0)# 嘗試獲取鎖
if client.setnx("my_lock", "some_unique_value"):print("Lock acquired")# 執行臨界區代碼# 釋放鎖client.delete("my_lock")
else:print("Lock already acquired")

注意事項

  • 不適合復雜操作: SETNX 只能用于簡單的鍵值設置,不能用于復雜的條件判斷。
  • 鎖的有效性: 在實現分布式鎖時,結合使用 SETNX 和設置過期時間可以防止死鎖。

在這里插入圖片描述

ThreadLocal

ThreadLocal 是 Java 中的一個類,用于提供線程局部變量。每個使用 ThreadLocal 的線程都可以獨立地存儲和訪問自己的變量副本,而不會與其他線程共享。以下是關于 ThreadLocal 的詳細解釋:

1. 基本概念

  • 線程局部變量: 每個線程在訪問 ThreadLocal 變量時,會得到自己獨立的副本。這意味著一個線程對 ThreadLocal 變量的修改不會影響其他線程。
  • 存儲位置: ThreadLocal 變量存儲在每個線程的 ThreadLocalMap 中。

2. 使用方法

2.1 創建 ThreadLocal 變量
ThreadLocal<String> threadLocalVar = new ThreadLocal<>();
2.2 設置值

使用 set() 方法將值存儲到當前線程的 ThreadLocal 變量中。

threadLocalVar.set("Hello, ThreadLocal!");
2.3 獲取值

使用 get() 方法從當前線程的 ThreadLocal 變量中獲取值。

String value = threadLocalVar.get(); // 返回 "Hello, ThreadLocal!"
2.4 清除值

使用 remove() 方法可以清除當前線程的 ThreadLocal 變量值。

threadLocalVar.remove();

3. 示例代碼

以下是一個使用 ThreadLocal 的簡單示例:

public class ThreadLocalExample {private static ThreadLocal<Integer> threadLocalValue = ThreadLocal.withInitial(() -> 0);public static void main(String[] args) {Runnable task = () -> {Integer value = threadLocalValue.get();value++;threadLocalValue.set(value);System.out.println(Thread.currentThread().getName() + ": " + threadLocalValue.get());};Thread thread1 = new Thread(task);Thread thread2 = new Thread(task);thread1.start();thread2.start();}
}

4. 適用場景

  • 用戶會話信息: 在 Web 應用中,可以使用 ThreadLocal 存儲每個請求的用戶信息。
  • 數據庫連接: 每個線程可以持有自己的數據庫連接,避免共享連接導致的線程安全問題。
  • 性能優化: 減少對象的創建和銷毀,避免頻繁的上下文傳遞。

5. 注意事項

  • 內存泄漏: 如果不調用 remove() 方法,線程局部變量可能會導致內存泄漏,尤其在使用線程池時。
  • 不適合跨線程使用: ThreadLocal 變量僅在創建它的線程中可見,其他線程無法訪問。
  • 調試困難: 使用 ThreadLocal 可能會讓調試變得復雜,因為變量的狀態依賴于線程的生命周期。

總結

ThreadLocal 是一個強大的工具,適用于需要線程隔離的數據存儲場景。合理使用可以提高性能和簡化代碼,但也需要注意內存管理和線程安全問題。

超賣問題怎么解決?

  • redis使用lua腳本判斷和扣減庫存
  • 使用redis隊列避免數據不一致的問題(先將數據存入redis隊列中,從redis隊列中取出記錄添加到數據庫)

后端如何對一個請求鑒權?為什么JWT要雙簽發?被截獲了怎么辦?如果人為地想要禁止某個用戶的訪問應該怎么做?

一、后端請求鑒權流程

后端通常通過以下步驟驗證請求合法性:

  1. Token 提取
    從請求頭(如 Authorization: Bearer <token>)或 Cookie 中獲取 JWT。
  2. 簽名驗證
    用預設密鑰驗證 JWT 簽名是否被篡改(例如使用 HMAC 或 RSA 算法)。
  3. 有效期檢查
    校驗 exp(過期時間)和 nbf(生效時間)字段。
  4. 業務邏輯鑒權
    • 從 JWT 解析用戶角色/權限(如 role: admin)。
    • 對比請求資源所需的權限(如 RBAC 模型)。
  5. 敏感操作二次驗證
    關鍵操作(如支付)要求重新輸入密碼或 2FA 驗證。
# Python 偽代碼示例(使用 PyJWT)
def verify_request(request):token = request.headers.get("Authorization").split("Bearer ")[1]try:payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])if payload["role"] != "admin":raise PermissionError("無權訪問")return Trueexcept jwt.ExpiredSignatureError:raise Unauthorized("Token過期")

二、JWT 雙簽發機制及作用

雙簽發(Dual-Issuer) 指同時使用兩個密鑰簽發 Token:

  1. 主密鑰(Primary Key)
    • 用于簽發長期有效的 訪問令牌(Access Token)(如有效期 1 小時)。
  2. 從密鑰(Secondary Key)
    • 用于簽發短期有效的 刷新令牌(Refresh Token)(如有效期 7 天)。

? 核心目的:安全性隔離

  • 訪問令牌泄露風險高:頻繁在網絡傳輸,暴露概率大。
  • 刷新令牌嚴格保護:僅用于獲取新訪問令牌,存儲于安全環境(如 HttpOnly Cookie)。
  • 攻擊窗口最小化:即使 Access Token 被截獲,有效期短且無法直接獲取新 Token。

三、JWT 被截獲的應對措施

攻擊類型防御方案示例
中間人竊聽強制 HTTPS + HSTS 頭服務器配置 TLS 1.3
客戶端腳本竊取HttpOnly Cookie 存儲 + XSS 防護設置 Set-Cookie: HttpOnly; Secure
Token 泄露短期有效期 + 刷新令牌輪轉Access Token 有效期 ≤15 分鐘
重放攻擊JTI(JWT ID)唯一標識 + 服務端黑名單使用 Redis 記錄已使用的 JTI

刷新令牌輪轉示例
每次用 Refresh Token 獲取新 Access Token 時,同步生成新 Refresh Token 并作廢舊令牌。這樣即使舊刷新令牌被截獲,攻擊者只能使用一次。


四、禁止特定用戶訪問的解決方案

1. 短期封禁:令牌黑名單(Token Blacklist)
  • 適用場景:立即踢出已登錄用戶。
  • 實現方式
    • 用戶注銷或封禁時,將 JWT 的 jti(唯一ID)加入 Redis 黑名單。
    • 鑒權時校驗 jti 是否在黑名單中。
  • 優點:實時生效。
  • 缺點:增加數據庫查詢開銷。
# 封禁用戶時
redis.set(f"blacklist:{jti}", "1", ex=ACCESS_TOKEN_EXPIRE)# 鑒權時檢查
if redis.exists(f"blacklist:{jti}"):raise Forbidden("用戶已被封禁")
2. 長期封禁:用戶狀態標記
  • 適用場景:永久禁止訪問。
  • 實現方式
    • 在用戶數據庫添加 is_active 字段。
    • 鑒權時查詢用戶狀態(注意緩存用戶信息避免頻繁查庫)。
  • 優點:一勞永逸。
  • 缺點:狀態變更后需等待 Token 自然過期。
3. 強制令牌失效:刷新令牌回收
  • 封禁用戶時,刪除該用戶的刷新令牌
  • 用戶 Access Token 過期后無法續簽,自動退出。

五、最佳實踐總結

  1. 雙簽發必要性
    ? 隔離高風險令牌(Access Token)與高價值令牌(Refresh Token)。
  2. 防截獲組合拳
    ? HTTPS + 短有效期 + HttpOnly Cookie + 刷新令牌輪轉。
  3. 封禁用戶策略
    • 緊急場景:令牌黑名單(實時生效)。
    • 永久封禁:標記用戶狀態 + 回收刷新令牌
  4. 性能優化
    • 黑名單用 Redis 存儲并設置自動過期(與 Token 有效期對齊)。
    • 用戶狀態變化時清理緩存(如 Redis 中的用戶信息)。

關鍵原則:JWT 本身無狀態,需通過黑名單/用戶狀態引入必要狀態控制,在安全性和性能間取得平衡。

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

Spring Security安全實踐指南

安全性的核心價值 用戶視角的數據敏感性認知 從終端用戶角度出發,每個應用程序都涉及不同級別的數據敏感度。以電子郵件服務與網上銀行為例:前者內容泄露可能僅造成隱私困擾,而后者賬戶若被操控將直接導致財產損失。這種差異體現了安全防護需要分級實施的基本原則: // 偽…

Leetcode第451場周賽分析總結

題目鏈接 競賽 - 力扣&#xff08;LeetCode&#xff09;全球極客摯愛的技術成長平臺 題目解析 A. 3560. 木材運輸的最小成本 AC代碼 class Solution { public:long long minCuttingCost(int n, int m, int k) {if (n > m) swap(n, m); // n < m;using ll long lon…

Linux中的shell腳本

什么是shell腳本 shell腳本是文本的一種shell腳本是可以運行的文本shell腳本的內容是由邏輯和數據組成shell腳本是解釋型語言 用file命令可以查看文件是否是一個腳本文件 file filename 腳本書寫規范 注釋 單行注釋 使用#號來進行單行注釋 多行注釋 使用 : " 注釋內容…

PHP與MYSQL結合中中的一些常用函數,HTTP協議定義,PHP進行文件編程,會話技術

MYSQL&#xff1a; 查詢函數: 執行查詢語句: 1.mysql_query("SQL語法"); 凡是執行操作希望拿到數據庫返回的數據進行展示的(結果返回: 數據結果); 2.執行結果的處理:成功為結果集&#xff0c;失敗為false; 成功返回結果:SQL指令沒有錯誤&#xff0c;但是查詢結果…

數學分析——一致性(均勻性)和收斂

目錄 1. 連續函數 1.1 連續函數的定義 1.2 連續函數的性質 1.2.1 性質一 1.2.2 性質二 1.2.3 性質三 1.2.4 性質四 2. 一致連續函數 2.1 一致連續函數的定義 2.2 一致連續性定理(小間距定理)(一致連續函數的另一種定義) 2.3 一致連續性判定法 2.4 連…

湖北理元理律師事務所:企業債務優化的科學路徑與人文關懷

湖北理元理律師事務所&#xff1a;企業債務優化的科學路徑與人文關懷 在中小企業經營壓力增大的背景下&#xff0c;如何平衡債務清償與員工生計成為關鍵課題。湖北理元理律師事務所聯合計劃集團公司&#xff0c;為服務企業設計了一套兼顧法律合規性與民生保障的債務解決方案&a…

樹莓派安裝openwrt搭建軟路由(ImmortalWrt固件方案)

&#x1f923;&#x1f449;我這里準備了兩個版本的openwrt安裝方案給大家參考使用&#xff0c;分別是原版的OpenWrt固件以及在原版基礎上進行改進的ImmortalWrt固件。推薦使用ImmortalWrt固件&#xff0c;當然如果想直接在原版上進行開發也可以&#xff0c;看個人選擇。 &…

一鍵凈化Excel數據:高性能Python腳本實現多核并行清理

摘要 本文分享兩個基于Python的Excel數據凈化腳本&#xff0c;通過多進程并行技術清除工作表內不可見字符、批注、單元格樣式等冗余內容&#xff0c;利用OpenPyXL實現底層操作&#xff0c;結合tqdm進度條和進程級任務分配&#xff0c;可快速處理百萬級單元格數據。適用于數據分…

【Netty】EventLoopGroup

在Netty的ServerBootstrap中設置兩個EventLoopGroup的作用是將網絡操作的兩個關鍵階段分離到不同的線程組中處理&#xff0c;從而優化性能并簡化并發控制。具體來說&#xff1a; 1. 兩個EventLoopGroup的角色 第一個EventLoopGroup&#xff08;通常稱為bossGroup&#xff09;&…

【前端】Vue中使用CKeditor作為富文本編輯器

官網https://ckeditor.com/ 此處記錄一下我在使用的時候具體初始化的代碼。 <template><div><textarea :id"id"></textarea></div> </template><script> export default {name: CkEditor,data: function () {return {id:…

前端面經 websocket

應用層協議&#xff0c;實現一個TCP連接上的全雙工通信&#xff0c;實時通訊 之前的實時WEB 實現輪詢 增加輪詢頻率 ws wss 明文版本 和 密文版本 特點 # 1 頭部小 2 更注重實時性

【筆記】suna部署之獲取 Supabase API key 和 project URL

#工作記錄 Supabase | The Open Source Firebase Alternative 一、注冊與登錄 方式一&#xff1a;GitHub 授權登錄 在登錄頁面選擇 “繼續使用 GitHub” &#xff0c;跳轉到 GitHub 授權頁面&#xff08;如圖 5 所示&#xff09;。確認 “Supabase 的想要訪問您的 [賬戶名] 帳…

爬蟲工具鏈的詳細分類解析

以下是針對爬蟲工具鏈的詳細分類解析&#xff0c;涵蓋靜態頁面、動態渲染和框架開發三大場景的技術選型與核心特性&#xff1a; &#x1f9e9; 一、靜態頁面抓取&#xff08;HTML結構固定&#xff09; 工具組合&#xff1a;Requests BeautifulSoup 適用場景&#xff1a;目標數…

STM32F407寄存器操作(ADC非連續掃描模式)

1.前言 書接上回&#xff0c;在看手冊的時候我突然發現手冊上還描述了另一種ADC掃描模式&#xff0c;即非連續掃描模式&#xff0c;想著連續掃描模式都已經探索過了&#xff0c;那就順手把非非連續模式研究一下吧。 2.理論 我們先看看手冊&#xff0c;這里我就以規則通道舉例…

spring切面

概念 兩個特點&#xff1a; IOC控制反轉AOP主要用來處理公共的代碼 例如一個案例就是添加用戶&#xff0c;重復的代碼包含了記錄日志、事務提交和事務回滾等&#xff0c;都是重復的&#xff0c;為了簡單&#xff0c;交給AOP來做。 即將復雜的需求分解出不同方面&#xff0c…

[Python] Python中的多重繼承

文章目錄 Lora中的例子 Lora中的例子 https://github.com/michaelnny/QLoRA-LLM/blob/main/qlora_llm/models/lora.py#L211C1-L243C10如果繼承兩個父類&#xff0c;并且父類的__init__參數不一樣&#xff0c;則可以顯式的調用父類init&#xff1b;如果用super().__init__()則需…

rsync服務的搭建

目錄 一、rsync介紹 rsync的安裝 二、rsync的語法 三、rsync命令使用 1. 本機同步 2. 遠程同步 四、rsync作為服務使用 1、嘗試啟動rsync程序 2、rsync的配置文件介紹 注意事項&#xff1a; 3. rsyncinotify實時同步 3.依賴服務托管xinetd&#xff08;CentOS 6中rs…

【C/C++】面試基礎題目收集

C 軟件開發面試中常見的刷題題目通常可分為以下幾大類&#xff1a;數據結構與算法、系統編程、面向對象設計、C 語言特性、并發編程等。 &#x1f9e0; 一、數據結構與算法&#xff08;力扣/牛客經典題&#xff09; 掌握 STL 和底層結構實現能力&#xff1a; &#x1f4cc; 數…

將手機網絡經USB數據線和本地局域網共享給華為AP6050DN無線接入點

引言 由于最近裝畢的新家所在的小區未能及時通寬帶,于是家中各類無線設備如何上網就成了首要要解決的問題。 鑒于家中要聯網的設備多、類型雜、支持頻段也不一,總是開手機熱點不是回事兒,于是就想著把手機網絡引至華為AP6050DN無線接入點中,讓家中所有的無線設備都能快速高…

【數據結構】圖論核心算法解析:深度優先搜索(DFS)的縱深遍歷與生成樹實戰指南?

深度優先搜索 導讀&#xff1a;從廣度到深度&#xff0c;探索圖的遍歷奧秘一、深度優先搜索二、算法思路三、算法邏輯四、算法評價五、深度優先生成樹六、有向圖與無向圖結語&#xff1a;深潛與回溯&#xff0c;揭開圖論世界的另一面 導讀&#xff1a;從廣度到深度&#xff0c;…