VUE
vue2的响应式是基于object.defineProperty实现的 vue3的响应式是基于proxy实现的
vue2中的object.defineProperty只对初始对象里的属性有监听作用,对新增的属性无效
MVC
MVC 通过分离 Model、View 和 Controller 的方式来组织代码结构。其中 View 负责页面的显示逻辑,Model 负责存储页面的业务数据,以及对相应数据的操作。并且 View 和 Model 应用了观察者模式,当 Model 层发生改变的时候它会通知有关 View 层更新页面。Controller 层是 View 层和 Model 层的纽带,它主要负责用户与应用的响应操作,当用户与页面产生交互的时候,Controller 中的事件触发器就开始工作了,通过调用 Model 层,来完成对 Model 的修改,然后 Model 层再去通知 View 层更新。
(2)MVVM
MVVM 分为 Model、View、ViewModel:
- Model代表数据模型,数据和业务逻辑都在Model层中定义;
- View代表UI视图,负责数据的展示;
- ViewModel负责监听Model中数据的改变并且控制视图的更新,处理用户交互操作;
Model和View并无直接关联,而是通过ViewModel来进行联系的,Model和ViewModel之间有着双向数据绑定的联系。因此当Model中的数据改变时会触发View层的刷新,View中由于用户交互操作而改变的数据也会在Model中同步。
这种模式实现了 Model和View的数据自动同步,因此开发者只需要专注于数据的维护操作即可,而不需要自己操作DOM
渐进增强和优雅降级
- 渐进增强
主要是针对低版本的浏览器进行页面重构,在保证基本的功能的情况下,针对高级浏览器进行效果、交互等方面的改进和追加功能
- 优雅降级
一开始就构建完整的功能,然后针对低版本的浏览器进行兼容
- 区别
优雅降级是从复杂的现状开始的,渐进增强是从非常基础的、功能比较基本的版本上面开始的。
CSS基础
css选择器和优先级
- 通配符优先级最低
- 内联样式 1000
- 内联样式>内部样式>外部样式>浏览器用户自定义样式>浏览器默认样式
- 继承得到的样式优先级最低
可继承属性和不可继承属性有哪些
不可继承的属性
有继承性的属性
- 字体系列属性
- 文本系列属性
- 元素可见性
- visibility
- 列表布局属性
- 光标属性
- cursor:光标显示为何种状态
display的属性和作用
- block 独占一行
- inline 不会独占一行,设置长宽无效,但是可以设置水平方向的margin和padding属性,垂直方向的无效
- inline-block 将对象设置为inline对象,但是对象的内容又是作为block对象呈现,之后的内联对象会被排列在同一行内
隐藏元素的方法
- display:none 渲染树不会包含该渲染对象,元素不会再页面中占据位置,也不会响应绑定的监听事件
- 和visibility:hidden 元素在页面中仍占据空间,但是不会响应绑定的监听事件
- opacity:0 元素的透明度为0,实现元素的隐藏,但是元素在页面中仍然占据空间,也能响应元素绑定的监听事件
- position:absolute
- z-index:负值 其他元素遮住该元素
- transform:scale(0,0) 将元素缩放为0,元素仍在页面中占据位置,但是不会响应绑定的监听事件
display:none 和visibility:hidden的区别
-
在渲染树中
- display:none 元素不被渲染,不会占据任何空间
- visibility:hidden 元素仍然在渲染树中,渲染的元素还会占据相应的空间,只是内容不可见
-
是否是继承属性
- display不是继承属性,子孙节点会随着父节点的消失而消失,通过修改子孙节点的属性也无法显示
- visibility是继承属性,因此通过设置子孙节点的visibility可以让子孙节点显示
- 修改display会导致重排,修改visibility只会造成文本元素的重绘
伪元素和伪类的区别和作用
盒模型的理解
标准盒子模型和IE盒子模型
- 标准盒子模型:高度和宽度为内容content的高度和宽度
- IE盒子模型:宽度和高度都是 content+padding+border
CSS布局单位
- px: 像素,分为物理像素和css像素
- em:文本相对长度单位,相对于当前对象内文本的字体尺寸
- rem:css3新增的一个相对单位,相对于根元素(html元素)的font-size的倍数
- vw/vh:与视图窗口有关的单位,vw表示相对于视图窗口的宽度,vh表示相对于视图窗口的高度
两栏布局的实现
- 一般指的是左边一栏宽度固定,右边一栏宽度自适应
- 三栏布局的实现 左右两栏宽度固定,中间自适应的布局
flex的布局实现
弹性布局-弹性盒子
浏览器的渲染机制
- 解析html构建DOM树
- 解析css构建cssom树
- 将DOM树和CSSOM树合并成渲染树
- 构建完渲染树之后,浏览器会根据渲染树的信息计算每一个节点的位置和大小,生成布局,(重排或回流)
- 绘制,浏览器会将每一个节点的样式转换为像素,绘制到屏幕上----重绘
从输入URL到看到页面发生的全过程
- 用户输入URL
- 浏览器解析URL,首先检查本地的hosts文件,查看是否有对应的域名,如果有,浏览器就会直接向该ip地址发送请求,如果没有,浏览器会将域名发送给DNS服务器进行解析,将域名转换成为对应的服务器IP地址
- 建立TCP连接,浏览器得到ip地址后,通过tcp协议与服务器建立连接。
- 发送HTTP请求
- 服务器处理请求
- 发送http响应,服务器处理完请求之后会发送一个http响应给浏览器
- 浏览器解析和渲染页面。浏览器收到响应之后,会解析响应正文中的html代码,并下载所需要的css、js等资源文件,浏览器根据这些资源来渲染页面,最后将页面呈现给用户。
浏览器缓存的优先级
- service worker
- memory cache(内存缓存)
- http cache
- 强制缓存:在有效时间内,不会向服务器发送请求,直接从缓存中读取资源
- 协商缓存:当强制缓存失效后,浏览器会携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存。
- disk cache 磁盘缓存
- 存储在硬盘中的缓存
- push cache 推送缓存
跨域以及跨域的解决方法
跨域是因为浏览器的同源策略的限制。 同源:两个URL的协议、端口和主机都相同则认为是同源的
方案
- JSONP 仅支持get请求 标签不受同源策略的限制,通过动态插入标签来请求不同源的数据
- CORS(跨域资源共享)CORS定义了一种浏览器和服务器交互的方法来确定是否允许跨域请求。通过服务器端设置http头部信息,如Acess-control-allow-origin来允许跨域请求
- 代理服务器:通过搭建一个代理服务器来转发请求,使得前端可以通过代理服务器来间接访问不同源的资源
- 使用window.postMessage 允许来自不同源的脚本进行通信
- 设置documen.domain:如果两个页面属于同一个顶级域名下的不同子域名,通过设置document.domain为相同的顶级域名来实现跨域
重绘和回流
重绘
页面的位置和大小不发生改变
回流
重排 页面布局或几何属性(宽度、长度、位置、大小)发生改变会触发回流
防抖和节流
防抖:单位时间内,多次频繁点击,只触发最后一次操作 节流:单位时间内,多次频繁点击,只触发一次操作
flex布局
flex:1 子级元素占满整个多余部分,空间不够时被挤压