1.填空題
(1)獲取隨機(jī)數(shù)的方法:Math.random
(2)JS中獎(jiǎng)一個(gè)變量前置強(qiáng)制改成浮點(diǎn)類型的方法:parseFloat(String)
(3)根據(jù)id獲取元素的原生js方法:getElementById();
(4)將文檔聲明為HTML5文檔類型拴曲,需要在文檔頭添加:
(5)Chrome瀏覽器的私有樣式前綴:-webkit-
(6)CSS3設(shè)置圓角的屬性名:border-radius
(7)CSS中苔巨,#是根據(jù)id來選擇元素的启盛,.是根據(jù)類名來選擇元素的掐禁。
(8)form標(biāo)簽特有的屬性請列舉三個(gè):method遭贸、action它改、enctype遣妥、target
(9)正則表達(dá)式中品姓,$是什么意思:結(jié)尾位置
(10)typeof '123'返回:string
2.簡答題
JSONP的原理是利用html頁面中的script標(biāo)簽可跨域的原理,利用標(biāo)簽向服務(wù)器端請求一段JS代碼本缠,
然后斥扛,執(zhí)行這段js代碼,實(shí)現(xiàn)跨域的過程丹锹。
(4)display和position都有哪些值?分別列舉一下這些值的用途芬失?
display:block/inline/inline-block /table/table-cell/none
position: relative/absolute/fixed/static
display:block;/*當(dāng)前元素以塊級形式顯示楣黍,默認(rèn)寬度為父元素,可設(shè)定寬高棱烂,換行顯示*/
display:inline;/*當(dāng)前元素以行內(nèi)形式顯示租漂,默認(rèn)寬度為內(nèi)容寬度,不可設(shè)寬高颊糜,同行顯示*/
display:inline-block;/*顯示時(shí)哩治,默認(rèn)寬度為內(nèi)容寬度,可設(shè)寬高衬鱼,同行顯示*/
display:table;/*顯示規(guī)則和block相同业筏,但是樣式為table的樣式*/
display:table-cell;/*以table 單元格的樣式顯示*/
display:none;/*元素小時(shí),位置也不占*/
position:relative;/*當(dāng)前元素被設(shè)為相對定位鸟赫,元素在文檔流中蒜胖,百分比的參照物是元素本身*/
position:absolute;/*當(dāng)前元素被設(shè)為絕對定位,元素脫離文檔流抛蚤,定位參照物:第一個(gè)定位祖先/根元素*/
position:fixed;/*當(dāng)前元素被設(shè)為固定定位台谢,默認(rèn)寬度為內(nèi)容寬度,脫離文檔流岁经,參照物是視窗*/
(5)地址欄輸入一個(gè)地址后朋沮,輸入回車,描述一下這是開始缀壤,瀏覽器做什么樊拓。
1.在瀏覽器中輸入要的網(wǎng)址:例如:facebook.com
2.瀏覽器查找域名的IP地址
導(dǎo)航的第一步是通過訪問的域名找出其IP地址。DNS查找過程如下:
瀏覽器緩存--瀏覽器會(huì)緩存DNS記錄一段時(shí)間诉位。但操作系統(tǒng)沒有告訴瀏覽器存儲(chǔ)的時(shí)間骑脱,這樣各個(gè)瀏覽器會(huì)存儲(chǔ)各自的
一個(gè)固定的時(shí)間(2分鐘到30分鐘不等)。
系統(tǒng)緩存--如果在瀏覽器緩存里沒有找到需要的記錄苍糠,瀏覽器會(huì)做一個(gè)系統(tǒng)調(diào)用(windows里是gethostbyname)叁丧。這樣便能獲得系統(tǒng)緩存中 ? ? ?的記錄。
路由器緩存--接著,前面的查詢請求發(fā)向路由器拥娄,它一般有自己的DNS緩存蚊锹。
ISP(互聯(lián)網(wǎng)服務(wù)提供商) DNS緩存--接下來要檢測的就是ISP的緩存DNS的服務(wù)器。在這一般都能找到相應(yīng)的緩存記錄稚瘾。
遞歸搜索--你的ISP的DNS服務(wù)器從根域名服務(wù)器開始進(jìn)行遞歸搜索牡昆,從.com頂級域名服務(wù)器到facebook的域名服務(wù)器。一般DNS的緩存
中會(huì)有.com域名服務(wù)器中的域名摊欠,所以到頂級服務(wù)器的匹配過程不是那么必要了丢烘。
但是,DNS有一點(diǎn)令人擔(dān)憂些椒,像wikipedia.org或者facebook.com這樣的整個(gè)域名看上去就對應(yīng)著一個(gè)單獨(dú)的IP地址播瞳,還好有幾種方法可以消除這個(gè)瓶頸:
循環(huán)DNS:是DNS查找時(shí)返回多個(gè)IP時(shí)的解決方案。舉例來說免糕,facebook.com實(shí)際上就對應(yīng)了4個(gè)IP地址赢乓。
負(fù)載平衡器:是以一個(gè)特定IP地址進(jìn)行偵聽并將網(wǎng)絡(luò)請求轉(zhuǎn)發(fā)到集群服務(wù)器上的硬件設(shè)備。一些大型的站點(diǎn)一般都會(huì)使用這種昂貴的高性能復(fù)雜平衡器石窑。
地理DNS根據(jù)用戶所處的地理位置牌芋,通過把域名映射到多個(gè)不同的IP地址提高可擴(kuò)展性。這樣不同的服務(wù)器不能夠更新同步狀態(tài)松逊,但映射靜態(tài)內(nèi)容的話非常好躺屁。
Anycast 是一個(gè)IP地址映射到多個(gè)物理主機(jī)的路由技術(shù)。美中不足棺棵,Anycast與TCP協(xié)議適應(yīng)的不是很好楼咳,所以很少應(yīng)用在那些方案中。
大多數(shù)DNS服務(wù)器使用Anycast來請求高效低延遲的DNS查找烛恤。
3.瀏覽器給web服務(wù)器發(fā)送一個(gè)HTTP請求
因?yàn)橄馞acebook主頁這樣的動(dòng)態(tài)頁面母怜,打開后在瀏覽器緩存中很快甚至馬上就會(huì)過期,毫無疑問他們不能從緩存中讀取缚柏,所以苹熏,瀏覽器將把一個(gè)請求發(fā)送到Facebook所在的服務(wù)器:
4.facebook服務(wù)的永久重定向響應(yīng)
5.瀏覽器跟蹤重定向地址
6.服務(wù)器“處理”請求
7.服務(wù)器發(fā)回一個(gè)HTML響應(yīng)
8.瀏覽器開始顯示HTML
9.瀏覽器發(fā)送獲取嵌入在HTML中的對象
10.瀏覽器發(fā)送異步(Ajax)請求
5.應(yīng)用題
(1)創(chuàng)建一個(gè)js類,模擬實(shí)現(xiàn)方法的重載币喧。
function A(){
this.a=null;
this.b=null;
}
var pro = A.prototype;
//模擬重載
pro.add = function(){
if(arguments.length==1){
console.log(arguments[0]);
}
if(arguments.length==2){
result = arguments[0]+arguments[1];
console.log(result);
}
}
var a = new A();
a.add(1);
a.add(1,2);
(2)JS中會(huì)有排序的需求轨域,用jS實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的排序算法,對一個(gè)數(shù)字?jǐn)?shù)組進(jìn)行由小到大的排列杀餐。
var b = [2,3,8,3,1,5];
sort1(b);
console.log(b);
function sort1(a){
var i,j;
for(i=0;i
var temp;
var flag=0;
for(j=0;j
if(a[j]>a[j+1]){
temp = a[j+1];
a[j+1]=a[j];
a[j]=temp;
flag=1;
}
}
if(flag==0)break;
}
return a;
}
4.編程題
用HTML干发、css和js魔力實(shí)現(xiàn)下拉框,使得下拉框在各個(gè)瀏覽器的樣式和行為完全一致史翘。說出你的設(shè)計(jì)方案枉长,并且重點(diǎn)說明功能設(shè)計(jì)實(shí)現(xiàn)時(shí)要考慮的因素冀续。
Document
p,ul {
margin: 0;
}
ul {
padding: 0;
}
a {
text-decoration: none;
color: #000;
}
.btn {
border: 1px solid #000;
width: 100px;
text-align: center;
margin-bottom: 0.5px;
cursor: pointer;
padding: 2px 0;
}
.down {
width: 100px;
border: 1px solid #000;
text-align: center;
display: block;
}
.l_sm {
border: 1px solid grey;
list-style: none;
padding: 2px 0;
cursor: pointer;
}
.l_sm:hover {
}
點(diǎn)擊
var btn = document.getElementById("btn");
var show = document.getElementById("show");
btn.addEventListener("click",function(){
var style = window.getComputedStyle(show).display;
if(style=="block"){
show.style.display = "none";
}else{
show.style.display = "block";
}
});