2016阿里面試題整理與分析(更新中。。。)


2016阿里前端面試題及其分析

分析持續更新中,非常歡迎您在評論中給出您的答案或者對我的分析有看法的。

1.以下對於HTTP和HTTPS描述錯誤的是

HTTP使用的80端口,HTTPS使用的是443端口
HTTP明文傳輸,HTTPS使用ssl加密
HTTPS中的SSL加密方式為MD5
HTTPS協議需要到ca申請證書 

分析:

2.margin: 5px 10px 15px 20px; 請問左邊距的值是多少

5px
10px
15px
20px 

分析:

CSS margin 屬性

設置外邊距的最簡單的方法就是使用 margin 屬性。

margin 屬性接受任何長度單位,可以是像素、英寸、毫米或 em。

margin 可以設置為 auto。更常見的做法是為外邊距設置長度值。下面的聲明在 h1 元素的各個邊上設置了 1/4 英寸寬的空白:

h1 {margin : 0.25in;}

下面的例子為 h1 元素的四個邊分別定義了不同的外邊距,所使用的長度單位是像素 (px):

h1 {margin : 10px 0px 15px 5px;}

與內邊距的設置相同,這些值的順序是從上外邊距 (top) 開始圍着元素順時針旋轉的:

margin: top right bottom left

另外,還可以為 margin 設置一個百分比數值:

p {margin : 10%;}

百分數是相對於父元素的 width 計算的。上面這個例子為 p 元素設置的外邊距是其父元素的 width 的 10%。

margin 的默認值是 0,所以如果沒有為 margin 聲明一個值,就不會出現外邊距。但是,在實際中,瀏覽器對許多元素已經提供了預定的樣式,外邊距也不例外。例如,在支持 CSS 的瀏覽器中,外邊距會在每個段落元素的上面和下面生成“空行”。因此,如果沒有為 p 元素聲明外邊距,瀏覽器可能會自己應用一個外邊距。當然,只要你特別作了聲明,就會覆蓋默認樣式。

值復制

還記得嗎?我們曾經在前兩節中提到過值復制。下面我們為您講解如何使用值復制。

有時,我們會輸入一些重復的值:

p {margin: 0.5em 1em 0.5em 1em;}

通過值復制,您可以不必重復地鍵入這對數字。上面的規則與下面的規則是等價的:

p {margin: 0.5em 1em;}

這兩個值可以取代前面 4 個值。這是如何做到的呢?CSS 定義了一些規則,允許為外邊距指定少於 4 個值。規則如下:

  • 如果缺少左外邊距的值,則使用右外邊距的值。
  • 如果缺少下外邊距的值,則使用上外邊距的值。
  • 如果缺少右外邊距的值,則使用上外邊距的值。

下圖提供了更直觀的方法來了解這一點:

CSS 值復制

換句話說,如果為外邊距指定了 3 個值,則第 4 個值(即左外邊距)會從第 2 個值(右外邊距)復制得到。如果給定了兩個值,第 4 個值會從第 2 個值復制得到,第 3 個值(下外邊距)會從第 1 個值(上外邊距)復制得到。最后一個情況,如果只給定一個值,那么其他 3 個外邊距都由這個值(上外邊距)復制得到。

利用這個簡單的機制,您只需指定必要的值,而不必全部都應用 4 個值,例如:

h1 {margin: 0.25em 1em 0.5em;}    /* 等價於 0.25em 1em 0.5em 1em */
h2 {margin: 0.5em 1em;}        /* 等價於 0.5em 1em 0.5em 1em */
p {margin: 1px;}         /* 等價於 1px 1px 1px 1px */

這種辦法有一個小缺點,您最后肯定會遇到這個問題。假設希望把 p 元素的上外邊距和左外邊距設置為 20 像素,下外邊距和右外邊距設置為 30 像素。在這種情況下,必須寫作:

p {margin: 20px 30px 30px 20px;}

這樣才能得到您想要的結果。遺憾的是,在這種情況下,所需值的個數沒有辦法更少了。

再來看另外一個例子。如果希望除了左外邊距以外所有其他外邊距都是 auto(左外邊距是 20px):

p {margin: auto auto auto 20px;}

同樣的,這樣才能得到你想要的效果。問題在於,鍵入這些 auto 有些麻煩。如果您只是希望控制元素單邊上的外邊距,請使用單邊外邊距屬性。

單邊外邊距屬性

您可以使用單邊外邊距屬性為元素單邊上的外邊距設置值。假設您希望把 p 元素的左外邊距設置為 20px。不必使用 margin(需要鍵入很多 auto),而是可以采用以下方法:

