補充Java面試記錄


補充Java面試記錄

 

背景:這兩天面試遇到的部分問題都分散在了前面兩篇文摘中,這里再做一些其他的記錄,以備不時之需!

 

一、談談你對SpringBoot的理解?

SpringBoot簡介
SpringBoot是一個框架,它的目的就是用來簡化Spring應用的初始化搭建以及開發過程;該框架使用了特定的方式來進行配置,從而使開發人員不在需要自定義樣板化的配置;它可以自動配置Spring的各種組件,並不依賴代碼生成和XML配置文件。

我對SpringBoot的理解:

SpringBoot是微服務框架的起點,他簡化了配置過程、部署過程和監控過程;它默認配置了很多框架的使用方式,就像maven整合了所有的jar包,SpringBoot整合了很多的框架,同時將其他技術同Spring結合起來形成SpringBoot框架,從而簡化Spring應用的搭建以及開發過程。

二、說說你了解及使用的Java容器?

容器接口:

1、Collection接口;

2、Map接口,存放鍵值對,Map中的值可以是一個容器;

3、Iterator接口。

子接口:

1、List,有序可重復,可以在方法中加入索引參數;

2、Set,無需不可重復,無序因而不能通過索引操作對象;

3、ListIterator,Iterator for List,List是雙向表,因而Iterator上增加了一些新的方法,允許traverse the List in either direction

4、SortedMap,有序;

5、SortedSet,主要用於排序操作,實現此類接口的子類都是排序的子類;

具體容器類:

1、Collection:ArrayList,LinkedList,Vector,Stack,TreeSet,HashSet,LinkedHashSet

2、Map:HashMap,LinkedHashMap,WeakHashMap,TreeMap,HashTable,IdentityHashTable

常用的容器類:

1、ArrayList與LinkedList(均非同步,多線程時需考慮線程安全問題),Vector(同步),Stack

1)List接口支持通過索引的方法來訪問元素,ArrayList隨機訪問快修改慢,LinkedList修改快隨機訪問慢,Vector實現了同步因此比ArrayList慢;

2)LinkedList使用雙向鏈表實現,LinkedList提供額外的get,remove和insert方法在LinkedList的首部或尾部,這些操作是的LinkedList可被用作堆棧(stack),隊列(queue)或雙向隊列(deque);

3)ArrayList沒有定義增長算法,當需要插入大量元素時,可調用ensureCapacity方法提高添加效率;

4)Vector類似於ArrayList,但其是同步的,多線程安全(另外一點區別就是ArrayList擴容時默認增長一半,Vector增長一倍),無論是單線程還是多線程,Vector都比ArrayList慢;

5)Stack繼承自Vector,實現一個后進先出的堆棧;

6)若需要實現同步可以調用Collections工具類的synchronizedList方法。

2、HashMap(非同步),HashTable(線程安全),TreeMap,WeakHashMap

1)HashTable與HashMap的區別:

a.HashTable繼承自Dictionary類,而HashMap繼承自AbstractMap類,但二者都實現了Map接口;

b.HashTable中的方法是Synchronize的,而HashMap中的方法在缺省情況下是非Synchronize的;

c.HashTable中,key和value都不允許出現null值;HashMap中,null可以作為鍵,這樣的鍵只有一個,可以有一個或多個鍵所對應的值為null;

d.HashTable直接使用對象的hashCode,而HashMap重新計算hash值。

2)WeakHashMap是一種改進的HashMap,它對key實行“弱引用”,WeakHashMap使用元素的引用而不是值作為key,也就是說必須在引用相同(a==b)的情況下才能找到相關的值,另外一個key不在被外部引用,那么該key可以被GC回收;

3)TreeMap是SortedMap接口的基於紅黑樹的實現,此類保證了映射按照升序順序排列關鍵字,根據使用的構造方法不同,可能會按照鍵的類的自然順序進行排序。

三、Http&Https的區別?

HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私信息非常不安全,為了保證這些隱私數據能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。簡單來說,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。

四、Http是長連接,還是短連接,長短連接?

