面试题记录

面试题记录

    • 一.Vue中的合成事件和原生事件有哪些区别。
    • 二.parseint(3,2)返回什么值?为什么
    • 三.什么是闭包
    • 四.vue3和vue2区别有哪些
    • 五.vue3 响应式原理 双向绑定原理
      • 1. 响应式原理:
      • 2. 双向绑定原理:
        • Vue3 中双向绑定的原理:
        • 下面是 Vue2 中双向绑定的完整图解:
    • 六. vue 如何优化首页加载速度
    • 七. 从浏览器输入URL到页面渲染的过程主要包括以下几个步骤:
    • 八.webpack打包流程图
    • 九.vuex 工作流程

一.Vue中的合成事件和原生事件有哪些区别。

  1. 触发方式:合成事件是由Vue框架封装的,通过绑定在Vue组件的事件指令上来触发,例如@click@input等。而原生事件是直接通过DOM元素上的事件监听器来触发,例如addEventListener

  2. 事件对象:合成事件中的事件对象是Vue框架自己创建的,它是对原生事件对象的封装,提供了一些额外的属性和方法。而原生事件中的事件对象是浏览器提供的,具有浏览器原生的属性和方法。

  3. 跨平台兼容性:合成事件是Vue框架对不同浏览器的事件处理逻辑进行统一封装,使得开发者不需要关心浏览器兼容性问题。而原生事件需要开发者自己处理跨浏览器的兼容性问题。

  4. 性能优化:合成事件经过Vue框架的优化处理,可以提高性能。Vue会对事件进行批量处理,减少不必要的重绘和重排操作。而原生事件没有经过Vue的优化处理,可能会导致性能问题。

总的来说,合成事件相对于原生事件更加方便和易用,尤其在Vue组件中使用时更为常见。但在某些特殊情况下,如果需要更精细的控制或处理跨浏览器兼容性问题,可以使用原生事件。

二.parseint(3,2)返回什么值?为什么

parseInt(3, 2)会将字符串"3"按照进制数2进行解析。

在进制数为2的情况下,只能使用0和1来表示数字。而字符串"3"中包含的字符"3"并不是有效的二进制数字,因此解析失败,parseInt会返回NaN

如果你想将字符串"3"解析为整数,可以使用parseInt("3"),它会使用默认的十进制进行解析,返回结果为3。

三.什么是闭包

闭包是指在函数内部定义的函数,并且可以访问外部函数的变量和参数。

闭包可以保留外部函数的状态,使得函数可以继续操作外部函数的局部变量,即使外部函数已经执行完毕。闭包可以实现某些特殊的功能,如函数工厂、函数记忆等。在JavaScript中,闭包是一种常见的编程方式。

四.vue3和vue2区别有哪些

Vue 3相对于Vue 2有一些重要的区别和改进:

  1. 性能提升:Vue 3在内部进行了重写和优化,提供了更好的性能。新的响应式系统使用了Proxy代理对象,取代了Vue 2中的Object.defineProperty,使得数据响应式更新更高效。

  2. 更小的体积:Vue 3通过优化和摇树优化(tree shaking)等方式,减少了打包后的文件体积,提供了更小的文件大小。

  3. Composition API:Vue 3引入了Composition API,它允许开发者通过逻辑组合的方式组织和重用组件逻辑。相比Vue 2中的Options API,Composition API提供了更灵活和可组合的方式来编写组件。

  4. Teleport:Vue 3引入了Teleport(传送门)功能,它可以将组件的内容渲染到DOM结构的不同位置,使得组件的渲染更加灵活和可控。

  5. Fragment:Vue 3引入了Fragment(片段)功能,它允许组件返回多个根元素,而不需要包裹在一个额外的父元素中。

  6. 更好的TypeScript支持:Vue 3对TypeScript的支持更加完善,包括更准确的类型推断、更好的编辑器支持和更好的错误提示。

  7. 其他改进:Vue 3还包括了其他一些改进,如更好的响应式API、更好的虚拟DOM算法等,提供了更好的开发体验和更高的性能。

