2023秋招面试题持续更新中。。。

news2024/9/21 14:44:19

目录

  • 1.八股文
    • 渐进式
    • MVVM
    • 三次握手,四次挥手
    • vite
    • ajax
    • 组件化和模块化
    • 虚拟dom原理流程
    • 浏览器内核
    • 浏览器渲染过程
    • 回流和重绘
    • nextTick
  • 2.项目相关
    • 1.声明式导航和编程式导航
    • 重写push和replace方法:
    • 性能优化
      • 图片懒加载
      • 路由懒加载
    • http请求方式

1.八股文

渐进式

MVVM

Model即数据层,从数据库或者后端请求回来的数据,也有可能是自己定义的数据

View即视图层,通常就是DOM层,主要的作用是给用户展示各种信息

ViewModel即视图模型层,是View和Model沟通的桥梁,实现了数据双向绑定
MVVM相比于MVC,实现了View和Model的同步,也就是当Model的属性发生改变时,改属性对应的View层显示会自动改变,也就是Vue数据驱动的思想。

三次握手,四次挥手

第一次握手:客户端将TCP报文标志位SYN置为1,随机产生一个序号值seq=J,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT状态,等待服务器端确认。
第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1,随机产生一个序号值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了

第一次挥手: Client端发起挥手请求,向Server端发送标志位是FIN报文段,设置序列号seq,此时,Client端进入FIN_WAIT_1状态,这表示Client端没有数据要发送给Server端了。
第二次分手:Server端收到了Client端发送的FIN报文段,向Client端返回一个标志位是ACK的报文段,ack设为seq加1,Client端进入FIN_WAIT_2状态,Server端告诉Client端,我确认并同意你的关闭请求。
第三次分手: Server端向Client端发送标志位是FIN的报文段,请求关闭连接,同时Client端进入LAST_ACK状态。
第四次分手 : Client端收到Server端发送的FIN报文段,向Server端发送标志位是ACK的报文段,然后Client端进入TIME_WAIT状态。Server端收到Client端的ACK报文段以后,就关闭连接。此时,Client端等待2MSL的时间后依然没有收到回复,则证明Server端已正常关闭,那好,Client端也可以关闭连接了。

vite

Vite其核心原理是利用浏览器现在已经支持ES6的import,碰见import就会发送一个HTTP请求去加载文件。
Vite整个过程中没有对文件进行打包编译,做到了真正的按需加载,所以其运行速度比原始的webpack开发编译速度快出许多!
webpack:当一个文件变化时,会重新构建整个包文件,随着项目体积的增大,构建速度就会越来越慢

vite:当一个文件变化时,只需要构建相应的模块,无论项目体积多大,更新速度就很快
vite和webpack优缺点对比e

优点:

更快的启动时间和更新速度
更好的开发体验:自动打开浏览器、自动刷新页面
配置简单。不需要过多的配置就可以搭建基本的开发环境
更少的依赖。借助原生的ES模块,避免了过多的额外依赖

缺点:

vite的构建技术主要用于中小型项目,对于大型项目的支持不如webpack
vite主要是针对vue3的单页面应用,对于多页面应用、ssr应用、自定义流程应用不如webpack
开发环境首屏加载慢,懒加载慢
vite由于基于原生ES模块,不支持commonJs;webpack关注兼容性,vite关注浏览器端的开发体验,vite的生态还不如webpack

ajax

他是指一种创建交互式网页应用的网页开发技术
1、axios的特点有哪些?
答:
一、Axios 是一个基于 promise 的 HTTP 库,支持promise所有的API
二、它可以拦截请求和响应
三、它可以转换请求数据和响应数据,并对响应回来的内容自动转换成 JSON类型的数据
四、安全性更高,客户端支持防御 XSRF

组件化和模块化

组件化:把重复的代码提取出来合并成为一个个组件,组件最重要的就是复用,位于框架最底层,其他功能都依赖于组件,可供不同功能使用,独立性强。组件化更多关注UI部分,每个组件有独立的HTML、css、js代码。可以根据需要把它放在页面的任意部位,也可以和其他组件一起形成新的组件。一个页面是各个组件的结合,可以根据需要进行组装。
模块化:分属同一功能/业务的代码进行分装,让它成独立的模块,可以独立运行,以页面、功能或其他不同粒度划分程度不同的模块,位于业务框架层,模块间通过接口调用,目的是降低模块间的耦合,由之前的主应用与模块耦合,变为主应用与接口耦合,接口与模块耦合。侧重功能的封装,主要是针对Js代码,隔离、组织复制的js代码,将它封装成一个个具有特定功能的的模块。模块可以通过传递参数的不同修改这个功能的的相关配置,每个模块都是一个单独的作用域,根据需要调用。一个模块的实现可以依赖其它模块。

虚拟dom原理流程

虚拟DOM其实就是用一个原生的JS对象去描述一个DOM节点,实际上它只是对真实 DOM 的一层抽象。最终可以通过一系列操作使这棵树映射到真实环境上。

