前言
十天還沒整理一篇,十日為限,先到這里吧,以后都采取這個模式,
2020-9-22 08:00-09:00
一、在 Queue 中 poll()和 remove()有什么區別?
1、offer()和add()區別:
增加新項時,如果佇列滿了,add會拋出例外,offer回傳false,
2、poll()和remove()區別:
poll()和remove()都是從佇列中洗掉第一個元素,remove拋出例外,poll回傳null,
3、peek()和element()區別:
peek()和element()用于查詢佇列頭部元素,為空時element拋出例外,peek回傳null,
二、如何讓 Java 的執行緒彼此同步?
- synchronized
- volatile
- ReenreantLock
-
使用區域變數實作執行緒同步
三、你了解過哪些同步器?請分別介紹下,
1、Semaphore同步器
特征:
- 經典的信號量,通過計數器控制對共享資源的訪問
- Semaphore(int count):創建擁有count個許可證的信號量
- acquire()/acquire(int num) : 獲取1/num個許可證
- release/release(int num) : 釋放1/num個許可證
2、CountDownLatch同步器
特征:
- 必須發生指定數量的事件后才可以繼續運行(比如賽跑比賽,裁判喊出3,2,1之后大家才同時跑)
- CountDownLatch(int count):必須發生count個數量才可以打開鎖存器
- await:等待鎖存器
- countDown:觸發事件
3、CyclicBarrier同步器
特征:
- 適用于只有多個執行緒都到達預定點時才可以繼續執行(比如斗地主,需要等齊三個人才開始)
- CyclicBarrier(int num) :等待執行緒的數量
- CyclicBarrier(int num, Runnable action) :等待執行緒的數量以及所有執行緒到達后的操作
- await() : 到達臨界點后暫停執行緒
4、交換器(Exchanger)同步器
5、Phaser同步器
https://www.cnblogs.com/pamne/p/11731797.html
2020-9-24 08:25-09:00
四、如果客戶端禁止 cookie 能實作 session 還能用嗎?
一般默認情況下,在會話中,服務器存盤 session 的 sessionid 是通過 cookie 存到瀏覽器里,
如果瀏覽器禁用了 cookie,瀏覽器請求服務器無法攜帶 sessionid,服務器無法識別請求中的用戶身份,session失效,
但是可以通過其他方法在禁用 cookie 的情況下,可以繼續使用session,
- 通過url重寫,把 sessionid 作為引數追加的原 url 中,后續的瀏覽器與服務器互動中攜帶 sessionid 引數,
- 服務器的回傳資料中包含 sessionid,瀏覽器發送請求時,攜帶 sessionid 引數,
- 通過 Http 協議其他 header 欄位,服務器每次回傳時設定該 header 欄位資訊,瀏覽器中 js 讀取該 header 欄位,請求服務器時,js設定攜帶該 header 欄位,
五、OSI 的七層模型都有哪些?

六、在 Java 中,為什么不允許從靜態方法中訪問非靜態變數?
- 靜態變數屬于類本身,在類加載的時候就會分配記憶體,可以通過類名直接訪問;
- 非靜態變數屬于類的物件,只有在類的物件產生時,才會分配記憶體,通過類的實體去訪問;
- 靜態方法也屬于類本身,但是此時沒有類的實體,記憶體中沒有非靜態變數,所以無法呼叫,
七、請解釋 Spring Bean 的自動裝配?
Spring支持IOC,自動裝配不用類實體化,直接從bean容器中取,
1、配置在xml中
<bean id="employeeDAO" class="com.guor.EmployeeDAOImpl" autowire="byName" />
2、@Autowired自動裝配
八、請解釋自動裝配模式的區別?
有五種自動裝配的方式,可以用來指導 Spring 容器用自動裝配方式來進行依賴注入,
1、no
默認的方式是不進行自動裝配,通過顯式設定 ref 屬性來進行裝配,第 402 頁 共 485 頁
2、byName
通過引數名 自動裝配,Spring 容器在組態檔中發現 bean
的 autowire 屬性被設定成 byname,之后容器試圖匹配、裝配和該 bean 的屬
性具有相同名字的 bean,
3、byType:
通過引數型別自動裝配,Spring 容器在組態檔中發現 bean
的 autowire 屬性被設定成 byType,之后容器試圖匹配、裝配和該 bean 的屬
性具有相同型別的 bean,如果有多個 bean 符合條件,則拋出錯誤,
4、constructor
這個方式類似于 byType, 但是要提供給構造器引數,如
果沒有確定的帶引數的構造器引數型別,將會拋出例外,
5、autodetect
首先嘗試使用 constructor 來自動裝配,如果無法作業,
則使用 byType 方式,
2020-9-25 08:30-09:00
九、如何開啟基于注解的自動裝配?
要使用 @Autowired,需要注冊 AutowiredAnnotationBeanPostProcessor,可以有以下兩種方式來實作:
引入組態檔中的<bean>下引入 <context:annotation-config>
<beans>
<context:annotation-config />
</beans>
在bean組態檔中直接引入AutowiredAnnotationBeanPostProcessor
<beans>
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
</beans>
十、什么是 Spring Batch?
1、什么是spring batch?
spring batch是一個輕量級的、完善的批處理框架,它主要的目的在于幫助企業建立健壯、高效的批處理應用,
spring batch是Spring的一個子專案,它使用java語言并基于spring框架作為基礎開發,使得已經使用Spring框架的開發者或者是企業可以更加容易訪問和利用企業服務,
spring batch提供了大量可重用的組件,包括了日志、追蹤、事務、任務作業統計、任務重啟、跳過、重復、資源管理,
對大資料量和高性能的批處理任務,spring batch同樣提供了高級功能和特性來支持,
例如:磁區功能、遠程功能,
總的來說,spring batch可以支持簡單的、復雜的和大資料量的批處理作業,
2、spring batch業務場景
周期性的提交批處理
把一個任務并行處理
訊息驅動應用分級處理
大規模并行批處理
手工或調度使任務失敗之后重新啟動
有依賴步驟的順序執行(使用作業流驅動擴展)
處理時跳過部分記錄
成批事務:為小批量的或有的存盤程序/腳本的場景使用
十一、什么是 FreeMarker 模板?
https://blog.csdn.net/qq_35112567/article/details/100152445
十二、說說Java Bean的命名規范
(1)JavaBean 類必須是一個公共類,并將其訪問屬性設定為 public
(2)JavaBean 類必須有一個空的建構式:類中必須有一個不帶引數的公用構造器,此構造器也應該通過呼叫各個特性的設定方法來設定特性的預設值,
(3)一個javaBean類不應有公共實體變數,類變數都為private
(4)持有值應該通過一組存取方法(getXxx 和 setXxx)來訪問:對于每個特性,應該有一個帶匹配公用 getter 和 setter 方法的專用實體變數,
屬性為布爾型別,可以使用 isXxx() 方法代替 getXxx() 方法,
通常屬性名是要和 包名、類名、方法名、欄位名、常量名作出區別的:
首先:必須用英文,不要用漢語拼音
1、包(package)
用于將完成不同功能的類分門別類,放在不同的目錄(包)下,包的命名規則:將公司域名反轉作為包名,比如www.sohu.com 對于包名:每個字母都需要小寫,比如:com.sohu.test;該包下的Test類的全名是:com.sohu.Test.Java ,
如果定義類的時候沒有使用package,那么java就認為我們所定義的類位于默認包里面(default package),
2、類
首字母大寫,如果一個類由多個單詞構成,那么每個單詞的首字母都大寫,而且中間不使用任何的連接符,盡量使用英文,如ConnectionFactory
3、方法
首單詞全部小寫,如果一個方法由多個單詞構成,那么從第二個單詞開始首字母大寫,不使用連接符,addPerson
4、欄位
與方法相同,如ageOfPerson
5、常量
所有單詞的字母都是大寫,如果有多個單詞,那么使用下劃線鏈接即可,
如:public static final int AGE_OF_PERSON = 20; //通常加上static
十三、Java Bean 屬性命名規范問題分析
public class User {
private String busName;
private String pCount;
private Boolean isRunning;
//正確的命名方式,駝峰式的
public String getBusName() {
return busName;
}
public void setBusName(String busName) {
this.busName = busName;
}
//這是什么?
public String getpCount() {
return pCount;
}
public void setpCount(String pCount) {
this.pCount = pCount;
}
//這個也是不允許的
public Boolean getIsRunning() {
return isRunning;
}
public void setIsRunning(Boolean isRunning) {
this.isRunning = isRunning;
}
}
1. javabean屬性命名盡量使用常規的駝峰式命名規則
2. 屬性名第一個單詞盡量避免使用一個字母:如eBook, eMail,
3. boolean屬性名避免使用 “is” 開頭的名稱
4. 隨著jdk, eclipse, spring 等軟體版本的不斷提高, 底版本的出現的問題可能在高版本中解決了, 低版本原來正常的代碼可能在高版本環境下不再支持,
上一篇:Java面試題總結(亂序版,2020-08-31)
下一篇:Java面試題總結(附答案)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/146095.html
標籤:java
下一篇:這樣寫代碼,直接被主管攆出去