五.vue3 响应式原理 双向绑定原理

Vue 3响应式原理和双向绑定原理是Vue框架中的核心概念之一。下面我会为您解释这两个概念,并附上相应的图解。

1. 响应式原理:

Vue 3使用了一种称为"Proxy"的新特性,来实现响应式原理。在Vue 2中,使用的是"Object.defineProperty"来追踪属性的变化。而在Vue 3中,通过Proxy可以更加直接和细粒度地进行属性的追踪。

当我们将一个对象传递给Vue的响应式系统时,Vue会使用Proxy来监听该对象。一旦对象的属性发生变化,Vue会立即检测到并触发相应的更新。这意味着我们可以在Vue的模板中使用这些属性,当属性变化时,模板也会相应地被更新。

下面是一个图示,展示了Vue 3响应式原理的流程:

                                                +-------------------+|                   ||       Template    ||                   |+-------------------+|V+--------------+         		+--------------------------+|              | 1. Update   	|                          ||    Object    |<-----------+ 	|    Vue Reactive      	   ||              | 2. Notify   	|                          |+--------------+         		+--------------------------+|V+-------------------+|                   ||       DOM       	||                   |+-------------------+

完整图解 包括数据更新 视图更新的图解
下面是一个更完整的图示,展示了 Vue3 响应式原理中数据更新和视图更新的过程:

        +------------------+|  Normal Object   |+------------------+||v+------------------+| Proxy Object     |+------------------+||v+-------------------------------+|     Reactive System           |+-------------------------------+|                               ||    +-------------+            ||    |  Dependency |            ||    |   Tracking  |            ||    +-------------+            ||            |                  ||            |                  ||            v                  ||    +-------------+            ||    |  Dependency |            ||    |   Collection|            ||    +-------------+            ||            |                  ||            |                  ||            v                  ||    +-------------+            ||    |   Update    |            ||    |   Trigger   |            ||    +-------------+            ||            |                  ||            |                  ||            v                  ||    +-------------+            ||    |   View      |            ||    |   Update    |            ||    +-------------+            ||                               |+-------------------------------+

在这个图示中,我们可以看到完整的响应式系统包括以下几个步骤:

  1. 创建一个普通对象,并将其转换为 Proxy 对象。Proxy 对象用于拦截属性的访问和修改操作。

  2. 当我们访问 Proxy 对象的属性时,会触发 Dependency Tracking(依赖追踪)的过程。这时,系统会记录当前正在执行的副作用函数,并将其添加到属性的依赖集合中。

  3. 在 Dependency Collection(依赖收集)的过程中,系统会将副作用函数添加到属性的依赖集合中。这里使用了 Map 来存储属性的依赖集合,其中键是属性名,值是一个 Set 集合,用于存储依赖的副作用函数。

  4. 当属性发生变化时,系统会触发 Update Trigger(更新触发)的过程。这时,系统会遍历属性的依赖集合,通知相关的副作用函数进行更新。

  5. 在 View Update(视图更新)的过程中,相关的副作用函数会重新执行,从而更新视图。

通过这些步骤的协作,Vue3 的响应式系统能够实现对对象属性的监听和追踪,当属性变化时,会自动触发相应的更新操作,保持视图与数据的同步。

2. 双向绑定原理:

Vue3 的双向绑定原理与 Vue2 相比有一些不同之处。下面是一个完整的图示,展示了

Vue3 中双向绑定的原理:

           User Input           View Update+-----+           +--------+|     |           |        ||     |           |        |v     |           v        |+--------------+ |    +--------------+ ||    Template  | |    |   Reactive   | ||   (Declarative)  |    |     System   | ||              | |    |              | |+--------------+ |    +--------------+ |^     |           |        |  |     |           |        ||     |           |        |Data Flow |     +-----------+        ||                          ||                          |v                          |+--------------+                    ||     State    |                    ||   (Reactive) |                    ||              |                    |+--------------+                    |||Data Flow                 |||v+-----------------------------------+|             View                  ||          (Rendered HTML)          ||                                   |+-----------------------------------+

