牛頓說過“無論做什麼事情,只要肯努力奮鬥,是沒有不成功的”。我也一直把這句話當做自己的座右銘,這句箴言在今年也徹底在“我”身上實現了 。
每一個程序員都擁有一個大廠夢,我肯定也不例外的,去年面試阿里巴巴,竟然被MySQL問倒了,很多相關性的問題都沒有答上來,才2面就涼涼了。回去之後也潛心複習了,準備了二戰,如今終於進入了阿里巴巴,被錄用。
以下展示的阿里巴巴面試題(含答案)、學習資料、實戰文檔等
01 阿里巴巴面試題之MySQL
之前的阿里面試題都有做總結,具體面試題內容整理成了文檔,本文是針對MySQL系列的,所以下面只展示了自己第一次面試阿里時被吊打問到的一些MySQL難題
- 請解釋關係型數據庫概念及主要特點?
- 請說出關係型數據庫的典型產品、特點及應用場景?
- 請詳細描述 SQL 語句分類及對應代表性關鍵字。
- 什麼是 MySQL 多實例,如何配置 MySQL 多實例?
- 如何加強 MySQL 安全,請給出可行的具體措施?
- 誤操作執行了一個 drop 庫 SQL 語句,如何完整恢復?
- 詳述 MySQL 主從複製原理及配置主從的完整步驟。
- MySQL 如何實現雙向互爲主從複製,並說明應用場景?
- MySQL 如何實現級聯同步,並說明應用場景?
- MySQL 主從複製故障如何解決?
02 二戰阿里,天貓團隊面試題(3輪技術面+HR面)
阿里巴巴面試技術題:
- 自我介紹唄
- 項目介紹唄(先自己介紹項目,然後再聊天)
- junit用法,before,beforeClass,after,afterClass的執行順序
- 分佈式鎖
- nginx的請求轉發算法,如何配置根據權重轉發
- 用hashmap實現redis有什麼問題(死鎖,死循環,可用ConcurrentHashmap)
- 線程的狀態
- 線程的阻塞的方式
- sleep和wait的區別
- hashmap的底層實現
- 一萬個人搶100個紅包,如何實現(不用隊列),如何保證2個人不能搶到同一個紅包,可用分佈式鎖
- Java內存模型,垃圾回收機制,不可達算法
- 兩個Integer的引用對象傳給一個swap方法在方法內部交換引用,返回後,兩個引用的值是否會發現變化
- AOP的底層實現,動態代理是如何動態,假如有100個對象,如何動態的爲這100個對象代理?
- 是否用過maven install、 maven test、git(make install是安裝本地jar包)
- Tomcat的各種配置,如何配置docBase
- Spring的bean配置的幾種方式
- Web.xml的配置
- Spring的監聽器。
- Zookeeper的實現機制,有緩存,如何存儲註冊服務的
- IO會阻塞嗎?readLine是不是阻塞的
- 用過 Spring的線程池還是java的線程池?
- 字符串的格式化方法 (20,21這兩個問題問的太低級了)
- 時間的格式化方法
- 定時器用什麼做的
- 線程如何退出結束
- java有哪些鎖?樂觀說 悲觀鎖 synchronized 可重入鎖 讀寫鎖,用過reentrantlock嗎?reentrantlock與synmchronized的區別
- ThreadLocal的使用場景
- Java的內存模型,垃圾回收機制
- 爲什麼線程執行要調用start而不是直接run(直接run,跟普通方法沒什麼區別,先調start,run纔會作爲一個線程方法運行)
- qmq消息的實現機制(qmq是去哪兒網自己封裝的消息隊列)
- 遍歷hashmap的三種方式
- JVM的一些命令
- memcache和redis的區別
- Mysql的行級鎖加在哪個位置
- ConcurrentHashmap的鎖是如何加的?是不是分段越多越好
- myisam和innodb的區別(innodb是行級鎖,myisam是表級鎖)
- MySQL其他的性能優化方式
- Linux系統日誌在哪裏看
- 如何查看網絡進程?
- 統計一個整數的二進制表示中bit爲1的個數
- JVM內存模型,java內存模型
面試題答案:
03 二戰前,我是如何複習的?
(1)MySQL 專題部分(先刷題)
- Mysql 中有哪幾種鎖?
- MYSQL 數據表在什麼情況下容易損壞?
- MySQL 裏記錄貨幣用什麼字段類型好
- MYSQL 支持事務嗎?
- 解釋訪問控制列表
- 什麼是通用 SQL 函數?
- 什麼是非標準字符串類型?
- Mysql 表中允許有多少個 TRIGGERS?
- 什麼樣的對象可以使用 CREATE 語句創建?
- NOW()和 CURRENT_DATE()有什麼區別?
- 可以使用多少列創建索引?
- InnoDB 是什麼?
- Mysql 如何優化 DISTINCT?
- 如何輸入字符爲十六進制數字?
- 如何顯示前 50 行?
- ......
MySQL 面試題答案:
(2)MySQL 性能優化的21個最佳實踐
- 爲查詢緩存優化你的查詢
- EXPLAIN 你的 SELECT 查詢
- 當只要一行數據時使用 LIMIT 1
- 爲搜索字段建索引
- 在 Join 表的時候使用相當類型的例,並將其索引
- 千萬不要 ORDER BY RAND()
- 避免 SELECT *
- 永遠爲每張表設置一個 ID
- 使用 ENUM 而不是 VARCHAR
- 從 PROCEDURE ANALYSE() 取得建議
- 儘可能的使用 NOT NULL
- Prepared Statements
- 無緩衝的查詢
- 把 IP 地址存成 UNSIGNED INT
- 固定長度的表會更快
- 垂直分割
- 拆分大的 DELETE 或 INSERT 語句
- 越小的列會越快
- 選擇正確的存儲引擎
- 使用一個對象關係映射器(Object Relational Mapper)
- 小心“永久鏈接”
(3)MySQL 性能調優與架構設計
- 基礎篇:
- MySQL基本介紹
- MySQL架構組成
- MySQL存儲引擎簡介
- MySQL安全管理
- MySQL備份與恢復
- 性能優化篇:
- 影響MySQLServer性能的相關因素
- MySQL數據庫鎖定機制
- MySQL數據庫Query的優化
- MySQL數據庫Schema設計的性能優化
- MySQLServer性能優化
- 常用存儲引擎優化
- 架構設計篇:
- MySQL可擴展設計的基本原則
- 可擴展性設計之MySQLReplication
- 可擴展性設計之數據切分
- 可擴展性設計之Cache與Search的..
- MySQLCluster
- 高可用設計之思路及方案
- 高可用設計之MySQL監控
04 我的複習寶典資料
(1)Java面試手冊
- 性能優化面試專欄
- 微服務架構面試專欄
- 併發編程高級面試專欄
- 開源框架面試題專欄
- 分佈式面試專欄
(2)實戰文檔
- Redis實戰
- MySQL實戰
- Spring Boot實戰
- Spring Cloud實戰
- 實戰Java虛擬機
以實戰Java虛擬機爲例:
- 初探Java虛擬機
- 認識Java虛擬機的基本結構
- 常用Java 虛擬機參數
- 垃圾回收概念與算法
- 垃圾收集器和內存分配
- 性能監控工具
- 分析Java堆
- 鎖與併發
- Class 文件結構
- Class 裝載系統
- 字節碼執行
(3)Java核心知識點整理文檔
由於篇幅限制,很多內容都只展示了目錄和截圖希望所有的程序員都能夠學習起來,努力實現我們的大廠夢!