面試題
一:java為什么跨平臺
首先java是在jvm上運行的,比如windows系統的jdk,linux系統的jdk等或者其他的系統的jdk,java運行依賴jdk內的jvm,處處運行,
二:你能保證GC執行嗎?
不能,雖然你可以呼叫 System.gc() 或者 Runtime.gc(),但是沒有辦法保證 GC的執行,
三:Synchronized和lock有什么區別?
1、 首先synchronized是Java內置關鍵字,在JVM層面,Lock是個Java類;
2、 synchronized 可以給類、方法、代碼塊加鎖;而 lock 只能給代碼塊加鎖,
3、 synchronized 不需要手動獲取鎖和釋放鎖,使用簡單,發生例外會自動釋放鎖,不會造成死鎖;而 lock 需要自己加鎖和釋放鎖,如果使用不當沒有 unLock()去釋放鎖就會造成死鎖,
4. 通過 Lock 可以知道有沒有成功獲取鎖,而 synchronized 卻無法辦到,
四:抽象類必須要有抽象方法嗎?
不是必須,抽象類可以沒有抽象方法,
五:arryList的擴容機制?
ArrayList擴容發生在add()方法呼叫的時候, 呼叫ensureCapacityInternal()來擴容的, 通過方法calculateCapacity(elementData, minCapacity)獲取需要擴容的長度:ensureExplicitCapacity方法可以判斷是否需要擴容:ArrayList擴容的關鍵方法grow(): 獲取到ArrayList中elementData陣列的記憶體空間長度 擴容至原來的1.5倍
六:Mysql的調優?
- 業務層面的優化
- 代碼層面
- Sql層面
> 在表中建立索引,優先考慮where、group by使用到的欄位,
> 盡量避免使用select *,回傳無用的欄位會降低查詢效率,
- 硬體層優化
七:RabbitMQ有什么優點(寫了rabbitmq的可以問)?
解耦、異步、削峰;
八:如何保證RabbitMQ不被重復消費?(寫了rabbitmq的可以問)?
先說為什么會重復消費:正常情況下,消費者在消費訊息的時候,消費完畢后,會發送一個確認訊息給訊息佇列,訊息佇列就知道該訊息被消費了,就會將該訊息從訊息佇列中洗掉;
但是因為網路傳輸等等故障,確認資訊沒有傳送到訊息佇列,導致訊息佇列不知道自己已經消費過該訊息了,再次將訊息分發給其他的消費者,
針對以上問題,一個解決思路是:保證訊息的唯一性,就算是多次傳輸,不要讓訊息的多次消費帶來影響;保證訊息等冪性;
九:Redis支持哪幾種資料型別?
String、List、Set、Sorted Set、hashes
十:Redis主要消耗什么物理資源?
redis是一種基于記憶體高性能的資料庫--- 主要依賴于記憶體記憶體,
十一:Springmvc用到的設計模式有哪些?
簡單工廠,工廠方法,單例模式,配接器,觀察者等模式
十一:Spring中bean的生命周期?
Bean的實體化和DI(dependency injection),檢查Spring Awareness,創建bean生命周期回呼,銷毀bean生命周期回呼
十三:java執行緒的生命周期?
新建,就緒,運行,阻塞,銷毀
十四:前后端分離專案跨域怎么解決?
前端jsonp,后臺提供請求過濾,
十五:假如外網訪問某服務器下的靜態資源比如圖片?
可以提供tomcat組態檔配置圖片在服務器下的地址,提供啟動tomcat訪問
十六:服務器部署的專案前端怎么配置可訪問?
例如:nginx配置
server {
listen 8100;
server_name localhost;
location / {
root /shengLongProject/front/water-affair-web/;
index index.html;
}
}
十七:websocket中在專案中有沒有使用,怎么使用的?
按斬訓答來
十八:springboot常用的starter有哪些?
spring-boot-starter-web 嵌入tomcat和web開發需要servlet與jsp支持,spring-boot-starter-data-jpa 資料庫支持,spring-boot-starter-data-redis redis資料庫支持,spring-boot-starter-data-solr solr支持,mybatis-spring-boot-starter 第三方的mybatis集成starter
十九:springboot如何添加【修改代碼】自動重啟功能?
添加開發者工具集spring-boot-devtools
二十:什么是微服務
以前的模式是 所有的代碼在同一個工程中 部署在同一個服務器中 同一個專案的不同模塊不同功能互相搶占資源,微服務 將工程根據不同的業務規則拆分成微服務 微服務部署在不同的機器上 服務之間進行相互呼叫,Java微服務的框架有 dubbo(只能用來做微服務),spring cloud(提供了服務的發現,斷路器等)
二十一:什么是 spring cloud?
spring cloud 是一系列框架的有序集合,它利用 spring boot 的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、訊息總線、負載均衡、斷路器、資料監控等,都可以用 spring boot 的開發風格做到一鍵啟動和部署,二十二: spring cloud 的核心組件有哪些?
Eureka:服務注冊于發現,
Feign:基于動態代理機制,根據注解和選擇的機器,拼接請求 url 地址,發起請求,
Ribbon:實作負載均衡,從一個服務的多臺機器中選擇一臺,
Hystrix:提供執行緒池,不同的服務走不同的執行緒池,實作了不同服務呼叫的隔離,避免了服務雪崩的問題,
Zuul:網關管理,由 Zuul 網關轉發請求給對應的服務
二十三: 什么是Ribbon?
ribbon是一個負載均衡客戶端,可以很好的控制htt和tcp的一些行為,feign默認集成了ribbon,
二十四:什么是feigin?它的優點是什么?
feign采用的是基于介面的注解,feign整合了ribbon,具有負載均衡的能力,整合了Hystrix,具有熔斷的能力
1.添加pom依賴,
2.啟動類添加@EnableFeignClients
3.定義一個介面@FeignClient(name=“xxx”)指定呼叫哪個服務
二十五: Ribbon和Feign的區別?
1.Ribbon都是呼叫其他服務的,但方式不同,
2.啟動類注解不同,Ribbon是@RibbonClient feign的是@EnableFeignClients
3.服務指定的位置不同,Ribbon是在@RibbonClient注解上宣告,Feign則是在定義抽象方法的介面中使用@FeignClient宣告,
4.呼叫方式不同,Ribbon需要自己構建http請求,模擬http請求然后使用RestTemplate發送給其他服務,步驟相當繁瑣,Feign需要將呼叫的方法定義成抽象方法即可,
二十六:Linux的常用命令有哪些?
?
二十七:shiro權限表有哪些?
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/390605.html
標籤:其他