在这个图示中,我们可以看到双向绑定的过程:

  1. 在模板中,我们通过指令或插值表达式将数据和视图关联起来。用户可以通过输入框等交互元素改变数据。

  2. 用户的输入会通过数据流(Data Flow)进入到数据状态(State)中。这里的数据状态是响应式的对象,内部使用了 Vue3 的响应式系统。

  3. 在数据状态中,数据的变化会触发 Reactive System(响应式系统)中的监听机制。此时,系统会追踪变化的数据并通知相关的副作用函数进行更新。

  4. 更新的副作用函数会负责更新视图。通过重新执行模板中的渲染函数,视图将会被更新以反映最新的数据状态。

  5. 反过来,当视图发生变化时,通过双向绑定的机制会更新数据状态。这样,用户的输入和数据状态之间就建立了一个双向的绑定关系。

通过这个双向绑定的机制,Vue3 实现了视图和数据的自动同步,使得当用户输入或数据状态发生变化时,视图和数据能够保持一致。这大大简化了开发过程,提高了开发效率。

下面是 Vue2 中双向绑定的完整图解:

          User Input             View Update+-----+           +--------+|     |           |        ||     |           |        |v     |           v        |+--------------+ |    +--------------+ ||    Template  | |    |   Observer   | ||   (Declarative)  |    |   (Reactivity)   | ||              | |    |              | |+--------------+ |    +--------------+ |^     |           |        |  |     |           |        ||     |           |        |Data Flow |     +-----------+        ||                          ||                          |v                          |+-----------------------------------+|             View                  ||          (Rendered HTML)          ||                                   |+-----------------------------------+

在这个图示中,我们可以看到双向绑定的过程:

  1. 在模板中,我们通过指令或插值表达式将数据和视图关联起来。用户可以通过输入框等交互元素改变数据。

  2. 用户的输入会通过数据流(Data Flow)进入到数据模型中。数据模型是一个普通的 JavaScript 对象。

  3. 在数据模型中,我们使用 Observer(观察者)模式来监听数据的变化。当数据发生变化时,观察者会通知相关的订阅者进行更新。

  4. 订阅者负责更新视图。通过重新执行模板中的渲染函数,视图将会被更新以反映最新的数据状态。

  5. 反过来,当视图发生变化时,通过双向绑定的机制会更新数据模型。这样,用户的输入和数据模型之间就建立了一个双向的绑定关系。

通过这个双向绑定的机制,Vue2 实现了视图和数据的自动同步,使得当用户输入或数据模型发生变化时,视图和数据能够保持一致。然而,Vue2 的双向绑定是基于 Object.defineProperty() 来实现的,需要对数据进行劫持和监听,因此在性能上有一定的开销。而在 Vue3 中,使用了 Proxy 对象来实现响应式系统,性能更高效。

六. vue 如何优化首页加载速度

要优化Vue的首页加载速度和项目性能,可以采取以下几个步骤:

  1. 代码压缩和打包:使用工具(如Webpack)对代码进行压缩和打包,减小文件大小,提高加载速度。

  2. 使用异步组件:将页面中的组件按需加载,而不是一次性加载所有组件,可以减少初始加载时间。

  3. 路由懒加载:将路由按需加载,只在需要时加载对应的组件,可以减少初始加载时间。

  4. 图片懒加载:将图片的加载延迟到图片即将进入可视区域时再加载,可以减少初始加载时间。

  5. 使用CDN加速:将静态资源(如CSS、JS文件)部署到CDN上,可以加快资源加载速度。

  6. 代码拆分:将大型的代码块拆分成小的模块,按需加载,提高页面渲染速度。

  7. 使用缓存:合理利用浏览器缓存机制,将一些静态资源缓存到本地,减少重复加载。

  8. 优化网络请求:减少HTTP请求次数,合并请求,使用HTTP缓存等方式来优化网络请求。

  9. 使用Vue的生命周期钩子函数:合理使用Vue的生命周期钩子函数,可以在适当的时机进行一些操作,如数据的预加载等。

  10. 优化渲染性能:避免在模板中使用复杂的表达式和计算,减少虚拟DOM的生成和比对的次数,提高页面渲染性能。

七. 从浏览器输入URL到页面渲染的过程主要包括以下几个步骤:

  1. DNS解析:浏览器根据URL中的域名,向DNS服务器查询该域名对应的IP地址。

  2. 建立TCP连接:浏览器与服务器建立TCP连接,进行数据传输。

  3. 发送HTTP请求:浏览器向服务器发送HTTP请求,请求页面的HTML文件。

  4. 服务器处理请求:服务器接收到请求后,进行处理,生成HTML文件。

  5. 返回响应:服务器将生成的HTML文件作为HTTP响应返回给浏览器。

  6. 解析HTML:浏览器解析HTML文件,构建DOM树。

  7. 加载资源:浏览器根据HTML文件中的链接标签(如CSS、JS文件等),向服务器发送请求,加载对应的资源文件。

  8. 渲染页面:浏览器根据DOM树和CSS样式,进行页面渲染,将页面呈现给用户。

在这个过程中,可以通过优化网络请求、资源加载、渲染性能等方面来提高页面加载速度和性能。

以下是一些通过优化网络请求、资源加载和渲染性能来提高页面加载速度和性能的方法:

  1. 减少HTTP请求次数:合并和压缩CSS和JavaScript文件,使用CSS Sprites来减少图片请求次数,减少页面中的外部资源加载。

  2. 使用CDN加速:将静态资源(如图片、CSS、JavaScript文件)部署到CDN上,利用CDN的分布式网络来加速资源的传输。

  3. 使用缓存:合理设置缓存策略,将静态资源缓存到本地,减少重复加载。可以使用HTTP的缓存机制,或者通过使用localStorage或sessionStorage来缓存数据。

  4. 延迟加载:对于非关键内容,可以使用懒加载技术,延迟加载图片、视频等资源,当用户滚动到需要显示的区域时再加载。

  5. 使用异步加载:对于不影响页面渲染的资源,如统计代码、广告等,可以使用异步加载,不阻塞页面的加载和渲染。

  6. 压缩资源文件:压缩CSS和JavaScript文件,减小文件大小,提高加载速度。可以使用工具(如Webpack)进行压缩和打包。

  7. 使用图片压缩:对于图片资源,可以使用压缩工具(如TinyPNG)来减小文件大小,提高加载速度。

  8. 使用浏览器缓存:合理设置HTTP响应头中的缓存相关字段,利用浏览器缓存来减少请求和传输时间。

  9. 优化渲染性能:避免在模板中使用复杂的表达式和计算,减少虚拟DOM的生成和比对的次数,提高页面渲染性能。

  10. 使用Vue的异步组件和路由懒加载:按需加载组件和路由,减少初始加载时间。

  11. 延迟执行JavaScript:将不必要的JavaScript代码延迟执行,优先加载和渲染页面的关键内容。

  12. 使用gzip压缩:服务器端开启gzip压缩,减小传输文件大小。

通过以上优化措施,可以有效减少网络请求次数、减小文件大小、利用缓存等方式来提高页面加载速度和性能。

八.webpack打包流程图

下面是一个更完整的Webpack打包过程图解,包含了更多的细节步骤和插件:

                                          +---------------+|  入口文件    ||  (entry)     |+---------------+||V+-----------------+|  加载器处理     ||  (Loaders)      |+-----------------+||V+---------------------+|   依赖解析            ||   (Dependency        ||    Resolution)       |+---------------------+||V+--------------------+|   模块加载          ||   (Module           ||    Loading)         |+--------------------+||V+----------------+|   代码转换        ||   (Code          ||    Transformation)|+----------------+||V+-------------------+|   依赖图构建      ||   (Dependency     ||    Graph          ||    Construction)  |+-------------------+||V+--------------------+|   模块编译          ||   (Module         ||    Compilation)   |+--------------------+||V+---------------+|   打包输出      ||   (Bundle       ||    Output)      |+---------------+

这个完整的Webpack打包过程图与简化版的图相似,但更详细地展示了各个步骤之间的关系,并添加了"加载器处理"(Loaders)步骤。加载器用于在模块加载前对文件进行预处理,以支持更多类型的文件和语法。除了加载器处理,其他的步骤和插件都在流程图中得到了更明确的展示。

需要注意的是,Webpack的打包过程非常灵活,并且可以通过配置文件自定义和扩展。因此,具体的打包过程可能会因为项目的需求而有所差异。然而,流程图中展示的是Webpack的基本打包过程,可以作为理解Webpack的起点。

九.vuex 工作流程

Vuex 是 Vue.js 的官方状态管理库,它用于管理应用程序的状态。下面是 Vuex 的工作流原理:

  1. 在 Vuex 中,我们首先定义一个状态树(State Tree),它是一个包含所有应用程序级别状态的对象。状态树可以被认为是应用程序的单一数据源。

  2. 在状态树中,我们可以定义多个模块(Modules),每个模块负责管理特定的状态。模块可以嵌套,形成一个层级关系。

  3. 在模块中,我们定义了状态(State),它是我们要管理的数据。状态可以通过 Vuex 提供的辅助函数进行访问和修改。

  4. 当需要修改状态时,我们使用 Mutations(变更)来进行同步修改。Mutations 是一个纯函数,它接收一个状态对象和一个负载(Payload),并对状态进行同步修改。

  5. 为了实现异步操作,我们可以使用 Actions(动作)。Actions 接收一个上下文对象(Context),它包含了与 Mutations 类似的方法,但可以进行异步操作。在 Actions 中,我们可以执行异步任务,然后再通过提交 Mutations 来修改状态。

  6. 当状态发生变化时,我们可以使用 Getters(获取器)来派生出新的状态。Getters 是一个类似于计算属性的概念,它可以对状态进行一些计算和过滤,然后返回一个新的派生状态。

  7. 最后,我们可以通过订阅 Store 的变化来响应状态的变化。当状态发生变化时,我们可以执行一些副作用操作,比如更新视图或触发其他逻辑。

通过这个工作流,Vuex 提供了一种统一的方式来管理应用程序的状态。它使得状态的变化更加可追踪和可预测,同时也提供了一些方便的工具和辅助函数来简化状态的管理和操作。
以下是一个简单的图解,展示了 Vuex 的工作流原理:

             +----------------------------------+|                                  ||          Vue Components          ||                                  |+----------------------------------+|     ^|     |v     |+----------------------------------+|                                  ||          Actions & Getters       ||                                  |+----------------------------------+|     ^|     |v     |+----------------------------------+|                                  ||            Mutations             ||                                  |+----------------------------------+|     ^|     |v     |+----------------------------------+|                                  ||             State                ||                                  |+----------------------------------+

在这个图示中,我们可以看到 Vuex 的工作流程:

  1. Vue 组件是应用程序的界面部分,它们可以通过读取和修改状态来与用户进行交互。

  2. Actions 和 Getters 是用于处理异步操作和派生状态的函数。Actions 可以执行异步任务,并通过提交 Mutations 来修改状态。Getters 可以对状态进行计算和过滤,然后返回一个新的派生状态。

  3. Mutations 是用于同步修改状态的函数。它接收一个状态对象和一个负载(Payload),并对状态进行同步修改。

  4. State 是我们要管理的数据。它包含了应用程序的所有状态,并可以通过 Vuex 提供的辅助函数进行访问和修改。

