大廠面試題

線程池的狀態?


回答:running->shutdown->stop->tidyng->TERMINATED
線程池狀態怎么流轉2.
回答:變成shutdown,執行shutdown()函數變成stop,執行shutdownnow函數
變成tining,所有任務已處理完
變成TERMINATED,線程池調結束

RUNNING接收新任務,處理隊列中的任務
SHUTDOWN不接受新任務,但繼續處理隊列中已有的任務
STOP不接受新任務,不處理隊列中的任務,中斷正在執行的任務
TIDYING所有任務都已終止,工作線程數量為0,即將執行?terminated()?鉤子方法
TERMINATED

terminated()?方法執行完成,線程池徹底結束

線程狀態的流轉3.

回答:新建狀態(New)線程對象被創建后
阻塞狀態(Blocked):等待監視器鎖。
等待狀態(Waiting)。等待另外一個線程的特定操作
超時等待(timed waiting)。等待特定的時間
運行狀態(Running):線程獲取CPU權限進行執行。需要注意的是,線程只能從就緒狀態進入到運行狀態。
死亡狀態(Dead):線程執行完了或者因異常退出了run()方法,該線程結束生命周期。

NEW:當前 Thread 對象雖然有了,但是內核的線程還沒有(還沒調用 start)
TERMINATED:當前 Thread 對象雖然還在,但是內核的線程已經銷毀了(線程已經結束了)
RUNNABLE:就緒狀態,正在 cpu 上運行 或 隨時可以去 cpu 上運行
BLOCKED:因為 鎖競爭 引起的阻塞
TIMED_WAITNG:有超時時間的等待,比如 sleep 或者 join 帶參數版本
WAITING:沒有超時時間的等待 join /wait

.講-下Redis跳表的數據結構

// 簡化版 C 結構體(來自 Redis 源碼)
typedef struct zskiplistNode {sds ele;          // 學生名字,比如 "xiaohong"double score;     // 分數,比如 90.0struct zskiplistNode *backward;  // ← 向后指針(用于倒著走)// 多層索引結構(每個節點有自己的層數)struct zskiplistLevel {struct zskiplistNode *forward;  // → 向前指針unsigned int span;              // 這一跳跨過了幾個節點} level[];
} zskiplistNode;
ele存儲成員名(Redis 用?sds?是它自己的字符串類型)
score排序依據,按分數從小到大排
backward指向前一個節點,實現?ZREVRANGE?倒序遍歷
level[].forward每一層的“快車道”指針
level[].span

記錄這一跳跳過了多少個底層節點(用于算排名)

typedef struct zskiplist {struct zskiplistNode *header;  // 頭節點(不存真實數據)struct zskiplistNode *tail;    // 尾節點(最后一個真實節點)unsigned long length;          // 當前有多少個真實節點int level;                     // 所有節點中最高的層數
} zskiplist;

📌 想象這是一個“地鐵控制中心”:

  • header:總站,所有線路從這里出發
  • tail:終點站,方便快速找到最后一個人
  • length:當前排行榜上有多少人
  • level:目前最高有幾條快車道(Level 0 ~ Level N)

IO多路復用
LINUX有哪些IO機制、select poll epoll,底層實現等等
BIO NIO等。

最基礎的 TCP 的 Socket 編程,它是阻塞 1/0 模型,基本上只能一對一通信,那為了服務更多的客戶端,我們需要改進網絡 I/O 模型。


比較傳統的方式是使用多進程/線程模型,每來一個客戶端連接,就分配一個進程/線程,然后后續的讀寫都在對應的進程/線程,這種方式處理 100 個客戶端沒問題,但是當客戶端增大到 10000 個時,10000 個進程/線程的調度、上下文切換以及它們占用的內存,都會成為瓶頸。

服務器的主進程負責監聽客戶的連接,一旦與客戶端連接完成,accept0 函數就會返回一個「已連接Socket」,這時就通過 fork()函數創建一個子進程,實際上就把父進程所有相關的東西都復制一份,包括文件描述符、內存地址空間、程序計數器、執行的代碼等。

