| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> -----前端面试题----- -> 正文阅读 |
|
[JavaScript知识库]-----前端面试题----- |
html5HTML5新增的元素首先html5为了更好的实践web语义化,增加了header,footer,nav,aside,section等语义化标签,在表单方面,为了增强表单,为input增加了color,emial,data ,range等类型,在存储方面,提供了sessionStorage,localStorage,和离线存储,通过这些存储方式方便数据在客户端的存储和获取,在多媒体方面规定了音频和视频元素audio和vedio,另外还有地理定位,canvas画布,拖放,多线程编程的web worker和websocket协议 csscss3新特性1.过渡 transition 2.动画 animation 3.形状转换 transform 4.阴影 box-shadow 5.滤镜 Filter 6.颜色 rgba 7.栅格布局 gird 8.弹性布局 flex css中link与@import的区别1、@import是 CSS 提供的语法规则,只有导入样式表的作用;link是HTML提供的标签,不仅可以加载 CSS 文件,还可以定义 RSS、rel 连接属性等。 2、加载页面时,link引入的CSS被同时加载,@import引入的CSS将在页面加载完毕后加载。 3、link标签作为HTML元素,不存在兼容性问题,而@import是CSS2.1才有的语法,故老版本浏览器(IE5之前)不能识别。 4、可以通过JS操作DOM,来插入link标签改变样式;由于DOM方法是基于文档的,无法使用@import方式插入样式。 伪类与伪元素区别1)伪类(pseudo-classes)
2)伪元素(Pseudo-elements)
2)伪类与伪元素的区别
4)相同之处:
让一个div水平垂直居中
link和@import有什么区别(1)link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS; (2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载; (3)import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题; js数组和对象的原生方法
内存泄漏内存泄露
内存溢出
写JavaScript的基本规范
JS的数据类型基本类型:Number、Boolean、String、null、undefined、symbol(ES6 新增的),BigInt(ES2020) 引用类型:Object,对象子类型(Array,Function) 浅拷贝和深拷贝的区别
浅拷贝:浅拷贝通过ES6新特性Object.assign()或者通过扩展运算法...来达到浅拷贝的目的,浅拷贝修改 副本,不会影响原数据,但缺点是浅拷贝只能拷贝第一层的数据,且都是值类型数据,如果有引用型数据,修改 副本会影响原数据。 深拷贝:通过利用JSON.parse(JSON.stringify())来实现深拷贝的目的,但利用JSON拷贝也是有缺点的, 当要拷贝的数据中含有undefined/function/symbol类型是无法进行拷贝的,当然我们想项目开发中需要 深拷贝的数据一般不会含有以上三种类型,如有需要可以自己在封装一个函数来实现。 事件监听addEventListener()方法,用于向指定元素添加事件句柄,它可以更简单的控制事件,语法为 element.addEventListener(event, function, useCapture); 第一个参数是事件的类型(如 "click" 或 "mousedown"). 第二个参数是事件触发后调用的函数。 第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。 事件传递有两种方式,冒泡和捕获 事件传递定义了元素事件触发的顺序,如果你将P元素插入到div元素中,用户点击P元素, 在冒泡中,内部元素先被触发,然后再触发外部元素, 捕获中,外部元素先被触发,在触发内部元素, 事件委托以及冒泡原理事件委托是利用冒泡阶段的运行机制来实现的,就是把一个元素响应事件的函数委托到另一个元素,一般是把一组元素的事件委托到他的父元素上,委托的优点是 减少内存消耗,节约效率 动态绑定事件 事件冒泡,就是元素自身的事件被触发后,如果父元素有相同的事件,如onclick事件,那么元素本身的触发状态就会传递,也就是冒到父元素,父元素的相同事件也会一级一级根据嵌套关系向外触发,直到document/window,冒泡过程结束。 事件冒泡和事件捕获事件捕获(event capturing): 当鼠标点击或者触发dom事件时(被触发dom事件的这个元素被叫作事件源),浏览器会从根节点到事件源(由外到内)进行事件传播。 事件冒泡(dubbed bubbling):事件冒泡刚好相反,事件源到根节点(由内到外)进行事件传播。 无论是事件捕获还是事件冒泡,它们都有一个共同的行为,就是事件传播。dom标准事件流的触发的先后顺序为:先捕获再冒泡。即当触发dom事件时,会先进行事件捕获,捕获到事件源之后通过事件传播进行事件冒泡。 在我们平常用的 JS中的垃圾回收机制一、为什么要垃圾回收 如果没有垃圾回收机制,适时清理不被引用的值并释放相应的内存空间,JavaScript 解释器将会消耗完系统中所有可用内存,造成系统崩溃。 二、垃圾回收的核心思路 所谓垃圾回收的核心思想就是清理掉内存中不再被引用的值,通俗的说,就是清理掉内存中没用的值,那么如何判断有没有用?如果是局部变量,在函数调用结束后即是无用的,可以被回收掉;而全局变量在浏览器卸载页面的时候才会消失。由于这个过程消耗较大,所以解释器会按照固定时间周期性的执行回收。 三、垃圾回收的两种方式 1.标记清除(JS最常用) 标记清除法主要有以下三个步骤: 1)给所有变量增加一个标记,如果是进入执行环境(比如申明变量),则标记为“进入环境”,如果是结束执行环境(比如执行完相关函数),则标记为“离开环境”; 2)去掉“进入环境”的变量标记以及被该变量所引用的变量标记(比如闭包); 3)还存在标记的变量即是需要被清理的变量。 2.引用计数 引用计数法主要有以下三个步骤: 1)申明了一个变量,并且将一个引用类型的值赋值给这个变量,那么这变量的引用就加1; 2)如果这个变量的值又指向另外一个值,或者说这个变量被重新赋值了,那么以上的引用类型的值的引用次数就减1; 3)如此一来,该引用类型的值的引用次数即为0,垃圾回收器会在运行的时候清理掉引用次数为0的值并释放相应的内存空间; 4)特别注意:引用计数在代码中存在循环引用时会出现问题 判断数组的方法Object.prototype.toString.call()、instanceof、Array.isArray()以及typeof 面向对象面向对象的三大特性:继承/多态/封装
作用域链全局函数无法查看局部函数的内部细节,但局部函数可以查看其上层的函数细节,直至全局细节。 当需要从局部函数查找某一属性或方法时,如果当前作用域没有找到,就会上溯到上层作用域查找, 直至全局函数,这种组织形式就是作用域链。 原型,原型链,原型链继承
特点: JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。 防抖节流防抖
重绘回流
js事件循环机制事件循环机制从整体上告诉了我们 JavaScript 代码的执行顺序 先执行 Script 脚本,然后清空微任务队列,然后开始下一轮事件循环,继续先执行宏任务,再清空微任务队列,如此往复。
上诉的 setTimeout 和 setInterval 等都是任务源,真正进入任务队列的是他们分发的任务。 js JavaScript的任务分为两种 调用栈:调用栈是一个栈结构,函数调用会形成一个栈帧,帧中包含了当前执行函数的参数和局部变量等上下文信息,函数执行完后,它的执行上下文会从栈中弹出。 JavaScript是 宏任务微任务
作用域,作用域链
闭包
Javascript如何实现继承1、构造继承 2、原型继承 3、实例继承 4、拷贝继承 原型prototype机制或apply和call方法去实现较简单,建议使用构造函数与原型混合方式。 function Parent(){ this.name = 'wang'; }
} javascript创建对象的几种方式javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON;但写法有很多种,也能混合使用。 1、对象字面量的方式
2、用function来模拟无参的构造函数
3、用function来模拟参构造函数来实现(用this关键字定义构造的上下文属性)
4、用工厂方式来创建(内置对象)
5、用原型方式来创建
6、用混合方式来创建
什么是虚拟dom,优势是什么,存储在哪
2、提升渲染性能-Virtual DOM的优势不在于单次的操作,而是在大量、频繁的数据更新下,能够对视图进行合理、高效的更新。 为了实现高效的DOM操作,一套高效的虚拟DOM diff算法显得很有必要。通过找出本次DOM需要更新的节点来更新,其他的不更新。 3、是一个js对象,存储在内存中。 js脚本加载问题,async、defer问题
浏览器内核的理解?
渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。 JS引擎则:解析和执行javascript来实现网页的动态效果。 最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。
ES6thisthis指向
bind,call,apply
Map和SetWeakMap和Map之间的区别? WeakMap只能以复杂数据类型作为key,并且key值是弱引用,对于垃圾回收更加友好 Set:
WeakSet:
Map:
WeakMap:
symbol
promise
箭头函数与普通函数的区别
普通函数通过 function 关键字定义, this 无法结合词法作用域使用,在运行时绑定,只取决于函数的调用方式,在哪里被调用,调用位置。(取决于调用者,和是否独立运行) 箭头函数使用被称为 “胖箭头” 的操作
http同步和异步的区别同步:浏览器访问服务器请求,用户看得到页面刷新,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,j进行下一步操作。 异步:浏览器访问服务器请求,用户正常操作,浏览器后端进行请求。等请求完,页面不刷新,新内容也会出现,用户看到新内容。 get和post的区别get参数通过url传递,post放在request body中。 get请求在url中传递的参数是有长度限制的,而post没有。 get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。 get请求只能进行url编码,而post支持多种编码方式 get请求会浏览器主动cache,而post支持多种编码方式。 get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。 GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。 GET产生一个TCP数据包;POST产生两个TCP数据包。 跨域跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。 解决跨域
同源策略 同源策略指的是:协议+域名+端口三者皆相同,可以视为在同一个域,否则为不同域。同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。 作用是一个用于隔离潜在恶意文件的重要安全机制。 所限制的跨域交互包括:
Ajax 为什么不能跨域 Ajax 其实就是向服务器发送一个 GET 或 POST 请求,然后取得服务器响应结果,返回客户端。Ajax 跨域请求,在服务器端不会有任何问题,只是服务端响应数据返回给浏览器的时候,浏览器根据响应头的 因此,服务端如果没有设置跨域字段设置,跨域是没有权限访问,数据被浏览器给拦截了。 所以,要解决的问题是:如何从客户端拿到返回的数据? 其实,在同源策略的基础上,选择性地为同源策略开放了一些后门。例如 img、script、style 等标签,都允许跨域引用资源。 JSONP 实现 只支持GET请求,不支持POST等其它请求,也不支持复杂请求,只支持简单请求。 JSONP 缺点
跨域资源共享 CORS 支持所有的请求,包含GET、POST、OPTOIN、PUT、DELETE等。既支持复杂请求,也支持简单请求。 JSONP和CORS跨域理解 JSONP与CORS的使用目的相同,并且都需要服务端和客户端同时支持,但CORS的功能更加强大。 SONP和CORS的优缺点
应用场景 如果需要兼容IE低版本浏览器,无疑,JSONP。 如果需要对服务端资源进行操作,无疑,CORS。 浏览器缓存缓存分为两种:强缓存和协商缓存,根据响应的header内容来决定。 强缓存相关字段有expires,cache-control。如果cache-control与expires同时存在的话,cache-control的优先级高于expires。 协商缓存相关字段有Last-Modified/If-Modified-Since,Etag/If-None-Match ajax实现原理及方法使用原生ajax的请求步骤
ajax、axios、fetch的区别
2, axios Axios 是一个基于 promise 的 HTTP库,可以再浏览器和Node.js中使用。 特性
优缺点:
Fetch API提供了一个JavaScript 接口,用于访问和操纵HTTP 管道的部分,例如请求和响应。 它提供了一个全局的 优缺点:
如何防范CSRF攻击,XSS攻击XSS攻击的防范 1、HttpOnly 防止劫取 Cookie 2、输入检查-不要相信用户的所有输入 3、输出检查-存的时候转义或者编码 CSRF攻击的防范 1、验证码 2、Referer Check 3、添加token验证 一个页面从输入 URL 到页面加载显示完成的全部过程
常用的http状态码基本概念: HTTP,全称为 HyperText Transfer Protocol,即为超文本传输协议。是互联网应用最为广泛的一种网络协议 所有的 www 文件都必须遵守这个标准。 http特性: HTTP 是无连接无状态的 HTTP 一般构建于 TCP/IP 协议之上,默认端口号是 80 HTTP 可以分为两个部分,即请求和响应。 http请求: HTTP 定义了在与服务器交互的不同方式,最常用的方法有 4 种 分别是 GET,POST,PUT, DELETE。URL 全称为资源描述符,可以这么认为:一个 URL 地址 对应着一个网络上的资源,而 HTTP 中的 GET,POST,PUT,DELETE 就对应着对这个资源的查询,修改,增添,删除4个操作。 HTTP 请求由 3 个部分构成,分别是:状态行,请求头(Request Header),请求正文。 HTTP 响应由 3 个部分构成,分别是:状态行,响应头(Response Header),响应正文。 HTTP 响应中包含一个状态码,用来表示服务器对客户端响应的结果。 状态码一般由3位构成: 1xx : 表示请求已经接受了,继续处理。 2xx : 表示请求已经处理掉了。 3xx : 重定向。 4xx : 一般表示客户端有错误,请求无法实现。 5xx : 一般为服务器端的错误。 比如常见的状态码: 200 OK 客户端请求成功。 301 Moved Permanently 请求永久重定向。 302 Moved Temporarily 请求临时重定向。 304 Not Modified 文件未修改,可以直接使用缓存的文件。 400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。 401 Unauthorized 请求未经授权,无法访问。 403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因。 404 Not Found 请求的资源不存在,比如输入了错误的URL。 500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。 503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。 http的基本结构应用层:向用户提供服务,处理特定的细节,比如:文件传输,DNS服务,HTTP等 传输层:为两台主机上的应用程序提供端到端的通信,主要分为TCP和UDP两种通讯方式
网络层:在众多的选项内选择一条传输路线。依赖mac地址 链路层:处理连接网络的硬件部分 http方法
cookies,sessionStorage 和 localStorage 的区别cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。 cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递。 sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。 存储大小: cookie数据大小不能超过4k。 sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。 有期时间: localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据; sessionStorage 数据在当前浏览器窗口关闭后自动删除。 cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭 httpsHTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。 HTTPS主要作用是: (1)对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全; (2)对网站服务器进行真实身份认证。 HTTP 与 HTTPS 的区别HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页; HTTPS需要用到SSL证书,而HTTP不用; HTTPS标准端口443,HTTP标准端口80; HTTPS基于传输层,HTTP基于应用层; HTTPS在浏览器显示绿色安全锁,HTTP没有显示; vue基础SPA 单页面的理解,优缺点SPA( single-page application )仅在 Web 页面初始化时加载相应的 HTML、JavaScript 和 CSS。一旦页面加载完成,SPA 不会因为用户的操作而进行页面的重新加载或跳转;取而代之的是利用路由机制实现 HTML 内容的变换,UI 与用户的交互,避免页面的重新加载。 优点:
缺点:
vue 的单向数据流父级 prop 的更新会向下流动到子组件中,每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值 computed 和 watch 的区别和运用的场景computed: 是计算属性,依赖其它属性值,并且 computed 的值有缓存,只有它依赖的属性值发生改变,下一次获取 computed 的值时才会重新计算 computed 的值; watch: 更多的是「观察」的作用,类似于某些数据的监听回调 ,每当监听的数据变化时都会执行回调进行后续操作; 运用场景:
vue 生命周期(1)生命周期是什么? Vue 实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模版、挂载 Dom -> 渲染、更新 -> 渲染、卸载等一系列过程,我们称这是 Vue 的生命周期。 (2)各个生命周期的作用
组件中 data 为什么是一个函数vue中组件是用来复用的,为了防止data复用,将其定义为函数。 我们将组件中的data写成一个函数,数据以函数返回值形式定义,这样每复用一次组件,就会返回一份新的data,拥有自己的作用域,类似于给每个组件实例创建一个私有的数据空间,让各个组件实例维护各自的数据。 当我们组件的date单纯的写成对象形式,这些实例用的是同一个构造函数,由于JavaScript的特性所导致,所有的组件实例共用了一个data,就会造成一个变了全都会变的结果 vue中key使用 v-model 的原理v-model 本质上是语法糖,v-model 在内部为不同的输入元素使用不同的属性并抛出不同的事件:
vue双向绑定的原理双向数据绑定是基于Object.defineProperty()重新定义get和set方法实现的。修改触发set方法赋值,获取触发get方法取值,并通过数据劫持发布信息。 v-show 与 v-if 有什么区别v-if 是真正的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建;也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。 v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 的 “display” 属性进行切换。 所以,v-if 适用于在运行时很少改变条件,不需要频繁切换条件的场景;v-show 则适用于需要非常频繁切换条件的场景。 v-if和v-for能不能同时使用v-for比v-if优先级高,意味着如果两个指令同时使用,会先循环后判断,会造成资源浪费 vue常用的修饰符
高级params和query的区别用法:query要用path来引入,params要用name来引入,接收参数都是类似的,分别是 注意点:query刷新不会丢失query里面的数据 params刷新 会 丢失 params里面的数据。 组件router
Vue通信
Vue路由守卫有哪些,怎么设置,使用场景 常用的两个路由守卫:router.beforeEach 和 router.afterEach 每个守卫方法接收三个参数: to: Route: 即将要进入的目标 路由对象 from: Route: 当前导航正要离开的路由 next: Function: 一定要调用该方法来 resolve 这个钩子。 在项目中,一般在beforeEach这个钩子函数中进行路由跳转的一些信息判断。 判断是否登录,是否拿到对应的路由权限等等。 组件中的name
vue-router 路由模式 abstract : 支持所有 JavaScript 运行环境,如 Node.js 服务器端。如果发现没有浏览器的 API,路由会自动强制进入这个模式. hash模式: 即地址栏 URL 中的 # 符号; history模式: window.history对象打印出来可以看到里边提供的方法和记录长度。利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。(需要特定浏览器支持)。 history与hash路由的区别 hash前端路由,无刷新,history 会去请求接口 hash :hash 虽然出现在 URL 中,但不会被包含在 http 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面。 history :history 利用了 html5 history interface 中新增的 pushState() 和 replaceState() 方法。这两个方法应用于浏览器记录栈,在当前已有的 back、forward、go 基础之上,它们提供了对历史记录修改的功能。只是当它们执行修改时,虽然改变了当前的 URL ,但浏览器不会立即向后端发送请求。 实现的原理: hash 模式的原理是 onhashchange 事件,可以在 window 对象上监听这个事件。 history :hashchange 只能改变 # 后面的代码片段,history api (pushState、replaceState、go、back、forward) 则给了前端完全的自由,通过在window对象上监听popState()事件。 完整的导航守卫流程 导航被触发。 在失活的组件里调用离开守卫 调用全局的 在重用的组件里调用 在路由配置里调用 解析异步路由组件。 在被激活的组件里调用 在所有组件内守卫和异步路由组件被解析之后调用全局的 导航被确认。 调用全局的 触发 DOM 更新。 用创建好的实例调用beforeRouteEnter守卫中传给 next 的回调函数 导航守卫的三个参数的含义 to:即将要进入的目标 路由对象。 from:当前导航正要离开的路由对象。
vuexVuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。简单来说就是:应用遇到多个组件共享状态时,使用vuex。 场景:多个组件共享数据或者是跨组件传递数据时 vuex的流程 页面通过mapAction异步提交事件到action。action通过commit把对应参数同步提交到mutation,mutation会修改state中对应的值。最后通过getter把对应值跑出去,在页面的计算属性中,通过,mapGetter来动态获取state中的值 vuex有哪几种属性 有五种,分别是State , Getter , Mutation , Action , Module (就是mapAction)
vuex的优点 1.解决了非父子组件的消息传递(将数据存放在state中) 2.减少了AJAX请求次数,有些情景可以直接从内存中的state获取 vuex的缺点 1.刷新浏览器,vuex中的state会重新变为初始状态 解决方案vuex-along , https://github.com/robinvdvleuten/vuex-persistedstate keep-alive
vue中$nextTick作用处理数据动态变化后,dom还未及时更新的问题。$nextTick就可以获取到数据更新后最新的dom变化 vue项目优化的手段有哪些前端方面: 1、路由懒加载 2、图片,资源放cdn 3、页面图片较多进行懒加载 4、骨架屏方案 5、采用服务端渲染---nuxt.js 服务器端: 开启gzip Vue SSRVue.js 是构建客户端应用程序的框架。默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM。然而,也可以将同一个组件渲染为服务端的 HTML 字符串,将它们直接发送到浏览器,最后将这些静态标记"激活"为客户端上完全可交互的应用程序。 即:SSR大致的意思就是vue在客户端将标签渲染成的整个 html 片段的工作在服务端完成,服务端形成的html 片段直接返回给客户端这个过程就叫做服务端渲染。 其他前端工程化、模块化、组件化前端工程化 1、将前端项目当成一项系统工程进行分析、组织和构建从而达到项目结构清晰、分工明确、团队配合默契、开发效率提高的目的 2、工程化思维就是“结构、样式和动作分离”。如目录分为assets,components,router,util 前端模块化 1、可以简单的认为模块化和组件化是工程化的表现形式 2、JS模块化方案很多有AMD/CommonJS/UMD/ES6 Module等,CSS模块化开发大多是在less、sass、stylus 前端组件化 1、组件化将页面视为一个容器,页面上各个独立部分例如:头部、导航、焦点图、侧边栏、底部等视为独立组件,不同的页面根据内容的需要,去盛放相关组件即可组成完整的页面。 2、模块化和组件化一个最直接的好处就是复用 vue,jq,react,angular区别,各自优势jq 1、需要频繁操作dom 2、容易引起重绘和回流,影响页面性能 vue 1、mvvm模式,采用虚拟dom不需要频繁操作dom,通过双向绑定,用数据驱动页面变化,页面变化对应数据也发生变化,只需要关注数据层的业务逻辑,而无需关注视图层的更新。可以尽量减少无用的更新操作,提高dom渲染效率。 2、组件化开发,页面由若干个组建组成,可复用性高。 3、社区环境好,各类资源文档十分齐全。 4、通过Object.defineProperty() 方法,监控对数据的操作,从而可以自动触发数据同步。 react 1、虚拟dom。 2、一切都是组件,组件实例之间可以嵌套。 3、使用独特的jsx语法。 angular 1、AngularJS的学习成本高,比如增加了Dependency Injection特性,而Vue.js本身提供的API都比较简单、直观。 2、在性能上,AngularJS依赖对数据做脏检查,所以Watcher越多越慢。 webpack1、Entry:入口,Webpack 执行构建的第一步将从 Entry 开始,可抽象成输入。 2、Module:模块,在 Webpack 里一切皆模块,一个模块对应着一个文件。Webpack 会从配置的 Entry 开始递归找出所有依赖的模块。 3、Chunk:代码块,一个 Chunk 由多个模块组合而成,用于代码合并与分割。 4、Loader:模块转换器,用于把模块原内容按照需求转换成新内容。 5、Plugin:扩展插件,在 Webpack 构建流程中的特定时机会广播出对应的事件,插件可以监听这些事件的发生,在特定时机做对应的事情。 6、Output:打包后文件输出的位置 vue和jQuery的区别jQuery是使用选择器( px、rpx、em、rem 、vw/vh、百分比的区别
rpx
rpx 和 px之间的区别:
rem 相对长度单位,CSS3 新增的一个相对单位,rem 是相对于根元素(html)的 em 相对长度单位,em 是相对于当前元素的父元素的 px 与 rem 的区别:
vw/vh CSS3 特性 vh 和 vw:
百分比 通常认为子元素的百分比完全相对于直接父元素 响应式
页面渲染原理
浏览器兼容
git工作中常用的git命令
分支
项目原来公司工作流程是怎么样的,如何与其他人协作的?如何夸部门合作的?你遇到过比较难的技术问题是?你是如何解决的?常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件?页面重构怎么操作?网站重构:在不改变外部行为的前提下,简化结构、添加可读性,而在网站前端保持一致的行为。 也就是说是在不改变UI的情况下,对网站进行优化,在扩展的同时保持一致的UI。 对于传统的网站来说重构通常是: 表格(table)布局改为DIV+CSS 使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对IE6有效的) 对于移动平台的优化 针对于SEO进行优化 深层次的网站重构应该考虑的方面 减少代码间的耦合 让代码保持弹性 严格按规范编写代码 设计可扩展的API 代替旧有的框架、语言(如VB) 增强用户体验 通常来说对于速度的优化也包含在重构中 压缩JS、CSS、image等前端资源(通常是由服务器来解决) 程序的性能优化(如数据读写) 采用CDN来加速资源加载 对于JS DOM的优化 HTTP服务器的文件缓存 你有什么想问我的公司常用的技术栈是什么? 你们如何测试代码? 你们如何解决线上故障? 目前这个职位最紧要的任务是什么? 未来打算采用那哪些新技术? 当前团队的规模和配置是怎么样的? 你们如何准备故障恢复?是否有完善的发布机制? 公司是否有技术分享交流活动?有的话,多久一次呢? 公司技术团队的架构和人员组成? 有公司级别的学习资源吗?比如电子书订阅或者在线课程? 你们认为和竞品相比有什么优势? |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 | -2025/2/5 20:21:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |