面試被問項目經驗不用慌,按這個步驟回答絕對驚艷

大家好,我是若川。常有小伙伴問,面試時項目經驗怎么回答,經常會分享這篇文章給TA。本文經授權轉載。面試、學習源碼系列、年度總結、JS基礎系列


前言

本篇文章的作者是來自阿里淘系用戶增長前端團隊的“亦遜”,18年作為雙非本科生通過層層面試,校招進入阿里,今天以過來人的身份給大家分享在面試官問起項目經驗時,該如何回答。

說起面試

說起校招面試,大家總會感覺心慌慌。可能是不自信,可能是感覺好多沒準備好。沒關系,既然投遞了簡歷,又通過了篩選,就不要膽怯。首先要知道面試官都是抱著想把你招進來的想法的,只是想多了解你的具體情況。既然面試官愿意花時間和你聊,那么證明自己還是有實力的,有被看中的閃光點,那么有什么好心虛的呢,勇敢自信的面對就好了。

STAR法則

在寫簡歷和面試過程中,都需要描述工作經驗或個人經歷。優秀的面試者往往會用 STAR 法則來建立個人事件,讓面試官可以更好地通過你過去的經歷來判斷你的個人能力和潛質。

重新回顧一下 STAR 法則四要素:

  • Situation:事情是在什么情況下發生,基于一個怎樣的背景;

  • Task:你是如何明確你的任務的;

  • Action:針對這樣的情況分析,你采用了什么行動方式,具體做了哪些工作內容;

  • Result:結果怎樣,帶來了什么價值,在整個過程中你學到了什么,有什么新的體會。

往往大部分同學一上來就直接介紹做了什么以及實現的過程,條理也比較清晰,內容也頗具技術含量。但很多同學很容易忽略了 SituationResult 的部分也就是背景和結果。或者是在面試官進一步了解追問細節的時候容易驚慌失措。這些原因往往都是由于面試前對自己的經歷沒有將來龍去脈講清楚以及總結不夠全面和深入。

舉個例子:比如有的同學提到了在 XXX 項目過程中實現了一個 Webpack 插件 XXX,這個插件的功能是 XXXX 并且在 Github 上開源了。整個實現過程和思路都比較清晰,面試官聽的也是饒有興致,甚至回想起年輕時某個夜晚加班研究 Webpack 插件的青澀時光。

盡管這樣面試官也同樣希望了解當時項目的背景,是什么原因導致你要想到通過做 Webpack 插件來解決而不是通過其他工具,以及這個插件給項目帶來了怎樣的價值(是構建性能還是其他?)。背景和結果是面試官非常看重的一部分,必須拿出足夠的理由和價值來說服面試官,否則盡管你在這個項目投入了足夠的精力但最終并沒有為你的面試評價加分,這是十分可惜的。

這時候有的同學也會想:我的項目只是個人/學校的練手項目,對于項目結果我想不到非常有吸引眼球的價值。那么這個時候你不妨說一下你在項目中學到內容,比如在這個 Webpack 插件例子中,就可以說一下:

  • CompilerCompilation 以及它們的區別;

  • Webpack 是通過什么方式實現了插件之間的關系以及保證它們的有序性;

  • 開發插件時需要依據當前配置是否使用了某個其他的插件而做下一步決定,如何判斷 Webpack 當前使用了哪些插件;

  • 開發插件過程中借鑒了其他插件的思路,我對這個插件源碼的理解;

  • 等等等等。

以上的在實際開發 Webpack 插件過程中大部分都會遇到,這些問題如果你有記錄和總結也能作為 Result

面試場景還原

下面筆者場景還原一下項目經歷面試的過程,借助 STAR 法則來簡單介紹一下自己之前在做瀏覽器API兼容性檢查器的過程(通過口述將一件事情清楚描述在面試中也是非常重要的,以下均為口述方式,所以沒有圖)。

面試官:

我看到你在簡歷中提到實現了一個檢查瀏覽器 API 兼容性的工具,可以介紹一下么?

我:

Situation)好的,當時的情況實際上是一次線上的用戶的輿情反饋說頁面白屏/打不開,通過 JSError 日志的排查我發現最近出現大量類似 InterpObserver is not defined 的日志,同時和我最近一次發布的模塊曝光需求時間線是差不多吻合的,所以很快定位到了是當時使用瀏覽器 InterpObserver APIDOM 曝光時沒有考慮到兼容性的問題。