當服務器與客戶端 TCP 完成連接后,通過 pthread_create()函數創建線程,然后將「已連接 Socket」的文件描述符傳遞給線程函數,接著在線程里和客戶端進行通信,從而達到并發處理的目的。我們可以使用線程池的方式來避免線程的頻繁創建和銷毀,所謂的線程池,就是提前創建若干個線程,這樣當由新連接建立時,將這個已連接的 Socket 放入到一個隊列里,然后線程池里的線程負責從隊列中取出「已連接 Socket 」進行處理。


為了解決上面這個問題,就出現了 !/0 的多路復用,可以只在一個進程里處理多個文件的 10,linux 下有三種提供 /O 多路復用的 API,分別是:select、poll、epoll。

select 和 poll 并沒有本質區別,

select 使用固定長度的 BitsMap,表示文件描述符集合,而且所支持的文件描述符的個數是有限制的,在Linux 系統中,由內核中的 FD SETSIZE 限制, 默認最大值為 1024 ,只能監聽 0~1023 的文件描述符。
poll 不再用 BitsMap 來存儲所關注的文件描述符,取而代之用動態數組,以鏈表形式來組織,突破了select 的文件描述符個數限制,當然還會受到系統文件描述符限制。

它們內部都是使用「線性結構」來存儲進程關注的 Socket 集合。
在使用的時候,首先需要把關注的 Socket 集合通過 select/poll 系統調用從用戶態拷貝到內核態,然后由內核檢測事件,當有網絡事件產生時,內核需要遍歷進程關注 Socket 集合,找到對應的 Socket,并設置其狀態為可讀/可寫,然后把整個 Socket 集合從內核態拷貝到用戶態,用戶態還要繼續遍歷整個 Socket集合找到可讀/可寫的 Socket,然后對其處理。
很明顯發現,select和 pol 的缺陷在于,當客戶端越多,也就是 Socket 集合越大,Socket 集合的遍歷和拷貝會帶來很大的開銷,因此也很難應對 C10K。


epoll 是解決 C10K 問題的利器,通過兩個方面解決了 select/poll 的問題。


·epoll 在內核里使用「紅黑樹」來關注進程所有待檢測的 Socket,紅黑樹是個高效的數據結構,增刪改-般時間復雜度是 O(logn),通過對這棵黑紅樹的管理,不需要像 select/poll 在每次操作時都傳入整個Socket 集合,減少了內核和用戶空間大量的數據拷貝和內存分配。
epoll 使用事件驅動的機制,內核里維護了一個「鏈表」來記錄就緒事件,只將有事件發生的 Socket 集合傳遞給應用程序,不需要像 select/poll 那樣輪詢掃描整個集合(包含有和無事件的 Socket),大大提高了檢測的效率。


而且,epo 支持邊緣觸發和水平觸發的方式,而 select/poll 只支持水平觸發,一般而言,邊緣觸發的方式會比水平觸發的效率高

這兩個術語還挺抽象的,其實它們的區別還是很好理解的。
使用邊緣觸發模式時,當被監控的 Socket 描述符上有可讀事件發生時,服務器端只會從 epoll wait 中蘇醒一次,即使進程沒有調用 read 函數從內核讀取數據,也依然只蘇醒一次,因此我們程序要保證-次性將內核緩沖區的數據讀取完;
使用水平觸發模式時,當被監控的 Socket 上有可讀事件發生時,服務器端不斷地從 epoll wait 中蘇醒,直到內核緩沖區數據被 read 函數讀完才結束,目的是告訴我們有數據需要讀取;

索引失效的場景有哪些,你知道什么改進方法嗎

我們查詢語句對索引字段進行左模糊匹配、表達式計算、函數、隱式類型轉換操作,或者聯合索引沒有遵循最左匹配原則,這時候查詢語句就無法走索引了

java版本改動問題 1.7 1.8有哪些主要區別

Java 7新特性:鉆石操作符,try-with-resource 語句、支持動態類型語言、Fork/Join 框架等。
Java8新特性:Lambda 表達式、Stream API、新的Date/Time API、 NashornJavaScript 引|擎等。如何找到需要回收的垃圾、引用等等

  • Java 8: 提供了Optional類來避免空指針異常,它是一個容器類,代表一個值存在或不存在的情況。
  • Java 7: 需要手動檢查對象是否為null,并進行相應的處理。

