大华前端面试题(附答案)

大华面试题 – (总结经验和教训)

开篇说明

本人国庆之前应邀参加了大华前端的面试,一面基础知识了解,二面专业知识考察,三面,hr面询问意向及薪资事宜,都比较基础,但当时不知脑子怎么抽了,反正不是太好,没发挥出来。
说的是国庆后给通知,结果到现在也音信全无,我估计八成是凉了。
总结一下,还是前端基础知识要打实,要多练习勤思考,特别是数据结构和算法要进一步加强巩固,leetcode 上的题不能荒废,必须坚持练习,相信总会成功的。加油!!!ヾ(◍°∇°◍)ノ゙

正文

特别说明: 本面试题是自己搜集资料,整理,总结而来,纯属个人愚见,本人能力有限,若有什么问题,烦请联系本人予以修改,谢谢支持!

1.js怎么捕获异常 [1]

答: JavaScript通过try 语句测试代码块的错误,catch 语句处理错误,throw 语句创建自定义错误。
首先,[错误一定会发生] ,当 JavaScript 引擎执行 JavaScript 代码时,会发生各种错误:可能是语法错误,通常是程序员造成的编码错误或错别字;可能是拼写错误或语言中缺少的功能(可能由于浏览器差异);可能是由于来自服务器或用户的错误输出而导致的错误。当然,也可能是由于许多其他不可预知的因素。
其次,[JavaScript抛出错误] 当错误发生时,当事情出问题时,JavaScript 引擎通常会停止,并生成一个错误消息。
再其次, *[JavaScript 测试和捕捉错误] try 语句允许我们定义在执行时进行错误测试的代码块。catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。JavaScript 语句 try 和 catch 是成对出现的。
[throw 语句允许我们创建自定义错误] 如果把 throw 与 try 和 catch 一起使用,那么您能够控制程序流,并生成自定义的错误消息,异常可以是 JavaScript 字符串、数字、逻辑值或对象。。比如,if(isNaN(x)) throw "not a number";

//捕获并处理异常
try {
 //your javascript code
 throw new Error("Whoops!");  //自定义异常
} catch (e) {
 console.log(e.name + ": " + e.message);
}

补充:系统常见的异常

EvalError: raised when an error occurs executing code in eval() 当一个错误发生在 eval() 执行的代码
RangeError: raised when a numeric variable or parameter is outside of its valid range 当一个数值变量或参数超出其有效范围时引发的错误
ReferenceError: raised when de-referencing an invalid reference 无效的引用错误
**SyntaxError: ** raised when a syntax error occurs while parsing code in eval() 在解析代码时发生语法错误
TypeError: raised when a variable or parameter is not a valid type 当一个变量或参数不是一个有效的类型时引发的错误
URIError: raised when encodeURI() or decodeURI() are passed invalid parameters 当encodeuri()或decodeuri()传递了无效的参数引发错误
上面的六种异常对象都继承自Error对象。他们都支持以下两种构造方法:

new Error();
//或者
new Error('异常信息');

2.ES6与ES5的不同[2],主要通过react来对比

层面 ES6 ES5
模块引入 在ES6里,import写法更加标准 import React, { Component,PropTypes} from 'react'; 在ES5里,如果使用CommonJS标准,通过require进行 var React = require("react");var {Component,PropTypes} = React; //引用React抽象组件
导出 在ES6里,通常用export default来实现 export default class MyComponent extends Component{...} 在ES5里,要导出一个类给别的模块用,一般通过module.exports来导出 var MyComponent = React.createClass({ ...});module.exports = MyComponent;
定义组件 通过定义一个继承自React.Component的class来定义一个组件类,class Photo extends React.Component { render() { return ( );}} 通过React.createClass来定义一个组件类 var Photo = React.createClass({ render: function() { return ( );},});
声明 let / const (不存在声明提前,报错) var (变量声明提前)
作用域 ES6:全局作用域,局部(函数)作用域,块级作用域 ES5:全局作用域,局部(函数)作用域.
重复声明 不允许(报错) 允许,后面的覆盖前面的
继承实现 ES6引入了Class(类)这个概念,更像面向对象编程的语法。 ES5通过原型链实现继承
其他 解构赋值 & 属性延展 不支持

3.js原型链[3]

所有引用类型(函数,数组,对象)都拥有__proto__属性(隐式原型)
所有函数拥有prototype属性(显式原型)(仅限函数)
原型对象:拥有prototype属性的对象,在定义函数时就被创建
实例继承构造函数的属性和方法
p.__proto__ === Person.prototype
所谓的原型链就是:当调用某种方法或查找某种属性时,首先会在自身调用和查找,如果自身并没有该属性或方法,则会去它的__proto__属性中调用查找,也就是它构造函数的prototype中调用查找,一级一级向上查找直到null。所以很好理解实例继承构造函数的方法和属性(查找属性,如果本身没有,则会去__proto__中查找,也就是构造函数的显式原型中查找,如果构造函数中也没有该属性,因为构造函数也是对象,也有__proto__,那么会去它的显式原型中查找,一直到null,如果没有则返回undefined)
通过__proto__形成原型链而非protrotype

4.css盒模型

5.有一个数组,求数组中按age排序后的结果

6.自定义HTTP请求头

7.常见的http状态码

8.冒泡排序

9.ajax跨域,CORS怎样设置original

10.vue父子组件,兄弟组件之间的通信

11.数组的排序方法,如何继承一个自定义的includes数组方法,用于判断数组中是否含有某个元素,若是返回true,否则false

12.常见的数据结构了解

参考文章:
[1]: JavaScript 错误 - Throw、Try 和 Catch 和 Js中最常见的异常捕捉 TryCatch
[2]: ES6和ES5特性对比
[3]: 深入javascript之原型和原型链

你可能感兴趣的:(前端面试)