面試官:

那問題解決了么?

我:

是的,當時定位到問題后通過增加 polyfill 的方式很快解決了這個問題。(Task)后來我借著這個問題我自己也進行了思考,其實隨著操作系統和瀏覽器的更新,越來越多的 JS/瀏覽器的新特性開始被支持。為前端開發帶來便利的同時,也會帶來一些不可避免的兼容性問題。兼容代碼(polyfill)的忽視很容易造成不可預估的問題。但如果只依賴開發人員人工檢查兼容性問題并不是最優雅的解決方案,畢竟人工的難免會有遺漏。所以我想是不是能夠開發一個集成現有的兼容性檢查規則的工具將這個過程自動化。

面試官:

不錯,詳細介紹一下具體過程吧。

我:

Action)恩,這個想法誕生之后我就去了解了一下常用的前端兼容性檢查網站:CaniuseMDN 這兩個是我比較常用的。后來發現這兩個網站的檢查數據實際上在 Github 上都對應維護了一份靜態的檢查規則(caniuse-dbmdn-browser-compat-data),這些數據都是具有特定結構的 JSON 文件,盡管這兩者對瀏覽器支持程度描述的方式不太一樣,但已經能滿足得到兼容性數據的基本要求。接下來就是對代碼的分析檢查,將代碼和這些規則進行比較。這個過程需要對代碼進行語法邏輯分析,所以我想到了用 Babel 將代碼轉化成 AST 語法樹進行特定遍歷。同時我整理常規的 API 的調用方式我發現不外乎幾種,比如:NewExpression(構造表達式) 和 CallExpression(調用表達式)。當這些信息都掌握清楚后我覺得這件事情是具備技術可行性的。

面試官:

恩,這個實現過程有沒有遇到哪些問題?你是怎么解決的?

我:

Action)恩有的,剛剛提到 CaniuseMDN 維護的靜態 JSON 數據,我在實現過程中將這兩份數據進行了格式的統一,目的是將兩塊數據進行互補同時方便后續進行檢查比較。最終事實上得到了接近 9w 條數據,如果直接拿來對比是很影響效率的,所以當時利用 browserlist 可以配置指定目標檢查的瀏覽器范圍,比如 iOS Safari 9 以上,通過這一層去過濾在該范圍內沒有兼容性問題的數據,從而減少對比提升效率,也為開發者提供靈活的配置能力。第二個問題同樣也是檢查的性能優化,是通過 isReferencedIdentifier 去檢測標識符是否有被真正引用到。

最后是這個工具與如何接入發布流程的管控,由于公司的發布流程采用的是云構建的方式,所以我在發布之前先經過這個工具的校驗,并且將檢查的結果打通消息通知和郵件系統,(Result)幫助其他人在發布前得到項目代碼的瀏覽器 API 兼容性檢查報告,避免了這類問題的再次出現。這次的經驗幫助我加深了對 BabelAST 的理解。

面試官:

那你了解 Babel parse AST 的過程么?

我:

在解析成 AST 過程中有兩個階段:詞法分析和語法分析。

詞法分析階段:字符串形式的代碼轉換為令牌(tokens)流,令牌類似于AST中的節點;語法分析階段:把一個令牌流轉化為 AST 的形式,同時把令牌中的信息轉化為 AST 的表述結構。

面試官:

你項目中說的 AST 遍歷的過程能再詳細說說么?

我:

Babel 在處理一個節點時,是以訪問者的形式獲取節點信息并進行相關操作。這種方式是通過 Visitor 對象來完成的,Visitor 對象中定義了對于各種節點的訪問函數,這樣就可以針對不同的節點做出不同的處理。比如我在項目過程中主要針對 NewExpressionCallExpression 進行處理,通過 path 參數對節點以及節點的父子節點以及進行判斷篩選,balabala

總結一下

面試官的「套路」

面試時所問的問題基本分為兩種:具象的問題和開放性的問題。

具象的問題基本都會參考工作經驗按照 STAR 法則來進行,主要是了解基本的素養,技術深度和潛力。

開放性的問題基本是考察思維發散能力,考察在某個領域的深度和廣度,基本上會結合技術問題來問,或者是結合工作內容來問。

比如:實現某種技術的 n 種方法?某種技術的實現原理?和什么什么相比有哪些優缺點?你對這項技術的思考是什么?

