麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > WEB開發 > 正文

【答阿里寒冬面試題】呵呵,大神的面試題就是好!

2024-04-27 14:33:30
字體:
來源:轉載
供稿:網友
【答阿里寒冬面試題】呵呵,大神的面試題就是好!

前言

今天微博看到了寒冬大神的面試題,覺得挺有意思的,這里就做一點解答

http://weibo.com/1196343093/Bhj510t50

談談你對CSS布局的理解

講講輸入完網址按下回車,到看到網頁這個過程中發生了什么。

談談你對Web前端組件化的理解,Web Component會帶來怎樣的影響

談談你對前端資源下載性能優化的經驗和思考

現在有很多的MV*框架,你對它們有什么看法

iOS體驗好在哪里,Web能趕上么?

網頁游戲怎么做?

Hybrid技術應當如何應用?

你最愛的前端框架是什么,為什么?

首先老師的題目都很大,不好答,我這里技術有缺陷,答得不好大家不要噴我,可以好好教育我嘛

淺談CSS布局

概述

從網頁表現來看,HTML是實體本身,要實現各種優雅的布局的需要依賴CSSHTML元素兩大類型為塊級元素與行內元素,網頁的布局一般由塊級元素組織,元素不同便有不一樣的表現要實現布局就要用到與布局有關的CSS屬性為position,常用屬性為static、absoulute、fixed、relativeposition的作用是改變元素的狀態,由文檔流轉為相對文檔流或者脫離文檔流元素(定位元素)當然float也能引發塊級元素脫離文檔流,但是其表現與原理與上面不一致,而且要慎用float布局于是這里便已經有三種“流”了,不同的布局元素會處于不同的“執行環境”,在“執行環境”中才能方便的對其進行管理這個管理的依據便是BFC(塊級作用域上下文),根據我粗淺的理解是,BFC也就是瀏覽器提供的一塊渲染區文檔流的元素處于一個渲染區,而定位元素處于另一層渲染區,float元素又會與之不同各個渲染區中的元素具有其定位規則,最簡單的便是文檔流中的元素,遵循其塊級元素獨占一行+盒模型的規則:① 塊級元素獨占一行,并且具有框(經典盒模型)② 塊級元素間由margin屬性分割,并且垂直方向的margin會取其大者③ 塊級元素必定左靠這父級塊級元素左邊框(包含塊,布局上下文)④ float元素不能影響塊級元素的BFC區域,但是其高度會參與計算創建BFC的方式有:① float② overflow③ display(使行內元素具有BFC)④ position基于此,我們便可以實現我們的布局了,這里以最簡單的兩列布局為例(左邊導航,右邊內容主體)由于先出現的DOM先展示,所以內容優先原則,我們會將主體dom先展示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>  <title></title>  <style>    * { margin: 0; padding: 0; }    div { border: 1px solid black; }    #sidebar { position: absolute; left: 0; top: 0; width: 95px; }    #content { margin-left: 100px; }  </style>  <script src="../jquery-1.7.1.js" type="text/javascript"></script></head><body>  <div id="content">    主體  </div>  <div id="sidebar">    導航  </div></body></html>
這里從理論上說,便是觸發了siderbar元素的定位特性,其BFC與文檔流不相關了當然,這里siderbar可以使用float實現,但是float本身應該用于處理文字與圖片包裹的需求,我們本著職責分離的想法就別那樣干了而且使用float還會引起元素坍塌,這里還要費勁去處理清除浮動

行內元素

行內元素的處理比較復雜,首先行內元素的高度由其line-height決定,所以不要妄想其設置一個行內元素的高度,這會引起意想不到的問題舉一個例子來說,很多大型網站都會具有統計代碼,而此類統計代碼一般是以img做請求發出,這個時候可能會導致10px左右的白屏問題這個就是妄想設置行內元素高度的結果,獨立的inline元素出現時,會為其創建一個line boxes作為容器(文字框)一行文字一個line Boxes,一行高度由其中最高的行內元素確定,上例中有一個height為0的img,卻為其生成了一個高度為10的行高下面的代碼中,div會被行內元素撐開,其高度會由span中line-height高者決定
<div>  <span id="span1">主體 </span><span id="span2">導航 </span></div>

移動端的建議

① 移動端的文檔流渲染效率最高,應該避免大范圍使用定位元素,在小米,三星等低端下定位元素可能渲染不出來(解決方案是引起回流)② img元素加載失敗時候會有邊框,需要搞掉③ 慎用fixed屬性,fixed對于移動端來說有點頭疼,首先會有文本聚焦fixed定位錯亂問題,其次在ios4的屏幕中,如果加上瀏覽器上下工具條,再用fixed可視區域會變得很小④ ios是按塊渲染的,布局時候可以分塊,不會渲染可視區域外的內容⑤ 動畫或者border-radius、box-shadow等屬性皆會使手機耗電加劇(但是這個好像與我們沒關系)⑥ fixed元素為其設置html可能不響應或者說渲染看不見,常見于ipod或者低端android⑦ 當然能在布局上用上一些語義化標簽自然是好事,這樣對SEO或者特殊人事有一定幫助,比如strong、article之類的

總結

因為我本身專注點在js對css了解較少只能做此解析,請盡量拍磚指正

一次請求的完整流程我們一次網址輸入會發起一連串連鎖效應,但是因為我這邊對HTTP一塊不是十分熟悉,只能解釋自己了解的一次URl輸入后,其流程如下,首先是請求響應的流程:1 解析URL,解析域名生成唯一IP地址,開始搜索服務器2 找到服務器后,服務器接收請求被服務器進程攔截;一般而言,.net的程序會被IIS處理,java會被jBoss或者tomcat處理3 服務器處理請求,如果靜態文件的話直接返回,若是.net或者java等動態腳本會經過服務器編譯,執行其中的服務器端代碼4 若是服務器端具有數據庫操作的話,這里還需要與DB建立連接,操作數據庫5 服務器處理結束后,生成最終的靜態HTML字符串返回,開始向請求者(客戶端)返回請求字符串,一次返回量過大就會分批次,這是一個優化點6 服務器響應到達瀏覽器,瀏覽器開始處理請求,進入瀏覽器解析流程

請求返回后,便進入了我們關注的前端模塊

簡單來說,瀏覽器會解析HTML生成DOM Tree,其次會根據CSS生成CSS Rule Tree,而Javascript又可以根據DOM API操作DOM上面的文字描述的很簡單,事實上發生的事情,卻很復雜,這里與代碼實現也很有關聯,但是有幾個關鍵點:頁面一定會等所有的HTML結構與CSS加載下來才渲染(webkit內核)比如我們這里使用fiddler限制其外鏈加載,我們為其限速為10s
<html xmlns="http://www.w3.org/1999/xhtml"><head>  <title></title>  <style>    div { border: 1px solid black; }    a { color: Red; }  </style></head><body>  <div>    <a id="span1" >主體 </a><span id="span2">導航 </span>  </div>  <link href=" http://kb.cnblogs.com/style/common.css" rel="stylesheet" /></body></html>

我們看到事實上62ms后頁面整體dom結構就加載好了,這個時候我們是可以使用js操作dom結構的,但這里一個重點是:CSS外鏈加載會阻塞js的執行,并且重置CSS會引起瀏覽器的回流或者重繪,也就是:css外鏈會阻塞整個頁面的渲染(顯示),但是其DOM結構是可操作的,中間如果有阻塞性的操作,比如alert的話會強制瀏覽器繪制頁面上面的特性與css外鏈的順序無關,并且有幾個樣式相關的操作,便會執行幾次,最終采用最近或者優先級最高的樣式
<html xmlns="http://www.w3.org/1999/xhtml"><head>  <title></title>  <style>    div { border: 1px solid black; }    a { color: Red; }  </style></head><body>  <div>    <a id="span1" >主體 </a><span id="span2">導航 </span>  </div>  <script>    document.getElementById('span2').innerHTML = '測試';    alert(1)   </script>  <script>    alert(2)   </script>  <link href=" http://kb.cnblogs.com/style/common.css" rel="stylesheet" /></body></html>

一個需要注意的地方是,ChromeFirefox或者IE表現不一致,firefox與IE都是先渲染頁面最后等段CSS下來后再次渲染所以我們很多同學面試時說將css外鏈放到header中,而不是body中的理解都是一知半解,這里真實的處理辦法是異步插入css外鏈才行至少對于chrome需要做這個處理,否則頁面就是出不來,因為多數手機是webkit內核,保不齊這里出多少事情根據以上流程后,頁面也基本出來了,這里簡述其流程① 生成DOM樹② 計算CSS樣式③ 構建render Tree④ reflow,定位元素位置與大小⑤ 繪制頁面上面過程如果js操作dom或者終結有一段style都會引起reflow,由于img會在文檔加載結束后加載,可能會撐開頁面,導致回流,所以一般需要對img設置尺寸對于這塊的優化各位自己來吧,我這里便只能理解到這個程度了PS:事實上chrome獲得請求時本身也有幾個事件點,這里可以用其開發性能插件,但對前端基本透明,我們這里不關注了

MVC與組件化這里我將2塊題目合到一起了,我覺得這里可以連到一起做說明

View分離

很多程序的變革集中積累在VIEW一塊的處理,原因是這里的需求是最復雜的,就View分離來說,最成功的我覺得是aspasp.net的變革最初的ASP程序,會將C#代碼寫在asp代碼中,這樣的結果便是頁面里面既有html又有C#代碼,甚至一個js循環中會嵌套出C#的循環PS:你一定要相信,那個時候不會有js分成的概念,因為需求達不到所謂的View分離便是,程序員確實受不了維護顯示與邏輯同時處于一個頁面的程序了,于是他選擇了改變,改變的結果便是拆分View分離一大核心思維便是,分得開,合得攏,他們這里引入一個codebehind方案將一個頁面文件分成兩個(事實上是三個)

① index.apsx

② index.aspx.cs

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="_00綜合_11mvc_index" %>
public partial class _00綜合_10doc_write_index : System.Web.UI.Page{    PRotected void Page_Load(object sender, EventArgs e)    {    }}

最終這兩個文件會和到一起,兩個文件之間也可通信,而通信的橋梁是.net一個個被人詬病的組件,比如:

① button組件

② datalist

③ label組件

④ 偉大的gridview

各個組件在C#層面上會擁有一個ID進行約束,.cs文件便可以根據該ID為其注冊各個事件,這個與javascript的模型便非常類似了

View分離的第一個優點便是,用戶的界面變得干凈了,不會有代碼混雜的現象,第二個優點便是業務端的代碼可以再分離,從而多了數據層、業務層等各個概念

而組件的出現讓.net變成了世界上開發最快的語言,這點誰也不可否認,而這些都是前端MVC出現或者組件出現的意義

前端View分離

與asp當初的情況一致,js進行dom操作或者字符串拼接的目的事實上就是想形成一個可供展示的View,前端jser已經再也不能忍受這種代碼了:

很多時候,我們想將對應的模板單獨的放到一個地方,每次樣式若是有更改,只需要更改那個文件即可,只要與之呼應的“ID”不丟失即可,比如這樣的結構和代碼:

View Code
<div class="cui-pop-box">  <div class="cui-hd">      <%=title%>  </div>  <div class="cui-bd">    <div class="cui-error-tips">      <%=content%></div>    <div class="cui-roller-btns">      <% for(var i = 0, len = btns.length; i < len; i++ ) {%>      <div class="cui-flexbd <%=btns[i].className%>">        <%=btns[i].name%></div>      <% } %>    </div>  </div></div>

這樣做的道理是,這個樣子做到了表現與行為分離,我們分得開,然后回根據基類的一個機制,讓他們最終合到一塊,以完成功能

這里我們依舊需要強調一個前提:“ID”關聯不可丟失,否則“行為”將不可表現,只要兩者間關聯不丟,這里便可輕松滿足以下邏輯:

① CSS名修改(非標識性CSS名)

② 標簽改變

③ 描述性文字改變

......

MVC在前端

重構一書有說,重復性或者類似重復性的代碼應該抽象為一個方法,程序員也不傻,在重復使用需要提示框需求后便會學會形成alert組件

組件的出現是代碼抽象,代碼重用的標識,這個樣子既可以減少工作量也可以減少代碼容量,而組件的實現與MVC思維的很好詮釋

比如以下代碼:

View Code

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品午夜未成人免费观看 | 日本在线不卡一区二区 | 亚洲精品一区二区三区大胸 | 成人福利视频网站 | 永久免费黄色片 | 国产91丝袜在线熟 | 99热1| 久久影院一区二区三区 | 成人福利网 | 亚洲va久久久噜噜噜久久男同 | 国产亚洲区 | 久久久久久久91 | 美女在线视频一区二区 | 国产精品久久久久久久久久久久久久久久 | 成人毛片视频免费看 | xxxx18韩国护士hd老师 | 在线免费日韩 | 精品一区二区三区网站 | 国产一级不卡毛片 | 日本教室三级在线看 | 久久精品欧美电影 | 亚洲精品免费播放 | 午夜视频在线在免费 | 国产毛毛片一区二区三区四区 | 亚洲九草 | 1024亚洲天堂 | 久色免费视频 | 久久久日韩精品一区二区三区 | 色诱亚洲精品久久久久久 | 久久宗合色 | 懂色粉嫩av久婷啪 | 国内精品免费一区二区2001 | 黄色网址免费在线 | 日韩视频一区 | 二区三区四区视频 | 一级做受毛片免费大片 | 色网在线视频 | a一级黄| 黄色片视频免费观看 | 国产91中文字幕 | 国产91一区二区三区 |