整個索引查詢的過程是怎樣的、

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

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

相關文章

達芬奇31-40

快捷鍵C鼠標左鍵拖拽到節點上 A鼠標左鍵拖拽節點 復制到另一個圖層上Raw素材太哦調整為log方便調色磨皮中間調向左磨皮,向右變老找到丟失的高光磨皮后臉部高光消失,或不明顯,此時用亮度吸管工具找到臉部的高光,拉高中灰和亮部的Y值質感紋理增強器Tiny,Fine高頻細節(臉部)增強或…

dify

一、SVG Logo Design ### 任務 我希望你充當圖像生成的提示生成器。 ### 任務描述 你的工作是提供詳細且富有創意的描述&#xff0c;以激發 AI 生成獨特而有趣的圖像。請記住&#xff0c;格式應遵循以下一般模式&#xff1a; <主要主題>, <主要主題的描述>, <背…

Mysql 實戰問題處理速通

文章目錄創建賬號和授權查詢沒有主鍵的表統計每個庫大小前十張大表清理日志表Prepared statement needs to be re-preparedxtrabackup 問題鎖問題處理快速處理查詢事務等待和阻塞情況innodb_trxprocesslistdata_locksdata_lock_waitsmetadata_locksevents_statements_current其…

如何測量滾珠花鍵的旋轉方向間隙?

測量滾珠花鍵的旋轉方向間隙需要使用適當的工具&#xff0c;通常情況下&#xff0c;可以使用游標卡尺或外徑卡尺進行測量。這些工具可以準確地測量間隙的寬度和深度&#xff0c;并且可以輕松地記錄測量結果。手動檢測法&#xff1a;將滾珠花鍵固定在支架上&#xff0c;確保其可…

Android AppSearch 深度解析:現代應用搜索架構與實踐

一、AppSearch 概述1.1 什么是 AppSearchAppSearch 是 Android Jetpack 組件庫中的一個現代化本地搜索框架&#xff0c;于 Android 12 (API level 31) 引入&#xff0c;旨在為 Android 應用提供高效、可靠的本地數據索引和搜索能力。與傳統的 SQLite 搜索方案相比&#xff0c;A…

使用公眾號的消息模板給關注用戶發消息

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

【盤古100Pro+開發板實驗例程】FPGA學習 | 3X3圖像矩陣生成 | 圖像實驗指導手冊

本原創文章由深圳市小眼睛科技有限公司創作&#xff0c;版權歸本公司所有&#xff0c;如需轉載&#xff0c;需授權并注明出處&#xff08;www.meyesemi.com) 1. 實驗簡介 實驗目的&#xff1a; 實現 3X3 圖像矩陣對應 9 個像素點圖像數據的讀取。 實驗環境&#xff1a; Wind…

【通用視覺框架】基于OpenCvSharp+WPF+YOLO開發的仿VisionMaster的通用視覺框架軟件,全套源碼,開箱即用

【通用視覺框架】基于OpenCvSharpWPFYOLO開發的仿VisionMaster的通用視覺框架軟件&#xff0c;全套源碼&#xff0c;開箱即用 基于OpenCvSharp、WPF和YOLO的組合&#xff0c;構建一個兼具圖像處理能力、可視化交互和實時檢測的工業級視覺框架。其核心是將底層算法與上層界面無…

微信小程序轉Vue2組件智能提示詞

角色 小程序轉Vue2組件工程師&#xff08;ElementUI專精&#xff09; 核心能力 技術專長&#xff1a;作為世界頂尖前端工程師&#xff0c;專注于將小程序組件&#xff08;.wxml/.wxss/.js/.json&#xff09;精準轉換為Vue2ElementUI組件&#xff0c;轉換邏輯零偏差&#xff0c;…

JVM 學習總結

