
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
????????個人主頁:人不走空??????
??系列專欄:算法專題
?詩詞歌賦:斯是陋室,惟吾德馨
目錄
1.多態(tài)
2.hashmap,hashtable和concurrenthashmap,問的定義實(shí)現(xiàn)和區(qū)別
3.jvm的運(yùn)行時數(shù)據(jù)區(qū)域有哪些,作用
4.四種引用類型
5.類加載-雙親委派機(jī)制
6.多線程情況下的共享資源訪問問題有哪些,怎么解決
7.結(jié)合項(xiàng)目講講鎖
8.GC回收算法,分代回收算法以及對應(yīng)的新生代老生代用的什么回收算法
9.tcp和udp區(qū)別
10.http和https的區(qū)別
11.https的密鑰
12.返回鏈表的倒數(shù)第k個值
????????個人主頁:人不走空??????
??系列專欄:算法專題
?詩詞歌賦:斯是陋室,惟吾德馨
作者其他作品:
-
多態(tài): 多態(tài)是指同一個方法調(diào)用由于對象不同可能會產(chǎn)生不同的行為。在Java中,多態(tài)性可以通過繼承和接口實(shí)現(xiàn)。具體而言,多態(tài)是指父類或接口的引用變量可以指向子類的對象,通過父類或接口中定義的方法來調(diào)用實(shí)現(xiàn)類的方法。
-
HashMap,Hashtable和ConcurrentHashMap的定義、實(shí)現(xiàn)和區(qū)別:
- HashMap:HashMap是基于哈希表的Map接口實(shí)現(xiàn),它不是線程安全的,允許null鍵和null值。
- Hashtable:Hashtable也是基于哈希表的Map接口實(shí)現(xiàn),與HashMap相比,它是線程安全的,不允許null鍵和null值。
- ConcurrentHashMap:ConcurrentHashMap是線程安全的HashMap的替代品,在并發(fā)情況下執(zhí)行更好。它通過分段鎖(Segment)來實(shí)現(xiàn)線程安全,允許高并發(fā)訪問,可以同時讀取而不需要加鎖,提高了并發(fā)性能。
-
JVM的運(yùn)行時數(shù)據(jù)區(qū)域和作用:
- 程序計(jì)數(shù)器:線程私有,指向當(dāng)前線程正在執(zhí)行的字節(jié)碼指令的地址。
- Java虛擬機(jī)棧:線程私有,存儲方法的局部變量、操作數(shù)棧、動態(tài)鏈接、方法出口等信息。
- 本地方法棧:線程私有,為執(zhí)行Native方法服務(wù)。
- 堆:存儲對象實(shí)例,是線程共享的內(nèi)存區(qū)域。
- 方法區(qū):存儲類信息、常量、靜態(tài)變量等數(shù)據(jù)。
- 運(yùn)行時常量池:方法區(qū)的一部分,存放編譯期生成的各種字面量和符號引用。
-
四種引用類型:
- 強(qiáng)引用:最常見的引用類型,只要存在強(qiáng)引用,對象就不會被垃圾回收器回收。
- 軟引用:用于描述一些還有用但并非必需的對象,在系統(tǒng)即將發(fā)生內(nèi)存溢出之前,會將這些對象列入回收范圍。
- 弱引用:比軟引用更弱的引用類型,只能存活到下一次垃圾回收之前。
- 虛引用:也稱為幽靈引用或者幻影引用,不能單獨(dú)使用,必須與引用隊(duì)列聯(lián)合使用。用于跟蹤對象被垃圾回收的狀態(tài)。
-
類加載-雙親委派機(jī)制:
類加載的雙親委派機(jī)制是 Java 類加載機(jī)制的一種重要原則。其核心思想是當(dāng)一個類加載器收到加載類的請求時,它會先將這個請求委托給父類加載器去完成,只有在父類加載器無法完成加載的情況下,子類加載器才會嘗試自己去加載。
具體來說,當(dāng)一個類加載器需要加載一個類時,它會先詢問其父加載器是否已經(jīng)加載了這個類。如果父加載器已經(jīng)加載了,就直接返回父加載器所加載的類;如果父加載器沒有加載,那么該類加載器會嘗試自己加載這個類。這個機(jī)制在 Java 中是通過
ClassLoader
類的loadClass()
方法實(shí)現(xiàn)的。雙親委派機(jī)制的優(yōu)點(diǎn)在于它可以保證 Java 類的唯一性,防止重復(fù)加載,同時也可以保證 Java 類的安全性,因?yàn)楹诵念悗焓怯蓡宇惣虞d器加載的,而開發(fā)者編寫的類通常由應(yīng)用類加載器加載,這樣可以防止開發(fā)者意外或惡意地替換核心類庫中的類。
總的來說,類加載的雙親委派機(jī)制有助于保證類加載的順序和唯一性,同時也有利于 Java 的安全性和穩(wěn)定性。
-
多線程情況下的共享資源訪問問題: 多線程情況下可能會出現(xiàn)競態(tài)條件、死鎖、活鎖等問題。解決方法包括使用同步機(jī)制(synchronized、Lock)、使用并發(fā)容器(如ConcurrentHashMap)、避免共享資源等。
-
結(jié)合項(xiàng)目講講鎖: 這個問題需要根據(jù)你所涉及的項(xiàng)目具體情況進(jìn)行回答,比如在Java項(xiàng)目中可能會使用synchronized關(guān)鍵字、ReentrantLock、ReadWriteLock等來實(shí)現(xiàn)鎖機(jī)制,用于保護(hù)共享資源的訪問。
-
GC回收算法、分代回收算法以及對應(yīng)的新生代老生代用的什么回收算法: 常見的GC回收算法包括標(biāo)記-清除、復(fù)制、標(biāo)記-整理等。Java中的分代回收算法將堆內(nèi)存分為新生代和老生代,新生代通常使用復(fù)制算法(如Serial、ParNew、G1的部分區(qū)域),老生代通常使用標(biāo)記-清除或標(biāo)記-整理算法(如CMS、G1)。
-
TCP和UDP區(qū)別: TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是兩種常用的網(wǎng)絡(luò)傳輸協(xié)議,它們在網(wǎng)絡(luò)通信中扮演不同的角色。TCP是一種面向連接的協(xié)議,通信雙方在傳輸數(shù)據(jù)前需要建立連接,然后進(jìn)行可靠的數(shù)據(jù)傳輸,最后釋放連接。TCP提供可靠的數(shù)據(jù)傳輸,確保數(shù)據(jù)按照發(fā)送的順序到達(dá),并且無差錯地到達(dá)目的地。相比之下,UDP是一種無連接的協(xié)議,通信雙方在傳輸數(shù)據(jù)前不需要建立連接,也不需要進(jìn)行連接的釋放。UDP以數(shù)據(jù)報(bào)的形式傳輸數(shù)據(jù),每個數(shù)據(jù)報(bào)都是一個完整的消息單元,不提供數(shù)據(jù)傳輸?shù)目煽啃员WC,發(fā)送的數(shù)據(jù)報(bào)可能會丟失或者亂序。由于TCP提供了可靠性、順序性以及連接管理等特性,適用于需要可靠傳輸?shù)膽?yīng)用場景,如網(wǎng)頁瀏覽、文件下載等;而UDP則適用于對傳輸延遲要求較高、對可靠性要求較低的應(yīng)用場景,如實(shí)時音視頻傳輸、在線游戲等。
-
HTTP和HTTPS的區(qū)別:
HTTP 是超文本傳輸協(xié)議,信息是明文傳輸,存在安全風(fēng)險的問題。HTTPS 則解決 HTTP 不安全的缺陷,在 TCP 和 HTTP 網(wǎng)絡(luò)層之間加入了 SSL/TLS 安全協(xié)議,使得報(bào)文能夠加密傳輸。
HTTP 連接建立相對簡單, TCP 三次握手之后便可進(jìn)行 HTTP 的報(bào)文傳輸。而 HTTPS 在 TCP 三次握手之后,還需進(jìn)行 SSL/TLS 的握手過程,才可進(jìn)入加密報(bào)文傳輸。
兩者的默認(rèn)端口不一樣,HTTP 默認(rèn)端口號是 80,HTTPS 默認(rèn)端口號是 443。
HTTPS 協(xié)議需要向 CA(證書權(quán)威機(jī)構(gòu))申請數(shù)字證書,來保證服務(wù)器的身份是可信的。
-
HTTPS的密鑰: HTTPS使用非對稱加密和對稱加密相結(jié)合的方式進(jìn)行通信。在握手階段,客戶端和服務(wù)器端會協(xié)商出對稱加密算法和密鑰,然后使用對稱加密算法進(jìn)行通信。
-
返回鏈表的倒數(shù)第k個值: 這可以通過快慢指針來實(shí)現(xiàn)。具體做法是讓一個指針先移動k步,然后讓另一個指針從頭開始和第一個指針一起移動,當(dāng)?shù)谝粋€指針到達(dá)鏈表尾部時,第二個指針就指向了倒數(shù)第k個節(jié)點(diǎn)。
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
public class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
if (head == null || k <= 0) {
return null;
}
ListNode slow = head;
ListNode fast = head;
// 讓快指針先移動k步
for (int i = 0; i < k; i++) {
if (fast == null) {
return null; // 如果鏈表長度小于k,則返回null
}
fast = fast.next;
}
// 快慢指針一起移動,直到快指針到達(dá)鏈表末尾
while (fast != null) {
slow = slow.next;
fast = fast.next;
}
// 此時慢指針即指向倒數(shù)第k個節(jié)點(diǎn)
return slow;
}
public static void main(String[] args) {
// 創(chuàng)建一個鏈表: 1 -> 2 -> 3 -> 4 -> 5
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
Solution solution = new Solution();
int k = 2;
ListNode result = solution.getKthFromEnd(head, k);
// 打印倒數(shù)第k個節(jié)點(diǎn)的值
if (result != null) {
System.out.println("倒數(shù)第 " + k + " 個節(jié)點(diǎn)的值為: " + result.val);
} else {
System.out.println("鏈表長度小于 " + k + ",無法找到倒數(shù)第 " + k + " 個節(jié)點(diǎn)");
}
}
}
作者其他作品:
【Java】Spring循環(huán)依賴:原因與解決方法
OpenAI Sora來了,視頻生成領(lǐng)域的GPT-4時代來了
[Java·算法·簡單] LeetCode 14. 最長公共前綴 詳細(xì)解讀
【Java】深入理解Java中的static關(guān)鍵字
[Java·算法·簡單] LeetCode 28. 找出字a符串中第一個匹配項(xiàng)的下標(biāo) 詳細(xì)解讀
了解 Java 中的 AtomicInteger 類
算法題 — 整數(shù)轉(zhuǎn)二進(jìn)制,查找其中1的數(shù)量
深入理解MySQL事務(wù)特性:保證數(shù)據(jù)完整性與一致性文章來源:http://www.zghlxwxcb.cn/news/detail-841637.html
Java企業(yè)應(yīng)用軟件系統(tǒng)架構(gòu)演變史文章來源地址http://www.zghlxwxcb.cn/news/detail-841637.html
到了這里,關(guān)于小米安卓春招面試一面的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!