阿里釘釘前端實習面經(別人的)


一、阿里前端電話面-2020.3.3(別人的)

鏈接:https://www.nowcoder.com/discuss/373872?type=post&order=time&pos=&page=1

1.首先會做一個簡單的自我介紹,問一下基礎的問題,比如三句話總結react的特點;
2.做兩道筆試題,很簡單,但是太緊張了,面試官人很好,指導我完成了這兩道題:
1).比較版本號 (類似1.0.1/1.2.0/1.2/0.1)
實現一個方法,用於比較兩個版本號(version1、version2)
如果version1 > version2,返回1;如果version1 < version2,返回-1,其他情況返回0。版本號規則`x.y.z`,xyz均為大於等於0的整數,至少有x位

2).隨機生成字符串
實現一個隨機符串生成函數 randomStr(),要求如下:
生成的隨機的字符串應該以字母開頭,並包含 [a-z][0-9] 這些字符。
生成的字符串長度為 8。
生成的字符串不能夠在程序運行的生命周期中存在重復的情形。
 
3.做完題還問了一下如何學習的,平常有沒有看些開源的項目,有沒有了解react源碼等;
4.最后問我有沒有什么問題,我問的是我覺得我表現很差,我太緊張了,面試官怎么回我的我都沒怎么聽到
但是告訴我刷題還是要刷的,另外比如array里的reduce函數啊,object的各種方法都要去了解下,在寫代碼的時候如果只是使用for循環這樣,比較減分
 
二、阿里前端實習一面-2020.3.17(別人的)
鏈接: https://www.nowcoder.com/discuss/384262?type=post&order=time&pos=&page=1

1. 說下項目中的難點

2. 說下diff算法-vue和React的diff算法

 diff算法解決什么問題:diff算法是一種優化手段,將前后兩個模塊進行差異化的對比,真實的dom開銷是很大的,當修改了頁面的某個數據時,如果直接渲染真實dom會引起整個樹的重繪,所以希望能夠只讓修改的數據映射到真實的dom,做最少的重繪,這就是diff算法要解決的事情。

 虛擬dom:virtual DOM是將真實的DOM數據抽取出來,以對象的形式摸你樹形結構,diff算法比較的也是virtual DOM

  diff算法:對操作前后的dom樹同一層的節點進行對比,一層一層對比,再插入真實的dom中,重新渲染

3. 做的項目優化

4. HTTP,HTTPS,websocket的區別

 HTTP和WS比較:

 相同點:

  • 都是基於TCP的應用層的協議
  • 都使用request/response模式進行連接的建立
  • 在連接的建立過程中對錯誤的處理方式相同,在這個階段WS可能返回和HTTP相同的返回碼。
  • 可以在網絡中傳輸數據

   不同點:

  • WS是雙向通信協議,可以雙向發送或者接受信息,HTTP是單向的
  • WS使用HTTP來建立連接,但是定義了一系列新的header域,這些域在HTTP中不會使用
  • WS的鏈接不能通過中間人轉發,它必須是一個直接連接
  • WS連接建立后,數據的傳輸使用來傳遞,不再需要request消息
  • WS的數據幀有序

   

 websocket是什么:WebSocket protocol 是HTML5一種新的協議。它實現了瀏覽器與服務器全雙工通信(full-duplex)。

 websocket的目的:HTTP協議是單向的網絡協議,建立連接后只允許瀏覽器向服務器發送請求,當需要實時通信的時候,瀏覽器要花時間一直向服務器請求最新數據,導致過多不必要的請求,浪費流量和服務器資源,每一次請求、應答,都浪費了一定流量在相同的頭部信息上。

 在WebSocket中,只需要服務器和瀏覽器通過HTTP協議進行一個握手的動作,然后單獨建立一條TCP的通信通道進行數據的傳送。

websocket的原理和執行機制:

連接過程 —— 握手過程

  • 瀏覽器、服務器建立TCP連接,三次握手。這是通信的基礎,傳輸控制層,若失敗后續都不執行。
  • TCP連接成功后,瀏覽器通過HTTP協議向服務器傳送WebSocket支持的版本號等信息。(開始前的HTTP握手)
  • 服務器收到客戶端的握手請求后,同樣采用HTTP協議回饋數據。
  • 當收到了連接成功的消息后,通過TCP通道進行傳輸通信。

HTTP和HTTPS:

區別:

  • http協議是簡單的,無狀態,明文傳輸的;https是由SSL+http協議構建的可加密,有身份認證的協議,更加安全
  • http的端口是80,https的端口是443
  • http協議免費,https需要ca申請證書,需要交費

