博客 / 列表

字節幺零二四 - 算法典型例題:N皇后問題,五種解法,逐步優化(遞歸版)

本文將介紹N皇后問題的五種解法,包括樸素回溯法、對稱優化、標記優化、可用優化、位運算優化,對於每種解題思路,提供相應的遞歸版代碼實現,最後將對每種解法進行測試,橫向對比每種解法的求解時間。 題目描述 在 N×N 格的國際象棋上擺放 N 個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法? 回溯法 解題思路 回溯法採用深度有限的搜索策略遍歷問題的解空間樹,可

遞歸 , 算法 , 回溯法

字節幺零二四 - 算法典型例題:N皇后問題,五種解法,逐步優化(非遞歸版)

本文將介紹N皇后問題的五種解法,包括樸素回溯法、對稱優化、標記優化、可用優化、位運算優化,對於每種解題思路,提供相應的非遞歸版代碼實現,最後將對每種解法進行測試,橫向對比每種解法的求解時間。 題目描述 在 N×N 格的國際象棋上擺放 N 個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法? 回溯法 解題思路 回溯法採用深度有限的搜索策略遍歷問題的解空間樹,

遞歸 , 算法 , 回溯法

字節幺零二四 - 源碼解讀 | Java中ReentrantReadWriteLock的實現原理

本文將介紹Java中ReentrantReadWriteLock的實現原理,從JDK源碼層面講解讀寫鎖的加鎖、釋放鎖的流程,最後對流程進行總結。 讀寫鎖概述 讀寫鎖 ReentrantReadWriteLock 的依賴關係如下圖所示。 讀寫鎖的基本使用如下 ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); Reentrant

源碼 , JAVA , juc , 併發編程

字節幺零二四 - 併發編程:Java常用線程調度方法及實現原理

本文將介紹Java常用線程調度方法及實現原理,包括sleep、wait¬ify、join、parkunpark。 線程方法 方法 説明 start() 用於啓動線程,讓線程進入就緒狀態 ; RUNNABLE 多次調用拋 IllegalThreadStateException 異常 run() 線程運行

JAVA , 併發 , juc

字節幺零二四 - 源碼解讀 | Java中ReentrantLock的實現原理

ReentrantLock 依賴關係如下圖所示 非公平鎖實現原理 ReentrantLock 默認採用非公平鎖。 // ReentrantLock public ReentrantLock() { sync = new NonfairSync(); } 加鎖流程 ReentrantLock 的 lock 方法通過同步器的 lock 方法實現。 // ReentrantLock publi

JAVA , 併發 , juc , 併發編程

字節幺零二四 - 電腦科普 | 睿頻、TDP、架構是什麼?快速帶你瞭解CPU的那些參數!

在選擇 CPU 的時候,會發現 CPU 有各種參數,這些參數都是什麼意思,我們需要注意哪些參數?這可能是我們比較關心的問題。本文將帶你快速瞭解 CPU 的各種基本參數,讓你在看到 CPU 的參數時做到心中有數。 核心數 核心數是指 CPU 物理核心的數量,核心用於執行任務,核心數越多,可同時處理的任務就越多。 在不使用超線程技術(Hyper-Threading)的情況下,一個核心同時只能執行一個任

電腦 , 參數 , cpu

字節幺零二四 - 電腦科普 | 電腦處理器是如何命名的,從命名中可以知道些什麼?

i9 的性能是否強於 i7,型號後綴的 KFC 又有什麼含義?看到處理器的各種命名,許多朋友的可能會感到迷惑。本文將嘗試梳理目前市面上兩家主流電腦處理器廠商的消費級主流處理器的命名規則,兩家廠商分別是英特爾 Intel 和超微半導體 AMD。 順帶一提,現在的處理器早已不僅僅是一顆簡單的 CPU,SoC 化的處理器包含着 CPU、GPU、內存控制器、I/O 控制器等等單元,因此,處理器和 CPU

處理器 , intel , amd , 電腦 , cpu

字節幺零二四 - 併發編程 | Java中AQS的基本實現原理及簡單使用

AbstractQueuedSynchronizer(AQS),是阻塞式鎖和同步器工具的框架。本文將初步介紹Java中AQS的基本原理,並基於AQS實現自定義阻塞式不可重入鎖,以此來演示AQS的使用。下期會以 ReentrantLock 為例,從源碼的層面介紹 AQS 的核心實現 acquire() 方法。 AQS 的目標 提供阻塞式獲取鎖 acquire() 和非阻塞式嘗試獲取鎖 tryAc

JAVA , juc , 併發編程 , 後端

字節幺零二四 - 併發編程:Java線程狀態及其轉換

線程狀態 操作系統層面,線程分為五種狀態 創建狀態:線程正在被創建,包括申請資源、分配空間等操作。 就緒狀態:已獲得除 CPU 外的一切所需資源。 運行狀態:獲得 CPU 正在運行。 阻塞狀態:因等待某一事件而暫停運行,如等待 I/O 操作完成。 終止狀態:執行完畢,正在進行資源釋放等操作。 Java API 層面,線程分為六種狀態 NEW:語言層面創建了線程對象,未與操作

JAVA , juc , 併發編程