Say little, do much
前端面试题记录
2019/07/28

1、介绍下vue这个框架

vue是一套构建用户界面的渐进式框架,vue聚焦于视图层非常容易学习,容易与其他库或已有项目整合,vue是一个数据驱动页面的一个框架,基于mvvm模式.

vue的目标是通过尽可能简单的api实现响应的数据绑定和组合的视图组件。


        MVVM拆分成   model --- view --- viewmodel

        左侧的view相当于我们的dom内容,即我们看到的页面视图

        右侧的model相当于我们的数据对象

        而中间的viewmodel视图模型就负责监控两侧的数据,并相应通知另一侧进行修改,当数据层(model)修改后,由viewmodel层负责修改视图层显示,就不需要我们操作dom层进行修改视图的操作。

        

        vue的优点有简洁、轻量、快速、数据驱动、模块友好、组件化

        vue不兼容ie8及以下版本

        MVVM的js框架有vue.js、react.js、angular.js


2、vue的双向绑定实现原理

vue的双向绑定是采用数据劫持结合发布者-订阅者模式的方式,通过object.defineProperty()来劫持各个属性的setter、getter,在数据变动时发布消息给订阅者,触发相应的监听回调。


4、vue的双向绑定和小程序的双向绑定

vue的v-model可以实现数据层修改后同步修改视图层,视图层修改同步修改数据层。

小程序数据层的修改后需要调用setData()方法更新视图层,视图层修改后需要有方法bindinput监听事件来修改对应数据层的数据。


5、vue的双向绑定的原理

6、怎么实现异步请求



7、进程和线程的区别

进程是并发执行的函数在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。

线程是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。

一个程序至少一个进程,一个进程至少一个线程

两者的区别:

地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。

资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。

一个进程奔溃后,在保护模式下不会对其他进程产生影响,但是一个线程奔溃整个进程都会死掉。所以多进程要比多线程健壮。

执行过程:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行、必须依存在应用程序中,由应用程序提供多个线程执行控制,

线程是处理器调度的基本单位,但是进程不是

两者均可并发执行

优缺点:

线程执行开销小,但是不利于资源的管理和保护。线程适合在SMP机器(双cpu系统)上运行。

进程执行开销大,但是能够很好的进行资源管理和保护。进程可以跨机器迁移


        两者使用场景

        对资源管理和保护要求高,不限制开销和效率时,使用多进程。

        要求效率,频繁切换时,资源的保护管理要求不是很高时,使用多线程。


8、怎么实现小程序的下拉刷新

在json文件配置属性enablePullDownRefresh为true即开启当前页面下拉刷新,

onPullDownRefresh() {wx.showNavigationBarLoading() //在标题栏中显示加载}

在onPullDownRefresh函数里写下拉刷新的代码


9、小程序的生命周期有几个

onLoad  :监听页面加载

onShow  :监听页面显示

onReady:监听页面初次渲染完成

onHide:监听页面隐藏

onUnload:监听页面卸载


10、本地存储的方式有哪些  https://www.jianshu.com/p/7a711de6f1d0?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

cookie  :大小限制在4k,http请求会自动发送给服务器

localstorage:是采用key-value的形式存储数据,没有过期时间

sessionstorage:会话存储,页面关闭即被清除


11、http 请求状态 300-399

100-199 用于指定客户端相应的某些动作

200-299 用于表示请求成功

300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息

400-499 用于指出客户端的错误

500-599 用于表示服务器的错误


12、什么是盒模型

盒模型是有元素内容(content)、元素内边距(padding)、元素边框(border)、元素外边距(margin)四部分组成。


13、js怎么实现继承 https://www.cnblogs.com/humin/p/4556820.html

https://www.cnblogs.com/haoyijing/p/5760586.htm

继承方式有原型链继承、构造继承、实例继承、拷贝继承、组合继承、寄生组合继承、


14、css的哪些样式是可以继承的 color font-size 

所有元素可继承:cursor

内联元素可继承:line-height、color、font、font-size、font-family、font-weight、

块状元素可继承:text-align


15、如何优化小程序页面加载速度? 组件化


16、git恢复到某个版本的命令

git checkout <id>


17、get和post的区别

get提交的数据在2k-4k左右(浏览器限制)、post理论上没有限制大小

get是通过拼接url传递数据、post是通过body传输数据

get请求是可以缓存的、post请求不可以缓存

后退页面get请求不会有影响、post会出现重新提交请求的情况


18、post的几种类型

application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。

multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分。

text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。postman软件里标的是RAW。


19、设计模型有哪些?  https://blog.csdn.net/qq_30632003/article/details/52847080

//单体模式、工厂模式、桥接模式、装饰者模式、组合模式、门面模式、适配置器模式、代理模式、观察者模式、命令模式、职责链模式



20、工厂模式  单列 观察 策略 


21、二叉树 红黑树


22、css中 link和import的区别

link是在head部分引入,import是在style标签引入

link引入css页面载入时同时加载,import需要在页面完全载入后加载

link是html标签无兼容问题、import低版本浏览器不支持

link支持使用javascript控制dom去改变样式、import不支持





call apply




1、本地存储有哪些解决方案

2、对作用域和上下文和this的理解

var User={count:1,getCount:function(){

return this.count;

}}

console.log(User.getCount());

var func=User.getCount;

console.log(func());


3、闭包是什么,有什么特性,对页面有什么影响

闭包是指一个拥有许多变量和绑定了这些变量的环境的表达式,因而这些变量也是该表达式的一部分。

特性:

封闭性:外界无法访问闭包内部的数据,如果在闭包内声明了变量,外界是无法访问的,除非闭包主动向外界提供访问接口;

持久性:一般的函数调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调用之后,闭包结构依然保存在系统中,闭包中的数据依然存在,从而实现对数据的持久使用。

优点:

减少全局变量

减少传递函数的参数量

封装

缺点:

使用闭包会占用内存资源,过多的使用闭包会导致内存溢出等。


4、解释一下数组的方法:pop(),push(),unshift(),shift()

5、IE和标准下有哪些兼容性的写法(javascript)


6、执行结果

setTimeout(function(){

console.log(1);

})

new Promise(function(resolve,reject){

console.log(2);

resolve(3);

}).then(function(val){

console.log(val);

})

自己写的答案:  2 3 1

7、什么叫对象的拷贝?(javascript)


8、什么是深拷贝,什么是浅拷贝?(javascript)

深拷贝是指将原始数据复制到新的内存地址中,并重新赋值到新变量中,修改新变量数据不会修改原始数据。

浅拷贝是指将原始数据的内存地址指向新变量中,改变新变量会修改原始的数据。


9、js中的typeof返回哪些数据类型?     

number、string、object、array、null、undefined


10、你做过哪些性能优化  https://www.cnblogs.com/liyunhua/p/4529086.html

11、说下tcp三次握手的原理

第一次握手:建立连接,客户端发送syn包给服务器,并进去SYN_SENT状态,等待服务器确认,SYN:同步序列编号

第二次握手:服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN ACK包,此时服务器进入SYN_RECV状态,

第三次握手:客户端收到服务器的SYN ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。


12、例举3中强制类型转换和2中隐式类型转换?

13、js框架

vue.js


14、tcp属于哪一层

传输层


15、Promise的3个缺点

无法取消promist,一旦新建它就会立即执行,无法中途取消

如果不设置回调函数,promise内部抛出的错误,不会反应到外部

当处于pending状态时,无法得知目前进展到哪一个阶段


16、['1','2','3'].map(parseInt)输出什么?为什么?

[1,NaN,NaN]


17、有用过typescript吗?

typescript是javascript的一个超集,支持ECMAScript 6 标准,有微软开发的自由和开源的编程语言,它可以编译成纯javascript,编译出来的javascript可以运行在任何浏览器上。


18、promise的3种状态有哪些

pending、fulfilled、rejected(未决定,履行,拒绝)


19、 transform动画和直接使用left top改变位置,这两个有什么优缺点?


20、ES6中的map和原生的对象有什么区别?

object和map存储是键值对组合,object的键类型是字符串,map的键的类型是可以任何类型的





21、【算法题】:把一个数组arr按照指定的数组大小size分割成若干个数组块

document.write(chunk([1,2,3,48,666],2));//输出结果:[1,2],[3,4],[48,66]

请写出chunk方法

22、【算法题】:一个大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把他们串联起来,形成一个新数组。数组:[[165,2,9],[48,6,9,82],[6,5],[39658,91,2]]

23、【算法题】:请写一个阶乘

24、【算法题】:翻转字符串"hello world!",编写一个函数,翻转字符串变成"!dlrow olleh"

var newstr="";

var str="hellow world!";

for(var i=str.length;i>=0;i--){

newstr =str.substr(i,1)

}

25、写一个冒泡排序


发表评论

Powered By © 奇迹云   备案号:粤ICP备17082613号

本站部分资源来源于互联网网友交流,只供网络测试和学习交流所用、所有版权归原权利人,如有关资源侵犯了你的权益,请联系告之,我们将于第一时间删除!

用户名:

密码:

邮箱:

*
*
*