摘要:解耦作用,線程的創(chuàng)建于執(zhí)行完全分開,方便維護(hù)。線程池是一種多線程處理形式,處理過程中將任務(wù)提交到線程池,任務(wù)的執(zhí)行交由線程池來管理。線程不安全就是不提供數(shù)據(jù)訪問保護(hù),有可能出現(xiàn)多個(gè)線程先后更改數(shù)據(jù)造成所得到的數(shù)據(jù)是臟數(shù)據(jù)。
線程池
首先要明確為什么要使用線程池,使用線程池會(huì)帶來什么好處?
? 線程是稀缺資源,不能頻繁的創(chuàng)建。
? 應(yīng)當(dāng)將其放入一個(gè)池子中,可以給其他任務(wù)進(jìn)行復(fù)用。
? 解耦作用,線程的創(chuàng)建于執(zhí)行完全分開,方便維護(hù)。
線程池是一種多線程處理形式,處理過程中將任務(wù)提交到線程池,任務(wù)的執(zhí)行交由線程池來管理。
如果每個(gè)請求都創(chuàng)建一個(gè)線程去處理,那么服務(wù)器的資源很快就會(huì)被耗盡,使用線程池可以減少創(chuàng)建和銷毀線程的次數(shù),每個(gè)工作線程都可以被重復(fù)利用,可執(zhí)行多個(gè)任務(wù)。
抽象類與接口區(qū)別
1.抽象類可以有構(gòu)造方法,接口中不能有構(gòu)造方法。
2.抽象類中可以有普通成員變量,接口中沒有普通成員變量!!!!!!!(注意重點(diǎn)在 普通 即 非靜態(tài) 和 變量!!!!)
3.抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。
悲觀鎖和樂觀鎖使用場景
樂觀鎖是在應(yīng)用層加鎖,而悲觀鎖是在數(shù)據(jù)庫層加鎖(for update)
樂觀鎖顧名思義就是在操作時(shí)很樂觀,這數(shù)據(jù)只有我在用,我先盡管用,最后發(fā)現(xiàn)不行時(shí)就回滾。
悲觀鎖在操作時(shí)很悲觀,生怕數(shù)據(jù)被其他人更新掉,我就先將其先鎖住,讓別人用不了,我操作完成后再釋放掉。
悲觀鎖需要數(shù)據(jù)庫級別上的的實(shí)現(xiàn),程序中是做不到的,如果在長事務(wù)環(huán)境中,數(shù)據(jù)會(huì)一直被鎖住,導(dǎo)致并發(fā)性能大大地降低。
一般來說如果并發(fā)量很高的話,建議使用悲觀鎖,否則的話就使用樂觀鎖。
如果并發(fā)量很高時(shí)使用樂觀鎖的話,會(huì)導(dǎo)致很多的并發(fā)事務(wù)回滾、操作失敗。
總之,沖突幾率大用悲觀,小就用樂觀。
樂觀鎖不會(huì)發(fā)生并發(fā)搶占資源
在多用戶環(huán)境中,在同一時(shí)間可能會(huì)有多個(gè)用戶更新相同的記錄,這會(huì)產(chǎn)生沖突。這就是著名的并發(fā)性問題。
1.悲觀鎖:指的是對數(shù)據(jù)被外界(包括本系統(tǒng)當(dāng)前的其他事務(wù),以及來自外部系統(tǒng)的事務(wù)處理)修改持保守態(tài)度,因此,在整個(gè)數(shù)據(jù)處理過程中,將數(shù)據(jù)處于鎖定狀態(tài)
2.樂觀鎖:假設(shè)不會(huì)發(fā)生并發(fā)沖突,只在提交操作時(shí)檢查是否違反數(shù)據(jù)完整性。樂觀鎖不能解決臟讀的問題。
線程安全就是多線程訪問時(shí),采用了加鎖機(jī)制,當(dāng)一個(gè)線程訪問該類的某個(gè)數(shù)據(jù)時(shí),進(jìn)行保護(hù),其他線程不能進(jìn)行訪問直到該線程讀取完,其他線程才可使用。不會(huì)出現(xiàn)數(shù)據(jù)不一致或者數(shù)據(jù)污染。
線程不安全就是不提供數(shù)據(jù)訪問保護(hù),有可能出現(xiàn)多個(gè)線程先后更改數(shù)據(jù)造成所得到的數(shù)據(jù)是臟數(shù)據(jù)。
死鎖和臟數(shù)據(jù)就是典型的線程安全問題。
簡單來說,線程安全就是: 在多線程環(huán)境中,能永遠(yuǎn)保證程序的正確性。
只有存在共享數(shù)據(jù)時(shí)才需要考慮線程安全問題。
多線程會(huì)引出很多難以避免的問題, 如死鎖,臟數(shù)據(jù),線程管理的額外開銷,等等。更大大增加了程序設(shè)計(jì)的復(fù)雜度。
在Java 8 中,如果一個(gè)桶中的元素個(gè)數(shù)超過 TREEIFY_THRESHOLD(默認(rèn)是 8 ),就使用紅黑樹來替換鏈表
java內(nèi)存區(qū)域:
hashmap
key value
初始化容量 1左移4位16容量 2的4次方
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
加載因子系數(shù)
1分成4等分0.25 0.25*3=0.75 在容量的3/4(0.75)的時(shí)候擴(kuò)容
static final float DEFAULT_LOAD_FACTOR = 0.75f;
HashMap和Hashtable的區(qū)別
HashMap沒有考慮同步,是線程不安全的;Hashtable使用了synchronized關(guān)鍵字,是線程安全的
前者允許null作為key,后者不允許null作為key
從ConcurrentHashMap代碼中可以看出,它引入了一個(gè)“分段鎖”的概念,具體可以理解為把一個(gè)大的Map拆分成N個(gè)小的HashTable,根據(jù)key.hashCode()來決定把key放到哪個(gè)HashTable中。
在ConcurrentHashMap中,就是把Map分成了N個(gè)Segment,put和get的時(shí)候,都是現(xiàn)根據(jù)key.hashCode()算出放到哪個(gè)Segment中,ConcurrentHashMap中默認(rèn)是把segments初始化為長度為16的數(shù)組。通過把整個(gè)Map分為N個(gè)Segment(類似HashTable),可以提供相同的線程安全,但是效率提升N倍,默認(rèn)提升16倍。
HashMap的底層實(shí)現(xiàn)
Java8之前,其底層實(shí)現(xiàn)是數(shù)組+鏈表實(shí)現(xiàn),Java8使用了數(shù)組+鏈表+紅黑樹實(shí)現(xiàn)
ConcurrentHashMap的具體實(shí)現(xiàn)
1、該類包含兩個(gè)靜態(tài)內(nèi)部類HashEntry(節(jié)點(diǎn))和Segment(桶);前者用來封裝映射表的鍵值對,后者用來充當(dāng)鎖的角色
List有序 可以重復(fù) set無序不可以重復(fù)
ArrayList的初始容量10 加載因子0.5
Vector的初始容量10 加載因子1
HashSet的初始容量為16,加載因子0.75
HashMap的初始容量為16,加載因子0.75 擴(kuò)容增量:原容量的1倍
數(shù)據(jù)庫索引原理
索引原理必須清楚一種數(shù)據(jù)結(jié)構(gòu)「平衡樹」(非二叉),也就是b tree或者 b+ tree,重要的事情說三遍:“平衡樹,平衡樹,平衡樹”。當(dāng)然, 有的數(shù)據(jù)庫也使用哈希桶作用索引的數(shù)據(jù)結(jié)構(gòu) , 然而, 主流的RDBMS都是把平衡樹當(dāng)做數(shù)據(jù)表默認(rèn)的索引數(shù)據(jù)結(jié)構(gòu)的。
線程和進(jìn)程的區(qū)別
1、進(jìn)程是一個(gè)“執(zhí)行中的程序”,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位;
2、線程是進(jìn)程的一個(gè)實(shí)體,一個(gè)進(jìn)程中擁有多個(gè)線程,線程之間共享地址空間和其它資源
volatile關(guān)鍵字
該關(guān)鍵字可以保證可見性不保證原子性
ThreadLocal關(guān)鍵字
當(dāng)使用ThreadLocal維護(hù)變量時(shí),其為每個(gè)使用該變量的線程提供獨(dú)立的變量副本,所以
每一個(gè)線程都可以獨(dú)立的改變自己的副本,而不影響其他線程對應(yīng)的副本
線程池
java.util.concurrent.ThreadPoolExecutor類就是一個(gè)線程池??蛻舳苏{(diào)用
ThreadPoolExecutor.submit(Runnabletask)提交任務(wù)
JVM劃分
1、方法區(qū):常量、靜態(tài)變量、即時(shí)編譯器
2、堆內(nèi)存:垃圾回收的主要場所
3、程序計(jì)數(shù)器
4、虛擬機(jī)棧(棧內(nèi)存):保存局部變量、基本數(shù)據(jù)類型變量以及堆內(nèi)存中某個(gè)對象的引用變量
5、本地方法棧
垃圾回收算法有哪些
1、引用計(jì)數(shù)
2、標(biāo)記-清除 分兩個(gè)階段 第一階段從引用根節(jié)點(diǎn)開始標(biāo)記所有被引用的對象,第二階段遍歷整個(gè)堆,把未標(biāo)記的對象清除。
GC經(jīng)常發(fā)生的區(qū)域是堆區(qū),堆區(qū)還可以細(xì)分為新生代、老年代、
內(nèi)存溢出 內(nèi)存泄露是導(dǎo)致內(nèi)存溢出的原因之一
NIO和IO的主要區(qū)別
IO 面向流 阻塞IO
NIO 面向緩沖區(qū) 非阻塞IO 選擇器 選擇一個(gè)通道
雙親委派模型
(1).BootStrap ClassLoader:啟動(dòng)類加載器,負(fù)責(zé)加載存放在%JAVA_HOME%lib目錄中的
(2).Extension ClassLoader:擴(kuò)展類加載器,由sun.misc.Launcher$ExtClassLoader實(shí)現(xiàn),負(fù)責(zé)加載%JAVA_HOME%libext目錄中的
(3).Application ClassLoader:應(yīng)用程序類加載器,由sun.misc.Launcher$AppClassLoader實(shí)現(xiàn),負(fù)責(zé)加載用戶類路徑classpath上所指定的類庫
Java8新特性
1、Lambda表達(dá)式允許我們將函數(shù)當(dāng)成參數(shù)傳遞給某個(gè)方法
2、函數(shù)式接口@Functionallnterface來標(biāo)明該接口是一個(gè)函數(shù)式接口
3、引入重復(fù)注解@Repeatable
4、接口中可以實(shí)現(xiàn)方法default方法
5、注解的使用場景拓寬
6、新的包java.time包
dubbo
Provider在容器里面進(jìn)行啟動(dòng),啟動(dòng)之后往服務(wù)中心進(jìn)行服務(wù)一個(gè)注冊,然后Consume訂閱之前注冊過的服務(wù),如果服務(wù)發(fā)生改變注冊中心會(huì)通知Consume,Consume拿到訂閱關(guān)系之后就直接invoke調(diào)用Provider同時(shí)有個(gè)Monitor監(jiān)控他們的調(diào)用情況
會(huì)員中心調(diào)用訂單中心
訂單需要提供一個(gè)接口給會(huì)員調(diào)用
Consumer:192.168.0-.192/com.tl.IOrderService?application=UserCp
數(shù)據(jù)庫索引作用 底層數(shù)據(jù)結(jié)構(gòu) 為什么使用這種結(jié)構(gòu)
索引 是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),使用索引可快速訪問數(shù)據(jù)庫表中的特定信息
底層數(shù)據(jù)結(jié)構(gòu)B+樹
使用B+樹的原因:查找速度快,效率高,
聚集索引和非聚集索引根本區(qū)別
是表記錄的排列順序和與索引的排列順序是否一致
聚集索引表記錄的排列順序和索引的排列順序一致
非聚集索引制定了表中記錄的邏輯順序,但是記錄的物理和索引不一定一致
MyISAM和InnoDB的區(qū)別
MyISAM不支持事務(wù),InnoDB是事務(wù)類型的存儲(chǔ)引擎
MyISAM只支持表級鎖InnoDB支持行級鎖和表級鎖
MyISAM不支持外鍵InnoDB支持外鍵
MyISAM支持全文索引InnoDB不支持
MyISAM表不支持事務(wù)、不支持行級鎖、不支持外鍵
InnoDB表支持事務(wù)、支持行級鎖、支持外鍵
Spring 知識點(diǎn)
Spring 的 IOC 和 AOP
? IOC:控制反轉(zhuǎn),(解耦合)將對象間的依賴關(guān)系交給 Spring 容器,使用配置文件來創(chuàng)建所依賴的對象,由主動(dòng)創(chuàng)建對象改為了被動(dòng)方式;
? AOP:面向切面編程,將功能代碼從業(yè)務(wù)邏輯代碼中分離出來;
AOP 的實(shí)現(xiàn)方式有哪幾種?如何選擇?
JDK 動(dòng)態(tài)代理實(shí)現(xiàn)和 cglib 實(shí)現(xiàn)
選擇:
如果目標(biāo)對象實(shí)現(xiàn)了接口,默認(rèn)情況下會(huì)采用 JDK 的動(dòng)態(tài)代理實(shí)現(xiàn) AOP,也可以強(qiáng)制使用 cglib 實(shí)現(xiàn) AOP;
如果目標(biāo)對象沒有實(shí)現(xiàn)接口,必須采用 cglib 庫,Spring 會(huì)自動(dòng)在 JDK 動(dòng)態(tài)代理和 cglib 之間轉(zhuǎn)換。
擴(kuò)展:JDK 動(dòng)態(tài)代理如何實(shí)現(xiàn)
JDK 動(dòng)態(tài)代理,只能對實(shí)現(xiàn)了接口的類生成代理,而不是針對類,該目標(biāo)類型實(shí)現(xiàn)的接口都將被代理。
原理是通過在運(yùn)行期間創(chuàng)建一個(gè)接口的實(shí)現(xiàn)類來完成對目標(biāo)對象的代理
Mybatis 知識點(diǎn)
關(guān)于 MyBatis 主要考察占位符#和 $ 的區(qū)別,區(qū)別如下:
符號將傳入的數(shù)據(jù)都當(dāng)做一個(gè)字符串,會(huì)對自動(dòng)傳入的數(shù)據(jù)加一個(gè)雙引號;
$ 符號將傳入的數(shù)據(jù)直接顯示生成 SQL 中;
符號存在預(yù)編譯的過程,對問號賦值,防止 SQL 注入;
$符號是直譯的方式,一般用在 order by ${列名}語句中;
能用#號就不要用 $ 符號
Linux常用命令
文件和目錄:
pwd 顯示當(dāng)前目錄
ls 顯示當(dāng)前目錄下的文件和目錄:
ls -F 可以區(qū)分文件和目錄;
ls -a 可以把隱藏文件和普通文件一起顯示出來;
ls -R 可以遞歸顯示子目錄中的文件和目錄;
ls -l 顯示長列表
ls -l test 過濾器,查看某個(gè)特定文件信息。可以只查看 test 文件的信息
處理文件方面的命令有:touch、cp、 In、mv、rm
處理目錄方面的命令:mkdir
查看文件內(nèi)容:file、cat、more、less、tail、head
eg. 找出進(jìn)程名中包括 java 的所有進(jìn)程:ps -ef | grep java
top 命令 實(shí)時(shí)監(jiān)測進(jìn)程
壓縮數(shù)據(jù)
tar -xvf 文件名
tar -zxvf 文件名
tar -cvzf 文件名
結(jié)束進(jìn)程:kill PID 或者 kill all
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/73218.html
摘要:好不容易在月號這天中午點(diǎn)左右接到了來自阿里的面試電話。這里會(huì)不斷收集和更新基礎(chǔ)相關(guān)的面試題,目前已收集題。面試重難點(diǎn)的和的打包過程多線程機(jī)制機(jī)制系統(tǒng)啟動(dòng)過程,啟動(dòng)過程等等掃清面試障礙最新面試經(jīng)驗(yàn)分享,此為第一篇,開篇。 2016 年末,騰訊,百度,華為,搜狗和滴滴面試題匯總 2016 年未,騰訊,百度,華為,搜狗和滴滴面試題匯總 各大公司 Java 后端開發(fā)面試題總結(jié) 各大公司 Jav...
摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語言和等其他語言的對比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動(dòng)化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯(cuò)過的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...
摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語言和等其他語言的對比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動(dòng)化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯(cuò)過的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...
摘要:一基礎(chǔ)接口的意義百度規(guī)范擴(kuò)展回調(diào)抽象類的意義想不想通過一線互聯(lián)網(wǎng)公司面試文檔整理為電子書掘金簡介谷歌求職記我花了八個(gè)月準(zhǔn)備谷歌面試掘金原文鏈接翻譯者 【面試寶典】從對象深入分析 Java 中實(shí)例變量和類變量的區(qū)別 - 掘金原創(chuàng)文章,轉(zhuǎn)載請務(wù)必保留原出處為:http://www.54tianzhisheng.cn/... , 歡迎訪問我的站點(diǎn),閱讀更多有深度的文章。 實(shí)例變量 和 類變量...
閱讀 1821·2021-10-09 09:44
閱讀 2694·2021-09-22 15:38
閱讀 2459·2021-09-09 09:33
閱讀 692·2021-09-07 09:58
閱讀 1791·2021-09-02 15:41
閱讀 2499·2019-08-30 15:55
閱讀 1798·2019-08-30 15:55
閱讀 541·2019-08-30 15:44