**真的勇士,敢於在跌倒的地方爬起來。**
校招參加的第一場筆試,意料之中的不理想,但是從哪里跌倒的從哪里爬起來,把每次都當作查漏補缺,就沒那么難受了(555...)
終於肝完論文了,補上二面涼經。。。
題型
題型分為單選(16*2.5')、多選(4*2.5')、問答(2*10')和編程(2*15')
筆試總體感覺
印象中感覺單選題不難,基本都是基礎知識,除了前端必須的一些基礎點,數據結構里面堆棧列表二叉樹也要知道一點。
多選有一題不太清楚,input的type取值選項,我選了2個,去了MDN看一下,哦豁,這個選擇還蠻多,對比一下,我漏選了一個。
簡答題自由發揮,CSS選擇器優先級和JS垃圾回收,感覺JS垃圾回收回答得不太好,不准確。
兩個編程題最耗時間:js 駝峰命名和下划線互換,字母異位詞分組(LeetCode原題)。一不小心忘記了時間,只來得及答完一個,結束后一搜,答案特別多,也有很簡單的解法。
查漏補缺
**1.垃圾回收機制
JS的垃圾回收機制定期對我們不再使用的變量、對象所占用的內存進行釋放。局部變量正常生命周期中只在函數執行過程中存在,垃圾回收方式主要有兩種:
一種是標記清除法,當變量進入執行環境時標記為“進入變量”,當變量離開執行環境時標記為“離開環境”,被標記為“離開環境”的變量可以被回收;js中的垃圾收集器運行時會給存儲在內存中的所有變量都加上標記,然后去掉環境中的變量以及被環境中的變量引用的變量的標記,此后再被加上標記的變量被視為准備刪除的變量,最后垃圾收集器完成內存清除,銷毀帶標記的值並回收其占用的空間。
一種是引用計數法,統計引用類型變量聲明后被引用的次數,當次數為0時,該變量將被回收。本質是跟蹤記錄每個值被引用的次數。當聲明一個變量並將一個引用類型值賦給該變量時,這個值的引用次數為1;若同一個值又被賦值給另一個變量,則該值的引用次數+1,但如果包含這個值引用的變量又取得了另外一個值,則這個值得引用次數-1,當這個值的引用次數為0時,則無法再訪問這個值,就可回收其占用的內存空間。
V8引擎的垃圾回收機制,主要使用的是分代回收機制。
V8引擎將保存對象的堆進行了分代:對象最初被分在新生區,新生區的內存分配只需要保有一個指向內存區的指針,不斷根據內存大小進行遞增,當指針達到新生區的末尾,會有一次垃圾回收清理(小周期),清理掉新生區中不再活躍的死對象。對於超過2個小周期的對象,則需要將其移動至老生區。老生區在標記-清除或標記-緊縮的過程中進行回收。大周期進行並不頻繁,通常在移動足夠多的對象至老生區后才會發生。
**2.駝峰命名和下划線互換**
// 下划線轉換駝峰 function toHump(name) { return name.replace(/\_(\w)/g, function(all, letter){ return letter.toUpperCase(); }) }
// 駝峰轉下划線 function toLine(name){ return name.replace(/([A-Z])/g, "_$1").toLowerCase(); } ``` 為了避免首字母大寫帶來的下划線轉換,加一個slice()方法: ``` // 駝峰轉下划線 function toLine(name){ return name.replace(/([A-Z])/g, "_$1").toLowerCase().slice(1); }
// 測試 let a = 'a_b2_345_cd2345'; console.log(toHump(a)); let b = 'AbCdefGhi'; console.log(toLine(b));
**3.字母異位詞分組**
問題:
給定一個字符串數組,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字符串。
示例:
輸入: ["eat", "tea", "tan", "ate", "nat", "bat"], 輸出: [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ]
說明:
所有輸入均為小寫字母。
不考慮答案輸出的順序。
/** * @param {string[]} strs * @return {string[][]} */ var groupAnagrams = function(strs) { let res = {}; let len = strs.length; for(let i=0;i<len;i++){ let s = strs[i].split('').sort().join(''); if(!res[s]){ res[s] = []; } res[s].push(strs[i]) } return Object.values(res); };
通知面試
筆試很久通過復篩進入面試,郵件短信通知2天內電面,面試時間15分鍾,因為中間有個周末,實際過了四天,下午直接電話來面的。
自我感覺面的不好,因為最近半個月都沒怎么准備面試相關復習。主要問了以下幾個問題,都是知道一些,但是感覺沒講清楚,整個過程差不多有30分鍾。
面試題
1. vue數據驅動,講一下vue實現原理。
2. 講一下什么是虛擬DOM,虛擬DOM實現原理。
3. 數組去重幾種方式?
4. vue生命周期的created和mounted,mounted中是否得到數據,生命周期和數據哪個在先?沒太理解面試官意圖。
5. 小程序用到了雲數據庫,數據庫雙表聯查怎么實現?
6. 對webpack的了解?
7. 項目中遇到的問題,怎么解決?
8. 對工程化的理解?
9. 組件間通信有哪幾種方式?
二面
通過一面大概三四天吧,准備畢業論文最緊張的時候,真的是擠時間復習了一下,主要把之前遇到的不會的重點看了下。可能因為我沒有實習經歷,面試官反而問的比較簡單。然而,雖然面試體驗很棒(面試官很nice)但還是掛在二面了。最后給了我一些建議(我請求的),多看看常用的數組字符串高階函數,實習真正用的東西多了解下,提到我有吃沒實習的虧。因為面完又忙着改論文,到現在才寫二面面經,題目只記得一部分了。
面試題
1. CSS左定寬右自適應實現
2. CSS動畫
3. VUE生命周期(真的重要)
4. 數組常用高階函數filter、map這些
5. Promise實現