應屆畢業生的寒冬之旅

一個普通全日制本科的普通應屆畢業生逆向衝分的自述,但願各路大神勿噴(狗頭)。javascript

前言

 在去年下半年寒冬將至之時,我還在深圳某間中大型公司的某個溫暖的項目組作着前端實習。偶爾在掘金、簡書上刷到互聯網寒冬的消息也是大體瀏覽,絲毫沒有放在心上。直到有天項目組組長約我談話,說北京總部那邊轉正編制今年有改變,除了後端銷售那邊還有些崗位以外,其餘的職位均可能轉正不了,特別是前端(我是除了後端實習生以外最後一個離職實習生在2月尾巴)。說實話,當時個人心裏除了離開一羣可愛的同事感受有點失落其餘感受沒多大,由於導師的信任把不少需求、bug修復任務分到我身上讓我成長了不少。在那4個多月的實習中,我深入理解了Javascript的閉包、原型、繼承、預編譯過程的函數聲明總體提高,變量聲明提高、this指向、json數據處理、也獨立解決過深拷貝,淺拷貝、防抖節流的問題、ES6經常使用的新語法也常用,對宏觀任務和微觀任務以及同步異步也有着清晰的理解、能熟練的使用Vue框架和less預編譯器獨立開發、對組件化和模塊化開發也有清晰的理解、熟悉使用git版本管理。因此通俗的說:那時候的我飄了。php

金3銀4絕望季

做爲一個標準90後,崇尚着「只要心夠大,每天是暑假」的理念,剛離職固然先放鬆放鬆,因而花一個星期把星耀5的號打上了王者。在那以後,正式開始了個人寒冬之旅,直至今日收到4個offer,雖然沒有一個薪資和我預期的同樣,但爲了生活仍是選擇了一個週三入職。在求職這個過程過於曲折,總結了一下:菜是原罪。前端

在這個求職過程當中,我遇到過招前端開發工程師卻面試Java、計算機原理、數據結構,理由是面試成功後不必定作前端開發,可能分配後臺開發、測試崗位,由於他以爲前端技能去培訓班培訓6個月出來前端技術棧你能夠掌握不少,Vue你也能夠用得很6,可是計算機原理那些學校教的基礎知識才是區分你與培訓班出來的不一樣。雖然我很認同他說的,奈何嘴上回答不出答案,只能回去等通知了;我也面試過和技術面試官聊了差很少一個多鐘的前端技術後(基本能夠回答出來)問我php後臺開發,由於公司是初創公司,必要時須要進行後臺開發,崗位需求有寫,最後也只能收穫回去等通知;我還面試過須要1-3年工做經驗的前端工程師,前端基礎都回答上了,卻因VueX的問題表述不清晰和未接觸webpack提取公共模塊問題回答不出,再加上問題的不斷挖掘致使自身緊張,最終面試官加了我微信,讓我作候選人,這幾天沒遇到合適就錄用我...可是最多見的情形仍是簡歷投遞石沉大海,絕大部分的簡歷投遞只有已到達、已查閱和不適合三個階段,明明職位要求和本身技術棧匹配卻依然回饋不適合的狀況司空常見,而更常見的是永遠是已到達狀態。一次又一次的打擊讓我都再也不相信本身,指望薪資也心中一次次降低,以致於如今和hr談薪資都至關佛性,遵從安排,只要仍是正常的薪酬範圍點頭就完事了。java

初級前端工程師需具有的javascript基礎(導師講的,甩鍋先)

預編譯

 預編譯—發生在函數執行的前一刻,它在函數執行時總得來講作了兩件事:函數聲明總體提高;二變量 聲明提高。那麼預編譯具體是作了什麼事情呢?webpack

從總體頁面來看,當script內代碼塊執行時,預編譯作了三件事。git

第一件事情是建立GO(Global Object)對象,也就是咱們熟悉的全局對象es6

第二件事是查找變量聲明做爲GO屬性,值賦予undefinedweb

第三件事是查找函數聲明做爲GO屬性,若是屬性名存在,直接把值賦予函數體。面試

當咱們調用一個函數時,在執行前一刻,預編譯作了四件事情。ajax

第一件事情是生成一個AO(Actived Object)對象,也就是咱們平時所說的函數做用域對象,保存函數調用時的局部變量。

第二件事情是查找函數形參以及函數內部變量聲明,形參名以及變量名做爲AO對象的屬性,值爲undefined。

第三件事情是實參形參相統一,把實參的值賦給形參。

第四件事情是查找函數聲明,若是AO對象中屬性名與函數名同樣,把值賦予函數體。

當代碼在執行時,建立出的變量對象的一條做用域鏈,[[scope]](做用域)存儲着一層層的AO與GO的集合,集合呈鏈式連接就是做用域鏈,用來指定全部變量和函數的訪問順序,做用域鏈最頂端始終是當前代碼正在執行的變量對象的AO。

閉包

 閉包—是指有權訪問另外一個函數做用域變量的函數。

