摘要:共享內存是最快的方式,它是針對其他進程間通信方式運行效率低而專門設計的。套接字套解口也是一種進程間通信機制,與其他通信機制不同的是,它可用于不同及其間的進程通信。來自的解釋九什么受同源策略的限制,支持跨域一種新的通信協議標準。
第一次大公司面試的面經
此次面試說來也有點匆忙,本沒想過自己會那么快就想去面試大公司,并且把自己第一次面大公司的各種不足展現得一覽無余。當時11月20號左右身邊一位朋友給了一位人超nice的師兄的內推,并且鼓勵我去投簡歷。最終戰勝了自己的膽怯,投了一份簡歷給內推的師兄。一兩天后hr就打電話安排面試了。
沒想到面試是要連續著面的,當時面花了一個多小時過了一面,再花一個小時面二面,最終也止于二面。接下來就是本文的主題了。我把當時面試官通過牛課網在線面試平臺中寫給我做的題記錄了下來,其實從面試前就打算把面試學到的東西積累下來。接下來就進入本文的主題了,我也盡量把每一道題都寫上我的解題思路,希望能得到大家更多更好的意見。
一面let obj = { name: "bytedance", getName() { return this.name } } let fb = obj.getName; fb();
A:我當時好像是答undefined。但我知道這不會是輸出”bytedance“,因為當obj.getName賦給fb的時候它的this也改變了,具體可以看我之前總結了一篇JavaScript中的this的文章。然后我后來我在瀏覽器中運行了一下代碼發現是輸出"" 。。。
new Quene() .task(1000, () => { console.log(1) }) .task(2000, () => { console.log(2) }) .task(1000, () => { console.log(3) }) .start() function Quene() { ... }
A:講真,看到這道題的時候我第一時間感到自己完了,雖然也只寫了一點,沒有全部做出來,然后就跳過這道題了。面試完就努力著把這道題寫出來
function Quene() { this.task = (time, callback) => { setTimeout(callback, time); // console.log(this) return this; }; this.start = () => { return this; }; }
雖然這樣即使最后面不用寫.start()也能打印出來。。。希望能得到指點Q_Q
["0->2",”4->5“,"7","13","15->16"]
A:
function Arr(arr) { var len = arr.length, j, newArr = [], str = ""; for (var i = 0; i < len; i++) { j = i; if (arr[i] + 1 === arr[j + 1]) { while (arr[j] + 1 === arr[j + 1]) { str = "->" + arr[j + 1]; j++; } str = arr[i] + str; newArr.push(str) i = j } else { newArr.push(arr[i].toString()) } } return newArr; }
還算比較簡單的算法題吧,還好當時做出來了,不然可能就止步于此。。也希望大家能談點自己對這道題的解法
TCP建立連接的過程即為三次握手,三次握手可以參考我之前發的文章,網上也有很多資料,這里就不細講。
至于進程間的通信方式,當時沒能打出來(這就涉及到我的知識盲區了【哭喪臉】),后來網上查了一下,有:
管道pipe:管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關系的進程間使用。進程的親緣關系通常是指父子進程關系。
命名管道FIFO:有名管道也是半雙工的通信方式,但是它允許無親緣關系進程間的通信。
消息隊列MessageQueue:消息隊列是由消息的鏈表,存放在內核中并由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩沖區大小受限等缺點。
共享存儲SharedMemory:共享內存就是映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創建,但多個進程都可以訪問。共享內存是最快的 IPC 方式,它是針對其他進程間通信方式運行效率低而專門設計的。它往往與其他通信機制,如信號兩,配合使用,來實現進程間的同步和通信。
信號量Semaphore:信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作為一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作為進程間以及同一進程內不同線程之間的同步手段。
套接字Socket:套解口也是一種進程間通信機制,與其他通信機制不同的是,它可用于不同及其間的進程通信。
信號 ( sinal ) : 信號是一種比較復雜的通信方式,用于通知接收進程某個事件已經發生。
這里有個題外話,如果面試官問瀏覽器窗口間的通信,那么有以下幾種:
1.localStore
localStorage.setItem("name", name);
2.cookie + setInterval
在頁面A設置一個使用 setInterval 定時器不斷刷新,檢查 cookie 的值是否發生變化,如果變化就進行刷新的操作。
由于 cookie 是在同域可讀的,所以在頁面 B 改變 cookie 的值,頁面 A 是可以拿到的。
A:用CSS創建一個三角形的原理是分別設置上下左右的border屬性,中間內容為0面積。實現:
#box { width: 0; height: 0; border-left: 50px transparent solid; border-right: 50px transparent solid; border-top: 50px transparent solid; border-bottom: 50px black solid; }
A:true。分別轉成2進制。
剛開始還對這個類數組感到懵逼,后來面試官一提醒函數的參數馬上領悟到就是偽數組。
A:只包含使用從零開始,且自然遞增的整數做鍵名,并且定義了length表示元素個數的對象。
function內部的arguments對象就是一個類數組對象
DOM方法document.getElementsByTagName()...也是返回一個類數組對象
源包括三個部分:協議、域名、端口(HTTP協議的默認端口是80)。如果其中有任何一個部分不同,則源不同。即為跨域。
限制一個源加載的文檔或腳本與來自另一個源的資源進行交互。這是一個用于隔離潛在惡意文件的關鍵的安全機制。(來自MDN的解釋)
A:受同源策略的限制,支持跨域;一種新的通信協議標準。可以理解成同時支持同源和跨域的Ajax。
MDN解釋:跨域資源共享(CORS) 是一種機制,它使用額外的 HTTP 頭來告訴瀏覽器 讓運行在一個 origin (domain) 上的Web應用被準許訪問來自不同源服務器上的指定的資源。當一個資源從與該資源本身所在的服務器不同的域、協議或端口請求一個資源時,資源會發起一個跨域 HTTP 請求。
A:OPTIONS請求是HTTP請求的一種方法,返回服務器針對特定資源所支持的HTTP請求方法,也可以利用向web服務器發送‘*’的請求來測試服務器的功能性
然后一面就這樣結束了,面試官也直接跟我說我通過了一面,我也問了一些問題后就結束面試了。我趕緊把平臺上的面試記錄記下來,過了幾分鐘,當我還沉浸在通過一面的愉悅和全身心已經放松了的情況下,發現手機有幾個未接電話,然后又再打進了一個,接通電話后對方是頭條hr小姐姐,問我說現在可以二面了,二面的面試官已經在平臺上等著了。。。好吧,這太突然了,我馬上趕赴戰場。
A:Fetch API 提供了一個獲取資源的接口(包括跨域請求)。無論請求成功與否,它都返回一個 Promise 對象;
A:
function delay(timer) { return new Promise(function(resolve, reject) { setTimeout(function() { resolve(); }, timer) }) }
XSS:跨站腳本(Cross-site scripting)
通過提交或其他方式例如發布評論,其中含有HTML或JavaScript的代碼,如果服務器沒有過濾掉這些腳本,這些腳本在一些情況下就可能會運行。
避免XSS的方法之一就是過濾用戶提供的內容,如<,>,script;
cookie設置HttpOnly屬性
CSRF:跨站請求偽造(Cross-site request forgery)
是一種劫持受信任用戶向服務器發送非預期請求的攻擊方式,即在用戶登陸某個平臺化拿到用戶的登陸憑證后發送偽造請求
防范CSRF的方法之一就是通過驗證碼
Referer Check,根據 HTTP 協議,在HTTP 頭中有一個字段叫 Referer,它記錄了該 HTTP 請求的來源地址。通過 Referer Check,可以檢查請求是否來自合法的”源”。
添加token驗證,可以在 HTTP 請求中以參數的形式加入一個隨機產生的token,該token不存在與cookie中,并在服務器端建立一個攔截器來驗證這個 token,如果請求中沒有 token 或者 token 內容不正確,則認為可能是 CSRF 攻擊而拒絕該請求。
A:給每張圖片添加一個data-xxx的屬性用于存放圖片的src,檢測到圖片進入視野中的時候把data-xxx的屬性賦給src
如何檢測圖片進入視野:
a.document.documentElement.clientHeight獲取屏幕可視窗口高度
b.element.offsetTop獲取元素相對于文檔頂部的距離
c.document.documentElement.scrollTop獲取滾動被卷去的高度
如果b-c成立則元素進入可視區域
這里我還提到一個函數節流提高性能:
var canRun = true; document.getElementById("throttle").onscroll = function(){ if(!canRun){ // 判斷是否已空閑,如果在執行中,則直接return return; } canRun = false; setTimeout(function(){ // 這里加載圖片 console.log("函數節流"); canRun = true; }, 500); };
表單上傳
(1). 提供form表單,method必須是post。
(2). form表單的enctype必須是multipart/form-data。
ajax上傳
ajax和FormData可實現頁面無刷新的文件上傳效果
可以參考之前寫的文章,不過當時到了后面真是精疲力竭,連let和const都沒有說出來。。。
問到這個概念的時候我不清楚,記得當前前一兩天掘金剛發一篇相關的文章給我,然而當時沒去看。。
JSBridge 簡單來講,主要是 給 JavaScript 提供調用 Native 功能的接口,讓混合開發中的“前端部分”可以方便地使用地址位置、攝像頭甚至支付等Native 功能。是 Native 和非 Native 之間的橋梁,它的核心是構建 Native 和非 Native 間消息通信的通道,而且是雙向通信的通道。
二面其中也包含一些IQ題,還有后面問我如果實習能實習多久我說3個月。之后第二天就收到把我簡歷”丟進“公司人才庫的郵件了。
當然這只是其中一部分題目,一些面試官口頭問的我當時面試完真是超級累也忘了記錄下來。總之,感覺頭條還是會比較重視算法和新技術。
希望這一兩個月能夠好好把握,春招再戰!!文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101445.html
摘要:春招前端實習面試記錄從就開始漸漸的進行復習,月末開始面試,到現在四月中旬基本宣告結束。上海愛樂奇一面盒模型除之外的面向對象語言繼承因為是視頻面試,只記得這么多,只感覺考察的面很廣,前端后端移動端都問了,某方面也有深度。 春招前端實習面試記錄(2019.3 ~ 2019.5) 從2019.1就開始漸漸的進行復習,2月末開始面試,到現在四月中旬基本宣告結束。在3月和4月經歷了無數次失敗,沮...
摘要:正如我標題所說,簡歷被拒。看了我簡歷之后說頭條競爭激烈,我背景不夠,點到為止。。三準備面試其實從三月份投遞簡歷開始準備面試到四月份收,也不過個月的時間,但這都是建立在我過去一年的積累啊。 本文是 無精瘋 同學投稿的面試經歷 關注微信公眾號:進擊的java程序員K,即可獲取最新BAT面試資料一份 在此感謝 無精瘋 同學的分享 目錄: 印象中的頭條 面試背景 準備面試 ...
摘要:正如我標題所說,簡歷被拒。看了我簡歷之后說頭條競爭激烈,我背景不夠,點到為止。。三準備面試其實從三月份投遞簡歷開始準備面試到四月份收,也不過個月的時間,但這都是建立在我過去一年的積累啊。 本文是 無精瘋 同學投稿的面試經歷 關注微信公眾號:進擊的java程序員K,即可獲取最新BAT面試資料一份 在此感謝 無精瘋 同學的分享目錄:印象中的頭條面試背景準備面試頭條一面(Java+項目)頭條...
摘要:年求職面經及總結我的求職之路差不多走到盡頭了感覺真是精疲力盡了把這大半年的經歷和面試總結寫下來希望能給和我一樣在求職路上煎熬的人一點幫助先說背景微電子科學與工程專業學過兩門和相關的課程語言和單片機這個專業的唯一好處就是大部分人并不知道這個專 18年求職面經及總結 我的求職之路差不多走到盡頭了,感覺真是精疲力盡了.把這大半年的經歷和面試總結寫下來,希望能給和我一樣在求職路上煎熬的人一點幫...
閱讀 1481·2021-11-17 09:33
閱讀 1260·2021-10-11 10:59
閱讀 2892·2021-09-30 09:48
閱讀 1905·2021-09-30 09:47
閱讀 3024·2019-08-30 15:55
閱讀 2337·2019-08-30 15:54
閱讀 1493·2019-08-29 15:25
閱讀 1646·2019-08-29 10:57