【毕业求职季】-听说你想去大厂看学妹,带你看看字节跳动抖音电商后端面试长啥样?
前言
畢業(yè)求職季,你準(zhǔn)備好了嗎?希望各位小伙伴能夠苦練技術(shù),早日達(dá)成自己心儀的offer。
下面是博主收集的一些關(guān)于面試的比較幫的面試題目,有需要的小伙伴可自行訂閱下載。
Spring系列面試題129道(附答案解析)
Redis,快看看這40道面試題
MyBatis的27道面試題
73道Java面試題合集-多線程與進(jìn)程
28道ZooKeeper面試題
【一面】
注:面試官特別友善,面試體驗(yàn)特別好
-
自我介紹
-
實(shí)習(xí)時(shí)間挺長(zhǎng)?
-
數(shù)組和鏈表的區(qū)別?
二者都屬于一種數(shù)據(jù)結(jié)構(gòu)
從邏輯結(jié)構(gòu)來(lái)看
1. 數(shù)組必須事先定義固定的長(zhǎng)度(元素個(gè)數(shù)),不能適應(yīng)數(shù)據(jù)動(dòng)態(tài)地增減的情況。當(dāng)數(shù)據(jù)增加時(shí),可能超出原先定義的元素個(gè)數(shù);當(dāng)數(shù)據(jù)減少時(shí),造成內(nèi)存浪費(fèi);數(shù)組可以根據(jù)下標(biāo)直接存取。
2. 鏈表動(dòng)態(tài)地進(jìn)行存儲(chǔ)分配,可以適應(yīng)數(shù)據(jù)動(dòng)態(tài)地增減的情況,且可以方便地插入、刪除數(shù)據(jù)項(xiàng)。(數(shù)組中插入、刪除數(shù)據(jù)項(xiàng)時(shí),需要移動(dòng)其它數(shù)據(jù)項(xiàng),非常繁瑣)鏈表必須根據(jù)next指針找到下一個(gè)元素
從內(nèi)存存儲(chǔ)來(lái)看
1. (靜態(tài))數(shù)組從棧中分配空間, 對(duì)于程序員方便快速,但是自由度小
2. 鏈表從堆中分配空間, 自由度大但是申請(qǐng)管理比較麻煩
從上面的比較可以看出,如果需要快速訪問(wèn)數(shù)據(jù),很少或不插入和刪除元素,就應(yīng)該用數(shù)組;相反, 如果需要經(jīng)常插入和刪除元素就需要用鏈表數(shù)據(jù)結(jié)構(gòu)了。
-
ArrayList的擴(kuò)容是怎么實(shí)現(xiàn)?
?
首先有三種構(gòu)造方法,空參,指定大小,和指定集合
public ArrayList();public ArrayList(Collection<? extends E> c)public ArrayList(int initialCapacity)后兩種通過(guò)創(chuàng)造對(duì)象,或指定大小來(lái)初始化內(nèi)部數(shù)據(jù)即可。
空參的時(shí)候,默認(rèn)數(shù)組長(zhǎng)度是0,也就是初始化數(shù)組長(zhǎng)度為0
添加數(shù)據(jù)后,
public boolean add(E e) { //確保內(nèi)部容量(通過(guò)判斷,如果夠則不進(jìn)行操作;容量不夠就擴(kuò)容來(lái)確保內(nèi)部容量)ensureCapacityInternal(size + 1); // ①Increments modCount!!elementData[size++] = e;//②return true;}?
① ensureCapacityInternal方法名的英文大致是“確保內(nèi)部容量”,size表示的是執(zhí)行添加之前的元素個(gè)數(shù),并非ArrayList的容量,容量應(yīng)該是數(shù)組elementData的長(zhǎng)度。ensureCapacityInternal該方法通過(guò)將現(xiàn)有的元素個(gè)數(shù)數(shù)組的容量比較。看如果需要擴(kuò)容,則擴(kuò)容。
②是將要添加的元素放置到相應(yīng)的數(shù)組中。
根據(jù)傳入的最小需要容量minCapacity來(lái)和數(shù)組的容量長(zhǎng)度對(duì)比,若minCapactity大于或等于數(shù)組容量,則需要進(jìn)行擴(kuò)容。
綜上所述,ArrayList的空參構(gòu)造方法相當(dāng)于在沒(méi)指定initialCapacity時(shí)就是會(huì)使用延遲分配對(duì)象數(shù)組空間,當(dāng)?shù)谝淮尾迦朐貢r(shí)才分配10(默認(rèn))個(gè)對(duì)象空間。假如有20個(gè)數(shù)據(jù)需要添加,那么會(huì)分別在第一次的時(shí)候,將ArrayList的容量變?yōu)?0 ;之后擴(kuò)容會(huì)按照1.5倍增長(zhǎng)。也就是當(dāng)添加第11個(gè)數(shù)據(jù)的時(shí)候,Arraylist繼續(xù)擴(kuò)容變?yōu)?0*1.5=15;當(dāng)添加第16個(gè)數(shù)據(jù)時(shí),繼續(xù)擴(kuò)容變?yōu)?5 * 1.5 =22個(gè)。
?
如果通過(guò)無(wú)參構(gòu)造的話,初始數(shù)組容量為0,當(dāng)真正對(duì)數(shù)組進(jìn)行添加時(shí),才真正分配容量。每次按照1.5倍(位運(yùn)算)的比率通過(guò)copeOf的方式擴(kuò)容。
/**增加容量,以確保它至少能容納*由最小容量參數(shù)指定的元素?cái)?shù)。* @param mincapacity所需的最小容量 */private void grow(int minCapacity) { // overflow-conscious codeint oldCapacity = elementData.length; //>>位運(yùn)算,右移動(dòng)一位。 整體相當(dāng)于newCapacity =oldCapacity + 0.5 * oldCapacity// jdk1.7采用位運(yùn)算比以前的計(jì)算方式更快int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0)newCapacity = minCapacity; //jdk1.7這里增加了對(duì)元素個(gè)數(shù)的最大個(gè)數(shù)判斷,jdk1.7以前是沒(méi)有最大值判斷的,MAX_ARRAY_SIZE 為int最大值減去8(不清楚為什么用這個(gè)值做比較)if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity); // 最重要的復(fù)制元素方法elementData = Arrays.copyOf(elementData, newCapacity);}-
介紹一下hashmap,介紹一下put操作做了哪些步驟?(問(wèn)了細(xì)節(jié))
-
hashmap判定重復(fù)是==還是equals
-
hashmap1.7和1.8?
-
hashMap是線程安全嗎?介紹一下concurrentHashMap?如何保證線程安全的同時(shí)保證吞吐量?
-
synchronized在jdk1.8做了哪些優(yōu)化?
-
synchronized為什么要設(shè)計(jì)成可重入?
???????重入鎖實(shí)現(xiàn)可重入性原理或機(jī)制是:每一個(gè)鎖關(guān)聯(lián)一個(gè)線程持有者和計(jì)數(shù)器,當(dāng)計(jì)數(shù)器為 0 時(shí)表示該鎖沒(méi)有被任何線程持有,那么任何線程都可能獲得該鎖而調(diào)用相應(yīng)的方法;當(dāng)某一線程請(qǐng)求成功后,JVM會(huì)記下鎖的持有線程,并且將計(jì)數(shù)器置為 1;此時(shí)其它線程請(qǐng)求該鎖,則必須等待;而該持有鎖的線程如果再次請(qǐng)求這個(gè)鎖,就可以再次拿到這個(gè)鎖,同時(shí)計(jì)數(shù)器會(huì)遞增;當(dāng)線程退出同步代碼塊時(shí),計(jì)數(shù)器會(huì)遞減,如果計(jì)數(shù)器為 0,則釋放該鎖。
-
volatile的原理?解決什么問(wèn)題?
-
介紹一下JMM
???????
原子性?是指在一個(gè)操作中就是cpu不可以在中途暫停然后再調(diào)度,既不被中斷操作,要不執(zhí)行完成,要不就不執(zhí)行。
可見(jiàn)性?是指當(dāng)多個(gè)線程訪問(wèn)同一個(gè)變量時(shí),一個(gè)線程修改了這個(gè)變量的值,其他線程能夠立即看得到修改的值。
有序性?即程序執(zhí)行的順序按照代碼的先后順序執(zhí)行。
-
Lock接口?了解過(guò)AQS嘛?
-
ReentrantLock可以做公平鎖嗎?怎么實(shí)現(xiàn)公平鎖?
-
算法題:用棧實(shí)現(xiàn)隊(duì)列(Leetcode)其中棧的數(shù)據(jù)結(jié)構(gòu)也自己實(shí)現(xiàn)
-
String s1 = “abc” String s2 = new String(“abc”)兩個(gè)語(yǔ)句分別創(chuàng)建了幾個(gè)對(duì)象?對(duì)象存儲(chǔ)的位置?s1和s2相等嗎?執(zhí)行順序先是第一條再是第二條創(chuàng)建幾個(gè)對(duì)象?
-
interface和abstract的區(qū)別
??????? 1.abstract class 在 Java 語(yǔ)言中表示的是一種繼承關(guān)系,一個(gè)類只能使用一次繼承關(guān)系。但是,一個(gè)類卻可以實(shí)現(xiàn)多個(gè)interface。
2.在abstract class 中可以有自己的數(shù)據(jù)成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是static final的,不過(guò)在 interface中一般不定義數(shù)據(jù)成員),所有的成員方法都是abstract的。
3.abstract class和interface所反映出的設(shè)計(jì)理念不同。其實(shí)abstract class表示的是"is-a"關(guān)系,interface表示的是"like-a"關(guān)系。
4.實(shí)現(xiàn)抽象類和接口的類必須實(shí)現(xiàn)其中的所有方法。抽象類中可以有非抽象方法。接口中則不能有實(shí)現(xiàn)方法。
5.接口中定義的變量默認(rèn)是public static final 型,且必須給其初值,所以實(shí)現(xiàn)類中不能重新定義,也不能改變其值。
6.抽象類中的變量默認(rèn)是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。
7.接口中的方法默認(rèn)都是 public,abstract 類型的。
-
abstract抽象類里面一定要有抽象方法嗎?
-
interface可以寫方法的實(shí)現(xiàn)嗎?
-
jvm的類加載機(jī)制?
-
雙親委派機(jī)制?
-
TCP屬于網(wǎng)絡(luò)的哪一層?
-
TCP是面向連接的?為什么三次握手????????
第一次握手:建立連接時(shí),客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器確認(rèn);SYN:同步序列編號(hào)(Synchronize Sequence Numbers)。
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài),完成三次握手。
-
TCP怎么保證可靠傳輸?
-
滑動(dòng)窗口的大小由哪一端來(lái)控制?server為什么要控制?client為什么要控制?
-
擁塞控制知道嗎?
-
mysql聯(lián)合索引一道題目:建立了聯(lián)合a,b,c。
?a,b,c會(huì)走索引嗎?a,c會(huì)走索引嗎?
?
?
-
算法題:無(wú)重復(fù)字符的最長(zhǎng)子串(leetcode)
-
你有什么問(wèn)題要問(wèn)我嗎?問(wèn)了一下業(yè)務(wù)?問(wèn)了一下什么語(yǔ)言?
?
【二面】
-
自我介紹
-
介紹一下springMVC和Springboot和Mybatis
-
springMVC的一些細(xì)節(jié)
-
springboot的作用
-
介紹幾種排序算法,時(shí)間復(fù)雜度,空間復(fù)雜度
-
桶排序
-
快速排序
-
算法題:實(shí)現(xiàn)快速排序
-
堆排序怎么實(shí)現(xiàn)
-
數(shù)據(jù)結(jié)構(gòu)中圖的表示有哪些
-
哪種情況下用矩陣、哪種情況下用鄰接表
-
求兩個(gè)點(diǎn)之間的最短距離?介紹一下迪杰斯特拉算法?
-
介紹一下事務(wù)?
-
介紹一下三大范式?
-
進(jìn)程和線程的區(qū)別
-
進(jìn)程調(diào)度有哪幾種方式?有哪幾種評(píng)價(jià)方式?
-
介紹一下虛擬內(nèi)存?為什么使用虛擬內(nèi)存?(兩種優(yōu)點(diǎn))
-
算法題:對(duì)無(wú)序的鏈表進(jìn)行排序(不可以使用Java中的容器)
?
【三面】
-
自我介紹
-
學(xué)校里學(xué)的哪些課程比較受用?
-
一個(gè)指令從軟件到操作系統(tǒng)到硬件執(zhí)行?整個(gè)過(guò)程做了哪些?
-
啟動(dòng)一個(gè)應(yīng)用,監(jiān)聽(tīng)一個(gè)端口對(duì)外服務(wù)?啟動(dòng)服務(wù)以后,本身沒(méi)有
問(wèn)題,但是客戶端連不到服務(wù)?如何診斷?
-
一個(gè)url從輸入到頁(yè)面解析的過(guò)程?
-
DNS用什么傳輸協(xié)議?
-
用戶如何找到DNS服務(wù)器?
-
DNS服務(wù)器是怎么知道IP地址的?如何知道去哪里找DNS服務(wù)器?
-
JDK和JRE的區(qū)別?
-
類加載的機(jī)制?
-
一道問(wèn)題,有關(guān)于Java的值傳遞
-
手撕sql
employee(id, name, salary)
office(id, city)
寫一個(gè)sql,輸出每個(gè)城市收入最高的員工的名字?后面改成每個(gè)城市
收入最高的收入?
-
算法題:下一個(gè)排列(Leetcode)
-
數(shù)學(xué)題:參加一個(gè)游戲節(jié)目,你是參賽者,主持人會(huì)在你的前面放三
個(gè)盒子,其中一個(gè)盒子藏獎(jiǎng)品,你選中一個(gè)盒子之后,主持人會(huì)開(kāi)啟
另外兩個(gè)中沒(méi)獎(jiǎng)品的一個(gè)盒子,剩下一個(gè)盒子。請(qǐng)問(wèn)現(xiàn)在有機(jī)會(huì)讓你
換成另外一個(gè)盒子,你換盒子和不換盒子的中獎(jiǎng)概率是怎么樣的?
-
你有什么問(wèn)題要問(wèn)我嗎??
總結(jié)
以上是生活随笔為你收集整理的【毕业求职季】-听说你想去大厂看学妹,带你看看字节跳动抖音电商后端面试长啥样?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 微信黑科技-推荐系统,一文带你看懂为什么
- 下一篇: 喜欢产品小师妹?你必须知道的一点产品知识