2020JAVA面試題

1.springmvc流程
具體步驟:
第一步:發起請求到前端控制器(DispatcherServlet)
第二步:前端控制器請求HandlerMapping查找 Handler (可以根據xml配置、註解進行查找)
第三步:處理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping會把請求映射爲HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象,多個HandlerInterceptor攔截器對象),通過這種策略模式,很容易添加新的映射策略
第四步:前端控制器調用處理器適配器去執行Handler
第五步:處理器適配器HandlerAdapter將會根據適配的結果去執行Handler
第六步:Handler執行完成給適配器返回ModelAndView
第七步:處理器適配器向前端控制器返回ModelAndView (ModelAndView是springmvc框架的一個底層對象,包括 Model和view)
第八步:前端控制器請求視圖解析器去進行視圖解析 (根據邏輯視圖名解析成真正的視圖(jsp)),通過這種策略很容易更換其他視圖技術,只需要更改視圖解析器即可
第九步:視圖解析器向前端控制器返回View
第十步:前端控制器進行視圖渲染 (視圖渲染將模型數據(在ModelAndView對象中)填充到request域)
第十一步:前端控制器向用戶響應結果
參考:https://www.cnblogs.com/leskang/p/6101368.html

2.註解來自於哪裏,怎麼使用?
註解源於 jdk,如果要使用註解可以使用反射找到包含該註解的類和方法,然後對用了註解的類和方法處理即可

3.aop應用場景?
Authentication 權限
Caching 緩存
Context passing 內容傳遞
Error handling 錯誤處理
Lazy loading 懶加載
Debugging  調試
logging, tracing, profiling and monitoring 記錄跟蹤 
優化 
校準
Performance optimization 性能優化
Persistence   持久化
Resource pooling  資源池
Synchronization  同步
Transactions 事務
參考:https://blog.csdn.net/wuruijiang/article/details/78970720
權限認證、日誌處理、異常處理

4.redis的應用,redis是否有事務
緩存
分佈式鎖
使用場景:
a.記錄帖子的點贊數、評論數和點擊數 (hash)。
b.記錄用戶的帖子 ID 列表 (排序),便於快速顯示用戶的帖子列表 (zset)。
c.記錄帖子的標題、摘要、作者和封面信息,用於列表頁展示 (hash)。
d.記錄帖子的點贊用戶 ID 列表,評論 ID 列表,用於顯示和去重計數 (zset)。
e.緩存近期熱帖內容 (帖子內容空間佔用比較大),減少數據庫壓力 (hash)。
f.記錄帖子的相關文章 ID,根據內容推薦相關帖子 (list)。
g.如果帖子 ID 是整數自增的,可以使用 Redis 來分配帖子 ID(計數器)。
h.收藏集和帖子之間的關係 (zset)。
i.記錄熱榜帖子 ID 列表,總熱榜和分類熱榜 (zset)。
j.緩存用戶行爲歷史,進行惡意行爲過濾 (zset,hash)。
5.項目架構
springcloud+mysql集羣+redis集羣+elasticsearch集羣+apollo集羣+tomcat集羣

6.es solr 底層基於什麼實現
lucene,數據結構是倒排序索引,
舉例說明:正常我們查詢某些詞都是先從書本中查找,倒排序索引是我們把書中的詞獲取後將含有該詞的書本記錄
Elasticsearch 與 Solr 的比較總結
二者安裝都很簡單;
Solr 利用 Zookeeper 進行分佈式管理,而 Elasticsearch 自身帶有分佈式協調管理功能;
Solr 支持更多格式的數據,而 Elasticsearch 僅支持json文件格式;
Solr 官方提供的功能更多,而 Elasticsearch 本身更注重於核心功能,高級功能多有第三方插件提供;
Solr 在傳統的搜索應用中表現好於 Elasticsearch,但在處理實時搜索應用時效率明顯低於 Elasticsearch。
Solr 是傳統搜索應用的有力解決方案,但 Elasticsearch 更適用於新興的實時搜索應用。
參考:https://www.cnblogs.com/pc-boke/articles/9851521.html

7.java8的新特性
a.lambda表達式
b.時間類型增加個LocalDateTime LocalDate Instance
c.接口增加了默認方法
d.函數式接口
e.concurrentHashMap底層數據接口改成紅黑樹,解決了死鎖
f.多重註解
g.lambda表達式內訪問對象字段和靜態變量
h.lambda表達式內可以訪問局部變量
i.方法與構造函數引用 通過 :: 可以獲取構造函數的引用

參考:https://www.jianshu.com/p/0bf8fe0f153b

8.分庫分表分頁怎麼查詢

9.分佈式事務

參考:https://www.jianshu.com/p/ee4071d0c951
http://springcloud.cn/view/374

10.mysql優化
索引
少使用order by
少使用group by

11.mysql執行引擎
myisam
innodb

12.springcloud之間的通信
feign

13.springcloud的部署是怎樣的

14.mybatis的一級緩存 二級緩存的區別?
一級緩存:默認開啓
二級緩存:默認不開啓
參考:https://www.cnblogs.com/happyflyingpig/p/7739749.html

15.分庫分表分頁怎麼查詢?

16.eureka的心跳機制是什麼

17.feign底層怎麼交互的

18.防刷短信驗證碼,用戶登錄的時候,發現大量不同的ip不同的手機號用驗證碼登錄,怎樣防止大量驗證碼盜刷

19.高併發場景下怎樣保證緩存和DB的數據一致 提示:比如用redis緩存,更新操作是先刪緩存更新數據庫,還是更新數據庫了再更新緩存,會出現什麼問題

20.5張表、每個表5列,每張表數據3000w,庫存表數據怎樣能快速查詢出來,怎樣設計:

21.半夜突然收到系統提示OOM,Eden快速使用了又釋放,old全部耗盡了,怎樣定位問題?

22.怎樣保證冪等,你們怎麼做的?

23.客戶端數據怎樣保證安全性,調用接口之前? 比如身份證號碼,手機號調用接口之前怎樣保證用戶隱私,我說了對稱加密,他問客戶端怎樣拿密鑰,沒答上來

24.怎樣防止數據被篡改,你知道的防數據篡改的方式有哪些

25.微服務權限怎麼控制

26.分佈式事務怎麼做的
常見方案:2PC TCC 本地消息事務 rocketmq消息處理

參考:https://hhbbz.github.io/2018/09/06/%E5%88%86%E5%B8%83%E5%BC%8F%E4%BA%8B%E5%8A%A1%E7%9A%84%E5%9B%9B%E7%A7%8D%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/
http://server.it168.com/a2018/0623/3210/000003210898.shtml
https://mp.weixin.qq.com/s/u29tU3lHJdtpB9AJBCyGkg

27.springboot的優缺點

28.springcloud的優缺點

29.elasticsearch索引怎麼設計?

30.springboot啓動有幾種方式?

31.springboot集成redis有幾種方式?

32.heap、stack區別?

33.redis的數據類型?
String
Hash
List
Set
ZSet

34.java導出dump的方式?
jmap -dump:live,format=b,file=heap.bin

35.forward redirect的區別?
forward:轉發
redirect:重定向

36.創建線程池的方式,線程池一般配置多大?
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue workQueue) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
Executors.defaultThreadFactory(), defaultHandler);
}

Executors
/**
*創建固定數線程的線程池
*/
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue());
}

/**

  • 創建單個線程池
    */
    public static ExecutorService newSingleThreadExecutor() {
    return new FinalizableDelegatedExecutorService
    (new ThreadPoolExecutor(1, 1,
    0L, TimeUnit.MILLISECONDS,
    new LinkedBlockingQueue()));
    }

public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue());
}

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
return new ScheduledThreadPoolExecutor(corePoolSize);
}

37.yaml是什麼?

38.熟悉哪些設計模式,寫出僞代碼
單例設計模式
工廠模式
裝飾設計模式
代理設計模式
適配器模式
構建者設計模式
參考:

39.手寫冒泡排序算法

public static void bubbleSort(int[] arrays, boolean flag) {
        int tmp;
        for (int i=0;i<arrays.length;i++) {
            for (int j=i+1;j<arrays.length;j++) {
                /*
                 * 升序
                 */
                if (flag) {
                    if (arrays[i] > arrays[j]) {
                        tmp = arrays[i];
                        arrays[i] = arrays[j];
                        arrays[j] = tmp;
                    }
                } else {
                    if (arrays[i] < arrays[j]) {
                        tmp = arrays[i];
                        arrays[i] = arrays[j];
                        arrays[j] = tmp;
                    }
                }
            }
        }
    }

40.接口與抽象類的區別?

41.字符串abcd怎樣獲取abcd、acbd、acdb、adbc、adcb、bacd、bcad、bdac、bdca、cabd、cdba、cadb、cbda等