SSL協議:

  • SSL是非對稱加密,加密和解密需要兩個秘鑰,公開秘鑰和私有秘鑰

連接過程:

  • 客戶端請求建立SSL連接,發送支持的加密方式以及一個隨機數client random給服務器
  • 服務器選擇其中一種加密方式,再加上另一個隨機數server random、數字證書(包含公鑰),發送給客戶端
  • 客戶端確認數字證書有效,再生成新的隨機數,將這個隨機數用公鑰進行加密發送給服務器
  • 服務器收到客戶端回復,利用自己的私鑰解密,獲得隨機數,通過三個隨機數和協商的加密方式計算生成一個對稱秘鑰,之后的會話通過這個對稱秘鑰進行加密傳輸

5. SSR 首屏服務端渲染(SSR:server side render)

    https://www.jianshu.com/p/10b6074d772c

6. SSR的具體用法

7. 用SSR遇到過什么難題

8. 為什么使用redis

9. 閉包

產生閉包的情況:

  • 出現函數嵌套
  • 內部函數引用了外部函數的變量
  • 外部函數被執行調用了

閉包是什么:

  • 使用chrome調試查看
  • 閉包是嵌套的內部函數

閉包的作用:

  • 讓函數內部的局部變量在函數執行完之后,仍存活在內存中,延長局部變量的生命周期
  • 讓函數外部可以操作函數內部的數據

閉包的生命周期:

  • 產生:在嵌套內部函數定義執行完時產生
  • 死亡:在嵌套的內部函數成為垃圾對象時

常見閉包:

  • 將函數作為另一個函數的返回值
function fn1(){
    var a = 2    
 function fn2(){
   a++
      console.log(a)
}
  return fn2
}
var f = fn1()
f()// 3
f()//4  

整個過程中產生了幾個閉包?

1個,因為執行外部函數的時候才會創建內部函數對象,執行1次,就創建1次,因為fn1的返回值是fn2,f()接收的是fn1的返回值,所以f()調用2次,相當於fn1()() 調用的是fn2內部函數2次,閉包只產生了1個,a的值在閉包里,第二次調用時找a的時候a=3

執行完之后,函數聲明的內部變量a是否存在?包含這個內部變量的內部函數還在嗎? 在,在閉包里,但是這個內部函數不在了,但是內部變量不會變為垃圾對象,因為var f = fn1(),f指向的是這個內部變量,有人指向就不是垃圾變量;如果是fn1()直接調用,或者f=null 結束時沒有f指向a,a就會變為垃圾變量

 

  • 將函數作為實參傳遞給另一個函數調用

     

    function showDelay(msg,time){
          setTimeOut(function(){
        alert(msg)
    },time)
    }
    showDelay(‘lalala’,2000)

   因為內部函數使用了msg,所以產生了閉包,time不在內部函數里,time就不在閉包里

 

10. 原型鏈

11. 阿里伯樂做了個版本號比較問題,沒全a,拿去Leecode跑45/72,估計涼了

 

三、阿里釘釘前端實習-2020.3.14(別人的)

鏈接:https://www.nowcoder.com/discuss/381790?type=post&order=time&pos=&page=1

1. 你做了哪些東西呢,你覺得自己做的不錯的地方,用到哪些技術解決了哪些問題,具體說一下

2. 為什么選react,為什么選用egg,為什么選用ts

3.  性能優化

4. react hook 原理

5. react 原理  

 
四、阿里前端實習一面
原文鏈接:https://blog.csdn.net/qq_34873710/article/details/104665976

一、釘釘面試問題

1. 首先做一下你的自我介紹以及你簡歷上的項目,以及難點創新點(介紹了大概5min)

(在我做介紹的過程中,面試官記錄了他想要問的問題 at same time)

回答的項目相對之前清晰,但還是有卡頓,多熟悉復盤項目真的重要!

2. CSS問題

① 你能說一下CSS的盒模型包含哪些屬性嗎?

② 有屬性可以影響盒模型的范圍嗎?(關於這個問題,了解了半天,不明白面試官想要表達的意思) box-sizing =content-box|border-box|inherit

③ height = 100px的時候,包含這個padding嗎? 怎樣讓它含?

④ margin-collapse:你了解嗎,父子div同樣設置margin-top,子div相對於頂部的margin應該是什么?你確定嗎? 確定,但實際上是錯的,默認應該是選兩個對的

⑤ CSS布局的話 ,你分別用哪些方式及屬性

⑥ relative和absolute的區別(開始兩者說反了,后來及時糾正)

