前端(十一)——Vue vs. React:两大前端框架的深度对比与分析
😊博主:小猫娃来啦
😊文章核心:Vue vs. React:两大前端框架的深度对比与分析
文章目录
- 前言
- 概述
- 原理与设计思想
- 算法
- 生态系统与社区支持
- API与语法
- 性能与优化
- 开发体验与工程化
- 对比总结
- 结语
前言
在当今快速发展的前端领域中,Vue和React作为两个备受瞩目的前端框架,已经成为许多开发者的首选。这两个框架凭借其出色的设计和强大的功能,在构建现代化、高效性能的Web应用方面扮演着重要角色。
Vue和React都以其独特的特点吸引了众多开发人员,但它们之间存在哪些区别和共通之处呢?本文将深入剖析Vue和React的原理、生态系统、API与语法、性能与优化以及开发体验与工程化等方面的差异,旨在帮助读者更好地了解这两个框架,为选择合适的技术栈提供参考。
本文适合希望了解Vue和React之间差异的前端工程师、开发者以及对前端技术感兴趣的读者。无论你是初学者还是有一定经验的开发者,我们相信本文将为你提供有价值的信息和深入思考的机会。
概述
Vue和React都是流行的前端框架,用于构建用户界面的JavaScript库。它们都具有一些相似之处,例如采用组件化的开发模式和虚拟DOM技术,但也有一些明显的差异。
Vue是一款由尤雨溪(Evan You)开发的渐进式JavaScript框架。它的核心库只关注视图层,因此易学易用,并且可以与现有的项目进行逐步集成。Vue通过借鉴Angular和React的优点,提供了一种简洁灵活的方式来构建交互式的用户界面。Vue的特点包括:
简单易学:Vue的语法简洁、直观,学习曲线相对较低,使得初学者能够快速上手。
渐进式开发:Vue允许你将其引入已有项目中,逐渐应用于不同的部分,这使得项目迁移和维护更加容易。
组件化开发:Vue鼓励使用组件化开发模式,将UI拆分成可复用的组件,提高代码的可维护性和复用性。
响应式数据绑定:Vue使用双向的数据绑定机制,使得数据的变化能够自动更新到对应的视图上。
React是由Facebook开发并维护的一个用于构建用户界面的JavaScript库。React以组件化开发和虚拟DOM技术为核心,它通过一种声明式的方式,使得构建复杂的应用界面变得更加简单。React的特点包括:
组件化开发:React将UI拆分成独立的组件,每个组件具有自己的状态和生命周期,可以实现高度可复用的代码。
虚拟DOM:React使用虚拟DOM来提高页面渲染的性能。通过将页面的变化先映射到虚拟DOM上,然后进行对比更新,最后才将变化应用到实际的DOM上,减少了昂贵的DOM操作。
强大的生态系统:React拥有强大且活跃的社区支持,有大量的开源组件和工具可供选择,同时也有丰富的插件和解决方案。
单向数据流:React采用了单向数据流的设计模式,使得数据的流向更加清晰可控,减少了bug的产生。
无论选择Vue还是React,都可以根据项目的需求和团队的技术背景来做出决策。Vue注重简单易上手、灵活性强,适合小型、中型和快速迭代的项目。React注重组件化开发、庞大的生态系统和性能优化,适合构建大型应用和复杂的用户界面。
原理与设计思想
Vue和React都有自己独特的原理和设计思想,下面将详细介绍它们的主要原理和设计思想。
Vue的原理与设计思想:
响应式数据驱动:Vue采用了响应式数据驱动的设计思想。在Vue中,你可以将数据与视图进行绑定,当数据发生变化时,视图会自动更新。Vue使用了类似于观察者模式的机制,通过劫持数据的getter和setter,以及依赖追踪的方式,实现了数据的变化检测和视图的更新。
组件化开发:Vue鼓励使用组件化开发的方式来构建用户界面。组件是Vue中最核心的概念,每个组件都拥有自己的模板、逻辑和样式。通过将UI拆分成独立的、可复用的组件,开发者可以更好地组织代码,提高代码的可维护性和复用性。Vue提供了一种声明式的语法来定义组件,使得组件的编写和组合变得更加简单直观。
虚拟DOM:虚拟DOM是Vue的另一个重要原理。在Vue中,每个组件都有对应的虚拟DOM树,当数据发生变化时,Vue会通过对比新旧虚拟DOM树的差异,然后只更新变化的部分到实际的DOM上。这种优化可以减少昂贵的DOM操作,提高页面渲染性能。同时,虚拟DOM也帮助开发者将关注点从手动DOM操作转移到更高层次的逻辑上。
React的原理与设计思想:
虚拟DOM:React同样采用了虚拟DOM的设计思想。React使用JavaScript对象表示虚拟DOM树,通过使用轻量级的JavaScript对象进行操作,避免了频繁的DOM操作。在数据变化时,React会通过对比新旧虚拟DOM树的差异,然后只更新变化的部分到实际的DOM上。
单向数据流:React采用了单向数据流的设计模式。在React中,数据的流动是单向的,从父组件传递给子组件。当数据发生变化时,React会重新渲染受影响的组件,保持UI的一致性。这种单向数据流的设计模式使得数据的变化更加可控,减少了问题的产生。
组件化开发:和Vue类似,React也强调组件化开发。每个组件都是独立的、可复用的,并且具有自己的状态和生命周期。组件之间的通信通过props和回调函数进行。React提供了一种JSX语法,使得组件的声明和使用更加直观。
总结起来,Vue和React都采用了虚拟DOM和组件化开发的设计思想,通过提供响应式的数据绑定、高效的DOM更新和组件化的开发模式,使得构建用户界面变得更加简单、高效和易于维护。这些原理和设计思想的应用,使得Vue和React成为现代前端开发中不可或缺的工具。
算法
vue和React都是现代前端开发中常用的JavaScript框架,它们的主要任务是构建用户界面。在技术层面,Vue和React都使用了虚拟DOM(Virtual DOM)的概念,但它们的实现方式和一些核心概念有所不同。我们可以从以下几个角度来深度剖析Vue和React的算法:
-
虚拟DOM(Virtual DOM)算法:
-
React:React使用了一种叫做Diffing的算法来比较新旧两个虚拟DOM树的差异。React会逐层对比两棵DOM树,找出需要更新的节点,然后只更新那些节点。这种算法的时间复杂度为O(n),n为节点数量。
-
Vue:Vue也使用了虚拟DOM,但它采用了一种不同的策略来优化DOM的更新。Vue试图在两个列表之间进行尽可能少的DOM操作。为了实现这个目标,Vue使用了一种叫做“就地复用”的策略。这种策略允许Vue在新旧节点类型相同时,重用旧节点。此外,Vue还引入了静态节点标记,跳过静态节点的对比,这进一步提高了性能。
-
-
响应式系统:
-
React:React采用的是"Pull-based"的方式。当组件的状态改变时,React并不立即计算新的状态,而是将这个组件标记为"dirty"。然后在后续的渲染周期中,React会重新渲染所有标记为"dirty"的组件。这种方式需要开发者手动调用setState来触发状态的更新。
-
Vue:Vue则采用的是"Push-based"的方式。Vue使用了一种叫做依赖追踪的机制,当数据改变时,Vue会立即知道哪些组件依赖于这个数据,然后立即更新这些组件。这种方式使得Vue在处理复杂的状态更新时更加高效。
-
-
组件化:
-
React:React使用的是JavaScript的语法扩展JSX来定义组件,这使得组件的定义和使用更加直观。React的组件化思想鼓励将界面划分为一系列的独立、可复用的组件,这使得代码的组织和复用变得更加容易。
-
Vue:Vue的组件化思想类似,但它使用了一种叫做单文件组件(Single File Component)的方式来定义组件。这种方式将模板、脚本和样式放在一个文件中,使得组件的结构更加清晰。
-
生态系统与社区支持
- 插件和组件库:
- Vue:Vue拥有丰富的官方和第三方插件和组件库。Vue的官方插件和组件库,如Vue Router、Vuex等,提供了完善的解决方案,可以轻松地集成到Vue项目中。此外,Vue社区也有很多优秀的第三方插件和组件库,如Element
UI、Vuetify等,可以满足各种需求。这些插件和组件库的质量较高,易于使用且具有良好的文档支持。- React:React同样具备丰富的官方和第三方插件和组件库。官方提供的React Router和Redux等库是React生态系统的重要组成部分,可以帮助开发者轻松解决路由和状态管理问题。此外,React社区也涌现出许多优秀的第三方组件库,如Ant
Design、Material-UI等。这些库通常具有高质量的代码和文档,可以快速构建漂亮且功能丰富的应用。
- 社区活跃度:
Vue:Vue社区活跃度相当高,拥有大量的开发者和用户。它的生态系统不断发展,社区成员不断发布新的插件、组件和解决方案。在Vue社区中,你可以获得及时的技术支持,参加线下活动,与其他开发者分享经验,提升技能。此外,Vue的GitHub仓库也有很多贡献者,不断更新和改进Vue的功能。
React:React同样拥有一个活跃的社区,吸引了大批开发者的关注和参与。React社区以其热情、友好和开放的氛围而闻名。社区成员不仅提供了丰富的学习资源和教程,还积极回答问题、讨论新的想法和发布有用的工具。React的GitHub仓库也有大量的贡献者,不断推动React的发展。
- 学习资源和文档质量:
Vue:Vue的学习资源非常丰富,有很多优秀的教程、视频和书籍可供选择。Vue的官方文档非常详尽全面,并配有丰富的示例代码,可以帮助开发者快速上手。此外,Vue社区中也有很多博客和教程,可以提供实际项目开发经验和最佳实践。
React:React同样具备大量的学习资源,包括官方文档、教程、视频和书籍。React的官方文档详细清晰,提供了全面而易于理解的内容。此外,React社区中有很多知名的博客和教程网站,如React中文网、掘金等,可以帮助开发者深入学习和扩展React的应用。
–
API与语法
这一块,我们集中从组件定义、状态管理、路由和表单处理几个方面去展开论述:
组件定义:
-
在Vue中,组件的定义可以使用选项对象和单文件组件(SFC)两种方式。选项对象方式适用于简单的组件定义,可以通过Vue.extend()方法或Vue.component()方法创建全局组件或局部组件。而单文件组件则将模板、样式和逻辑封装在一个.vue文件中,提供更好的代码组织和可维护性。Vue单文件组件的特点是拥有自己的作用域和独立的样式,使得组件之间的关系更清晰,代码更易于复用。
-
React中的组件定义方式是使用JSX语法,将HTML和JavaScript代码组合在一起。通过创建类或函数组件,我们可以使用React.createElement()方法或函数组件方式定义组件。React的组件开发方式更加灵活,可以直接在JavaScript代码中编写组件,并且可以使用纯函数组件或有状态的类组件来创建功能强大的UI组件。
状态管理:
-
Vue和React在状态管理方面有一些不同。Vue内置了Vuex作为官方的状态管理库,提供了集中式的状态管理解决方案。Vuex使用单一状态树来管理整个应用程序的状态,通过mutations和actions来修改和操作状态。它还支持状态的双向绑定,使得组件能够直接从状态树中获取数据,并在数据修改时自动更新视图。
-
React并没有官方的状态管理库,但提供了一种受控组件的机制来管理状态。受控组件是指由React组件的state来控制表单元素的值。通过将表单元素的值保存在组件的state中,并通过事件处理函数更新state,实现对表单的控制和处理。此外,React还鼓励使用第三方库如Redux或Mobx来实现更复杂的状态管理需求。
路由:
-
Vue和React在路由方面也有一些差异。Vue使用Vue Router作为官方的路由管理库,提供了路由的声明式配置和导航守卫等功能。Vue Router可以很容易地实现基于组件的页面切换和参数传递。它还支持命名路由和命名视图,使得路由配置更加灵活和可读性更高。
-
React推荐使用第三方库React Router来实现路由功能。React Router提供了灵活的路由配置和嵌套路由的支持。它可以根据URL的变化加载对应的组件,并支持动态路由和路由参数的传递。React Router还提供了高阶组件(HOC)和钩子函数,可以进行路由守卫和其他复杂的路由控制操作。
表单处理:
-
Vue和React在表单处理方面也有一些不同。在Vue中,可以使用v-model指令来实现表单元素的双向绑定,将表单元素的值与组件的data属性进行关联。Vue还提供了一些修饰符和验证规则,使得表单处理更加方便和灵活。
-
React采用了受控组件的方式来处理表单。通过将表单元素的值保存在组件的state中,并通过事件处理函数更新state,实现对表单的控制。每当表单元素的值发生变化时,都会触发事件处理函数来更新state,从而实现对表单元素的控制和处理。
总结:
- 在组件定义、状态管理、路由和表单处理等方面,Vue和React都有各自的特点和优势。Vue提供了更多的内置功能和选项来处理这些方面的需求,而React则更加灵活,可以通过第三方库自由选择适合自己项目的解决方案。根据具体项目需求和个人喜好,选择合适的框架和技术是非常重要的。深入学习和理解这些框架的机制和思想,能够更好地应用和扩展它们的功能。
性能与优化
- 初始加载性能:
使用Vue时,可以通过异步组件(Async Components)来实现按需加载页面组件。这样,在首次加载页面时,只会加载必要的文件,而非全部组件。例如,考虑一个包含两个子组件的父组件:
Vue.component('ParentComponent', () => import('./ParentComponent.vue'));
当访问页面时,只有当这个组件被渲染时才会加载它。
对于React,可以通过使用懒加载(Lazy Loading)来延迟组件的加载。React提供了React.lazy()
函数来实现按需加载。以下是一个使用React懒加载的举证:
const LazyComponent = React.lazy(() => import('./LazyComponent'));function App() {// ...return (<div>{/* ... 其他组件 */}<React.Suspense fallback={<div>Loading...</div>}><LazyComponent /></React.Suspense></div>);
}
当<LazyComponent>
被渲染时,才会加载该组件。
在以上例子中,Vue和React在初始加载性能方面表现相似,都使用了按需加载的策略。
- 更新性能:
假设我们有一个列表页,其中包含很多复杂的子项。
使用Vue时,常见的做法是使用v-for
指令来循环渲染列表:
<ul><li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>
当数据更新时,Vue会通过双向绑定进行高效的DOM更新,只更新发生变化的部分。
而在React中,可以使用map
函数来实现类似的效果:
function ListItem({ item }) {return <li>{item.name}</li>;
}function List({ items }) {return (<ul>{items.map(item => (<ListItem key={item.id} item={item} />))}</ul>);
}
React通过虚拟DOM (vDOM)和diff算法来减少实际需要更新的DOM节点数量。
以上例子中,Vue和React都通过合适的方式来进行 DOM 更新,以提高性能。
- 内存占用:
使用Vue和React时,对于组件的复用性和内存占用之间需要权衡。
假设我们有一个页面,包含多个可展开的面板组件,每个面板下面有大量的内容。在这种情况下,使用Vue的keep-alive
组件可以缓存已经加载过的面板,以及它们的状态,从而提高性能。例如:
<template><div><keep-alive><component v-for="panel in panels" :key="panel.id" :is="panel.type"></component></keep-alive></div>
</template>
当面板组件被切换时,旧的面板仍然保持在内存中,而不是销毁和重建。
对于React,可以使用一些技巧来减少内存占用。例如,在某个面板被关闭后,手动销毁它或者将其状态重置为默认值,从而释放相关资源。
在以上例子中,Vue提供了keep-alive组件作为内置的缓存视图的方式,而React需要额外的手动处理来控制内存占用。
开发体验与工程化
-
开发工具
- Vue: Vue有一个官方的Vue CLI,是一个功能齐全的系统,用于快速开发Vue.js项目。它包括linting、unit testing、e2e测试等等,它还支持构建为library和web component。还有一个UI工具让你在浏览器中打开和管理你的项目。
- React: React使用Create React App来创建新的React项目,这个工具包含了你开始构建现代单页面React应用所需的一切。它就像Vue CLI一样,但没有图形化界面。
-
调试工具
- Vue: Vue Devtools是Vue的官方浏览器调试插件,非常强大,可以让你在Chrome和Firefox中对Vue应用进行调试。
- React: React也有其对应的React DevTools,为用户提供了一种方法,可以在页面运行时查看React组件树,并检查他们的props和state。
-
热重载
- Vue: Vue CLI内置了热重载功能,当你更改组件代码时,它将自动更新,而不会刷新整个页面。
- React: 通过模块替换(HMR)插件,React也支持热重载,但这通常需要额外的配置才能使其工作。
-
构建工具
- Vue: Vue CLI使用的是webpack作为默认的打包工具,同时提供了一套灵活的、可插拔的插件系统。
- React: create-react-app也默认使用webpack,但如果你需要自定义配置,你可能需要eject,这将使所有配置文件暴露出来,这也意味着你不能再使用create-react-app提供的便利的更新特性。
-
自动化测试
- Vue: Vue CLI集成了Jest和Mocha等单元测试框架,同时也支持Cypress和Nightwatch等端到端的测试框架。
- React: Create React App也集成了Jest,并可以轻松接入各种断言库和测试工具。
对比总结
⭐⭐相似点:
- 都支持构建用户界面的组件化方案。最底层的组件为用户界面的基本元素,可以不断复用和组合,形成更强大的功能。
- 都通过虚拟DOM来避免直接操作DOM带来的性能问题。当组件状态发生变化时,它们都会先用新的状态渲染虚拟DOM,然后通过算法找出需要改变的DOM节点,最后再把这部分节点绘制到真正的DOM上。
- 都有响应式和组件化的视图,允许开发者以声明方式定义界面,并与应用的状态同步。
- 都有成熟稳定的社区支持和丰富的插件。
⭐⭐不同点:
- 学习曲线:Vue的API设计和文档更为简洁和友好,适合初学者或想要快速上手的团队。而React的灵活性更高,有更多的编程概念和模式可供开发者去探索和应用,因此其学习曲线相对较陡峭一些。
- 设计思想:React更倾向于函数式编程,使用JSX进行模板编写,通过render函数返回描述组件输出的JSX代码。Vue则提供了更加声明式的编程方式,允许直接在template中写HTML,并通过特殊的语法使用JavaScript。
- 状态管理:React常常与Redux或MobX等全局状态管理库一起使用,而Vue有自己的状态管理库Vuex。
- 社区大小:目前来看,React的社区相较于Vue来说更加成熟和活跃,有更多的开源项目和教程。
如何选择:
选择Vue或React,需要根据项目需求和团队技术实力来定:
- 如果是小型项目或快速原型开发,或者团队对前端开发经验不是很丰富,Vue可能会是更好的选择,因为它更易学习,更易上手,且有很好的文档和社区支持。
- 如果是大型项目,需要高度的自定义和灵活性,React可能更有优势。也可以考虑项目的发展前景,比如如果要做移动端开发,React Native让你用相近的语法做原生应用,这会是React的一大优势。
- 在使用Vue和React中,要考虑目标浏览器的兼容性。即使这两个库都对IE11有所支持,Vue 2支持IE9,但是Vue 3不再支持IE。而React对IE的兼容性更好。
最后,尽管Vue和React有许多不同,但它们的目标是一样的:帮助开发者更高效地开发用户界面。选择哪一个,往往取决于开发团队的熟悉程度和喜好。
结语
在我们深入探讨Vue和React的区别之后,我们可以得出一个结论,那就是没有绝对的优劣之分,只有适合和不适合。Vue和React都是非常优秀的前端框架,它们各自具有独特的特点和优势。React以其强大的生态系统和灵活的编程范式赢得了许多开发者的青睐,而Vue则以其简洁的语法和易于上手的特性吸引了大批初学者和小型项目开发者。
然而,选择哪一个框架并不是一个硬性的规定,而是取决于项目的需求、团队的技术栈以及开发者的个人喜好。对于大型、复杂的项目,React的生态系统和成熟的社区可能会是一个更好的选择。而对于需要快速开发和原型设计的小型项目,Vue的简洁和易用性可能会更胜一筹。
最终,我们的目标不应该是寻找一个“最好”的框架,而是找到一个最适合我们的工具。因为在这个日新月异的技术世界里,唯一不变的就是变化本身。我们需要不断学习和适应,以便在未来的挑战中保持竞争力。
所以,无论你选择Vue还是React,重要的是理解其背后的设计理念和编程范式,这样你就可以根据项目的实际需求和自己的技术能力,做出最合适的选择。
相关文章:

前端(十一)——Vue vs. React:两大前端框架的深度对比与分析
😊博主:小猫娃来啦 😊文章核心:Vue vs. React:两大前端框架的深度对比与分析 文章目录 前言概述原理与设计思想算法生态系统与社区支持API与语法性能与优化开发体验与工程化对比总结结语 前言 在当今快速发展的前端领…...

三分钟白话RocketMQ系列—— 核心概念
目录 关键字摘要 Q1:RocketMQ是什么? Q2: 作为消息中间件,RocketMQ和kafka有什么区别? Q3: RocketMQ的基本架构是怎样的? Q4:RocketMQ有哪些核心概念? 总结 RocketMQ是一个开源的分布式消…...
递归竖栏菜单简单思路
自己的项目要写一个竖栏菜单,所以记录一下思路吧,先粗糙的实现一把,有机会再把细节修饰一下 功能上就是无论这个菜单有多少层级,都能显示出来,另外,需要带图标,基于element-plus写成࿰…...

组件化、跨平台…未来前端框架将如何演进?
前端框架在过去几年间取得了显著的进步和演进。前端框架也将继续不断地演化,以满足日益复杂的业务需求和用户体验要求。从全球web发展角度看,框架竞争已经从第一阶段的前端框架之争(比如Vue、React、Angular等),过渡到…...

