今天上午去京東面試,通過了三輪面試最終仍是被(HR)告知 回家等消息吧.mysql
先說一下 各個 面試官都問了啥吧:linux
記性很差 我就不一一羅列了,就直接整理一下全部的問題吧.面試
1.先來個 排序算法 熱熱身算法
分析:sql
2.聊一下 併發庫相關,數據庫
2.1 說一下 線程安全地隊列數組
分析:ConcurrentLinkedQueue、ArrayBlockingQueue、LinkedBlockingQueue安全
2.2 說一下 線程安全的數據結構 本身知道的性能優化
分析:按照 不一樣的數據結構分類說服務器
數據結構 | 線程安全的實現類 |
map | ConcurrentHashMap ConcurrentSkipListMap |
set | ConcurrentSkipListSet CopyOnWriteArraySet |
list | CopyOnWriteArrayList |
queue | ConcurrentLinkedQueue ArrayBlockingQueue LinkedBlockingQueue LinkedTransferQueue PriorityBlockingQueue SynchronousQueue |
deue | ConcurrentLinkedDeque LinkedBlockingDeque |
2.3 說一下 AtomicInteger 的 實現(具體說一下 自增是怎麼實現的線程安全的)
分析:
public final int getAndIncrement() {
return unsafe.getAndAddInt(this, valueOffset, 1);
}
2.4 還問了一下SynchronousQueue,這個我沒回答好
分析:
3.map的實現
分析:
3.1hashmap的新節點是添加到什麼地方(鏈頭仍是鏈尾)
分析:這個題巨坑啊,還要分版本1.8以前都是添加到鏈表的頭部,1.8以後是添加到尾部
JDK7U79的版本table[bucketIndex] = new Entry<>(hash, key, value, e);
JDK8U60的版本p.next = newNode(hash, key, value, null);
4.2個FIFO隊列實現棧的效果,簡單來講就是abc逆序打印
分析:2個FIFO隊列分別是F1,F2
先把abc依次放到F1,再把ab依次取出並放回到F1,那麼F1的順序如今是bac,
將c放到F2,再將a取出放回F1,那麼F1如今的順序是ab,
再將ab依次從F1中取出放到F2,這時從F2取出的順序就是 c,b,a
5.sqlserver和mysql的區別
分析:
6.mysql中myisam和InnoDB在索引上的區別
分析:
MyISAM | InnoDB |
使用前綴壓縮技術是的索引更小 | 按照原數據格式進行存儲 |
經過數據的物理位置引用被索引的行 | 經過主鍵引用被索引的行 |
myisam記錄的直接是文件的offset | InnoDB尋址要映射到塊,再到行 |
自適應哈希索引,是系統對熱點索引 自動建立的內部行爲, 用戶沒法控制或者配置 |
|
6.1MySQL存儲引擎MyISAM與InnoDB的優劣(本身引伸出來的題)
MyISAM | InnoDB | |
存儲結構 | 每張表被存放在三個文件:frm-表格定義 MYD(MYData)-數據文件 MYI(MYIndex)-索引文件 |
全部的表都保存在同一個數據文件中(也多是多個文件,或者是獨立的表空間文件),InnoDB表的大小隻受限於操做系統文件的大小,通常爲2GB |
存儲空間 | MyISAM可被壓縮,存儲空間較小 | InnoDB的表須要更多的內存和存儲,它會在主內存中創建其專用的緩衝池用於高速緩衝數據和索引 |
可移植性、備份及恢復 | 因爲MyISAM的數據是以文件的形式存儲,因此在跨平臺的數據轉移中會很方便。在備份和恢復時可單獨針對某個表進行操做 | 免費的方案能夠是拷貝數據文件、備份 binlog,或者用 mysqldump,在數據量達到幾十G的時候就相對痛苦了 |
事務安全 | 不支持 每次查詢具備原子性 | 支持 具備事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表 |
AUTO_INCREMENT | MyISAM表能夠和其餘字段一塊兒創建聯合索引 | InnoDB中必須包含只有該字段的索引 |
SELECT | MyISAM更優 | |
INSERT | InnoDB更優 | |
UPDATE | InnoDB更優 | |
DELETE | InnoDB更優 它不會從新創建表,而是一行一行的刪除 | |
COUNT without WHERE | MyISAM更優。由於MyISAM保存了表的具體行數 | InnoDB沒有保存表的具體行數,須要逐行掃描統計,就很慢了 |
COUNT with WHERE | 同樣 | 同樣,InnoDB也會鎖表 |
鎖 | 只支持表鎖 | 支持表鎖、行鎖 行鎖大幅度提升了多用戶併發操做的新能。可是InnoDB的行鎖,只是在WHERE的主鍵是有效的,非主鍵的WHERE都會鎖全表的 |
外鍵 | 不支持 | 支持 |
FULLTEXT全文索引 | 支持 | 不支持 能夠經過使用Sphinx從InnoDB中得到全文索引,會慢一點 |
7.treemap實現原理,如何實現的有序
分析:以二叉樹實現treemap,內部組合compare來實現比較和排序,
8.mysql優化
分析:從幾個方面來談
數據庫引擎 | InnoDB支持事務 |
數據庫字段選擇 | |
索引優化 | |
查詢性能優化 | |
分表分庫 | |
mysql服務器優化 | |
操做系統和硬件優化 | |
主從設置 | |
9.一個十億行記錄的文本,如何從中查詢是否含有某個字符串
分析:從網上搜到 有人說用
lucene
compass(我沒見過這個東西)
用搜索引擎進行搜索 。如:elasticsearch, solar。
10.查詢某個壓縮包中壓縮的文本文件中是否含有某個字符串
分析:
11.如何經過linux命令將一個文件傳輸到另一臺服務
分析:scp
12.問到了mq,不過我確實是沒作過也沒看過,因此就沒往下問
13.判斷鏈表有環
分析:
方案1:
遍歷鏈表中每個 節點,而後放到一個 hashmap(我面試當時說的是數組)中,而後key重複了就說明有環.
方案2:
參考下面代碼,利用temp2 步子大,跑得快,能夠 套temp1的圈,總會有碰到 的時候(這個時候不必定就是 交叉的那個環點).
public static boolean hasLoop(Node n) {
// 定義兩個指針tmp1,tmp2
Node tmp1 = n;
Node tmp2 = n.next;
while (tmp2 != null) {
tmp1 = tmp1.next; // 每次迭代時,指針1走一步,指針2走兩步
tmp2 = tmp2.next.next;
if (tmp2 == null)
return false;// 不存在環時,退出
int d1 = tmp1.val;
int d2 = tmp2.val;
if (d1 == d2)
return true;// 當兩個指針重逢時,說明存在環,不然不存在。
}
return true; // 若是tmp2爲null,說明元素只有一個,也能夠說明是存在環
}
14.寫一段sql,實現相似於if else的功能,好比判斷是否含有某條記錄,有則更新,無則追加.
分析:這個須要用到存儲過程:
15.代碼審查,代碼走查等,工具
16.單元測試,Junit,mock
17.異常和錯誤的繼承關係,並說幾種運行時異常
分析:
18.dubbo服務提供者中的異常設置,消費者捕獲後如何處理
分析:
18.1根據不一樣狀況拋出不一樣的異常信息,包含自定義異常
18.2好比根據不一樣的自定義異常來判斷是否須要回滾或者重試等