主頁 > 後端開發 > JavaWeb編程面試題——MyBatis

JavaWeb編程面試題——MyBatis

2023-05-30 07:38:33 後端開發

引言

面試題==知識點,這里所記錄的面試題并不針對于面試者,而是將這些面試題作為技能知識點來看待,不以刷題進大廠為目的,而是以學習為目的,這里的知識點會持續更新,目錄也會隨時進行調整,

關注公眾號:編程火箭車,在【粉絲福利】中點擊【面題大全】,其中的Java面試題在線實時更新、查看,


一、面試題導航

點這里進入JavaWeb編程面試題——導航

面試題持續更新中......

二、面試題目

1.什么是MyBatis?

(1)MyBatis 是一個半 ORM(物件關系映射)框架,它內部封裝了 JDBC,開發時只需關注 SQL 陳述句本身,不需要花費精力去處理加載驅動、創建連接、創建 statement 等繁雜的程序,程式員直接撰寫原生態 SQL,可以嚴格控制 SQL 執行性能,靈活度高,

(2)MyBatis 可以使用 XML 或注解來配置和映射原生資訊,將 POJO 映射成資料庫中的記錄,避免了幾乎所有的 JDBC 代碼和手動設定引數以及獲取結果集,

(3)通過 XML 檔案或注解的方式將要執行的各種 statement 配置起來,并通過 Java 物件和 statement 中 SQL 的動態引數進行映射生成最終執行的 SQL 陳述句,最后由 MyBatis 框架執行 SQL 并將結果映射為 Java 物件并回傳,(從執行 SQL 到回傳 result 的程序)

2.MyBatis優缺點?

優點:
(1)基于 SQL 陳述句編程,相當靈活,不會對應用程式或者資料庫的現有設計造成任何影響,SQL 寫在 XML 中,解除 SQL 與程式代碼的耦合,便于統一管理,提供 XML 標簽,支持撰寫動態 SQL 陳述句,并可重用;

(2)與 JDBC 相比,減少了50%以上的代碼量,消除了 JDBC 大量冗余的代碼,不需要手動開關連接;

(3)很好的與各種資料庫兼容(因為 MyBatis 使用 JDBC 來連接資料庫,所以只要 JDBC 支持的資料庫 MyBatis 都支持);

(4)能夠與 Spring 很好的集成(MyBatis 官方提供與 Spring 的整合包);

(5)提供映射標簽,支持物件與資料庫的 ORM 欄位關系映射;提供物件關系映射標簽,支持物件關系組件維護,

缺點:

(1)SQL 陳述句的撰寫作業量較大,尤其當欄位多、關聯表多時,對開發人員撰寫 SQL 陳述句的功底有一定要求,

(2)SQL 陳述句依賴于資料庫,導致資料庫移植性差,不能隨意更換資料庫,

3.MyBatis框架適用場合?

MyBatis 專注于 SQL 自身,是一個足夠靈活的 DAO 層解決方案,對性能的要求很高,或者需求變化較多的專案,例如 Web 專案,互聯網專案等等, MyBatis 都是不錯的選擇,

4.MyBatis框架原理?

mybatis架構圖

  1. MyBatis 配置:SqlMapConfig.xml,此檔案作為 MyBatis 的全域組態檔,配置了 MyBatis 的運行環境等資訊,mapper.xml 檔案即 SQL 映射檔案,檔案中配置了操作資料庫的 SQL 陳述句,此檔案需要在 SqlMapConfig.xml 中加載,

  2. 通過 MyBatis 環境等配置資訊構造 SqlSessionFactory 即會話工廠,

  3. 由會話工廠創建 sqlSession 即會話,操作資料庫需要通過 sqlSession 進行,

  4. MyBatis 底層自定義了 Executor 執行器介面操作資料庫,Executor 介面有兩個實作,一個是基本執行器、一個是快取執行器,

  5. Mapped Statement 也是 MyBatis 一個底層封裝物件,它包裝了 MyBatis 配置資訊及 SQL 映射資訊等,mapper.xml 檔案中一個 SQL 對應一個 Mapped Statement 物件,SQL 的 id 即是 Mapped statement 的 id,

  6. Mapped Statement 對 SQL 執行輸入引數進行定義,包括 HashMap、基本型別、POJO,Executor 通過 Mapped Statement 在執行 SQL 前將輸入的 Java 物件映射至 SQL 中,輸入引數映射就是 JDBC 編程中對 preparedStatement 設定引數,

  7. Mapped Statement 對 SQL 執行輸出結果進行定義,包括 HashMap、基本型別、POJO,Executor 通過 Mapped Statement 在執行 SQL 后將輸出結果映射至 Java 物件中,輸出結果映射程序相當于 JDBC 編程中對結果的決議處理程序,

