JS 燒腦面試題大賞

本文精選了20多道具有一定迷惑性的js題,主要考察的是類型判斷、作用域、this指向、原型、事件循環等知識點,每道題都配有詳細傻瓜式的解析,偏向于初學者,大佬請隨意。

第1題

let?a?=?1
function?b(a)?{a?=?2console.log(a)
}
b(a)
console.log(a)

答案

2、1

解析

首先基本類型數據是按值傳遞的,所以執行b函數時,b的參數a接收的值為1,參數a相當于函數內部的變量,當本作用域有和上層作用域同名的變量時,無法訪問到上層變量,所以函數內無論怎么修改a,都不影響上層,所以函數內部打印的a是2,外面打印的仍是1。

第2題

function?a?(b?=?c,?c?=?1)?{console.log(b,?c)
}
a()

答案

報錯

解析

給函數多個參數設置默認值實際上跟按順序定義變量一樣,所以會存在暫時性死區的問題,即前面定義的變量不能引用后面還未定義的變量,而后面的可以訪問前面的。

第3題

let?a?=?b?=?10
;(function(){?let?a?=?b?=?20?
})()
console.log(a)
console.log(b)

答案

10、20

解析

連等操作是從右向左執行的,相當于b = 10、let a = b,很明顯b沒有聲明就直接賦值了,所以會隱式創建為一個全局變量,函數內的也是一樣,并沒有聲明b,直接就對b賦值了,因為作用域鏈,會一層一層向上查找,找了到全局的b,所以全局的b就被修改為20了,而函數內的a因為重新聲明了,所以只是局部變量,不影響全局的a,所以a還是10。

第4題

var?a?=?{n:1}
var?b?=?a
a.x?=?a?=?{n:2}
console.log(a.x)
console.log(b.x)

答案

undefined、{n: 2}

解析

恕筆者不才,這道題筆者做一次錯一次。

反正按照網上大部分的解釋是因為.運算符優先級最高,所以會先執行a.x,此時a、b共同指向的{n: 1}變成了{n: 1, x: undefined},然后按照連等操作從右到左執行代碼,a = {n: 2},顯然,a現在指向了一個新對象,然后a.x = a,因為a.x最開始就執行過了,所以這里其實等價于:({n: 1, x: undefined}).x = b.x = a = {n: 2}。

第5題

var?arr?=?[0,?1,?2]
arr[10]?=?10
console.log(arr.filter(function?(x)?{return?x?===?undefined
}))

答案

[]

解析

這題比較簡單,arr[10]=10,那么索引3到9位置上都是undefined,arr[3]等打印出來也確實是undefined,但是,這里其實涉及到ECMAScript版本不同對應方法行為不同的問題,ES6之前的遍歷方法都會跳過數組未賦值過的位置,也就是空位,但是ES6新增的for of方法就不會跳過。

第6題

var?name?=?'World'
;(function?()?{if?(typeof?name?===?'undefined')?{var?name?=?"Jack"console.info('Goodbye?'?+?name)}?else?{console.info('Hello?'?+?name)}
})()

答案

Goodbye Jack

解析

這道題考察的是變量提升的問題,var聲明變量時會把變量自動提升到當前作用域頂部,所以函數內的name雖然是在if分支里聲明的,但是也會提升到外層,因為和全局的變量name重名,所以訪問不到外層的name,最后因為已聲明未賦值的變量的值都為undefined,導致if的第一個分支滿足條件。

第7題

console.log(1?+?NaN)
console.log("1"?+?3)
console.log(1?+?undefined)
console.log(1?+?null)
console.log(1?+?{})
console.log(1?+?[])
console.log([]?+?{})

答案

NaN、13、NaN、1、1[object Object]、1、[object Object]

解析

這道題考察的顯然是+號的行為:

1.如果有一個操作數是字符串,那么把另一個操作數轉成字符串執行連接

2.如果有一個操作數是對象,那么調用對象的valueOf方法轉成原始值,如果沒有該方法或調用后仍是非原始值,則調用toString方法

3.其他情況下,兩個操作數都會被轉成數字執行加法操作

