字節跳動前端一面經歷

今天參加了字節跳動的網面,對於人生第一次面試大廠,面試的時候真的很緊張!某天在牛客上看到字節招收Web前端實習生,我就不抱任何期望的投出了我的簡歷。然而竟然收到了一面通知。由於什麼也沒準備,一面自然而然地就涼了。不過這次也是一次經驗,讓我知道自己還有什麼需要努力的地方,下面就寫下這次面試的相關問題。

面試ing
1、自我介紹
2、知道css中的盒子模型嗎

所有HTML元素可以看作盒子,在CSS中,"box model"這一術語是用來設計和佈局時使用。
CSS盒模型本質上是一個盒子,封裝周圍的HTML元素,它包括:邊距,邊框,填充,和實際內容。
盒模型允許我們在其它元素和周圍元素邊框之間的空間放置元素。
不同部分說明:
Margin(外邊距) - 清除邊框外的區域,外邊距是透明的。
Border(邊框) - 圍繞在內邊距和內容外的邊框。
Padding(內邊距) - 清除內容周圍的區域,內邊距是透明的。
Content(內容) - 盒子的內容,顯示文本和圖像。


3、你用過或者瞭解什麼框架嗎?

知道vue,現在比較熱門,其他的不太清楚
其實有React、Vue、Angular三大主流框架


4、js的數據類型有哪些

8種。Number、String、Boolean、Null、undefined、object、symbol、bigInt。


5、跨域問題如何解決

同源策略:瀏覽器安全策略,同協議、ip、端口的腳本纔會執行。
只要協議、域名、端口有任何一個不同,都被當作是不同的域
js跨域是指通過js在不同的域之間進行數據傳輸或通信


6、知道閉包嗎

閉包就是能夠讀取其他函數內部變量的函數。
閉包的用途:可以讀取函數內部的變量,並且讓這些變量的值始終保持在內存中


7、說一下三次握手是什麼

所謂的三次握手即TCP連接的建立。這個連接必須是一方主動打開,另一方被動打開的。
握手之前主動打開連接的客戶端結束CLOSED階段,被動打開的服務器端也結束CLOSED階段,並進入LISTEN階段。隨後開始“三次握手”:
(1)首先客戶端向服務器端發送一段TCP報文,其中:標記位爲SYN,表示“請求建立新連接”;序號爲Seq=X(X一般爲1);隨後客戶端進入SYN-SENT階段。
(2)服務器端接收到來自客戶端的TCP報文之後,結束LISTEN階段。並返回一段TCP報文,其中:
標誌位爲SYN和ACK,表示“確認客戶端的報文Seq序號有效,服務器能正常接收客戶端發送的數據,並同意創建新連接”(即告訴客戶端,服務器收到了你的數據);序號爲Seq=y;確認號爲Ack=x+1,表示收到客戶端的序號Seq並將其值加1作爲自己確認號Ack的值;隨後服務器端進入SYN-RCVD階段。
(3)客戶端接收到來自服務器端的確認收到數據的TCP報文之後,明確了從客戶端到服務器的數據傳輸是正常的,結束SYN-SENT階段。並返回最後一段TCP報文。其中:標誌位爲ACK=1;序號爲Seq=x+1,表示收到服務器端的確認號Ack,並將其值作爲自己的序號值;確認號爲Ack=y+1,表示收到服務器端序號Seq,並將其值加1作爲自己的確認號Ack的值;隨後客戶端進入ESTABLISHED階段。服務器收到來自客戶端的“確認收到服務器數據”的TCP報文之後,明確了從服務器到客戶端的數據傳輸是正常的。結束SYN-SENT階段,進入ESTABLISHED階段。在客戶端與服務器端傳輸的TCP報文中,雙方的確認號Ack和序號Seq的值,都是在彼此Ack和Seq值的基礎上進行計算的,這樣做保證了TCP報文傳輸的連貫性。一旦出現某一方發出的TCP報文丟失,便無法繼續"握手",以此確保了"三次握手"的順利完成。此後客戶端和服務器端進行正常的數據傳輸。這就是“三次握手”的過程。
具體圖解:https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc


8、TCP和UDP的區別有哪些

TCP:面向連接、傳輸可靠(保證數據正確性,保證數據順序)、用於傳輸大量數據(流模式)、速度慢,建立連接需要開銷較多(時間,系統資源)
UDP:面向非連接、傳輸不可靠、用於傳輸少量數據(數據包模式)、速度快
TCP和UDP協議的一些應用例子:
TCP一般用於文件傳輸(FTP HTTP 對數據準確性要求高,速度可以相對慢),發送或接收郵件(POP IMAP SMTP 對數據準確性要求高,非緊急應用),遠程登錄(TELNET SSH 對數據準確性有一定要求,有連接的概念)等等;UDP一般用於即時通信(QQ聊天 對數據準確性和丟包要求比較低,但速度必須快),在線視頻(RTSP 速度一定要快,保證視頻連續,但是偶爾花了一個圖像幀,人們還是能接受的),網絡語音電話(VoIP 語音數據包一般比較小,需要高速發送,偶爾斷音或串音也沒有問題)等等。

原文:https://blog.csdn.net/buster2014/article/details/40082109 


9、線程和進程有何區別

進程是運行中的程序,線程是進程的內部的一個執行序列
進程是資源分配的單元,線程是執行行單元
進程間切換代價大,線程間切換代價小
進程擁有資源多,線程擁有資源少
多個線程共享進程的資源


10、同步機制有哪些

臨界區,互斥對象,信號量,事件對象


11、鏈表和數組有什麼區別

數組則大小固定,也無法靈活高效的插入,刪除。而鏈表元素在堆上,無需這麼麻煩。
數組靜態分配內存,鏈表動態分配內存;
數組在內存中連續,鏈表不連續;
數組元素在棧區,鏈表元素在堆區;
https://blog.csdn.net/Jasminexjf/article/details/88847127


12、寫代碼:
定義單鏈表的節點(前端時間刷算法題獨獨沒碰鏈表,考研也沒考鏈表,這部分完全是靠大二的知識在寫)

寫一個反轉鏈表:這部分我首先提出了一個方案就是重新定義一個鏈表,直接複製,然後面試官就說能不能重新定義。
在此基礎上我拼命回憶大二數據結構學過的鏈表,然後找到了解決方案,反轉鏈表中間那部分代碼問題不大,面試官和我討論的時候認爲我這個方法只要讓原鏈表加個空的頭結點就行。問題就出在這裏啦,我完全忘記如何初始化一個鏈接,往鏈表裏面填入數據啦,之前刷leetcode也不是白板,白板寫代碼真的很暴露問題啦。

剛剛在網上也搜索了一圈反轉鏈表的代碼,大部分都是沒有初始化,只寫了中間的反轉鏈表的函數。
不過這篇鏈接裏還是有的:https://blog.csdn.net/bingocoder/article/details/88761047
還是要好好學習一下啦,白板不容易!


13、問了簡歷上曾經做過的東西

面試尾聲
至此,到了面試尾聲,面試官說他的問題問完了,問我有沒有什麼需要問他的?
我就問了兩個小問題:
你認爲我的個人能力有哪部分需要提升:前端的三大件,前端的框架至少要掌握一種
你們做的是什麼,哪些人在做?
面試總結:
這次面試讓我知道了實習的面試,多要提升對基礎知識的儲備量。
此外確定好自己以後的從業方向,寫一些項目,不至於沒有項目經歷可說。
最重要的一點是,白板寫代碼的能力非常重要。這方面要多有提升,多在leetcode上刷題。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章