3.5号晚上投的简历,9号收到一面的邮件,10号晚上6点半进行一面。
使用腾讯会议进行,先给了一套面试题,8个选择1个编程,以共享文档和共享屏幕的方式进行,代码题可以用自己的软件编写
面试官友好,亲切,思维逻辑清晰。对于我在胡扯的问题,会指出来“你说的是啥啥啥,还是没说我问的问题” 哈哈哈哈哈哈哈哈哈哈,最后,面试官问,你项目的前端是用啥写的?我说 在网上找模板,然后改模板。面试官:改模板!好 我了解了。
没有反问,等通知吧。
一套腾讯前端实习的面试题:
30分钟
Javascript基础试题
一、选择题
- 请问以下程序的输出是? A (√)
function Foo(){ var i=0;
return function(){ document.write(i++);
} }
var f1=Foo(), f2=Foo();
f1();
f1();
f2();
A. 010
B. 012
C. 000
D. 011
- 以下 javascript 代码,在浏览器中运行的结果是 B (√)
var a = 4399<0||typeof(4399+’ ‘);
console.log(a);
A. true
B. string
C. undefined
D. false
- 请问以下程序的输出是? C (√)
var myObject = {
foo: “bar”,
func: function() {
var self = this;
console.log(this.foo);
console.log(self.foo);
(function() {
console.log(this.foo);
console.log(self.foo);
}());
}
};
myObject.func();
A. bar
bar
bar
bar
B. bar
bar
bar
undefined
C. bar
bar
undefined
bar
D. undefined
bar
undefined
bar
- 关于这段代码正确的结论是 A (√)
var F=function(){};
Object.prototype.a=function(){};
Function.prototype.b=function(){};
var f=new F();
A. f能取到a,但取不到b
B. f能取到a,b
C. F能取到b,不能取到a
D. F能取到a,不能取到b
- 请问执行后弹出的值是: D(X)—->C
var name=”World!”;
(function(){
var name;
if(typeof name=== ‘undefined’){
name=’Jack’;
console.log(‘Goodbye’+name);
}
else
{
console.log(‘hello’+name);
}
})();
A. Hello world!
B. Goodbye Jack
C. Hello Jack
D. Goodbye world!
- 下面求a中最大值正确的是 C(×)——>D
var a = [1,4,5,2,9];
A. Math.max(a);
B. Array.max(a);
C. Math.max.call(null,a);
D. Math.max.apply(null,a);
apply的参数要封装!!!!
- 关于跨域问题下面说法正确的是? B(√)
A. 可以利用flash的http请求,来处理跨域问题
B. 通过iframe设置document.domain可以实现跨域
C. 一般情况下,m.toutiao.com可以ajax请求www.toutiao.com域名下的接口并获得响应
D. 通过jsonp方式可以发出post请求其他域名下的接口
- 运行结果是 B(×)——>C
var obj ={
a:1,
b:function () {
alert(this.a)
}
};
var fun =obj.b;
只有obj.b看不到obj全部,所以undefined
fun();
A. 弹出a
B. 弹出1
C. 弹出undefined
D. 什么也看不到
二、编程题
实现一个函数,将一个多层嵌套的数组扁平化(非递归实现 +分);
- 例 [1, 2, 5, [3, 7, [2, 4, 6], 10], 8, 12] => [1, 2, 5, 3, 7, 2, 4, 6, 10, 8, 12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19//reduce递归
var a = [1,2,5,[3,7,[2,4,6],10],8,12]
function fn(arr){
return arr.reduce((a,b)=>{
a.concat(Array.isArray(b)? fn(b):b)
},[])
}
console.log(fn(a))
//some
var b = [1,2,5,[3,7,[2,4,6],10],8,12]
function fn2(arr){
let newArr = []
while(arr.some(item => Array.isArray(item))){
arr = [].concat.apply([],arr)
}
return arr
}
console.log(fn2(b))
- 跨域
- 学前端多久了,学了哪些东西
- js掌握如何
- js的数据类型
- js的异步机制?
promise与callback
- promise的状态
- Promise的错误处理?
应该是如下:.then().catch()
1 | fetch('products.json').then(function(response) { |
- promise与async的区别?
Promise原来有规范的意义,最终确定的是promise a+规范
Promise有很多并行神器,比如Promise.all\Promise.race等
在进行捕获异常的时候,promise是通过.catch();async是通过在函数内try…catch…
- async的底层是怎么实现的?
Promise
是async
函数内部的实现原理。如果async
函数中有返回一个值 ,当调用该函数时,内部会调用Promise.resolve()
方法把它转化成一个promise
对象作为返回。
Cookie如何防范XSS攻击?CSRF攻击?
csrf攻击
跨站点伪装请求,盗用你的身份以你的名义发送恶意请求,是单向的。成功的前提是用户必须登录到目标站点,且浏览了攻击者控制的站点- 防御
- 验证http refever字段
- 请求地址中添加token并验证
- 在HTTP头中自定义属性并验证
- 防御
xss攻击
跨站脚本攻击,攻击者在返回的HTML中嵌入js脚本- 防御
在http头部配上set-cookie
- 防御
XSS深入问,嵌入js脚本,怎么嵌入