p {margin-left: 20px;}

 

您可以使用下列任何一個屬性來只設置相應上的外邊距,而不會直接影響所有其他外邊距:

  • margin-top
  • margin-right
  • margin-bottom
  • margin-left

一個規則中可以使用多個這種單邊屬性,例如:

h2 {
  margin-top: 20px;
  margin-right: 30px;
  margin-bottom: 30px;
  margin-left: 20px;
  }

當然,對於這種情況,使用 margin 可能更容易一些:

p {margin: 20px 30px 30px 20px;}

不論使用單邊屬性還是使用 margin,得到的結果都一樣。一般來說,如果希望為多個邊設置外邊距,使用 margin 會更容易一些。不過,從文檔顯示的角度看,實際上使用哪種方法都不重要,所以應該選擇對自己來說更容易的一種方法。

提示和注釋

提示:Netscape 和 IE 對 body 標簽定義的默認邊距(margin)值是 8px。而 Opera 不是這樣。相反地,Opera 將內部填充(padding)的默認值定義為 8px,因此如果希望對整個網站的邊緣部分進行調整,並將之正確顯示於 Opera 中,那么必須對 body 的 padding 進行自定義。

3.以下哪個標簽不是HTML5語義化標簽

mark
time
figure
date 

分析:

新增的元素

結構元素:

section
article
aside
header
hgroup
footer
nav
figure  

其他元素:

video
audio
embed
mark
progress
time
ruby
rt
rp
wbr
canvas
command
details/summary
datalist/input
datagrid
keygen
output
source
menu

新增的input元素的類型

email
url
number
range
Date Pickers:
data
month
week
time
datetime (UTC)
datetime-local (local)

新增的屬性:

表單相關屬性:

autofocus -> input(type=text),select,testarea,button
placeholder -> input(type=text),testarea
form -> input,output,select,testarea,button,fieldset
required -> input(type=text),textarea
autocomplete,min,max,multiple,pattern,step ->input
list,autocomplete -> datalist
formaction,formenctype,formmethod,formnovalidate,formtarget -> input,button
novalidate -> input,button,form

鏈接相關屬性:

media -> a,area
hreflang,rel -> area
sizes -> link
target -> base

其他屬性:

reversed -> ol
charset -> meta
type,label -> menu
scoped -> style
async -> script
manifest -> html
sandbox,seamless,srcdoc -> iframe
 

4.下面哪個不屬於CSS中表示尺寸的單位?

px、%
em、rem
mm、ck
pt、pc
    

分析:

這里引用的是Jorux的“95%的中國網站需要重寫CSS”的文章, 題目有點嚇人,但是確實是現在國內網頁制作方面的一些缺陷。我一直也搞不清楚px與em之間的關系和特點,看過以后確實收獲很大。平時都是用px來定義字 體,所以無法用瀏覽器字體放大的功能,而國外大多數網站都可以在IE下使用。因為:

 

  1. IE無法調整那些使用px作為單位的字體大小;

  2. 國外的大部分網站能夠調整的原因在於其使用了em作為字體單位;

  3. Firefox能夠調整px和em,但是96%以上的中國網民使用IE瀏覽器(或內核)。

 

  px像素(Pixel)是相對長度單位,像素px是相對於顯示器屏幕分辨率而言的。(引自CSS2.0手冊)

  em是相對長度單位,相對於當前對象內文本的字體尺寸。如當前對行內文本的字體尺寸未被人為設置,則相對於瀏覽器的默認字體尺寸。(引自CSS2.0手冊)

 

  字體單位使用em能支持IE6下的字體縮放,在頁面中按ctrl+滾輪,字體以px為單位的網站沒有反應。

  px是絕對單位,不支持IE的縮放。

  em是相對單位,網頁中的文字能放大和縮小。將行距(line-height),和縱向高度的單位都用em。保證縮放時候的整體性。

  任意瀏覽器的默認字體高都是16px。所有未經調整的瀏覽器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。為了簡化font-size的換算,需要在css中的body選擇器中聲明 Font-size=62.5%,這就使em值變為 16px*62.5%=10px, 這樣12px=1.2em, 10px=1em, 也就是說只需要將你的原來的px數值除以10,然后換上em作為單位就行了。

  em有如下特點:

  1. em的值並不是固定的;

  2. em會繼續父級元素的字體大小。

  所以我們在寫CSS的時候,需要注意:

  1. body選擇器中聲明Font-size=62.5%;(Font-size=63%;用於ie6兼容)

  2. 將你的原來的px數值除以10,然后換上em作為單位;

  3. 重新計算那些被放大的字體的em數值。避免字體大小的重復聲明。

 

  也就是避免1.2 * 1.2= 1.44的現象。比如說你在#content中聲明了字體大小為1.2em,那么在聲明p的字體大小時就只能是1em,而不是1.2em, 因為此em非彼em,它因繼續#content的字體高而變為了1em=12px。

  但是12px漢字例外,就是由以上方法得到的12px(1.2em)大小的漢字在IE中並不等於直接用12px定義的字體大小,而是稍大一點。這個問題 Jorux已經解決,只需在body選擇器中把62.5%換成63%就能正常顯示了。原因可能是IE處理漢字時,對於浮點的取值精確度有限。不知道有沒有 其他的解釋。

 

  單位pt的說明

  在印刷排版中,point是一個絕對值,它等於1/72英寸,可以用尺子丈量的,物理的英寸。但是在css中pt含義卻並非如此。因為我們的顯示器 被分割為了一個個的像素,單個像素只能有一種顏色 (為了簡化,這里暫不討論次像素反鋸齒技術),要在屏幕上顯示,必須先把以 pt 為單位的長度轉換為以像素為單位的長度,這個轉換的媒介,就是 DPI (事實上,這里的所謂的 DPI,是操作系統和瀏覽器中使用的術語,即為 PPI, pixels per inch,和掃描儀、打印機、數碼相機中的 DPI 是不同的概念)。

 

  例如,無論在哪個操作系統中,Firefox 瀏覽器默認的 DPI 都是 96,那么實際上 9pt = 9 * 1/72 * 96 = 12px。

  所以,雖然“DPI”中的“I”和“1pt 等於 1/72 inch”中的“inch”,都不代表物理上的英寸,但這兩個單位互相之間是相等的,也就在相乘中約掉了。

  那么,真實的物理長度怎么計算呢?請拿出一把尺子,丈量你的顯示器的可見寬度 (我這里是 11.2992 英寸),除以橫向分辨率 (我這里是 1024 像素),得到的就是每個像素的物理長度。

 

  現在我們可以回答這樣一個問題,網頁上 9pt 的字體究竟占用了多寬的空間?答案是:  9 * 1/72 * 96 * 11.2992 / 1024 = 0.1324 英寸 = 0.3363 厘米。

  雖然pt是絕對單位,但是那只是針對輸出設備而言的,在文字排版工具(word,abobe)中是非常有用的字體單位。不管顯示器的分辨率是多少,打印在紙面上的結果是一樣的。

  但是網頁主要為了屏幕顯示,而不是為了打印等其他需要的。而px能夠精確地表示元素在屏幕中的位置和大小。

  當然。在dpi是96的情況下,9pt=12px。

5.下面有關於JavaScript事件描述,哪個是錯誤的?

click、mouseenter、blur事件是可以冒泡的
mouseenter、mouseover在高級瀏覽器下是有區別的
事件流是分為捕獲和冒泡兩個階段
在chrome中,可以使用addEventListener來給元素添加事件
    

分析:

6.把一個字面量對象,變成某個類的實例

function Type() {}
var a = {};
______________
// a instanceof Type === true

 

分析:

首先感謝@double Net的回復。

a.__proto__ = new Type;

那么,接下來,為什么是這樣呢。進入分析正題:

一、prototype和__proto__的概念

prototype是函數的一個屬性(每個函數都有一個prototype屬性),這個屬性是一個指針,指向一個對象。它是顯示修改對象的原型的屬性。

__proto__是一個對象擁有的內置屬性(請注意:prototype是函數的內置屬性,__proto__是對象的內置屬性),是JS內部使用尋找原型鏈的屬性。

用chrome和FF都可以訪問到對象的__proto__屬性,IE不可以。

二、new 的過程

var Person = function(){};
var p = new Person();

new的過程拆分成以下三步:

(1) var p={}; 也就是說,初始化一個對象p
(2) p.__proto__ = Person.prototype;
(3) Person.call(p); 也就是說構造p,也可以稱之為初始化p

關鍵在於第二步,我們來證明一下:

var Person = function(){};
var p = new Person();
alert(p.__proto__ === Person.prototype);

這段代碼會返回true。說明我們步驟2是正確的。

三、示例

    var Person = function(){};
    Person.prototype.sayName = function() {
        alert("My Name is Jacky");
    };

    Person.prototype.age = 27;
    var p = new Person();
    p.sayName();

 

p是一個引用指向Person的對象。我們在Person的原型上定義了一個sayName方法和age屬性,當我們執行p.age時,會先在this的內部查找(也就是構造函數內部),如果沒有找到然后再沿着原型鏈向上追溯。

