这是我参与「第四届青训营 」笔记创作活动的的第20天
【2020】奇安信秋招前端方向试卷3
1. CPU的调度分为高级,中级和低级三种,其中低级调度是指?
高级调度是作业调度;中级调度是交换调度;低级调度是进程调度
2. 以下代码执行后,result的值变成什么?
var result=0;
function test(result){
result=1;
}
test(2);
答案:0
解释:result在方法内作为形参它的作用域仅限于这个方法,因此方法内的result=1并不会更改外界的result值
3. 以下代码执行后,result的值是什么?
function Test(name) { }
Test.name='Tom';
Test.prototype.name="John";
var result = (new Test('JK')).name;
答案:John
解释:实例化的对象从原型链上去找的name
不选Tom的原因是, 在ES5语法里, 构造函数的属性和方法必须放到函数的原型上, 实例才继承得到.
不选JK的原因是, 而后面实例里传的实参 'JK' ,在实例里没有变量接收, 等于没有实参使用, 必须在构造函数里this.name=name 接收好实参传递的值才行, 就像这样:
function Test(name) {
this.name = name
}
不选undefined的原因是, 原型里有对应的变量, 实例就会直接调原型的变量
4. 变量el为一个 <div class="a">元素,哪段代码能得到其滚动内容的高度( )
答案:el.scrollHeight
解释:ScrollHeight滚动内容高度。clientHeight可视内容高度 ScrollTop滚动过的高度
scrollHeight不是样式,是元素的属性
5. 对于有n 个结点的二叉树, 其高度为( )
答案:unknown
一棵二叉树有n个元素,n>0,它的高度最大为n,最小高度为[log2n]+1。
6. 操作系统相关算法
最佳置换算法(OPT) (理想置换算法):从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。
最佳置换算法可以用来评价其他算法。假定系统为某进程分配了三个物理块,并考虑有以下页面号引用串:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
进程运行时,先将7, 0, 1三个页面依次装入内存。进程要访问页面2时,产生缺页中断,根据最佳置换算法,选择第18次访问才需调入的页面7予以淘汰。然后,访问页面0时,因为已在内存中所以不必产生缺页中断。访问页面3时又会根据最佳置换算法将页面1淘汰
先进先出置换算法(FIFO) :是最简单的页面置换算法。这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。
最近最久未使用(LRU)算法: 这种算法的基本思想是:利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。再对上面的实例釆用LRU算法进行页面置换
7. 关于进程和线程描述正确的是?
theme: smartblue
1. CPU的调度分为高级,中级和低级三种,其中低级调度是指?
高级调度是作业调度;中级调度是交换调度;低级调度是进程调度
2. 以下代码执行后,result的值变成什么?
var result=0;
function test(result){
result=1;
}
test(2);
答案:0
解释:result在方法内作为形参它的作用域仅限于这个方法,因此方法内的result=1并不会更改外界的result值
3. 以下代码执行后,result的值是什么?
function Test(name) { }
Test.name='Tom';
Test.prototype.name="John";
var result = (new Test('JK')).name;
答案:John
解释:实例化的对象从原型链上去找的name
不选Tom的原因是, 在ES5语法里, 构造函数的属性和方法必须放到函数的原型上, 实例才继承得到.
不选JK的原因是, 而后面实例里传的实参 'JK' ,在实例里没有变量接收, 等于没有实参使用, 必须在构造函数里this.name=name 接收好实参传递的值才行, 就像这样:
function Test(name) {
this.name = name
}
不选undefined的原因是, 原型里有对应的变量, 实例就会直接调原型的变量
4. 变量el为一个 <div class="a">元素,哪段代码能得到其滚动内容的高度( )
答案:el.scrollHeight
解释:ScrollHeight滚动内容高度。clientHeight可视内容高度 ScrollTop滚动过的高度
scrollHeight不是样式,是元素的属性
5. 对于有n 个结点的二叉树, 其高度为( )
答案:unknown
一棵二叉树有n个元素,n>0,它的高度最大为n,最小高度为[log2n]+1。
6. 操作系统相关算法
最佳置换算法(OPT) (理想置换算法):从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。
最佳置换算法可以用来评价其他算法。假定系统为某进程分配了三个物理块,并考虑有以下页面号引用串:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
进程运行时,先将7, 0, 1三个页面依次装入内存。进程要访问页面2时,产生缺页中断,根据最佳置换算法,选择第18次访问才需调入的页面7予以淘汰。然后,访问页面0时,因为已在内存中所以不必产生缺页中断。访问页面3时又会根据最佳置换算法将页面1淘汰
先进先出置换算法(FIFO) :是最简单的页面置换算法。这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。
最近最久未使用(LRU)算法: 这种算法的基本思想是:利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。再对上面的实例釆用LRU算法进行页面置换
7. 关于进程和线程描述正确的是?
theme: smartblue
1. CPU的调度分为高级,中级和低级三种,其中低级调度是指?
高级调度是作业调度;中级调度是交换调度;低级调度是进程调度
2. 以下代码执行后,result的值变成什么?
var result=0;
function test(result){
result=1;
}
test(2);
答案:0
解释:result在方法内作为形参它的作用域仅限于这个方法,因此方法内的result=1并不会更改外界的result值
3. 以下代码执行后,result的值是什么?
function Test(name) { }
Test.name='Tom';
Test.prototype.name="John";
var result = (new Test('JK')).name;
答案:John
解释:实例化的对象从原型链上去找的name
不选Tom的原因是, 在ES5语法里, 构造函数的属性和方法必须放到函数的原型上, 实例才继承得到.
不选JK的原因是, 而后面实例里传的实参 'JK' ,在实例里没有变量接收, 等于没有实参使用, 必须在构造函数里this.name=name 接收好实参传递的值才行, 就像这样:
function Test(name) {
this.name = name
}
不选undefined的原因是, 原型里有对应的变量, 实例就会直接调原型的变量
4. 变量el为一个 <div class="a">元素,哪段代码能得到其滚动内容的高度( )
答案:el.scrollHeight
解释:ScrollHeight滚动内容高度。clientHeight可视内容高度 ScrollTop滚动过的高度
scrollHeight不是样式,是元素的属性
5. 对于有n 个结点的二叉树, 其高度为( )
答案:unknown
一棵二叉树有n个元素,n>0,它的高度最大为n,最小高度为[log2n]+1。
6. 操作系统相关算法
最佳置换算法(OPT) (理想置换算法):从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。
最佳置换算法可以用来评价其他算法。假定系统为某进程分配了三个物理块,并考虑有以下页面号引用串:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
进程运行时,先将7, 0, 1三个页面依次装入内存。进程要访问页面2时,产生缺页中断,根据最佳置换算法,选择第18次访问才需调入的页面7予以淘汰。然后,访问页面0时,因为已在内存中所以不必产生缺页中断。访问页面3时又会根据最佳置换算法将页面1淘汰
先进先出置换算法(FIFO) :是最简单的页面置换算法。这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。
最近最久未使用(LRU)算法: 这种算法的基本思想是:利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。再对上面的实例釆用LRU算法进行页面置换
7. 关于进程和线程描述正确的是?
解释:做个简单的比喻:进程=火车,线程=车厢
- 线程在进程下行进(单纯的车厢无法运行)
- 一个进程可以包含多个线程(一辆火车可以有多个车厢)
- 不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)
- 同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)
- 进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)
- 进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)
- 进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)
- 进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-"互斥锁"
- 进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”
8. 以下代码,在最上层的是:
<div style="z-index: 1;">
<div style="z-index: 3;">a</div>
</div>
<div style="z-index: 1;">
<div style="z-index: 3;">b</div>
</div>
<div style="z-index: 2;">c</div>
<div style="z-index: 1;">d</div>
答案:c
解释:a的父DOM节点的z-index值小于C的z-index值,而作为子DOM的a是在父节点div的z-index基础上进行显示的(备注:这题不严谨,元素的position默认是static。只有position非static的元素,z-index才起作用。)
9. 以下哪个选项是<form>标签的属性?
action是放表单提交的地址的
method是表单数据提交给服务器时, http协议的发送方法
<form action="/action_page.php" method="get">
9. 下面那个选项设置web页面的背景颜色?
答案:<body bgcolor = "color-name">
body标签的两个属性background和bgcolor,其中background只能写url表示背景图像,bgcolor写背景颜色
Html5不支持,Html4.01已废弃
10. 以下哪个是伪元素?
答案: :before
解释:
:伪类
::伪元素
11. 以下代码在控制台的运行结果是什么?
console.log([1,undefined,3,5].map((_, n) => n))
答案:[0,1,2,3]
解释:map方法是JavaScript数组的方法, 可以有三个参数,参数位置固定的, (当前值, 下标 , 数组), 当前值是必须填的, 如果不想填, 可以用_代替。题目中的n为下标。
//输出 [0, empty, 2, 3]
console.log([1, , 3, 5].map((_, n) => n));
//输出[0,1,2,3]
console.log([1, undefined, 3, 5].map((_, n) => n));
var tempArray = [1, , 3, 5];
for (temp of tempArray) {
//输出1 undefined 3 5
console.log(temp);
}
console.log("------------");
for (temp in tempArray) {
//输出0 2 3
console.log(temp);
}
11. 以下代码的输出结果是:
var o = { a: 1 };
Object.defineProperty(o, "b", {
value: 2,
writable: false,
enumerable: false,
configurable: true
});
o.a = 2;
o.b = 3;
console.log(o.a, o.b);
答案: 2 2
解释:数据被劫持了,o.b不可擦写,不可枚举
Object.defineProperty()方法的参数有三个(对象名, 属性名, 属性值的限制条件)
属性值的限制条件是个对象, {value:属性值, writable:属性值是否能被修改, enumerable:属性值能否被遍历, configurable:属性值能否被删除}
属性值的限制条件是个对象里有两个方法,get和set, get是限制你获取属性时的返回值, set在你修改属性值时自动执行, 如果使用这个两个函数, 不允许使用writable和value这两个属性
12. 关于cookie,以下说法正确的是( )
A. cookie值存在客户端
B. js通过document.cookie来读取cookie,通过document.cookie=''来清除cookie;
C. cookie可以设置失效时间
D. 通常,浏览器的cookie功能是启用状态
答案:ACD
解释:不能直接删除用户计算机中的 Cookie。但是,可以通过将 Cookie 的到期日期设置为过去的日期,让用户的浏览器来删除 Cookie. 用 expires=Thu, 01 Jan 1970 00:00:00 GMT" 就行
如果要删除某个Cookie,则只需要新建一个同名的Cookie,并将maxAge设置为0,并覆盖原来的Cookie
13. 在Webpack中,哪些loader是用来处理LESS的?
答案:css-loader; less-loader; style-loader;
14. 以下关于 ES6 中 Symbol 的描述正确的是?
答案:
Symbol 是一种 JS 原始数据类型
Symbol.for(“a”) === Symbol.for(“a”) 的结果为 true
解释:
选A不选D的原因:
Symbol是ES6新出基本数据类型, 所以Symbol()的类型是Symbol, 所以Symbol()instanceof Object 结
果应该为 false
不选B的原因:
Symbol的作用是代替字符串充当对象的属性名, 避免了命名冲突, 避免替换掉对象原有的属性. 因为每一个
Symbol都是独一无二的, 所以给对象添加新属性时, 不用管对象有没有同名属性.
所以Symbol(“a”) === Symbol(“a”)是为 false的.
选C的原因:
通过symbol.for()方法定义symbol的值,会在全局注册一个key=symbol的键值对, 所以
Symbol.for(“a”) === Symbol.for(“a”) 的结果为 true
15. 以下代码的返回结果包含哪些值 ( )
Object.assign( { ar: [1,2,3]}, { ar: [2,3,4] } )
答案:234
解释: Object.assign()方法用来合并对象的, 会把两个及两个以上对象里的属性和方法都放到一个对象里, 如果后面的对象的属性名相同, 后面的属性值会覆盖前面的属性值。
这道题ar是属性名, 属性值是数组, 因为属性名相同, 所以后一个数组就直接覆盖掉前一个数组
16. 操作系统是管理计算机硬件资源和软件资源的最基本的系统软件, 四大特征:共享性,并发性,虚拟性,异步性
17. 常见的负载均衡算法有?
答案:随机法、轮询、加权轮询、一致性哈希
拓展:
-
轮询算法:各个服务节点被访问的概率也基本相同,也主要应用在各个服务节点性能差异不大的情况下。
-
加权轮询算法:在轮询算法基础上的改进,可以通过给每个节点设置不同的权重来控制访问的概率,因此主要被用在服务节点性能差异比较大的情况。比如经常会出现一种情况,因为采购时间的不同,新的服务节点的性能往往要高于旧的节点,这个时候可以给新的节点设置更高的权重,让它承担更多的请求,充分发挥新节点的性能优势。
-
负载最低优先:由于复杂度和不可控制原因,实际应用还是很少的
-
hash类算法:因为它能够保证同一个客户端的请求始终访问同一个服务节点,所以适合服务端节点处理不同客户端请求差异较大的场景。比如服务端缓存里保存着客户端的请求结果,如果同一客户端一直访问一个服务节点,那么就可以一直从缓存中获取数据。
负载均衡(Load Balance)是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。