在HTTP/1.0中,默認使用的是短連接;But從HTTP/1.1起,默認使用的是長連接。
短連接:
HTTP短連接,也稱非持久連接,客戶端和服務器進行一次HTTP請求/響應后,就關閉連接;下一次的HTTP請求/響應就需要重新建立連接。在HTTP/1.0中,默認使用的是短連接。
長連接:
HTTP長連接,也稱持久連接,客戶端和服務器建立一次連接后,可以在這條連接上進行多次請求/響應操作;持久連接可以設置保活時間(keep-alive),也可以不設置。從HTTP/1.1起,默認使用的是長連接。
使用長連接的HTTP協議,會在響應消息報文中加入如下字段: Connection:keep-alive ,這個字段是讓一個TCP連接更持久一些。

五、http與Tcp的關系?

1、TCP連接
手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議,可以使手機終端通過無線網絡建立TCP連接;TCP協議可以對上層網絡提供接口,使上層網絡數據的傳輸建立在“無差別”的網絡之上;
建立起一個TCP連接需要經過“三次握手”:
第一次握手:客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連 接之前,TCP 連接都將被一直保持下去;斷開連接時服務器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過“四次握手”(過程就是服務器和客戶端交互,最終確定斷開)。
2、HTTP連接
HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用;
HTTP連接最顯著的特點是客戶端發送的每次請求都需要服務器回送響應,在請求結束后,會主動釋放連接,從建立連接到關閉連接的過程稱為“一次連接”;
1)在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求后,就自動釋放連接;
2)在HTTP 1.1中則可以在一次連接中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束后再發送下一個請求;
由於HTTP在每次請求結束后都會主動釋放連接,因此HTTP連接是一種“短連接”,要保持客戶端程序的在線狀態,需要不斷地向服務器發起連接請求。通常的做法是即使不需要獲得任何數據,客戶端也保持每隔一段固定的時間向服務器發送一次“保持連接”的請求,服務器在收到該請求后對客戶端進行回復,表明知道客 戶端“在線”;若服務器長時間無法收到客戶端的請求,則認為客戶端“下線”,若客戶端長時間無法收到服務器的回復,則認為網絡已經斷開。

六、Http協議的過程?

當輸入www.baidu.com時,頁面會作何選擇:

1.域名解析

域名解析檢查順序為:瀏覽器自身DNS緩存---》OS自身的DNS緩存--》讀取host文件--》本地域名服務器--》權限域名服務器--》根域名服務器;如果有且沒有過期,則結束本次域名解析;域名解析成功之后,進行后續建立連接的操作。

2.tcp3次握手建立連接;

3.建立連接后,發起http請求;

4.服務器端響應http請求,瀏覽器得到到http請求的內容;

5.瀏覽器解析html代碼,並請求html代碼中的資源;

6.瀏覽器對頁面進行渲染,將頁面向用戶展示。

七、說說你對RPC的了解?
RPC(Remote Promote Call)一種進程間通信方式;其允許像調用本地服務一樣調用遠程服務。
RPC框架的主要目標就是讓遠程服務調用更簡單、透明;RPC框架負責屏蔽底層的傳輸方式(TCP或者UDP)、序列化方式(XML/JSON/二進制)和通信細節。
開發人員在使用的時候只需要了解誰在什么位置提供了什么樣的遠程服務接口即可,並不需要關心底層通信細節和調用過程。

八、怎么把http變為https?

JAVA環境下http修改https:使用.pfx證書
1.在Tomcat上部署PFX證書:打開Tomcat配置文件 conf\server.xml,注釋code里有:Define a SSL HTTP/1.1 Connector on port 8443,取消注釋並添keystoreFile,keystoreType,keystorePass屬性:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="C:/ProgramData/RSSBus/connect/data/test.pfx" certificateKeystoreType="PKCS12" certificateKeystorePassword="test" />
</SSLHostConfig>
</Connector>

2.重啟Tomcat即可。

九、說說Mysql優化?

https://www.cnblogs.com/taojietaoge/p/11117806.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM