目錄java
前言:mysql
正題:git
一:jvm內存模型以及調優篇程序員
二:java基礎篇github
三:多線程併發篇面試
四:mysql以及nosql相關redis
五:消息隊列篇算法
六:場景篇sql
前言:
2019年對於我而言是個很是有意義的一年,首先在今年的4月份,毅然離開了待了四年的公司。離開的緣由也是有不少,更多的仍是我的將來的發展問題。離職後,給本身安排了一個計劃,在圖書館泡了一個月。一呢是爲了對下份工做的一個面試準備,二呢也是藉此機會把一些以前不懂的或者不深刻的好好的學習了一遍。mongodb
給你們特別推薦一個學習圖譜,裏面從java基礎到深刻都總結概括的很好,也是一個學習很不錯的學習路線。
https://github.com/xingshaocheng/architect-awesome
2019年絕對是一個大環境很是很差一年,不少公司都進行了大規模的裁人或者小公司的一個倒閉。所以求職者是很是多的。
因此誒,若是你如今在找工做可不要太樂觀!除非你的背景特別好~
聽hr講的是 一個求職崗位不須要一天就收到了幾百封簡歷,所以若是你如今正準備跳槽,須要最好心理準備,或者考慮再等等
同時給你們推薦【脈脈】俗稱程序員社區,裏面的匿名區值得你們一塊兒溝通交流。
正題:
從五月份開始面試,斷斷續續面試了有將近二十家(並非沒有面試機會,是由於不少本身的事情須要處理哈),首先我目前作java作了六年,總結出這麼多家問的問題都大同小異,也是看面試官的水平。有些面試官技術確實是很厲害的,就問你簡歷上的東西,從淺至深。也有些很是水的面試官,從他問的第一個問題,你就能看出這個面試官一個真實的水平。因此若是遇到了很水的面試官,就大膽說就好了。有可能面試官本身都不知道答案是什麼。
最近都面試的公司具體都有哪些我就不說了,他們都有個共同點,就是java基礎和併發這塊都很是重視。
如下我是根據功能模塊進行劃分的,可是面試官確定不是這樣問的,大多數仍是一問到底,會設計到多個模塊
下面的面試題會持續更新,由於時間都比較久了,不少問題一時半會想不起了,等想到的時候再進行補充~
一:jvm內存模型以及調優篇
-
jvm內存模型這塊有了解嗎?講講你的理解
-
堆外內存是存放在哪的,受不受jvm堆內存大小的限制
- cms和g1的區別
- gc的觸發機制是什麼
- 新生代使用什麼收集器
- 直接內存主要是存放什麼的
- 各個收集算法的優缺點
- jvm是怎麼肯定一個對象是否可達
- java對象有哪幾種引用?每種引用的生命週期是什麼樣的
- 若是線上出現了oom,你是怎麼進行排查的(主要考察jps、jstack、jstat、jmap)
- 棧溢出(StackOverflowError)在什麼狀況下會出現,若是解決
- 使用什麼命令調整棧內存的大小
二:java基礎篇
- HashMap的底層原理(1.8與1.7的區別必需要說出來)
- HashMap是線程不安全的,併發場景下會出現什麼問題
- 遍歷HashMap的幾種方式,那種更快
- HashMap的擴容是如何實現的
- CounrrentHashmap的底層實現原理,是若是實現安全的
- 計算CounrrentHashmap的size底層是什麼樣的
- HashTable與CounrrentHashmap的區別
- HashSet與Treeset的區別
- List若是實現排序
- String爲何是final的
- String在內存中是如何存放的
- 設計模式相關(重要,單例就算了...爛大街了)
- 靜態變量、靜態代碼塊、代碼塊、構造函數。在類加載時,他們的執行順序
- volatile 變量是什麼?volatile 變量和 atomic 變量有什麼不一樣
- switch能做用在string和long上嗎
- hashmap、treemap的區別
- set的元素是不能重複的,那麼是怎麼判斷一個元素是否重複呢?
- io與nio的區別是什麼
- 簡述hash的一致性
三:多線程併發篇
- java中都有什麼鎖
- synchronize與Lock的區別
- synchronize與Lock誰更快?
- 講講ReentrantLock這塊你的理解
- 什麼是可重入鎖?有什麼前提條件
- Lock的鎖是怎麼實現的
- Lock的公平和非公平
- 多線程有幾種建立方式
- java的線程池有幾種
- 線程池的execute和submit的區別
- 線程池有哪幾個參數,每一個參數表明什麼意思
- 線程池的拒絕策略有哪些,分別是什麼
- 線程池能夠設置哪幾個阻塞隊列
- 線程池底層是如何實現的,線程執行完畢是如何喚醒等待線程的
- AQS是如何保證線程安全的
- 談談你對Threadlocal的理解
- Threadlocal使用完以後須要清理嗎?爲何
- 多線程之間若是保證數據的共享以及一致性
- CAS是什麼、會出現ABA的問題,如何解決
- shutdown和shutdown的區別
- 多線程中,run和start的區別
- Semaphore信號量的原理
- countlatchdown使用過沒,在什麼狀況下使用
四:mysql以及nosql相關
- mysql中都有什麼鎖
- 何時會使用到行鎖、何時使用到表鎖
- mysql索引的數據結構是什麼樣的?
- 若是讓你設計一個表,你會怎麼設計?注重哪幾個點
- myisam和innodb的區別
- 聚合索引與非聚合索引的區別
- 都作過什麼sql優化
- mysql能夠不設置索引嗎?爲何
- mysql的特性都有哪些
- mysql的隔離級別都有哪些、默認是哪一個
- ACID是什麼
- 可重複讀會致使幻讀嗎
- redis都支持什麼數據類型
- redis有哪幾種持久化方式,都有什麼優缺點
- redis的哨兵與集羣模式你來說講
- 用過度布式鎖嗎?他是怎麼實現的
- 什麼是緩存穿透、緩存雪崩、如何避免
- redis有哪幾種淘汰策略
- reids過時數據,是如何刪除的
- redis是單線程的,爲何還那麼快
- redis是如何存儲數據的、說說你對哈希槽的理解
- redis和mongodb的區別
- mongodb也有索引,他的底層數據結構是什麼樣的
- mongodb爲什麼那麼快
- mongo的分片是如何實現的
五:消息隊列篇
- rabbitmq若是保證了消息的可靠性
- 如何保證生產者把消息發送到rabbitmq
- 若是保證消費者消費了消息
- 如何避免消息從新投遞或重複消費
- 使用mq的好處
- rabbitmq消息是如何進行分發的
- rabbitmq若是作失敗重試的
- rabbitmq死信的理解
- 探探你對kafka的理解
- kafka若是保證了消息的可靠性
- kafka數據傳輸的事物定義有哪幾種
- kafka的消息是有序的嗎
- kafka是如何消費消息的
- 若是kafka中一個broker崩掉了,內部都作了什麼是事
- kafka如何保證了消息的不丟失
六:場景篇
- 有一個高併發搶購活動,你如何對這個進行系統設計
- 有個100G的ip登錄信息,如今只有十臺臺服務器4G的,需找出ip訪問最多前十名的ip
- 如今生產出現了oom,你是若是進行排查的
- 經分析,線上有線程出現了死鎖,請問你如何進行排查
- 現mysql常常報錯死鎖超時異常,問你如何進行解決
- 現有一條sql,每次執行耗時500ms,我須要將這個耗時保證在100ms如下,你會從哪幾個緯度去分析