通过这个工作流,Vuex 提供了一种统一的方式来管理应用程序的状态。它使得状态的变化更加可追踪和可预测,同时也提供了一些方便的工具和辅助函数来简化状态的管理和操作。

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

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

相关文章

https的原理和方案

文章目录 https原理为什么要加密常见的加密方式对称加密非对称加密数据摘要&&数据指纹数据签名 https的几种工作方案方案一&#xff1a;只使用对称加密方案二&#xff1a;只使用非对称加密方案三&#xff1a;两端都使用非对称加密方案四&#xff1a;非对称加密 对称加…

苹果账号被禁用怎么办?

苹果账号被禁用怎么办&#xff1f; 转载&#xff1a;苹果账号被禁用怎么办&#xff1f; 当我们使用苹果手机登录App Store时&#xff0c;有时会遇到账号被禁用的提示。总结下来&#xff0c; 账号被禁用的原因可能有以下几种&#xff1a; 禁用的原因 1.在不同的设备上登录Ap…

CSS前端开发指南:创造精美的用户界面

简介&#xff1a; 《CSS前端开发指南&#xff1a;创造精美的用户界面》是一本旨在帮助读者掌握CSS技术&#xff0c;实现令人惊叹的前端用户界面的实用指南。无论您是初学者还是有经验的开发者&#xff0c;本书都将为您提供全面的知识和实用技巧&#xff0c;帮助您创建引人注目…

c语言每日一练(5)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…

什么是设计模式?

目录 概述: 什么是模式&#xff01;&#xff01; 为什么学习模式&#xff01;&#xff01; 模式和框架的比较&#xff1a; 设计模式研究的历史 关于pattern的历史 Gang of Four(GoF) 关于”Design”Pattern” 重提&#xff1a;指导模式设计的三个概念 1.重用(reuse)…

函数式接口Consumer、BiConsumer、Supplier、Predicate、Function、BiFunction

函数式接口Consumer、BiConsumer、Supplier、Predicate、Function、BiFunction 1.Consumer Java Consumer接口来自Java 8中引入的 java.util.function包。 Consumer是一个功能接口&#xff0c;用来作为lambda表达式或方法引用的任务目标(传递一个参数执行指定的方法)。 Cons…

opencv基础48-绘制图像轮廓并切割示例-cv2.drawContours()

绘制图像轮廓&#xff1a;drawContours函数 在 OpenCV 中&#xff0c;可以使用函数 cv2.drawContours()绘制图像轮廓。该函数的语法格式是&#xff1a; imagecv2.drawContours( image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]…

c基础扫雷

和三子棋一样&#xff0c;主函数先设计游戏菜单界面&#xff0c;这里就不做展示了。 初始化棋盘 初级扫雷大小为9*9的棋盘&#xff0c;但排雷是周围一圈进行排雷(8格)&#xff0c;而边界可能会越界。数组扩大了一圈,行和列都加了2&#xff0c;所以我们用一个11*11的数组来初始化…

计算机科技历史纵横:8月6日的十大里程碑

计算机科技历史纵横&#xff1a;8月6日的十大里程碑 目录 引言1951年&#xff1a;EDSAC电脑完成第一个实际计算任务1964年&#xff1a;IBM发布System/360系列1973年&#xff1a;Xerox PARC开发出第一台个人电脑Xerox Alto1976年&#xff1a;Apple发布Apple I电脑1981年&#…

UDS诊断笔记

文章目录 常见缩写简介UDS寻址模式1. 物理寻址&#xff08;点对点、一对一&#xff09;2. 功能寻址&#xff08;广播、一对多&#xff09;3. 功能寻址使用场景举例 UDS报文格式UDS协议栈网络层网络层功能网络层协议1. 单帧 SF&#xff08;Single Frame&#xff09;2. 首帧 FC&a…

教你一招:非计算机科班如何丝滑转码?

