13 lines
36 KiB
HTML
13 lines
36 KiB
HTML
<!doctype html><html lang="zh" itemscope itemtype="https://schema.org/Article"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>前端工程師面試問題集 ★ Front-end Developer Interview Questions</title><meta name="description" content="A list of helpful front-end related questions you can use to interview potential candidates, test yourself or completely ignore."><meta name="keywords" content="front-end, interview questions, css questions, js questions, html questions, performance questions, interview test"><meta name="author" content="Front-end Developer Interview Questions"><meta itemprop="author" content="Front-end Developer Interview Questions"><meta itemprop="name" content="前端工程師面試問題集 ★ Front-end Developer Interview Questions"><meta itemprop="description" content="A list of helpful front-end related questions you can use to interview potential candidates, test yourself or completely ignore."><meta itemprop="image" content="https://h5bp.org/Front-end-Developer-Interview-Questions//assets/images/og-image.png"><meta property="og:title" content="前端工程師面試問題集 ★ Front-end Developer Interview Questions"><meta property="og:description" content="A list of helpful front-end related questions you can use to interview potential candidates, test yourself or completely ignore."><meta property="og:url" content="https://h5bp.org/Front-end-Developer-Interview-Questions//translations/chinese-traditional/"><meta property="og:site_name" content="Front-end Developer Interview Questions"><meta property="og:image" content="https://h5bp.org/Front-end-Developer-Interview-Questions//assets/images/og-image.png"><meta property="og:type" content="website"><meta property="og:locale" content="en_US"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="前端工程師面試問題集 ★ Front-end Developer Interview Questions"><meta name="twitter:description" content="A list of helpful front-end related questions you can use to interview potential candidates, test yourself or completely ignore."><meta name="twitter:site" content="@h5bp"><meta name="twitter:image" content="https://h5bp.org/Front-end-Developer-Interview-Questions//assets/images/og-image.png"><meta name="twitter:creator" content="@h5bp"><link type="image/png" rel="apple-touch-icon" href="https://h5bp.org/Front-end-Developer-Interview-Questions//assets/images/apple-touch-icon.png"><link type="image/png" sizes="32x32" rel="icon" href="https://h5bp.org/Front-end-Developer-Interview-Questions//assets/images/favicon-32x32.png"><link type="image/png" sizes="16x16" rel="icon" href="https://h5bp.org/Front-end-Developer-Interview-Questions//assets/images/favicon-32x32.png"><link type="image/png" color="#181818" rel="mask-icon" href="https://h5bp.org/Front-end-Developer-Interview-Questions//assets/images/favicon-96x96.png"><meta name="mobile-web-app-capable" content="yes"><meta name="robots" content="index,follow"><script>console.log(page.lang)</script><style>code[class*=language-],pre[class*=language-]{color:#c5c8c6;text-shadow:0 1px rgba(0,0,0,.3);font-family:Inconsolata,Monaco,Consolas,'Courier New',Courier,monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#370b44}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#7c7c7c}.token.punctuation{color:#c5c8c6}.namespace{opacity:.7}.token.keyword,.token.property,.token.tag{color:#96cbfe}.token.class-name{color:#ffffb6;text-decoration:underline}.token.boolean,.token.constant{color:#9c9}.token.deleted,.token.symbol{color:#f92672}.token.number{color:#ff73fd}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#a8ff60}.token.variable{color:#c6c5fe}.token.operator{color:#ededed}.token.entity{color:#ffffb6}.token.url{color:#96cbfe}.language-css .token.string,.style .token.string{color:#87c38a}.token.atrule,.token.attr-value{color:#f9ee98}.token.function{color:#dad085}.token.regex{color:#e9c062}.token.important{color:#fd971f}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}:root{--font-family-heading:sans-serif;--font-family-body:Georgia,serif;--font-family-code:Menlo,Monaco,'Courier New',monospace;--color-primary:#835EFF;--color-secondary:#FF008D;--color-safe:#8338EC;--color-gradient:linear-gradient(to right, var(--color-primary), var(--color-secondary));--color-highlight:var(--color-primary);--color-gray-opacity:rgba(39,39,39,0.04);--color-heading:#23231A;--color-text:#23231A;--background-default:#F9F9F9;--border-radius-default:5px;--box-shadow-default:0 2rem 4rem rgba(0,0,0,.15);--transition-duration:0.27s}body.rtl{--font-family-body:Arial,Helvetica,sans-serif}*{margin:0;padding:0;box-sizing:border-box;outline-color:var(--color-primary)}::selection{background:var(--color-primary);color:var(--background-default)}::-moz-selection{background:var(--color-primary);color:var(--background-default)}.nav{padding:1rem 0;position:relative;font-family:var(--font-family-heading)}.nav li{word-wrap:none;white-space:nowrap}.navigation{list-style:none;display:flex;flex-wrap:wrap;font-size:1rem}.navigation-questions-label{margin-right:auto}@media (min-width:60em){.navigation-questions-label{margin-right:0}}.navigation-toggle{display:inline-block;appearance:none;border:0;font-size:1rem;font-weight:600;cursor:pointer;background:0 0}.navigation-toggle::after{content:'\25BE';padding-left:.3rem;display:inline-block;font-size:1.2rem;font-weight:700;color:var(--color-primary);transform-origin:center}.navigation-toggle:active::after,.navigation-toggle:focus::after,.navigation-toggle:hover::after{color:var(--color-secondary)}.navigation.open .navigation-toggle::after{transform:scaleY(-1) translateY(-.25em)}@media (min-width:60em){.navigation-toggle{color:var(--color-text);pointer-events:none;cursor:default}.navigation-toggle::after{display:none}}.navigation-questions-list{padding:.5rem 1rem;display:flex;flex-direction:column;position:absolute;top:calc(100% - 1rem);left:0;z-index:1;opacity:0;transform:scale(.5,0);transform-origin:center top;transition:opacity .1s,transform .2s ease-out;background-color:#fff;box-shadow:0 0 0 1px var(--color-secondary),0 2px 4px -1px var(--color-text)}.navigation.open .navigation-questions-list{opacity:1;transform:none}.navigation.no-motion .navigation-questions-list{transition:none}@media (min-width:60em){.navigation-questions-list{padding:0;flex-direction:row;position:static;opacity:1;transform:none;transition:none;background-color:transparent;box-shadow:none}.navigation-questions-list li{margin:0}}.navigation-questions-anchor{visibility:hidden}.navigation.open .navigation-questions-anchor{visibility:visible}@media (min-width:60em){.navigation-questions-anchor{visibility:visible}}.navigation-item-emoji{width:100%;font-size:1rem;line-height:1rem;padding-bottom:1.5rem;margin-bottom:1.5rem;vertical-align:top;align-content:flex-start;border-bottom:1px solid #efefef}.navigation-item-home{border-bottom:none;padding-bottom:0;font-weight:600}@media (min-width:60em){.navigation-item-emoji{width:50%;margin-bottom:2rem;border-bottom:1px solid #efefef}}.navigation-item-emoji em{font-style:normal;margin-right:.5rem}.navigation-item-translations{text-align:left}@media (min-width:60em){.navigation-item-translations{text-align:right}}.navigation-item-home em{color:#835eff}.navigation-item-emoji a{text-decoration:none;display:inline-block;vertical-align:middle}@media (min-width:60em){.navigation-item:not(:last-of-type){margin-right:.8rem}}.navigation-anchor[rel~=external]::after{content:' ➚';color:var(--color-highlight)}.navigation-anchor.current{border-bottom:2px solid var(--color-highlight);padding:0 0 5px 0}.topbar{width:100%;height:.18rem;background:var(--color-gradient)}.skip-link{position:absolute;top:0;left:0;padding:.5rem 1rem;background-color:var(--color-primary);color:#fff;text-decoration:none;transform:translateY(-100%)}.skip-link:focus{transform:none}.header{margin-bottom:2rem}.header-big-title{font-size:2.3rem;line-height:1.06;margin:1.4rem 0 .7rem;color:var(--color-primary);word-break:break-word}.rtl .header-big-title{text-align:right}@media (min-width:30em){.header-big-title{margin:1.4rem 0 .7rem;font-size:4.6rem}}@media (min-width:60em){.header-big-title{margin:2.1rem 0 .7rem;font-size:5.4rem}}@supports (mix-blend-mode:lighten){.header-big-title{display:inline-block;position:relative;color:#000;background:#fff;mix-blend-mode:multiply}.header-big-title::before{content:'';display:block;position:absolute;top:0;right:0;bottom:0;left:0;background-image:url('https://h5bp.github.io/Front-end-Developer-Interview-Questions/assets/images/gradient.svg');background-size:cover;pointer-events:none}.header-big-title::before{mix-blend-mode:screen}}.header-heading{font-size:2.3rem;text-transform:uppercase}.header-big-description{font-size:1.2rem;line-height:1.4;padding:1rem 0}@media (min-width:30em){.header-big-description{font-size:1.5rem}}@media (min-width:60em){.header-big-description{font-size:1.8rem}}.header-description{padding-top:1rem}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:var(--font-family-body);font-weight:400;font-size:1.2rem;line-height:2;color:var(--color-text)}section+section{padding-top:2rem}h1,h2,h3,h4,h5,h6{font-family:var(--font-family-heading);color:var(--color-heading);font-style:normal;line-height:1.2;font-weight:600}section+section{padding-top:2rem}a{color:inherit;text-decoration:none;color:var(--color-secondary);transition:color ease-out var(--transition-duration)}a.current,a:focus:not(.skip-link),a:hover:not(.skip-link){color:var(--color-primary)}a:not(.navigation-anchor)[rel~=external]:after{content:' ➚'}ul:not(.navigation):not(.inline-list){list-style:none}ul:not(.navigation):not(.inline-list) li::before{content:"\25A0";color:var(--color-primary);font-weight:700;display:inline-block;width:1em;margin-left:-1em}.rtl ul:not(.navigation):not(.inline-list) li::before{margin-right:-1em;margin-left:initial}li{margin-bottom:.6rem}b,strong{font-weight:600}time{display:inline-block;color:var(--color-gray-70)}[tabindex='-1']{outline:0}img,svg{vertical-align:middle}img{display:block;max-width:100%;border-radius:var(--border-radius-default)}code{font-family:var(--font-family-code);color:var(--color-code);font-style:normal;font-size:1rem}blockquote:not([class]){padding-left:1rem;margin-left:-1rem;border-left:2px solid var(--color-primary);color:var(--color-gray-70);font-style:italic}code[class*=language-],pre[class*=language-]{font-size:.9rem;font-style:normal}p+pre[class*=language-]{margin-bottom:1.8rem}mark{color:var(--color-highlight);background-color:transparent}dt{font-weight:700}dd+dt{padding-top:.5rem}abbr[title],acronym[title]{background:var(--color-gray-opacity);border:1px solid var(--color-gray-opacity);cursor:help}.container{max-width:66rem;padding:1.5rem 2rem 2rem;margin-right:auto;margin-left:auto}@media (min-width:30rem){.container{padding:3rem 4rem 4rem}}.content li:not(:last-of-type){margin-bottom:1.2rem}.content h2{max-width:33rem}.content>:not(:last-child){margin-bottom:2rem}.content :not(hr)+h2,.content :not(hr)+h3{padding-top:1rem}.content ol:not(.inline-list),.content ul:not(.inline-list){padding-left:1.2rem}.content-simple li:not(:last-of-type){margin-bottom:.5rem}.content-edit{text-align:right;margin-top:2rem}.inline-list{padding:0;list-style:none;display:flex;flex-wrap:wrap}.inline-list li{padding:0 5px;display:inline-block;vertical-align:middle;text-align:center}.inline-list li::before{content:'';margin-left:0}.inline-list li img{display:block;margin:auto;margin-bottom:.6rem}.inline-list li a{display:inline-block;vertical-align:middle;margin:0 .15rem}.inline-list-contributors li a,.inline-list-original li a{font-size:1rem}.avatar{max-width:12rem}hr{border:none;bacground:none;border-bottom:1px solid #efefef}.footer{padding-top:3rem}.footer-text{font-size:.8rem}</style></head><body class=""><div class="topbar"></div><div class="container"><a class="skip-link" href="#main-content">Skip to main content</a><nav class="nav"><ul class="navigation" id="navigation"><li class="navigation-item-emoji navigation-item-home"><a class="navigation-anchor" href="/Front-end-Developer-Interview-Questions/" title="Home"><em>★</em><span>Front-end Developer Interview Questions</span></a></li><li class="navigation-item-emoji navigation-item-translations"><a class="navigation-anchor" href="/Front-end-Developer-Interview-Questions/translations" title="Translations"><em>🌐</em><span>Translations</span></a></li><li class="navigation-item navigation-questions-label"><button class="navigation-toggle" id="navigation-toggle">Questions:</button></li><li class="navigation-item navigation-questions"><ul class="navigation navigation-questions-list"><li class="navigation-item"><a class="navigation-anchor navigation-questions-anchor" href="/Front-end-Developer-Interview-Questions/questions/general-questions/" title="General Questions">General</a></li><li class="navigation-item"><a class="navigation-anchor navigation-questions-anchor" href="/Front-end-Developer-Interview-Questions/questions/html-questions/" title="HTML Questions">HTML</a></li><li class="navigation-item"><a class="navigation-anchor navigation-questions-anchor" href="/Front-end-Developer-Interview-Questions/questions/css-questions/" title="CSS Questions">CSS</a></li><li class="navigation-item"><a class="navigation-anchor navigation-questions-anchor" href="/Front-end-Developer-Interview-Questions/questions/javascript-questions/" title="JavaScript Questions">JavaScript</a></li><li class="navigation-item"><a rel="external noreferrer noopener" target="_blank" class="navigation-anchor navigation-questions-anchor" href="https://scottaohara.github.io/accessibility_interview_questions/" title="Accessibility Questions (external link)">A11y</a></li><li class="navigation-item"><a class="navigation-anchor navigation-questions-anchor" href="/Front-end-Developer-Interview-Questions/questions/testing-questions/" title="Testing Questions">Testing</a></li><li class="navigation-item"><a class="navigation-anchor navigation-questions-anchor" href="/Front-end-Developer-Interview-Questions/questions/performance-questions/" title="Performance Questions">Performance</a></li><li class="navigation-item"><a class="navigation-anchor navigation-questions-anchor" href="/Front-end-Developer-Interview-Questions/questions/network-questions/" title="Network Questions">Network</a></li><li class="navigation-item"><a class="navigation-anchor navigation-questions-anchor" href="/Front-end-Developer-Interview-Questions/questions/coding-questions/" title="Coding Questions">Coding</a></li><li class="navigation-item"><a class="navigation-anchor navigation-questions-anchor" href="/Front-end-Developer-Interview-Questions/questions/fun-questions/" title="Fun Questions">Fun</a></li></ul></li></ul></nav><main id="main-content" tabindex="-1"><header class="header"><h1 class="header-big-title">前端工程師面試問題集</h1></header><div class="content"><h1>前端工程師面試問題集</h1><p>譯注:此翻譯版,主要給不能流利的讀英文的人看,相關專有名詞還是保留原文,翻譯不好地方請協助 Pull request。</p><p>此文件包含了一些前端開發的面試問題,來審查一個有潛力的面試者。這並不是建議你對同一個面試者問上所有的問 (那會花費好幾小時)。從列表中挑幾個題目,應該就夠幫助你審查面試者是否擁有你需要的技能。</p><p><strong>注意:</strong> 請記住一點,很多問題都是隨情況而變化,能引發很多有趣的討論,比直接的標準答案更能讓你瞭解此人的能力。</p><h2 id="%E7%9B%AE%E9%8C%84" tabindex="-1"><a class="header-anchor" href="#%E7%9B%AE%E9%8C%84"></a> <a name="toc">目錄</a></h2><ol><li><a href="#general-questions">常見問題</a></li><li><a href="#html-questions">HTML 問題</a></li><li><a href="#css-questions">CSS 問題</a></li><li><a href="#js-questions">JS 問題</a></li><li><a href="#testing-questions">測試問題</a></li><li><a href="#performance-questions">效能問題</a></li><li><a href="#network-questions">網路問題</a></li><li><a href="#coding-questions">程式碼問題</a></li><li><a href="#fun-questions">有趣問題</a></li></ol><h2 id="%E5%8F%83%E8%88%87%E8%B2%A2%E7%8D%BB" tabindex="-1"><a class="header-anchor" href="#%E5%8F%83%E8%88%87%E8%B2%A2%E7%8D%BB"></a> 參與貢獻</h2><ol><li><a href="#contributors">貢獻作者群</a></li><li><a href="https://github.com/h5bp/Front-end-Developer-Interview-Questions/blob/master/CONTRIBUTING.md">如何貢獻</a></li><li><a href="https://github.com/h5bp/Front-end-Developer-Interview-Questions/blob/master/LICENSE.md">版權宣告</a></li></ol><h4><a name="general-questions">常見問題:</a></h4><ul><li>你昨天或這週學習了什麼?</li><li>寫程式的哪部份最讓你感到很興奮或是有興趣?</li><li>最近有無遇過不容易的技術性問題,又如何解決?</li><li>當你開發一個新網站或維護一個網站時,你用過哪些技術來增進效能?</li><li>你能描述最近使用過的一些 SEO 最佳實作方法或技術嗎?</li><li>你能解釋有關前端安全性的任何常見技術或最近解決的問題嗎?</li><li>你個人在最近的專案採取過什麼行動來提升代碼的可維護性?</li><li>說說你喜好的開發環境 (作業系統, 編輯器或 IDE, 瀏覽器, 開發工具 … 之類)。</li><li>你最熟悉哪一套版本控制系統?</li><li>你可以描述你在開發一個網站時的工作流程嗎?</li><li>如果有 5 種不同的樣式表 (stylesheets),該如何整併到網站?</li><li>你可以描述漸進增強 (progressive enhancement) 和優美退化 (graceful degradation) 間的差異嗎?</li><li>你怎麼優化一個網站的靜態檔案 (assets) 和資源 (resources)?</li><li>瀏覽器同時間可以從同一個網域下載多少資源?<ul><li>有什麼例外嗎?</li></ul></li><li>說出三種能加快網頁讀取速度的方法 (感覺上的速度或是真正的讀取時間)。</li><li>如果你加入了一個專案,但是他們的程式碼用 tabs,但是你習慣用 spaces (空白鍵),你會怎麼做?</li><li>寫一個簡易的投影片頁面。</li><li>你用什麼工具來測試你的程式碼效能?</li><li>如果今年你能精通一項技術,那會是什麼?</li><li>描述標準和製定標準機構的重要性?</li><li>什麼是 Flash of Unstyled Content? 你怎麼避免 FOUC?</li><li>解釋什麼是 ARIA 與 screenreaders,它們是怎麼樣讓網站使用更無障礙?</li><li>解釋 CSS 動畫與 JavaScript 動畫之間的憂與劣。</li><li>CORS 是什麼,它解決了什麼問題?</li><li>你要如何處理與老闆或合作者之間的意見分歧?</li><li>你使用哪些資源來學習最新的前端開發和設計?</li><li>你覺得一名好的前端開發者需要具備哪些技能?</li><li>你想要看到自己有怎樣的表現?</li><li>解釋 cookies、session storage、local storage 之間的差異。</li></ul><h4><a name="html-questions">HTML 問題:</a></h4><ul><li><code>doctype</code> 做什麼用的?</li><li>standards mode 和 quirks mode 有什麼不同?</li><li>使用 XHTML 有什麼限制??</li><li>如果網頁使用 <code>application/xhtml+xml</code> 會有問題嗎?</li><li>你怎麼做一個需要支持多國語言的網頁?</li><li>當開發和設計一個多國語言網站時,有什麼需要小心的?</li><li><code>data-</code> 屬性的好處在哪?</li><li>考慮 HTML5 作為一個開放式的網站平台,組成 HTML5 的技術有哪些?</li><li>請描述 <code>cookies</code>, <code>sessionStorage</code> 和 <code>localStorage</code> 的不同?</li><li>描述下列之間的不同 <code><script></code>, <code><script async></code> & <code><script defer></code>。</li><li>為什麼把 CSS <code><link></code> 放在 <code><head></head></code> 之間,與將 JS <code><script></code> 放在 <code></body></code> 之前是個較好的主意?有什麼例外情形嗎?</li><li>什麼是漸進式呈現?</li><li>有用過 HTML 樣板語言(template languages)嗎?</li></ul><h4><a name="css-questions">CSS 問題:</a></h4><ul><li>CSS 的 class 和 ID 兩者有何差異?</li><li>描述 “resetting” 和 “normalizing” 的差異性?你會選擇哪一種,為什麼選擇它?</li><li>描述 Floats 並解釋如何運作。</li><li>描述 z-index 並且描述堆疊內容 (stacking context) 如何形成。</li><li>解釋 BFC(Block Formatting Context) 是什麼、如何運作的。</li><li>有哪些不同的 clearing 技術?哪個適用在哪種內容上?</li><li>描述 CSS sprites, 你如何實作在網頁或網站上?</li><li>你最喜愛的圖片取代技術是什麼?你什麼時候會用到?</li><li>針對各瀏覽器制定的樣式表(browser-specific styling),你的做法是?</li><li>你怎麼讓你的網頁支援有功能限制的瀏覽器?<ul><li>你會使用什麼樣的技術/流程 ?</li></ul></li><li>有什麼方法來隱藏網頁的內容? (只顯示在 screen readers)?</li><li>你使用過 grid system 嗎?如果有的話?你較推薦哪個?</li><li>你曾經實作 media queries 或是 mobile specific (手機規格的) layouts/CSS?</li><li>你熟悉任何有關 SVG 嗎?</li><li>你如何優化你的網頁以利於列印?</li><li>在寫高效的 CSS 時,有什麼要注意的?</li><li>使用 CSS preprocessors 的優點和缺點是什麼? (Sass, Compass, Stylus, LESS)<ul><li>描述你使用過的喜歡和不喜歡的 CSS preprocessors。</li></ul></li><li>你如何使用非標準字體來實作網頁設計?</li><li>解釋瀏覽器如何按照 CSS selector 找到對應的 element。</li><li>解釋你所認知的 box model,以及你如何在 CSS 告訴瀏覽器使用不同 box model 來呈現圖層?</li><li>請解釋 <code>* { box-sizing: border-box; }</code>?並且說明使用它的好處?</li><li>請列出您記憶中 display 屬性的全部值。</li><li>請說明 inline 和 inline-block 的差異性?</li><li>請說明 relative、fixed、absolute 和 static 元件差異性?</li><li>‘C’ 在 CSS 中代表層疊。樣式的優先級(舉出範例)?如何利用這項功能?</li><li>你目前有使用哪一套 CSS Framework 在開發環境或產品線上?<ul><li>如果有,請問是哪一套,並且描述如果改善或提昇 CSS Framework?</li></ul></li><li>請問你有使用過 CSS Flexbox 或 Grid specs?</li><li>如何區分 responsive design 與 adaptive design 有何不同?</li><li>你曾經使用過 retina graphics?如果有,是在什麼時機以及用了什麼技術?</li><li>為什麼會用 <code>translate()</code> 代替 <em>aboslute positioning</em>,或者用 <em>absolute positioning</em> 代替 <code>translate</code>?為什麼要這樣?</li></ul><h4><a name="js-questions">JS 規格問題集:</a></h4><ul><li>描述 event delegation。</li><li>描述 <code>this</code> 如何在 JavaScript 中運作。</li><li>描述 prototypal inheritance 如何運作?</li><li>你如何測試你的 JavaScript?</li><li>AMD vs. CommonJS?</li><li>解釋下列程式碼為什麼不是IIFE: <code>function foo(){ }();</code>. (Immediately Invoked Function Expression,立即函式)<ul><li>需要修改那裡使它成為IIFE?</li></ul></li><li><code>null</code>、<code>undefined</code>和 <code>undeclared</code>變數之間有什麼差異?<ul><li>你如何檢查?</li></ul></li><li>什麼是 closure, 如何/為什麼使用?</li><li>anonymous functions 典型的使用時機?</li><li>你如何架構你的程式碼? (module pattern, classical inheritance?)</li><li>host objects 和 native objects 有何不同?</li><li><code>function Person(){}</code>、<code>var person = Person()</code>和<code>var person = new Person()</code>之間有何不同?</li><li><code>.call</code> 和 <code>.apply</code>有何不同?</li><li>描述 <code>Function.prototype.bind</code>?</li><li>你什麼時候優化你的程式?</li><li>你什麼情況會使用 <code>document.write()</code>?<ul><li>多數的廣告產生仍然使用 <code>document.write()</code> 雖然這樣用會令人皺眉</li></ul></li><li>feature detection, feature inference, 和使用 UA string 有什麼不同?</li><li>盡可能的詳述描述 AJAX。</li><li>描述 JSONP 如何運作 (且為何它不是真正的 AJAX)。</li><li>你是用過 JavaScript templating (樣板) ?<ul><li>如果有的話,你有用過哪些 libraries? (Mustache.js, Handlebars … 等)</li></ul></li><li>描述 “hoisting”</li><li>描述 event bubbling.</li><li>“attribute” 和 “property” 的不同?</li><li>為什麼擴展 JavaScript 內建的 objects 不是個好方法?</li><li>document load event 和 document ready event 有什麼不同?</li><li><code>==</code> 和 <code>===</code> 有什麼不同?</li><li>描述 JavaScript 的 same-origin policy (同源策略)</li><li>實作如下程式:</li></ul><pre class="language-javascript"><code class="language-javascript"><span class="token function">duplicate</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1,2,3,4,5,1,2,3,4,5]</span></code></pre><ul><li>Ternary expression 怎麼來的, “Ternary” 的意思是什麼?</li><li>什麼是 <code>"use strict";</code>? 使用他的優點和缺點是什麼?</li><li>建個數到 <code>100</code> 的迴圈,當數字是 <code>3</code> 的倍數時輸出 <strong>“fizz”</strong>,當數字是 <code>5</code> 的倍數時輸出 <code>"buzz"</code>,當數字同時是 <code>3</code> 與 <code>5</code> 的倍數時輸出 <strong>“fizzbuzz”</strong>。</li><li>為什麼保持網站的全域(global scope)原樣是一個好做法?</li><li>為什麼要用 <code>load</code> 事件?有什麼缺點嗎?有其他選擇嗎?又為何選擇它?</li><li>解釋什麼是 single page app,並怎麼讓它對 SEO 更友善。</li><li>你對 Promises 的經驗?有用過相關的補強(ployfills)嗎?</li><li>Promises 之於 callbacks 的優劣?</li><li>JavaScript 轉譯器(transpiler)的優缺點?</li><li>你用什麼工具或技巧來做 JavaScript debug?</li><li>你都用什麼對 object properties 與 array 進行迭代?</li><li>解釋 mutable 與 immutable objects 之間的不同。<ul><li>舉個 immutable 在 JavaScript 中例子?</li><li>immutability 的憂劣?</li><li>如何達成 immutability?</li></ul></li><li>解釋同步(synchronous)與非同步(asynchronous)函式之間的差異。</li><li>Event loop 是什麼?<ul><li>call stack 與 task queue 之間的不同?</li></ul></li></ul><h4><a name="testing-questions">測試問題集:</a></h4><ul><li>寫測試有什麼好壞?</li><li>都用什麼工具測試代碼是否能運作?</li><li>Unit test 與 functional/integration 間的不同?</li><li>監控代碼風格 linting 工具的用途是?</li></ul><h4><a name="performance-questions">效能問題集:</a></h4><ul><li>你都用什麼工具尋找效能上的臭蟲?</li><li>有哪些方法可改善網站在 scrolling 效能?</li><li>解釋 layout, painting 與 compositing 的不同。(瀏覽器在 render 上的效能問題)</li></ul><h4><a name="network-questions">網路問題集:</a></h4><ul><li>傳統上為什麼用多個域名來放置網站資源會比較好?</li><li>請詳細描述當您在網址列打入網址開始到最後網頁呈現在螢幕前的整個流程。</li><li>Long-Polling, Websockets, SSE (Server-Sent Event) 之間有什麼差異?</li><li>請描述下列 request 和 response headers:<ul><li>Diff. between Expires, Date, Age and If-Modified-…</li><li>DNT</li><li>Cache-Control</li><li>Transfer-Encoding</li><li>ETag</li><li>X-Frame-Options</li></ul></li><li>列出所有你知道的 HTTP 操作,並詳加解釋。</li></ul><h4><a name="coding-questions">程式碼問題集:</a></h4><p>問題: <code>foo</code> 的值是什麼?</p><pre class="language-javascript"><code class="language-javascript"><span class="token keyword">var</span> foo <span class="token operator">=</span> <span class="token number">10</span> <span class="token operator">+</span> <span class="token string">'20'</span><span class="token punctuation">;</span></code></pre><p>問題:實作符合下面的函式</p><pre class="language-javascript"><code class="language-javascript"><span class="token function">add</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 7</span>
|
||
<span class="token function">add</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 7</span></code></pre><p>問題: 下面的 statement(陳述式) 會回傳什麼?</p><pre class="language-javascript"><code class="language-javascript"><span class="token string">"i'm a lasagna hog"</span><span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">reverse</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>問題: <code>window.foo</code> 的值是什麼?</p><pre class="language-javascript"><code class="language-javascript"><span class="token punctuation">(</span> window<span class="token punctuation">.</span>foo <span class="token operator">||</span> <span class="token punctuation">(</span> window<span class="token punctuation">.</span>foo <span class="token operator">=</span> <span class="token string">"bar"</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>問題: 下面的兩個 alerts 的結果會是什麼?</p><pre class="language-javascript"><code class="language-javascript"><span class="token keyword">var</span> foo <span class="token operator">=</span> <span class="token string">"Hello"</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
||
<span class="token keyword">var</span> bar <span class="token operator">=</span> <span class="token string">" World"</span><span class="token punctuation">;</span>
|
||
<span class="token function">alert</span><span class="token punctuation">(</span>foo <span class="token operator">+</span> bar<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">alert</span><span class="token punctuation">(</span>foo <span class="token operator">+</span> bar<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>問題: 下面 <code>foo.length</code> 的值是什麼?</p><pre class="language-javascript"><code class="language-javascript"><span class="token keyword">var</span> foo <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
|
||
foo<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
foo<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>問題:下面這段會印出什麼?</p><pre class="language-javascript"><code class="language-javascript">console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'one'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
||
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'two'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'three'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4><a name="fun-questions">有趣問題:</a></h4><ul><li>你最近寫過最酷的專案是?</li><li>你使用的開發工具中,你最喜歡的部分是什麼?</li><li>你有任何的 pet projects (個人開發的小專案)? 什麼樣的?</li><li>你最喜歡 IE 瀏覽器的什麼特點?</li><li>喜歡咖啡嗎?</li></ul><h4><a name="contributors">貢獻作者群:</a></h4><p>此文件是由 <a href="http://twitter.com/paul_irish">@paul_irish</a> <a href="http://twitter.com/bentruyman">@bentruyman</a> <a href="http://twitter.com/cowboy">@cowboy</a> <a href="http://twitter.com/ajpiano">@ajpiano</a> <a href="http://twitter.com/slexaxton">@SlexAxton</a> <a href="http://twitter.com/boazsender">@boazsender</a> <a href="http://twitter.com/miketaylr">@miketaylr</a> <a href="http://twitter.com/vladikoff">@vladikoff</a> <a href="http://twitter.com/gf3">@gf3</a> <a href="http://twitter.com/jon_neal">@jon_neal</a> <a href="http://twitter.com/sambreed">@sambreed</a> and <a href="http://twitter.com/iansym">@iansym</a> 於 2009 年共同發起。</p><p>目前已經超過 <a href="https://github.com/h5bp/Front-end-Developer-Interview-Questions/graphs/contributors">100 開發者</a> 參與此專案.</p></div><div class="content-edit"><a rel="external noreferrer noopener" target="_blank" href="https://github.com/h5bp/Front-end-Developer-Interview-Questions/tree/master/src/translations/chinese-traditional.md">Edit this page</a></div></main><footer class="footer"><p class="footer-text">Copyright © 2012 - 2024. Contributors to <a href="https://github.com/h5bp/Front-end-Developer-Interview-Questions/blob/main/CONTRIBUTORS.md">Front-end-Developer-Interview-Questions.</a><br>Curious about the project? <a href="/Front-end-Developer-Interview-Questions/about/">Read more about here</a>.</p></footer></div><script>console.log("%cA black belt is a white belt that didn't quit.","color: #fff; font-size: 20px; text-shadow: 1px 1px 1px #000; font-family: serif;");var navToggle=document.getElementById("navigation-toggle"),nav=document.getElementById("navigation");navToggle.addEventListener("click",function(){nav.classList.toggle("open")}),window.addEventListener("resize",function(){document.width>960?nav.classList.remove("active"):(nav.classList.add("no-motion"),setTimeout(function(){nav.classList.remove("no-motion")},250))});</script></body></html> |