以下是2019年的一次騰訊公司的面試題目,分享給大家,希望能對大家有幫助。
(推薦影片教學:java教學影片)
- 從履歷項目⽬中選⼀個項⽬,說說你在其中遇到了什麼重⼤挑戰?以及你的解決問題的思路?
- ⼀段程式碼要執⾏多個redis指令,不加鎖的情況下如何保證原⼦性?
使⽤lua腳本:https://segmentfault.com/a/1190000009811453
- 談談資料結構,⽐如⼆叉樹、紅⿊樹?
理解這篇:https://juejin.im/post/5a27c6946fb9a04509096248
- 說B-tree、B tree的區別和使⽤場景?
- B-tree:
B-tree 利⽤了磁碟區塊的特性進⾏建構的樹。每個磁碟塊⼀個節點,每個節點包含了很關鍵字。把樹的節點關鍵字增多後樹的
層級⽐原來的⼆叉樹少了,減少資料查找的次數和複雜度。
B-tree巧妙利⽤了磁碟預讀原理,將⼀個節點的⼤⼩設為等於⼀個⻚(每⻚為4K),這樣每個節點只需要⼀次I/O就可以完
全載⼊。
B-tree 的資料可以存在任何節點中。
- B tree:
B tree 是 B-tree 的變種,B tree 資料只儲存在葉⼦節點中。這樣在B樹的基礎上每個節點儲存的關鍵字數更多,樹的層級
更少所以查詢資料更快,所有指關鍵字指標都存在葉⼦節點,所以每次查找的次數都相同所以查詢速度更穩定;
- mysql哪個版本哪個儲存引擎的索引使⽤的B tree,為什麼不使⽤紅⿊樹?
需要先理解B tree、紅⿊樹的實作原理。 B tree帶有順序存取指針,是紅⿊樹不具備的。
- 說說⼏種常⻅的訊息中間件的差別?
- 中⼩型公司⾸選RabbitMQ:管理界⾯簡單,⾼並發。
- 更多相關面試題推薦:java面試題及答案
- ⼤型公司可以選擇RocketMQ:更⾼並發,可對rocketmq進⾏客製化開發。
- ⽇志採集功能,⾸選kafka,專為⼤資料準備。
- rabbitmq如何保證訊息的可靠性?
詳⻅「⾯試題庫/rabbitmq」
- springcloud服務發現原理?
a. 每30s發送⼼跳檢測重新進⾏租約,如果客戶端不能多次更新租約,它將在90s內從伺服器註冊中⼼移除。
a. 註冊資訊和更新會被複製到其他Eureka 節點,來⾃任何區域的客戶端可以查找到註冊中⼼信息,每30s發⽣⼀次複製來定位他們的服務,並進⾏遠程調⽤ 。
b. 客戶端還可以快取⼀些服務實例訊息,所以即使Eureka全掛掉,客戶端也是可以定位到服務位址的。
- 介紹下springcloud各個元件? springcloud的註冊中⼼除了eureka還可以⽤什麼?
springcloud的⼯作原理
特性ActiveMQ RabbitMQ RocketMQ kafka
開發語⾔ java erlang java scala
單機吞吐量萬級萬級10萬級10萬級
# 時效性ms級## 單機吞吐量萬級萬級10萬級10萬級
#us級ms級ms級以內
可⽤性⾼(主從架構) ⾼(主從架構) ⾮常⾼(分散式架構) ⾮常⾼(分散式架構)
功能特性
成熟的產品,在許多公司得到應⽤;有較多的⽂檔;各種協議⽀持較好
基於erlang開發,所以並發能⼒很強,性能極其好,延時很低;管理界⾯較豐富
MQ功能⽐較完備,擴展性佳
只⽀持主要的MQ功能,像⼀些訊息查詢,訊息回溯等功能沒有提供,畢竟是為⼤資料準備的,在⼤資料領域應⽤⼴。
springcloud由以下⼏個核⼼元件構成:
Eureka:各個服務啟動時,Eureka Client都會將服務註冊到Eureka Server,並且Eureka Client還可以反過來從Eureka Server拉取註冊表,從⽽知道其他服務在哪⾥
Ribbon:服務間發起請求的時候,基於Ribbon做負載平衡,從⼀個服務的多台機器中選擇⼀台
Feign:基於Feign的動態代理機制,根據註解和選擇的機器,拼接請求URL位址,發起請求
Hystrix:發起請求是透過Hystrix的執行緒池來⾛的,不同的服務⾛不同的執行緒池,實現了不同服務調⽤的隔離,避免了服務雪崩
的問題
Zuul:如果前端、行動端要調⽤後端系統,統⼀從Zuul⽹關進⼊,由Zuul⽹關轉發請求給對應的服務 註冊中⼼還可以⽤zookeeper。 -
微服務有⼏種限流⽅式? spring cloud gateway:https://windmt.com/2018/05/09/spring-cloud-15-spring-cloud-gateway-ratelimiter/-
限流的情況下,服務隔離還有沒有必要? https://www.javazhiyin.com/25964.html-
dubbo有⼏種負載平衡?負載平衡是在服務端還是客戶端?
Dubbo負載平衡在客戶端,dubbo內建了4種負載平衡策略:
a. RandomLoadBalance:隨機負載平衡。隨機的選擇⼀個。是Dubbo的預設負載平衡策略。
b. RoundRobinLoadBalance:輪詢負載平衡。輪詢選擇⼀個。 ###c. LeastActiveLoadBalance:最少活躍調⽤數,相同活躍數的隨機。活躍數指調⽤前後計數差。讓慢的 Provider 收到更少請求,
因為越慢的 Provider 的調⽤前後計數差會越⼤。
d. ConsistentHashLoadBalance:⼀致性哈希負載平衡。相同參數的請求總是落在同⼀台機器上。
- 如何實作redis分散式鎖定?需要注意什麼問題?
了解這篇:https://juejin.im/post/5bbb0d8df265da0abd3533a5
- 說說你看過的原始碼?其中⽤到了什麼設計模式或設計亮點?
具體分析,⾯試前需要熟讀⼀些源碼,如spring源碼。
- 如何實作aop?項⽬中哪些地⽅⽤到了aop?
掌握:https://juejin.im/post/5bf4fc84f265da611b57f906
- 後置處理器的作⽤?
Spring中bean後置處理器BeanPostProcessor:https://www.jianshu.com/p/f80b77d65d39
- spring bean作⽤域,何時使⽤request作⽤域。
詳讀:https://blog.csdn.net/icarus_wang/article/details/51586776
- 說說下⾯這題的結果?
1 package com.giveu.web;
2
3 public class VolatileTest {
4 public static volatile int race = 0;
5
6 public static void increase() {
7 race++;
8 }
9
10 private static final int THREADS_COUNT = 10;
11
12 public static void main(String[] args) {
13 Thread[] threads = new Thread[THREADS_COUNT];
14 for (int i = 0; i < THREADS_COUNT; i++) {
15 threads[i] = new Thread(new Runnable() {
16 @Override
17 public void run() {
18 for (int i = 0; i < 10000; i++) {
19 increase();
20 }
21 }
22 });
23 threads[i].start();
24 }
25 while (Thread.activeCount() > 1) {
26 Thread.yield();
27 }
28 System.out.println(race);
29 }
30
程式不結束,並且沒有列印。
相關推薦:java入門教學
以上是2019年Java面試題目(騰訊)的詳細內容。更多資訊請關注PHP中文網其他相關文章!