這里的向上追溯是怎么向上的呢?這里就要使用__proto__屬性來鏈接到原型(也就是Person.prototype)進行查找。最終在原型上找到了age屬性。

所以此題也可以:

a.__proto__ = Type.prototype

也能得到

a instanceof Type === true

 

7.請填入內容,使得數組從小到大排序;

var arr = [6,2,10,5,9,5];
arr.sort(              )
     

分析:

考對sort這個函數。MDN上解釋灰常清晰,附上:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

function(a,b){return a-b}

8.把兩個字符串相加並且最終的結果字符順序反轉。

var str1 = 'abcd';
var str2 = 'jjhhgg';
var str3 = str1.___________(str2);
var str4 = str3.___________('').reverse().concat(''); 

分析:

這題目有問題,最后一句cancat('')是個什么鬼,題目意思?

var str1 = 'abcd';
var str2 = 'jjhhgg';
var str3 = str1.concat(str2);
var str4 = str3.split('').reverse().join('');

對於題目本身意思,我覺得應該是這樣的。

9.請問’click’事件在移動端表現與PC端有什么區別?請給出方案消除這種區別?

分析:

10.使用原生JavaScript實現:一個shuffle方法,將數組中的元素隨機亂序排列。

分析:

一種方法:

var arr=[1,2,3,4,5,6,7,8,9];
arr.sort(function(){
return Math.random()>Math.random()
})

 

11.請寫一個表格以及對應的CSS,使表格奇數行為白色背景,偶數行為灰色背景,鼠標移上去時為黃色背景。

分析: 

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>border</title>
  </head>
<body>
    <table>
        <thead>
            <tr>
                <th>1</th>
                <th>2</th>
                <th>3</th>
                <th>4</th>
            </tr>
        
        </thead>
        <tbody>
            <tr>
                <td>a</td>
                <td>b</td>
                <td>c</td>
                <td>d</td>
            </tr>
            <tr>
                <td>a</td>
                <td>b</td>
                <td>c</td>
                <td>d</td>
            </tr>
            <tr>
                <td>a</td>
                <td>b</td>
                <td>c</td>
                <td>d</td>
            </tr>
            <tr>
                <td>a</td>
                <td>b</td>
                <td>c</td>
                <td>d</td>
            </tr>
            <tr>
                <td>a</td>
                <td>b</td>
                <td>c</td>
                <td>d</td>
            </tr>
        </tbody>
    </table>
    
  </body>
</html>
td {
    width:100px
}
tbody tr:nth-child(odd) {
    background-color: white;
}
tbody tr:nth-child(even) {
    background-color: gray;
}

tbody tr:hover {
    background-color: yellow;
}

直觀的效果可以來這個傳送門:http://runjs.cn/code/whsdwthw


另外一份題目

1、下面哪個不屬於W3C標准盒模型?

a.內容
b.邊框
c.內邊距
d.輪廓

分析:

2、下列事件哪個不屬於鼠標觸發的事件?

a.click
b.contextmenu
c.mouseout
d.keydown
    

分析:

keydown唄,翻譯翻譯...

contextmenu是新的,下面解釋下:

為 <p> 元素規定一個上下文菜單。該菜單會在用戶右鍵點擊該元素時出現:

<p contextmenu="supermenu">這個段落附加了一個名為 "supermenu" 的上下文菜單。</p>

<menu id="supermenu">
  <command label="Step 1: Write Tutorial" onclick="doSomething()">
  <command label="Step 2: Edit Tutorial" onclick="doSomethingElse()">
</menu>

 

瀏覽器支持

目前沒有任何主流瀏覽器支持 contextmenu 屬性。就是說沒什么卵用!

定義和用法

contextmenu 屬性為元素規定上下文菜單。這個菜單會在用戶右鍵點擊元素時出現。

contextmenu 屬性的值是需要打開的 <menu> 元素的 id。

HTML 4.01 與 HTML 5 之間的差異

contextmenu 屬性是 HTML5 中的新屬性。

語法

<element contextmenu="menu_id">

屬性值

描述
menu_id 要打開的 <menu> 元素的 id。

3、一個實現搜索結果的頁面,如果你想實現高亮搜索關鍵詞,應該使用下面哪個tag?

a.<strong>
b.<mark>
c.<em>
d.<highlight>

 

分析:

mark:

突出顯示部分文本:

 
        
<p>Do not forget to buy <mark>milk</mark> today.</p>
 
        

 

 
        

瀏覽器支持

IE Firefox Chrome Safari Opera
 √  √  √  √  √

Internet Explorer 9+, Firefox, Opera, Chrome 以及 Safari 支持 <mark> 標簽。

注釋:Internet Explorer 8 以及更早的版本不支持 <mark> 標簽。

定義和用法

<mark> 標簽定義帶有記號的文本。請在需要突出顯示文本時使用 <m> 標簽。

4、瀏覽器在一次HTTP請求中,需要傳輸一個4097字節的文本數據至服務器,可以采用哪些方式?

a.存入indexdDB
b.存入COOKIE
c.放在URL參數
d.寫入Session
e.使用post
f.放在Local Storage
    

分析:

5、下面哪個不是CSS中表示尺寸的單位?

a.px、%
b.em、rem
c.mm、ck
d.pt、pc
     

分析:c

6、請在____處填寫答案,從而達到題目的要求

var arr = [1, 2, 3, 4, 5];
var result = arr.sort(_______________________________).join("+");
console.log(result);

 

分析:

題目要求?

7、把一個字面量對象,變成某個類的實例

function Type() {}
var a = {};
______________
// a instanceof Type === true

 

分析:重復

8、補充下面的函數,判斷p為Array

function isArray(p){
return Object.prototype._____.apply(p)==='_____';

}

 

分析:

獲得對象類屬性的方法:

Object.prototype.toString()

 

故:

function isArray(p){
return Object.prototype.toString.apply(p) === '[object Array]';

}

 

9、請寫一個表格以及對應的CSS,使表格奇數行為白色背景,偶數行為灰色背景,鼠標移上去時為黃色背景。

分析:重復

10、實現一個程序,輸入為一段英文文本,示例如下:

Alibaba Group Holding Limited is a Chinese e-commerce company that provides consumer-to-consumer, business-to-consumer and business-to-business sales services via web portals. It also provides electronic payment services, a shopping search engine and data-centric cloud computing services. The group began in 1999 when Jack Ma founded the website Alibaba.com, a business-to-business portal to connect Chinese manufacturers with overseas buyers. In 2012, two of Alibaba’s portals handled 1.1 trillion yuan ($170 billion) in sales.

統計這段文本中單詞的出現頻率、分布區間,要求如下:

1. 僅統計英文單詞,1999 $170 1.1 標點符號之類的不算做單詞

2. 區間分 4個:少(出現1-5次)、 中(出現6-10次)、高(出現 11-20),極高(出現 >20 次) ,給出每個區間單詞數目在總單詞數中的百分比

3. 返回如下的 JSON 對象:

 

{
  'occurrence': [/** 數據元素的第一個元素為單詞,第二個位出現次數**/
  ['alibaba', 10],
  ['consumer', 10],
  ['business', 8],......
],
'distribution': {
  'high': '30%',
  'low': '20%',
  'medium': '40%',
  'veryHeigh': '10%',
}
} 

分析:

function func() {
//這個方法,只用了一個for循環,沒有用多重循環。利用最少的時間和空間。
            var str = "Alibaba Group Holding Limited is a Chinese e-commerce company that provides consumer-to-consumer, business-to-consumer and business-to-business sales services via web portals. It also provides electronic payment services, a shopping search engine and data-centric cloud computing services. The group began in 1999 when Jack Ma founded the website Alibaba.com, a business-to-business portal to connect Chinese manufacturers with overseas buyers. In 2012, two of Alibaba’s portals handled 1.1 trillion yuan ($170 billion) in sales.";
var wordsPool = str.split(' '); var isWord = /^([a-z]|-)+$/img; var strTotalLength = str.length; var data = { 'occurrence': [], 'distribution': { 'low': 0, 'medium': 0, 'high': 0, 'veryHeigh': 0 } }; var calc = function () { var total= (data.occurrence.length / 100); for(var n in data.distribution){ data.distribution[n]/=total; data.distribution[n]+='%'; } }; for (var i = 0, word, wordLength, count; i < wordsPool.length; i++) { word = wordsPool[i]; if (isWord.test(word)) { wordLength = word.length; count = (strTotalLength - str.replace(new RegExp(word, 'g'), '').length) / wordLength; if (count < 6) { data.distribution.low += 1; } else if (count < 11) { data.distribution.medium += 1; } else if (count < 20) { data.distribution.high += 1; } else { data.distribution.veryHeigh += 1; } data.occurrence.push([word, count]); } if (i == wordsPool.length - 1) { calc(); } } data.occurrence = data.occurrence.sort(function (a, b) { return a[1] > b[1] }); return data; } func();

 

 


分析(更新中.......)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM