1. 要有比較好的計算機基礎
這裏的計算機基礎指的是數據結構與算法,操做系統,編譯原理,計算機網絡等等。雖然相對於其餘方向而言,前端在工做中用到計算機基礎的地方可能少一點,可是不管大小廠,招實習生其實都是爲正式招聘作儲備,因此會比較但願招未來有更大發展空間的人。
若是你具有比較好的計算機基礎素養,那麼之後在拓展到其餘領域(WebGL —— 計算機圖形學,Node.js 底層 —— 操做系統,JS 引擎和各類預編譯工具—— 編譯原理, etc.)的時候會更快上手。另外有一些公司對前端的概念不侷限於 Web 前端,也包括移動端偏前端的部分,這裏也須要你有比較好的計算機基礎才能作好。前端領域有不少人已經不知足於造輪子,直接跑去造語言了,若是你編程基礎夠好,接觸過各類形形色色的編程語言和範式,再上手這些東西也會方便些(好比Ruby/Python->CoffeeScript,Haskell->LiveScript)。
雖然也有不少地方爲了招到足夠多能來幹活的前端會下降對計算機基礎的要求,可是打好這方面的基礎是沒有壞處的,若是面試筆試被問到且答得上來,也是可以加分的。一些大廠常常會出現「不是前端的面試官來面前端」的狀況,我我的是以爲若是這類面試官問的都是計算機基礎問題的話,其實真的無可厚非,畢竟人家在面「一個前端程序員」以前,是在面「一個程序員」啊……
2. 要懂得現代前端的一些新技術
好比:css
有一些同窗以爲這些東西懂得越多越好,我我的是以爲這些工具不必定要都瞭解(畢竟它們不少也未必能火多久),但對這些東西要有大體的概念,而且每一個領域的用過一兩種(最好是在項目裏),清楚它們的優缺點和必要程度。這是區分在前端上投入過必定精力的人和跨行來兼職前端的人的標誌。
去大廠校招應聘前端的會有不少只是作過一些 Web 項目,但不必定對前端的技術很瞭解,只是看前端門檻比較低就去投簡歷的人。若是你對這些新技術比較瞭解的話,起碼可以證實你是比較專一前端並且花過必定時間在上面的。
同時,前端如今確實是一個天天都有不少輪子冒出來的領域,也須要你有足夠強的自學能力和(英文)文檔閱讀能力去跟上社區的這些新動態。接觸過比較多的輪子,纔會有本身的判斷,不會總是人云亦云火一個學一個。這些工具裏,確實也有不少在合適的場景下能夠提升前端的生產力或者代碼質量,對這些東西有必定關注,也代表你對本身的生產力和代碼質量是有必定關注的,這實際上是一個更廣義的靠譜程序員的特性。
3. 懂得什麼是 Web 標準和瀏覽器開發維護的流程,而且會跟進新發布的標準和主流瀏覽器新實現的特性
固然面試的時候通常不會直接問你這方面的問題,可是若是你懂這裏面的水大概是怎麼一回事的話,在不少問題上(特別是兼容性問題上)都能回答得比較深入一些。最好清楚:前端
標準和瀏覽器這灘水仍是很渾的,涉及到不少利益糾葛和大廠的博弈,若是你大概清楚他們的一些事情,不光本身作前端兼容的時候會容易一些(不會只抱怨「爲啥XXX就是不能OOO」而是懂得他們的無奈而且認真尋找解決方案),在新特性出來的時候也更容易消化(不是「啊又出了個新東西要學好煩啊」而是「在郵件列表上爭(si)論(bi)了那麼久他們終於把這個搞出來了」),你本身對前端比較基礎的那部分的知識體系更會有條理得多。我的以爲這也是區分比較有經驗的前端和臨時跨行的前端的關鍵之一,這些東西是須要你通過一段時間的耳濡目染才能理清楚,並且會在必定程度上影響你的工做的。
4. 多看書,多關注技術資訊
技術資訊的來源包括RSS、郵件訂閱、比較重要的郵件列表、或者follow Twitter和微博上一些比較有影響力的開發者。我的經驗是,通常在二面或者三面的時候,面試官都會問相似「你從哪裏接觸前端的新技術/你看過哪些書」的問題,由於前端如今技術更新很快,比較專一於前端這方面的人通常都會有本身接觸新技術的渠道,他們天然也會比較關心候選人是否是有在跟進社區的一些動向。其實這也可以排除那些不太靠譜的臨門跨行的人,由於他們平時通常不會特地去關注前端技術的新動態的。
5. 不只懂得一些東西怎麼寫,更要懂得一些東西不要怎麼寫
Web 標準大多不是嚴格向後兼容的,不少幾年前經常使用的寫法,如今已經被社區的大多數人強烈建議避開了,有不少特性也隨着時間的流逝被打上了 deprecated 的標籤,若是你不幸拿着一本比較老的書入門,又不在網上驗證上面說的每一句話,那麼頗有可能你就這樣被誤導好久,好比 HTML可能會逐步被XML所取代嗎?(來自《css權威指南》) - 賀師俊的回答 這樣的狀況……與之相似的還有:git
這些知識都須要你有必定的前端方面的經驗,看過比較多相關的博客和書,才能慢慢積累起來,因此也能區分靠譜的前端和不靠譜的前端。
6. 不依賴某一個特定的框架或者庫
好比很常見的「離開了jQuery就不會寫前端」星人……也不是說要作原生 JavaScript/CSS 和 DOM 的原教旨主義者,但高度依賴某個框架或者某個庫的話,一般意味着換了一個框架/庫你的學習成本會比不依賴特定輪子的人高,由於這一般是處於還不知道前端領域「什麼是什麼」的階段的表現。
事實上前端領域的這些輪子有一些都是其餘領域早就有,或者根本不須要的東西,其中不少的實現原理也不是那麼複雜,只不過是髒活累活。我的以爲對這些東西應該報以「不能知其然而不知其因此然」的態度,起碼大概清楚它們的實現是怎樣的套路,知道它們的優缺點,多接觸幾種,這樣在換一個替代品的時候很快就能上手。
由於前端的特殊性,在開發比較大的項目的時候使用庫和框架是必須的(好比遇到各類鼠標事件的前端兼容問題時,總不能全都就地寫 if-else 吧,總得封裝一下。遇到很是 data-driven 的項目,還用手動操做 DOM 的寫法很難維護吧,用個 MV* 框架真的不純是偷懶了),可是這些東西都是會迅速改朝換代的,死守着某個特定的庫或者框架,確實不太靠譜。不少公司喜歡問候選人「原生 API 寫個 Ajax 請求怎麼寫」這類問題,感受很大程度上也是在排除這類人……
7. 懂一點點設計
這裏說的不是切圖啊PS啊AI啊什麼的,而是大概懂基礎的視覺傳達/色彩構成/平面構成的知識。畢竟前端是和設計師聯繫最密切的程序員,雖然前端要作的事不只僅包括 UI/UX,可是 UI/UX 卻都主要依賴前端來實現。不少時候,設計師(特別是不會前端技術的設計師)給出的設計可能很難(在照顧兼容性的前提下)實現,這個時候不該該跟他硬拼讓他改設計,或者本身默默糾結怎麼用很 hack 很難維護的方法去實現,而是理解設計的意圖,而且跟設計師溝通,儘量在工程上容易實現容易維護的前提下實現設計的意圖,哪怕要修改一些具體的表現形態。
最恐怖的就是丟一張圖過來,讓你作到 pixel perfect,你也不問三七二十一直接開工,代碼寫得彆扭也不去溝通,遇到不兼容就打個哈哈矇混過關了……設計的目標是讓大衆都能更容易地使用,這樣作是與設計師存在的意義背道而馳的,我也遇到過一些設計師會主動來問前端怎樣的設計在瀏覽器裏容易實現,怎樣的設計比較彆扭,這樣他才能結合多方面的信息去作設計上的決定。若是你對設計不關心,不與他交流的話,實際上至關於剝奪了一些關心工程實現的設計師的知情權(通常正常的設計師看到本身的設計實現出來效果很差,也會小鬱悶的……)。我的以爲與設計師溝通的技巧,也是一個靠譜的前端應該具有的素養。
8. 懂一點點後端
(這個是我看了一下別人的答案補加的)。其實這個和第一點的目的相似,最重要的是別要作一個非得等隊友來才能開工的人。大廠(主要是阿里系)有很多在用 Node 作先後端分離一類的事,另外作前端的常常要在後端還沒寫完的時候本身去 mock 一下數據接口,若是你懂怎麼搭建簡單的服務器和 serve 數據給前端,那麼就能夠提升開發的效率。即便你只想專一前端,但前端有不少東西(好比 JS 跨域,WebSocket,SSE,WebGL 的素材獲取)都須要你懂得架設簡單的後端才能去實踐,這時候不懂後端一般就意味着你要放棄學習這些知識,或者只能紙上談兵。一個正常的前端確定是要對計算機網絡和 HTTP 等協議有必定了解的,有了這些知識去學簡單的後端實際上是很水到渠成的事情。
9. 在前端投入足夠的時間
意識到以上幾點還須要投入足夠多的時間才能看到成果,否則很容易出現「道理我都懂,但是OOO」的狀況,那最後也仍是靠譜不了的……若是不是真的對前端感興趣而且投入足夠多的時間,與其爲了「好找工做」而投前端,不如轉一個更合適的方向。阿里前端的困局與突圍 · Issue #141 · lifesinger/lifesinger.github.com · GitHub 和 圖靈社區 : 閱讀 : 企業軟件領域前端開發的困境 都能說明這個問題。
另外有些面試官喜歡問你一些很細節的 API (雖然我我的以爲這類問題很囧),這些東西不少時候都是靠的「無他,但手熟爾」,雖然有一些確實有點刁難人的味道,但有一些真的是若是你常常寫前端,重複多幾回就會記住的,若是記不住,只能說明你前端寫的不夠多。還有一些沒足夠實戰經驗的人不多遇到過的問題(好比 JS 跨域),也是須要在前端投入足夠多的時間,纔會接觸到(不管是紙上談兵,仍是項目裏遇到)。程序員
其實綜上所述,不靠譜的前端大概表現就是:計算機基礎很差(更糟糕的是編程基礎都不行,不過編程基礎和計算機基礎好很差跟績點高不高專業對不對口這些其實真的不必定有什麼關係……),對前端的認識還停留在十年前,對社區出現的新工具徹底不認識(沒認識全很正常,但徹底不瞭解就有點兩耳不聞窗外事一心只讀聖賢書的味道了……),不懂 Web 標準是怎麼回事或者不在乎標準,遇到兼容問題就複製粘貼搜到的代碼,對於一些在社區裏是常識的坑毫無心識地各類踩,「離開了jQuery/某庫/某框架就不會寫前端」星人,或者平時根本沒怎麼作過前端的東西,只是作作 Web 項目順帶寫前端,到應聘了臨門一腳跑過來……無論是平時學習仍是筆試面試,儘可能避免向這些特徵靠攏就能夠了。事實上大廠們招人不必定會要求這麼嚴格,並且大廠裏的團隊自己也未必個個靠譜,可是平時有在這些方面努力的話,起碼若是掛了會知道本身哪裏不足,或者究竟是他的問題仍是你的問題……github
以上大概就是我以爲拿到大廠(or前端比較靠譜的中小廠)前端offer須要的水平,其實我感受不必拿「實習」這個詞來限定本身,儘可能往高水平靠攏,才能作到是你來選公司,而不是公司來選你,這樣你才能結合興趣/家庭/我的規劃之類的因素拿到最適合本身的 offer。另外,我以爲面試這回事是這樣的,上面提到的這些特徵,每一條單獨拿出來,在不肯定面試官的狀況下,既不是拿到offer的充分條件,也不是拿到offer的必要條件,某一條不知足,也不是拿不到offer的充分或必要條件。大廠的面試官有不少種,有些設計出身喜歡問設計,有些後端出身喜歡問偏後端的東西,有些喜歡問你API細節,有些喜歡問你實現思路,有些喜歡看你學習能力,有些面試官原本就不是前端因此喜歡問你基礎題。若是你側重某一些方面,雖然無可厚非,可是運氣很差趕上指望不一樣的面試官,可能你就會獲得比較低的評價或者掛掉。肯定能拿 offer 的惟一途徑,就是面面俱到,這固然是不可能的要求,但大廠的種種因素配合起來每每就是在找這種不存在的人才,真的想拿 offer 的話,就只有硬着頭皮儘可能靠攏。面試
就像國內不少大廠裏比較著名的前端們文章/博客/知乎裏提到過的同樣,前端這塊水不是很深,但水很是很是寬,在考慮未來做爲一個前端如何發展如何應對天花板以前,先要腳踏實地把這些屬於前端的「本分」的東西搞好。事實上前面提到的這些東西我也沒有全都作到。做爲前端,我的以爲最重要的是要保持一顆開放、謙卑的心,不要抵觸新東西,永遠記得外面的世界還有不少東西本身不懂,要繼續學習。算法