近年来&#xff0c;很多人想要从其他行业跳槽转入计算机领域。非计算机科班如何丝滑转码&#xff1f; 目录 一、确定方向 二、确定学习计划&#xff08;自学&#xff09; 三、学习 看到组里好多非科班姐妹决定转码之后&#xff0c;因为相关背景知识不足难以确定学习计划&am…

【机密计算-大厂有话说】微软 Open Enclave SDK

前言 机密计算是基于硬件支持的可信执行环境的&#xff0c;比如 Intel SGX 硬件技术上面的 enclave 以及 Arm Trustzone 上的 OT-TEE&#xff0c;不过这些异构的 TEE 之间差异还是蛮大的&#xff0c;所以亟需一种能够屏蔽 TEE 差异软件中间件或者 SDK&#xff0c;这就是本文将要…

JavaScript 中替换所有匹配项的自定义函数非正则表达式

引言 在 JavaScript 中&#xff0c;字符串替换是常见的操作之一。虽然 JavaScript 提供了一些内置的字符串方法来实现替换&#xff0c;比如 replace() 方法&#xff0c;但它只会替换第一个匹配到的项。如果我们想要替换所有匹配到的项&#xff0c;就需要自己编写一个函数。本文…

生成测试报告,在Unittest框架中就是简单

测试套件&#xff08;Test Suite&#xff09;是测试用例、测试套件或两者的集合&#xff0c;用于组装一组要运行的测试&#xff08;多个测试用例集合在一起&#xff09;。 &#xff08;1&#xff09;创建一个测试套件&#xff1a; import unittest suite unittest.TestSuite…

面向开发人员的 Spring Boot 最佳实践

Spring Boot是一种广泛使用且非常流行的企业级高性能框架。以下是一些最佳实践和一些技巧&#xff0c;您可以使用它们来改进 Spring Boot 应用程序并使其更加高效。这篇文章会有点长&#xff0c;完整读完文章需要一些时间。 正确的包装风格 正确的打包将有助于轻松理解代码和…

STL模板——vector详解

一、vector对象的定义和初始化方式 vector 中的数据类型 T 可以代表任何数据类型&#xff0c;如 int、string、class、vector&#xff08;构建多维数组&#xff09; 等&#xff0c;就像一个可以放下任何东西的容器&#xff0c;因此 vector 也常被称作容器。字符串类型 string …

ElasticSearch索引生命周期管理--DELETE

概要 ElasticSearch中的索引生命周期管理&#xff0c;也就是ilm&#xff08;Manage the index lifecycle&#xff09;,是指定了索引在不同周期下的处理策略。ilm 的对象是索引而不是索引中的数据。ilm 包括四个阶段&#xff1a;hot 、warm、cold和delete。hot、warm和cold表示…

【VUE】项目本地开启https访问模式(vite4)

在实际开发中&#xff0c;有时候需要项目以https形式进行页面访问/调试&#xff0c;下面介绍下非vue-cli创建的vue项目如何开启https 环境 vue: ^3.2.47vite: ^4.1.4 根据官方文档&#xff1a;开发服务器选项 | Vite 官方中文文档 ps&#xff1a;首次操作&#xff0c;不要被类…

Pyspark

2、DataFrame 2.1 介绍 在Spark语义中&#xff0c;DataFrame是一个分布式的行集合&#xff0c;可以想象为一个关系型数据库的表&#xff0c;或者一个带有列名的Excel表格。它和RDD一样&#xff0c;有这样一些特点&#xff1a; Immuatable&#xff1a;一旦RDD、DataFrame被创…

ssm+vue基于java的少儿编程网上报名系统源码和论文PPT

ssmvue基于java的少儿编程网上报名系统源码和论文PPT006 开发工具&#xff1a;idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具&#xff1a;navcat,小海豚等 开发技术&#xff1a;java ssm tomcat8.5 摘 要 在国家重视教育影响下&#xff0c;教育部门的密确配合下&#…