この記事ではフロントエンドの面接問題をまとめています。初心者の方も読んだ後はその原理をしっかり研究してください。重要な知識は体系的に、徹底的に学び、自分自身の知識チェーンを形成する必要があります。決して安請け合いせず、付け焼き刃で面接をうまく乗り切ろうとすることは間違いです!そんなことは不可能です!不可能です!不可能です!


フロントエンドはまだ若い業界であり、新しい業界標準、フレームワーク、ライブラリが絶えず更新・追加されています。赫门氏が2015年の深JS大会での基調講演『前端サービス化への道』で述べたように、「18~24ヶ月ごとに、フロントエンドは2倍難しくなる」という言葉があります。こうした変化により、フロントエンドの能力はより豊かになり、生み出すアプリケーションもより完璧になります。そのため、さまざまなフロントエンド技術に注目し、急速に変化するペースについていくことも、フロントエンドプログラマーとして必須のスキルの一つです。


最近、Weiboのダイレクトメッセージで多くの励ましや問題情報の訂正をいただきました。今後も問題と回答を頻繁に更新していく先は、githubブログです。フロントエンドの皆さんが、使えるだけでなく説明もでき、理論知識に対して自分なりの理解を持てることを望んでいます。以下の知識ポイントを一つ一つステップアップして学び、自分自身の職業スキルチェーンを形成してください。


面接にはいくつか注意すべき点があります:(出典:寒冬winter先生、github:@wintercn)

  1. 面接問題:あなたのレベルや職位の変化に応じて、初級からエキスパート級まで、広さと深さの両方が増加します。

  2. 問題タイプ:理論知識、アルゴリズム、プロジェクト詳細、技術的視野、オープンクエスチョン、仕事のケーススタディ。

  3. 詳細な追及:あなたが分からなくなるか、面接官が分からなくなるまで質問することで、問題の区別度と深さを大幅に広げ、あなたの実際の能力を知ることができます。このような知識の関連付けは長期間の学習によるものであり、付け焼き刃では絶対に覚えられません。

  4. どんなに素晴らしい回答ができても、面接官(あなたが応募したポジションの直属の上司かもしれません)は、この人を同僚にしたいかどうかを考えます。だから態度が重要です。仕事ができるだけでなく、人間関係も大切です。(何だかお見合いみたいですね( •̣̣̣̣̣̥́௰•̣̣̣̣̣̥̀ ))

  5. 熟練のフロントエンド開発者がabsoluteとrelativeを混同するようでは、そんな人はいらない。チームが必要としているのは、頼りになる才能(信頼できること)を持った人だからだ。

フロントエンド開発の知識ポイント:

HTML&CSS:
    对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型、选择器优先级、
    HTML5、CSS3、Flexbox

JavaScript:
    数据类型、运算、对象、Function、继承、闭包、作用域、原型链、事件、RegExp、JSON、Ajax、
    DOM、BOM、内存泄漏、跨域、异步装载、模板引擎、前端MVC、路由、模块化、Canvas、ECMAScript 6、Nodejs

其他:
    移动端、响应式、自动化构建、HTTP、离线存储、WEB安全、优化、重构、团队协作、可维护、易用性、SEO、UED、架构、职业生涯、快速学习能力

フロントエンドエンジニアとして、勤続年数の長短にかかわらず習得すべき知識ポイント:

この項目は 王子墨 によって以下のサイトに公開されました:攻城師の実験室

 1、DOM结构 —— 两个节点之间可能存在哪些关系以及如何在节点之间任意移动。

    2、DOM操作 —— 如何添加、移除、移动、复制、创建和查找节点等。

    3、事件 —— 如何使用事件,以及IE和标准DOM事件模型之间存在的差别。

    4、XMLHttpRequest —— 这是什么、怎样完整地执行一次GET请求、怎样检测错误。

    5、严格模式与混杂模式 —— 如何触发这两种模式,区分它们有何意义。

    6、盒模型 —— 外边距、内边距和边框之间的关系,及IE8以下版本的浏览器中的盒模型

    7、块级元素与行内元素 —— 怎么用CSS控制它们、以及如何合理的使用它们

    8、浮动元素 —— 怎么使用它们、它们有什么问题以及怎么解决这些问题。

    9、HTML与XHTML —— 二者有什么区别,你觉得应该使用哪一个并说出理由。

    10、JSON —— 作用、用途、设计结构。

備考:

根据自己需要选择性阅读,面试题是对理论知识的总结,让自己学会应该如何表达。

资料答案不够正确和全面,欢迎欢迎Star和提交issues。

格式不断修改更新中。

更新记录:
2016年3月25日:新增ECMAScript6 相关问题

更新日時:2016-3-25