5.MyBatis和Hibernate的區別?

(1)MyBatis 和 Hibernate 不同,它不是一個完全的 ORM 框架,因為 MyBatis 需要程式員自己撰寫 SQL 陳述句;

(2)MyBatis 直接撰寫原生態 SQL,可以嚴格控制 SQL 執行性能,靈活度高,非常適合對關系資料模型要求不高的軟體開發,因為這類軟體需求變化頻繁,一旦有需求變化可以迅速輸出成果,但是靈活的前提是 MyBatis 無法做到資料庫無關性,如果需要實作支持多種資料庫的軟體,則需要自定義多套 SQL 映射檔案,作業量大,

(3)Hibernate 物件/關系映射能力強,資料庫無關性好,對于關系模型要求高的軟體,如果用 Hibernate 開發可以節省很多代碼,提高效率,

6.MyBatis有哪些動態標簽?

  • if 標簽:判斷是否符合條件

  • foreach 標簽:對一個集合進行遍歷

  • where 標簽:補充回應的 where 的 SQL 陳述句

  • sql 標簽:定義可重用的 SQL 代碼段,可以包含在其他陳述句中,

  • ......

7.MyBatis中一對一如何實作?

在映射檔案中 resultMap 元素里配置 association 節點,配置一對一的類就可以完成,

8.MyBatis中一對多如何實作?

在映射檔案中 resultMap 里面配置 collection 節點,配置一對多的類就可以完成,

9.MyBatis編程步驟?

  1. 創建 SqlSessionFactory 會話工廠

  2. 通過 SqlSessionFactory 創建 SqlSession 會話

  3. 通過 sqlSession 執行資料庫操作

  4. 通過 `session.commit()`` 提交事務

  5. 呼叫 `session.close()`` 關倍訓話

10.MyBatis的一級快取和二級快取?

  • Mybatis 首先會到快取中查詢結果集,如果沒有則查詢資料庫,如果有則直接從快取取出結果集,Mybatis 內部存盤快取使用一個 HashMap,key 為 hashCode+sqlId+Sql 陳述句,value 為從查詢出來映射生成的 Java 物件,

  • Mybatis 的一級快取即本地快取,它的作用域是一個 sqlSession 會話,即在同一個 sqlSession 中兩次執行相同的 SQL 陳述句,第一次執行完畢會將資料庫中查詢的資料寫到快取(記憶體),第二次會從快取中獲取資料將不再從資料庫查詢,從而提高查詢效率,

  • Mybatis 的二級快取即查詢快取,它的作用域是一個 mapper 的 namespace,即在同一個 namespace 中查詢相同的 SQL 可以從快取中獲取資料,二級快取是可以跨 SqlSession 的,

11.#{} 和 ${} 區別?

  • #{}表示一個占位符號,可以有效防止sql注入,

  • ${}表示拼接sql串,在低版本中括號中只能是value,

  • #{}表示一個占位符號,通過#{}可以實作preparedStatement向占位符中設定值,自動進行java型別和jdbc型別轉換,#{}可以有效防止sql注入,

  • #{}可以接收簡單型別值或pojo屬性值, 如果parameterType傳輸單個簡單型別值,#{}括號中可以是value或其它名稱,

  • ${}表示拼接sql串,通過${}可以將parameterType 傳入的內容拼接在sql中且不進行jdbc型別轉換,

  • ${}可以接收簡單型別值或pojo屬性值,如果parameterType傳輸單個簡單型別值,低版本中${}括號中只能是value,

12.Mybatis的mapper.xml檔案中常用標簽有哪些?

<select>、<insert>、<update>、<delete>、<sql>、<resultMap>、<set>、<where>...

