当前位置: 首页 > news >正文

菜鸟之路Day25一一前端工程化(二)

菜鸟之路Day25一一前端工程化(二)

作者:blue

时间:2025.3.19

文章目录

  • 菜鸟之路Day25一一前端工程化(二)
    • 1.概述
    • 2.Element快速入门
    • 3.综合案例
      • 一.布局
      • 二.组件
      • 三.Axios异步加载数据
      • 1. 生命周期钩子概述
      • 2. `mounted` 钩子函数的作用
      • 四.Vue路由
      • 五.打包部署

1.概述

文章内容大部分学习自黑马程序员BV1m84y1w7Tb

本文延续上一篇菜鸟之路Day24一一前端工程化(一)-CSDN博客,旨在梳理,从0到1,在仅有一个vscode的情况下,一步步完成一个使用Vue框架搭建的前端页面,并最终将其部署在Nginx服务器上。

截至目前阶段,我们已经完成了Vue项目的创建,现在我们需要做的就是编写组件或者说是页面,然后最终将组件挂载到index.html中进行展示。我们一步步来完成这个过程。

2.Element快速入门

为了快速完成前端页面的编写,提高前端页面的编写效率,我们可以利用Element组件库来帮助我们完成这个工作

什么是Element?

Element:是饿了么团队研发的,一套作为开发者,设计师和产品经理准备的基于Vue2.0的桌面端组件库。

组件:组成网页部件,例如超链接,按钮,图片,表格,表单,分页条等等

官网:https://element.eleme.cn/#/zh-CNListener

环境配置

①安装ElementUI组件库(在当前工程的目录下),在命令行执行指令

npm install element-ui@2.15.3

②引入ElementUI组件库

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

完成以上两步后我们可以在src中的views文件夹中新建一个名为element的文件夹然后在这个文件夹下再创建一个ElementView.vue的组件文件,我们将在这个文件中对ElementUI库做一个简单的使用演示

在这里插入图片描述

我们可以访问Element的官网,然后在侧边栏中选择我们所需要的组件,查看其源码,然后进行一个复制粘贴

在这里插入图片描述

就如同以下代码,我复制了一串按钮组件的代码,直接粘贴到了template部分,有时我们复制的组件比较繁琐,还需要注意观察这个组件需不需要什么数据模型,或者是样式,要把他们都复制到对应的版块中。

<template><div><el-row><el-button>默认按钮</el-button><el-button type="primary">主要按钮</el-button><el-button type="success">成功按钮</el-button><el-button type="info">信息按钮</el-button><el-button type="warning">警告按钮</el-button><el-button type="danger">危险按钮</el-button></el-row></div>
</template><script></script><style></style>

一份简易的组件代码写好了,然后现在的问题是,我们要如何看见这个组件所展示的页面呢?

我们回顾,我们是怎么看到App.vue这个根组件所渲染的页面的,在mian.js中引入了App.vue,mian.js又将根组件挂载到index.html上,所以我们可以将ElementView.vue引入到App.vue这个根组件中。让ElementView.vue在App.vue中渲染。

在这里插入图片描述

具体怎么做呢?我们一步一步来看,首先如果读者是按照我上一篇文章跟进的话,那么此时App.vue中应该是有一个注册页面的代码,我们可以在views下新建一个文件夹,然后在这个文件夹新建一个login.vue组件,然后将刚刚App.vue中的代码移植过去,这样一来我们就清空了App.vue。

然后我们依然正常的在App.vue中写出一个.vue应该有的三个部分,template,script,style。好,别忘了我们的目的,是将ElementView.vue引入到App.vue这个根组件中。这个过程主要分为3步

①组件导入

在代码的 <script> 部分,我们使用 import 语句从指定路径导入 ElementView 组件:

import ElementView from "./views/element/ElementView.vue" 

这一步的作用是将 ElementView.vue 文件中的组件定义引入到当前文件里,让当前文件可以使用该组件。

②局部组件注册

在 Vue 里,要使用一个组件,就需要先进行注册。在 components 选项里,键名 ElementView 是组件在当前组件中使用的名称,它的值就是之前导入的 ElementView 组件。Vue 会根据这个注册信息,在解析模板时识别并渲染对应的组件。

export default {components: {ElementView},// 其他选项
}

③模板中使用组件

<template> 部分,我们使用了 <element-view></element-view> 标签。在 Vue 中,组件名称在模板里使用时,既可以采用 PascalCase(大驼峰命名法,如 ElementView),也可以使用 kebab-case(短横线分隔命名法,如 element-view)。Vue 会自动把 element-view 映射到已注册的 ElementView 组件上,进而渲染出该组件的内容。

综上所述,因为我们导入了 ElementView 组件,并且在当前组件里进行了局部注册,所以能够在模板中使用 <element-view></element-view> 来渲染该组件。

于是App.vue中的代码被我们修改为了这样:

<template><div><!-- 3.在模板中使用组件 --><element-view></element-view></div>
</template><script>//1.组件导入import ElementView from "./views/element/ElementView.vue"export default {//2.局部组件注册components: {ElementView},}
</script><style></style>

此时我们再次启动这个项目,可以看到默认页面,已经变成了 ElementView.vue 中的内容

在这里插入图片描述

ElementUI库还有非常多的组件,使用方式与以上大同小异,再此就不一一展示。

3.综合案例

在这个综合案例中,我们将利用前面所学的知识完成一个综合小demo,并将其部署在Nginx服务器上。

在这里插入图片描述

步骤:

①创建页面,完成页面的整体布局规划

②布局中各个部分的组件实现

③列表数据的异步加载,并渲染展示

我们一步一步来做,首先,我在刚刚创建的User文件下创建了一个EmpView.vue,我们将在这个文件下将上面的内容编辑出来,我将其引入到App.vue中,这样我就能通过vue-cli提供的热部署功能,实时查看页面的编写情况。

一.布局

我们在Element官网发现以下这个布局非常适合我们

在这里插入图片描述

通过参考官网示例的代码,我们编写出大体布局的页面

EmpView.vue:

<template><div><el-container style="height: 700px; border: 1px solid #eee"><el-header style="font-size: 40px; background-color: rgb(238, 241, 246)">智能学习辅助系统</el-header><el-container><el-aside width="200px"><el-menu><el-submenu><template slot="title"><i class="el-icon-message"></i>信息管理系统</template><el-menu-item>部门管理</el-menu-item><el-menu-item>员工管理</el-menu-item></el-submenu></el-menu></el-aside><el-main><el-table :data="tableData"><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="image" label="图像" width="180"></el-table-column><el-table-column prop="gender" label="性别" width="140"></el-table-column><el-table-column prop="job" label="职位" width="140"></el-table-column><el-table-column prop="entrydate" label="入职日期" width="180"></el-table-column><el-table-column prop="updatetime" label="最后操作时间" width="230"></el-table-column><el-table-column label="操作"><el-button type="primary" size="mini">编辑</el-button><el-button type="danger" size="mini">删除</el-button></el-table-column></el-table></el-main></el-container></el-container></div>
</template><script>export default {data() {return {tableData:[]}}}
</script><style></style>

针对一些属性的解释

prop属性的作用是指定表格列要展示的数据字段。在表格渲染时,它会从每一行的数据对象里提取和prop属性值同名的字段,然后将该字段的值显示在对应的表格单元格中。

placeholder 属性用于在输入框为空时显示一段提示性文本,它可以帮助用户了解该输入框期望输入的内容,起到引导用户输入的作用。当用户在输入框中输入内容时,这个提示文本会自动消失;而当输入框中的内容被清空后,提示文本又会重新显示出来。

二.组件

为页面添加必要组件,完善页面功能

<template><div><el-container style="height: 700px; border: 1px solid #eee"><el-header style="font-size: 40px; background-color: rgb(238, 241, 246)">智能学习辅助系统</el-header><el-container><el-aside width="200px"><el-menu><el-submenu><template slot="title"><i class="el-icon-message"></i>信息管理系统</template><el-menu-item>部门管理</el-menu-item><el-menu-item>员工管理</el-menu-item></el-submenu></el-menu></el-aside><el-main><!-- 表单 --><el-form :inline="true" :model="searchFrom" class="demo-form-inline"><el-form-item label="姓名"><el-input v-model="searchFrom.name" placeholder="姓名"></el-input></el-form-item><el-form-item label="性别"><el-select v-model="searchFrom.gender" placeholder="性别"><el-option label="" value="1"></el-option><el-option label="" value="2"></el-option></el-select></el-form-item><el-form-item label="入职日期"><!-- 日期选择器 --><el-date-picker v-model="searchFrom.entrydate" type="daterange" range-separator=""start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">查询</el-button></el-form-item></el-form><!-- 表格 --><el-table :data="tableData" border><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="image" label="图像" width="180"></el-table-column><el-table-column prop="gender" label="性别" width="140"></el-table-column><el-table-column prop="job" label="职位" width="140"></el-table-column><el-table-column prop="entrydate" label="入职日期" width="180"></el-table-column><el-table-column prop="updatetime" label="最后操作时间" width="230"></el-table-column><el-table-column label="操作"><el-button type="primary" size="mini">编辑</el-button><el-button type="danger" size="mini">删除</el-button></el-table-column></el-table><br><!-- 分页条 --><el-pagination background layout="prev, pager, next" :total="1000"></el-pagination></el-main></el-container></el-container></div>
</template><script>export default {data() {return {tableData: [],searchFrom: {name: "",gender: "",entrydate: []}}},methods: {onSubmit() {alert("submit!");}}}
</script><style></style>

在这里插入图片描述

三.Axios异步加载数据

在Vue项目中使用Axios:

//在项目目录下安装axios:npm insatll axios//需要使用axios时,导入axios:import axios from 'axios'

请求代码:

<script>import axios from 'axios'export default {data() {return {tableData: [],searchFrom: {name: "",gender: "",entrydate: []}}},methods: {onSubmit() {alert("submit!");}},mounted() {axios.get('http://127.0.0.1:4523/m1/6068388-5758637-default/user/1').then(result => {console.log(result.data.data); // 打印返回的数据,检查格式// console.log('数据类型:', Array.isArray(result.data.data));this.tableData = [result.data.data]; //魔鬼细节!!!}).catch(error => {console.error('请求出错:', error);});}}
</script>

注意注意,这里有一个魔鬼细节,笔者在这里调试35min才调试出来(deepseek NB)

this.tableData = [result.data.data]; //魔鬼细节!!!

由于tableData所需要的数据是一个数组,但是result.data.data是一个对象,所以,我们应该把result.data.data强行转为一个数组。

不过这不太优雅,这是接口的问题,接口的响应数据应该是一个对象数组,所以我们可以直接去改接口

最终我们将接口的数据结构修改为如下图所示

在这里插入图片描述

这样我们就可以直接做一个赋值操作啦this.tableData = result.data.data;

<template><div><el-container style="height: 700px; border: 1px solid #eee"><el-header style="font-size: 40px; background-color: rgb(238, 241, 246)">智能学习辅助系统</el-header><el-container><el-aside width="200px"><el-menu><el-submenu><template slot="title"><i class="el-icon-message"></i>信息管理系统</template><el-menu-item>部门管理</el-menu-item><el-menu-item>员工管理</el-menu-item></el-submenu></el-menu></el-aside><el-main><!-- 表单 --><el-form :inline="true" :model="searchFrom" class="demo-form-inline"><el-form-item label="姓名"><el-input v-model="searchFrom.name" placeholder="姓名"></el-input></el-form-item><el-form-item label="性别"><el-select v-model="searchFrom.gender" placeholder="性别"><el-option label="" value="1"></el-option><el-option label="" value="2"></el-option></el-select></el-form-item><el-form-item label="入职日期"><!-- 日期选择器 --><el-date-picker v-model="searchFrom.entrydate" type="daterange" range-separator=""start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">查询</el-button></el-form-item></el-form><!-- 表格 --><el-table :data="tableData" border><el-table-column prop="id" label="ID" width="180"></el-table-column><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="image" label="图像" width="180"></el-table-column><el-table-column prop="gender" label="性别" width="140"></el-table-column><el-table-column prop="job" label="职位" width="140"></el-table-column><el-table-column prop="entrydate" label="入职日期" width="180"></el-table-column><el-table-column prop="updatetime" label="最后操作时间" width="230"></el-table-column><el-table-column label="操作"><el-button type="primary" size="mini">编辑</el-button><el-button type="danger" size="mini">删除</el-button></el-table-column></el-table><br><!-- 分页条 --><el-pagination background layout="prev, pager, next" :total="1000"></el-pagination></el-main></el-container></el-container></div>
</template><script>import axios from 'axios'export default {data() {return {tableData: [],searchFrom: {name: "",gender: "",entrydate: []}}},methods: {onSubmit() {alert("submit!");}},mounted() {axios.get('http://127.0.0.1:4523/m1/6068388-5758637-default/user/1').then(result => {console.log(result.data.data); // 打印返回的数据,检查格式// console.log('数据类型:', Array.isArray(result.data.data));this.tableData = result.data.data;}).catch(error => {console.error('请求出错:', error);});}}
</script><style></style>

在此需要解释一下mounted钩子函数

在 Vue.js 中,mounted 是一个生命周期钩子函数。下面为你详细介绍 mounted 钩子函数的相关内容:

1. 生命周期钩子概述

Vue 实例从创建到销毁的整个过程,被称为 Vue 的生命周期。在这个生命周期的不同阶段,Vue 会自动调用一些特定的函数,这些函数就被叫做生命周期钩子函数。开发者可以利用这些钩子函数,在特定的时间点执行自定义的逻辑。

2. mounted 钩子函数的作用

mounted 钩子函数会在 Vue 实例挂载到 DOM 之后立即被调用。也就是说,当 Vue 实例已经将其模板渲染成真实的 DOM 元素并插入到页面中时,mounted 函数就会执行。通常,我们会在这个钩子函数里进行一些需要访问 DOM 的操作,或者发起异步请求来获取数据。

可以看到数据成功被渲染

在这里插入图片描述

四.Vue路由

我们可以看到,我们在浏览器中打开项目,他的URL是这样的

http://localhost:7000/#/

前端路由:URL中的hash{#号}与组件之间的对应关系

Vue Router 是Vue的官方路由

组成:

​ VueRouter:路由器类,根据路由请求在路由视图中动态渲染选中的组件

​ ‘’ :请求链接组件,浏览器会解析成’’

​ ‘’:动态视图组件,用来渲染展示与路由路径对应的组件

我们可以通过配置路由来完成页面的切换

首先要注意安装Vue Router(不过我们在用ui界面创建Vue项目时已经选择了)

npm install vue-router@3.5.1

如何配置路由信息呢?

在src>router>index.js中可以配置路由信息,我们可以看到官方的Vue项目给我们演示了两种配置路由的方法,我们只需要依葫芦画瓢进根据我们的需要进行修改即可,因为我们之前写了注册界面,所以我在这里就做一个注册界面与员工管理界面切换的演示逻辑,并不符合正常业务逻辑,仅仅只是为了展示。

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'Vue.use(VueRouter)const routes = [{path: '/',name: 'home',component: HomeView},{path: '/about',name: 'about',// route level code-splitting// this generates a separate chunk (about.[hash].js) for this route// which is lazy-loaded when the route is visited.component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')}
]const router = new VueRouter({routes
})export default router
  • path:表示路由的路径,这里的 '/' 是根路径,当用户访问应用的根 URL 时,会匹配到这个路由。
  • name:为路由定义的一个名称,这里是 'home',可以在代码中通过名称来引用这个路由,例如在使用 router.pushrouter-link 时可以使用名称来导航,这样可以提高代码的可读性和可维护性。
  • component:指定当用户访问该路径时要渲染的组件,这里直接引用了 HomeView 组件,意味着在项目中已经导入了 HomeView 组件。

about这里使用了动态导入(也称为懒加载)的方式来加载组件。具体解释如下:

  • () => import('../views/AboutView.vue') 是一个箭头函数,返回一个 import() 函数调用。import() 是 ES6 动态导入模块的语法,它会返回一个 Promise,当 Promise 成功解析时,会加载并返回指定的模块。

我们将src>router>index.js修改成这样

const routes = [{path: '/Emp',name: 'Emp',component: () => import( '../views/User/EmpView.vue')},{path: '/login',name: 'login',component: () => import('../views/User/loginView.vue')}
]

然后我们’'来链接组件

EmpView.vue中

<el-submenu><template slot="title"><i class="el-icon-message"></i>信息管理系统</template><el-menu-item><router-link to="/login">登录</router-link></el-menu-item><el-menu-item><router-link to="/Emp">员工管理</router-link></el-menu-item>
</el-submenu>

这个改好之后我们通过’'来渲染组件,在根组件App.vue中,将原来挂载的组件信息注释掉用动态视图组件,来渲染展示与路由路径对应的组件

<template><div><!-- 3.在模板中使用组件 --><!-- <EmpView></EmpView> --><router-view></router-view></div>
</template>
<script>//1.组件导入// import EmpView from './views/User/EmpView.vue'export default {//2.局部组件注册components: {// EmpView},}
</script>
<style>
</style>

此外,为了避免打开根目录时出现空白页面,我们对根目录的路由做一个重定向

const routes = [{path: '/Emp',name: 'Emp',component: () => import( '../views/User/EmpView.vue')},{path: '/login',name: 'login',component: () => import('../views/User/loginView.vue')},//将根目录重定向到login页面{path: '/',redirect: '/login'}
]

好了路由配置到这里就结束了,我们重新启动项目,现在,我们可以自由切换页面了

五.打包部署

打包

打包只需要执行build任务就可以了,打包后的内容会被放在dist文件夹下,我们做部署的话,就只需要将dist内容部署到服务器上即可。

npm run build

在这里插入图片描述

部署

Nginx

介绍:Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强。

下载地址:nginx: download

解压后,文件中有这么几个文件。

在这里插入图片描述

部署:将打包好的dist目录下的文件按,复制到nginx安装目录的html目录下

启动:双击nginx.exe文件即可,Nginx服务器默认占用80端口号

在这里插入图片描述

直接在浏览器访问80端口,即可访问,我们刚刚所写的页面

访问:http://localhost:90

如果80端口被占用了,可以在conf文件夹下的nginx.conf文件中修改默认的端口号

在这里插入图片描述

打开后,修改server板块下的listen即可

在这里插入图片描述

相关文章:

菜鸟之路Day25一一前端工程化(二)

菜鸟之路Day25一一前端工程化&#xff08;二&#xff09; 作者&#xff1a;blue 时间&#xff1a;2025.3.19 文章目录 菜鸟之路Day25一一前端工程化&#xff08;二&#xff09;1.概述2.Element快速入门3.综合案例一.布局二.组件三.Axios异步加载数据1. 生命周期钩子概述2. mo…...

vue如何获取 sessionStorage的值,获取token

// 使用Axios发送请求并处理下载 import axios from axios;const handleDownload () > {const params {warehouseId: selectedWarehouseId.value};const apiUrl /api/materials/wmMatCheck/export-wmMatCheckDetail;axios.get(apiUrl, {params,responseType: blob, // 接…...

图解AUTOSAR_CP_DiagnosticLogAndTrace

AUTOSAR 诊断日志和跟踪(DLT)模块详解 AUTOSAR 经典平台中的诊断和调试关键组件 目录 1. 概述2. DLT模块架构 2.1 模块位置2.2 内部组件2.3 接口定义 3. DLT操作流程 3.1 初始化流程3.2 日志和跟踪消息处理3.3 控制命令处理 4. 数据结构与配置模型 4.1 配置类4.2 消息格式4.3 …...

微调实战 - 使用 Unsloth 微调 QwQ 32B 4bit (单卡4090)

本文参考视频教程&#xff1a;赋范课堂 – 只需20G显存&#xff0c;QwQ-32B高效微调实战&#xff01;4大微调工具精讲&#xff01;知识灌注问答风格微调&#xff0c;DeepSeek R1类推理模型微调Cot数据集创建实战打造定制大模型&#xff01; https://www.bilibili.com/video/BV1…...

金仓KESV8R6任务调度

基本概念 • 程序&#xff08;program&#xff09; 程序对象描述调度器要运行的内容。 • 调度计划&#xff08;schedule&#xff09; 调度计划对象指定作业何时运行以及运行多少次。调度计划可以被多个作业共享。 • 作业&#xff08;job&#xff09; 作业就是用户定义的…...

Maven常见问题汇总

Maven刷新,本地仓库无法更新 现象 This failure was cached in the local repository and resolution is not reattempted until the update interval of aliyunmaven has elapsed or updates are forced原因 因为上一次尝试下载&#xff0c;发现对应的仓库没有这个maven配置…...

颠覆者的困局:解构周鸿祎商业哲学中的“永恒战争”

引言&#xff1a;被误解的破坏者 在北京海淀区知春路银谷大厦的某间会议室里&#xff0c;周鸿祎用马克笔在白板上画出一个巨大的爆炸图案——这是2010年360与腾讯开战前夜的战术推演场景。这个充满硝烟味的瞬间&#xff0c;恰是《颠覆者》精神内核的完美隐喻&#xff1a;在中国…...

基于ChatGPT、GIS与Python机器学习的地质灾害风险评估、易发性分析、信息化建库及灾后重建高级实践

第一章、ChatGPT、DeepSeek大语言模型提示词与地质灾害基础及平台介绍【基础实践篇】 1、什么是大模型&#xff1f; 大模型&#xff08;Large Language Model, LLM&#xff09;是一种基于深度学习技术的大规模自然语言处理模型。 代表性大模型&#xff1a;GPT-4、BERT、T5、Ch…...

如何实现单点登录?

单点登录(Single Sign-On, SSO)是一种身份验证机制,允许用户在多个应用系统中只登录一次,就能够访问所有受保护的系统或服务,而无需重复登录。SSO通过集中式认证来简化用户的登录体验,提高安全性,并减少管理复杂性。 一、原理 SSO的核心原理是通过一个认证中心(Ident…...

01 Overview

版本pytorch 0.4&#xff0c;应用期的技术 学习的前提 线性代数和概率分布&#xff0c;高数 内容 穷举、贪心、分治算法、动态规划 花书是经典中的经典 机器学习历史 1 基于规则的 2 经典的机器学习方法 3 深度学习 深度学习竞赛识别率超过了人类 神经网络是数学和工…...

第二天 开始Unity Shader的学习之旅之熟悉顶点着色器和片元着色器

Shader初学者的学习笔记 第二天 开始Unity Shader的学习之旅之熟悉顶点着色器和片元着色器 文章目录 Shader初学者的学习笔记前言一、顶点/片元着色器的基本结构① Shader "Unity Shaders Book/Chapter 5/ Simple Shader"② SubShader③ CGPROGRAM和ENDCG④ 指明顶点…...

moveit2基础教程上手-使用xarm6演示

0、前置信息 开发环境&#xff1a;wsl。 ros版本&#xff1a;jazzy&#xff0c;ubuntu版本&#xff1a;24.04 xarm-ros2地址 1、启动Rviz&#xff0c;加载 Motion Planning Plugin&#xff0c;实现演示功能 Getting Started — MoveIt Documentation: Rolling documentation…...

头部姿态估计(Head Pose Estimation)领域,有许多开源工具和库可供选择,一些常用的工具及其特点

在头部姿态估计&#xff08;Head Pose Estimation&#xff09;领域&#xff0c;有许多开源工具和库可供选择。以下是一些常用的工具及其特点比较&#xff1a; 1. OpenCV 特点: OpenCV 是一个广泛使用的计算机视觉库&#xff0c;提供了丰富的图像处理和计算机视觉算法。虽然 O…...

Qt调用Miniconda的python方法

1、 Win 64环境下载及安装 Miniconda 首先下载Windows 版Miniconda&#xff0c;https://docs.conda.io/en/latest/miniconda.html或 https://repo.anaconda.com/miniconda/ 安装界面及选择如下图所示&#xff1a; 安装完python3.12版报错如下。 说明&#xff1a;python3.11版…...

【Linux 下的 bash 无法正常解析, Windows 的 CRLF 换行符问题导致的】

文章目录 报错原因&#xff1a;解决办法&#xff1a;方法一&#xff1a;用 dos2unix 修复方法二&#xff1a;手动转换换行符方法三&#xff1a;VSCode 或其他编辑器手动改 总结 这个错误很常见&#xff0c;原因是你的 wait_for_gpu.sh 脚本 文件格式不对&#xff0c;具体来说…...

DSP数字信号处理

数字信号处理&#xff08;Digital Signal Processing&#xff0c;简称DSP&#xff09;是一门研究如何通过数字技术对信号进行分析、修改和合成的学科。DSP在现代电子系统中无处不在&#xff0c;广泛应用于音频处理、视频处理、通信、雷达、医学成像等领域。 什么是数字信号处理…...

vue3 获取当前路由信息失败问题

刷新浏览器时获取当前路由信息失败&#xff1a;undefined import { ref, reactive, onMounted } from vue; import { useRoute } from vue-router; const route useRoute();onMounted(()>{// 打印当前路由信息console.log(当前route, route ); // 这里的打印有值console.…...

数据驱动进化:AI Agent如何重构手机交互范式?

如果说AIGC拉开了内容生成的序幕&#xff0c;那么AI Agent则标志着AI从“工具”向“助手”的跨越式进化。它不再是简单的问答机器&#xff0c;而是一个能够感知环境、规划任务并自主执行的智能体&#xff0c;更像是虚拟世界中的“全能员工”。 正如行业所热议的&#xff1a;“大…...

汽车芯片成本控制:挑战、策略与未来趋势

一、引言 随着汽车行业的快速发展&#xff0c;汽车芯片在车辆中的应用越来越广泛。从简单的发动机控制单元到复杂的自动驾驶系统&#xff0c;芯片已成为汽车智能化、电动化的核心部件。然而&#xff0c;汽车芯片的高成本一直是制约汽车行业发展的重要因素之一。本文将深入探讨…...

RIP实验

RIP实验 一、实验背景 RIP协议&#xff1a; RIP协议&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;是一种基于距离矢量的内部网关协议&#xff0c;即根据跳数来度量路由开销&#xff0c;进行路由选择。相比于其它路由协议&#xff08;如OSPF、…...

NAT 实验:多私网环境下 NAPT、Easy IP 配置及 FTP 服务公网映射

NAT基本概念 定义&#xff1a;网络地址转换&#xff08;Network Address Translation&#xff0c;NAT&#xff09;是一种将私有&#xff08;保留&#xff09;地址转化为合法公网 IP 地址的转换技术&#xff0c;它被广泛应用于各种类型 Internet 接入方式和各种类型的网络中。作…...

电力和冷却管理:如何让数据中心“高效降温”同时节能增效

电力和冷却管理:如何让数据中心“高效降温”同时节能增效 数据中心作为现代信息技术基础设施的核心,承担着处理、存储和传输海量数据的重任。然而,这些庞大的服务器和存储设备在高速运转时,不仅需要大量电力供应,还产生了大量热量。如何平衡电力消耗与有效冷却,成为了数…...

LangChain Chat Model学习笔记

Prompt templates: Few shot、Example selector 一、Few shot(少量示例) 创建少量示例的格式化程序 创建一个简单的提示模板&#xff0c;用于在生成时向模型提供示例输入和输出。向LLM提供少量这样的示例被称为少量示例&#xff0c;这是一种简单但强大的指导生成的方式&…...

嵌入式硬件篇---Keil51中的关键字

文章目录 前言1. 存储类型关键字1.1code作用地址范围用途示例 1.2data作用地址范围用途示例 1.3idata作用地址范围用途示例 1.4xdata作用地址范围用途示例 1.5pdata作用地址范围用途示例 1.6volatile作用用途示例 2. 其他常用关键字2.1bit作用示例 2.2sbit作用示例 2.3sfr / sf…...

《TCP/IP网络编程》学习笔记 | Chapter 20:Windows 中的线程同步

《TCP/IP网络编程》学习笔记 | Chapter 20&#xff1a;Windows 中的线程同步 《TCP/IP网络编程》学习笔记 | Chapter 20&#xff1a;Windows 中的线程同步用户模式和内核模式用户模式同步内核模式同步 基于 CRITICAL_SECTION 的同步内核模式的同步方法基于互斥量对象的同步基于…...

MyBatis 中 #{} 和 ${} 的区别详解

目录 1. #{} 和 ${} 的基本概念 1.1 #{} 1.2 ${} 2. #{} 和 ${} 的工作原理 2.1 #{} 的工作原理 2.2 ${} 的工作原理 3.共同点&#xff1a;动态 SQL 查询 4. 区别&#xff1a;处理方式和适用场景 4.1 处理方式 4.2 适用场景 &#xff08;1&#xff09;#{} 的适用场景…...

C++学习之网盘项目单例模式

目录 1.知识点概述 2.单例介绍 3.单例饿汉模式 4.饿汉模式四个版本 5.单例类的使用 6.关于token的作用和存储 7.样式表使用方法 8.qss文件中选择器介绍 9.qss文件样式讲解和测试 10.qss美化登录界面补充 11.QHTTPMULTIPART类的使用 12.文件上传协议 13.文件上传协议…...

Lineageos 22.1(Android 15)制定应用强制横屏

一、前言 有时候需要系统的某个应用强制衡平显示&#xff0c;不管他是如何配置的。我们只需要简单的拿到top的Task下面的ActivityRecord&#xff0c;并判断包名来强制实现。 二、调整wms com.android.server.wm.DisplayRotation /*** Given an orientation constant, return…...

基于deepseek的智能语音客服【第四讲】封装milvus数据库连接池封装

通过工厂模式创建链接 static {// 创建连接池工厂BasePooledObjectFactory<MilvusServiceClient> factory new BasePooledObjectFactory<MilvusServiceClient>() {Overridepublic MilvusServiceClient create() throws Exception {return new MilvusServiceClient…...

【GeeRPC】项目总结:使用 Golang 实现 RPC 框架

文章目录 项目总结&#xff1a;使用 Golang 实现 RPC 框架谈谈 RPC 框架什么是 RPC 框架实现一个 RPC 框架需要什么&#xff1f;项目总结文章结构安排 Part1&#xff1a;消息编码编解码器的实现通信过程 Part2&#xff1a;服务端Accept&#xff1a;阻塞地等待连接请求并开启 go…...

人工智能在医疗影像诊断中的应用与挑战

引言 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术在医疗领域的应用逐渐成为研究热点&#xff0c;尤其是在医疗影像诊断方面。AI技术的引入为医疗影像诊断带来了更高的效率和准确性&#xff0c;有望缓解医疗资源紧张的问题&#xff0c;同时为患者提供更优质的医疗…...

烧结银技术赋能新能源汽车超级快充与高效驱动

烧结银技术赋能新能源汽车超级快充与高效驱动 在新能源汽车领域&#xff0c;高压快充技术的突破与高功率密度驱动系统的创新正成为行业竞争的焦点。比亚迪于 2025 年发布的超级 e 平台&#xff0c;通过整合全域千伏高压架构、兆瓦级闪充技术及碳化硅&#xff08;SiC&#xff0…...

大模型幻觉产生的【九大原因】

知识问答推理幻觉产生的原因 1.知识库结构切割不合理 大段落切割向量化 切分太小可以实现更精准化的回复内&#xff0c;向量匹配相似度越高。检索内容碎片化严重、可能包含不符合内容的文本数据。切分太大内容资料更完整&#xff0c;但是会影响相似度&#xff0c;同时更消耗资…...

4小时速通shell外加100例

&#x1f525; Shell 基础——从入门到精通 &#x1f680; &#x1f331; 第一章&#xff1a;Shell&#xff0c;简单说&#xff01; &#x1f476; 什么是Shell&#xff1f;它到底能做什么&#xff1f;这章让你快速了解Shell的强大之处&#xff01; &#x1f476; 什么是Shell…...

AD(Altium Designer)更换PCB文件的器件封装

一、确定是否拥有想换的器件PCB封装 1.1 打开现有的原理图 1.2 确定是否拥有想换的器件PCB文件 1.2.1 如果有 按照1.3进行切换器件PCB封装 1.2.2 如果没有 按照如下链接进行添加 AD(Altium Designer)已有封装库的基础上添加器件封装-CSDN博客https://blog.csdn.net/XU15…...

Postgresql 删除数据库报错

1、删除数据库时&#xff0c;报错存在其他会话连接 ## 错误现象&#xff0c;存在其他的会话连接正在使用数据库 ERROR: database "cs" is being accessed by other users DETAIL: There is 1 other session using the database.2、解决方法 ## 终止被删除数据库下…...

人工智能时代——深度探索如何构建开放可控的专利生态体系

# 人工智能时代——深度探索如何构建开放可控的专利生态体系 引言&#xff1a;AI专利革命的战略抉择第一章 战略认知与基本原则1.1 人工智能专利革命的范式重构1.1.1 技术维度变革1.1.2 法律维度挑战1.1.3 文明安全的不可控风险 1.2 战略定位体系构建1.2.1 双循环治理框架的立体…...

✨【数据变形术:联合体在通信协议中的降维打击】✨

&#xff08;万字长文详解联合体的二进制魔法与工程实践&#xff09; &#x1f52e; 原理解析&#xff1a;内存空间的量子叠加态 文字叙述&#xff1a; 联合体&#xff08;union&#xff09;是C语言中最具魔法的数据结构&#xff0c;其所有成员共享同一块内存空间。这种特性使…...

docker compose部署minio报错

背景 部分服务使用docker-compose单节点编排&#xff0c;其中对象存储服务使用minio&#xff0c;在minio中配置了aksk后报错 Error: IAM sub-system is partially initialized, unable to write the IAM forma 解决 minio如果配置了aksk等iam类的配置则需要持久化存储到etcd…...

软件开发通用之状态机初认识-基本概念及简单应用

0 前言 在程序开发阶段&#xff08;其实也不限于程序&#xff0c;还包含硬件电路设计&#xff0c;协议设计等&#xff09;&#xff0c;无论使用何种语言&#xff0c;何种工具&#xff0c;何种系统&#xff0c;程序的运行必须符合开发者的预设逻辑&#xff0c;而单独通过大脑记…...

蓝桥杯 之 第27场月赛总结

文章目录 习题1.抓猪拿国一2.蓝桥字符3.蓝桥大使4.拳头对决 习题 比赛地址 1.抓猪拿国一 十分简单的签到题 print(sum(list(range(17))))2.蓝桥字符 常见的字符匹配的问题&#xff0c;是一个二维dp的问题&#xff0c;转化为对应的动态规划求解 力扣的相似题目 可以关注灵神…...

适配器模式 (Adapter Pattern)

适配器模式 (Adapter Pattern) 是一种结构型设计模式,它将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。 在现实生活中,适配器的例子随处可见,比如电源适配器,它将不同电压的电流转换为设备所需的电压,确保设备能正…...

操作系统WIN11无法出现WLAN图标(解决方案)

本人操作系统WIN11之后无网络图标 于是在设置里查看了一下&#xff0c;是网卡驱动没了 网上去下载一个驱动类软件自行处理即可。 本人使用手机USB网络连的电脑&#xff0c;然后发现网卡驱动凭空出现了&#xff0c;就很困惑&#xff0c;没有下载驱动就恢复了。...

HCL—我与虚拟机的爱恨情仇[特殊字符][特殊字符]‍[特殊字符]️

时隔了三周&#xff0c;我可能算是了解了虚拟机了吧。自从上一次的安装虚拟机&#xff0c;我与HCL、虚拟机就没有停止过纠缠。 为什么很多win11电脑使用不了HCL&#xff0c;或者无法启动HCL设备&#xff1f; 首先来解答&#xff0c;为什么很多win11电脑使用不了HCL&#xff0c…...

illustrate:一款蛋白/核酸结构快速渲染为“卡通风格”的小工具

本期向大家介绍一款蛋白/核酸结构快速渲染&#xff08;卡通风格&#xff09;的小工具——illustrate。放心&#xff01;本期完全不涉及代码&#xff0c;不折腾人&#xff0c;请放心食用。 结构渲染效果示例如下&#xff1a; PDB ID: 1ttt 该小工具适用绘制蛋白或复合物整体轮廓…...

Linux上位机开发实战(能用的开发板计算资源)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 大家所能想到的嵌入式上位机开发&#xff0c;如果是linux&#xff0c;同时涉及到嵌入式的话&#xff0c;一般都会认为是把pc linux的软件port到板子…...

kotlin 内联函数 inline

高阶函数实现的原理&#xff1a;函数类型其实是生成了一个对象 。 inline翻译成中文的意思就是内联&#xff0c;在kotlin里面inline被用来修饰函数&#xff0c;表明当前函数在编译时是以内嵌的形式进行编译的&#xff0c;从而减少了一层函数调用栈&#xff1a; inline fun fun…...

vue3配置代理实现axios请求本地接口返回PG库数据【前后端实操】

前端编写 安装 axios 如果当前未安装axios&#xff0c;可以执行如下指令安装 npm install axios配置代理 当前为基于Vite构建的项目&#xff0c;在 vite.config.ts 中配置代理&#xff0c;在defineConfig中新增server配置&#xff0c;主要关注两个点&#xff1a; 一、需要代…...

论文阅读:2023 arxiv Multiscale Positive-Unlabeled Detection of AI-Generated Texts

总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Multiscale Positive-Unlabeled Detection of AI-Generated Texts https://arxiv.org/abs/2305.18149 https://www.doubao.com/chat/2114270649152258 https://github.com/YuchuanTi…...

【数学建模】最大最小值模型详解

数学建模中的最大最小值模型详解 文章目录 数学建模中的最大最小值模型详解引言最大最小值模型的基本概念最大化问题最小化问题 常见的求解方法1. 微积分法2. 线性规划3. 非线性规划4. 动态规划 实际应用案例案例1&#xff1a;生产规划问题案例2&#xff1a;投资组合优化 最大最…...