摘要:面過的公司,大疆,阿里,網易,百度,電信研發中心,深信服,華為,小米,搜狗,騰訊。拿了的公司目前是大疆電信深信服華為。一面二面因為時間太久,就直接放在一起了,問的都是基礎吧,講真,大疆前端面試不難,都是很基礎的,就是時間長,等的捉急。
自我介紹下:某985碩士,程序媛,接觸前端一年時間。從八月份開始校招面試筆試,前前后后大廠小廠也都面了挺多,不過大廠基本都被我掛完了,哭暈我,還是太菜啊。面過的公司:ThoughtWorks,大疆,阿里,網易,百度,電信it研發中心,深信服,華為,小米,搜狗,騰訊。拿了offer的公司目前是:大疆、電信、深信服、華為。下面總結了這段時間的面筋和掛筋~
騰訊10月16日更新,面了騰訊一面,然后就掛了,結束的太快就像龍卷風。
1. 怎么從十萬個節點中找到想要的節點,怎么快速在某個節點前插入一個節點?
這個題目我已經在segmentfault上提問了,目前還沒有人給出回答,求大神前去解答~
題目鏈接: 怎么在有十萬個節點的html文檔中找到特定的某個節點
2. 負載均衡方式和容錯機制
3. 描述一個文件從硬盤讀取到進程內存中的過程
4. TCP三次握手和揮手的過程,除了這些書本上的還有哪些?
5. 畫一下OSI七層模型
6. 寫一個你最熟悉的算法
7. 有哪些偽類和偽元素
8. IE盒模型和標準盒模型,用哪個屬性改變
9. 怎么清除浮動,原理是什么
10. em,rem,px的區別
大疆大疆是我校招面的第一家公司,從六月份投簡歷,然后筆試面試到拿到錄用意向書,前后用了近四個月,來之不易啊。
因為時間太久,就直接放在一起了,問的都是基礎吧,講真,大疆前端面試不難,都是很基礎的,就是時間長,等的捉急。一面是電話面,兩個面試官輪流問;二面是視頻面,是三個面試官一起微信視頻,視頻面還是蠻累的,上下左右都得顧上;終面是去的現場面,就跟一個面試官聊了十幾分鐘人生。
1. meta標簽
meta標簽:提供給頁面的一些元信息(名稱/值對), 比如針對搜索引擎和更新頻度的描述和關鍵詞。
name:名稱/值對中的名稱。常用的有author、description、keywords、generator、revised、others。 把 content 屬性關聯到一個名稱。
http-equiv:沒有name時,會采用這個屬性的值。常用的有content-type、expires、refresh、set-cookie。把content屬性關聯到http頭部。
content: 名稱/值對中的值, 可以是任何有效的字符串。 始終要和 name 屬性或 http-equiv 屬性一起使用。
scheme: 用于指定要用來翻譯屬性值的方案。
2. css哪些屬性可以繼承
字體相關:line-height, font-family, font-size, font-style, font-variant, font-weight, font
文本相關: letter-spacing, text-align, text-indent, text-transform, word-spacing
列表相關:list-style-image, list-style-position, list-style-type, list-style
顏色:color
3. css3有哪些新屬性
(1)邊框:
border-radius:圓角邊框,border-radius:25px;
box-shadow:邊框陰影,box-shadow: 10px 10px 5px #888888;
border-image:邊框圖片,border-image:url(border.png) 30 30 round;
(2)背景:
background-size:規定背景圖片的尺寸,background-size:63px 100px;
background-origin:規定背景圖片的定位區域,背景圖片可以放置于 content-box、padding-box 或 border-box 區域。background-origin:content-box;
CSS3 允許您為元素使用多個背景圖像。background-image:url(bg_flower.gif),url(bg_flower_2.gif);
(3)文本效果:
text-shadow:向文本應用陰影,可以規定水平陰影、垂直陰影、模糊距離,以及陰影的顏色。text-shadow: 5px 5px 5px #FF0000;
word-wrap:允許文本進行換行。word-wrap:break-word;
(4)字體:CSS3 @font-face 規則可以自定義字體。
(5)2D 轉換(transform)
translate():元素從其當前位置移動,根據給定的 left(x 坐標) 和 top(y 坐標) 位置參數。 transform: translate(50px,100px);
rotate():元素順時針旋轉給定的角度。允許負值,元素將逆時針旋轉。transform: rotate(30deg);
scale():元素的尺寸會增加或減少,根據給定的寬度(X 軸)和高度(Y 軸)參數。transform: scale(2,4);
skew():元素翻轉給定的角度,根據給定的水平線(X 軸)和垂直線(Y 軸)參數。transform: skew(30deg,20deg);
matrix(): 把所有 2D 轉換方法組合在一起,需要六個參數,包含數學函數,允許您:旋轉、縮放、移動以及傾斜元素。transform:matrix(0.866,0.5,-0.5,0.866,0,0);
(6)3D 轉換
rotateX():元素圍繞其 X 軸以給定的度數進行旋轉。transform: rotateX(120deg);
rotateY():元素圍繞其 Y 軸以給定的度數進行旋轉。transform: rotateY(130deg);
(7)transition:過渡效果,使頁面變化更平滑
transition-property :執行動畫對應的屬性,例如 color,background 等,可以使用 all 來指定所有的屬性。
transition-duration:過渡動畫的一個持續時間。
transition-timing-function:在延續時間段,動畫變化的速率,常見的有:ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier 。
transition-delay:延遲多久后開始動畫。
簡寫為:transition: [
(8)animation:動畫
使用CSS3 @keyframes 規則。
animation-name: 定義動畫名稱
animation-duration: 指定元素播放動畫所持續的時間長
animation-timing-function:ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(
animation-delay: 指定元素動畫開始時間
animation-iteration-count:infinite |
animation-direction: normal | alternate: 指定元素動畫播放的方向,其只有兩個值,默認值為normal,如果設置為normal時,動畫的每次循環都是向前播放;另一個值是alternate,他的作用是,動畫播放在第偶數次向前播放,第奇數次向反方向播放。
animation-play-state:running | paused :控制元素動畫的播放狀態。
簡寫為: animation:[
這里只列出了一部分,詳情可以去看w3school的CSS3 教程。
4. 閉包是什么,什么時候閉包會消除?
因為作用域鏈,外部不能訪問內部的變量和方法,這時我們就需要通過閉包,返回內部的方法和變量給外部,從而就形成了一個閉包。
JavaScript是一門具有自動垃圾回收機制的編程語言,主要有兩種方式:
標記清除(最常用)
垃圾收集器在運行的時候會給存儲在內存中的所有變量都加上標記(可以使用任何標記方式)。然后,它會去掉環境中的變量以及被環境中的變量引用的變量的標記。而在此之后再被加上標記的變量將被視為準備刪除的變量,原因是環境中的變量已經無法訪問到這些變量了。最后,垃圾收集器完成內存清除工作,銷毀那些帶標記的值并回收它們所占用的內存空間。
引用計數
引用計數(reference counting)的含義是跟蹤記錄每個值被引用的次數。當聲明了一個變量并將一個引用類型值賦給該變量時,則這個值的引用次數就是1。如果同一個值又被賦給另一個變量,則該值的引用次數加1。相反,如果包含對這個值引用的變量又取得了另外一個值,則這個值的引用次數減1。當這個值的引用次數變成0 時,則說明沒有辦法再訪問這個值了,因而就可以將其占用的內存空間回收回來。這樣,當垃圾收集器下次再運行時,它就會釋放那些引用次數為零的值所占用的內存。
導致問題:會導致循環引用的變量和函數無法回收。
解決:將用完的函數或者變量置為null。
5. 怎么理解js是單線程的
主要說一下異步以及事件循環機制,還有事件隊列中的宏任務、微任務。
macrotask:主代碼塊,setTimeout,setInterval、setImmediate等。
microtask:process.nextTick(相當于node.js版的setTimeout),Promise 。process.nextTick的優先級高于Promise。
更詳細可以看這篇博客:這一次,徹底弄懂 JavaScript 執行機制,講的非常清晰。
6. 有哪些排序算法,時間復雜度是多少?什么時候快排的效率最低?
排序算法 | 最壞事件復雜度 | 平均時間復雜度 | 穩定度 | 空間復雜度 |
---|---|---|---|---|
冒泡排序 | O(n^2) | O(n^2) | 穩定 | O(1) |
插入排序 | O(n^2) | O(n^2) | 穩定 | O(1) |
選擇排序 | O(n^2) | O(n^2) | 穩定 | O(1) |
快速排序 | O(n^2) | O(n*log2n) | 不穩定 | O(log2n)~O(n) |
二叉樹排序 | O(n^2) | O(n*log2n) | 不一定 | O(n) |
堆排序 | O(n*log2n) | O(n*log2n) | 不穩定 | O(1) |
整個序列已經有序或完全倒序時,快排的效率最低。
7. 原生ajax的請求過程
創建全平臺兼容的XMLHttpRequest對象:
function getXHR(){ var xhr = null; if(window.XMLHttpRequest) {// 兼容 IE7+, Firefox, Chrome, Opera, Safari xhr = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { xhr = new ActiveXObject("Msxml2.XMLHTTP");// 即MSXML3 } catch (e) { try { xhr = new ActiveXObject("Microsoft.XMLHTTP");// // 兼容 IE6, IE5,很老的api,雖然瀏覽器支持,功能可能不完善,故不建議使用 } catch (e) { alert("您的瀏覽器暫不支持Ajax!"); } } } return xhr; }
Ajax請求數據的過程:
var xhr = getXHR(); xhr.open("GET", url/file,true); //設置請求方式,url,以及是否異步 xhr.onreadystatechange = function() { //設置回調監聽函數 if(xhr.readyState==4){ if(xhr.status==200){ var data=xhr.responseText; console.log(data); } }; xhr.onerror = function() { console.log("Oh, error"); }; xhr.send(); //發送請求
8. http狀態碼,cookie字段,cookie一般存的是什么,session怎么存在的?
這部分可以參考我的博客:HTTP協議知識點總結
9. http請求方式有哪些?
HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
更多請看:HTTP請求方法
10. 怎么用原生js實現一個輪播圖,以及滾動滑動
之前我使用輪播圖都是用的antd的組件,所以我大致說了一下思路,用定時器去實現,以及如何實現平滑的滾動效果。詳情請看: 原生js實現輪播圖
11. 用過哪些開源的組件
說了antd和element-ui。
12. 怎么實現上傳下載的功能
主要說了下form表單和input標簽。
13. react生命周期,以及diff算法,diff算法是對樹的深度優先遍歷還是廣度優先遍歷?
對React、Redux、React-Redux詳細剖析
是深度優先遍歷。 diff的實現
14. 強緩存和協商緩存
參考:HTTP協議知識點總結
15. react-router的原理
react-router就是控制不同的url渲染不同的組件。react-router在history庫的基礎上,實現了URL與UI的同步。
原理:DOM渲染完成之后,給window添加onhashchange事件監聽頁面hash的變化,并且在state屬性中添加了route屬性,代表當前頁面的路由。
具體步驟:
當點擊鏈接,頁面hash改變時,觸發綁定在 window 上的 onhashchange 事件;
在 onhashchange 事件中改變組件的 state中的 route 屬性,react組件的state屬性改變時,自動重新渲染頁面;
頁面隨著 state 中的route屬性改變,自動根據不同的hash給Child變量賦值不同的組件,進行渲染。
參考:react-router的實現原理
16. 怎么用無人機捕獲天空上的鳥
這個題目我也不造啊,畢竟我沒用過無人機,有知道的大神可以在評論中回答一下~
終面終面是去的現場,在深圳總部那邊,基本就是閑聊了二十來分鐘吧,面完還有hr小姐姐給我們介紹和參觀了無人機,酷炫~
做的項目中,哪個做的最深入最久
為什么要做前端,喜歡做前端么
未來的職業規劃
了解大疆么,大疆的文化是什么
除了實習,還做過哪些項目
如果生活富足,衣食無憂,你會選擇干什么
阿里巴巴阿里是提前批,找人內推了菜鳥網絡,面了六輪,面的我懷疑人生了,中途四面本來已經掛了,后面三面面試官又撈起來給我加面了一輪,不過最后還是掛在了hr。
一面1. css選擇器,怎么選擇相同的類
id、class、標簽、偽類、通配符等。可以用getElementsByClassName()選擇相同的類。
2. css3有哪些偽類,偽類選擇器有哪些
這里要區分一下偽類和偽元素的概念。根本區別在于它們是否創造了新的元素(抽象)。
偽類:用于向某些選擇器添加特殊的效果。例如,a標簽的:link, :visited, :hover, :active; 以及 :first-child, :last-child。
偽元素:是html中不存在的元素,用于將特殊的效果添加到某些選擇器。例如:before,:after, :first-letter, :first-line。css3只新增了一個偽元素 ::selection(改變用戶所選取部分的樣式)。
參考: CSS3 選擇器——偽類選擇器
3. OSI七層網絡模型
OSI七層模型 | 作用 | 對應協議 | 對應設備 |
---|---|---|---|
應用層 | 它是計算機用戶,以及各種應用程序和網絡之間的接口 | HTTP, FTP, SMTP, POP3 | 計算機設備 |
表示層 | 信息的語法語義以及它們的關系,如加密解密、轉換翻譯、壓縮解壓縮 | IPX, LPP, XDP | |
會話層 | 建立、維護、管理應用程序之間的會話 | SSL, TLS, DAP, LDAP | |
傳輸層 | 服務點編址,分段與重組、連接控制、流量控制、差錯控制 | TCP, UDP | 防火墻 |
網絡層 | 為網絡設備提供邏輯地址,進行路由選擇、分組轉發 | IP ARP RARP ICMP IGMP | 路由器 |
數據鏈路層 | 物理尋址,同時將原始比特流轉變為邏輯傳輸路線 | PPTP, ARP, RARP | 交換機 |
物理層 | 機械、電子、定時接口通道信道上的原始比特流傳輸 | IEEE 802.2, Ethernet v.2, Internetwork | 網卡 |
參考: 一張非常強大的OSI七層模型圖解
4. MVC和MVVM的區別
Model用于封裝和應用程序的業務邏輯相關的數據以及對數據的處理方法;
View作為視圖層,主要負責數據的展示;
Controller定義用戶界面對用戶輸入的響應方式,它連接模型和視圖,用于控制應用程序的流程,處理用戶的行為和數據上的改變。
MVC將響應機制封裝在controller對象中,當用戶和你的應用產生交互時,控制器中的事件觸發器就開始工作了。
MVVM把View和Model的同步邏輯自動化了。以前Controller負責的View和Model同步不再手動地進行操作,而是交給框架所提供的數據綁定功能進行負責,只需要告訴它View顯示的數據對應的是Model哪一部分即可。也就是雙向數據綁定,就是View的變化能實時讓Model發生變化,而Model的變化也能實時更新到View。
參考: 淺析前端開發中的 MVC/MVP/MVVM 模式
5. 用過哪些設計模式
(1)單例模式
定義:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。
實現方法:先判斷實例存在與否,如果存在則直接返回,如果不存在就創建了再返回,這就確保了一個類只有一個實例對象。
適用場景:一個單一對象。比如:彈窗,無論點擊多少次,彈窗只應該被創建一次。
(2)發布/訂閱模式
定義:又叫觀察者模式,它定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都將得到通知。
場景:訂閱感興趣的專欄和公眾號。
(3)策略模式
定義:將一個個算法(解決方案)封裝在一個個策略類中。
優點:
策略模式可以避免代碼中的多重判斷條件。
策略模式很好的體現了開放-封閉原則,將一個個算法(解決方案)封裝在一個個策略類中。便于切換,理解,擴展。
策略中的各種算法可以重復利用在系統的各個地方,避免復制粘貼。
策略模式在程序中或多或少的增加了策略類。但比堆砌在業務邏輯中要清晰明了。
違反最少知識原則,必須要了解各種策略類,才能更好的在業務中應用。
應用場景:根據不同的員工績效計算不同的獎金;表單驗證中的多種校驗規則。
(4)代理模式
定義:為一個對象提供一個代用品或占位符,以便控制對它的訪問。
應用場景:圖片懶加載(先通過一張loading圖占位,然后通過異步的方式加載圖片,等圖片加載好了再把完成的圖片加載到img標簽里面。)
(5)中介者模式
定義:通過一個中介者對象,其他所有相關對象都通過該中介者對象來通信,而不是互相引用,當其中的一個對象發生改變時,只要通知中介者對象就可以。可以解除對象與對象之間的緊耦合關系。
應用場景: 例如購物車需求,存在商品選擇表單、顏色選擇表單、購買數量表單等等,都會觸發change事件,那么可以通過中介者來轉發處理這些事件,實現各個事件間的解耦,僅僅維護中介者對象即可。
(6)裝飾者模式
定義:在不改變對象自身的基礎上,在程序運行期間給對象動態的添加方法。
應用場景: 有方法維持不變,在原有方法上再掛載其他方法來滿足現有需求;函數的解耦,將函數拆分成多個可復用的函數,再將拆分出來的函數掛載到某個函數上,實現相同的效果但增強了復用性。
參考: JavaScript設計模式
6. Http狀態碼
7. https怎么加密
參考: HTTP協議知識點總結
8. es6相比es5有哪些優點
大概說一下:let、const,模板字符串,箭頭函數,做異步處理的promise、generator、async await,es6模塊等。
參考: 阮一峰 —— ECMAScript 6 入門
9. ajax請求過程
不多說,上面有。
10. 有哪些性能優化
參考:
嗨,送你一張Web性能優化地圖
前端優化不完全指南
11. 懶加載怎么實現
場景:一個頁面中很多圖片,但是首屏只出現幾張,這時如果一次性把圖片都加載出來會影響性能。這時可以使用懶加載,頁面滾動到可視區在加載。優化首屏加載。
實現:img標簽src屬性為空,給一個data-xx屬性,里面存放圖片真實地址,當頁面滾動直至此圖片出現在可視區域時,用js取到該圖片的data-xx的值賦給src。
優點:頁面加載速度快,減輕服務器壓力、節約流量,用戶體驗好。
12. 項目中寫過什么組件,組件有哪些功能
主要介紹了下實習項目寫過的組件,說了下如何實現的。
二面1. react框架有哪些設計的好的地方
主要介紹了以下幾個部分:
JSX語法
組件化
react單項數據流
虛擬DOM
react生命周期
2. react是怎么工作的,怎么提高性能
主要還是說了下react的生命周期,還有shouldComponentUpdate這個函數,以及diff算法。
3. redux有哪些需要改進,你覺得你用的不怎么舒服的地方?
我當時說的是redux的subscribe方法有點麻煩,每次更新數據都要手動的subscribe一下,所以覺得react-redux的api封裝的更好,用起來比較簡單。
參考:
這段時間研究了下Redux,寫寫自己對它的感覺
Redux數據流管理架構有什么致命缺陷,未來會如何改進?
4. 怎么設計一個類似于antd 的 react 組件庫
這個問題把我給問懵了額,我是按照軟件工程的生命周期流程來答的。
5. 你做的最自豪的一個項目
這個略過...言之有理即可
6. mysql 的左關聯和右關聯
左關聯:保留左表中所有的元組,右表中沒有的屬性填充NULL。
右關聯:保留右表中所有的元組,左表中沒有的屬性填充NULL。
7. 有沒有折騰過后端
直接說了沒有,之前學了點PHP,不過都快忘得差不多了額。
8. 學習方法和未來的學習路線
言之有理即可。
9. 瀏覽器頁面渲染機制
解析html建立dom樹
解析css構建render樹(將CSS代碼解析成樹形的數據結構,然后結合DOM合并成render樹)
布局render樹(Layout/reflow),負責各元素尺寸、位置的計算
繪制render樹(paint),繪制頁面像素信息
瀏覽器會將各層的信息發送給GPU,GPU會將各層合成(composite),顯示在屏幕上。
參考: 從瀏覽器多進程到JS單線程,JS運行機制最全面的一次梳理
10. XSS和CSRF防范措施
(1)XSS:跨站腳本攻擊
攻擊方式:在URL或者頁面輸入框中插入JavaScript代碼。
防范:
設置httpOnly,禁止用document.cookie操作;
輸入檢查:在用戶輸入的時候進行格式檢查;
對輸出轉義。
(2)CSRF:跨站點偽造請求
攻擊方式:攻擊者通過一些技術手段欺騙用戶的瀏覽器去訪問一個自己曾經認證過的網站并執行一些操作(如發郵件,發消息,甚至財產操作如轉賬和購買商品)。主要是拿到了用戶的登錄態。
防范:
檢查 Referer 字段:這個字段用以標明請求來源于哪個地址。在處理敏感數據請求時,通常來說,Referer 字段應和請求的地址位于同一域名下。
添加校驗 Token:這種數據通常是表單中的一個數據項。服務器生成token并附加在表單中,其內容是一個偽亂數。當客戶端通過表單提交請求時,這個偽亂數也一并提交上去以供校驗。正常的訪問時,客戶端瀏覽器能夠正確得到并傳回這個偽亂數,而通過 CSRF 傳來的欺騙性攻擊中,攻擊者無從事先得知這個偽亂數的值,服務器端就會因為校驗 Token 的值為空或者錯誤,拒絕這個可疑請求。
通過輸入驗證碼來校驗合法請求。
三面這一面基本問的是個人知識沉淀了,如實回答就可以了。
在項目中的難點,怎么解決的
你的優勢是什么
redux 源碼學到了什么,怎么看源碼的
了解哪些前端的前沿技術
平時看什么書,興趣愛好是什么
異步有哪些方法
博客寫了什么
除了實習經歷,還做過哪些項目
四面這一面是在杭州菜鳥現場面的,尷尬的是通知我的小姐姐一直強調是hr面,我天真的以為是hr面了,然鵝問了很多技術,當時候想的是阿里的hr都這么厲害了,都能直接問技術了。臨走之前,特意問了面試官是hr面么,他說是技術,然后我......大概就知道自己涼了。
1. mysql的索引用的什么,介紹一下b樹,b+樹,紅黑樹這些
mysql的索引用的是B+樹。
參考: 數據結構中常見的樹(BST二叉搜索樹、AVL平衡二叉樹、RBT紅黑樹、B-樹、B+樹、B*樹)
2. Mysql的基本寫法
參考: 一千行 MySQL 學習筆記
3. 估算下杭州上空現在有多少架飛機
這個題目,也真的是為難我了額。在網上搜到了個答案,可以參考下:高盛的面試題
4. 兩組數據,都存儲五億條url,內存有4G,如何找出相同的兩條url
參考: 面試- 阿里-. 大數據題目- 給定a、b兩個文件,各存放50億個url,每個url各占64字節,內存限制是4G,讓你找出a、b文件共同的url?
5. 如何找到一個字符串中最長的兩個字符串
解法:后綴數組。首先生成字符串的所有后綴數組,在進行排序,找出相鄰兩個最長的公共子串(從第一位開始相同的)
例如:abcdeabc
生成后綴數組:【abcdeabc,bcdeabc,cdeabc,deabc,eabc,abc,bc,c】
再排序:【abcdeabc,abc,bcdeabc,bc,cdeabc,c,deabc,eabc】
找出相鄰的最長公共子串:【abc,bc,c】
因此,最長的串是abc。
6. 在白板上畫出這個項目的整個架構
畫了下項目的功能架構什么的。
7. XSS, CSRF,token 怎么來的,sql 注入知道么
sql注入:
攻擊方式:服務器上的數據庫運行非法的 SQL 語句,主要通過拼接字符串的形式來完成,改變sql語句本身的語義。通過sql語句實現無賬號登陸,甚至篡改數據庫。
防御:
使用參數化查詢:使用預編譯語句,預先編譯的 SQL 語句,并且傳入適當參數多次執行。由于沒有拼接的過程,因此可以防止 SQL 注入的發生。 使用preparedStatement的參數化sql,通過先確定語義,再傳入參數,就不會因為傳入的參數改變sql的語義。(通過setInt,setString,setBoolean傳入參數)
單引號轉換:將傳入的參數中的單引號轉換為連續兩個單引號,PHP 中的 Magic quote 可以完成這個功能。
檢查變量數據類型和格式。
使用正則表達式過濾傳入的參數,對特殊符號過濾或者轉義處理。
8. 怎么設計一個ant的組件
9. 你覺得你實習做的項目有什么改進的地方
10. 你做過印象最深刻的項目
11. 算法了解過嗎
就知道一些基本的排序額...
12. Setstate 會發生什么
setState會引發一次組件的更新過程,從而引發頁面的重新繪制。主要會涉及以下幾個生命周期函數:
shouldComponentUpdate(被調用時this.state沒有更新;如果返回了false,生命周期被中斷,雖然不調用之后的函數了,但是state仍然會被更新)
componentWillUpdate(被調用時this.state沒有更新)
render(被調用時this.state得到更新)
componentDidUpdate
13. 平時處理過什么兼容性
參考: web前端兼容性問題總結
14. 了解分布式和負載均衡么
然鵝我并不了解呃。
參考: 服務器負載均衡的基本功能和實現原理
五面第四面確實是掛了,沒面hr就讓我走了,后面過了兩天之后,三面面試官又把我撈起來了,說我計算機基礎還有數據庫基礎不怎么好,然后說問我幾個簡單的,之后給了我機會面了hr,感謝三面面試官讓我體驗了阿里的整個面試流程,很滿足了。
1. 進程和線程的區別
根本區別:進程是操作系統資源分配的基本單位,而線程是任務調度和執行的基本單位。
在開銷方面:每個進程都有獨立的代碼和數據空間(程序上下文),程序之間的切換會有較大的開銷;線程可以看做輕量級的進程,同一類線程共享代碼和數據空間,每個線程都有自己獨立的運行棧和程序計數器(PC),線程之間切換的開銷小。
所處環境:在操作系統中能同時運行多個進程(程序);而在同一個進程(程序)中有多個線程同時執行(通過CPU調度,在每個時間片中只有一個線程執行)。
內存分配方面:系統在運行的時候會為每個進程分配不同的內存空間;而對線程而言,除了CPU外,系統不會為線程分配內存(線程所使用的資源來自其所屬進程的資源),線程組之間只能共享資源。
包含關系:沒有線程的進程可以看做是單線程的,如果一個進程內有多個線程,則執行過程不是一條線的,而是多條線(線程)共同完成的;線程是進程的一部分,所以線程也被稱為輕權進程或者輕量級進程。
2. 冒泡排序和快速排序的區別
簡述了下冒泡和快排的思想,以及冒泡和快排的時間復雜度。
3. OSI七層模型以及作用
上面有寫噢,不知道的往上翻。
4. 你有哪些優勢,或者打動他的
呃,最怕這種自夸的問題額,然后就是夸了一頓,手動捂臉。
5. 面向對象和非面向對象有什么區別
面向對象三大特性:封裝,繼承,多態。
面向對象的好處:
將對象進行分類,分別封裝它們的數據和可以調用的方法,方便了函數、變量、數據的管理,方便方法的調用(減少重復參數等),尤其是在編寫大型程序時更有幫助。
用面向對象的編程可以把變量當成對象進行操作,讓編程思路更加清晰簡潔,而且減少了很多冗余變量的出現
參考: 面向對象(一)|面向對象概念及優點
6. 設計模式有哪些,說下裝飾者模式和代理模式
前面有總結,往前翻。
7. 重載和重寫有什么區別
方法重寫(overriding):
也叫子類的方法覆蓋父類的方法,要求返回值、方法名和參數都相同。
子類拋出的異常不能超過父類相應方法拋出的異常。(子類異常不能超出父類異常)
子類方法的的訪問級別不能低于父類相應方法的訪問級別(子類訪問級別不能低于父類訪問級別)。
方法重載(overloading):
重載是在同一個類中的兩個或兩個以上的方法,擁有相同的方法名,但是參數卻不相同,方法體也不相同,最常見的重載的例子就是類的構造函數。
參考: 方法重載和重寫的區別
hr面為什么選擇前端開發
什么事情讓你最有成就感
什么讓你最有挫敗感
為什么選擇阿里
平時是怎么學習的
職業發展
百度二面三面都有手寫代碼的環節,對于我這種動手能力弱的人來說還是挺吃力。當時提前批投遞的是深圳百度,總共只招五個前端,沒過也很正常。后面正式批筆試過了,但是要去北京面試,也就直接放棄了。
1. 為什么要用flex布局,align-items和justify-content的區別
傳統布局基于盒模型,非常依賴 display屬性 、position屬性 、float屬性。而flex布局更靈活,可以簡便、完整、響應式地實現各種頁面布局,比如水平垂直居中。
align-items:定義在垂直方向上的對齊方式;
justify-content:定義在水平方向上的對齊方式。
2. webpack是怎么打包的,babel又是什么?
把項目當做一個整體,通過一個給定的主文件(如:index.js),Webpack將從這個文件開始找到項目的所有依賴文件,使用loaders處理它們,最后打包為一個(或多個)瀏覽器可識別的JavaScript文件。
babel將es6、es7、es8等語法轉換成瀏覽器可識別的es5或es3語法。
3. saas和less不同于普通css的地方
定義變量,可以把反復使用的css屬性值定義成變量,然后通過變量名來引用它們,而無需重復書寫這一屬性值;
嵌套寫法,父子關系一目了然;
使用運算符,可以進行樣式的計算;
內置一些顏色處理函數用來對顏色值進行處理,例如加亮、變暗、顏色梯度等;
繼承:為多個元素定義相同樣式的時候,我們可以考慮使用繼承的做法;
Mixins (混入):有點像是函數或者是宏,當某段 CSS經常需要在多個元素中使用時,可以為這些共用的 CSS 定義一個Mixin,然后只需要在需要引用這些 CSS 地方調用該 Mixin 即可。
4. es 6模塊和其他模塊不同的地方
對比了一下es6模塊和CommonJS模塊:
區別 | CommonJS | es6 |
---|---|---|
加載原理 | 第一次加載模塊就會執行整個模塊,再次用到時,不會執行該模塊,而是到緩存中取值。 | 不會緩存運行結果,動態的去被加載的模塊中取值,并且變量總是綁定其所在模塊。 |
輸出 | 值的拷貝(模塊中值的改變不會影響已經加載的值) | 值的引用(靜態分析,動態引用,原來模塊值改變會改變加載的值) |
加載方式 | 運行時加載(加載整個模塊,即模塊中的所有接口) | 編譯時加載(只加載需要的接口) |
this指向 | 指向當前模塊 | 指向undefined |
循環加載 | 只輸出已經執行的部分,還未執行的部分不會輸出 | 遇到模塊加載命令import時不會去執行模塊,而是生成一個動態的只讀引用,等到真正用到時再去模塊中取值。只要引用存在,代碼就能執行。 |
5. 有沒有用過es6的一些異步處理函數
Promise,generator,async await
6. redux怎么處理異步操作
可以引入Redux-thunk或者redux-promise這種中間件,可以延遲事件的派發。
其中的原理:是因為他們用了applymiddleware()包裝了store的dispatch方法,擁有可以處理異步的能力。
7. 為什么reducer要是個純函數,純函數是什么?
純函數:對于相同的輸入,永遠會得到相同的輸出,而且沒有任何可觀察的副作用,也不依賴外部環境的狀態。
原因:Redux只通過比較新舊兩個對象的存儲位置來比較新舊兩個對象是否相同(淺比較)。如果你在reducer內部直接修改舊的state對象的屬性值,那么新的state和舊的state將都指向同一個對象。因此Redux認為沒有任何改變,返回的state將為舊的state。兩個state相同的話,頁面就不會重新渲染了。
因為比較兩個Javascript對象所有的屬性是否相同的的唯一方法是對它們進行深比較。但是深比較在真實的應用當中代價昂貴,因為通常js的對象都很大,同時需要比較的次數很多。因此一個有效的解決方法是作出一個規定:無論何時發生變化時,開發者都要創建一個新的對象,然后將新對象傳遞出去。同時,當沒有任何變化發生時,開發者發送回舊的對象。也就是說,新的對象代表新的state。
8. 高階函數是什么,怎么去寫一個高階函數
高階函數:參數值為函數或者返回值為函數。例如map,reduce,filter,sort方法就是高階函數。
編寫高階函數,就是讓函數的參數能夠接收別的函數。
9. vue跟react的區別是什么
沒有用過vue,所以就只說了vue具有雙向綁定,react是單向數據流。
參考: Vue.js與React的全面對比
10. nodejs處理了什么問題
可以處理高并發的I/O,也能與websocket配合,開發長連接的實時交互應用程序。
11. 響應式布局,怎么做移動端適配
使用媒體查詢可以實現響應式布局。
移動端適配方案:
(1)meta viewport:讓當前viewport的寬度等于設備的寬度,同時不允許用戶手動縮放。
width=device-width: 讓當前viewport寬度等于設備的寬度
user-scalable=no: 禁止用戶縮放
initial-scale=1.0: 設置頁面的初始縮放值為不縮放
maximum-scale=1.0: 允許用戶的最大縮放值為1.0
minimum-scale=1.0: 允許用戶的最小縮放值為1.0
(2)媒體查詢(響應式)
(3)動態 rem 方案
參考: 移動端是怎么做適配的?
二面1. 怎么做一個實時的聊天系統
使用WebSocket和nodejs,《nodejs實戰》這本書詳細介紹了這個項目。
2. 當消息有延遲的時候,怎么保證消息的正確順序
每個消息在被創建時,都將被賦予一個全局唯一的、單調遞增的、連續的序列號(SerialNumber,SN)。可以通過一個全局計數器來實現這一點。通過比較兩個消息的SN,確定其先后順序。
3. 怎么做一個登陸窗口,input有哪些兼容性
使用form表單。
4. input按鈕如何校驗
使用正則表達式。
5. 如何實現水平垂直居中,relative、absolute、fixed
我說了三種方式:
(1)使用表格
.container{ width: 600px; height: 600px; background: #eee; display: table-cell; text-align: center; vertical-align: middle; } .center{ background: blue; }
(2)css3的transform屬性
.container{ width: 100%; height: 400px; background: #eee; position: relative; } .center{ background: blue; position:absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
(3)flex布局
.container{ width: 100%; height: 400px; background: #eee; display: flex; justify-content: center; align-items: center; } .center{ width: 100px; height: 100px; background: blue; text-align: center; }
relative:相對于自己的定位;
absolute:相對于最近一級定位元素的定位;
fixed:相對于窗口的定位。
6. 寫一個函數,1s之后依次輸出1,2,3,4,5
直接使用了let和定時器。
for(let i = 1 ; i < 6; i++){ setTimeout(() => { conosle.log(i) }, 1000) }
7. 事件隊列(宏任務、微任務)
參考::這一次,徹底弄懂 JavaScript 執行機制
8. 如何每隔三個數加一個逗號,還要考慮小數點的情況
這道題就是大疆的筆試題,當時候筆試題也是瞎寫的,后面也沒仔細看,沒想到又成了一道面試題。
function transform(number){ var num = number.toString() var numArr = num.split(".") var [num, dotNum] = numArr var operateNum = num.split("").reverse() var result = [], len = operateNum.length for(var i = 0; i< len; i++){ result.push(operateNum[i]) if(((i+1) % 3 === 0) && (i !== len-1)){ result.push(",") } } if(dotNum){ result.reverse().push(".", ...dotNum) return result.join("") }else{ return result.reverse().join("") } }
9. webpack有配置過嗎?原理知道嗎
參考前面。
10. 父子組件如何通信,子組件怎么跟父組件通信?
父組件把state作為props傳遞給子組件進行通信。
父組件寫好state和處理該state的函數,同時將函數名通過props屬性值的形式傳入子組件,子組件調用父組件的函數,同時引起state變化。
11. 簡單說一下pwa
面試的這個部門就是做pwa的,所以說了下自己對pwa的理解。
三面1. 手寫indexOf
function indexOf(str, val){ var strLen = str.length, valLen = val.length for(var i = 0; i < strLen; i++){ var matchLen = i + valLen var matchStr = str.slice(i, matchLen) if(matchLen > strLen){ return -1 } if(matchStr === val){ return i } } return -1 }
2. 實現 JS 的繼承
function A () { this.name = "a"; } A.prototype.getName = function () { return this.name; } function B () { } // B 如何繼承 A
參考: JS實現繼承的幾種方式
3. 從url輸入到頁面顯示會有哪些步驟
(1)DNS服務器解析域名,找到對應服務器的IP地址;
(2)和服務器建立TCP三次握手連接;
(3)發送HTTP請求,服務器會根據HTTP請求到數據服務器取出相應的資源,并返回給瀏覽器;
(4)瀏覽器處理響應
加載:瀏覽器對一個html頁面的加載順序是從上而下的。
當加載到外部css文件、圖片等資源,瀏覽器會再發起一次http請求,來獲取外部資源。
當加載到js文件,html文檔會掛起渲染(加載解析渲染同步)的線程,等待js文件加載、解析完畢才可以恢復html文檔的渲染線程。
解析:解析DOM樹和CSSDOM樹。
渲染:構建渲染樹,將DOM樹進行可視化表示,將頁面呈現給用戶。
4. method有哪些方法,分別是什么意思?post和put的區別
post:上傳資源
put:修改資源
5. https有幾次握手
6. http2比http1好的地方
主要是考察http2的幾個特性。
參考:HTTP協議知識點總結
7. 頁面刷新不出來,是有哪些問題
可以從第三題的每個步驟進行分析,大概是:
域名不存在,或者ip地址錯誤
網絡問題,不能建立正常的tcp連接
服務器找不到正確的資源
8. 上一次系統性的學習是什么時候,怎么學習的
學習react的時候,看文檔、博客,照著網上寫了點小項目。
9. 你覺得項目中最自豪的是什么
10. 上家公司有哪些不好的地方
網易網易是在杭州網易大廈面的,一天面完三輪,然后錄用排序,擇優錄取的吧。我投的是網易考拉,哭唧唧,后面被拒了之后還傷心的卸載了考拉。之后正式批投了杭研,過了筆試,要去武漢面,本來海康也是在武漢面的,考慮到還要住一晚上,有點怕怕,就沒去了。
1.css3動畫
2. flex布局
3. 實現call
Function.prototype.call2 = function (context) { var context = Object(context) || window context.fn = this var args = [] for (var i = 1; i < arguments.length; i++) { args.push("arguments[" + i +"]") } var res = eval("context.fn(" + args + ")") delete context.fn return res }
4. 圖片懶加載data-src
5. Promise異步
6. 水平垂直居中
7. 數組有哪些方法,哪些會改變原數組
改變原數組的方法:pop、push、reverse、shift、sort、splice、unshift,以及兩個ES6新增的方法copyWithin 和 fill;
不改變原數組(復制):concat、join、slice、toString、toLocaleString、indexOf、lastIndexOf、未標準的toSource以及ES7新增的方法includes;
循環遍歷:forEach、every、some、filter、map、reduce、reduceRight 以及ES6新增的方法entries、find、findIndex、keys、values。
8. 操作dom有哪些方法
創建:
createDocumentFragment() //創建一個DOM片段
createElement() //創建一個具體的元素
createTextNode() //創建一個文本節點
添加:appendChild()
移出:removeChild()
替換:replaceChild()
插入:insertBefore()
復制:cloneNode(true)
查找:
getElementsByTagName() //通過標簽名稱
getElementsByClassName() //通過標簽名稱
getElementsByName() //通過元素的Name屬性的值
getElementById() //通過元素Id,唯一性
9. 左邊定寬右邊自適應
(1)左盒子左浮動,右盒子width=100%
(2)左盒子左浮動,右盒子margin-left=左盒子寬度
(3)左盒子左浮動,右盒子右浮動,設置calc(100vw-盒子寬度)
(4)父容器設置display=flex,右盒子flex:1
10. 事件代理
利用事件冒泡的原理,讓自己的所觸發的事件,讓他的父元素代替執行。打個比方:一個button對象,本來自己需要監控自身的點擊事件,但是自己不來監控這個點擊事件,讓自己的父節點來監控自己的點擊事件。
11. 后端了解么
直接說了不了解,笑哭。
二面1. 節流和防抖,手寫一下代碼
(1)防抖:
定義: 合并事件且不會去觸發事件,當一定時間內沒有觸發這個事件時,才真正去觸發事件。
原理:對處理函數進行延時操作,若設定的延時到來之前,再次觸發事件,則清除上一次的延時操作定時器,重新定時。
場景: keydown事件上驗證用戶名,輸入法的聯想。
實現:
function debounce(fn, delay) { var timer return function () { var that = this var args = arguments clearTimeout(timer) timer = setTimeout(function () { fn.apply(that, args) }, delay) } }
(2)節流:
定義: 持續觸發事件時,合并一定時間內的事件,在間隔一定時間之后再真正觸發事件。每間隔一段時間觸發一次。
原理:對處理函數進行延時操作,若設定的延時到來之前,再次觸發事件,則清除上一次的延時操作定時器,重新定時。
場景: resize改變布局時,onscroll滾動加載下面的圖片時。
實現:
方法一:使用時間戳。
當觸發事件的時候,我們取出當前的時間戳,然后減去之前的時間戳(最一開始值設為0),如果大于設置的時間周期,就執行函數,然后更新時間戳為當前的時間戳,如果小于,就不執行。
缺陷:第一次事件會立即執行,停止觸發后沒辦法再激活事件。
function throttle(fn, interval) { var previousTime = +new Date() return function () { var that = this var args = arguments var now = +new Date() if (now - previousTime >= interval) { previousTime = now fn.apply(that, args) } } }
方法二:使用定時器
當觸發事件的時候,我們設置一個定時器,再觸發事件的時候,如果定時器存在,就不執行,直到定時器執行,然后執行函數,清空定時器,這樣就可以設置下個定時器。
缺陷:第一次事件會在n秒后執行,停止觸發后依然會再執行一次事件。
function throttle(fn, interval) { var timer return function (){ var that = this var args = arguments if(!timer){ timer = setTimeout(function () { fn.apply(that, args) timer = null }, interval) } } }
方法三:優化
鼠標移入能立刻執行,停止觸發的時候還能再執行一次。
var throttle = function(func,delay){ var timer = null; var startTime = Date.now(); return function(){ var curTime = Date.now(); var remaining = delay-(curTime-startTime); var context = this; var args = arguments; clearTimeout(timer); if(remaining<=0){ func.apply(context,args); startTime = Date.now(); }else{ timer = setTimeout(func,remaining); } } }
2. 知道哪些性能優化
3. react為什么比其他要快,虛擬dom知道嗎
4. 寫過什么組件
5. 平時怎么學習的
6. node,webpack了解么
7. 模塊化,commonjs,es6模塊
8. redux怎么實現的
hr面項目上有哪些難點,項目中學到了什么
不喜歡跟什么樣的人共事
平時怎么學習
為什么來杭州
職業發展
搜狗搜狗是內推的,面試也很迷,第一面到第二面中間隔了二十幾天,然后二面完了也毫無反饋。
一面1. 說一下項目,整個網絡過程,從前端到后臺
2. Ajax 底層實現,readystate 有哪些
0-(未初始化)還沒有調用send()方法
1-(載入)已調用send()方法,正在發送請求
2-(載入完成)send()方法執行完成,已經接收到全部響應內容
3-(交互)正在解析響應內容
4-(完成)響應內容解析完成,可以在客戶端調用了
3. 狀態碼有哪些,100,307
4. OSI七層模型
5. TCP三次握手
6. SSL握手過程
7. jQuery 有哪些方法
8. display 有哪些屬性,說一下flex的屬性
9. Es6的async awiat ,generator
10. Map有哪些方法
Map的方法:set, get, has, delete, clear
遍歷方法:
keys():返回鍵名的遍歷器。
values():返回鍵值的遍歷器。
entries():返回所有成員的遍歷器。
forEach():遍歷 Map 的所有成員。
參考: Set 和 Map 數據結構
11. 正則用過嗎?exec, 匹配一個手機號
12. css3動畫了解嗎,怎么寫一個loading動畫
13. 怎么實現跨域,cors涉及哪些請求字段
14. 編程: 判斷兩個網絡地址是否屬于同一個子網掩碼
用與運算符就可以了。當時是在牛客網的面試系統上寫的,一直AC不出,也是很迷了額。
15. 怎么上傳文件
二面1. 怎么計算在一個頁面上的停留時間
方案1:websocket,前端開個長連接,后臺統計長連接時間。
方案2:ajax輪詢,隔幾秒發一個查詢,后臺記錄第一與最后一個查詢間隔時間。
方案3: 關閉窗口或者跳轉的時候會觸發window.onbeforeunload函數,可以在該函數中做處理(有兼容性問題);統計完數據記錄到本地cookies中,一段時間后統一發送。
2. 給你一億個數,是連續的,怎么找出兩個不存在的數
用bitmap就能搞定了,存在為1,不存在為0。
3. 一個搜索框的輸入聯想,會遇到什么問題?如果第一個請求延遲,第二個請求先到,請問怎么處理?
鍵盤輸入太快,每次輸入都去聯想,需要多次發送請求,會導致用戶體驗太差,可以使用防抖優化。
在前端做判斷,判斷此時的值是否與返回的值相同,不同就丟棄,相同就顯示在頁面。
4. Http的緩存
5. 二維碼怎么工作的,掃描pc端的二維碼,怎么讓pc端登錄?
pc端隨機生成一個含有唯一uid的二維碼,并與服務器建立一個長連接;
手機掃描二維碼,解析出二維碼中的uid,并把這個uid和手機端的用戶密碼進行綁定,上傳給服務器;
服務器獲得客戶端信息之后,pc端的長連接輪詢操作會獲得該消息,顯示該賬號的信息;
pc端會再開一個長連接與手機端保持通信,等待手機端確認登陸后,獲得服務器授權的token,就可以在pc端登陸進行正常通信了。
6. Promise 做什么的,有哪幾種狀態
異步處理的,有三個狀態:resolve,pending,reject。
7. 項目有哪些難點,怎么處理的
8. 遇到過哪些性能優化
電信IT研發中心當時聽說電信對學歷要求很高,本科基本都是211起的,想著自己本科太渣,就直接放棄了網上的筆試。之后電信來了學校宣講會,跟朋友吃完飯看到了,就去說湊湊熱鬧,剛好有筆試也就做了。做完之后筆試居然考了最高分,比第二名高出二十分,手動捂臉額。一面完分數也挺高的,有95分,運氣爆棚。重點是今年電信開的薪資實在太高了,目前還在糾結選哪個。
1. Xhtml和html的區別
XHTML 元素必須被正確地嵌套。
XHTML 元素必須被關閉。
標簽名必須用小寫字母。
XHTML 文檔必須擁有根元素。
2. 遇到過哪些兼容性問題
3. 瀏覽器內核有哪些,移動端用的是哪個
Trident內核:IE,MaxThon,TT,The Word,360,搜狗瀏覽器等。[又稱為MSHTML]
Gecko內核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等;
Presto內核:Opera7及以上。[Opera內核原為:Presto,現為:Blink]
Webkit內核:Safari,Chrome等。[Chrome的:Blink(Webkit的分支)]
對于Android手機而言,使用率最高的就是Webkit內核。
4. 怎么實現標簽頁的通信
5. Cookie、session,localstorage,sessionstorage
6. React 和jquery 之間的區別,哪個好用
7. 怎么實現繼承
8. Es6,es7有哪些特性
9. 怎么跨域
10. Commonjs用的js哪個特性?
因為js之前只能在瀏覽器運行,為了能讓js能在服務器上運行,所以設計了commonjs規范,而且js之前沒有模塊化的概念。
11. 選擇器優先級
12. 偽類知道嗎,有哪些
13. 塊級元素有哪些,怎么轉成行內元素
14. 一個完整的http請求,頁面渲染過程,js和css文件怎么渲染
二面一面問的都很常規的,不知道為啥給了這么高的分。二面的時候三個面試官,總共就問了三個問題,然后就說面試結束了,不超過五分鐘。
1. TCP怎么工作的
三次握手
2. OSI七層模型,路由器工作在哪一層?
網絡層
3. 平時用什么語言,用過哪些框架
深信服深信服給的薪資居然比電信還低,而且加班還嚴重,就直接拒了。
一面1. 跨域,同源策略,webpack里面有個跨域的方式知道么
2. 怎么把es6轉成es5,babel怎么工作的
解析:將代碼字符串解析成抽象語法樹
變換:對抽象語法樹進行變換操作
再建:根據變換后的抽象語法樹再生成代碼字符串
3. 反向代理知道么,Nginx
4. 繼承有哪些方式
5. 怎么實現一個sleep ,手寫一個promise
6. 能寫一個二叉樹么,怎么去遍歷
7. 深拷貝怎么寫
(1)var new_arr = JSON.parse( JSON.stringify(arr) );
(2)for in 加遞歸
function isObj(obj) { //判斷是否為對象或者函數,但不是null return (typeof obj === "object" || typeof obj === "function") && obj !== null } function deepCopy(obj) { let newObj = Array.isArray(obj) ? [] : {} for(let key in obj) { newObj[key] = isObj(obj[key]) ? deepCopy(obj[key]) : obj[key] } return newObj }
(3)$.extend()
(4)函數庫lodash,提供_.cloneDeep()
8. 在公司除了完成上級交待的任務,還做了什么
9. 怎么實現垂直中間布局
10. Call和apply,哪個性能開銷大
在思否上提問了,已有大神回答。
參考: call和apply的哪個性能更好
11. 正則寫一個手機號,全局匹配是什么
12. 刪除一個數組中的某個數
splice方法
13. 模塊化介紹一下,什么是編譯時優化
14. 有哪些網絡安全名詞,怎么防范
15. 平時怎么學習
二面二面小哥哥問了幾個問題之后,就一直跟我介紹深信服內部的一些管理、技術氛圍、晉升機制什么的,全程都是笑臉額。
1. git push -u 是什么意思
綁定默認提交的遠程版本庫,加了參數-u后,以后即可直接用git push 代替git push origin master
2. git rebase解釋下
有test和dev兩個分支,分別有兩個commit,此時執行下列命令:
git checkout test git rebase dev
以dev為基準將test的提交進行回放,挨個的應用到dev上去,然后test的那些提交就會廢棄。 等價于git merge dev。
git merge 和git rebase區別:
merge不會修改提交歷史,rebase會修改提交歷史
。
rebase只應用于本地沒有提交的代碼,如果應用到已經提交到遠程的分支不要應用,不然會非常的麻煩,git merge 可以應用于遠程分支。
3. linux命令,怎么打開一個文件
cat abc.txt
4. 你的上級給你review 代碼時會提什么建議
5. 怎么看待加班和工作效率
6. get和post分別進行幾次數據交互
get請求過程:(2次交互)
瀏覽器請求tcp連接(第一次握手)
服務器答應進行tcp連接(第二次握手)
瀏覽器確認,并發送get請求頭和數據(第三次握手,這個報文比較小,所以http會在此時進行第一次數據發送)
服務器返回200 ok響應。
post請求過程:(3次交互)
瀏覽器請求tcp連接(第一次握手)
服務器答應進行tcp連接(第二次握手)
瀏覽器確認,并發送post請求頭(第三次握手,這個報文比較小,所以http會在此時進行第一次數據發送)
服務器返回100 continue響應
瀏覽器開始發送數據
服務器返回200 ok響應
7. 怎么打斷點,如何確定一個結果來自于哪個函數
ThoughtWorksTW是內推的,做了內推作業后,就面了技術和文化面。技術面是在作業的基礎上加兩個功能,只寫出來一個,后面一個沒時間寫了,然后就只講了下思路。
文化面面了快一個小時,聽說TW不加班,對女程序員還很友好,挺中意的公司,不過最后還是掛了額。
華為華為的面試就不多說了,基本不問前端的,進去是隨機分崗的。華為的面試陣仗是我見過的最大的,聽說要招一萬人,在萬達那里面的,全是人啊,闊怕。現在正泡在offer池里,估計國慶后發正式offer吧。
二面碰到的是個女面試官,太恐怖了,一直在懟我,最怕碰到女面試官了,慘。
小米小米是內推的,電話面了一面,國慶后要我去武漢現場面,那會學校剛好有事應該也不會去了。
1. redux主要做什么
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/98116.html
摘要:準備在這里放一些網上比較好的前端面試分享,以后不斷補充。百度阿里網易大疆等大小廠前端校招面筋掘金技術征文地址應屆渣渣前端面經還有游戲策劃以及雞湯地址學前端,我如何一年內學到三年的知識。 準備在這里放一些網上比較好的前端面試分享,以后不斷補充。1、百度阿里網易大疆等大小廠前端校招面筋 | 掘金技術征文地址:https://juejin.im/post/5bb470...2、應屆渣渣前端面...
摘要:準備在這里放一些網上比較好的前端面試分享,以后不斷補充。百度阿里網易大疆等大小廠前端校招面筋掘金技術征文地址應屆渣渣前端面經還有游戲策劃以及雞湯地址學前端,我如何一年內學到三年的知識。 準備在這里放一些網上比較好的前端面試分享,以后不斷補充。1、百度阿里網易大疆等大小廠前端校招面筋 | 掘金技術征文地址:https://juejin.im/post/5bb470...2、應屆渣渣前端面...
摘要:準備在這里放一些網上比較好的前端面試分享,以后不斷補充。百度阿里網易大疆等大小廠前端校招面筋掘金技術征文地址應屆渣渣前端面經還有游戲策劃以及雞湯地址學前端,我如何一年內學到三年的知識。 準備在這里放一些網上比較好的前端面試分享,以后不斷補充。1、百度阿里網易大疆等大小廠前端校招面筋 | 掘金技術征文地址:https://juejin.im/post/5bb470...2、應屆渣渣前端面...
閱讀 637·2021-11-24 09:39
閱讀 3481·2019-08-30 15:53
閱讀 2515·2019-08-30 15:44
閱讀 3240·2019-08-30 12:54
閱讀 2210·2019-08-29 12:23
閱讀 3307·2019-08-26 14:05
閱讀 2106·2019-08-26 13:36
閱讀 3436·2019-08-26 13:33