摘要:面試題目匯總前言近期在找工作,也在讀前端面試江湖這本書,書中整理了很多基礎的面試題目,在書中也發(fā)現(xiàn)了一些錯誤。好記性不如爛筆頭,于是整理下對自己有益的題目,都是一些較為基礎的題目后期還會更新。,返回一個數(shù)組,成員為匹配的字符串。
面試題目匯總
前言
近期在找工作,也在讀 前端面試江湖 這本書,書中整理了很多基礎的面試題目,在書中也發(fā)現(xiàn)了一些錯誤。 好記性不如爛筆頭,于是整理下對自己有益的題目,都是一些較為基礎的題目,后期還會更新。時時刻刻勉勵自己,注重基礎。 現(xiàn)在在找工作,初中級前端,如有哪位熱心的仁兄公司在招前端,希望@我一下,目標廣州,前端路很長,希望一起努力向前。
js初級之操作字符串
截取字符串 var a = "www.qdjhu.com中的qdjhu"。
考察知識點,substr()第一個參數(shù)為起始位置,第二個參數(shù)為截取的長度,注意第一個參數(shù)為負數(shù)則從末尾往前找,第二個參數(shù)為負數(shù)則返回空字符串,此方法不會修改原字符串,只是查找并返回查找的結果,與slice()方法不同的是,slice()方法第二個參數(shù)為結束位置,slice()的第一個參數(shù)如果大于第二個參數(shù)則返回空字符串。a.substr(4,5)或者a.slice(4,9)
判斷字符串是否是這樣組成的,第一個必須是字母,后面的可以使字母,數(shù)字,下劃線,總長度為5-20。
考察知識點,正則。[a-zA-Z]是匹配所有字母,w表示匹配任意字母,數(shù)字,下劃線。{n}代表重復幾次,{n,m}代表重復至少n次,至多m次。var a = /^[a-zA-Z]{1}w{4,19}/
給定一個字符串 "IamWangZhiJun",要求查找里面的字符串Wang。
考查知識點,對String對象的操作,indexOf()方法表示查找一個字符串在另一個字符串中的位置,返回一個整數(shù),字符串匹配開始的位置。
var a ="IamWangZhiJun"
var b ="Wang"
var c =a.indexOf(b) //3
var d = a.substr(c,b.length)
如何實現(xiàn)一個刪除字符串左邊為空白字符的方法。
知識點1,replace(),第一個參數(shù)為匹配模式(正則),第二個參數(shù)為替換的內容。
知識點2,量詞符和貪婪模式,?表示0次或者1次{0,1},*表示0次或者多次{0,},+表示1次或者多次{1,}。默認情況下匹配貪婪模式。
function leftTrim(str){
return str.replace(/^s*/,"")
};
var a = leftTrim(" abc")//abc
JavaScript 的typeof 都返回那些數(shù)據類型。
知識點,js的6種數(shù)據基本類型。underfined,String,Number,Object,function,boolean 。
請定義一個函數(shù),實現(xiàn)字符串的反轉。
知識點,主要是把字符串從末尾開始的每一個元素截取后,在重新組成一個新字符串,用到的方法charAt(), 返回指定位置的字符,注意是從0開始。
function reverStr(str){
var temStr = "";
for(var i = str.length-1:i>=0:i—-){
temStr+=str.charAt(i)}
}
returun temStr;
}
7. 字符串的操作主要有那些。
* 查找類型
* indexOf(),返回匹配開始的位置。
* search(),返回匹配的第一個位置。
* match(),返回一個數(shù)組,成員為匹配的字符串。
* length(),返回字符串的長度
* 截取,拼接,替換類
* slice(),從原字符串中取回字符串并返回,第一個參數(shù)為起始位置,第二個參數(shù)為結束位置。
* substr(),從原字符串中取回字符串并返回,第一個參數(shù)是子字符串的開始位置,第二個參數(shù)是子字符串的長度。
* concat(),方法用于連接兩個字符串,返回一個新字符串,不改變原字符串。
* replace(),第一個參數(shù)為被替換的內容,第二個參數(shù)為要替換的內容,一般只匹配一個。
* charAt()方法返回指定位置的字符,參數(shù)是從0開始編號的位置。
* trim()
* 轉換類
* split(),第一個參數(shù)為起始位置 第二個參數(shù)為限定放回數(shù)組的成員數(shù),注意,第一個參數(shù)如果為空,則返回數(shù)組的成員是原字符串的每一個字符。此方法會將字符串裝換為數(shù)組。
8. 有一個字符串 abcd-ef-ghi,請用js把它處理成ghi&ed&abcd。
* 知識點,字符串和數(shù)組之間的裝換。
var a ="abcd-ef-ghi";
var b = a.split("-");
var result = b.reverse().join("&")
```
請編寫代碼拓展JavaScript中string對象,讓其有一個方法刪除字符串中所有英文句號"."。
String.prototype.killPoint = function(){
return this.replace(/^./g,"");
}
將字符串"wang zhi j un"中由空格分割的每個單詞首字母大小寫。
function str(words) {
words = words.split(" ");
for(var i = 0;i
JS初級之變量,DOM,循環(huán)語句
JS如何檢測變量是一個string類型?請寫出函數(shù)實現(xiàn)。
function isString(str){
if(typeof(str) === "string" || str.constructor === String){
return true;
}else{
return false;
}
}
var str = "hello world"
這里需要注意的是也要判斷這個值的數(shù)據類型。
請說明javaScript中的nodeName,nodeVaule,nodeType的區(qū)別
* nodeName 表示節(jié)點的名稱
* 元素節(jié)點的nodeName是標簽名稱
* 屬性節(jié)點的nodeName是屬性名稱
* 文本節(jié)點的nodeName是#text
* 文檔節(jié)點的nodeName是#document
* nodeVaule 表示文本內容
* 對于文本節(jié)點,nodeVaule屬性包含文本
* 對于屬性節(jié)點,nodeValue屬性包含屬性值
* nodeType 屬性返回節(jié)點的類型,常用的如下
* 元素類型對應的節(jié)點類型為1
* 屬性類型對應的節(jié)點類型為2
* 文本屬性對應的節(jié)點類型為3
下列代碼執(zhí)行后,結果是什么
for(i=0,j=0;i<6,j<10;i++,j++){
var k =i+j
}
alert(k) //18
for(i=0,j=0;i<10,j<6;i++,j++){
var k =i+j
}
alert(k) //10
知識點,在for語句中條件用逗號隔開,就相當于“并且”。
var t =(4,5,6),console.log(t) //6,這里也說明逗號表達式返回的結果是由最后一個表達式決定的。
統(tǒng)計從1-400之間的自然對數(shù)中含有多少個1?
var count = 0;
for(var i=0;i<=400;i++){
for(var j=0;j<=i.toString().length;j++){
if(i.toString()[j]=="1"){
count++}
}
}
alert(count)
js中基本數(shù)據類型有哪些?本地對象,內置對象,宿主對象有那些?
基本數(shù)據類型
string,boolean,number,null,undefined,object。
本地對象(常用)
Object,Function,String,Number,Boolean,Data,Array,RegExp。
內置對象
簡單的說,內置對象是本地對象的一種,其中包含2種對象,Math,Global(isNaN,parseInt,parseFloat)
宿主對象 所有BOM,DOM都是宿主對象 其中BOM常用對象有
localtion
navigation
screen
history
JS中級之函數(shù)
編寫一個函數(shù),參數(shù)為一個元素,返回指定元素的第一個元素,函數(shù)越簡單越好
function getFirst(el){
var nodes = el.children;
return nodes.length!=0?nodes[0]:null;
}
簡述JavaScript中this的理解。
this代表函數(shù)執(zhí)行的時候,自動生成一個內部對象,在函數(shù)內使用
this指的是調用函數(shù)的那個對象
一下討論this的四種用法
純粹的函數(shù)調用,說明此時this代表全局對象。
var x = 1;
function test(){
this.x = 0;//這里等同于x = 0;已改寫
}
test();//window.test()
alert(x);//0
作為對象方法的調用,說明此時this指向這個的上級對象。
function test(){
alert(this.x);
}
var o = {};
o.x=1;
o.m = test;
o.m()//1
作為構造函數(shù)的調用,說明此時this是指向新對象,不是全局對象!!!
var x = 2;
function test(){
this.x = 1;
}
var o = new test();
alert(o.x)//1
alert(x)//2
apply調用
var x = 0;
function test(){
alert(this.x)}
var o = {};
o.x = 1;
o.m = test;
o.m.apply()//0,當參數(shù)為空的時候,默認調用全局
o.m.apply(o)//1
什么是閉包?閉包的特性?對頁面有什么影響?好處和壞處?請寫出一個閉包的簡單實例?
閉包就是能夠讀取其他函數(shù)內部變量的函數(shù)。
閉包特性
閉包外層是一個函數(shù)
閉包內層也是一個函數(shù)
閉包會return內部函數(shù)
閉包返回的函數(shù)內部不能有return
執(zhí)行閉包后,閉包內部的變量會緩存
閉包只有被執(zhí)行的時候才會調用
好處和壞處
方便上下文調用
加強封裝性
壞處 浪費內存
實例
function a(){
var i = 0;
function b(){
console.log(++i)
// i=null 解決內存泄漏
}
return b;
}
var c = a();//執(zhí)行a函數(shù)
c()//執(zhí)行b函數(shù),也就是執(zhí)行閉包,結果為1
c()//2
…
IE和Firefox處理兼容。
綁定事件監(jiān)聽
function addEvent(elem,eventName,handler){
if(elem.attachEvent){
elem.attachEvent("on"+eventName,handler)
}else if{
elem.addEventListener(eventName,handler,false)}
}else{
elem["on"+eventName]
}
function removeEvent(elem,eventName,handler){
if(elem.detachEvent){
elem.detachEvent("on"+eventName,handler)
}else if{
elem.removeEventListener(eventName,handler,false)
}else{
elem["on"+eventName]
}
}
獲取到event對象
function getEvent(e){
return e ? e : windowm.event;
}
function getTarget(e){
return e.target||e.srcElement
}
//阻止默認和冒泡
function prevent(e){
if(e.prevent){
e.preventDefault();
}else{
e.returnValue = false
}
}
function stop(e){
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble()}
}
將$(".red").attr("sth",4)裝換成Js實現(xiàn)
知識點,得到的是數(shù)組,要遍歷。
var a = document.getElementsByClassName("red");
for(var i =0;i
}
6. 作用域問題
var a = {n:1}; var b =a; a.x=a={n:2};//a.x={n:2};a={n:2} console.log(a.x);//undefined console.log(b.x);//{n:2}
理解,首先 `var a = {n:1}` a這里指向一個對象,`var b =a ` 則是將b也指
向這個對象,第三行代碼,實際是已經不共享對象了,a已經改寫了,而b.x里面則添
加了x = {n:2},故有上結果。
7. Boolean對象和Boolean值
var x = new Boolean(false); if (x) { alert("hi"); } var y = Boolean(0); if (y) { alert("hello"); } //alert("hi"),undefined
8.什么是跨域?跨域的幾種實現(xiàn)方法?
* 跨域是通過js在不同域進行數(shù)據傳輸或者通信,當端口號,協(xié)議,域名 不同的情況下,使用ajax是拿不到數(shù)據的。
* 解決方法
* 使用window.name進行跨域,
a.html頁面,比如說域名是www.abc.com/a.html;這里需要注意的是 數(shù)據只能是字符串形式。
```
b.html頁面,比如說www.baidu.com/b.html
```
```
用H5 window.postMessage,可自行百度。
9.判斷當前瀏覽器的類型
var useAgent = window.navigator.useAgent;
if(useAgent.indexOf("Chorme")){
alert("是Chorme瀏覽器")
};
if(useAgent.indexOf("Safari")){
alert("是Safari瀏覽器")
};
if(useAgent.indexOf("Firefox")){
alert("是Firefox瀏覽器")
};
主要涉及的知識點 是考察window對象下的navgator對象的useAgent屬性,得到是字符串,返回最字符串進行操作。
HTML5,CSS3初級,中級面試題
CSS3新特性有哪些?請做說明。不少于5條
選擇器類(稍微特別一點的)
* first-child
* last-child
* nth-child
* :cheecked
文字樣式
@font-face
@font-face{
font-family:BorderWeb;
src:url(BorderWeb.eot)
}
.border{
font-family:"BorderWeb"
}
text-overflow & white-space & word-warp
.ellipsis{text-overflow:ellipsis;
overflow:hidden;
white-space:nowrap;
width:200px; background:#ccc;}
text-decoration為文本添加下劃線 默認值none
邊框,背景 樣式
圓角 border-radius,四個參數(shù) 從上左到下右 4個方位
漸變,
線性漸變.
linear-gradient(left,#333,#999)(默認是從上到下)
第一個參數(shù)為方位,可以是對角,如left to。也可以是角度,注意這里是順時鐘,如180deg就是從下到上
徑向漸變.
radial-gradient(center,circle,yellow 10%,bule 30%)
陰影,box-shadow.反射,box-reflect
背景,background-clip
布局
flex布局
多列布局column,參數(shù)column-count,column-gap,column-rule
動畫,過渡
* transition
* transform
* animation
HTML有哪些新特性?
新增標簽
用于繪畫的 canvas 元素
用于媒介回放的 video 和 audio 元素
對本地離線存儲的更好的支持 Local storge,sessionStorage
新的表單控件,比如 calendar、date、time、email、url、search,移動端體驗更好
新增獲取地理位置,上傳文件等API
新的跨域通信機制 window.postMessage
3.localStorage,sessionStorage,cookie 的區(qū)別
localStorage 用于持久化的本地存儲,關閉頁面還有,除非主動刪除,否則一直存在,存儲量大
sessionStorage 不是持久化的本地存儲,關閉頁面就不會有
cookie 是與服務器交互的,作為http規(guī)范的一部分而存在,在瀏覽器和服務器之間來回,存儲量小
4.如何觸發(fā)頁面的回流reflow,重繪repaint,解釋下它們的基本原理
DOM元素的修改,添加,刪除。
僅改變DOM元素的字體顏色,只有repaint
應用新的樣式或者修改任何元素外觀的屬性
resilze瀏覽器窗口,滾動
讀取元素 如(offsetTop,offsetLeft等等)
原理解析
repaint 重繪 是當一個元素的外觀被改變的時候產生重繪。
reflow 重排(回流),是當DOM發(fā)生改變,如寬高等。如果reflow 的頻繁,會導致GPU使用率上升
減少性能影響的方法
1. 減少對DOM的操作,如 查詢時候將值賦值給局部變量,減少循環(huán)對DOM的操作。
2. 使用JSON格式來進行數(shù)據交換
5.transition的局限性
transition 需要事件觸發(fā)
transition 是一次性的,不能重復,除非一在觸發(fā)
transition 只有開始和結束2種狀態(tài),不能定義中間狀態(tài)
transition 只能定義一個屬性的變化,不能涉及多個屬性。
transition 不能識別display的變化。
6.如何優(yōu)化頁面速度,提高頁面響應。
取消重定向,原因是網站都會首先加載一個空白的頁面,然后在定向到另外的頁面。
合并javaScript
合并css
使用css sprite
啟用GZIP
css,js引入文件位置,css放在 里面,js放在尾部
img標簽要添加alt屬性
清除無效的a標簽,并給a標簽加上title屬性
緩存靜態(tài)資源
不用iframe/frame
減少DNS域名查找時間,將DNS的時間設置為較低的水平,比如60-100ms進行一次DNS查詢
7.如何提高前端性能
用webStorage代替cookie,可以減少HTTP請求的數(shù)據量
使用css3動畫,開啟GPU加速。translate3d()
緩存HTML標記
8.如何對網站的文件和資源進行優(yōu)化
文件合并
文件最小化
使用cdn托管
緩存的使用
9.請簡單說明浮動和絕對定位的區(qū)別和應用。
二者都會脫離文檔流,并自動轉換為塊級元素。不同的是絕對定位的元素是按照瀏覽器的左上角計算的或者對設置相對定位的父元素開始的,它的脫離文檔流不占據空間,因此會產生覆蓋頁面上的其他元素,故有了z-index屬性。
浮動元素還是基于正常的文檔流,只是在文檔流中抽出,并盡可能的移動到最左側或者右側,文字內容會圍繞在浮動元素周圍,仍然在文檔流中的元素會替補原先的空間。
10.說說移動端的兼容和常見問題解決方案(整理了自己用過的)
1. meta 元標簽基礎知識
* 將窗口調整為設備窗口,并禁止用戶縮放
```
```
```
```
* 當網站添加到主屏幕快速啟動方式,以及頂部導航條樣式
```
```
```
```
2. 移動端字體
* 中文使用默認字體,英文用Helvetica
3. 觸摸事件的響應順序
```
1、ontouchstart
2、ontouchmove
3、ontouchend
4、onclick
```
4. Retina屏幕下問題解決
* 移動端的視覺稿通常會設計為傳統(tǒng)PC的2倍,通常把設計稿乘以2/1得到實際書寫時候打大小
* 圖片則設置為 實際寬高的50%,如 background-position:50% 50%;
5. IOS系統(tǒng)下被觸摸的時候有半透明遮罩
```
a,button,input,textarea{-webkit-tap-heightlight-color:rgb(0,0,0,0);}
```
6. webkit表單元素的默認外觀怎么重置
```
.css{-webkit-appearance:none;}
```
7. 打電話,發(fā)郵件
```
打電話給020-62682400
```
```
13249791010@163.com
```
8. 移動端模擬hover效果,添加ontouchstart,ontouchend事件
```
var btnBlue = document.querySelector(".btn-blue");
btnBlue.ontouchstart = function(){
this.className = "btn-blue btn-blue-on"
}
btnBlue.ontouchend = function(){
this.className = "btn-blue"
}
9. ios下禁止調整字體大小
body{-webkit-text-size-adjust:100%}
```
10. ios下輸入框取消大寫
```
11. css3動畫盡可能地使用合成屬性transform和opacity來設計CSS3動畫,不使用position的left和top來定位,用translate3D開啟加速
11.說說移動端2欄布局,左側定寬,右側自適應的幾種方法
* HTML代碼
左側固定
右側自適應
```
第一種方法,浮動+定位(等高布局)
.main{
position:relative;
padding-left:100px;
display:inline-block;
}
.left{
position:relative;
float:left;
width:100px;
margin-left:-100px;
}
.right{
float:left;
}
.right,.left{
height:200px;
min-height:200px;
height:auto !important;
}
```
第二種,浮動(等高布局)
.main{
overflow:hidden;
}
.left{
float:left;
width:100px;
padding-bottom:9999px;
margin-bottom:9999px;
}
.right{
margin-left:100px;
padding-bottom:9999px;
margin-bottom:9999px;
}
.right,.left{
height:200px;
min-height:200px;
height:auto !important;
}
第三種方法,定位+margin
.left{
position:absolute;
top:0;
left:0;
width:100px;
height:400px;
}
.right{
margin-left:100px;
height:400px;
}
第四種方法,定位
.left{
position:absolute;
top:0;
left:0;
width:100px;
height:400px;
}
.right{
position:absolute;
top:0;
left:100px;
height:400px;
}
第五種方法,flex
.main{
display:flex;
}
.left{
width:100px;
height:400px;
}
.right{
flex:1;
height:400px;
}
第六種方法 table
.main{
display:table;
width:100%;
}
.left{
display:table-cell
width:100px;
height:400px;
}
.right{
display:table-cell
}
12.websocket是什么?和http有什么關聯(lián)(只是基于自己的理解,暫無相關項目經驗)
websocket屬于H5新增的,websocket是基于http的,和http沒有基本關系(或者說交集不大),http只負責websokect的連接
http不是持久性的協(xié)議,websocket是持久性的協(xié)議,在http中一個request對應一個response,也就說明了 http的缺點 http是被動的,服務器端不能主動發(fā)起請求
ajax的輪詢,每隔幾秒發(fā)起一個請求給服務端,這樣比較消耗內存,需要更快的響應速度
polling 則是采用阻塞模型(打電話,如果沒信息值一直不掛),則是需要更多的電話,ajax的輪詢和 polling 的作用是實時推送
websokect解決的問題是,讓服務端有主動性,只需要消耗一次的HTTP請求
前后端分離的理解
近期前后端分離特別熱門,一直搞不懂前后端分離是個什么鬼,有個什么作用。只知道以前前端把寫好的頁面發(fā)給后端,后端套用接口,這樣就比較容易出現(xiàn)問題,工作量也比較繁瑣。當我自己用vue做webapp,寫json數(shù)據結構的時候,才稍微有點意識,以前直接是把數(shù)據寫死或者從后臺調用在html上顯示,但是在用了vue之后,你是不是很少看見在html模板里面有直接的數(shù)據顯示!!!基本都是前后端通過json在交流,前端用vue去實現(xiàn)組件化,工程化,但是有一個缺點是不利于seo優(yōu)化,你html里面都沒關鍵字怎么優(yōu)化。最后關鍵一點,后端值負責數(shù)據,前端值負責顯示。
分離的好處
以前崇尚全棧工程師,一個人不但管前端并且管后端,甚至數(shù)據庫。長期以往,代碼的解耦性可能不是很好。
前后端分離以后,前后端值專注于只自己的開發(fā)工作,打造一個全棧式的團隊。特點之二是實現(xiàn)前后端的解耦,前后端只需要按照溝通好的參數(shù)和接口,只要這個不改變,也只要前端人員修改代碼,減少工作量。
要不要前后端分離,分為三點。
輕前端頁面
布局簡單,樣式較少,無css動畫,只有少量的業(yè)務邏輯,只需要在不同終端兼容
重前端頁面
頁面布局復雜,樣式多,css動畫多,有復雜的業(yè)務代碼,需要在不同終端和瀏覽器上做兼容。
前后端均衡
頁面布局始終,樣式適中,少許動畫,業(yè)務邏輯較為簡單,且只需要在不同終端上兼容
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84940.html
摘要:面試題目匯總前言近期在找工作,也在讀前端面試江湖這本書,書中整理了很多基礎的面試題目,在書中也發(fā)現(xiàn)了一些錯誤。好記性不如爛筆頭,于是整理下對自己有益的題目,都是一些較為基礎的題目后期還會更新。,返回一個數(shù)組,成員為匹配的字符串。
面試題目匯總
前言
近期在找工作,也在讀 前端面試江湖 這本書,書中整理了很多基礎的面試題目,在書中也發(fā)現(xiàn)了一些錯誤。好記性不如爛筆頭,于是整理下對自己有益的...
hikui
2019-08-01 17:28
評論0
收藏0
摘要:面試題目匯總前言近期在找工作,也在讀前端面試江湖這本書,書中整理了很多基礎的面試題目,在書中也發(fā)現(xiàn)了一些錯誤。好記性不如爛筆頭,于是整理下對自己有益的題目,都是一些較為基礎的題目后期還會更新。,返回一個數(shù)組,成員為匹配的字符串。
面試題目匯總
前言
近期在找工作,也在讀 前端面試江湖 這本書,書中整理了很多基礎的面試題目,在書中也發(fā)現(xiàn)了一些錯誤。好記性不如爛筆頭,于是整理下對自己有益的...
摘要:前端日報精選如何合理地設計的深入了解一個超快的引擎也稱全面了解作用域源碼分析二奇淫技巧總結整理下前端江湖面試對自己有益的題目。
2017-08-27 前端日報
精選
如何合理地設計Redux的State深入了解一個超快的 CSS 引擎: Quantum CSS (也稱?Stylo) ★ Mozilla Hacks全面了解JS作用域Zepto源碼分析(二)奇淫技巧總結整理下《前端江湖面試...
摘要:原文地址游客前言金三銀四,很多同學心里大概都準備著年后找工作或者跳槽。最近有很多同學都在交流群里求大廠面試題。
最近整理了一波面試題,包括安卓JAVA方面的,目前大廠還是以安卓源碼,算法,以及數(shù)據結構為主,有一些中小型公司也會問到混合開發(fā)的知識,至于我為什么傾向于混合開發(fā),我的一句話就是走上編程之路,將來你要學不僅僅是這些,豐富自己方能與世接軌,做好全棧的裝備。
原文地址:游客kutd...