面試者的「應對」

  1. 就實際情況做回答,提前準備的時候多發散,多思考,多總結。這一塊是可以自己準備的加分項。

  2. 發散性問題主要是看自己平時積累。首先基礎知識要牢固,同時也要了解最新技術動態。面對這類問題切記也不能答非所問而跑題了。


最近組建了一個江西人的前端交流群,如果你是江西人可以加我微信?ruochuan12?拉你進群。


一個愿景是幫助5年內前端人成長的公眾號

可加我個人微信?ruochuan12,長期交流學習

推薦閱讀

我在阿里招前端,該怎么幫你(可進面試群)
畢業年限不長的前端焦慮和突破方法

前端搶飯碗系列之Vue項目如何做單元測試
前端使用puppeteer 爬蟲生成《React.js 小書》PDF并合并

·················?若川簡介?·················

你好,我是若川,畢業于江西高校。現在是一名前端開發“工程師”。寫有《學習源碼整體架構系列》多篇,在知乎、掘金收獲超百萬閱讀。

從2014年起,每年都會寫一篇年度總結,已經寫了7篇,點擊查看年度總結。

同時,活躍在知乎@若川,掘金@若川。致力于分享前端開發經驗,愿景:幫助5年內前端人走向前列。

點擊方卡片關注我、加個星標

今日話題

略。歡迎分享、收藏、點贊、在看我的公眾號文章~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275735.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275735.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275735.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用概念模型 和心智模型的_為什么要使用模型?

使用概念模型 和心智模型的In a former life, I studied critical feminist theory. This included the field of Semiotics — the study of signs and the production of meaning, as well as Deconstruction —the unpacking of meaning to question assumptions.在過去的生…

長效密鑰與臨時密鑰JAVA判斷_MSBuild無法使用臨時密鑰簽署ClickOnce清單(錯誤MSB3326和MSB3321)...

我正在嘗試在Windows Server計算機上構建ClickOnce Windows Forms項目(.NET 3.5 / Visual Studio 2010) . (為了使用Hudson CI自動化構建過程 . )為了對ClickOnce清單進行簽名,我在Visual Studio中創建了一個臨時密鑰 temp.pfx . 我可以在我的工作站上從Visual Stud…

URL some

** 路由系統:URL配置(URLconf)就像Django所支撐網站的目錄. 本質是URL與該URL要調用的函數的映射表 基本格式 : from django.conf.urls import url urlpatterns [url(正則表達式,views視圖,參數,別名) ] 參數 -- 傳給函數視圖的默認參數 (字典形式) 別名 -- 一個可選的name參…

什么?在 VSCode 里也能用 Postman了?

大家好,我是若川。VSCode中有很多好用的插件,今天推薦 Postcode。面試、學習源碼系列、年度總結、JS基礎系列以前一直在用postman做API測試,如果你同時在使用vscode開發時,每次切出去可能比較煩,其實就是太懶了。。。作…

根據窗口名稱查找關鍵字彈性域用到的表,列等信息

/*根據窗口名稱查找關鍵字彈性域用到的表,列等信息*/--selectc.id_flex_name, a.id_flex_structure_name, b.form_left_prompt, c.application_table_name, b.application_column_name, b.flex_value_set_id fromfnd_id_flex_struct…

英語 動畫 教學 字母_字母形式在閱讀教學中的作用

英語 動畫 教學 字母Note: this essay may also be found on Design Observer.注意:這篇文章也可以在 Design Observer 上找到 。 My first-grade reading tutor gave the best stickers. Puffy, smelly, sparkly — she even had a few that were fuzzy. At that …

java中自定義表單和流程_讓馳騁工作流程引擎 ccbpm使用自定義表單來實現自己的業務邏輯....

1.1.1.1: SDK表單概要說明:我們把流程引擎與表單引擎統稱為ccbpm,但是有一些用戶并不想使用表單引擎,而是用自己的表單,僅僅使用流程引擎,這樣的方式就要采用ccbpm的sdk表單開發模式。關于ccbpm的SDK:ccbpm的sdk就是cc…

乘風破浪的前端小姐姐,是如何一步步走向成功的?

大家好,我是若川。名校畢業的被刪大佬也經歷了社會的毒打,但她沒有放棄。面試、學習源碼系列、年度總結、JS基礎系列王貝珊,騰訊高級工程師,騰訊 AlloyTeam 成員,現騰訊文檔網絡層技術負責人。畢業于中山大學。工作 6 …