⑦ flex布局你了解過嗎?他有哪些屬性?設置什么值。(答非所問)

     追問:默認是橫着排嗎?有沒有辦法改變方向

3. JS問題

做手機端的時候怎么實現自適應的?

rpx是個什么單位?手機上1rpx是一個物理像素嗎?是怎么做到的?

追問: 如何做到換算成750的?了解怎么嗎

異步IO請求怎么發送? (回答成為了實現異步的方式)ajax

ajax底層是哪個方法呢?js的api,真正底層提供這個概念的方法是什么呢(至今不明白)。。。

fetch實現異步請求嗎?

ajax 可以跨域嗎?那有什么限制嗎?

可以,HTML5中可以使用CORS跨域資源共享機制實現跨域

CORS通過設置服務端的HTTP頭部信息來告訴瀏覽器,允許域名跨域訪問

比如header('Access-Control-Allow-Origin:*')

有辦法跨域嗎?jsonp是怎么做的呢?jsonp瀏覽器底層的方法是什么?

① 同源策略:同源指的是域名、端口、協議相同的url可以互相訪問,在同源策略下,在某個服務器下的頁面時無法獲取到該服務器以外的數據的(比如在自己的網站通過ajax去獲取豆瓣的地址,是會報錯)

② 哪些不符合同源策略,可以跨域獲取數據:<img>的src(獲取圖片)、<link>的href(獲取css)、<script>的src(獲取JavaScript)

② JSONP是JSON with padding,原理是通過動態創建<script>標簽,利用<script>標簽里的src不受同源策略約束來跨域獲取數據

③ JSONP實現跨域請求:

 JSONP由兩個部分組成:回調函數和數據

 

<script type="text/javascript">
    function handleResponse(response){ console.log(response); } </script>
<script type="text/javascript">
    window.onload = function() {
    var oBtn = document.getElementById('btn');
    oBtn.onclick = function() {     
        var script = document.createElement("script"); script.src = "https://api.douban.com/v2/book/search?q=javascript&count=1&callback=handleResponse"; document.body.insertBefore(script, document.body.firstChild);  
    };
};
</script>

這個相當於在body的第一個子節點中加入了一行代碼:

<script type="text/javascript" src ="https://api.douban.com/v2/book/search?q=javascript&count=1&callback=handleResponse";></script>

回調函數是handleResponse(response), 放在src的callback中,callback前面的地址獲取的是地址內的JSON數據,將獲取到的JSON數據作為參數傳遞給回調函數的參數(response),並執行回調函數

jsonp可以發post請求嗎?

不可以;從post和get的區別入手

get是通過在請求的url上添加請求參數的

post是通過http post機制,將表單內各個字段與其內容放在HTML header內,作為HTTP消息的實體內容一起傳送的;

jsonp是通過動態創建script,添加src屬性實現跨域的,無法通過http post機制為html header傳送數據

 

http有哪些方法你能說一下嘛?Options能做什么?

cookie 和 session的區別

如何清除cookie

事件委托的原理

ES6有哪些新的屬性?

箭頭函數相比於其他函數的區別?

Generator 和 async/await 函數用來做啥?

async的返回值是什么呢?

Promise的方法有哪些?

Promise可以取消嗎?

Generator設計的目的是干啥?

ES6中的中this的指向怎樣決定?

關於Vue

Vue對前端開發有什么優勢

雙向綁定中Vuex的工作原理?

vue-router的原理?改完整的path?url會有變化嗎?

追問:服務端需要做什么配合嗎?(不需要)

核心就是:更新視圖但是不重新請求頁面

其他問題

image caption算法的了解

對於項目分工以及我負責的內容

怎么接觸的前端?

二、釘釘筆試題目

1.評測題目:

// 實現一個簡單的模板引擎 render(template, data);

// 輸入: let template = ‘我是{{name}},年齡{{ age }},性別{{sex}}’;

let data = { name: ‘姓名’, age: 18 }

// 輸出:我是姓名,年齡18,性別undefined

在筆試的過程中,面試官是非常有耐心的,幫助我改了我忽略的空格問題,還引導我用其他的方式解決,但是時間來不及了,然后他已經推遲下班了,我為耽誤人家時間表示非常的抱歉,但和我一樣面試釘釘的同學是兩道題,我只測了一道,問問題問了不到一小時吧,雖然面試官之前說整體30~60min.
經過這次面試呢,我的收獲是:
簡歷上面的東西一定要摸得非常透徹
實事求是的回答問題,比搪塞一個答案要好
一定要多刷題,動手能力要棒!




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM