Java面試過程中遇到的問題
介紹工作經驗+項目
介紹項目
為什么選用這個技術
報表服務怎么實現的
java框架
1、spring clound特性,組件有那些以及作用
springCloud是一套微服務組件, 常用的Eureka,Ribbon,Hystrix,Feign,Gateway,Config,Bus(消息總線)等等。
2、SpringBoot特性
創建獨立的Spring項目
內置Tomcat和Jetty容器
提供一個starter POMs來簡化Maven配置
完全沒有代碼生成和xml配置文件 使用注解
提供了一系列大型項目中常見的非功能性特性,如安全、指標,健康檢測、外部配置等
3、springmvc
4、redis數據類型,常用場景
Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及sorted set (有序集合)
redis穿透、擊穿 、雪崩概念,怎么預防?
Redis擊穿、穿透和雪崩是指在高并發條件下,Redis服務出現的性能問題。
1、穿透:指緩存穿透,是指某個不存在的Key被大量并發請求,導致請求穿透緩存直接打到數據庫,造成數據庫壓力劇增。
預防方法:使用布隆過濾器或者緩存空值來避免不存在的Key請求穿透到數據庫。
2、擊穿:指緩存擊穿,是指一個Key非常熱點,在某一時刻緩存正好失效,導致大量請求直接打到數據庫上,造成數據庫壓力劇增。
預防方法:設置合理的緩存過期時間,并對熱點數據做永不過期或者隨機過期來避免全部失效。
3、雪崩:指緩存雪崩,是指緩存服務器宕機或網絡問題導致,所有緩存失效,引起大量請求打到數據庫上。
預防方法:實現緩存高可用,如使用Redis集群;使用緩存數據預熱;設置緩存的過期時間分散開,避免同一時刻大量緩存失效。
具體實現可能需要結合業務場景和技術棧選擇合適的解決方案。
5、mq:系統解耦,異步調用,流量削峰。
6、并發控制
7、內存溢出的問題
8、es
9、事務特性
10、事務注解哪些情況會失效
java基礎
1、jdk8的新特性有哪些?
Lambda表達式、stream流、接口的增強(默認方法和靜態方法)、新的日期API(LocalDate)、Optional中避免NullPointerException檢查、引入重復注解、新增base64加解密API、新增方法引用格式、hashmap添加紅黑樹、支持并行(parallel)數組、對并發類(Concurrency)的擴展。
2、stream流 應用場景
3、集合
list set區別(有序、唯一、實現類、復雜度、遍歷)
hashmap linkedhashmap區別
hashmap底層實現(紅黑樹的特性)
arraylist底層實現 初始容量 擴容倍數
4、for循環,break,return,continue區別
5、創建多線程的四種方法
1、繼承Jave.lang包中的Thread類,重寫Thread類中的run()方法,在run方法中編寫實現多線程代碼
2、實現Jave.lang.Runnable接口,在run方法中編寫實現多線程代碼
3、實現Java.util.concurrent.Callable接口,重寫Call()方法并通過使用Future接口獲取call()方法返回的結果
4、利用線程池創建多線程
6、接口和抽象類區別
接口和抽象類都是用來定義對象的公共行為的,但二者有以下 7 點不同:
1、定義的關鍵字不同。interface、abstract
2、子類繼承或實現關鍵字不同。implements、extends
3、類型擴展不同:抽象類是單繼承,而接口是多繼承。
4、方法訪問控制符:抽象類無限制,只是抽象類中的抽象方法不能被 private 修飾;而接口有限制,接口默認的是 public 控制符。
5、屬性方法控制符:抽象類無限制,而接口有限制,接口默認的是 public 控制符。
6、方法實現不同:抽象類中的普通方法必須有實現,抽象方法必須沒有實現;而接口中普通方法不能有實現,但在 JDK 8 中的 static 和 defualt 方法必須有實現。
7、靜態代碼塊的使用不同:抽象類可以有靜態代碼塊,而接口不能有。
linux
Linux給文件賦權命令 chmod