模板 ==> 渲染函数 ==> 虚拟DOM树 ==> 真实DOM

vuejs通过编译将模板(template)转成渲染函数(render),执行渲染函数可以得到一个虚拟节点树

在对 Model 进行操作的时候,会触发对应 Dep 中的 Watcher 对象。Watcher 对象会调用对应的 update 来修改视图。

在这里插入图片描述

浏览器内核

分为渲染引擎和js引擎
渲染引擎在浏览器窗口显示请求的内容
js引擎解析和执行js来实现网页的动态效果

浏览器渲染过程

解析HTML生成DOM树。
解析CSS生成CSS规则树。
解析JS,根据 DOM 树和 CSS 规则树构建渲染树。
将DOM树与CSSOM规则树合并在一起生成渲染树。
当渲染对象被创建并添加到树中,它们没有位置和大小,所以当浏览器生成渲染树以后,就会根据渲染树来进行布局(也可以叫做回流)。这一阶段浏览器要做的是计算出各个节点在页面中确切位置和大小。通常这一行为也被称为自动重排。
遍历渲染树开始布局,计算每个节点的位置大小信息。
浏览器将所有图层的数据发送给GPU,GPU将图层合成并显示在屏幕上。

回流和重绘

回流:当DOM变化影响了元素的几何信息(大小,位置),浏览器需要重新计算元素的几何属性,会导致浏览器重新生成渲染树,将其放置在正确的位置,这个过程也叫重排

重绘

当重新生成渲染树后,就要将渲染树每个节点绘制到屏幕,这个过程叫重绘。

不是所有的动作都会导致回流,例如改变字体颜色,只会导致重绘。

回流和重绘这两个操作代价非常大,因为 JavaScript 引擎线程与 GUI 渲染线程是互斥,它们同时只能一个在工作,因此重排和重绘会阻塞主线程。
回流必定会发生重绘,重绘不一定会引发回流。

回流所需的成本比重绘高得多
防抖和节流可减少回流重绘的次数

nextTick

nextTick函数用于在下一次DOM更新循环结束之后执行回调函数。可以用来确保在更新DOM后执行某些操作,例如访问更新后的DOM元或执行其他依赖于DOM更新的逻辑。

2.项目相关

1.声明式导航和编程式导航

	声明式导航:以超链接方式实现的页面跳转,就是声明式导航
	编程式导航:通过javascript提供的api方法实现页面的跳转,就是编程式导航

重写push和replace方法:

原因:push方法返回的是一个promise对象,我们知道promise对象是有成功回调和失败回调的,但是我们并没有传入相应的回调就会出错。所以需要进行重写
push 和 replace 的区别:
​ ​ 1)push 会增加一条历史记录
​ ​ 2)replace 不会增加历史记录,而是替换掉当前的历史记录
先将原型对象进行保存,如果外界传入了resolve和rejected回调,那么就用外部传入的,否则就传入一个空函数作为回调,这样就可以避免没有传入回调时的报错。

性能优化

图片懒加载

视区外图片先不加载,当进入视区或者进入视区之前的某个位置加载
插件:vue-lazyload

路由懒加载

把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,本质就是Vue 的异步组件在路由组件上的应用

http请求方式

get(获取数据),post(增加数据),put(修改数据),delete(删除数据),head,options,trace,connect

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/802378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎样快速实现一个发送邮件的接口?flask_mail库30行代码,快速实现

需求 实现了一个根据部门批量获取自动化行覆盖率,并与指标做diff的脚本,怎么才能第一时间通知给对应的人呢? 最先想到的一定是邮件发送(后边我在自己项目中接入的是公司内部的一个类似钉钉的服务号) 因为原本项目是用的flask,所…

DRUPAL 8.x远程代码执行漏洞(CVE-2018-7600)

事件背景 框架漏洞收集 CVE-2018-7600有两个POC分别是7和8的,本文仅研究8版本的POC,与其它的文章不同的事,本文我将数据流向调试并记录下来了 漏洞说明 1. 漏洞原理:Drupal对表单请求内容未做严格过滤,因此&#x…

900就能上8000MHz的DDR5内存,光威神策做到了

这是一款定位于高端国产DDR5电竞游戏内存条的产品,而且是来自国产品牌,频率可以达到8000MHz,设计也是相当惊艳,重点在于它的价格是真的香,有需要的朋友可以冲了。 光威近期发布了一款神策系列DDR5内存条,相…

【腾讯云 Cloud Studio 实战训练营】基于Cloud Studio完成简易通讯录

目录 🔆Cloud Studio 简介 操作步骤 1.登录 2.创建工作空间 3.初始界面 4.开发空间 5.保存自定义模板 🔆简易通讯录 1.实验要求 2.操作环境 3.源代码介绍 3.1 定义通讯录类 3.2 定义通讯录列表 3.3 添加联系人功能 3.4 修改联系人 3.5 …

Echarts 柱状图显示百分比

