[TOC]
# 1、什么是mvvm mvc是什么区别 原理
## 一、MVC(Model-View-Controller)
MVC是比较直观的架构模式,用户操作->View(负责接收用户的输入操作)->Controller(业务逻辑处理)->Model(数据持久化)->View(将结果反馈给View)。
MVC使用非常广泛,比如JavaEE中的SSH框架
## 三、MVVM(Model-View-ViewModel)
如果说MVP是对MVC的进一步改进,那么MVVM则是思想的完全变革。它是将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应view。
# 2、px和em的区别
> px表示像素 (计算机屏幕上的一个点:1px = 1/96in),是绝对单位,不会因为其他元素的尺寸变化而变化;em表示相对于父元素的字体大小。em是相对单位 ,没有一个固定的度量值,而是由其他元素尺寸来决定的相对值。
>
# 3、eval()的作用
把字符串参数解析成JS代码并运行,并返回执行的结果;
```
eval("2+3");//执行加运算,并返回运算值。
eval("varage=10");//声明一个age变量
eval的作用域
functiona(){
eval("var x=1"); //等效于 var x=1;
console.log(x); //输出1
}
a();
console.log(x);//错误 x没有定
```
# 4、关于JS事件冒泡与JS事件代理(事件委托)
事件作为DOM操作重要的一环,需要大家好好理解和运用,今天特意看了一下事件冒泡和事件代理的相关资料,感触颇深,也深感自己的无知不知道多浪费了多少内存,废话不多说进入正题:
## 4.1.事件冒泡:
通俗易懂的来讲,就是当一个子元素的事件被触发的时候(如onclick事件),该事件会从事件源(被点击的子元素)开始逐级向上传播,触发父级元素的点击事件。
## 4.2.事件委托
事件委托,首先按字面的意思就能看你出来,是将事件交由别人来执行,再联想到上面讲的事件冒泡,是不是想到了?对,就是将子元素的事件通过冒泡的形式交由父元素来执行。下面经过详细的例子来说明事件委托:
* 有可能在开发的时候会遇到这种情况:如导航每一个栏目都要加一个事件,你可能会通过遍历来给每个栏目添加事件:
```
var ul = document.getElementById('parentUl');
ul.onclick=function (event) {
var e = event||window.event,
source = e.target || e.srcElement;//target表示在事件冒泡中触发事件的源元素,在IE中是srcElement
if(source.nodeName.toLowerCase() == "li"){ //判断只有li触发的才会输出内容
alert(source.innerHTML);
}
stopPropagation(e); //阻止继续冒泡
};
function addElement() {
var li = document.createElement('li');
li.innerHTML="我是新孩子";
ul.appendChild(li);
}
```
# 5、介绍一下box-sizing属性
## 兼容问题
首先,box-sizing属性在FireFox中存在兼容问题,所以需要使用-moz-box-sizing做一下兼容。
### 属性值
* box-sizing:content-box
* box-sizing:border-box
* box-sizing:inherit
### content-box
```
这是box-sizing的默认属性值
是CSS2.1中规定的宽度高度的显示行为
在CSS中定义的宽度和高度就对应到元素的内容框
在CSS中定义的宽度和高度之外绘制元素的内边距和边框
```
### border-box
```
在CSS中微元素设定的宽度和高度就决定了元素的边框盒
即为元素在设置内边距和边框是在已经设定好的宽度和高度之内进行绘制
CSS中设定的宽度和高度减去边框和内间距才能得到元素内容所占的实际宽度和高度
```
# 6、请解释JSONP的工作原理,以及它为什么不是真正的AJAX。
JSONP (JSON with Padding)是一个简单高效的跨域方式,HTML中的script标签可以加载并执行其他域的javascript,于是我们可以通过script标记来动态加载其他域的资源。例如我要从域A的页面pageA加载域B的数据,那么在域B的页面pageB中我以JavaScript的形式声明pageA需要的数据,然后在 pageA中用script标签把pageB加载进来,那么pageB中的脚本就会得以执行。JSONP在此基础上加入了回调函数,pageB加载完之后会执行pageA中定义的函数,所需要的数据会以参数的形式传递给该函数。JSONP易于实现,但是也会存在一些安全隐患,如果第三方的脚本随意地执行,那么它就可以篡改页面内容,截获敏感数据。但是在受信任的双方传递数据,JSONP是非常合适的选择。AJAX是不跨域的,而JSONP是一个是跨域的,还有就是二者接收参数形式不一样!
# 7、请解释一下JavaScript的同源策略。
在客户端编程语言中,如javascript和 ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义。同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。那么什么叫相同域,什么叫不同的域呢?当两个域具有相同的协议, 相同的端口,相同的host,那么我们就可以认为它们是相同的域。同源策略还应该对一些特殊情况做处理,比如限制file协议下脚本的访问权限。本地的HTML文件在浏览器中是通过file协议打开的,如果脚本能通过file协议访问到硬盘上其它任意文件,就会出现安全隐患,目前IE8还有这样的隐患。
# 8、浏览器的内核分别是什么?
```
IE: trident内核
Firefox:gecko内核
Safari:webkit内核
Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核
Chrome:Blink(基于webkit,Google与Opera Software共同开发)
```
# 9、浏览器是如何渲染页面的?
## 渲染的流程如下:
1. 解析HTML文件,创建DOM树。
自上而下,遇到任何样式(link、style)与脚本(script)都会阻塞(外部样式不阻塞后续外部脚本的加载)。
2. 解析CSS。优先级:浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式;
3. 将CSS与DOM合并,构建渲染树(Render Tree)
4. 布局和绘制,重绘(repaint)和重排(reflow)
# 10、从输入url到显示页面,都经历了什么
##
第一种解释:
* 第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
* 第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
* 第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
* 第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
* 第五步:重复第四步,直到找到正确的纪录。
## 第2种解释:
一般会经历以下几个过程:
1. 首先,在浏览器地址栏中输入url
2. 浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作。
3. 在发送http请求前,需要域名解析(DNS解析)(DNS(域名系统,Domain Name System)是互联网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住IP地址。),解析获取相应的IP地址。
4. 浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。(TCP即传输控制协议。TCP连接是互联网连接协议集的一种。)
5. 握手成功后,浏览器向服务器发送http请求,请求数据包。
6. 服务器处理收到的请求,将数据返回至浏览器
7. 浏览器收到HTTP响应
8. 读取页面内容,浏览器渲染,解析html源码
9. 生成Dom树、解析css样式、js交互
10. 客户端和服务器交互
11. ajax查询
- 杂(一般误入)
- Vue
- CSS
- Web前端性能优化有哪些方法
- 后端
- 嘻嘻哈哈
- 一
- 二
- 三
- 大杂烩
- 什么是HTML,什么是CSS,什么JavaScript?
- JS动画与CSS动画的差异
- HTML,CSS
- 1.px、em、rem、vw、rpx之间的区别
- 2.为什么要初始化CSS样式
- 3.CSS优先级算法如何计算?
- 4. ::before 和 :after中双冒号和单冒号有什么区别?
- 5.display:inline-block 什么时候会显示间隙?
- 6.行内元素有哪些?块级元素有哪些?如何将行内元素表现为块级元素?
- 7.css新增了哪些功能?
- 8.对html5语义化的理解
- 9.http头的expires是表示什么
- 10.bootstrap栅格系统实现原理
- 11.清除浮动的方法
- 12.使用image间隙留白问题
- 13.html分为哪些层?都代表什么?
- 14.对于web中W3C标准的理解?
- 15.用css写一个三角形?
- 16.CSS中使用表格怎么合并行,合并列
- 17.处理margin-top的bug问题
- 18.动画进度条
- 19.box-sizing的属性值
- 20.box-shadow的参数
- 21.a标签的四个状态及它们的顺序、设置title属性的效果
- 22.如何实现垂直水平居中
- 23.什么是雪碧图
- 24.h1和title、b和strong、i和em的区别
- 25.table和div+css的区别
- 26.锚点的作用是什么?如何创建锚点
- 27.margin距离问题
- 28.响应式的导航栏
- 29.进度条
- 30.img标签的title属性和alt属性有什么区别
- 31.媒体查询
- 32.CSS选择器有哪些?哪些属性可以继承?
- Javascript
- 1.面向对象的基本特征
- 2.在JavaScript中实现继承的方法
- 2.用js去除字符串空格
- 3.你怎么理解作用域?
- 4.get和post的请求?
- 5.如何理解闭包?
- 6.数组的克隆(深拷贝)的方法
- 7.es6新增了哪些特性
- 8.json对象与字符串转换
- 9.回调函数
- 10.HTML和XHML的共同点
- 11.js中把7.25转换成一个整数
- 12.循环遍历的方法
- 13.深拷贝与浅拷贝的区别
- 14.JavaScript有哪些方法定义对象
- 15.AJAX请求总共有多少种CALLBACK
- 16.js中的定时器
- 17.let、var、const的区别
- 18.==和===的区别
- 19.dom文档(自上往下)加载的顺序
- 20.string变成int型
- 21.如何判断是否为一个质数
- 22.typeof返回类型,以及比较typeof与instanceof
- 23.判断一个对象是否为数组以及数组的方法
- 24.解释一下原型和原型链、hasOwnProperty
- 25.js有哪些内置对象
- 26.new一个对象发生了什么
- 27.sass的理解
- 28.document.onLoad与window.ready的区别
- 29.什么是跨域?跨域请求资源的方法有哪些?
- 30.Ajax的优缺点及工作原理
- 31.什么是正则
- 32.贪婪模式与非贪婪(懒惰)模式
- 33.数组去重
- 34.js字符串操作函数
- 35.substring和substr传参的区别
- 36.如何实现一个原生的ajax,分成几步
- 37.如何实现一个事件绑定
- 38.事件冒泡与事件捕获的区别
- 39.事件监听
- 40.字符串下标与字符串某一个字符之间的转换
- 41.new操作符的作用
- 42.函数的定义方式
- 43.括号在JavaScipt中的作用
- 44.回调地狱
- 45.document.write和innerHTML的区别
- 46.解释一下JS同源策略
- 47.说几种DOM节点
- 48.DOM事件流
- 49.同步与异步
- 50.json和jsonp的区别
- 51.字符串去重
- 52.JS中的数据类型
- 53.this关键字指向问题
- 54.break和contiune之间的区别
- 55.如何消除事件冒泡与事件默认行为
- 56.请列举jquery中的选择器
- 浏览器及服务端
- 1.请说出三种减低页面加载时间的方法
- 2.浏览器的缓存机制
- 3.浏览器的内核
- 4.浏览器的兼容问题
- 5.src和href的区别
- 6.高质量代码具备哪些条件
- 7.HTTP请求与响应
- 8.谈谈对前端模块化的理解
- 9.严格模式与混杂模式如何区分?
- 10.重绘和重排的区别
- 11.MVC和MVVM的区别
- 12.前端页面如何解决适配的问题
- 13.写一个400错误
- 14.状态码
- 15.开发及性能优化
- 16.静态网页与动态网页的区别
- 17.如何调试网页代码?如何查看网页源代码
- 18.语义化的主要目的是什么?
- 19.如何让所有的浏览器支持ES6语法
- 20.cookie,LocalStorage,sessionStorage的区别
- 计算题
- 1.margin距离问题
- 2.math
- 3.使用js实现阶乘(1~10)
- 4.求一个数组的最大数
- 5.判断一个字符串中出现次数最多的字符,统计这个次数
- 6.质数
- 7.如何把一个字符串倒过来输出
- 取数据,渲染数据
- 1.ajax版本
- 2.vue版本
- 3.React版本
- 4.用class封装一个ajax
- 5.用回调函数封装一个ajax
- Vue,React
- 1.什么是路由?
- 2.vuex的工作流程
- 3.redux的工作流程
- 微信小程序
- 1.程序的生命周期
- 2.组件的生命周期
- 3.微信小程序页面的生命周期
- 不会的问题
- 2019/01/02
- 2019/01/03
- 2019/01/07
- 2019/01/21
- 1