13.Mybatis的xml映射檔案中,不同的xml映射檔案,id是否可以重復?

不同的xml映射檔案,如果配置了namespace,那么id可以重復;如果沒有配置namespace,那么id不能重復;原因就是namespace+id是作為Map<String, MapperStatement>的key使用的,如果沒有namespace,就剩下id,那么,id重復會導致資料互相覆寫,有了namespace,自然id就可以重復,namespace不同,namespace+id自然也就不同,

備注:在舊版本的Mybatis中,namespace是可選的,不過新版本的namespace已經是必須的了,

14.MyBatis 分頁如何處理?

mybatis分頁查詢有兩種方案:

  • 可以通過limit關鍵字拼接SQL陳述句,需要兩個引數,第一個引數為開始條數,第二個引數為查詢個數,

  • 可以通過 pageHelper 插件實作:

    • 在sqlMapConfig 檔案中配置 mybatis的插件(plugins)

    • 在查詢資料前通過 PageHelper.start() 方法,呼叫 PageHelper 插件,引數為當前頁和每頁顯示條數

    • 查詢結果會封裝到一個page物件中,包含分頁查詢記錄、總記錄數、總頁數等

    • 從page物件中獲取需要的資料

15.Mybatis是如何進行分頁的?分頁插件的原理是什么?

Mybatis使用RowBounds物件進行分頁,它是針對ResultSet結果集執行的記憶體分頁,而非物理分頁,可以在sql內直接書寫帶有物理分頁的引數來完成物理分頁功能,也可以使用分頁插件來完成物理分頁,

分頁插件的基本原理是使用mybatis提供的插件介面,實作自定義插件,在插件的攔截方法內攔截待執行的sql,然后重寫sql,根據dialect方言,添加對應的物理分頁陳述句和物理分頁引數,