以下是生成的 option option {yAxis: { name: 金额(元), type: value },xAxis: { type: category },legend: {},series: [{stack: x,name: 早餐,label: {normal: {show: true,position: insideRight,// 格式化显示formatter: function (params) {let …

清楚知道谁在划水?伙伴云一招搞定任务交办

伙伴云任务交办让每个职场人都拥有专属的事务汇集地, 让老板一张图把控全局,运筹帷幄, 让员工每天的工作井然有序,让每件事的进展都有始有终、形成闭环。一起来看看吧! 01企业内部任务管理的重要性 对于一家公司或一…

Java泛型的简单认识

泛型的认识 自定义泛型,定义了String类型,随后这个泛型就是String类型 于是他的方法都是字符串的类型 泛型接口 泛型方法 所有车可以进行比赛,定义了一个BMW和BENZ两个车类,都继承car,当使用泛型的 如果你顶一个狗对象…

Centos7 安装tomcat9

去官网下载 数据包 ps: wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.78/bin/apache-tomcat-9.0.78.tar.gz检查Java环境 [tomcatlocalhost bin]$ java -version java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java H…

品牌渠道治理的有效方法

什么是品牌渠道,即品牌的销售渠道,围绕销售渠道做的治理工作,根本上是对低价、窜货的治理,当渠道中存在低价问题,那不管是对经销商还是非授权店铺,都会有不好的影响,经销商会跟价,非…

派森编程软件python好学吗,派森语言python干什么的

大家好,小编来为大家解答以下问题,派森编程软件python有什么用,派森编程软件python好学吗,现在让我们一起来看看吧! 1、python真的值得学吗? 不建议学python的原因: 1、语言性能差 对于C老手…

ACL访问控制列表(红茶三杯CCNA)

ACL的两大主要功能: 1. 流量控制 2. 匹配感兴趣流量ACL分为两类 Standard ACL-标准访问控制列表 只能根据源地址做过滤针对整个协议采取相关动作(允许或禁止) Extended ACL-扩展访问控制列表 能根据源、目的地址、端口号进行过滤能允许或拒…

实验四 汇编语言程序上机过程

五、实验步骤 1、用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为Hello.ASM。将源文件放到Dosbox挂载的目录下面。 图5-1为源码写注释并更改扩展名为Hello.ASM 2、用MASM对源文件进行汇编,产生Hello.OBJ文件和Hello.LST文件。若汇编时提示有错,用文字编辑工具修改源程…

YAPI接口自动鉴权功能部署详解

安装准备 以下操作,默认要求自己部署过yapi,最好是部署过yapi二次开发环境。 无论是选择在线安装或者是本地安装,都需要安装client工具。 1、yapi-cli:npm install yapi-cli –g, 2、安装后将文件夹nodejs/node_gl…

Nexpose v6.6.208 for Linux Windows - 漏洞扫描

Nexpose v6.6.208 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, Release Jul 27, 2023 请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.o…

10分钟带你实现一个Android自定义View:带动画的等级经验条

先展示一下静态效果图 介绍一下我们的实现流程: 首先整个经验条有一个圆角边框的背景打底;然后给经验条绘制一条轨道,让用户比较直观地看到总进度的长度;在轨道的上层绘制我们的渐变色经验条;在经验条的上层绘制等级…

vue新学习 02 vue命令v-model,数据代理(作用域和作用域链),事件,监听,渲染,计算属性(也就是把操作属性的语句放到vue实例中)

双向绑定用命令v-model: v-bind的命令是单项去绑定data中的相关属性,此时的data是真正的data,并没有用变量声明的方式去接收vue实例对象,也就是例如用const vm new Vue({})。而是直接就采用了new Vue({})这…

6、Kubernetes核心技术 - Pod

目录 一、概述 二、Pod机制 2.1、共享网络 2.2、共享存储 三、Pod资源清单 四、 Pod 的分类 五、Pod阶段 六、Pod 镜像拉取策略 ImagePullBackOff 七、Pod 资源限制 八、容器重启策略 一、概述 Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。P…

oracle12c静默安装

目录 前言 安装配置步骤 关闭防火墙,禁止防火墙开机自启 关闭selinux yum安装必要安装包 内网环境下载依赖包的方式 创建用户和组 创建oinstall和dba组 创建oracle用户 设置oracle密码 查看创建结果 修改内核参数 使配置生效 修改用户及文件限制 改文件限制 修改用…

ol.Overlay+gif动画及隐藏问题

隐藏要使用css比较彻底,例如$("#markerLbs").hide()。 如果使用markerLbs.setVisible(false),当地图刷新后再次显示,可能我的用法不对,欢迎指教。 我的demo是一个gif动画,当zoom变化时控制gif显隐&#xf…

防汛备汛 | EasyV数字孪生可视化防汛应急解决方案护平安!

一、方案背景 汛期是指季节性降雨增多,河流湖泊水位上涨的时期。当前,我国正式进入“七下八上”防汛关键期,多地进入主汛期。入汛以来,我国经历了18次强降雨过程,21个省份271条河流发生超警以上洪水。其中南方地区受台…