前端面试不仅考前端基础知识,还包括计算机基础知识。
1.IP是网络层无连接协议
UDP是传输层无连接协议
2.JavaScript 中没有私有成员的概念;所有对象属性都是公有的。不过,倒是有一个私有变量的概念。任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。
Object.create(null) 没有原型,所以并不是所有的对象的顶层对象都是Object*
3.下列关于性能优化说法正确的是()
A.减少http请求次数
B.减少DOM操作
D.少用全局变量、缓存dom节点查找结果
4.下列哪些属性是不可以被继承的()
margin float position
5.this对象的理解正确的是 ()
A.在不改变this指向的前提下,this总是指向函数的直接调用者
B.如果有new关键字,this指向new出来的那个对象
D.IE中attachEvent中的this总是指向全局对象Window
6.下列选项中可以实现浏览器内多个页签之间通讯的是()
cookie
localStorage
7.以下哪些请求头可以实现请求的缓存()
Cache-Control
Etag
If-Modified-Since
8.如果让你来实现前端的MVVM框架,View层需要支持不同终端的不同交互,下面哪些设计模式不太适合用来实现这个需求(单例模式 ,代理模式)
适合的是:观察者模式 适配器模式
9.为了达到移动设备的理想viewport,可以用meta标签对viewport进行控制,meta标签内可以控制下面哪些属性(C)
A.initial-scale
B.user-scalable
C.max-width √
D.minimum-scale
10.以下哪些表达式的结果为true(A,C,D)
undefined == null
isNaN(“100”)
parseInt(“1a”) === 1
[] instanceof Array
11.x={x:1};y={y:1};z=1;n='1’下面结果为true的是( )
正确答案: D
x === y
x==y
z === n
z ==n(√)
12.以下输出结果为object的是( )
正确答案: A C
typeof null
typeof undefined
typeof []
typeof 5
13.求字符串 ‘hello world’ 对应的ASCII码数组,并按照编码大小逆序。
输入:'hello world’
输出:[119, 114, 111, 111, 108, 108, 108, 104, 101, 100, 32]
const str = 'hello world';
const array = str.split('').map(letter => {
return
letter.charCodeAt();
}).sort(function()
{ return arguments[1] - arguments[0]; }
14.归并排序,堆排序和快速排序的平均时间复杂度都可以达到O(nlogn)但是堆排序和快速排序是不稳定的。
15.判定一个顺序栈 S (最多元素为 MAXSIZE )为空的条件是?
s->top == -1
16.不同数据类型储存方式不一样,数据类型分为简单数据类型和复杂数据类型,string,number,boolean,undefined,null是简单类型变量,对象是复杂类型变量;内存存储分为栈和堆,简单类型变量储存在栈中,而对象的内容储存在堆中,只是指向对象的内存地址储存在栈中。
内存分为堆和栈,简单来说:栈保存变量和对象的引用,堆保存对象。
17.以下关于MAC地址的说法中错误的是(D)
MAC地址的一部分字节是各个厂家从IEEE得来的
MAC地址一共有6个字节,他们从出厂时就被固化在网卡中
MAC地址也称做物理地址,或通常所说的计算机的硬件地址
局域网中的计算机在判断所收到的广播帧是否为自己应该接收的方法是,判断帧的MAC地址是否与本机的硬件地址相同
18.信道上可传送信号的最高频率和最低频率之差称为信道带宽
19.数据库中模糊查询
_:表示任意单个字符
%:表示任意个或多个字符
eg:使用MYSQL进行模糊查询 LIKE ‘_YOU%’,下面哪个是正确结果?YYOUYO
20.数组ARR=[1,2,3,4,5],以下返回值为5的是( )
push() 在数组末尾添加元素,返回新数组长度,所以返回5
pop() 删除数组最后一位,返回所删除的元素,所以返回5
shift() 删除数组第一位,返回所删除的元素,所以返回1
unshift() 在数组开头添加元素,返回新数组长度,所以返回5
21.代码var foo = “10”+3-“1”;console.log(foo);执行后,foo的值为( 102)运算中,+号,数字隐式转换成字符串。其余的运算符号是字符串隐式转换成数字。
解释:运算符号带来的隐式类型转换
对于“+”来说,有两个含义:第一个含义是做字符串拼接,第二个含义是加减法中的加法。如果操作数里有一个是字符串,其他的值将被转换成字符串。其他情况,操作数转换成数字执行加法运算。
而对于“ - ”来说,只有一个含义,就是做减法,自然不会转化成字符串。
①为任意的数据类型+""即可将其转换成String字符串类型,这是一种隐式类型转换,由浏览器自动完成,实际上也是调用String()函数。
②为任意的数据类型 -0 即可将其转换成Number数值类型。
22.下拉菜单中,用户更改表单元素Select中的值时,就会调用( OnChange)事件处理程序。
23.属于元素事件属性的是( )
onblur
required
onfocus
onsearch input才有
24.常用的git操作有以下哪些( )
Add Push Fetch Merge Tag
tag打标签 fetch从远程仓库获取资源到本地
25.关于HTTP状态码的描述,下面说法正确的是( )
正确答案: A B C
200 请求成功
304 上次请求后,请求的网页未修改过
404 页面未找到
503 请求未授权 302 :请求的网页已临时移动到新位置,临时重定向,请求的资源分配到了其他的URL(临时性的)。 301 :请求的网页已永久移动到新位置,永久重定向,表示请求的资源分配了新的URL(永久性)401:未认证,客户端请求中必须要带有一个www-Authenticate来描述如何认证,可以重复提交; 403:无权限,表示服务器收到了来自客户端的请求,但是拒绝了访问申请,原因可能是没有权限访问该网站,重复提交也没用。409("Conflict") 当客户端试图执行一个”会导致一个或多个资源处于不一致状态“的操作时,发送此响应代码。503是一种HTTP状态码。英文名503Service Unavailable与404(404 Not Found)是同属一种网页状态出错码。前者是服务器出错的一种返回状态,后者是网页程序没有相关的结果后返回的一种状态,需要优化网站的时候通常需要制作404出错页以便网站整体优化。
26.判断对象myObj是否存在的写法,下面说法错误的是( C)
typeof myObj == “undefined”
myObj === undefined
myObj === null
!this.hasOwnProperty(‘myObj’)
27.现有数组[5,2,0,1,3,1,4], 请实现去重功能后完成升序排序,并考虑性能。
输入:const array = [5, 2, 0, 1, 3, 1, 4];
输出:[0,1,2,3,4,5]
const array = [5, 2, 0, 1, 3, 1, 4];
function quickSort(array) {
if (array.length) {
const index = Math.floor(array.length / 2);
const mirror = array.splice(index, 1)[0];
let left = array.filter(item => {
return item < mirror;
}) || [];
let right = array.filter(item => {
return item >= mirror;
}) || [];
return arguments.callee(left).concat([mirror], arguments.callee(right));
} else {
return array;
}
}
console.log(quickSort(array)); // [0,1,1,2,3,4,5]
28.在n个有序顺序表中插入一个新元素,并保持原来的顺序不变,平均要移动的元素次数是n/2
29.退出目前的shell。 语法:exit [状态值] 补充说明:执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。exit也可用在script,离开正在执行的script,回到shell。
30.在MYSQL数据库中,以下哪条语句用于统计BOOK表中的记录总数?select count(*) from book;
总数指的是多少记录数,不是记录中某属性值之和,所以用count
31.下列关于使用link和@import,说法不正确的是(B)
A.页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载
B.link、@import均支持使用js控制DOM去改变样式
C.@import就只能加载CSS ,link标签还可以定义RSS等
D.import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题1.从属关系区别 @import是 CSS 提供的语法规则,只有导入样式表的作用;link是HTML提供的标签,不仅可以加载 CSS 文件,还可以定义 RSS、rel 连接属性等。 2.加载顺序区别 加载页面时,link标签引入的 CSS 被同时加载;@import引入的 CSS 将在页面加载完毕后被加载。 3.兼容性区别 @import是 CSS2.1 才有的语法,故只可在 IE5+ 才能识别;link标签作为 HTML 元素,不存在兼容性问题。 4.DOM可控性区别 可以通过 JS 操作 DOM ,插入link标签来改变样式;由于 DOM 方法是基于文档的,无法使用@import的方式插入样式。 5.权重区别 link引入的样式权重大于@import引入的样式。
32.页面缓存头。Http缓存头 ①Expires :它通常的使用格式是Expires:Fri ,24 Dec 2027 04:24:07 GMT,后面跟的是日期和时间,超过这个时间后,缓存的内容将失效 。②Last-Modified / If-Modified:一般服务端在响应头中返回一个Last-Modified字段,告诉浏览器这个页面的最后修改时间。 ③Etag/If-None-Match:用于验证缓存有效性
33.请判断一个字符串出现次数最多的字符及出现次数?
输入:const str = ‘asddfgdfwwqeweqwezczxcsdfgdgd’;
输出:’d’, 出现6次
const str = 'asddfgdfwwqeweqwezczxcsdfgdgd';
let map = {};
let maxTimes = 0,
target;
for (let i = 0; i < str.length;i++) {
if (map[str[i]] !== undefined) {
map[str[i]]++;
} else {
map[str[i]] = 1;
}
if (map[str[i]] > maxTimes) {
maxTimes = map[str[i]];
target = str[i];
}
}
map = null;
34.域名:.cn代表中国,以.cn结尾即中国国内域名,适用于其国内各机构、企业,常称为英文国内顶级域名,.CN类英文域名。1997年12月31日诞生并开通。注册局为CNNIC。按国家规定划分六类二级域名,后缀:.com.cn .net.cn .org.cn .gov.cn .edu.cn。现在已开放.cn二级域名注册。WWW网址中,用来表示国家的域名应该放在最后一部分。cn应该放最后。
35.输出结果???
for(var i=0;i<3;++i){
setTimeout(function(){
console.log(i);
},100);
}
每次for循环的时候setTimeout都会执行,因为setTimeout是异步函数,里面的function则不会立即执行,而是会被放入任务队列,因此放了3次;for循环的3次执行完之后,i变为3,然后全部执行任务队列中的函数,所以就是输出3个3。3,3,3
36.css 中经常有类似 background-image 这种通过 - 连接的字符,通过 javascript 设置样式的时候需要将这种样式转换成 backgroundImage 驼峰格式,请完成此转换功能。
输入:-webkit-background-image
输出:webkitBackgroundImage
const camel_hump = str => {
const temp =str.split(/\-|\_/);
if (temp &&temp.length) {
for (let i = 1; i < temp.length; i++) {
temp[i] = temp[i][0].toUpperCase()+ temp[i].slice(1);
}
}
return temp.join('');
}
37.请实现一个简单的事件机制,能够实现对事件的触发和监听。
如:EventEmitter.on(); EventEmitter.trigger();
const camel_hump = str => {
return str.replace(/(?:\-|\_)([a-z])/g, (input, match) => {
return match.toUpperCase();
});
}
38.攻击者使用无效IP地址,利用TCP连接的三次握手过程,连续发送会话请求,使受害主机处于开放会话的请求之中,直至连接超时,最终因耗尽资源而停止响应。这种攻击被称为:SYN Flooding攻击
解析:由于 TCP基于连接的,为了在服务端和客户端之间传送TCP数据,必须先建立一个虚拟电路,也就是TCP连接,建立TCP连接的过程也就是我们熟悉的“三次握手”过程:首先,请求端(客户端)发送一个包含SYN标志的TCP报文,表示客户端欲发起通信连接;第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受;第三步,客户端也返回一个确认报文ACK给服务器端,到此一个TCP连接完成。问题就出在TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的,这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源,最终导致服务器端忙于处理攻击者伪造的 TCP 连接请求而无暇理睬客户的正常请求,此时从正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了SYN Flooding攻击。
39.注意!!!
console.log(typeof undefined)//undefined
console.log(typeof null)//object
console.log(typeof NULL)//undefined
console.log(typeof function () {})//function
console.log(typeof class {})//function
//注意!!!!!!
console.log(typeof null)//object
40.关于cookie、sessionStorage和localStorage,以下哪个说法是错误的:C
sessionStorage和localStorage的存储空间比cookie的存储空间更大
sessionStorage和localStorage比cookie有更多丰富易用的接口
cookie、sessionStorage和localStorage都可以在浏览器和服务器间来回传递
sessionStorage和localStorage都有各自独立的存储空间-----①cookie:一般由服务器生成 可设置失效时间 大小为4k左右 每次请求都会携带在http头中 需要程序员自己封装,原生的cookie接口不友好,大小有限制。 ----- ②sessionStorage: 一般为5M 仅在客户端中保存,不参与和服务器的通讯,约5M,生命周期为关闭浏览器窗口,在同一个窗口(页面)下数据可以共享。 -----③localStorage:约20M,永久生效,除非手动删除(服务器方式访问然后清除缓存),可以多窗口(页面)共享。
41.关于闭包:√
函数内再嵌套函数
参数和变量不会被垃圾回收机制回收
内部函数可以引用外层的参数和变量
闭包会导致原始作用域链不释放,造成内存泄漏