詳細(xì)內(nèi)容可以參考:
7. 為什么要使用索引?索引這么多優(yōu)點,為什么不對表中的每一個列創(chuàng)建一個索引呢?索引是如何提高查詢速度的?說一下使用索引的注意事項?Mysql索引主要使用的兩種數(shù)據(jù)結(jié)構(gòu)?什么是覆蓋索引?
為什么要使用索引?
通過創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性 。可以大大加快 數(shù)據(jù)的檢索速度(大大減少的檢索的數(shù)據(jù)量), 這也是創(chuàng)建索引的最主要的原因 。幫助服務(wù)器避免排序和臨時表將隨機IO變?yōu)轫樞騃O可以加速表和表之間的連接,特別是在實現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義 。
索引這么多優(yōu)點,為什么不對表中的每一個列創(chuàng)建一個索引呢?
當(dāng)對表中的數(shù)據(jù)進行增加、刪除和修改的時候,索引也要動態(tài)的維護,這樣就降低了數(shù)據(jù)的維護速度 。索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大 。創(chuàng)建索引和維護索引要耗費時間,這種時間隨著數(shù)據(jù)量的增加而增加 。
索引是如何提高查詢速度的?
將無序的數(shù)據(jù)變成相對有序的數(shù)據(jù)(就像查目錄一樣)
說一下使用索引的注意事項
避免 where 子句中對宇段施加函數(shù),這會造成無法命中索引 。在使用時使用與業(yè)務(wù)無關(guān)的自增主鍵作為主鍵,即使用邏輯主鍵,而不要使用業(yè)務(wù)主鍵 。將打算加索引的列設(shè)置為 NOT NULL,否則將導(dǎo)致引擎放棄使用索引而進行全表掃描刪除長期未使用的索引,不用的索引的存在會造成不必要的性能損耗 MySQL 5.7 可以通過查詢 sys 庫的視圖來查詢哪些索引從未被使用在使用 limit查詢緩慢時,可以借助索引來提高性能
Mysql索引主要使用的哪兩種數(shù)據(jù)結(jié)構(gòu)?
什么是覆蓋索引?
如果一個索引包含(或者說覆蓋)所有需要查詢的字段的值,我們就稱
之為“覆蓋索引” 。我們知道在存儲引擎中,如果不是主鍵索引,葉子節(jié)點存儲的是主鍵+列值 。最終還是要“回表”,也就是要通過主鍵再查找一次,這樣就會比較慢 。覆蓋索引就是把要查詢出的列和索引是對應(yīng)的,不做回表操作!
更多關(guān)于索引的內(nèi)容可以查看我的這篇文章:【思維導(dǎo)圖-索引篇】搞定數(shù)據(jù)庫索引就是這么簡單
8. 進程與線程的區(qū)別是什么?進程間的幾種通信方式說一下?線程間的幾種通信方式知道不?
進程與線程的區(qū)別是什么?
線程與進程相似 , 但線程是一個比進程更小的執(zhí)行單位 。一個進程在其執(zhí)行的過程中可以產(chǎn)生多個線程 。與進程不同的是同類的多個線程共享同一塊內(nèi)存空間和一組系統(tǒng)資源,所以系統(tǒng)在產(chǎn)生一個線程,或是在各個線程之間作切換工作時,負(fù)擔(dān)要比進程小得多,也正因為如此 , 線程也被稱為輕量級進程 。另外,也正是因為共享資源,所以線程中執(zhí)行時一般都要進行同步和互斥 。總的來說 , 進程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式 。
進程間的幾種通信方式說一下?
管道(pipe):管道是一種半雙工的通信方式,數(shù)據(jù)只能單向流動,而且只能在具有血緣關(guān)系的進程間使用 。進程的血緣關(guān)系通常指父子進程關(guān)系 。管道分為pipe(無名管道)和fifo(命名管道)兩種 , 有名管道也是半雙工的通信方式,但是它允許無親緣關(guān)系進程間通信 。信號量():信號量是一個計數(shù)器,可以用來控制多個進程對共享資源的訪問 。它通常作為一種鎖機制 , 防止某進程正在訪問共享資源時,其他進程也訪問該資源 。因此,主要作為進程間以及同一進程內(nèi)不同線程之間的同步手段 。消息隊列( queue):消息隊列是由消息組成的鏈表 , 存放在內(nèi)核中 并由消息隊列標(biāo)識符標(biāo)識 。消息隊列克服了信號傳遞信息少,管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點 。消息隊列與管道通信相比,其優(yōu)勢是對每個消息指定特定的消息類型,接收的時候不需要按照隊列次序 , 而是可以根據(jù)自定義條件接收特定類型的消息 。信號():信號是一種比較復(fù)雜的通信方式,用于通知接收進程某一事件已經(jīng)發(fā)生 。共享內(nèi)存( ):共享內(nèi)存就是映射一段能被其他進程所訪問的內(nèi)存,這段共享內(nèi)存由一個進程創(chuàng)建,但多個進程都可以訪問 , 共享內(nèi)存是最快的IPC方式,它是針對其他進程間的通信方式運行效率低而專門設(shè)計的 。它往往與其他通信機制,如信號量配合使用,來實現(xiàn)進程間的同步和通信 。套接字():套接口也是一種進程間的通信機制,與其他通信機制不同的是它可以用于不同及其間的進程通信 。
線程間的幾種通信方式知道不?
1、鎖機制
2、信號量機制:包括無名線程信號量與有名線程信號量
3、信號機制:類似于進程間的信號處理 。
線程間通信的主要目的是用于線程同步,所以線程沒有象進程通信中用于數(shù)據(jù)交換的通信機制 。
9. 為什么要用單例模式?手寫幾種線程安全的單例模式?
簡單來說使用單例模式可以帶來下面幾個好處:
懶漢式(雙重檢查加鎖版本)
靜態(tài)內(nèi)部類方式
靜態(tài)內(nèi)部實現(xiàn)的單例是懶加載的且線程安全 。
只有通過顯式調(diào)用方法時,才會顯式裝載類,從而實例化 (只有第一次使用這個單例的實例的時候才加載 , 同時不會有線程安全問題) 。
10. 簡單介紹一下bean 。知道的bean的作用域與生命周期嗎?
【附詳解答案 美團面經(jīng)總結(jié)基礎(chǔ)篇】在中,那些組成應(yīng)用程序的主體及由IOC 容器所管理的對象,被稱之為 bean 。簡單地講,bean 就是由 IOC 容器初始化、裝配及管理的對象,除此之外,bean 就與應(yīng)用程序中的其他對象沒有什么區(qū)別了 。而 bean 的定義以及 bean 相互間的依賴關(guān)系將通過配置元數(shù)據(jù)來描述 。
中的bean默認(rèn)都是單例的 , 這些單例Bean在多線程程序下如何保證線程安全呢? 例如對于Web應(yīng)用來說,Web容器對于每個用戶請求都創(chuàng)建一個單獨的線程來處理請求,引入框架之后,每個都是單例的,那么對于托管的單例 Bean,如何保證其安全呢? 的單例是基于也就是容器的,單例Bean在此容器內(nèi)只有一個 , Java的單例是基于 JVM,每個 JVM 內(nèi)只有一個實例 。
pring的bean的作用域
的bean的生命周期以及更多內(nèi)容可以查看:一文輕松搞懂中bean的作用域與生命周期
11.中的事務(wù)傳播行為了解嗎?n 接口中哪五個表示隔離級別的常量?
事務(wù)傳播行為
事務(wù)傳播行為(為了解決業(yè)務(wù)層方法之間互相調(diào)用的事務(wù)問題):
當(dāng)事務(wù)方法被另一個事務(wù)方法調(diào)用時,必須指定事務(wù)應(yīng)該如何傳播 。例如:方法可能繼續(xù)在現(xiàn)有事務(wù)中運行,也可能開啟一個新事務(wù),并在自己的事務(wù)中運行 。在n定義中包括了如下幾個表示傳播行為的常量:
支持當(dāng)前事務(wù)的情況:
不支持當(dāng)前事務(wù)的情況:
其他情況:
隔離級別
n 接口中定義了五個表示隔離級別的常量:
12.原理了解嗎?
原理
客戶端發(fā)送請求-> 前端控制器接受客戶端請求 -> 找到處理器映射解析請求對應(yīng)的 ->會根據(jù)來調(diào)用真正的處理器開處理請求 , 并處理相應(yīng)的業(yè)務(wù)邏輯 -> 處理器返回一個模型視圖-> 視圖解析器進行解析 -> 返回一個視圖對象->前端控制器渲染數(shù)據(jù)(Moder)->將得到視圖對象返回給用戶
關(guān)于原理更多內(nèi)容可以查看我的這篇文章: 工作原理詳解
13.AOP IOC 實現(xiàn)原理
過了秋招挺長一段時間了,說實話我自己也忘了如何簡要概括AOP IOC 實現(xiàn)原理,就在網(wǎng)上找了一個較為簡潔的答案,下面分享給各位 。
IOC: 控制反轉(zhuǎn)也叫依賴注入 。IOC利用java反射機制,AOP利用代理模式 。IOC 概念看似很抽象 , 但是很容易理解 。說簡單點就是將對象交給容器管理 , 你只需要在配置文件中配置對應(yīng)的bean以及設(shè)置相關(guān)的屬性,讓容器來生成類的實例對象以及管理對象 。在容器啟動的時候,會把你在配置文件中配置的bean都初始化好,然后在你需要調(diào)用的時候 , 就把它已經(jīng)初始化好的那些bean分配給你需要調(diào)用這些bean的類 。
AOP: 面向切面編程 。(- )。AOP可以說是對OOP的補充和完善 。OOP引入封裝、繼承和多態(tài)性等概念來建立一種對象層次結(jié)構(gòu)mysql索引類型都有哪些,用以模擬公共行為的一個集合 。實現(xiàn)AOP的技術(shù),主要分為兩大類:一是采用動態(tài)代理技術(shù),利用截取消息的方式mysql索引類型都有哪些,對該消息進行裝飾,以取代原有對象行為的執(zhí)行;二是采用靜態(tài)織入的方式,引入特定的語法創(chuàng)建“方面” , 從而使得編譯器可以在編譯期間織入有關(guān)“方面”的代碼,屬于靜態(tài)代理 。
原文:https://mp.weixin.qq.com/s/HDFzbAHP2bXCl1iOxa5wDg
本文到此結(jié)束,希望對大家有所幫助 。
- SQL語言:DDL、DML、DQL、DCL詳解
- 一般納稅人公司注冊流程詳解
- 上海動身住附近民宿,其實其實不是非常必要
- 建筑電氣供配電系統(tǒng)主接線圖詳解
- 庭審現(xiàn)場為何沒有書記員?答案在這里
- 科學(xué)主義與人本主義一定是對立的嗎?答案是否定的
- 第 12 代英特爾酷睿處理器發(fā)布詳解,這次牙膏都擠爆了
- 您知道嗎?OnRobot可提供各種工具/附件優(yōu)化您的協(xié)作應(yīng)用程序
- 第九課 《3D私塾小課堂》-123D Dseign 擠出命令詳解
- 心理學(xué)每日一題答案匯總篇