HTML

  • Doctypeの役割は?標準モードと互換モードにはそれぞれどのような違いがありますか?

    (1)、<!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html> 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。
    
    (2)、标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。
    
  • HTML5ではなぜ <!DOCTYPE HTML> と書くだけでよいのですか?

    HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);
    
     而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。
    
  • インライン要素には何がありますか?ブロックレベル要素には何がありますか?空(void)要素には何がありますか?

    首先:CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素;span默认display属性值为“inline”,是“行内”元素。
    
    (1)行内元素有:a b span img input select strong(强调的语气)
    (2)块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
    
    (3)常见的空元素:
        <br> <hr> <img> <input> <link> <meta>
        鲜为人知的是:
        <area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>
    
  • ページにスタイルを導入する際、linkと@importの使用にはどのような違いがありますか?

    (1)link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;
    
    (2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
    
    (3)import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;
    
  • ブラウザエンジン(レンダリングエンジン)についての理解を紹介してください。

    主要分成两部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。
    渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。
    
    JS引擎则:解析和执行javascript来实现网页的动态效果。
    
    最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。
    
  • 一般的なブラウザエンジンには何がありますか?

    Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等。[又称MSHTML]
    Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等
    Presto内核:Opera7及以上。      [Opera内核原为:Presto,现为:Blink;]
    Webkit内核:Safari,Chrome等。   [ Chrome的:Blink(WebKit的分支)]
    

    詳細記事:ブラウザエンジンの解析と比較

  • HTML5にはどのような新機能がありますか?どの要素が削除されましたか?HTML5の新しいタグのブラウザ互換性問題はどのように処理しますか?HTMLとHTML5をどのように区別しますか?

    * HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
          绘画 canvas;
          用于媒介回放的 video 和 audio 元素;
          本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
          sessionStorage 的数据在浏览器关闭后自动删除;
          语意化更好的内容元素,比如 article、footer、header、nav、section;
          表单控件,calendar、date、time、email、url、search;
          新的技术webworker, websocket, Geolocation;
    
      移除的元素:
          纯表现的元素:basefont,big,center,font, s,strike,tt,u;
          对可用性产生负面影响的元素:frame,frameset,noframes;
    
    * 支持HTML5新标签:
         IE8/IE7/IE6支持通过document.createElement方法产生的标签,
         可以利用这一特性让这些浏览器支持HTML5新标签,
         浏览器支持新标签后,还需要添加标签默认的样式。
    
         当然也可以直接使用成熟的框架、比如html5shim;
         <!--[if lt IE 9]>
            <script> src="//cdn.bootcss.com/html5shiv/r29/html5.min.js"</script>
         <![endif]-->
    
    * 如何区分HTML5: DOCTYPE声明\新增的结构元素\功能元素
    
  • HTMLのセマンティック化についてのあなたの理解を簡単に述べてください。

    用正确的标签做正确的事情。
    html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;
    即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的;
    搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO;
    使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
    
  • HTML5のオフラインストレージはどう使うのですか?動作原理を説明できますか?

    在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件。
    原理:HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技术),通过这个文件上的解析清单离线存储资源,这些资源就会像cookie一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示。
    
    
    如何使用:
    1、页面头部像下面一样加入一个manifest的属性;
    2、在cache.manifest文件的编写离线存储的资源;
        CACHE MANIFEST
        #v0.11
        CACHE:
        js/app.js
        css/style.css
        NETWORK:
        resourse/logo.png
        FALLBACK:
        / /offline.html
    3、在离线状态时,操作window.applicationCache进行需求实现。
    

    詳しい使い方は以下を参照してください:面白いHTML5:オフラインストレージ

  • ブラウザはHTML5のオフラインストレージリソースをどのように管理・読み込みしているのですか?

    在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。如果已经访问过app并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的manifest文件与旧的manifest文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。
    离线的情况下,浏览器就直接使用离线存储的资源。
    

    詳しい使い方は以下を参照してください:面白いHTML5:オフラインストレージ

  • cookies、sessionStorage、localStorageの違いを説明してください。

    cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。
    cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递。
    sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
    
    存储大小:
        cookie数据大小不能超过4k。
        sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
    
    有期时间:
        localStorage    存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
        sessionStorage  数据在当前浏览器窗口关闭后自动删除。
        cookie          设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
    
  • iframeにはどのような欠点がありますか?

    *iframe会阻塞主页面的Onload事件;
    *搜索引擎的检索程序无法解读这种页面,不利于SEO;
    
    *iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。
    
    使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript
    动态给iframe添加src属性值,这样可以绕开以上两个问题。
    
  • Labelの役割は何ですか?どのように使いますか?

    label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上。
    
    <label for="Name">Number:</label>
    <input type=“text“name="Name" id="Name"/>
    
    <label>Date:<input type="text" name="B"/></label>
    
  • HTML5のformで自動補完機能をオフにするにはどうすればよいですか?

    给不想要提示的 form 或某个 input 设置为 autocomplete=off。
    
  • ブラウザ内の複数のタブ間で通信を実装するにはどうすればよいですか?(アリババ)

    WebSocket、SharedWorker;
    也可以调用localstorge、cookies等本地存储方式;
    
    localstorge另一个浏览上下文里被添加、修改或删除时,它都会触发一个事件,
    我们通过监听事件,控制它的值来进行页面信息通信;
    注意quirks:Safari 在无痕模式下设置localstorge值时会抛出 QuotaExceededError 的异常;
    
  • webSocketを低バージョンのブラウザで互換性を持たせるにはどうすればよいですか?(アリババ)

    Adobe Flash Socket 、
    ActiveX HTMLFile (IE) 、
    基于 multipart 编码发送 XHR 、
    基于长轮询的 XHR
    
  • ページ可視性(Page Visibility API)にはどのような用途がありますか?

    通过 visibilityState 的值检测页面当前是否可见,以及打开网页的时间等;
    在页面被切换到其他后台进程的时候,自动暂停音乐或视频的播放;
    
  • ページ上に円形のクリック可能領域を実装するにはどうすればよいですか?

    1、map+area或者svg
    2、border-radius
    3、纯js实现 需要求一个点在不在圆上简单算法、获取鼠标坐标等等
    
  • borderを使わずに高さ1pxの線を描画し、異なるブラウザの標準モードとクワークスモードで一貫した効果を保つように実装してください。

    <div style="height:1px;overflow:hidden;background:red"></div>
    
  • WebページのCAPTCHA(認証コード)は何のためにあり、どのようなセキュリティ問題を解決するためのものですか?

    ユーザーがコンピューターか人間かを区別する公開の全自動プログラム。悪意のあるパスワードクラック、不正投票、フォーラムへのスパム投稿(荒らし)を防止できる。特定の登録ユーザーに対し、ハッカーが特定のプログラムを用いたブルートフォース攻撃(総当たり攻撃)でログインを継続的に試行することを効果的に防ぐ。
  • titleとh1の違い、bとstrongの違い、iとemの違いは何ですか?

    title属性没有明确意义只表示是个标题,H1则表示层次明确的标题,对页面信息的抓取也有很大的影响;
    
    strong是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:<strong>会重读,而<B>是展示强调内容。
    
    i内容展示为斜体,em表示强调的文本;
    
    Physical Style Elements -- 自然样式标签
    b, i, u, s, pre
    Semantic Style Elements -- 语义样式标签
    strong, em, ins, del, code
    应该准确使用语义样式标签, 但不能滥用, 如果不能确定时首选使用自然样式标签。
    

