網商銀行一面涼經
- 自我介紹
- 介紹了一下項目
- JDK的集合源碼,ArrayList和LinkList的區別,HashMap源碼的介紹
- JVM的內存模型
- 垃圾回收機制
- Spring的IOC和AOP原理
- AOP的應用範圍
- 事務的應用例子
- 什麼情況下要建立索引
建立索引需要注意的事項
只爲用於搜索、排序或分組的列創建索引
爲列的基數大的列創建索引
索引列的類型儘量小
可以只對字符串值的前綴建立索引
只有索引列在比較表達式中單獨出現纔可以適用索引
爲了儘可能少的讓聚簇索引發生頁面分裂和記錄移位的情況,建議讓主鍵擁有AUTO_INCREMENT屬性。
具體可以參考InnoDB如果沒有主鍵或者隨機主鍵真的很可怕嗎?,這篇文章中的數據
定位並刪除表中的重複和冗餘索引
儘量適用覆蓋索引進行查詢,避免回錶帶來的性能損耗。
- Mysql的底層實現
- 死鎖的原因
- 幾種排序的區別
- web項目攻擊的解決方案
SQL 注入問題
常見情況:
-
在用戶名,密碼登陸的時候,在密碼欄輸入
' OR '1'='1
,那就會導致可以不通過密碼直接登陸預防措施
-
服務端Filter對訪問者輸入的字符進行過濾檢驗,但是攻擊者經常把危險字符潛藏在用戶輸入的有效字符中完 成過濾檢驗。
-
對進入數據庫的特殊字符(
'"\尖括號&*
;等)進行轉義處理,或編碼轉換。 -
通過正則表達式對頁面的文本框輸入的數據進行限制可以減少過濾檢驗存在的漏洞。
-
使用prepareStatment預編譯sql語句
XSS
XSS攻擊:跨站腳本攻擊(Cross-Site Scripting)。XSS的攻擊目標是爲了盜取存儲在客戶端的cookie或者其他網站用於識別客戶端身份的敏感信息。一旦獲取到合法用戶的信息後,攻擊者甚至可以假冒合法用戶與網站進行交互。
存儲型XSS: 主要出現在讓用戶輸入數據,供其他瀏覽此頁的用戶進行查看的地方,包括留言、評論、博客日誌和各類表單等。應用程序從數據庫中查詢數據,在頁面中顯示出來,攻擊者在相關頁面輸入惡意的腳本數據後,用戶瀏覽此類頁面時就可能受到攻擊。
反射型XSS: 主要做法是將腳本代碼加入URL地址的請求參數裏,請求參數進入程序後在頁面直接輸出,用戶點擊類似的惡意鏈接就可能受到攻擊。
預防措施
-
過濾特殊字符
避免XSS的方法之一主要是將用戶所提供的內容進行過濾(如上面的script
標籤)。 -
使用HTTP頭指定類型
w.Header().Set("Content-Type","text/javascript")
這樣就可以讓瀏覽器解析javascript代碼,而不會是html輸出。
DDOS
DDOS:分佈式拒絕服務攻擊(Distributed Denial of Service),簡單說就是發送大量請求是使服務器癱瘓。
在技術角度上,DDoS攻擊可以針對網絡通訊協議的各層,手段大致有:TCP類的SYN Flood、ACK Flood,UDP類的Fraggle、Trinoo,DNS Query Flood,ICMP Flood,Slowloris類等等。
SYN攻擊
在三次握手過程中,服務器發送 SYN-ACK
之後,收到客戶端的 ACK
之前的 TCP 連接稱爲半連接(half-open connect)。此時服務器處於 SYN_RCVD
狀態。當收到 ACK 後,服務器才能轉入 ESTABLISHED
狀態.
SYN
攻擊指的是,攻擊客戶端在短時間內僞造大量不存在的IP地址,向服務器不斷地發送SYN
包,服務器回覆確認包,並等待客戶的確認。由於源地址是不存在的,服務器需要不斷的重發直至超時,這些僞造的SYN
包將長時間佔用未連接隊列,正常的SYN
請求被丟棄,導致目標系統運行緩慢,嚴重者會引起網絡堵塞甚至系統癱瘓。
DDOS的預防方法
-
把網站做成靜態頁面或者僞靜態
-
擴大帶寬
-
HTTP 請求的攔截
HTTP 請求的特徵一般有兩種:IP 地址和 User Agent 字段。比如,惡意請求都是從某個 IP 段發出的,那麼把這個 IP 段封掉就行。或者,它們的 User Agent 字段有特徵(包含某個特定的詞語),那就把帶有這個詞語的請求攔截。
-
隱藏服務器真實IP
CSRF
CSRF(Cross-site request forgery),中文名稱:跨站請求僞造。
你這可以這麼理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發送惡意請求。CSRF能夠做的事情包括:以你名義發送郵件,發消息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬…造成的問題包括:個人隱私泄露以及財產安全。
預防方法
Hash加密cookie中csrf_token值
參考資料
Java網絡安全系列面試題常見web攻擊有哪些
15. 進程和線程的區別
16. 事務的隔離級別
17. 線程不安全的例子
18. 有沒有讀過框架的源碼
- 有沒有比較熟悉的技術
第一次面試太緊張了,3/19號投的簡歷,3/20上午的筆試,下午就打電話面試,好突然。
問的問題都是比較基礎的,可惜我沒怎麼答好。
3.29二面
- 自我介紹
- JVM的內存結構
- 有沒有碰到過內存泄漏(強行引到了ThreadLocal)
- 怎麼排查java內存泄漏問題
- GC算法
- 老年代回收的時候什麼時候會暫停整個線程
- 用過哪些java併發包
- CAS
- HashMap的底層實現
- 怎麼理解負載因子0.75
- 線程池怎麼創建,有哪些參數
- 有哪些拒絕策略
- 如何實現一個本地的LRU算法
LinkHashMap或者HashMap+雙向鏈表,也不知道面試官是不是這個意思
14. 有沒有用過redis
15. 高效讀取一個1000萬行的文件,每行一個數字,如何快速求和
我現在的想法就是使用ForkJoin的並行框架,充分利用多核CPU的優勢.多線程讀取
- 數據庫的索引,聯合索引,最左匹配原則
- 數據庫的事務隔離級別
- 從瀏覽器到頁面顯示的過程,請求到了企業服務端會做點什麼(不知道咋答,講了一個NAT),服務器怎麼響應數據
現在看來,我感覺面試官主要是想問我ARP協議
至於後面服務器響應應該是MVC
控制器會接受請求嗎,委託模型完成任務,然後返回視圖 - 洗牌算法
- 講了一下ACM的經歷
- 有關心哪些技術
騰訊音樂
4.3 一面
- 鏈表判環
- top k問題
- 判斷一個數是2的冪次
- unix的5中IO模型
- HashMap的處理哈希衝突
- HashMap有兩個線程,一個讀,一個寫造成什麼問題
- concurrentHashMap的線程安全
- Integer的equal
- 設計模式實現線程安全
- java的IO的設計模式及優點
- java1.8的內存模型
- 引用計數方法的問題
- 大對象如何分配,在G1垃圾收集器如何分配
- 死鎖,如何製造死鎖,如何定位死鎖(不懂,好像是一個工具)
- MySQL索引的底層數據結構
- 幾種join的區別
- 緩存的淘汰策略(LRU之類的)
- 定期淘汰策略和惰性淘汰策略
- TIME_WAIT,如何解決大量TIME_WAIT的情況
- LINUX的內存分佈
3.15 OOCL一面
3.16 微衆銀行一面
3.17 網易杭研一面