42.feign的實現原理?feign是否包含負載均衡?

43.三範式是什麼?
三範式

1NF:字段不可分;
2NF:有主鍵,非主鍵字段依賴主鍵;
3NF:非主鍵字段不能相互依賴;

解釋:
1NF:原子性 字段不可再分,否則就不是關係數據庫;
2NF:唯一性 一個表只說明一個事物;
3NF:每列都與主鍵有直接關係,不存在傳遞依賴;

44.圖書管理系統該設計多少張表?

45.組合索引b c d where cbd abd dca 是否走索引?

46.悲觀鎖、樂觀鎖的概念?

47.線上出現悲觀鎖了怎麼處理?

48.springboot讀取配置文件的方式?
@Value
@Autowired
Environment
@ConfigurationProperties

49.springcloud項目中用了哪些模塊?
eureka:註冊中心
feign:模塊間通信
ribbon:負載均衡
hystrix:熔斷
zuul:網關路由

50.jenkins的部署流程是怎樣的?
git拉取代碼
maven編譯
tomcat部署

51.服務器查詢某個時間段的包含"service"的日誌用什麼命令?
sed

52.服務器查看服務端口的命令?
netstat -anp

53.怎樣查找某個端口號被佔用?
lsof -i:port

54.怎樣關閉某個端口或者進程?
netstat -anl | grep tomcat

kill -9 進程id
55.怎樣創建線程池?如果線上的任務量遠大於線程池處理線程的量怎麼用代碼解決?

56.redis通常用於幹嘛?redis怎麼實現?
a.緩存
b.分佈式鎖

57.springboot默認使用的服務器是哪個?
tomcat

58.elasticsearch底層索引怎麼設計?
基於lucene 倒排序索引

59.線上是否使用docker部署過項目?

60.springboot讀取配置文件熱加載機制是什麼?

61.linux給文件夾授權的命令?
chmod -r dir

62.rabbitmq exchange幹嘛的?

63.nginx負載均衡怎麼配置?
upstream backserver {
server 192.168.2.12:8001;
server 192.168.2.13:8002;
}

最簡單的配置:
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}

server {
    listen 80;

    location / {
        proxy_pass http://myapp1;
    }
}

}

最少連接負載均衡
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}

ip_hash方式
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;

}

根據權重配置:
upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}

參考:
http://nginx.org/en/docs/http/load_balancing.html
https://blog.csdn.net/qq_35119422/article/details/81505732

64.微服務中出現的問題?
部署問題,增加運維部署壓力
分佈式事務

65.hashmap底層結構怎樣的?(問的較多)

66.ConcurrentHashMap怎樣實現線程安全的?
分段鎖

67.CAS底層數據結構有看過嗎?

68.jvm中的垃圾收集算法有哪些?堆可以細分爲哪些區域,什麼對象會移到老年代,除了要被回收的對象移到老年代,其他什麼情況直接移到老年代?

69.千萬條數據查詢10s怎麼去優化?

70.數據庫分庫分表怎麼做?

71.mysql分庫分表用的什麼插件還是自己寫的算法實現?

72.多線程線程池使用Executors的方法還是?

73.日誌的鏈路追蹤怎麼做的?

Struts2與springmvc區別

mybatis hibernate區別
hibernate:全自動化
mybatis:半自動化

mybatis如果從oracle切到mysql怎麼處理?

springmvc流程?

springboot核心?
starter
自動裝配
springboot cli
actuator
參考:https://blog.csdn.net/YYZZHC999/article/details/97619997

進程是什麼,線程是什麼?

進程之間通過什麼方式通信?
共享內存、管道、消息隊列、socket、文件、信號量

wait() sleep()的區別,在哪個類中?
wait() java.lang.Object
sleep() java.lang.Thread

創建線程的幾種方式?
繼承Thread
實現Runnable接口

常見的異常有哪些?java怎樣知道該拋對應的異常,比如NullPointerException?
NullpointerException
FileNotFoundException
InterruptedException
IllegalArgsException
ClassNotFoundException
ClassCastException
IOException

jvm怎樣加載class文件的,有哪些步驟,對象創建後存在哪裏?靜態常量值存在哪裏?

ArrayList LinkedList區別?
ArrayList:數組結構,查詢快
LinkedList:鏈表結構,更新快

線程安全的集合有哪些?
Vector

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章