vue 修改端口号
在根目录创建一个vue.config.js文件夹 module.exports {lintOnSave: false,devServer: {port: 3000,open: true} }运行后...
hive的metastore问题汇总
1. metastore内存飙升 1 问题 metastore内存飙升降不下来; spark集群提交的任务无法运行, 只申请到了dirver的资源; 2 原因 当Spark任务无法获取足够资源时,因为任务无法继续进行,不能将元数据从Metastore返回给任务 后,这些元数据暂存在…...

【phaser微信抖音小游戏开发003】游戏状态state场景规划
经过目录优化后的执行结果: 经历过上001,002的规划,我们虽然实现了helloworld .但略显有些繁杂,我们将做以下的修改。修改后的目录和文件结构如图。 game.js//小游戏的重要文件,从这个开始。 main.js 游戏的初始化&a…...

字符串性能优化
String 对象作为 Java 语言中重要的数据类型,是内存中占据空间最大的一个对象。高效地 使用字符串,可以提升系统的整体性能。 来一到题来引出这个话题 通过三种不同的方式创建了三个对象,再依次两两匹配,每组被匹配的两个对象是否…...

从零开始理解Linux中断架构(23)中断运行临界区和占先调度
Linux在内核中定义了6种运行临界区。 in_interrupt in_interrupt在驱动中使用频率最高的函数了,in_interrupt()就是指示Core是否正在中断处理中,包含了硬中断,软中断运行临界区。如果在中断处理中,则不能调用__do_softirq执行软中断处理。硬中断中不可调度不可中断,所有…...
(3)Gymnasium--CartPole的测试基于DQN
1、使用Pytorch基于DQN的实现 1.1 主要参考 (1)推荐pytorch官方的教程 Reinforcement Learning (DQN) Tutorial — PyTorch Tutorials 2.0.1cu117 documentation (2) Pytorch 深度强化学习 – CartPole问题|极客笔记 2.2 pytorch官方的教程原理 待续,这两天时…...