16.如何獲取自動生成的主鍵?

  • 自增主鍵回傳

    • mysql 自增主鍵,執行 insert 提交之前自動生成一個自增主鍵,可以通過 mysql 函式獲取剛插入記錄的自增主鍵:LAST_INSERT_ID(),是在insert之后去呼叫,

      <insert id="insertTeacher" parameterType="Teacher" >
      	<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
      		SELECT LAST_INSERT_ID()
      	</selectKey>
      	INSERT INTO teacher (name,idcard,sex) VALUES (#{name},#{idcard},#{sex})
      </insert>
      
    • 設定insert屬性獲取自增id

      <insert id="insertTeacher" parameterType="Teacher" useGeneratedKeys="true" keyProperty="id" >
      	INSERT INTO teacher (name,idcard,sex) VALUES (#{name},#{idcard},#{sex})
      </insert>
      
  • 非自增主鍵回傳

    mysql 使用 uuid 實作主鍵,需要修改表中 id 欄位型別為 varchar,長度至少36位,
    執行思路:先通過 uuid() 查詢到主鍵,將主鍵輸入到 SQL 陳述句中,執行 uuid() 陳述句順序相對于 insert陳述句在之前,

    <!-- 使用mysql的uuid()生成主鍵
    	執行程序:
    	首先通過uuid()得到主鍵,將主鍵設定到teacher物件的id屬性中
    	其次在insert執行時,從teacher物件中取出id屬性值
    -->
    <insert id="insertTeacher" parameterType="Teacher">
    	<selectKey keyProperty="id" resultType="java.lang.String" order="BEFORE">
    		SELECT UUID()
    	</selectKey>
    	INSERT INTO teacher (id,name,idcard) VALUES (#{id},#{name},#{idcard})
    </insert>
    

17.在mapper中如何傳遞多個引數?

第一種:直接多個引數

// DAO層 介面
User listUsers(String name, String sex);
<!-- mapper映射檔案 
		#{0}代表接收dao層方法中的第一個引數,#{1}代表接收第二個引數,更多引數一直往后加即可
-->
<select id="listUsers" resulType="User">
    select * from user where name=#{0} and sex=#{1}
</select>

第二種:使用@param注解

// DAO層 介面
User listUsers(@param("uname") String name, @param("usex") String sex);
<!-- mapper映射檔案 -->
<select id="listUsers" resulType="User">
    select * from user where name=#{uname} and sex=#{usex}
</select>

第三種:多個引數封裝成map集合

// 映射檔案的命名空間.sql片段的id,就可以呼叫對應的映射檔案的SQL
// 由于引數超過了兩個,而方法中只有一個Object引數收集,因此我們使用Map集合來封裝引數
Map<String, Object> map = new HashMap<>();
map.put("uname", "張三");
map.put("usex", "男");

sqlSession.selectList("user.listUsers", map);
<!-- mapper映射檔案 -->
<select id="listUsers" resulType="User">
    select * from user where name=#{uname} and sex=#{usex}
</select>

18.使用mapper介面開發DAO時有哪些要求?

  • Mapper.xml 檔案中的 namespace 與 mapper 介面的類路徑相同,

  • Mapper 介面方法名和 Mapper.xml 中定義的每個 statement 的 id 相同

  • Mapper 介面方法的輸入引數型別和 mapper.xml 中定義的每個 sql 的 parameterType 的型別相同

  • Mapper 介面方法的輸出引數型別和 mapper.xml 中定義的每個 sql 的 resultType 的型別相同

19.MyBatis的組態檔sqlMapConfig.xml中有哪些內容?

配置內容和順序如下:

  • configuration(配置)
    • properties(屬性)
    • settings(全域配置引數)
    • typeAliases(型別別名)
    • typeHandlers(型別處理器)
    • objectFactory(物件工廠)
    • plugins(插件)
    • environments(環境配置)
    • environment(環境變數)
    • transactionManager(事務管理器)
    • dataSource(資料源)
    • databaseIdProvider(資料庫廠商標識)
    • mappers(映射器)

20.MyBatis中有哪些重要組件?

MyBatis是一個開源的Java持久化框架,它可以輕松訪問關系資料庫,將SQL陳述句和資料映射到Java物件中,并提供了很多高級特性,下面是MyBatis中的幾個重要組件:

  1. SqlSession:SqlSession是MyBatis的核心介面之一,其作用相當于對JDBC操作的封裝,SqlSession提供了執行SQL陳述句、提交事務、獲取Mapper映射器等操作,

  2. Configuration:Configuration是MyBatis的全域配置類,它負責決議和管理MyBatis的組態檔,并提供了許多高級特性,如快取配置、型別別名配置、插件配置等,

  3. Mapper映射器:Mapper映射器是MyBatis中用于映射Java方法與SQL陳述句的方法,通過Mapper映射器,可以將Java方法和SQL陳述句系結在一起,從而輕松地在Java中執行SQL陳述句,

  4. Executor:Executor是MyBatis中用于執行SQL陳述句的核心介面,它負責從SqlSession中接收SQL陳述句并執行它們,同時還負責快取結果、處理事務等操作,

  5. TypeHandler:TypeHandler是MyBatis中的重要組件之一,它負責將Java物件和資料庫中的資料進行轉換,MyBatis中默認提供了很多TypeHandler,同時也支持自定義TypeHandler,

這些組件構成了MyBatis框架的核心,并提供了許多高效、易用、可擴展的特性,使開發人員可以輕松地進行資料訪問和持久化操作,


關注公眾號:編程火箭車
我們定期發布編程相關的文章、資訊、活動等內容,幫助編程愛好者、初學者或初級程式員快速入門、打牢基礎,歡迎大家關注,和我們一起探索編程的精彩世界,我們定期發布編程相關的文章、資訊、活動等內容,幫助編程愛好者、初學者或初級程式員快速入門、打牢基礎,歡迎大家關注,和我們一起探索編程的精彩世界,

本文來自博客園,作者:編程火箭車,轉載請注明原文鏈接:https://www.cnblogs.com/coding-rocket/p/17439976.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/553718.html

標籤:Java

上一篇:c語言,函式的址傳遞例子

下一篇:返回列表

標籤雲
其他(159921) Python(38178) JavaScript(25462) Java(18147) C(15233) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7215) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5344) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4578) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1977) 功能(1967) Web開發(1951) HtmlCss(1949) C++(1926) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1862) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • JavaWeb編程面試題——MyBatis

    面試題==知識點,這里所記錄的面試題并不針對于面試者,而是將這些面試題作為技能知識點來看待。不以刷題進大廠為目的,而是以學習為目的。這里的知識點會持續更新,目錄也會隨時進行調整。 ......

    uj5u.com 2023-05-30 07:38:33 more
  • c語言,函式的址傳遞例子

    編碼如下:#include <stdio.h> void swap(int* x,int* y ){ int tmp; tmp=*x; *x=*y; *y=tmp ; }; int main(){ int a=4; int b=5; printf("befer\n"); printf("a=%d\n ......

    uj5u.com 2023-05-30 07:37:52 more
  • 【QCustomPlot】性能提升之修改原始碼(版本 V2.x.x)

    QCustomPlot 是開源專案,原始碼撰寫十分規范,想要理解它的可視化思路不算特別困難。我在這篇隨筆中總結一下常用的原始碼修改技巧,下面的每一個技巧都是獨立的,不同技巧中添加的代碼無任何依賴關系,相互之間也不會引發任何沖突,不會影響 QCustomPlot 原生的介面。示例中使用的 QCustomP... ......

    uj5u.com 2023-05-30 07:31:05 more
  • 阿里一面:MySQL 單表資料最大不要超過多少行?為什么?這樣回答滿分!

    來源:https://my.oschina.net/u/4090830/blog/5559454 ### 1 背景 作為在后端圈開車的多年老司機,是不是經常聽到過,“mysql 單表最好不要超過 2000w”,“單表超過 2000w 就要考慮資料遷移了”,“你這個表資料都馬上要到 2000w 了,難 ......

    uj5u.com 2023-05-29 11:40:38 more
  • Tomcat處理http請求之原始碼分析

    本文將從請求獲取與包裝處理、請求傳遞給Container、Container處理請求流程,這3部分來講述一次http穿梭之旅。 ......

    uj5u.com 2023-05-29 11:40:24 more
  • Java中Collection與Collections有什么區別?Java常見面試題決議

    **本文將為大家詳細講解Java中Collection與Collections的區別點,這是我們進行開發時經常用到的知識點,也是大家在學習Java中很重要的一個知識點,更是我們在面試時有可能會問到的問題!** **文章較長,干貨滿滿,建議大家收藏慢慢學習。文末有本文重點總結,主頁有全系列文章分享。技 ......

    uj5u.com 2023-05-29 11:40:14 more
  • Spark入門看這篇就夠了(萬字長文)

    本文已收錄至Github,推薦閱讀 👉 [Java隨想錄](https://github.com/ZhengShuHai/JavaRecord) 微信公眾號:[Java隨想錄](https://mmbiz.qpic.cn/mmbiz_jpg/jC8rtGdWScMuzzTENRgicfnr91C5 ......

    uj5u.com 2023-05-29 11:40:08 more
  • 關于切片引數傳遞的問題

    前言:在 Golang 中函式之間傳遞變數時總是以值的方式傳遞的,無論是 int,string,bool,array 這樣的內置型別(或者說原始的型別),還是 slice,channel,map 這樣的參考型別,在函式間傳遞變數時,都是以值的方式傳遞,也就是說傳遞的都是值的副本。 在使用ioutil ......

    uj5u.com 2023-05-29 11:39:53 more
  • java多執行緒

    # java多執行緒 ## 行程、執行緒與多執行緒 - 行程是執行程式的一次執行程序,是一個動態的概念,是系統支援分配的單位 - 通常一個行程可以包含一個或多個執行緒。執行緒是CPU調度和執行的單位 - 執行緒就是獨立執行的路徑,由cpu調度 - 執行緒會帶來額外的開銷,如cpu調度時間,并發控制開銷 - 每個線 ......

    uj5u.com 2023-05-29 11:39:15 more
  • 驅動開發:內核決議記憶體四級頁表

    當今作業系統普遍采用64位架構,CPU最大尋址能力雖然達到了64位,但其實僅僅只是用到了48位進行尋址,其記憶體管理采用了`9-9-9-9-12`的分頁模式,`9-9-9-9-12`分頁表示物理地址擁有四級頁表,微軟將這四級依次命名為PXE、PPE、PDE、PTE這四項。關于記憶體管理和分頁模式,不同的... ......

    uj5u.com 2023-05-29 11:38:10 more