第8題

var?a={},b={key:'b'},c={key:'c'}
a[b]=123
a[c]=456
console.log(a[b])

答案

456

解析

對象有兩種方法設置和引用屬性,obj.name和obj['name'],方括號里可以字符串、數字和變量設置是表達式等,但是最終計算出來得是一個字符串,對于上面的b和c,它們兩個都是對象,所以會調用toString()方法轉成字符串,對象轉成字符串和數組不一樣,和內容無關,結果都是[object Obejct],所以a[b]=a[c]=a['[object Object]']。

第9題

var?out?=?25
var?inner?=?{out:?20,func:?function?()?{var?out?=?30return?this.out}
};
console.log((inner.func,?inner.func)())
console.log(inner.func())
console.log((inner.func)())
console.log((inner.func?=?inner.func)())

答案

25、20、20、25

解析

這道題考察的是this指向問題:

1.逗號操作符會返回表達式中的最后一個值,這里為inner.func對應的函數,注意是函數本身,然后執行該函數,該函數并不是通過對象的方法調用,而是在全局環境下調用,所以this指向window,打印出來的當然是window下的out

2.這個顯然是以對象的方法調用,那么this指向該對象

3.加了個括號,看起來有點迷惑人,但實際上(inner.func)和inner.func是完全相等的,所以還是作為對象的方法調用

4.賦值表達式和逗號表達式相似,都是返回的值本身,所以也相對于在全局環境下調用函數

第10題

let?{a,b,c}?=?{?c:3,?b:2,?a:1?}
console.log(a,?b,?c)

答案

1、2、3

解析

這題考察的是變量解構賦值的問題,數組解構賦值是按位置對應的,而對象只要變量與屬性同名,順序隨意。

第11題

console.log(Object.assign([1,?2,?3],?[4,?5]))

答案

[4, 5, 3]

解析

是不是從來沒有用assign方法合并過數組?assign方法可以用于處理數組,不過會把數組視為對象,比如這里會把目標數組視為是屬性為0、1、2的對象,所以源數組的0、1屬性的值覆蓋了目標對象的值。

第12題

var?x=1
switch(x++)
{case?0:?++xcase?1:?++xcase?2:?++x
}
console.log(x)

答案

4

解析

這題考查的是自增運算符的前綴版和后綴版,以及switch的語法,后綴版的自增運算符會在語句被求值后才發生,所以x會仍以1的值去匹配case分支,那么顯然匹配到為1的分支,此時,x++生效,x變成2,再執行++x,變成3,因為沒有break語句,所以會進入當前case后面的分支,所以再次++x,最終變成4。

第13題

console.log(typeof?undefined?==?typeof?NULL)
console.log(typeof?function?()?{}?==?typeof?class?{})

答案

true、true

解析

1.首先不要把NULL看成是null,js的關鍵字是區分大小寫的,所以這就是一個普通的變量,而且沒有聲明,typeof對沒有聲明的變量使用是不會報錯的,返回'undefined',typeof對undefined使用也是'undefined',所以兩者相等

2.typeof對函數使用返回'function',class只是es6新增的語法糖,本質上還是函數,所以兩者相等

第14題

var?count?=?0
console.log(typeof?count?===?"number")
console.log(!!typeof?count?===?"number")

答案

true、false

解析

1.沒啥好說的,typeof對數字類型返回'number'。

2.這題考查的是運算符優先級的問題,邏輯非!的優先級比全等===高,所以先執行!!typeof count,結果為true,然后執行true === 'number',結果當然為false,可以點擊這里查看優先級列表:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#table。

第15題

"use?strict"
a?=?1
var?a?=?2
console.log(window.a)
console.log(a)

答案

2、2

解析

var聲明會把變量提升到當前作用域頂部,所以a=1并不會報錯,另外在全局作用域下使用var聲明變量,該變量會變成window的一個屬性,以上兩點都和是否在嚴格模式下無關。

第16題

var?i?=?1
function?b()?{console.log(i)
}
function?a()?{var?i?=?2b()
}
a()

答案

1

解析

這道題考察的是作用域的問題,作用域其實就是一套變量的查找規則,每個函數在執行時都會創建一個執行上下文,其中會關聯一個變量對象,也就是它的作用域,上面保存著該函數能訪問的所有變量,另外上下文中的代碼在執行時還會創建一個作用域鏈,

如果某個標識符在當前作用域中沒有找到,會沿著外層作用域繼續查找,直到最頂端的全局作用域,因為js是詞法作用域,在寫代碼階段就作用域就已經確定了,換句話說,是在函數定義的時候確定的,而不是執行的時候,所以a函數是在全局作用域中定義的,雖然在b函數內調用,但是它只能訪問到全局的作用域而不能訪問到b函數的作用域。

第17題

var?obj?=?{name:?'abc',fn:?()?=>?{console.log(this.name)}
};
obj.name?=?'bcd'
obj.fn()

答案

undefined

解析

這道題考察的是this的指向問題,箭頭函數執行的時候上下文是不會綁定this的,所以它里面的this取決于外層的this,這里函數執行的時候外層是全局作用域,所以this指向window,window對象下沒有name屬性,所以是undefined。

第18題

const?obj?=?{a:?{a:?1}
};
const?obj1?=?{a:?{b:?1}
};
console.log(Object.assign(obj,?obj1))

答案

{a: {b: 1}}

解析

這道題很簡單,因為assign方法執行的是淺拷貝,所以源對象的a屬性會直接覆蓋目標對象的a屬性。

第19題

console.log(a)
var?a?=?1
var?getNum?=?function()?{a?=?2
}
function?getNum()?{a?=?3
}
console.log(a)
getNum()
console.log(a)

答案

undefined、1、2

解析

首先因為var聲明的變量提升作用,所以a變量被提升到頂部,未賦值,所以第一個打印出來的是undefined。

接下來是函數聲明和函數表達式的區別,函數聲明會有提升作用,在代碼執行前就把函數提升到頂部,在執行上下文上中生成函數定義,所以第二個getNum會被最先提升到頂部,然后是var聲明getNum的提升,但是因為getNum函數已經被聲明了,所以就不需要再聲明一個同名變量,

接下來開始執行代碼,執行到var getNum = fun...時,雖然聲明被提前了,但是賦值操作還是留在這里,所以getNum被賦值為了一個函數,下面的函數聲明直接跳過,最后,getNum函數執行前a打印出來還是1,執行后,a被修改成了2,所以最后打印出來的2。

第20題

var?scope?=?'global?scope'
function?a(){function?b(){?console.log(scope)}return?bvar?scope?=?'local?scope'
}
a()()

答案

undefined

解析

這題考查的還是變量提升和作用域的問題,雖然var聲明是在return語句后面,但還是會提升到a函數作用域的頂部,然后又因為作用域是在函數定義的時候確定的,與調用位置無關,所以b的上層作用域是a函數,scope在b自身的作用域里沒有找到,向上查找找到了自動提升的并且未賦值的scope變量,所以打印出undefined。

第21題

function?fn?(){?console.log(this)?
}
var?arr?=?[fn]
arr[0]()

答案

打印出arr數組本身

解析

函數作為某個對象的方法調用,this指向該對象,數組顯然也是對象,只不過我們都習慣了對象引用屬性的方法:obj.fn,但是實際上obj['fn']引用也是可以的。

第22題

var?a?=?1
function?a(){}
console.log(a)var?b
function?b(){}
console.log(b)function?b(){}
var?b
console.log(b)

答案

1、b函數本身、b函數本身

解析

這三小題都涉及到函數聲明和var聲明,這兩者都會發生提升,但是函數會優先提升,所以如果變量和函數同名的話,變量的提升就忽略了。

1.提升完后,執行到賦值代碼,a被賦值成了1,函數因為已經聲明提升了,所以跳過,最后打印a就是1。

2.和第一題類似,只是b沒有賦值操作,那么執行到這兩行相當于都沒有操作,b當然是函數。

3.和第二題類似,只是先后順序換了一下,但是并不影響兩者的提升順序,仍是函數優先,同名的var聲明提升忽略,所以打印出b還是函數。

第23題

function?Foo()?{getName?=?function?()?{?console.log(1)?}return?this
}
Foo.getName?=?function?()?{?console.log(2)?}
Foo.prototype.getName?=?function?()?{?console.log(3)?}
var?getName?=?function?()?{?console.log(4)?}
function?getName()?{?console.log(5)?}//請寫出以下輸出結果:
Foo.getName()
getName()
Foo().getName()
getName()
new?Foo.getName()
new?Foo().getName()
new?new?Foo().getName()

答案

2、4、1、1、2、3、3

解析

這是一道綜合性題目,首先getName函數聲明會先提升,然后getName函數表達式提升,但是因為函數聲明提升在線,所以忽略函數表達式的提升,然后開始執行代碼,執行到var getName= ...時,修改了getName的值,賦值成了打印4的新函數。

1.執行Foo函數的靜態方法,打印出2。

2.執行getName,當前getName是打印出4的那個函數。

3.執行Foo函數,修改了全局變量getName,賦值成了打印1的函數,然后返回this,因為是在全局環境下執行,所以this指向window,因為getName已經被修改了,所以打印出1。

4.因為getName沒有被重新賦值,所以再執行仍然打印出1。

5.new操作符是用來調用函數的,所以new Foo.getName()相當于new (Foo.getName)(),所以new的是Foo的靜態方法getName,打印出2。

6.因為點運算符(.)的優先級和new是一樣高的,所以從左往右執行,相當于(new Foo()).getName(),對Foo使用new調用會返回一個新創建的對象,然后執行該對象的getName方法,該對象本身并沒有該方法,所以會從Foo的原型對象上查找,找到了,所以打印出3。

7.和上題一樣,點運算符(.)的優先級和new一樣高,另外new是用來調用函數的,所以new new Foo().getName()相當于new ((new Foo()).getName)(),括號里面的就是上一題,所以最后找到的是Foo原型上的方法,無論是直接調用,還是通過new調用,都會執行該方法,所以打印出3。

第24題

const?person?=?{address:?{country:"china",city:"hangzhou"},say:?function?()?{console.log(`it's?${this.name},?from?${this.address.country}`)},setCountry:function?(country)?{this.address.country=country}
}const?p1?=?Object.create(person)
const?p2?=?Object.create(person)p1.name?=?"Matthew"
p1.setCountry("American")p2.name?=?"Bob"
p2.setCountry("England")p1.say()
p2.say()

答案

it's Matthew, from England

it's Bob, from England

解析

Object.create方法會創建一個對象,并且將該對象的__proto__屬性指向傳入的對象,所以p1和p2兩個對象的原型對象指向了同一個對象,接著給p1添加了一個name屬性,然后調用了p1的setCountry方法,p1本身是沒有這個方法的,所以會沿著原型鏈進行查找,在它的原型上,也就是person對象上找到了這個方法,執行這個方法會給address對象的country屬性設置傳入的值,p1本身也是沒有address屬性的,

但是和name屬性不一樣,address屬性在原型對象上找到了,并且因為是個引用值,所以會成功修改它的country屬性,接著對p2的操作也是一樣,然后因為原型中存在引用值會在所有實例中共享,所以p1和p2它們引用的address也是同一個對象,一個實例修改了,會反映到所有實例上,所以p2的修改會覆蓋p1的修改,最終country的值為England。

第25題

setTimeout(function()?{console.log(1)
},?0)
new?Promise(function(resolve)?{console.log(2)for(?var?i=0?;?i<10000?;?i++?)?{i?==?9999?&&?resolve()}console.log(3)
}).then(function()?{console.log(4)
})
console.log(5)

答案

2、3、5、4、1

解析

這道題顯然考察的是事件循環的知識點。

js是一門單線程的語言,但是為了執行一些異步任務時不阻塞代碼,以及避免等待期間的資源浪費,js存在事件循環的機制,單線程指的是執行js的線程,稱作主線程,其他還有一些比如網絡請求的線程、定時器的線程,主線程在運行時會產生執行棧,棧中的代碼如果調用了異步api的話則會把事件添加到事件隊列里,

只要該異步任務有了結果便會把對應的回調放到【任務隊列】里,當執行棧中的代碼執行完畢后會去讀取任務隊列里的任務,放到主線程執行,當執行棧空了又會去檢查,如此往復,也就是所謂的事件循環。

異步任務又分為【宏任務】(比如setTimeout、setInterval)和【微任務】(比如promise),它們分別會進入不同的隊列,執行棧為空完后會優先檢查微任務隊列,如果有微任務的話會一次性執行完所有的微任務,然后去宏任務隊列里檢查,如果有則取出一個任務到主線程執行,執行完后又會去檢查微任務隊列,如此循環。

回到這題,首先整體代碼作為一個宏任務開始執行,遇到setTimeout,相應回調會進入宏任務隊列,然后是promise,promise的回調是同步代碼,所以會打印出2,for循環結束后調用了resolve,所以then的回調會被放入微任務隊列,然后打印出3,最后打印出5,到這里當前的執行棧就空了,那么先檢查微任務隊列,發現有一個任務,那么取出來放到主線程執行,打印出4,最后檢查宏任務隊列,把定時器的回調放入主線程執行,打印出1。

第26題

console.log('1');setTimeout(function()?{console.log('2');process.nextTick(function()?{console.log('3');});new?Promise(function(resolve)?{console.log('4');resolve();}).then(function()?{console.log('5');});
});?process.nextTick(function()?{console.log('6');
});new?Promise(function(resolve)?{console.log('7');resolve();
}).then(function()?{console.log('8');
});setTimeout(function()?{console.log('9');process.nextTick(function()?{console.log('10');})?new?Promise(function(resolve)?{console.log('11');resolve();}).then(function()?{console.log('12')});
})

答案

1、7、6、8、2、4、9、11、3、10、5、12

解析

這道題和上一題差不多,但是出現了process.nextTick,所以顯然是在node環境下,node也存在事件循環的概念,但是和瀏覽器的有點不一樣,nodejs中的宏任務被分成了幾種不同的階段,

兩個定時器屬于timers階段,setImmediate屬于check階段,socket的關閉事件屬于close callbacks階段,其他所有的宏任務都屬于poll階段,

除此之外,只要執行到前面說的某個階段,那么會執行完該階段所有的任務,這一點和瀏覽器不一樣,瀏覽器是每次取一個宏任務出來執行,執行完后就跑去檢查微任務隊列了,

但是nodejs是來都來了,一次全部執行完該階段的任務好了,那么process.nextTick和微任務在什么階段執行呢,在前面說的每個階段的后面都會執行,但是process.nextTick會優先于微任務,一圖勝千言:

理解了以后再來分析這道題就很簡單了,首先執行整體代碼,先打印出1,setTimeout回調扔進timers隊列,nextTick的扔進nextTick的隊列,promise的回調是同步代碼,執行后打印出7,then回調扔進微任務隊列,然后又是一個setTimeout回調扔進timers隊列,到這里當前節點就結束了,

檢查nextTick和微任務隊列,nextTick隊列有任務,執行后打印出6,微任務隊列也有,打印出8,接下來按順序檢查各個階段,check隊列、close callbacks隊列都沒有任務,到了timers階段,發現有兩個任務,先執行第一個,打印出2,然后nextTick的扔進nextTick的隊列,執行promise打印出4,then回調扔進微任務隊列,

再執行第二個setTimeout的回調,打印出9,然后和剛才一樣,nextTick的扔進nextTick的隊列,執行promise打印出11,then回調扔進微任務隊列,到這里timers階段也結束了,執行nextTick隊列的任務,發現又兩個任務,依次執行,打印出3和10,然后檢查微任務隊列,也是兩個任務,依次執行,打印出5和12,到這里是有隊列都清空了。

作者:街角小林

https://juejin.cn/post/6989433079760683022

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284312.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284312.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284312.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

蘋果ios用js的Date()出現NaN問題解決辦法

原文:蘋果ios用js的Date&#xff08;&#xff09;出現NaN問題解決辦法ios使用如下方法獲得NaN&#xff0c;安卓手機則是正常計算&#xff0c;解決方法是換個這個時間的格式 new Date("2017-04-28 23:59:59").getTime() 換成如下方式就正常了&#xff0c;就是‘-’換成…

Thinkphp 驗證碼、文件上傳

一、驗證碼 驗證碼參數 例題&#xff1a;登錄時驗證下驗證碼 LoginController.class.php <?php namespace Home\Controller; use Think\Controller; class LoginController extends Controller {public function Login(){if(empty($_POST)){$this->display(); } e…

ArcGIS實驗教程——實驗四十七:數據驅動頁工具批量制作甘肅省各地級市人口七普專題圖集

本實驗詳細講解利用ArcGIS數據驅動頁工具,制作甘肅省各地級市人口七普專題圖集。 文章目錄 1. 數據驅動頁工具簡介2. 甘肅省各地級市人口七普專題圖集2.1 符號化及標注2.2 數據驅動頁的創建2.3 數據驅動頁面文本操作2.4 數據驅動頁的導出1. 數據驅動頁工具簡介 數據驅動頁面是…

為什么Java有GC調優而沒聽說過有CLR的GC調優?

前言在很多的場合我都遇到過一些群友提這樣的一些問題&#xff1a;為什么Java有GC調優而CLR沒有聽說過有GC調優呢&#xff1f;到底是Java的JVM GC比較強還是C#使用的.NET CLR的GC比較強呢&#xff1f;其實業內已經有幾位大佬的高贊文章和大家分享一下&#xff0c;主要討論JVM和…

Ubuntu16.04 - 安裝RabbitVCS,linux下的TortoiseSVN!!!

RabbitVCS 官網&#xff1a;http://rabbitvcs.org/ 1&#xff0c;添加PPA源。在shell里面執行下面命令&#xff1a; sudo add-apt-repository ppa:rabbitvcs/ppa 這個命令執行完畢后&#xff0c;查看執行結果看是否密鑰導入成功&#xff0c;成功截圖&#xff1a; 如果導入密鑰失…

8 種最坑的SQL錯誤用法

1、LIMIT 語句 2、隱式轉換 3、關聯更新、刪除 4、混合排序 5、EXISTS語句 6、條件下推 7、提前縮小范圍 8、中間結果集下推 總結 sql語句的執行順序&#xff1a; FROM <left_table>ON <join_condition><join_type>JOIN <right_table>WHERE &…

Vue根據菜單json數據動態按需加載路由Vue-router

每個菜單項對應一個頁面組件&#xff0c;根據菜單項動態按需加載路由 路由配置的正確寫法&#xff1a; /*router/index.js*/ import Vue from vue import Router from vue-router import url from ./url import store from ../storeVue.use(Router)const router new Router({/…

【ArcGIS微課1000例】0047:制圖表達(2)---河流漸變效果的實現

當我們在ArcMap中加載河流數據時,得到的效果往往如圖所示,僅僅是表示河流位置的線要素,既無法真實地反映河流的實際情況,同時在出圖的時候也遠沒有任何美化效果。 文章目錄 1.創建制圖表達2.添加幾何效果3.使用制圖規則4.使用制圖表達屬性覆蓋警告:這些操作會對您的數據庫…

操作系統思考 第二章 進程

第二章 進程 作者&#xff1a;Allen B. Downey 原文&#xff1a;Chapter 2 Processes 譯者&#xff1a;飛龍 協議&#xff1a;CC BY-NC-SA 4.0 2.1 抽象和虛擬化 在我們談論進程之前&#xff0c;我打算先定義幾個東西&#xff1a; 抽象&#xff08;Abstraction&#xff09;&…

1 句代碼,搞定 ASP.NET Core 綁定多個源到同一個類

問題有群友希望將路由中的信息綁定到一個Dto對象中&#xff1a;public class DDDDDto {[FromRoute(Name "collectionId")]public Guid collectionId { get; set; }[BindProperty(Name "relativeUrl")]public string relativeUrl { get; set; } }這樣就不用…

redux中間件的用法

1.定義 中間件就是一個函數&#xff0c;對store.dispatch方法進行了改造&#xff0c;在發出 Action 和執行 Reducer 這兩步之間&#xff0c;添加了其他功能。 2.舉例 日志中間件 import { applyMiddleware, createStore } from redux; import createLogger from redux-logger; …

設置git自動補全功能(windows版本)

目錄 下載 Git 的源代碼 在目錄中 git/contrib/completion/ 中找到 git-completion.bash 文件 將 git-completion.bash 文件改名為 .git-completion.bash 找到本機git安裝目錄 將.git-completion.bash文件復制到git安裝目錄下的etc文件夾 打開同目錄下的 bash.bashrc 文件&…

用Vue搭建一個應用盒子(二):datetime-picker

接著上次的進度&#xff0c;我們已經實現了一個todo-list。它已經具備了基本的功能&#xff0c;可以新建、編輯、刪除任務。但是美中不足的是&#xff0c;它的時間設定上只能通過輸入一段字符串來設定&#xff0c;很不社會。我們應該完成的效果是一個time-picker&#xff0c;日…

ArcGIS實驗教程——實驗四十八:ArcGIS制圖表達入門及案例教程

文章目錄 1. 制圖表達的概念1.1 什么是地圖表達1.2 使用制圖表達改善要素外觀1.3 制圖表達的優點2. 使用制圖表達2.1 創建制圖表達2.2 使用制圖表達來符號化圖層2.3 使用制圖表達規則3. 地圖表達實戰案例1.創建制圖表達2.添加幾何效果3.使用制圖規則4.使用制圖表達屬性覆蓋1. 制…

PAT (Advanced Level) 1070. Mooncake (25)

簡單貪心。先買性價比高的。 #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<stack> #include<queue> #include<string> #include<algorithm> using namespace std;doub…

[轉]Java 18 還未用上,Java 19 最新兩大特性曝光

鐵打的 Java&#xff0c;流水的版本。 不久前&#xff0c;Java 18 才正式發布&#xff0c;遵循 Oracle 六個月發一版本的頻率&#xff0c;Java 19 將在今年 9 月出爐。這不&#xff0c;還沒等眾多開發者用上 Java 18&#xff0c;關于 Java 19 最新的兩個目標功能就被披露了出…

文本生成器(bzoj 1030)

Description JSOI交給隊員ZYX一個任務&#xff0c;編制一個稱之為“文本生成器”的電腦軟件&#xff1a;該軟件的使用者是一些低幼人群&#xff0c;他們現在使用的是GW文本生成器v6版。該軟件可以隨機生成一些文章―――總是生成一篇長度固定且完全隨機的文章—— 也就是說&…

C# 值類型和引用類型講解

要了解值類型和引用類型&#xff0c;我們首先要知道堆和棧的區別&#xff1a;① 棧是編譯期間就分配好的內存空間&#xff0c;因此你的代碼中必須就棧的大小有明確的定義&#xff1b;堆是程序運行期間動態分配的內存空間&#xff0c;你可以根據程序的運行情況確定要分配的堆內存…

【ArcGIS微課1000例】0048:制圖表達(3)---水立方效果實現

本文講解ArcGIS中水立方效果的實現過程(制圖表達案例)。 文章目錄 一、效果展示二、制作步驟1. 創建數據庫及要素數據集2. 創建范圍3. 創建隨機點4. 創建泰森多邊形5. 創建制圖表達一、效果展示 基于制圖表達的思想,可以容易實現多種形式的水立方效果,例如: 怎么實現的呢…

Java中this與super的區別

2019獨角獸企業重金招聘Python工程師標準>>> this與super關鍵字在java中構造函數中的應用&#xff1a; ** super()函數 ** super()函數在子類構造函數中調用父類的構造函數時使用&#xff0c;而且必須要在構造函數的第一行&#xff0c;例如&#xff1a; class Ani…