CSS

  • 標準的なCSSのボックスモデルを紹介してください。低バージョンIEのボックスモデルはどのように異なりますか?

    (1)有两种, IE 盒子模型、W3C 盒子模型;
    (2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border);
    (3)区  别: IE的content部分把 border 和 padding计算了进去;
    
  • CSSセレクタには何がありますか?どのプロパティが継承されますか?

    *   1.id选择器( # myid)
        2.类选择器(.myclassname)
        3.标签选择器(div, h1, p)
        4.相邻选择器(h1 + p)
        5.子选择器(ul > li)
        6.后代选择器(li a)
        7.通配符选择器( * )
        8.属性选择器(a[rel = "external"])
        9.伪类选择器(a:hover, li:nth-child)
    
    *   可继承的样式: font-size font-family color, UL LI DL DD DT;
    
    *   不可继承的样式:border padding margin width height ;
    
  • CSSの優先度アルゴリズムはどのように計算されますか?

    *   优先级就近原则,同权重情况下样式定义最近者为准;
    
    *   载入样式以最后载入的定位为准;
    
    优先级为:
       !important >  id > class > tag
        important 比 内联优先级高
    
  • CSS3で追加された疑似クラスには何がありますか?

    举例:
        p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素。
        p:last-of-type  选择属于其父元素的最后 <p> 元素的每个 <p> 元素。
        p:only-of-type  选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。
        p:only-child        选择属于其父元素的唯一子元素的每个 <p> 元素。
        p:nth-child(2)  选择属于其父元素的第二个子元素的每个 <p> 元素。
    
        :after          在元素之前添加内容,也可以用来做清除浮动。
        :before         在元素之后添加内容
        :enabled        
        :disabled       控制表单控件的禁用状态。
        :checked        单选框或复选框被选中。
    
  • divを中央揃えするにはどうすればよいですか?フロート要素を中央揃えするには?絶対配置のdivを中央揃えするには?

    • divに幅を設定し、margin:0 autoプロパティを追加します

      div{
          width:200px;
          margin:0 auto;
       }
      
    • フロート要素を中央揃えする

        确定容器的宽高 宽500 高 300 的层
        设置层的外边距
      
       .div {
            width:500px ; height:300px;//高度可以不设
            margin: -150px 0 0 -250px;
            position:relative;         //相对定位
            background-color:pink;     //方便看效果
            left:50%;
            top:50%;
       }
      
    • 絶対配置のdivを中央揃えにする

        position: absolute;
        width: 1200px;
        background: none;
        margin: 0 auto;
        top: 0;
        left: 0;
        bottom: 0;
        right: 0;
      
  • displayにはどのような値がありますか?それぞれの役割を説明してください。

      block         像块类型元素一样显示。
      none          此元素不会被显示。
      inline-block  像行内元素一样显示,但其内容像块类型元素一样显示。
      list-item     像块类型元素一样显示,并添加样式列表标记。
      table         此元素会作为块级表格来显示
      inherit       规定应该从父元素继承 display 属性的值
    
  • positionの値であるrelativeとabsoluteの位置指定の原点は何ですか?

      absolute
        生成绝对定位的元素,相对于值不为 static的第一个父元素进行定位。
      fixed (老IE不支持)
        生成绝对定位的元素,相对于浏览器窗口进行定位。
      relative
        生成相对定位的元素,相对于其正常位置进行定位。
      static
        默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right z-index 声明)。
      inherit
        规定从父元素继承 position 属性的值。
    
  • CSS3にはどのような新機能がありますか?

      新增各种CSS选择器  (: not(.input):所有 class 不是“input”的节点)
      圆角           (border-radius:8px)
      多列布局        (multi-column layout)
      阴影和反射        (Shadow\Reflect)
      文字特效      (text-shadow、)
      文字渲染      (Text-decoration)
      线性渐变      (gradient)
      旋转          (transform)
      增加了旋转,缩放,定位,倾斜,动画,多背景
      transform:\scale(0.85,0.90)\ translate(0px,-30px)\ skew(-9deg,0deg)\Animation:
    
  • CSS3のFlexbox(フレキシブルボックスレイアウトモデル)と、適用シーンを説明してください。

     .
    
  • 純粋なCSSで三角形を作成する原理は何ですか?

    把上、左、右三条边隐藏掉(颜色设为 transparent)
    #demo {
      width: 0;
      height: 0;
      border-width: 20px;
      border-style: solid;
      border-color: transparent transparent red transparent;
    }
    
  • 全画面の「品」の字レイアウトはどのように設計しますか?

    简单的方式:
        上面的div宽100%,
        下面的两个div分别宽50%,
        然后用float或者inline使其不换行即可
    
  • よく遭遇するブラウザの互換性には何がありますか?原因、解決方法は何ですか?よく使われるハックのテクニックは?

    * png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.
    
    * 浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。
    
    * IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。
    
      浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;}
    
      这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)
    
      渐进识别的方式,从总体中逐渐排除局部。
    
      首先,巧妙的使用“\9”这一标记,将IE游览器从所有情况中分离出来。
      接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。
    
      css
          .bb{
              background-color:#F1EE18;/*所有识别*/
              .background-color:#00DEFF\9; /*IE6、7、8识别*/
              +background-color:#A200FF;/*IE6、7识别*/
              _background-color:#1E0BD1;/*IE6识别*/
          }
    
    *  IE下,可以使用获取常规属性的方法来获取自定义属性,
       也可以使用getAttribute()获取自定义属性;
       Firefox下,只能使用getAttribute()获取自定义属性。
       解决方法:统一通过getAttribute()获取自定义属性。
    
    *  IE下,even对象有x,y属性,但是没有pageX,pageY属性;
       Firefox下,event对象有pageX,pageY属性,但是没有x,y属性。
    
    *  解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。
    
    *  Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,
       可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决。
    
    超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hover和active了解决方法是改变CSS属性的排列顺序:
    L-V-H-A :  a:link {} a:visited {} a:hover {} a:active {}
    
  • liとliの間に見えない空白の間隔ができる原因は何ですか?どのような解決策がありますか?

    行框的排列会受到中间空白(回车\空格)等的影响,因为空格也属于字符,这些空白也会被应用样式,占据空间,所以会有间隔,把字符大小设为0,就没有空格了。
    
  • なぜCSSスタイルを初期化するのですか?

    - 因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。
    
    - 当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。
    
    最简单的初始化方法: * {padding: 0; margin: 0;} (强烈不建议)
    
    淘宝的样式初始化代码:
    body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
    body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
    h1, h2, h3, h4, h5, h6{ font-size:100%; }
    address, cite, dfn, em, var { font-style:normal; }
    code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
    small{ font-size:12px; }
    ul, ol { list-style:none; }
    a { text-decoration:none; }
    a:hover { text-decoration:underline; }
    sup { vertical-align:text-top; }
    sub{ vertical-align:text-bottom; }
    legend { color:#000; }
    fieldset, img { border:0; }
    button, input, select, textarea { font-size:100%; }
    table { border-collapse:collapse; border-spacing:0; }
    
  • absoluteのcontaining block(包含ブロック)の計算方法は、通常のフローとどう違いますか?

    无论属于哪种,都要先找到其祖先元素中最近的 position 值不为 static 的元素,然后再判断:
    1、若此元素为 inline 元素,则 containing block 为能够包含这个元素生成的第一个和最后一个 inline box 的 padding box (除 margin, border 外的区域) 的最小矩形;
    2、否则,则由这个祖先元素的 padding box 构成。
    如果都找不到,则为 initial containing block。
    
    补充:
    1. static(默认的)/relative:简单说就是它的父元素的内容框(即去掉padding的部分)
    2. absolute: 向上找最近的定位为absolute/relative的元素
    3. fixed: 它的containing block一律为根元素(html/body),根元素也是initial containing block
    
  • CSSのvisibilityプロパティの値であるcollapseは何のために使いますか?ブラウザによってどのような違いがありますか?

  • positionとdisplay、margin collapse、overflow、floatといったプロパティが互いに重なるとどうなりますか?

  • BFC(Block Formatting Context:ブロック整形コンテキスト)の仕様についての理解は?

    (W3C CSS 2.1 规范中的一个概念,它是一个独立容器,决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。)
     一个页面是由很多个 Box 组成的,元素的类型和 display 属性,决定了这个 Box 的类型。
     不同类型的 Box,会参与不同的 Formatting Context(决定如何渲染文档的容器),因此Box内的元素会以不同的方式渲染,也就是说BFC内部的元素和外部的元素不会互相影响。
    
  • CSS定義の重み(優先度)

    以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,以下例子是演示各种定义的权重值:
    
    /*权重为1*/
    div{
    }
    /*权重为10*/
    .class1{
    }
    /*权重为100*/
    #id1{
    }
    /*权重为100+1=101*/
    #id1 div{
    }
    /*权重为10+1=11*/
    .class1 div{
    }
    /*权重为10+10+1=21*/
    .class1 .class2 div{
    }
    
    如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现
    
  • なぜフロートが発生するのか、いつフロートをクリアする必要があるのかを説明してください。フロートをクリアする方法

  • モバイル端末のレイアウトでメディアクエリを使ったことはありますか?

  • CSSプリプロセッサを使っていますか?どれが好きですか?

    SASS (SASS、LESS没有本质区别,只因为团队前端都是用的SASS)
    
  • CSSの最適化、パフォーマンス向上の方法には何がありますか?

  • ブラウザはCSSセレクタをどのように解析しますか?

  • Webページではフォントサイズに奇数と偶数のどちらを使うべきですか?なぜですか?

  • marginとpaddingはそれぞれどのような場面で使うのが適していますか?

  • スタイルモジュールの抽出はどう書きますか?考え方を述べてください。実践経験はありますか?[アリババ航空旅行の面接問題]

  • 要素の垂直方向のパーセンテージ設定は、コンテナの高さに対して相対的ですか?

  • 全画面スクロールの原理は何ですか?CSSのどのプロパティを使いますか?

  • レスポンシブデザインとは何ですか?レスポンシブデザインの基本原理は何ですか?低バージョンのIEと互換性を持たせるにはどうすればよいですか?

  • 視差スクロール効果で、各ページに異なるアニメーションを付けるにはどうすればよいですか?(トップに戻る、下にスクロールしたら再度表示する、一度だけ表示する、それぞれどうやるのですか?)

  • ::before と :after のダブルコロンとシングルコロンの違いは何ですか?この2つの擬似要素の役割を説明してください。

  • Chromeがパスワードを記憶した後に自動入力されるフォームの黄色い背景を変更するにはどうすればよいですか?

  • line-heightについてどのように理解していますか?

  • 要素にフロートを設定した後、その要素のdisplay値は何になりますか?(自動的にdisplay:blockになります)

  • Chromeで12px未満の文字をサポートさせるにはどうすればよいですか?

  • ページ内のフォントをくっきりと細く見せるにはCSSでどうしますか?(-webkit-font-smoothing: antialiased;)

  • font-styleプロパティには"oblique"を指定できますが、obliqueとはどういう意味ですか?

  • position:fixed; がAndroidで無効な場合、どう対処しますか?

  • 手動でアニメーションを書く場合、最小の時間間隔はどのくらいだと思いますか?なぜですか?(アリババ)

    多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms = 16.7ms
    
  • display:inline-block はどのようなときに隙間が表示されますか?(携程(Ctrip))

    移除空格、使用margin负值、使用font-size:0、letter-spacing、word-spacing
    
  • overflow: scroll のときにスムーズスクロールができない問題はどう対処しますか?

  • 高さが自適応のdivがあり、その中に2つのdivがあります。1つは高さ100pxで、もう1つに残りの高さを埋めさせたいです。

  • png、jpg、gif といった画像フォーマットについて説明し、それぞれいつ使うのかを述べてください。webpについて知っていますか?

  • Cookie分離とは何ですか?(または、リソースをリクエストするときにCookieを付けないようにするにはどうすればよいですか)

    如果静态文件都放在主域名下,那静态文件请求的时候都带有的cookie的数据提交给server的,非常浪费流量,
    所以不如隔离开。
    
    因为cookie有域的限制,因此不能跨域提交请求,故使用非主要域名的时候,请求头中就不会带有cookie数据,
    这样可以降低请求头的大小,降低请求时间,从而达到降低整体请求延时的目的。
    
    同时这种方式不会将cookie传入Web Server,也减少了Web Server对cookie的处理分析环节,
    提高了webserver的http请求的解析速度。
    
  • styleタグをbodyの後ろに書くのとbodyの前に書くのでは何が違うか?

  • CSSプリプロセッサ / ポストプロセッサとは何か?

    - 预处理器例如:LESS、Sass、Stylus,用来预编译Sass或less,增强了css代码的复用性,
      还有层级、mixin、变量、循环、函数等,具有很方便的UI组件模块化开发能力,极大的提高工作效率。
    
    - 后处理器例如:PostCSS,通常被视为在完成的样式表中根据CSS规范处理CSS,让其更有效;目前最常做的
      是给CSS属性添加浏览器私有前缀,实现跨浏览器兼容性的问题。
    

JavaScript

  • JSの基本データ型を紹介してください。

     Undefined、Null、Boolean、Number、String
    
  • JSにはどのような組み込みオブジェクトがあるか紹介してください。

    Object 是 JavaScript 中所有对象的父对象
    
    数据封装类对象:Object、Array、Boolean、Number 和 String
    其他对象:Function、Arguments、Math、Date、RegExp、Error
    
  • JavaScriptを書く上での基本的な規範をいくつか述べてください。

    1.不要在同一行声明多个变量。
    2.请使用 ===/!==来比较true/false或者数值
    3.使用对象字面量替代new Array这种形式
    4.不要使用全局函数。
    5.Switch语句必须带有default分支
    6.函数不应该有时候有返回值,有时候没有返回值。
    7.For循环必须使用大括号
    8.If语句必须使用大括号
    9.for-in循环中的变量 应该使用var关键字明确限定作用域,从而避免作用域污染。
    
  • JavaScriptのプロトタイプ、プロトタイプチェーンとは? どんな特徴があるか?

    每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,
    如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,
    于是就这样一直找下去,也就是我们平时所说的原型链的概念。
    关系:instance.constructor.prototype = instance.__proto__
    
    特点:
    JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。
    
    
     当我们需要一个属性的时,Javascript引擎会先看当前对象中是否有这个属性, 如果没有的话,
     就会查找他的Prototype对象是否有这个属性,如此递推下去,一直检索到 Object 内建对象。
        function Func(){}
        Func.prototype.name = "Sean";
        Func.prototype.getInfo = function() {
          return this.name;
        }
        var person = new Func();//现在可以参考var person = Object.create(oldObject);
        console.log(person.getInfo());//它拥有了Func的属性和方法
        //"Sean"
        console.log(Func.prototype);
        // Func { name="Sean", getInfo=function()}
    
  • JavaScriptの値には何種類ありますか?それらのメモリ図を描けますか?

    栈:原始数据类型(Undefined,Null,Boolean,Number、String) 
    堆:引用数据类型(对象、数组和函数)
    
    两种类型的区别是:存储位置不同;
    原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;
    引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其
    在栈中的地址,取得地址后从堆中获得实体
    

  • Javascriptで継承を実現するにはどうすればよいか?

    1、构造继承
    2、原型继承
    3、实例继承
    4、拷贝继承
    
    原型prototype机制或apply和call方法去实现较简单,建议使用构造函数与原型混合方式。
    
     function Parent(){
            this.name = 'wang';
        }
    
        function Child(){
            this.age = 28;
        }
        Child.prototype = new Parent();//继承了Parent,通过原型
    
        var demo = new Child();
        alert(demo.age);
        alert(demo.name);//得到被继承的属性
      }
    
  • JavaScriptの継承のいくつかの実装方法は?

  • javascriptでオブジェクトを作成するいくつかの方法は?

    javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON;但写法有很多种,也能混合使用。
    
    
    1、对象字面量的方式   
    
        person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};
    
    2、用function来模拟无参的构造函数
    
        function Person(){}
        var person=new Person();//定义一个function,如果使用new"实例化",该function可以看作是一个Class
        person.name="Mark";
        person.age="25";
        person.work=function(){
        alert(person.name+" hello...");
        }
        person.work();
    
    3、用function来模拟参构造函数来实现(用this关键字定义构造的上下文属性)
    
        function Pet(name,age,hobby){
           this.name=name;//this作用域:当前对象
           this.age=age;
           this.hobby=hobby;
           this.eat=function(){
              alert("我叫"+this.name+",我喜欢"+this.hobby+",是个程序员");
           }
        }
        var maidou =new Pet("麦兜",25,"coding");//实例化、创建对象
        maidou.eat();//调用eat方法
    
    
    4、用工厂方式来创建(内置对象)
    
         var wcDog =new Object();
         wcDog.name="旺财";
         wcDog.age=3;
         wcDog.work=function(){
           alert("我是"+wcDog.name+",汪汪汪......");
         }
         wcDog.work();
    
    
    5、用原型方式来创建
    
        function Dog(){
    
         }
         Dog.prototype.name="旺财";
         Dog.prototype.eat=function(){
         alert(this.name+"是个吃货");
         }
         var wangcai =new Dog();
         wangcai.eat();
    
    
    5、用混合方式来创建
    
        function Car(name,price){
          this.name=name;
          this.price=price; 
        }
         Car.prototype.sell=function(){
           alert("我是"+this.name+",我现在卖"+this.price+"万元");
          }
        var camry =new Car("凯美瑞",27);
        camry.sell(); 
    
  • Javascriptスコープチェーン?

    グローバル関数はローカル関数の内部詳細を参照できないが、ローカル関数はその上位の関数の詳細を、グローバルな詳細に至るまで参照できる。ローカル関数から特定のプロパティやメソッドを探す場合、現在のスコープ内で見つからなければ、上位のスコープへ遡って検索し、最終的にグローバル関数にまで至る。このような組織形態をスコープチェーンと呼ぶ。
  • Thisオブジェクトの理解について述べてください。

    • thisは常に関数の直接呼び出し元を指す(間接的な呼び出し元ではない);
    • newキーワードがある場合、thisはnewで生成されたそのオブジェクトを指す;
    • イベント内では、thisはそのイベントをトリガーしたオブジェクトを指す。特殊なのは、IEのattachEvent内のthisは常にグローバルオブジェクトWindowを指すこと;
  • evalは何をするものか?

    它的功能是把对应的字符串解析成JS代码并运行;
    应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
    由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')');
    
  • windowオブジェクトとは何か? documentオブジェクトとは何か?

  • nullとundefinedの違いは?

    null        表示一个对象被定义了,值为“空值”;
    undefined   表示不存在这个值。
    
    
    typeof undefined
        //"undefined"
        undefined :是一个表示"无"的原始值或者说表示"缺少值",就是此处应该有一个值,但是还没有定义。当尝试读取时会返回 undefined; 
        例如变量被声明了,但没有赋值时,就等于undefined
    
    typeof null
        //"object"
        null : 是一个对象(空对象, 没有任何属性和方法);
        例如作为函数的参数,表示该函数的参数不是对象;
    
    注意:
        在验证null时,一定要使用 === ,因为 == 无法分别 null 和 undefined
    
    
    再来一个例子:
    
        null
        Q:有张三这个人么?
        A:有!
        Q:张三有房子么?
        A:没有!
    
        undefined
        Q:有张三这个人么?
        A:没有!
    

    参考読書:undefinedとnullの違い

  • 汎用のイベントリスナー関数を書いてください。

        // event(事件)工具集,来源:github.com/markyun
        markyun.Event = {
            // 页面加载完成后
            readyEvent : function(fn) {
                if (fn==null) {
                    fn=document;
                }
                var oldonload = window.onload;
                if (typeof window.onload != 'function') {
                    window.onload = fn;
                } else {
                    window.onload = function() {
                        oldonload();
                        fn();
                    };
                }
            },
            // 视能力分别使用dom0||dom2||IE方式 来绑定事件
            // 参数: 操作的元素,事件名称 ,事件处理程序
            addEvent : function(element, type, handler) {
                if (element.addEventListener) {
                    //事件类型、需要执行的函数、是否捕捉
                    element.addEventListener(type, handler, false);
                } else if (element.attachEvent) {
                    element.attachEvent('on' + type, function() {
                        handler.call(element);
                    });
                } else {
                    element['on' + type] = handler;
                }
            },
            // 移除事件
            removeEvent : function(element, type, handler) {
                if (element.removeEventListener) {
                    element.removeEventListener(type, handler, false);
                } else if (element.datachEvent) {
                    element.detachEvent('on' + type, handler);
                } else {
                    element['on' + type] = null;
                }
            },
            // 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
            stopPropagation : function(ev) {
                if (ev.stopPropagation) {
                    ev.stopPropagation();
                } else {
                    ev.cancelBubble = true;
                }
            },
            // 取消事件的默认行为
            preventDefault : function(event) {
                if (event.preventDefault) {
                    event.preventDefault();
                } else {
                    event.returnValue = false;
                }
            },
            // 获取事件目标
            getTarget : function(event) {
                return event.target || event.srcElement;
            },
            // 获取event对象的引用,取到事件的所有信息,确保随时能使用event;
            getEvent : function(e) {
                var ev = e || window.event;
                if (!ev) {
                    var c = this.getEvent.caller;
                    while (c) {
                        ev = c.arguments[0];
                        if (ev && Event == ev.constructor) {
                            break;
                        }
                        c = c.caller;
                    }
                }
                return ev;
            }
        };
    
  • ["1", "2", "3"].map(parseInt) の答えは何か?

     [1, NaN, NaN] 因为 parseInt 需要两个参数 (val, radix),
     其中 radix 表示解析时用的基数。
     map 传了 3 个 (element, index, array),对应的 radix 不合法导致解析失败。
    
  • イベントとは?IEとFirefoxのイベントメカニズムの違いは? バブリングを防ぐには?

     1. 我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为。
     2. 事件处理机制:IE是事件冒泡、Firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件;
     3. ev.stopPropagation();(旧ie的方法 ev.cancelBubble = true;)
    
  • クロージャ(closure)とは何か、なぜそれを使うのか?

    闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。
    
    闭包的特性:
    
    1.函数内再嵌套函数
    2.内部函数可以引用外层的参数和变量
    3.参数和变量不会被垃圾回收机制回收
    
    //li节点的onclick事件都能正确的弹出当前被点击的li索引
     <ul id="testUL">
        <li> index = 0</li>
        <li> index = 1</li>
        <li> index = 2</li>
        <li> index = 3</li>
    </ul>
    <script type="text/javascript">
        var nodes = document.getElementsByTagName("li");
        for(i = 0;i<nodes.length;i+= 1){
            nodes[i].onclick = function(){
                console.log(i+1);//不用闭包的话,值每次都是4
            }(i);
        }
    </script>
    
    
    
    执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在
    使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源
    因为say667()的内部函数的执行需要依赖say667()中的变量
    这是对闭包作用的非常直白的描述
    
      function say667() {
        // Local variable that ends up within closure
        var num = 666;
        var sayAlert = function() {
            alert(num);
        }
        num++;
        return sayAlert;
    }
    
     var sayAlert = say667();
     sayAlert()//执行结果应该弹出的667
    
  • javascriptコード内の"use strict";とはどういう意味か? 使うと何が違うのか?

    use strict是一种ECMAscript 5 添加的(严格)运行模式,这种模式使得 Javascript 在更严格的条件下运行,
    
    使JS编码更加规范化的模式,消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为。
    默认支持的糟糕特性都会被禁用,比如不能用with,也不能在意外的情况下给全局变量赋值;
    全局变量的显示声明,函数必须声明在顶层,不允许在非函数代码块内声明函数,arguments.callee也不允许使用;
    消除代码运行的一些不安全之处,保证代码运行的安全,限制函数中的arguments修改,严格模式下的eval函数的行为和非严格模式的也不相同;
    
    提高编译器效率,增加运行速度;
    为未来新版本的Javascript标准化做铺垫。
    
  • あるオブジェクトが特定のクラスに属するかどうかを判断するには?

      使用instanceof (待完善)
       if(a instanceof Person){
           alert('yes');
       }
    
  • new演算子は具体的に何をしているのか?

         1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
         2、属性和方法被加入到 this 引用的对象中。
         3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。
    
    var obj  = {};
    obj.__proto__ = Base.prototype;
    Base.call(obj);
    
  • ネイティブJavaScriptで何か機能を実装したことがありますか?

  • Javascriptには、実行時にオブジェクトを検索する際、決してプロトタイプを探さない関数がありますが、それは何か?

    hasOwnProperty
    
    javaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性。此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。
    使用方法:
    object.hasOwnProperty(proName)
    其中参数object是必选项。一个对象的实例。
    proName是必选项。一个属性名称的字符串值。
    
    如果 object 具有指定名称的属性,那么JavaScript中hasOwnProperty函数方法返回 true,反之则返回 false。
    
  • JSONについての理解は?

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
    它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小
    如:{"age":"12", "name":"back"}
    
    JSON字符串转换为JSON对象:
    var obj =eval('('+ str +')');
    var obj = str.parseJSON();
    var obj = JSON.parse(str);
    
    JSON对象转换为JSON字符串:
    var last=obj.toJSONString();
    var last=JSON.stringify(obj);
    
  • [].forEach.call($$("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)})このコードの意味を説明できますか?

  • jsの遅延読み込みの方法には何があるか?

    defer和async、动态创建DOM方式(用得最多)、按需异步载入js
    
  • Ajaxとは何か? Ajaxをどう作成するか?

    ajax的全称:Asynchronous Javascript And XML。
    异步传输+js+xml。
    所谓异步,在这里简单地解释就是:向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果它自己会根据设定进行后续操作,与此同时,页面是不会发生整页刷新的,提高了用户体验。
    
    (1)创建XMLHttpRequest对象,也就是创建一个异步调用对象
    (2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
    (3)设置响应HTTP请求状态变化的函数
    (4)发送HTTP请求
    (5)获取异步调用返回的数据
    (6)使用JavaScript和DOM实现局部刷新
    
  • 同期と非同期の違いは?

    同期の概念はOSにおける同期の概念に由来するはずだ。異なるプロセスが協力してある作業を完了するために、順序を調整する(ブロックやウェイクアップなどを通じて)。同期は順序性を強調する。誰が先で誰が後か。非同期にはこのような順序性は存在しない。

    同期:ブラウザがサーバーにアクセスしてリクエストし、ユーザーはページのリフレッシュを見る。再びリクエストを送り、リクエストが完了するのを待つと、ページがリフレッシュされ、新しいコンテンツが現れ、ユーザーは新しいコンテンツを見て、次の操作を行う。

    非同期:ブラウザがサーバーにアクセスしてリクエストし、ユーザーは通常通り操作し、ブラウザのバックエンドでリクエストを行う。リクエストが完了しても、ページはリフレッシュされず、新しいコンテンツも現れ、ユーザーは新しいコンテンツを見る。

    (未完成)

  • クロスドメイン問題をどう解決するか?

    jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面
    
  • ページのエンコーディングとリクエストされたリソースのエンコーディングが一致しない場合どう処理するか?

  • モジュール化開発はどう行うか?

    即時実行関数、プライベートメンバーを公開しない

        var module1 = (function(){
            var _count = 0;
            var m1 = function(){
              //...
            };
            var m2 = function(){
              //...
            };
            return {
              m1 : m1,
              m2 : m2
            };
          })();
    

    (未完成)

  • AMD(Modules/Asynchronous-Definition)とCMD(Common Module Definition)の仕様の違いは?

    AMD仕様はこちら:https://github.com/amdjs/amdjs-api/wiki/AMD

    CMD仕様はこちら:https://github.com/seajs/seajs/issues/242

    Asynchronous Module Definition,异步模块定义,所有的模块将被异步加载,模块加载不影响后面语句运行。所有依赖某些模块的语句均放置在回调函数中。
    
     区别:
    
        1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible.
        2. CMD 推崇依赖就近,AMD 推崇依赖前置。看代码:
    
    // CMD
    define(function(require, exports, module) {
        var a = require('./a')
        a.doSomething()
        // 此处略去 100 行
        var b = require('./b') // 依赖可以就近书写
        b.doSomething()
        // ...
    })
    
    // AMD 默认推荐
    define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
        a.doSomething()
        // 此处略去 100 行
        b.doSomething()
        // ...
    })
    
  • requireJSの核心的な原理は何か?(どのように動的ロードするのか?どのように複数回のロードを防ぐのか?どのようにキャッシュするのか?)

  • ECMAScript6についてのあなたの理解を述べてください。

  • ECMAScript6ではclassをどう書くのか、なぜclassというものが登場したのか?

  • JSを非同期ロードする方法には何があるか?

      (1) defer,只支持IE
    
      (2) async:
    
      (3) 创建script,插入到DOM中,加载完毕后callBack
    
  • document.writeとinnerHTMLの違い

    document.write只能重绘整个页面
    
    innerHTML可以重绘页面的一部分
    
  • DOM操作——ノードの追加、削除、移動、コピー、作成、検索はどうやるのか?

    (1)创建新节点
      createDocumentFragment()    //创建一个DOM片段
      createElement()   //创建一个具体的元素
      createTextNode()   //创建一个文本节点
    (2)添加、移除、替换、插入
      appendChild()
      removeChild()
      replaceChild()
      insertBefore() //在已有的子节点前插入一个新的子节点
    (3)查找
      getElementsByTagName()    //通过标签名称
      getElementsByName()    //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)
      getElementById()    //通过元素Id,唯一性
    
  • .call() と .apply() の違いは?

      例子中用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4);
    
      注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。
    
        function add(a,b)
        {
            alert(a+b);
        }
    
        function sub(a,b)
        {
            alert(a-b);
        }
    
        add.call(sub,3,1);
    
  • 配列とオブジェクトにはどのようなネイティブメソッドがあるか、列挙してください。

  • JSでクラスを実装するにはどうするか。このクラスをインスタンス化するにはどうするか

  • JavaScriptにおけるスコープと変数宣言の巻き上げは?

  • 高性能なJavascriptを書くにはどうするか?

  • どのような操作がメモリリークを引き起こすか?

  • JQueryのソースコードを見たことがありますか?その実装原理を簡単に概説できますか?

  • jQuery.fnのinitメソッドが返すthisはどのオブジェクトを指すのか?なぜthisを返すのか?

  • jqueryで配列をJSON文字列に変換し、また元に戻すにはどうするか?

  • jQueryの属性コピー(extend)の実装原理は何か、深いコピーをどう実装するか?

  • jquery.extend と jquery.fn.extend の違いは?

  • jQueryのキューはどのように実装されているか?キューはどのような場所で使えるか?

  • Jqueryのbind(), live(), delegate(), on()の違いについて述べてください。

  • JQueryで1つのオブジェクトに複数のイベントを同時にバインドできますが、これはどのように実装されているか?

  • カスタムイベントを知っていますか。jQueryのfire関数はどういう意味で、いつ使うのか?

  • jQueryはどのメソッドを通じてSizzleセレクタと結合しているか?(jQuery.fn.find()がSizzleに入る)

  • jQueryのパフォーマンスに対する最適化方法は?

  • JqueryとjQuery UIの違いは?

    *jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。
    
    *jQuery UI则是在jQuery的基础上,利用jQuery的扩展性,设计的插件。
     提供了一些常用的界面元素,诸如对话框、拖动行为、改变大小行为等等
    
  • JQueryのソースコードを見たことがありますか?その実装原理を簡単に説明できますか?

  • jqueryで配列をJSON文字列に変換し、また元に戻すにはどうするか?

