1、JVM中鎖的關鍵字
1.1 synchronized
- ① 作用範圍:
代碼塊
方法(修飾普通方法鎖的對象預設是目前對象this,修飾靜态方法預設鎖的是目前類)
類(修飾類時,所有線程需要的鎖是同一把)
- ② 是如何保證線程安全的?
加鎖和釋放鎖的原理
可重入原理:加鎖次數計數器
可見性原理:記憶體模型+happens-before
- ③ 重量級鎖,如何優化?
鎖的更新:無鎖—>偏向鎖—>自旋鎖—>重量級鎖
鎖的優化技術:鎖粗化、鎖消除、輕量級鎖、偏向鎖、适應性自旋
- ④ synchronized的缺陷,Lock是怎麼彌補的?
缺陷:
1、效率低:
- 隻有代碼執行完畢或者異常結束才會釋放鎖; (鎖的釋放)
- 并且試圖擷取鎖的時候不能設定逾時; (逾時設定)tryLock
- 不能中斷一個正在使用鎖的線程 (線程中斷) ReentrantLock的lockInterruptibly()方法可以優先考慮響應中斷
2、不夠靈活:
- 加鎖和釋放鎖的時機單一,每個鎖隻有單一的條件,讀寫鎖更加靈活。
3、無法知道是否成功獲得鎖
- Lock可以拿到狀态 Condition與Lock的結合
2、如何程式設計判斷大小端?
小端:高位放高位元組,低位放低位元組
大端:高位放低位元組,低位放高位元組
#include <stdio.h>
union node
{
int num;
char ch;
};
void big_small(union node p)
{
p.num = 0x12345678;
if(p.ch == 0x78)
{
printf("It is small-endian.\n");
}
else
{
printf("It is big-endian.\n");
}
}
int main()
{
union node p;
big_small(p);
return 0;
}
3、程序和線程
同一程序的線程:
- 共享:該程序的全部系統資源,如虛拟位址空間、檔案描述符、信号處理
- 獨享:棧、寄存器環境、線程本地存儲
4、MyISAM和InnoDB的差別
- M不支援事務,Inno可以
- M支援全文索引,Inno不可以
- M支援表級鎖,Inno支援行級鎖
-
M效率更優,Inno更安全
綜合以上,M适管理非事務表,高速存儲、檢索、全文搜尋;Inno用于事務處理應用程式(ACID事務支援),多使用者并發操作。
5、聚集索引和非聚集索引的差別
參考拼音查詢和偏旁查詢
聚集索引:正文内容本身就是一種按照一定規則排列的目錄(實體上連續),查詢資料速度快,插入速度慢;(一個表隻有一個)
非聚集索引:邏輯上連續,實體上不連續,查詢資料速度慢,插入速度快。
6、IO多路複用
https://www.cnblogs.com/yanguhung/p/10145755.html