文章目錄內存結構程序計數器什么是程序計數器&#xff1f;核心作用&#xff1a;為什么需要程序計數器&#xff1f;實現原理主要特點示例&#xff1a;PC 寄存器如何工作總結Java 虛擬機棧什么是 Java 虛擬機棧&#xff1f;棧幀的內部結構主要特點總結線程診斷本地方法棧堆堆內存…

目標檢測檢出率,誤檢率,ap,map等評估python代碼

1.deepseek版本import numpy as np from collections import defaultdictdef calculate_iou(box1, box2):"""計算兩個邊界框的交并比&#xff08;IoU&#xff09;:param box1: [x1, y1, x2, y2]:param box2: [x1, y1, x2, y2]:return: IoU"""# 計…

python的高校班級管理系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具&#xff1a;Navicat/SQLyog等都可以 在高校教…

Scrapy 工作流程深度解析:引擎驅動的完美協作

一、Scrapy 核心組件全景圖 #mermaid-svg-KWCKN9n4urijbSws {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-KWCKN9n4urijbSws .error-icon{fill:#552222;}#mermaid-svg-KWCKN9n4urijbSws .error-text{fill:#552222;…

PCIe Base Specification解析(七)

文章目錄3.6 Data Integrity Mechansisms3.6.1 Introduction3.6.2 LCRC, Sequence Number, and Retry Management (TLP Transmitter)3.6.2.1 LCRC and Sequence Number Rules (TLP Transmitter)3.6.2.2 Handling of Received DLLPs3.6.3 LCRC and Sequence Number (TLP Receive…

Windows 11 使用Windows Hello使用人臉識別登錄失敗,重新錄入人臉識別輸入PIN后報Windows Hello安裝程序白屏無響應的問題解決

Windows 11 使用Windows Hello使用人臉識別登錄失敗&#xff0c;重新錄入人臉識別輸入PIN后報Windows Hello安裝程序白屏無響應的問題解決&#xff1a;遇到此種情況時&#xff1a;1、在“開始”右鍵——設置——賬號——登錄選項2、需要在PIN這里先進行刪除此登錄選項&#xff…

qq scheme

QQ intent scheme跳轉 1.跳轉指定說說(root) 2.跳轉指定說說(非root) 3. 跳轉聊天框 4. 跳轉用戶主頁 5. 跳轉加群 6. 跳轉指定用戶空間 1.跳轉指定說說(root) 該方法需root權限 app.startActivity({className: "com.qzone.reborn.base.QZoneTransparentShellActivi…

C語言基礎_隨機數、數組、函數、指針

0、隨機數&#xff1a; 要用C語言產生隨機數&#xff0c;首先在預處理程序部分要引入stdlib.h頭文件&#xff0c;然后就可以用rand()在后續程序中生成隨機數了。如果不設置隨機數種子srand()&#xff0c;后面生成的隨機數序列就是以41開頭的一個固定序列&#xff0c;因此一般以…

PHP?ORT擴展構建純PHP機器學習的推薦系統

結合 PHP?ORT 構建推薦系統的核心思想是&#xff1a;使用 ONNX 格式的機器學習模型&#xff0c;在 PHP 中本地執行推理&#xff0c;實時給出推薦結果。下面是一個完整的架構設計與實現路徑&#xff0c;適合你快速上手。&#x1f3af; 場景目標 你想在一個 PHP 網站中實現推薦功…

PromptPilot搭配Doubao-seed-1.6:定制你需要的AI提示prompt

目錄 一、PromptPilot 二、基于產品評價的用戶情感分析 2.1 使用PromptPiolt工具進行提示詞生成 2.2 基于prompt的模型調試 2.3 基于prompt的批量數據測評 2.4 基于多輪對話的prompt測試 如今&#xff0c;我們正身處一個 AI 技術飛速迭代的時代。人工智能早已不再是實驗室…

MSPM0開發學習筆記:二維云臺結合openmv實現小球追蹤

文章目錄前言一、硬件選擇二、原理介紹&#xff08;UART&#xff09;三、硬件連線三、軟件代碼1、視覺部分代碼&#xff08;Openart&#xff09;2、控制部分代碼&#xff08;MSPM0&#xff09;&#xff08;1&#xff09; UART部分&#xff08;2&#xff09; 計算函數部分&#…