建立閉包的經常使用方法就是函數裏面再建立函數,而後把建立的函數的結果return出去保存到外部。因此當script代碼塊執行時,先生成GO,而後代碼由上到下執行,當執行到外部函數執行前一刻時生成該函數的AO,同時當外部函數執行產生內部函數的定義,因此當內部函數被建立時保存了外部函數的執行環境(AO、GO),並且還未執行就把內部函數被return到外部時,從而致使外部函數釋放不了本身的做用域,造成閉包。而當接收了return的內部函數的函數執行時(即 var test = 外部函數();test();),內部函數才生成本身的AO再做用域頂端,同時做用域鏈上還有外部函數的AO以及GO。

原型鏈

 原型鏈-由原型組成的鏈叫作原型鏈。而對象的__proto__就是它的是原型,原型也是一個對象,也有__proto__屬性,原型的__proto__又是原型的原型,就這樣根據對象的__proto__向上查找,這就是原型鏈。

原型鏈繼承

原型鏈繼承就是每個構造函數都有一個prototype屬性指向該構造函數的父類,當實例對象經過new一個構造函數生成,該實例對象隱性執行了四步。

第一步 var 中間變量 = {}

第二步 將構造函數中的this指向新建立的中間變量。

第三步 中間變量.__proto__ = 構造函數.prototype

第三步 return 實例

因此當一個構造函數的prototype等於另外一個實例對象,而這個實例對象是經過new另外一個構造函數生成的,而另外一個構造函數的prototype.xxx=xxx,經過這種方式第一個構造函數的實例對象就能夠訪問到另外一個構造函數的父類,這也就實現原型鏈繼承。

構造函數繼承、借用構造函數繼承、組合繼承

下回分解

聖盃模式繼承

理論:函數聲明空構造函數作中間層(function F(){}),F.prototype屬性等於Father.prototype,而後Son.prototype = new F();可是有個繼承混亂問題,因此須要把Son的constuctor歸位,即Son.prototype.constuctor = Father;(前提聲明瞭Son、Father構造函數)

經典聖盃模式實現繼承代碼封裝:

function inherit(Target,Origin){
    function F(){};
    F.prototype = Origin.prototype;
    Target.prototype = new F();
    Target.prototype.constuctor = Target;
}
複製代碼

 this指向

this指向只有在函數執行的時候才能肯定this到底指向誰。this指向有三種狀況

第一種狀況:若是一個函數沒有被上一級的對象所調用,那麼this指向GO,反之即指向上一級對象的AO。

第二種狀況:做爲構造函數調用,this指向new出的對象的AO。(其中涉及到new操做符調用構造函數時隱式三步驟以及原型鏈繼承概念)

第三種狀況:箭頭函數沒有本身的this,它的this指向上下文的this

說到this指向,又不得不說三個改變this指向的方法—call、apply、bind。它們都是從Function.prototype繼承來的(下篇再寫具體用法)

深拷貝和淺拷貝

數據類型分爲基本數據類型(undefined、null、布爾、string、number、symbol(es6新增))和複雜數據類型(object),基本數據類型存儲在棧上,存儲的是值,而複雜數據類型存儲在堆上,存儲的是地址。深拷貝和淺拷貝只適用於複雜數據類型,由於當object賦值給另外一個變量其實拷貝的是地址,指向同一塊存儲空間,當拷貝對象改變原對象跟着改變就是淺拷貝,反之就是深拷貝。簡單的數組存儲值時可用concat()和slice()實現深拷貝,若是數組存儲對象或者數組時可用josn.parse(josn.stringify(obj))。若是是對象經過遞歸把每一個對象的值賦值給新定義的對象。

事件循環機制

javascript擁有一個基於事件循環機制的併發模型。js引擎把任務分紅宏觀任務(setTimeout、script)和微觀任務(promise、process.nextTick) ,先執行宏觀任務,再執行微觀任務,任務又分同步任務和異步任務,全部同步任務在主線程上執行造成一個「執行棧」 ,而異步任務只要有了運行結果就會在任務隊列之中放置一個事件,當執行棧裏的全部同步任務執行完,系統就會讀取 隊列任務,查看事件裏相對應的異步任務,結束等待狀態,進入執行棧開始執行。主線程不斷重複這樣的操做叫作事件循環機制。

ES6新特徵

promise

ajax

狀態碼的區別

http1.0、http1.一、http2.0的區別

http緩存策略

性能優化(包括迴流和重繪)

網絡安全(XSS、CSRF  薄弱點)

Vue全家桶(Vue+Vue-Router+Vuex)

less或sass預編譯器

flex佈局

函數柯里化(薄弱點)

webpack(薄弱點)

...

感謝閱讀,因爲時間關係技術點沒有一一根據本身的理解去細說,但願可以對正面努力邁向前端大門的大家給予幫助。只能說前端技術棧太多了,仍是須要不斷的學習,緊跟前端潮流,在前端這條路上也還有很長的路要走。堅持!加油!共勉!

相關文章
相關標籤/搜索