【譯】為什么我更喜歡對象而不是switch語句

原文自工程師Enmanuel Durn博客,傳送門 最近(或者不是最近,這完全取決于您什么時候閱讀這邊文章),我正在跟我的團隊伙伴討論如何去處理這種需要根據不同的值去處理不同的情況的方法,通常對于這種情況下&…

摩托羅拉周二將正式分拆為兩經營實體

據華爾街中文網消息稱,摩托羅拉公司周二將正式分拆為兩個經營實體——摩托羅拉移動控股(MMI)和摩托羅拉解決方案公司(MSI)。前者由主要面向消費者的智能手機和機機頂盒業務組成,后者則專注于公共安全無線電和手持掃描儀業務。 上述兩家公司的股票均已于…

如何創建和諧的色彩系統

擁有和諧的色彩系統的好處 (The benefits of having a harmonious color system) Consistent branding express across all platform 在所有平臺上表達一致的品牌 The consistent interface creates a better user experience 一致的界面創建了更好的用戶體驗 More productive …

java restful接口測試_詳解SpringBoot restful api的單元測試

現在我們來利用Spring Boot來構建一個RestFul API,具體如下:1.添加Springboot測試注解RunWith(SpringRunner.class)SpringBootTestpublic class UserControllerTest {}2.偽造mvc環境// 注入Spring 工廠Autowiredprivate WebApplicationContext wac;//偽造…

老姚淺談:怎么學JavaScript?

大家好,我是若川。當初我就是看本文深受啟發,開始看書讀源碼。所以現在聯系了作者老姚 授權轉載分享給大家。我按照文中的做法敲完了《JavaScript語言精粹 修訂版》,在2017年7月23日寫出了我的第一篇文章《讀書筆記》。看完了《JavaScript面向…

JavaScript 如何使用閉包

閉包基本上是內部函數可以訪問其范圍之外的變量&#xff0c;可用于實現隱私和創建函數工廠 定義一個數組&#xff0c;循環遍歷這個數組并在延遲3秒后打印每個元素的索引 先看一個不正確的寫法&#xff1a; const arr [10, 12, 15, 21]; for (var i 0; i < arr.length; i) …

ai中導入sketch_在Sketch中營造深度感

ai中導入sketchCreating a user interface with depth can seem daunting at first, but it only requires you to understand one fundamental rule — emulating a light source.首先&#xff0c;創建具有深度的用戶界面似乎很艱巨&#xff0c;但這僅要求您了解一個基本規則-…

java byte轉bigdecimal_Java BigDecimal byteValueExact()用法及代碼示例

java.math.BigDecimal.byteValueExact()是一個內置函數&#xff0c;它將BigDecimal轉換為字節并檢查丟失的信息。任何大于127或小于-128的BigDecimal值都將生成異常&#xff0c;因為它不適合字節范圍。用法:public byte byteValueExact()參數&#xff1a;該方法不接受任何參數。…

Python3+PyCharm+selenium3 環境搭建

安裝Python3請去python官網下載安裝包&#xff0c;我用的是Python3.6安裝PyCharm&#xff0c;這個也是去官網自己下吧&#xff0c;偶的是2018.2.3&#xff08;CommunityEdition&#xff09;接下來安裝seleniumPyCharm中Tremianl安裝完成后&#xff0c;在python Console中輸入沒…

2021 年最值得了解的 Node.js 工具

大家好&#xff0c;我是若川。今天分享一篇用得上的 node 庫 鏈接地址&#xff1a;https://github.com/huaize2020/awesome-nodejs?前言&#xff1a;文章的靈感來源于&#xff0c;社群中某大佬分享一個自己耗時數月維護的github項目 awesome-nodejs 。或許你跟我一樣會有一個疑…

DOMContentLoaded與interactive

ie中inline script執行時竟然第一次進入頁面,doc.readyState是interactive.刷新則是loadinginteractive也就算了,竟然沒有把dom樹構建好,也沒有body...而在inline的腳本里跑計時器什么的,去doc.body.doScroll(left);則有可能碰到interactive時dom樹構建好的情況.而其它瀏覽器in…

figma下載_何時在Figma中使用組或框架

figma下載Groups and Frames have very different uses in Figma, but it’s difficult at first to tell why both of them exist. I can assure you that they complement each other, but first, you need to understand the nuances of each. I’ll show you how to make t…