利用sklearn 实现线性回归、非线性回归
代码: import pandas as pd import numpy as np import matplotlib import random from matplotlib import pyplot as plt from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression# 创建虚拟数据 x np.array(r…...

Java课题笔记~ MyBatis入门
一、ORM框架 当今企业级应用的开发环境中,对象和关系数据是业务实体的两种表现形式。业务实体在内存中表现为对象,在数据库中变现为关系数据。当采用面向对象的方法编写程序时,一旦需要访问数据库,就需要回到关系数据的访问方式&…...

Activity的自启动模式
以下内容摘自郭霖《第一行代码》第三版 文章目录 Activity的自启动模式1.standard(默认)2.singleTop3.singleTask4.singleInstance Activity的自启动模式 启动模式一共有4种,分别是standard、singleTop、singleTask和singleInstance&#x…...
53数组的扩展
数组的扩展 扩展运算符Array.from()Array.of()实例方法:copyWithin()实例方法:find(),findIndex(),findLast(),findLastIndex()实例方法:fill()[实例方法:entries(),keys() 和 valu…...
Rust调试【三】
Local Debug: vscode CodeLLDB extension memory leak analysis: Rust and Valgrind FFI Memory wrapping: Foreign Function Interface FFI panic handling: Panic handling...

uniApp 对接安卓平板刷卡器, 读取串口数据
背景: 设备: 鸿合 电子班牌 刷卡对接 WS-B22CS, 安卓11; 需求: 将刷卡器的数据传递到自己的App中, 作为上下岗信息使用, 以完成业务; 对接方式: 1. 厂家技术首先推荐使用 接收自定义广播的方式来获取, 参考代码如下 对应到uniApp 中的实现如下 <template><view c…...
Go new 与 make
Go new 与 make 在Go语言中,"new"和"make"都是用于动态分配内存的关键字,但它们有不同的用途和区别。 "new": 在Go语言中,"new"是一个内建函数,用于值类型(基本类型和用户定…...

centos系统离线安装k8s v1.23.9最后一个版本并部署服务,docker支持的最后一个版本
注意:我这里的离线安装包是V1.23.9. K8S v1.23.9离线安装包下载: 链接:https://download.csdn.net/download/qq_14910065/88139255 这里包括离线安装所有的镜像,kubeadm,kubelet 和kubectl,calico.yaml&am…...

(学习笔记-内存管理)如何避免预读失效和缓存污染的问题?
传统的LRU算法存在这两个问题: 预读失效 导致的缓存命中率下降缓存污染 导致的缓存命中率下降 Redis的缓存淘汰算法是通过实现LFU算法来避免 [缓存污染] 而导致缓存命中率下降的问题(redis 没有预读机制) Mysql 和 Linux操作系统是通过改进…...
【arthas】入门与实战(一)
arthas 一、安装1. 安装与启动二、具体应用1.查看 dashboard1.1 各区域详解2.查看jvmweb访问查询垃圾回收器具体内容和大概的操作官网上都有,下面记录的是自己的一些操作、思考和查找的资料,帮助理解。 官网文档:https://arthas.aliyun.com/doc/ 一、安装 1. 安装与启动 …...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...