補充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