jQueryにはこの機能が提供されていないので、まず2つのjQuery拡張を書く必要があります:

    $.fn.stringifyArray = function(array) {
        return JSON.stringify(array)
    }

    $.fn.parseArray = function(array) {
        return JSON.parse(array)
    }

    然后调用:
    $("").stringifyArray(array)
  • jQueryとZeptoの違いは?それぞれの使用シーンは?

  • jQueryに対する最適化方法は?

    *基于Class的选择性的性能相对于Id选择器开销很大,因为需遍历所有DOM元素。
    
    *频繁操作的DOM,先缓存起来再操作。用Jquery的链式调用更好。
     比如:var str=$("a").attr("href");
    
    *for (var i = size; i < arr.length; i++) {}
     for 循环每一次循环都查找了数组 (arr) 的.length 属性,在开始循环的时候设置一个变量来存储这个数字,可以让循环跑得更快:
     for (var i = size, length = arr.length; i < length; i++) {}
    
  • Zeptoの点透(クリック透過)問題をどう解決するか?

  • jQueryUIでコンポーネントをカスタマイズするにはどうするか?

  • 要件:ページ操作で全ページがリフレッシュされないWebサイトを実装し、ブラウザの進む・戻るにも正しく対応できるようにする。技術的な実装方案を示してください。

  • 現在のスクリプトがブラウザ環境とnode環境のどちらで実行されているかを判断するには?(Alibaba)

    通过判断Global对象是否为window,如果不为window,当前脚本没有运行在浏览器中
    
  • モバイル端末の最小タッチ領域はどのくらいの大きさか?

  • jQueryのslideUpアニメーションで、対象要素が外部イベントによって駆動される場合、マウスが外部要素のイベントを素早く連続してトリガーすると、アニメーションが遅れて繰り返し実行されます。どう処理すればよいでしょうか?

  • Scriptタグをページの最下部のbody閉じタグの前と後ろに置く違いは?ブラウザはそれらをどう解析するか?

  • モバイル端末のクリックイベントには遅延がありますが、時間はどのくらいで、なぜあるのか? この遅延をどう解決するか?(clickには300msの遅延がある。safariのダブルクリックイベントの設計を実現するため、ブラウザはダブルクリック操作かどうかを知る必要がある。)

  • 各種JSフレームワーク(Angular, Backbone, Ember, React, Meteor, Knockout...)を知っていますか?それぞれの長所と短所を述べられますか?

  • UnderscoreはどのJSネイティブオブジェクトを拡張し、どのような便利な関数メソッドを提供しているか?

  • JavaScriptにおけるスコープと変数宣言の巻き上げを説明してください。

  • どのような操作がメモリリークを引き起こすか?

    内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
    垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。
    
    setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
    闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)
    
  • JQueryで1つのオブジェクトに複数のイベントを同時にバインドできますが、これはどのように実装されているか?

  • Node.jsの適用シーンは?

  • (nodeを使えるなら)route, middleware, cluster, nodemon, pm2, server-side renderingを知っていますか?

  • BackboneのMVC実装方法を説明してください。

  • 「フロントエンドルーティング」とは何か?いつ「フロントエンドルーティング」を使うのが適しているか? 「フロントエンドルーティング」にはどのような長所と短所があるか?

  • webkitとは何か知っていますか?ブラウザの各種ツールを使ってコードをデバッグする方法を知っていますか?

  • フロントエンドコードをどうテストしますか?BDD, TDD, Unit Testを知っていますか?自分のフロントエンドプロジェクトをどうテストするか知っていますか(mocha, sinon, jasmin, qUnit..)?

  • フロントエンドテンプレーティング(Mustache, underscore, handlebars)は何をするもので、どう使うのか?

  • Handlebarsの基本的な使い方を簡潔に説明してください。

  • Handlerbarsのテンプレートに対する基本的な処理フローを簡潔に説明してください。どのようにコンパイルするのか?どのようにキャッシュするのか?

  • jsで千桁区切りを実装してください。(出典:フロントエンド農民工,ヒント:正規表現+replace)

    function commafy(num) {
         num = num + '';
         var reg = /(-?d+)(d{3})/;
    
        if(reg.test(num)){
         num = num.replace(reg, '$1,$2');
        }
        return num;
    }
    
  • ブラウザのバージョンを検出する方法にはどのようなものがありますか?

    功能检测、userAgent特征检测
    
    比如:navigator.userAgent
    //"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36
      (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36"
    
  • What is a Polyfill?

    polyfill 是“在旧版浏览器上复制标准 API 的 JavaScript 补充”,可以动态地加载 JavaScript 代码或库,在不支持这些标准 API 的浏览器中模拟它们。
    例如,geolocation(地理位置)polyfill 可以在 navigator 对象上添加全局的 geolocation 对象,还能添加 getCurrentPosition 函数以及“坐标”回调对象,
    所有这些都是 W3C 地理位置 API 定义的对象和函数。因为 polyfill 模拟标准 API,所以能够以一种面向所有浏览器未来的方式针对这些 API 进行开发,
    一旦对这些 API 的支持变成绝对大多数,则可以方便地去掉 polyfill,无需做任何额外工作。
    
  • 取り組んだプロジェクトで、polyfillソリューション(互換性処理ソリューション)を使ったり、自分で実装したことはありますか?

    比如: html5shiv、Geolocation、Placeholder 
    
  • あるDOMに同時に2つのクリックイベントをバインドします。1つはキャプチャ、もう1つはバブリングを使用します。イベントは何回実行されますか?バブリングとキャプチャのどちらが先に実行されますか?

ECMAScript6関連

  • Object.is()と従来の比較演算子「===」、「==」の違いは何ですか?

    两等号判等,会在比较时进行类型转换;
    三等号判等(判断严格),比较时不进行隐式类型转换,(类型不同则会返回false); 
    
    Object.is 在三等号判等的基础上特别处理了 NaN 、-0 和 +0 ,保证 -0 和 +0 不再相同,
    但 Object.is(NaN, NaN) 会返回 true.
    
    Object.is 应被认为有其特殊的用途,而不能用它认为它比其它的相等对比更宽松或严格。
    

フロントエンドフレームワーク関連

  • react-routerルーティングシステムの実装原理は?

  • Reactでサードパーティ製ライブラリの問題をどのように解決しますか?

その他の質問

  • 以前の会社のワークフローはどのようなものでしたか?他の人とどのように協力していましたか?部門をまたいだ協力はどのように行っていましたか?

  • これまでに遭遇した比較的難しい技術的問題は何ですか?それをどのように解決しましたか?

  • デザインパターン:singleton、factory、strategy、decoratorとは何か知っていますか?

  • よく使うライブラリは何ですか?よく使うフロントエンド開発ツールは?どのようなアプリケーションやコンポーネントを開発しましたか?

  • ページリファクタリングはどのように行いますか?

    网站重构:在不改变外部行为的前提下,简化结构、添加可读性,而在网站前端保持一致的行为。
    也就是说是在不改变UI的情况下,对网站进行优化,在扩展的同时保持一致的UI。
    
    对于传统的网站来说重构通常是:
    
    表格(table)布局改为DIV+CSS
    使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对IE6有效的)
    对于移动平台的优化
    针对于SEO进行优化
    深层次的网站重构应该考虑的方面
    
    减少代码间的耦合
    让代码保持弹性
    严格按规范编写代码
    设计可扩展的API
    代替旧有的框架、语言(如VB)
    增强用户体验
    通常来说对于速度的优化也包含在重构中
    
    压缩JS、CSS、image等前端资源(通常是由服务器来解决)
    程序的性能优化(如数据读写)
    采用CDN来加速资源加载
    对于JS DOM的优化
    HTTP服务器的文件缓存
    
  • IEが他のブラウザと異なる特徴を列挙してください。

    1、事件不同之处:
    
        触发事件的元素被认为是目标(target)。而在 IE 中,目标包含在 event 对象的 srcElement 属性;
    
        获取字符代码、如果按键代表一个字符(shift、ctrl、alt除外),IE 的 keyCode 会返回字符代码(Unicode),DOM 中按键的代码和字符是分离的,要获取字符代码,需要使用 charCode 属性;
    
        阻止某个事件的默认行为,IE 中阻止某个事件的默认行为,必须将 returnValue 属性设置为 false,Mozilla 中,需要调用 preventDefault() 方法;
    
        停止事件冒泡,IE 中阻止事件进一步冒泡,需要设置 cancelBubble 为 true,Mozzilla 中,需要调用 stopPropagation();
    
  • 「99%のWebサイトはリファクタリングが必要」と書かれているのはどの本ですか?

    网站重构:应用web标准进行设计(第2版)
    
  • グレースフルデグラデーション(graceful degradation)とプログレッシブエンハンスメント(progressive enhancement)とは何ですか?

    优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会针对旧版本的IE进行降级处理了,使之在旧式浏览器上以某种形式降级体验却不至于完全不能用。
    如:border-shadow
    
    渐进增强:从被所有浏览器支持的基本功能开始,逐步地添加那些只有新版本浏览器才支持的功能,向页面增加不影响基础浏览器的额外样式和功能的。当浏览器支持时,它们会自动地呈现出来并发挥作用。
    如:默认使用flash上传,但如果浏览器支持 HTML5 的文件上传功能,则使用HTML5实现更好的体验;
    
  • 公開鍵暗号と秘密鍵暗号について理解していますか?

    一般情况下是指私钥用于对数据进行签名,公钥用于对签名进行验证;
    HTTP网站在浏览器端用公钥加密敏感数据,然后在服务器端再用私钥解密。
    
  • Webアプリケーションがサーバーからクライアントへデータを能動的にプッシュする方法にはどのようなものがありますか?

    html5提供的Websocket
    不可见的iframe
    WebSocket通过Flash
    XHR长时间连接
    XHR Multipart Streaming
    <script>标签的长时间连接(可跨域)
    
  • Nodeの長所と短所について自分の考えはありますか?

    *(优点)因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,
      因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。
      此外,与Node代理服务器交互的客户端代码是由javascript语言编写的,
      因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。
    
    *(缺点)Node是一个相对新的开源项目,所以不太稳定,它总是一直在变,
      而且缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子。
    
  • これまでにどのようなフロントエンドパフォーマンス最適化の方法を使ったことがありますか?

      (1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。
    
      (2) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数
    
      (3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。
    
      (4) 当需要设置的样式很多时设置className而不是直接操作style。
    
      (5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。
    
      (6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。
    
      (7) 图片预加载,将样式表放在顶部,将脚本放在底部  加上时间戳。
    
      (8) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢。
      对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘IO。向前端优化指的是,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行,能在缓存服务器上直接返回的不要到应用服务器,程序能直接取得的结果不要到外部取得,本机内能取得的数据不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据库查询。减少数据库操作指减少更新次数、缓存结果减少查询次数、将数据库执行的操作尽可能的让你的程序完成(例如join查询),减少磁盘IO指尽量不使用文件系统作为缓存、减少读写文件次数等。程序优化永远要优化慢的部分,换语言是无法“优化”的。
    
  • HTTPステータスコードにはどのようなものがありますか?それぞれどのような意味ですか?

        简单版
        [
            100  Continue   继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
            200  OK         正常返回信息
            201  Created    请求成功并且服务器创建了新的资源
            202  Accepted   服务器已接受请求,但尚未处理
            301  Moved Permanently  请求的网页已永久移动到新位置。
            302 Found       临时性重定向。
            303 See Other   临时性重定向,且总是使用 GET 请求新的 URI。
            304  Not Modified 自从上次请求后,请求的网页未修改过。
    
            400 Bad Request  服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
            401 Unauthorized 请求未授权。
            403 Forbidden   禁止访问。
            404 Not Found   找不到如何与 URI 相匹配的资源。
    
            500 Internal Server Error  最常见的服务器端错误。
            503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。
        ]
    
      完整版
      1**(信息类):表示接收到请求并且继续处理
        100——客户必须继续发出请求
        101——客户要求服务器根据请求转换HTTP协议版本
    
      2**(响应成功):表示动作被成功接收、理解和接受
        200——表明该请求被成功地完成,所请求的资源发送回客户端
        201——提示知道新文件的URL
        202——接受和处理、但处理未完成
        203——返回信息不确定或不完整
        204——请求收到,但返回信息为空
        205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
        206——服务器已经完成了部分用户的GET请求
    
      3**(重定向类):为了完成指定的动作,必须接受进一步处理
        300——请求的资源可在多处得到
        301——本网页被永久性转移到另一个URL
        302——请求的网页被转移到一个新的地址,但客户访问仍继续通过原始URL地址,重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。
        303——建议客户访问其他URL或访问方式
        304——自从上次请求后,请求的网页未修改过,服务器返回此响应时,不会返回网页内容,代表上次的文档已经被缓存了,还可以继续使用
        305——请求的资源必须从服务器指定的地址得到
        306——前一版本HTTP中使用的代码,现行版本中不再使用
        307——申明请求的资源临时性删除
    
      4**(客户端错误类):请求包含错误语法或不能正确执行
        400——客户端请求有语法错误,不能被服务器所理解
        401——请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
        HTTP 401.1 - 未授权:登录失败
          HTTP 401.2 - 未授权:服务器配置问题导致登录失败
          HTTP 401.3 - ACL 禁止访问资源
          HTTP 401.4 - 未授权:授权被筛选器拒绝
        HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败
        402——保留有效ChargeTo头响应
        403——禁止访问,服务器收到请求,但是拒绝提供服务
        HTTP 403.1 禁止访问:禁止可执行访问
          HTTP 403.2 - 禁止访问:禁止读访问
          HTTP 403.3 - 禁止访问:禁止写访问
          HTTP 403.4 - 禁止访问:要求 SSL
          HTTP 403.5 - 禁止访问:要求 SSL 128
          HTTP 403.6 - 禁止访问:IP 地址被拒绝
          HTTP 403.7 - 禁止访问:要求客户证书
          HTTP 403.8 - 禁止访问:禁止站点访问
          HTTP 403.9 - 禁止访问:连接的用户过多
          HTTP 403.10 - 禁止访问:配置无效
          HTTP 403.11 - 禁止访问:密码更改
          HTTP 403.12 - 禁止访问:映射器拒绝访问
          HTTP 403.13 - 禁止访问:客户证书已被吊销
          HTTP 403.15 - 禁止访问:客户访问许可过多
          HTTP 403.16 - 禁止访问:客户证书不可信或者无效
        HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效
        404——一个404错误表明可连接服务器,但服务器无法取得所请求的网页,请求资源不存在。eg:输入了错误的URL
        405——用户在Request-Line字段定义的方法不允许
        406——根据用户发送的Accept拖,请求资源不可访问
        407——类似401,用户必须首先在代理服务器上得到授权
        408——客户端没有在用户指定的时间内完成请求
        409——对当前资源状态,请求不能完成
        410——服务器上不再有此资源且无进一步的参考地址
        411——服务器拒绝用户定义的Content-Length属性请求
        412——一个或多个请求头字段在当前请求中错误
        413——请求的资源大于服务器允许的大小
        414——请求的资源URL长于服务器允许的长度
        415——请求资源不支持请求项目格式
        416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
        417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长。
    
      5**(服务端错误类):服务器不能正确执行一个正确的请求
        HTTP 500 - 服务器遇到错误,无法完成请求
          HTTP 500.100 - 内部服务器错误 - ASP 错误
          HTTP 500-11 服务器关闭
          HTTP 500-12 应用程序重新启动
          HTTP 500-13 - 服务器太忙
          HTTP 500-14 - 应用程序无效
          HTTP 500-15 - 不允许请求 global.asa
          Error 501 - 未实现
      HTTP 502 - 网关错误
      HTTP 503:由于超载或停机维护,服务器目前无法使用,一段时间后可能恢复正常
    
  • URLを入力してからページの読み込み・表示が完了するまで、この過程で何が起こりますか?(流れは詳しく説明すればするほど良いです)

      注:这题胜在区分度高,知识点覆盖广,再不懂的人,也能答出几句,
      而高手可以根据自己擅长的领域自由发挥,从URL规范、HTTP协议、DNS、CDN、数据库查询、
      到浏览器流式解析、CSS规则构建、layout、paint、onload/domready、JS执行、JS API绑定等等;
    
      详细版:
        1、浏览器会开启一个线程来处理这个请求,对 URL 分析判断如果是 http 协议就按照 Web 方式来处理;
        2、调用浏览器内核中的对应方法,比如 WebView 中的 loadUrl 方法;
        3、通过DNS解析获取网址的IP地址,设置 UA 等信息发出第二个GET请求;
        4、进行HTTP协议会话,客户端发送报头(请求报头);
        5、进入到web服务器上的 Web Server,如 Apache、Tomcat、Node.JS 等服务器;
        6、进入部署好的后端应用,如 PHP、Java、JavaScript、Python 等,找到对应的请求处理;
        7、处理结束回馈报头,此处如果浏览器访问过,缓存上有对应资源,会与服务器最后修改时间对比,一致则返回304;
        8、浏览器开始下载html文档(响应报头,状态码200),同时使用缓存;
        9、文档树建立,根据标记请求所需指定MIME类型的文件(比如css、js),同时设置了cookie;
        10、页面开始渲染DOM,JS根据DOM API操作DOM,执行事件绑定等,页面显示完成。
    
      简洁版:
        浏览器根据请求的URL交给DNS域名解析,找到真实IP,向服务器发起请求;
        服务器交给后台处理完成后返回数据,浏览器接收文件(HTML、JS、CSS、图象等);
        浏览器对加载到的资源(HTML、JS、CSS等)进行语法解析,建立相应的内部数据结构(如HTML的DOM);
        载入解析到的资源文件,渲染页面,完成。
    
  • 一部の地域のユーザーからWebサイトが非常に重いと報告があります。考えられる原因と解決方法は何ですか?

  • アプリを開いてからコンテンツが更新・表示されるまでの過程全体で何が起こりますか?遅いと感じる場合、どうやって問題を特定し、どう解決しますか?

  • フロントエンド以外にどのような技術を理解していますか?あなたの最も優れたスキルは何ですか?

  • 使い慣れて自在に扱えるエディタ&開発環境はどのようなものですか?

    Sublime Text 3 + 相关插件编写前端代码
    Google chrome 、Mozilla Firefox浏览器 +firebug 兼容测试和预览页面UI、动画效果和交互功能
    Node.js+Gulp
    git 用于版本控制和Code Review
    
  • フロントエンドエンジニアという職種をどのように理解していますか?その将来性はどうなると思いますか?

    前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近。
    1、实现界面交互
    2、提升用户体验
    3、有了Node.js,前端可以实现服务端的一些事情
    
    
    前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好,
    
    参与项目,快速高质量完成实现效果图,精确到1px;
    
    与团队成员,UI设计,产品经理的沟通;
    
    做好的页面结构,页面重构和用户体验;
    
    处理hack,兼容、写出优美的代码格式;
    
    针对服务器的优化、拥抱最新前端技术。
    
  • Web App、hybrid App、Native Appについてどのように考えますか?

  • モバイルフロントエンド開発についての理解は?(Webフロントエンド開発との主な違いは何ですか?)

  • 残業についてどう思いますか?

    残業はお金を借りるようなもの。原則は——「急を救い、貧を救わず」であるべきだ。
  • 普段どのようにプロジェクトを管理していますか?

    先期团队必须确定好全局样式(globe.css),编码模式(utf-8) 等;
    
    编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行);
    
    标注样式编写人,各模块都及时标注(标注关键样式调用的地方);
    
    页面进行标注(例如 页面 模块 开始和结束);
    
    CSS跟HTML 分文件夹并行存放,命名都得统一(例如style.css);
    
    JS 分文件夹存放 命名以该JS功能为准的英文翻译。
    
    图片采用整合的 images.png png8 格式文件使用 尽量整合在一起使用方便将来的管理
    
  • 突発的な大規模コンカレンシーアーキテクチャをどのように設計しますか?

  • チームの人手が不足しており、機能コードを書き終えるのにすでに残業が必要な場合、フロントエンドコードのテストを行いますか?

  • 最近流行しているものをいくつか教えてください。よく訪れるサイトはどこですか?

        ES6\WebAssembly\Node\MVVM\Web Components\React\React Native\Webpack 组件化
    
  • SEOとは何か、そしてどのように最適化するか知っていますか?さまざまなメタデータの意味を知っていますか?

  • モバイル(Android/iOS)でユーザーエクスペリエンスを良くするにはどうすればよいですか?

    明確な視覚的縦線、情報のグループ化、徹底的な引き算、入力を代替する選択、ラベルとテキストの配置方法、平文によるパスワード確認、合理的なキーボード利用。
  • あなたが開発したモバイルAPPプロジェクトの開発プロセスを簡単に説明してください。

  • 現在のチームでどのようなポジションを担っていますか?どのような明確な貢献をしましたか?

  • フルスタックエンジニア(Full Stack developer)とはどのようなものだと思いますか?

  • あなたが最も誇りに思う作品を紹介してください。

  • 自分の技術ブログを持っていますか?どの技術を使っていますか?

  • フロントエンドセキュリティについてどのように考えますか?

  • Webインジェクション攻撃について理解していますか?原理を説明してください。最も一般的な2つの攻撃(XSSとCSRF)についてはどの程度理解していますか?

  • プロジェクトで遭遇した印象的な技術的課題にはどのようなものがありますか?具体的にどのような問題で、どう解決しましたか?

  • 最近何を学んでいますか?

  • あなたの長所は何ですか?短所は何ですか?

  • フロントエンドチームをどのように管理しますか?

  • 最近何を学んでいますか?今後3〜5年の自分の計画について話せますか?

転載元:@markyun
原文:https://github.com/markyun/My-blog/tree/master/Front-end-Developer-Questions/Questions-and-Answers