哪儿能刷java题_拿下前端面试,就刷这套题!

原标题:拿下前端面试,就刷这套题!

来自:开源最前线(ID:OpenSourceTop)

java-questions是一个Java 进阶问题列表,从基础到进阶,测试你有多了解 Java,刷新你的知识,或者帮助你的 coding 面试!

java-questions在GitHub上 8107个Star,787个Fork。(GitHub地址:https://github.com/lydiahallie/java-questions)

1. 输出是什么?

functionsayHi{

console.log(name)

console.log(age)

varname = 'Lydia'

letage = 21

}

sayHi

A: Lydia 和 undefined

B: Lydia 和 ReferenceError

C: ReferenceError 和 21

D: undefined 和 ReferenceError

答案:D

在函数内部,我们首先通过 var 关键字声明了 name 变量。这意味着变量被提升了(内存空间在创建阶段就被设置好了),直到程序运行到定义变量位置之前默认值都是 undefined。因为当我们打印 name 变量时还没有执行到定义变量的位置,因此变量的值保持为 undefined。

通过 let 和 const 关键字声明的变量也会提升,但是和 var 不同,它们不会被初始化。在我们声明(初始化)之前是不能访问它们的。这个行为被称之为暂时性死区。当我们试图在声明之前访问它们时,Java 将会抛出一个 ReferenceError 错误。

2. 输出是什么?

for(var i = 0; i < 3; i++) {

setTimeout( =>console.log(i), 1)

}

for(let i = 0; i < 3; i++) {

setTimeout( =>console.log(i), 1)

}

A: 0 1 2 和 0 1 2

B: 0 1 2 和 3 3 3

C: 3 3 3 和 0 1 2

答案:C

由于 Java 的事件循环,setTimeout 回调会在遍历结束后才执行。因为在第一个遍历中遍历 i 是通过 var 关键字声明的,所以这个值是全局作用域下的。在遍历过程中,我们通过一元操作符 ++ 来每次递增 i 的值。当 setTimeout 回调执行的时候,i 的值等于 3。

在第二个遍历中,遍历 i 是通过 let 关键字声明的:通过 let 和 const 关键字声明的变量是拥有块级作用域(指的是任何在 {} 中的内容)。在每次的遍历过程中,i 都有一个新值,并且每个值都在循环内的作用域中。

3. 输出是什么?

constshape = {

radius: 10,

diameter {

returnthis.radius * 2

},

perimeter: =>2* Math.PI * this.radius

}

shape.diameter

shape.perimeter

A: 20 and 62.83185307179586

B: 20 and NaN

C: 20 and 63

D: NaN and 63

答案:B

注意 diameter 的值是一个常规函数,但是 perimeter 的值是一个箭头函数。

对于箭头函数,this 关键字指向的是它当前周围作用域(简单来说是包含箭头函数的常规函数,如果没有常规函数的话就是全局对象),这个行为和常规函数不同。这意味着当我们调用 perimeter 时,this 不是指向 shape 对象,而是它的周围作用域(在例子中是 window)。

在 window 中没有 radius 这个属性,因此返回 undefined。

4. 输出是什么?

;+ true

! 'Lydia'

A: 1 and false

B: false and NaN

C: false and false

答案:A

一元操作符加号尝试将 bool 转为 number。true 转换为 number 的话为 1,false 为 0。字符串 'Lydia' 是一个真值,真值取反那么就返回 false。

5. 哪一个是无效的?

constbird = {

size: 'small'

}

constmouse = {

name: 'Mickey',

small: true

}

A: mouse.bird.size

B: mouse[bird.size]

C: mouse[bird["size"]]

D: All of them are valid

答案:A

在 Java 中,所有对象的 keys 都是字符串(除非对象是 Symbol)。尽管我们可能不会定义它们为字符串,但它们在底层总会被转换为字符串。

当我们使用括号语法时([]),Java 会解释(或者 unboxes)语句。它首先看到第一个开始括号 [ 并继续前进直到找到结束括号 ]。只有这样,它才会计算语句的值。

mouse[bird.size]:首先计算 bird.size,这会得到 small。mouse["small"] 返回 true。

然后使用点语法的话,上面这一切都不会发生。mouse 没有 bird 这个 key,这也就意味着 mouse.bird 是 undefined。然后当我们使用点语法 mouse.bird.size 时,因为 mouse.bird 是 undefined,这也就变成了 undefined.size。这个行为是无效的,并且会抛出一个错误类似 Cannot read property "size" of undefined。

6. 输出是什么?

letc = { greeting: 'Hey!'}

letd

d = c

c.greeting = 'Hello'

console.log(d.greeting)

A: Hello

B: undefined

C: ReferenceError

D: TypeError

答案:A

在 Java 中,当设置两个对象彼此相等时,它们会通过引用进行交互。首先,变量 c 的值是一个对象。接下来,我们给 d 分配了一个和 c 对象相同的引用。

75803e682fd716b0f85c37dd20c4887c.png

因此当我们改变其中一个对象时,其实是改变了所有的对象。

查看更多题型,可以自行到GitHub详情页查看,最后,能不能拿下前端面试,还是得靠你自己,猿妹只能帮你到这了。

●编号193,输入编号直达本文返回搜狐,查看更多

责任编辑:

几十个Java示例程序,搞懂了考试不成问 【程序1】 目:古典问:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 【程序2】 目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 【程序3】 目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 【程序4】 目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 【程序5】 目:利用条件运算符的嵌套来完成此:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下 的用C表示。 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 【程序6】 目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 【程序7】 目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 1.程序分析:利用while语句,条件为输入的字符不为'\n'. 【程序8】 目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加), 几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。 【程序9】 目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完 数。 【程序10】 目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多 少米?第10次反弹多高? 【程序11】 目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 【程序12】 目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万 元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部 分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可 提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 【程序13】 目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足 如下条件,即是结果。请看具体分析: 【程序14】 目:输入某年某月某日,判断这一天是这一年的第几天? 1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且 输入月份大于3时需考虑多加一天。 【程序15】 目:输入三个整数x,y,z,请把这三个数由小到大输出。 1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x 与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 【程序16】 目:输出9*9口诀。 1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值