面試題,關(guān)于就業(yè)考核,項(xiàng)目經(jīng)驗(yàn)問答的個(gè)人猜題問答【詩書畫唱】
前言:一份試卷,通常會(huì)4道vue題目,4道微信小程序題目,3道CSS樣式題目,4道JS題目,一般我是優(yōu)先確保面試題中vue題目,微信小程序,CSS樣式題目,JS題目都能做對(duì),其他概念之類的話,至少要能答出很多相關(guān)的,很多時(shí)候,答案就算和題目關(guān)系不大,但也可以答上,但關(guān)鍵的是,關(guān)鍵的答案至少要能答出來一些。當(dāng)然,能全部答出來是最好的!括號(hào)里面的內(nèi)容可以不答出來,但有些最好能答出來,有些單純是我的個(gè)人注釋。
有時(shí)會(huì)看自己的項(xiàng)目源碼,結(jié)構(gòu),注釋,專欄復(fù)習(xí),鞏固項(xiàng)目經(jīng)驗(yàn)??搭}仔細(xì),少涂改,同時(shí)整齊,筆不要太粗。有時(shí)不要答得太急了,題目問什么,我看錯(cuò)了,漏看題目問的條件。
記得要回答完,我有時(shí)最后一題就是會(huì),但沒有回答完。同時(shí)項(xiàng)目經(jīng)驗(yàn)一般會(huì)和路由跳轉(zhuǎn),界面跳轉(zhuǎn),微信小程序的父子傳值有關(guān)。有時(shí)寫得太急了,容易寫錯(cuò)。
有時(shí)基礎(chǔ)內(nèi)容很久不接觸,容易記混,但我認(rèn)為不影響我做項(xiàng)目。

目錄:
例子1:(5分)?請(qǐng)寫出下方代碼段的執(zhí)行結(jié)果,并說明原因。(JS)
var s1 = "abc";
vars2=newString(s1);
s1.color = "blue";
s2.color = "red";
console.log( s1===s2, s1.color, s2.color)
例子2:(7分) 用JavaScript實(shí)現(xiàn), 鼠標(biāo)點(diǎn)擊頁面中的任意標(biāo)簽,alert該標(biāo)簽的名稱。(JS)
例子3:面試題等等??疾閮?nèi)容(自創(chuàng)題):談?wù)劶^函數(shù)的this指向和外部函數(shù)的this的關(guān)系
A:箭頭函數(shù)內(nèi)部的this和外部函數(shù)的this指向同一個(gè)對(duì)象 。
例子4:關(guān)于prosp屬性的父子組件傳值等方面的2道填空題目,默認(rèn)選擇下拉框,商品列表(和HBuilder中的reactjs中的ReactDOM等有關(guān))?
例子5:關(guān)于正則表達(dá)式和寫出訪問路徑的題目
以下函數(shù)的功能是查詢?yōu)g覽器url中字符串參數(shù),請(qǐng)補(bǔ)全代碼(這題是面試題)
function parseQueryString(name) {
? ? var regexS = "[\\?&]" + name + "=([^&#]*)";
? ? var regx = new RegExp(regexS);
? ? var rs = regx.exec(_____________________________);
? ? if(rs == null) {
? ? ? ? return “”;
? ? }else{
? ? ? ? return ______________;??
? ? }
}?
例子6:用JavaScript寫一個(gè)函數(shù),判斷字符串是否是這樣組
成的:第一個(gè)必須是字母,后面可以是字母、數(shù)字、下劃線,
總長(zhǎng)度為5-20。如果符合條件返回1,否則返回0。
函數(shù)原型: function checkString(str)
例子7:可能的面試題:JSON和JSONP有什么關(guān)系?
例子8:遞歸面試題中要補(bǔ)全的代碼(含個(gè)人的詳細(xì)解析和理解,遞歸方法)
例子9:用遞歸求斐波那契數(shù)的第n項(xiàng)(含個(gè)人的演算,其實(shí)遞歸就是傳入?yún)?shù)有個(gè)依次變化的過程)
例子10:用遞歸實(shí)現(xiàn)求和與階乘
例子11:(15分) 請(qǐng)定義一個(gè)函數(shù)repeat:(閉包)
function repeat ( func, nums, times ) {
// fill it
}
//函數(shù)repeat的調(diào)用方法:?
var a = repeat( alert, 6,3000 ) ;?

例子1:(5分)?請(qǐng)寫出下方代碼段的執(zhí)行結(jié)果,并說明原因。(JS)
var s1 = "abc";
vars2=newString(s1);
s1.color = "blue";
s2.color = "red";
console.log( s1===s2, s1.color, s2.color)

例子1個(gè)人答案:false,undefined,red
個(gè)人對(duì)這題的想法:其實(shí)這題理解值類型和引用類型就很容易了:值類型就是賦值一次后就變成固定不可變值,不可重新賦值。引用類型就是可以可變值,可重新賦值。Java中String和js中的object是可以重新賦值的“引用類型”,但在js中string,number,boolean是不可以重新賦值的“值類型”。
如果對(duì)象是值類型,你給其添加.color或.name等等屬性都是沒有用的,控制臺(tái)打印時(shí),打印出來的是undefined
(可以將使用JSON.stringify(XXX)方法將數(shù)組或js對(duì)象轉(zhuǎn)換成JSON字符串)
例子2:(7分) 用JavaScript實(shí)現(xiàn), 鼠標(biāo)點(diǎn)擊頁面中的任意標(biāo)簽,alert該標(biāo)簽的名稱。(JS)

(個(gè)人對(duì)這題的想法:其實(shí)這題用事件冒泡做就很容易。)


例子2個(gè)人答案:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
? ??
? ? //寫在onload方法中的js代碼在html代碼執(zhí)行完成以后再執(zhí)行
? ? window.onload = function(){
? ??
? ? ? ? ? ? ? ? document.querySelector('body').onclick = function(e){
? ? ? ? ? ? ? ? alert(e.target.tagName);
? ? ? ? ? ? ? ? }
? ?} ? ??
</script>
</head>
<body>
? ?
<input type="button" value="詩書畫唱" />
??
? ? <div>詩書畫唱</div>
? ?
? ? <p>詩書畫唱</p>
</body>
</html>


例子3:面試題等等??疾閮?nèi)容(自創(chuàng)題):談?wù)劶^函數(shù)的this指向和外部函數(shù)的this的關(guān)系
A:箭頭函數(shù)內(nèi)部的this和外部函數(shù)的this指向同一個(gè)對(duì)象 。
例子4:關(guān)于prosp屬性的父子組件傳值等方面的2道填空題目,默認(rèn)選擇下拉框,商品列表(和HBuilder中的reactjs中的ReactDOM等有關(guān))?

A1:
selected={this.props.selected}
cityArr.map(o =>(
<MyOption? key={o.id}
? ? ? ? ? ? cname={o.name} cid={o.id}? ?selected={o.name=='湘潭'?'selected':''}/>? )? );
?(<select >{cityItems}</select>)

A2:
<table border="1px">{proData.rows.map(o => (< MyTr? key={o.pname}?
pname={o.pname} price={o.price}? src={o.src} /> ))}</table>

例子5:關(guān)于正則表達(dá)式和寫出訪問路徑的題目
以下函數(shù)的功能是查詢?yōu)g覽器url中字符串參數(shù),請(qǐng)補(bǔ)全代碼(這題是面試題)
function parseQueryString(name) {
? ? var regexS = "[\\?&]" + name + "=([^&#]*)";
? ? var regx = new RegExp(regexS);
? ? var rs = regx.exec(_____________________________);
? ? if(rs == null) {
? ? ? ? return “”;
? ? }else{
? ? ? ? return ______________;??
? ? }
}?
A:
'http://localhost:8888/demo?act=admin&pwd=mypwd'
rs[1]


例子6:用JavaScript寫一個(gè)函數(shù),判斷字符串是否是這樣組
成的:第一個(gè)必須是字母,后面可以是字母、數(shù)字、下劃線,
總長(zhǎng)度為5-20。如果符合條件返回1,否則返回0。
函數(shù)原型: function checkString(str)

\w{4,19}$表示4到19長(zhǎng)度的以字母下劃線為結(jié)尾。代碼寫得越簡(jiǎn)短越好,不用$就表示不一定是\w結(jié)尾
A:
function checkString(str){
? ? ? ? ? ? ? ? return /^[a-zA-Z]\w{4,19}$/.test(str) ? 1 : 0;
}
例子7:可能的面試題:JSON和JSONP有什么關(guān)系?
JSON:JS對(duì)象表示法,一種數(shù)據(jù)傳輸?shù)母袷揭?/p>
XML:可擴(kuò)展標(biāo)記語言,一種數(shù)據(jù)傳輸?shù)母袷揭?
例子8:遞歸面試題中要補(bǔ)全的代碼(含個(gè)人的詳細(xì)解析和理解,遞歸方法)
//遞歸面試題 START
? ?function getValue(obj,props){
? ? //面試題中要補(bǔ)全的代碼:
? if(props.length-1==0){return obj[props[0]];}
? else{?
?
? return getValue(obj[props[0]],props.slice(1))}
??
/*個(gè)人解析:
?['a','p','name']就是props
props.length-1==0表示props為['a']這個(gè)長(zhǎng)度為1的情況
obj依次會(huì)變成
{
? ? ? ? ? ??a: {
? ? ? ? ? ??p: {
? ? ? ? ? ??name: 'Tom'
? ? ? ? ? ??}
? ? ? ? ? ??}
? ? ? ? ? ? };
變成
? ? a: {
? ? ? ? ? ??p: {
? ? ? ? ? ??name: 'Tom'
? ? ? ? ? ??}
? ? ? ? ? ??}
? ? ? ? ? ? };
變成
?
? ? p: {
? ? ? ? ? ??name: 'Tom'
? ? ? ? ? ??}
props依次變?yōu)?/span>
?['a','p','name']
變?yōu)?/p>
?[''p','name']
變?yōu)?/p>
?['name']
最終
if(props.length-1==0){return?obj[props[0]];}中
obj[props[0]]變?yōu)?/span>
?? p: {
? ? ? ? ? ??name: 'Tom'
? ? ? ? ? ??}[?['name'][0]]
?else中最終表達(dá)式執(zhí)行的最終結(jié)果
?包括if或包括else if中寫自己要定義的函數(shù)的格式的常量可知值表達(dá)式就可以?
該題中的getValue(obj[props[0]],props.slice(1))是最終的表達(dá)式。
執(zhí)行最終的表達(dá)式,使用(被)賦值法,obj被賦值為obj[props[0]],
"props"(這里我把雙引號(hào)中的內(nèi)容表示為會(huì)被賦值的可變部分
雙引號(hào)在這里僅僅是我的標(biāo)記,方便讀者等等看懂我的意思)被賦值為props.slice(1),
最終 if("props".length-1==0)
中"props".length-1的值會(huì)為0,return obj[props[0]];這個(gè)初始項(xiàng)。
賦值法是我常用于各種方面,比如理解,
運(yùn)用一些東西的方法,這里的"值"可以代表很多東西。
*/
??
??
}
? ? ? ? ? ? var o = {
? ? ? ? ? ? a: {
? ? ? ? ? ? p: {
? ? ? ? ? ? name: 'Tom'
? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? };
var v = getValue(o,['a','p','name']);
console.log(v);//Tom
/*
?slice() 方法可從已有的數(shù)組中返回選定的元素。
?個(gè)人總結(jié)語法:
arrayObject.slice(start,end)或arrayObject.slice(start)
arrayObject.slice(start):第start到最后一個(gè)的數(shù)組中的對(duì)象的值
arrayObject.slice(start,end):第start到第end-1個(gè)的數(shù)組中的對(duì)象的值
slice:切
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr.slice(1) + "<br />")的結(jié)果是John,Thomas
*/
//遞歸面試題 END
例子9:用遞歸求斐波那契數(shù)的第n項(xiàng)(含個(gè)人的演算,其實(shí)遞歸就是傳入?yún)?shù)有個(gè)依次變化的過程)
//0,1,1,2,3,5
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<script>
function f(n){
if(n==1){return 0;}
if(n==2){return 1;}
else{
return f(n-1)+f(n-2);
}
}
console.log(f(5))//打印出第n個(gè)斐波那契數(shù)列的項(xiàng),這里為3
//0,1,1,2,3
</script>
<body>
</body>
</html>
個(gè)人解析演算:
console.log(f(5))的內(nèi)容會(huì)依次變成
?f(4)+f(3);
變成
?f(3)+f(2)+?f(2)+f(1);變成??f(2)+f(1)+f(2)+?f(2)+f(1)=1+0+1+1+0=3
例子10:用遞歸實(shí)現(xiàn)求和與階乘
//和:
function sum(n){
if(n==1){return 1;}
else{
return sum(n-1)+n;
}
}
console.log(sum(5))
// 階乘:
function jc(n){
if(n==1){return 1;}
else{
return jc(n-1)*n;
}
}
console.log(jc(5))
例子11:(15分) 請(qǐng)定義一個(gè)函數(shù)repeat:(閉包)
function repeat ( func, nums, times ) {
// fill it
}
//函數(shù)repeat的調(diào)用方法:?
var a = repeat( alert, 6,3000 ) ;?
A:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
//func:需要運(yùn)行的函數(shù)
//nums:func函數(shù)運(yùn)行的次數(shù)
//times:每次func函數(shù)運(yùn)行的間隔時(shí)間(毫秒為單位)
function repeat(func,nums,times){
return function(str){
var iv = setInterval(function(){
func(str);
if(--nums == 0) {
clearInterval(iv);
}
},times);
}
}
var a = repeat(alert,6,2000);
a('你好');
</script>
</head>
<body>
</body>
</html>?