前端小公司面经

1.什么是es6:
es6是2015年新推出的js标准,相对于es5来说增添了很多新东西。首先是使用let和const命名变量解决es5中没有块级作用域导致变量污染的问题,同时诞生了暂时性死区这个概念。不再存在变量提升。
增添了symbol这一数据类型,为的是解决对象中出现相同的属性带来的一系列问题
添加了模板字符串使得字符串中可以使用变量也能使用多行字符串
增添了解构赋值,箭头函数等
对于数组增添了新的方法例如indexof函数找出目标的索引,没有就输出-1,map函数和foreach函数
2
3.react和vue
首先讲一下他们的共同点,二者都采用了虚拟dom,虚拟dom就是在改变元素状态之前先在虚拟dom上进行改变,而不是直接改变真实的dom,然后一个新的虚拟dom会被创建用于计算和旧的虚拟dom之间的差别,这些差别会应用在真实的dom上。
都鼓励组件化的应用
都有很好的Chrome浏览器扩展
vue鼓励程序员使用近似HTML的模板,写起来更想HTML元素,只是多了一些属性使用近似于angular的方法输出动态内容,这样vue很容易提供旧应用的升级,有利于新来者适应他的语法。
react鼓励程序员使用js的扩展语法jsx来书写相同的代码,js中混杂着xml一旦掌握会得心应手。
react的状态对象在应用中是无法直接改变的,需要使用setstate的方法进行改变
vue中状态对象不是必须的,数据由数据属性在vue对象中进行管理不需要setstate之类的函数改变他的状态
对于管理大型应用的状态而言vue只适合小型应用,不适合大型应用
react native能在手机上构建原生应用,react在这方面处于领先位置
vue社区和阿里合作的weex也很不错
react和angular最主要的区别之一是前者采用的是单向数据流,后者采用双向数据流
4.如何学习前端
首先不要通过纸质文章来学习,前端技术日新月异,看书接触不到最新技术,多看开发文档
其次多浏览博客知乎等优秀的网站,多动手,遇见的问题越多成长的越快
5.常见的算法
递推法,思想是把一个庞大的计算过程转变为简单过程的多次重复
穷举法,对于要解决的问题列出它的所有可能性然后逐个判断
分治法,把一个复杂的问题分成多个相似的子问题,以此类推
6.常见的排序算法
冒泡排序:相邻的数逐一比较,保持较大的数始终在后的原则,次数理论上是n*(n-1)/2次
快速排序:在元素中找一个基值,大的放在后面,小的放在前面,这样把所有元素分为两组,再递归快速排序、
7.js垃圾回收机制
垃圾回收机制是为了防止内存泄漏。垃圾回收机制常见的两种方法是标记清除,引用计数。变量分为局部变量和全局变量,局部变量在函数执行后称为不再使用变量,全局变量只有在浏览器关闭后才会释放。标记清除就是当浏览器进入执行环境后会被标记上‘进入环境’离开环境后会标记上‘离开环境’,垃圾收集器给内存中的变量都加上标记,然后去掉环境中的变量和环境中的变量引用的变量。在此之后被加上标记的变量就是需要被回收的变量;引用计数常常会引起内存泄漏,有比较大的缺陷,其机制就是跟踪一个值的引用次数,当该值引用次数为零时就会被回收。
8.如何优化页面]
-减少http请求:使用css 精灵,get代替post
-使用cdn
-样式表放在头部
-js脚本放在底部
-使用外部js和css,避免空的src,减少dom操作,尽量少的使用全局变量
9.js原型链
首先创建有关原型链的方法有new和Object.creat这两个函数,假设现在有一个构造函数,new一个实例,那么这个实例会有一个_proto的属性指向构造函数的prototype对象属性,这个prototype也有一个_proto属性它指向的是Object.prototype,然后Object.prototype的__proto指向的是null尽头
10.webpack的原理以及优点
首先webpack可以看作是一个模块打包工具,他所做的事就是分析你的项目,找到js模块以及其他浏览器不能直接运行的扩展语言将其打包成为合适的格式以供浏览器使用。他有两个核心原理一切皆模块和按需加载。一切皆模块指的是所有文件都可以是模块。这就意味着我们可以将事物分割成更小的易于管理的片段从而达到重复利用的目的;按需加载指的是传统模块打包工具会将所有代码编译成一个庞大的bundle.js的文件,会导致应用一直处于加载状态而webpack使用许多特性来分割代码然后生成多个bundle文件,然后异步加载部分代码以实现按需加载提升了速度,以及他丰富的插件系统方便满足各种需求。
10.事件委托的原理以及如何判断触发事件的元素
事件委托就是把原本需要绑定给子元素的事件绑定给了父元素,让父元素担当事件监听的职务。事件委托的原理就是事件冒泡。利用event.target来判断触发事件的具体元素。
11.简述promise对象
promise对象是一个代理对象,被代理的值在promise创建之前可能是未知的。它允许你为异步操作的成功或失败分别绑定相应的处理函数。这样可以让异步方法像同步那样返回值,但并不是立即返回执行结果,而是一个能代表未来出现的结果的promise对象。promise有三种状态:初始状态,成功完成,操作失败
12.如何判断一个对象是数组
首先利用原型链判断,判断Array是否在对象的原型链上Array.prototype.isPrototype(obj)
另一种利用构造函数obj instanceof Array
Object.prototype.toString.call(obj)
13.跨域问题
浏览器是有同源策略的,举例说a.cn下的js就不能调用b.cn下的js,对象或数据这样跨域就出现了,同域就是说端口,协议,域名都是相同的。
常见的跨域方式有jsonp原理是直接使用XMLHTTPRequest请求不同域的数据是不被允许的,但在页面上引入不同域上的js脚本是可以的;使用window.name来实现跨域。window.name在一个窗口的生命周期里窗口载入的所有的页面都是共享一个name值的,都对它有读写操作。不同域的两个处于同一窗口的页面也会共享window的name属性;利用H5中的window.postMessage来跨域传数据,可以用它来向其他的window对象发送数据不在乎是否是同源。调用PostMessage方法的window对象是要接受信息的对象,方法的第一个参数是要发送的信息,类型是string,第二个参数是接受信息那个对象所在的域
14.bind
绑定,bind函数会返回一个绑定函数,绑定函数的作用域就是第一个参数
15.HTTPS和http
简单的说https就是http的升级版,http网站协议添加ssl安全证书,实现http的安全数据传输。http协议被用于web浏览器和服务器之间传输信息,但http采用的是明文方式进行内容传输,不会数据加密,一旦被攻击者截取传输报文,就可以直接读取其中数据,不适合敏感信息的传输。HTTPS为了数据的安全传输在http的基础上添加了ssl协议,ssl依靠证书来验证服务器的身份,并为服务器和浏览器之间的通信加密
主要区别是HTTPS需要到ca那申请证书,一般是收费的
http是超文本传输协议,信息是明文传输的,HTTPS则是具有安全性的加密传输
端口也不一样前者是80,后者是443
http的连接是无状态的HTTPS是ssl+http协议构建的加密传输,身份认证的网络协议
16.BFC块级格式化上下文
BFC是指独立的块级渲染区域,该区域有自己的一套规则来渲染布局,不受外部的影响。具体实现方式有float的值不为none,position的值是absolute或flex,overflow的值不为visible
17.深拷贝和浅拷贝
引用数据类型简单赋值会出现浅拷贝,引用数据类型的名存在栈区,内容存在于堆区,浅拷贝只会将一个新指针指向那个堆区的内容
18.map和foreach
map有返回值,foreach没有

posted @ 2019-03-31 13:35  张家程1997  阅读(127)  评论(0编辑  收藏  举报