准备面试二
1、線程中的run和start的區(qū)別?
?? ?run()相當(dāng)于線程的任務(wù)處理邏輯入口方法,它由Java虛擬機在運行相應(yīng)線程時直接調(diào)用
?? ?start()的作用是啟動相應(yīng)的線程,該線程進入就緒狀態(tài),start()調(diào)用結(jié)束并不表示相應(yīng)線程已經(jīng)開始運行,這個線程可能稍后運行,也可能永遠不運行。
2、可不可以不通過start()方法,直接調(diào)用run()方法呢?
?? ?可以,如果直接調(diào)用線程類的run()方法,它就會被當(dāng)作一個普通的函數(shù)調(diào)用;
????? start()方法可以異步地調(diào)用run()方法,但是直接調(diào)用run()方法確實同步的,不能達到多線程的目的。
3、跨域的出現(xiàn)和解決
?? ?跨域是指a頁面想獲取b頁面資源,如果a。b頁面的協(xié)議,域名,端口不同或者是a頁面是ip地址,b頁面為域名地址,所進行的訪問行動都是跨域的,而瀏覽器為了安全問題一般都限制跨域訪問,也就是不允許跨域請求資源。
?? ?解決:Jsonp,把請求路徑轉(zhuǎn)成jsonp的格式,再進行請求
?? ?JSONP的實現(xiàn):創(chuàng)建一個回調(diào)函數(shù),然后在遠程服務(wù)器上調(diào)用這個函數(shù)并且將JSON數(shù)據(jù)格式作為參數(shù)傳遞,完成回調(diào),將JSON數(shù)據(jù)填充進回調(diào)函數(shù)。
?? ?SpringBoot跨域解決方案:在Controller上加@CrossOrigin(最好看下原理)
?? ?@CrossOrigin(origins = "*",maxAge = 3600)//origin="*"代表所有域名都可訪問
//maxAge飛行前響應(yīng)的緩存持續(xù)時間的最大年齡,簡單來說就是Cookie的有效期 單位為秒
4、GC回收垃圾的時候System.gc()和finalize()的區(qū)別
?? ?收集并刪除未引用的對象。可以通過"System.gc()"來觸發(fā)垃圾回收,但并不保證會確實進行垃圾回收。
?? ?JVM的垃圾回收只收集那些由new關(guān)鍵字創(chuàng)建的對象,所以。如果不是用new創(chuàng)建的對象,你可以用finalize函數(shù)來執(zhí)行處理。
5、Java創(chuàng)建對象的幾種方式?
?? ?1.使用new關(guān)鍵字,比如:Student student = new Student();
?? ?2.使用Class類的newInstance方法,這個newInstance方法調(diào)用無參的構(gòu)造器創(chuàng)建對象:Student stu = Student.class.newInstance();
?? ?3.使用Constructor類的newInstance方法,java.lang.relect.Constructor類里也有一個newInstance方法可以創(chuàng)建對象。我們可以通過這個newInstance方法調(diào)用有參數(shù)的和私有的構(gòu)造函數(shù),事實上Class的newInstance方法內(nèi)部調(diào)用Constructor的newInstance方法:Student stu = constructor.newInstance();
?? ?4、使用Clone的方法:要使用clone方法,我們必須先實現(xiàn)Cloneable接口并實現(xiàn)其定義的clone方法。如:Student stu2 = <Student>stu.clone();
6、MQ消息的丟失和中途宕機解決?
?? ?1.服務(wù)端丟失:把內(nèi)存中的消息持久化,重啟mq時進行從序列化文件中獲取
?? ?2.客戶端丟失:用戶發(fā)出的消息還在緩存中,mq可以重新進行read
7、請求方式有幾種?
?? ?1.GET:請求指定的頁面信息,并返回實體主體
?? ?2.POST:請求服務(wù)器接受所指定的文檔作為對所標(biāo)識的URI的新的從屬實體
?? ?2.HEAD:只請求頁面的首部
?? ?3.DELETE:請求服務(wù)器刪除指定的頁面
?? ?4.COPY:請求服務(wù)器將指定的頁面移至另一個網(wǎng)絡(luò)地址
?? ?5.LINK:請求服務(wù)器建立連接關(guān)系
?? ?6.UNLLINK:斷開連接關(guān)系
8、volatile輕量級,只能修飾變量。synchronized重量級,還可修飾方法
9、TCP的三次握手,在進行數(shù)據(jù)傳輸前,必須和對方建立可靠連接
?? ?1.客戶端發(fā)送請求通知后臺
?? ?2.后臺回應(yīng)客戶端可以建立連接
?? ?3.客戶端檢查連接標(biāo)志,正確則與服務(wù)器建立連接,后續(xù)開始傳輸數(shù)據(jù)
10、UDP用戶協(xié)議數(shù)據(jù),是一種無連接的傳輸層協(xié)議,無狀態(tài)傳輸協(xié)議;優(yōu)點是快,要求資源少,沒有握手連接,但是不穩(wěn)定,數(shù)據(jù)傳遞時容易丟包。
11、Redis底層協(xié)議是TCP
12、java如何實現(xiàn)秒殺商品
?? ?把商品數(shù)量放入到redis中,當(dāng)某一個用戶購買成功后,同步緩存,數(shù)量為0,別的用戶就不能購買。
13、Redis緩存同步的方法
?? ?讀取數(shù)據(jù)的時候。先從redis里面查,若沒有,再去數(shù)據(jù)庫查,同時寫到redis里面,并且設(shè)置失效時間。
14、ajax傳遞對象,controller如何接收
?? ?使用@requestBody注解
?? ?通過@requestBody可以將請求體中的JSON字符串綁定到相應(yīng)的bean上。
15、Java中的隊列
?? ?隊列是一種特殊的線性表,它只允許在表的前段(front)進行刪除操作,只允許在表的后端(rear)進行插入操作。進行插入操作的端稱未隊尾,進行刪除操作的端成為隊頭。對于一個隊列來說,每個元素總是從隊列的rear端進入隊列,然后等待該元素之前的所有元素出隊之后,當(dāng)前元素才能出隊,遵循先進先出(FIFO)的原則,如果隊列中不包含任何元素,該隊列被稱為空隊列。
?? ?Java提供了一個Queue接口,并為該接口提供了眾多的實現(xiàn)類:ArrayBlockingQueue、LinkedBlockingQueue、ConcurrentLinkedQueue。
?? ?ArrayBlockingQueue、LinkedBlockingQueue和CurrentLinkedQueue,它們都是線程安全的隊列。LinkedBlockingQueue吞吐量較高,但是性能低。
轉(zhuǎn)載于:https://www.cnblogs.com/tk970803/p/11140674.html
總結(jié)
- 上一篇: git 避免重复输入用户名密码问题解决
- 下一篇: 项目上线任务