前端笔记-Vue router
学习目标
Vue Router路由管理 | 1、路由配置 |
2、嵌套路由 | |
3、路由守卫与权限控制 |
一、路由配置(给网站做地图)
npm i vue-router
作用:告诉浏览器什么地址该显示什么页面
核心代码:
// 创建路由并暴露出去// 第一步:引入createRouter方法
import { createRouter, createWebHashHistory} from 'vue-router'//引入一个个路由组件
import Home from '@/components/Home.vue'
import About from '@/components/About.vue'
import News from '@/components/News.vue'// 第二步:创建路由实例
const router = createRouter({history:createWebHashHistory(),routes:[{path:'/home',component:Home},{path:'/about',component:About},{path:'/news',component:News }]
})// 暴露出去router
export default router
使用场景:
- 点击导航菜单切换页面
- 直接输入网址访问特定页面
二、嵌套路由(套娃页面)
作用:在页面内部再嵌套子页面(如后台s
示例:
const routes = [{path: '/user',component: UserLayout, // 父组件(带公共布局)children: [ // 子路由列表{path: '', // /usercomponent: UserHome},{path: 'profile', // /user/profilecomponent: UserProfile}]}
]
三、路由守卫与权限控制(保安检查)
作用:控制谁能进入页面(如登录验证)
1. 全局守卫(大门保安)
router.beforeEach((to, from, next) => {if (to.path === '/admin' && !isLogin()) {next('/login') // 跳转到登录页} else {next() // 放行}
})
2. 路由独享守卫(房间保安)
{path: '/dashboard',component: Dashboard,beforeEnter: (to, from, next) => {// 专门检查这个路由的权限}
}
3. 组件内守卫(内部监控)
export default {beforeRouteEnter(to, from, next) {// 进入组件前调用},beforeRouteLeave(to, from, next) {// 离开组件时调用if (hasUnsavedChanges) {return confirm('确定离开吗?未保存的数据会丢失!')}}
}
四、路由系统三大核心要素
-
导航区(控制中心)
- 使用
<router-link>
组件代替传统<a>
标签 - 示例:
<div class="nav"><router-link to="/">首页</router-link><router-link to="/about">关于</router-link> </div>
- 使用
-
展示区(动态画布)
- 用
<router-view>
作为内容渲染出口 - 示例:
<div class="content"><router-view></router-view> <!-- 这里显示路由对应的组件 --> </div>
- 用
-
路由器(指挥中心)
- 创建步骤:
// 1. 安装路由 npm install vue-router@4// 2. 创建路由实例(router/index.js) import { createRouter, createWebHistory } from 'vue-router'const router = createRouter({history: createWebHistory(),routes: [] // 路由规则稍后添加 })
- 创建步骤:
五、路由规则配置(交通法规)
-
基本路由规则
const routes = [{path: '/', // 访问路径name: 'home', // 路由名称(可选)component: Home // 对应的组件},{path: '/about',component: () => import('@/views/About.vue') // 懒加载} ]
-
动态路由示例
{path: '/user/:id', // 动态参数component: UserDetail }
Vue Router 工作模式
两种模式对比
特性 | History 模式 | Hash 模式 |
---|---|---|
URL美观度 | 无#,美观 (e.g. /user/profile) | 带# (e.g. /#/user/profile) |
服务器要求 | 需要特殊配置 | 无需特殊配置 |
SEO优化 | 友好 | 较差 |
兼容性 | 现代浏览器 | 所有浏览器 |
刷新行为 | 需服务器支持,否则404 | 正常加载 |
1. History 模式
原理:基于HTML5 History API (pushState
, replaceState
)
const router = createRouter({history: createWebHistory(), // 使用history模式routes: [...]
})
特点:
- ✅ URL更简洁:
https://example.com/user/profile
- ✅ 对SEO更友好
- ❌ 需要服务器配置:
# Nginx示例配置 location / {try_files $uri $uri/ /index.html; }
2. Hash 模式
原理:基于URL hash (#
)
const router = createRouter({history: createWebHashHistory(), // 使用hash模式routes: [...]
})
特点:
- ✅ 开箱即用,无需服务器配置
- ✅ 兼容IE9等老旧浏览器
- ❌ URL包含#:
https://example.com/#/user/profile
- ❌ 服务端渲染(SSR)不支持
选择建议
- 开发环境:两种模式均可,优先测试history模式
- 生产环境:
- 有服务器控制权 → 选择history模式
- 静态网站托管(如GitHub Pages) → 选择hash模式
- SEO要求高:必须使用history模式+SSR
Vue Router 传参
1. Query参数(适合筛选/非必要参数)
News.vue
<template><div class="news"><!-- 导航区 --><ul><li v-for="(news,index) in newsList" :key="index"><RouterLink:to="{path:'news/detail',query:{id:index,title:news.title,date:news.date,category:news.category,brief:news.brief,author:news.author,content:news.content}}">{{ news.title }}</RouterLink></li></ul><!-- 新闻详情区 --><div class="news-container"><RouterView></RouterView></div></div>
</template>
特点:
- URL格式:
/news/detail?id=0&from=news-list
- 通过
route.query.id
获取 - 适用场景:分页、筛选等可选参数
- 图片风格适配:保持绿色按钮+深蓝激活态
对应Detail.vue
<template><div class="news-detail-container"><h3>{{query.title}}</h3><div class="news-detail-meta"><span>发布日期:{{ query.date }}</span><span>作者:{{ query.author }}</span><span>分类:{{ query.category }}</span></div><div class="news-detail-content"><p>{{ query.content }}</p></div></div>
</template><script lang="ts" setup>
import { toRefs} from 'vue'
import { useRoute } from 'vue-router'let route = useRoute()
let {query} = toRefs(route)</script>
2. Params参数(适合必要参数)
上述同样的代码,我们换成params传参,需要注意的是,在router/index.ts文件路由路径中需要提前占位(即要传什么参数,先提前写好)
路由配置:router/index.ts
const routes: RouteRecordRaw[] = [{path: '/news',component: () => import('@/views/News.vue'),children: [{name: 'xiang', path: 'detail/:id/:title/:date/:author/:category/:content',component: () => import('@/views/Detail.vue')}]}
]
News.vue
<template><div class="news"><!-- 导航区 --><ul><li v-for="(news,index) in newsList" :key="index"><RouterLink:to="{name: 'xiang', // 使用图片中的路由名称params: { id: index,title: news.title,date: news.date,author: news.author,category: news.category,content: news.content.join('|') // 将数组转换为字符串}}">{{ news.title }}</RouterLink></li></ul><!-- 新闻详情区 --><div class="news-container"><RouterView></RouterView></div></div>
</template>
Detail.vue
<template><div class="news-detail-container"><h3>{{ title }}</h3><div class="news-detail-meta"><span>发布日期: {{ date }}</span><span>作者: {{ author }}</span><span>分类: {{ category }}</span></div><div class="news-detail-content"><p v-for="(para, index) in parsedContent" :key="index">{{ para }}</p></div></div>
</template><script lang="ts" setup>
import { computed } from 'vue'const props = defineProps({id: String,title: String,date: String,author: String,category: String,content: String
})// 将字符串转换回数组
const parsedContent = computed(() => {return props.content?.split('|') || []
})
</script>
特点:
- URL格式:
/news/detail/1
- 通过
route.params.id
获取 - 适用场景:新闻ID等必要参数
- 图片风格适配:卡片内链接触发绿色悬停效果
3. 路由的Props配置
路由配置:router/index.ts
const routes: RouteRecordRaw[] = [{path: '/news',component: () => import('@/views/News.vue'),children: [{name: 'xiang', path:'detail',component:Detail,props: (route) => route.query}]}
]
props还有其他几种写法
// props的对象写法,作用:把对象中的每一组key-value作为props传给Detail组件// props:{a:1,b:2,c:3}, // props的布尔值写法,作用:把收到了每一组params参数,作为props传给Detail组件// props:true// props的函数写法,作用:把返回的对象中每一组key-value作为props传给Detail组件props(route){return route.query}
News.vue
<template><div class="news"><!-- 导航区 --><ul><li v-for="(news,index) in newsList" :key="index"><RouterLink:to="{path:'/news/detail',query: { // 直接传所有数据id: index,...news }}">{{ news.title }}</RouterLink></li></ul><!-- 新闻详情区 --><div class="news-container"><RouterView></RouterView></div></div>
</template>
Detail.vue
<template><div class="news-detail-container"><h3>{{title}}</h3><div class="news-detail-meta"><span>发布日期:{{ date }}</span><span>作者:{{author }}</span></div><div class="news-detail-content"><p>{{ content }}</p></div></div>
</template><script lang="ts" setup>defineProps(['id', 'title', 'date', 'author', 'content'])</script>
优势:
- 解耦组件和路由
- 类型安全(TypeScript友好)
传参方式对比表格
方式 | URL示例 | 获取方法 | 适用场景 | 图片UI对应位置 |
---|---|---|---|---|
Query | /news?id=1&from=list | route.query.id | 筛选、排序等可选参数 | 左侧导航栏筛选按钮 |
Params | /news/1 | route.params.id | 详情页ID等必要参数 | 右侧新闻卡片跳转链接 |
Props | /news/1 | 组件props | 需要类型检查的场景 | 内容区详情组件 |
补充:编程式路由导航
基础编程式导航
1. 路由跳转(替换当前历史记录)
import { useRouter } from 'vue-router'const router = useRouter()// 跳转到指定路径
router.push('/news') // 带参数跳转(匹配您的图片配置)
router.push({path: '/news/detail',query: { id: 1,title: 'Vue 3.4 发布',content: JSON.stringify(['内容1', '内容2'])}
})// 命名路由跳转(推荐)
router.push({name: 'xiang',params: { id: 1 },query: { title: 'Vue 3.4 发布' }
})
2. 路由替换(无历史记录)
router.replace('/about') // 替换当前条目
3. 历史记录控制
router.go(1) // 前进
router.go(-1) // 后退
router.back() // 等价于 go(-1)
动态路由实践
1. 带参数的新闻跳转
// 在新闻列表中的点击事件
const gotoDetail = (news, index) => {router.push({path: '/news/detail',query: {id: index,...news,content: JSON.stringify(news.content) // 数组需序列化}})
}
2. 接收参数(两种方式)
// 方式1:通过 props 接收(推荐)
defineProps({id: [String, Number],title: String,content: String // 需自行反序列化
})// 方式2:通过路由实例
import { useRoute } from 'vue-router'
const route = useRoute()
console.log(route.query.id) // 获取query参数
三、高级应用技巧
1. 路由守卫控制
router.beforeEach((to, from) => {if (to.path === '/news/detail' && !to.query.id) {return '/news' // 拦截无效访问}
})
2. 动态路由追加(根据权限)
router.addRoute({path: '/admin',component: () => import('@/views/Admin.vue')
})
3. 路由元信息(扩展功能)
// 路由配置中
meta: { requiresAuth: true }// 组件中获取
const route = useRoute()
console.log(route.meta.requiresAuth)
项目实践
1. 路由参数处理优化
// 在 detail.vue 中安全解析参数
const parsedContent = computed(() => {try {return JSON.parse(props.content || '[]')} catch {return ['无效内容格式']}
})
2. 类型安全(TypeScript)
interface NewsParams {id: string | numbertitle: stringcontent: string
}const props = defineProps<NewsParams>()
3. 导航失败处理
router.push('/news').catch(err => {console.error('导航失败:', err)
})
常见问题解决方案
1. 路由重复跳转报错
// 在 router/index.js 中
const router = createRouter({history: createWebHashHistory(),routes,strict: true // 严格模式
})
2. 刷新后参数丢失
// 使用 localStorage 做持久化
router.push({path: '/news/detail',query: {id: localStorage.getItem('lastNewsId') }
})
3. 滚动行为控制
const router = createRouter({scrollBehavior(to) {if (to.hash) {return { el: to.hash }}return { top: 0 }}
})
补充:路由重定向
基础重定向配置
const routes = [{path: '/',redirect: '/news' // 首页重定向到新闻页},{path: '/news',component: News,children: [{path: 'detail',redirect: { name: 'xiang', // 命名路由重定向query: { id: 0 } // 默认显示第一条新闻}}]}
]
动态重定向(适合新闻详情页)
1. 根据条件重定向
{path: '/old-news/:id',redirect: to => ({path: '/news/detail',query: { id: to.params.id } // 保持参数不变})
}
2. 404重定向
{path: '/:pathMatch(.*)*',redirect: '/news' // 所有未知路径跳转新闻首页
}
路由守卫重定向(权限控制)
router.beforeEach((to, from) => {// 模仿图片中的新闻详情页鉴权if (to.path === '/news/detail' && !to.query.id) {return { path: '/news',query: { redirect: to.fullPath } // 保存目标路径}}
})
视觉友好型重定向
1. 带过渡效果的重定向
router.afterEach((to, from) => {// 图片中的浅绿色进度条效果document.querySelector('.progress-bar').style.width = '100%'setTimeout(() => {document.querySelector('.progress-bar').style.width = '0'}, 500)
})
2. 重定向状态提示(类似图片中的发布日期样式)
<template><div v-if="isRedirecting" class="redirect-notice"><p>正在跳转到新闻页...</p><div class="loading-bar" style="background-color: #b6edd6;"></div></div>
</template>
组件文件结构示例
src/
├── router/
│ └── index.js # 路由配置文件
├── views/ # 路由级组件
│ ├── Home.vue
│ ├── About.vue
│ └── News/
│ ├
│ └── Detail.vue
└── App.vue # 根组件(包含router-view)
完整工作流程实战
-
App.vue(主框架)
<template><div class="app"><h2 class="title">Vue路由测试</h2><!-- 导航区 --><div class="navigate"><RouterLink to="/home" active-class="active">首页</RouterLink><RouterLink to="/news" active-class="active">新闻</RouterLink><RouterLink to="/about" active-class="active">关于</RouterLink></div><!-- 展示区 --><div class="main-content"><RouterView></RouterView></div></div> </template><script lang="ts" setup name="App">import {RouterView,RouterLink} from 'vue-router' </script>
-
路由配置(router/index.js)
// 创建路由并暴露出去// 第一步:引入createRouter方法 import { createRouter, createWebHashHistory} from 'vue-router'//引入一个个路由组件 import Home from '@/views/Home.vue' import About from '@/views/About.vue' import News from '@/views/News.vue'// 第二步:创建路由实例 const router = createRouter({history:createWebHashHistory(),routes:[{path:'/home',component:Home},{path:'/about',component:About},{path:'/news',component:News }] })// 暴露出去router export default router
-
启动路由(main.js)
import { createApp } from 'vue' import App from './App.vue' import router from './router'const app = createApp(App) app.use(router) app.mount('#app')
完整效果展示:
源代码路径:
相关文章:
前端笔记-Vue router
学习目标 Vue Router路由管理1、路由配置2、嵌套路由3、路由守卫与权限控制 一、路由配置(给网站做地图) npm i vue-router 作用:告诉浏览器什么地址该显示什么页面 核心代码: // 创建路由并暴露出去// 第一步&#x…...
MySQL的日志--Redo Log【学习笔记】
MySQL的日志--Redo Log 知识来源: 《MySQL是怎样运行的》--- 小孩子4919 MySQL的事务四大特性之一就是持久性(Durability)。但是底层是如何实现的呢?这就需要我们的Redo Log(重做日志)闪亮登场了。它记录着…...
《系统分析师-第三阶段—总结(五)》
背景 采用三遍读书法进行阅读,此阶段是第三遍。 过程 第9章 总结 在这个过程中,对导图的规范越来越清楚,开始结构化,找关系,找联系。...
【LangChain4j】AI 第二弹:项目中接入 LangChain4j
普通接入方式 参考文档: Get Started https://docs.langchain4j.dev/get-started 1.添加依赖 <!-- 基于open-ai的langchain4j接口:ChatGPT、deepseek都是open-ai标准下的大模型 --> <dependency><groupId>dev.langchain4j</grou…...
测试基础笔记第十天
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、查询语句1.基本查询2.条件查询3.模糊查询4.范围查询5.判断空 二、其他复杂查询1.排序2.聚合函数3.分组4.分页查询 一、查询语句 1.基本查询 – 需求1: 准备商…...
代理模式:控制对象访问的中间层设计
代理模式:控制对象访问的中间层设计 一、模式核心:通过代理对象控制对目标对象的访问 在软件开发中,有时需要为对象添加一个 “代理” 来控制对它的访问,例如: 远程代理:访问远程对象时(如 R…...
Python类和对象二(十一)
构造函数: 重写: 通过类名访问类里面的方法的做法,称为调用未绑定的父类方法,他有时候会产生钻石继承问题: 发现A重复初始化了两次,类c同事继承类B1和B2,类B1和B2又是继承类A的,当c…...
大模型在代码安全检测中的应用
大模型在代码安全检测领域的应用近年来取得显著进展,尤其在代码审查(Code Review, CR)场景中展现出高效性与准确性。以下是其核心优势、技术路径、挑战及实践案例的总结: 一、技术优势与核心能力 语义理解与上下文分析 大模型通过…...
Python实现图片浏览器
Python实现图片浏览器 支持浏览多种常见图片格式:JPG, JPEG, PNG, GIF, BMP, TIFF, WEBP 通过"打开文件夹"按钮选择任何包含图片的文件夹 灵活的排序选项: 按时间排序(新→旧或旧→新) 按文件名排序(A→…...
网页设计规范:从布局到交互的全方位指南
网页设计规范看似繁杂,但其实都是为了给用户提供更好的体验。只有遵循这些规范,才能设计出既美观又实用的网页,让用户在浏览网页时感到舒适、愉悦。 一、用户体验至上 用户体验(UX)是网页设计的核心原则之一。设计师…...
哪些心电图表现无缘事业编体检呢?
根据《公务员录用体检通用标准》心血管系统条款及事业单位体检实施细则,心电图不合格主要涉及以下类型及处置方案: 一、心律失常类 早搏:包括房性早搏、室性早搏和交界性早搏。如果每分钟早搏次数较多(如超过5次)&…...
Java基础系列-HashMap源码解析1-BST树
文章目录 序二叉搜索树(BST)引入查找5插入9极端情况删除删除叶节点 10删除节点只有左子树或只有右子树删除节点既有左子树又有右子树为什么这么代替? 序 提到HashMap,就不得不提红黑树(HashMap1.8之后)&am…...
生物计算安全攻防战:从DNA存储破译到碳基芯片防御体系重构
随着碳基生物芯片突破冯诺依曼架构限制,DNA数据存储密度达到1EB/克量级,合成生物学与信息技术的融合正引发新一轮安全革命。本文深入解析碳基芯片逆向工程路径,揭示酶驱动DNA数据解码的技术突破,预警合成生物回路潜在的数据泄露风…...
【金仓数据库征文】从Oracle到KingbaseES的语法兼容与迁移
随着“信创”战略的深入推进,国产数据库逐渐成为IT系统的重要组成部分。KingbaseES(金仓数据库)凭借其良好的Oracle兼容性和日益完善的生态,成为金融、政务等核心行业国产化替代的重要选项。本文将从语法兼容性分析出发࿰…...
MATLAB 下载安装教程
## 一、下载MATLAB 1. 访问 MathWorks 官方网站:https://www.mathworks.com/ 2. 点击右上角的"登录"按钮 - 如果没有账号,需要先注册一个 MathWorks 账号 - 学生可以使用教育邮箱注册,获得教育版授权 3. 登录后,点击&…...
Android kotlin通知功能完整实现指南:从基础到高级功能
本文将详细介绍如何在Android应用中实现通知功能,包括基础通知、动作按钮和内联回复等高级特性。 一、基础通知实现 1. 基本通知发送方法 fun sendBasicNotification(context: Context, title: String, message: String) {// 1. 创建通知渠道(Android 8.0必需)va…...
Javase 基础入门 —— 04 继承
本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。 01 什么是继…...
2.4/Q2,Charls最新文章解读
文章题目:The impact of hearing ability on depression among retired middle-aged and elderly individuals in China: the chain mediating role of self-rated health and life satisfaction DOI:10.1186/s41043-025-00791-9 中文标题:中…...
对流对象的理解
在c里,“流”可以理解为数据传输与操作的“介质”。 从输入输出角度来看,有输入流(比如cin)和输出流(cout)。对于输入流,数据通过它从外部设备(例如键盘)“流入”程序内…...
RBAC权限-笔记
1. RBAC模型简介 1.1. RBAC三要素 RBAC权限模型(Role-Based Access Control:基于角色的访问控制)有3个基础组成部分,分别是:用户、角色和权限。它们之间的关系如下图所示: 用户(User)…...
stm32之GPIO函数详解和上机实验
目录 1.LED和蜂鸣器1.1 LED1.2 蜂鸣器 2.实验2.1 库函数:RCC和GPIO2.1.1 RCC函数1. RCC_AHBPeriphClockCmd2. RCC_APB2PeriphClockCmd3. RCC_APB1PeriphClockCmd 2.1.2 GPIO函数1. GPIO_DeInit2. GPIO_AFIODeInit3. GPIO_Init4. GPIO_StructInit5. GPIO_ReadInputDa…...
MsQuick编译和使用
MsQuick编译和使用 编译克隆代码使用cmakevs2022编译 使用示例 编译 克隆代码 git clone --recurse-submodules https://github.com/microsoft/msquic.git使用cmakevs2022编译 然后直接configure之后Generate然后打开vs工程编译即可生成动态库 使用示例 #include <s…...
01 ubuntu中wps桌面快捷键无法使用
文章目录 1. 问题描述:2. 解决方法:3. 结果展示4. 参考 1. 问题描述: 2. 解决方法: 添加权限 chmod 755 ./wps-office-prometheus.desktop 右键选择允许运行 3. 结果展示 修改前 修改后 4. 参考 参考1...
云原生后端架构:重塑后端开发的新范式
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:后端开发的新时代正在到来 传统的后端开发常常面临如下挑战:部署流程复杂、环境不一致、系统难以扩展、监控能力薄弱、上线流程缓慢。在企业数字化转型、业务快速迭代的大背景下,这些问题暴露得…...
Linux命令-tcpdump
tcpdump 是一个功能强大的网络数据包捕获和分析工具。以下是 tcpdump 命令的完整参数列表及说明: 参数 -a 将网络地址和广播地址转换为名字 tcpdump -a -i eth0-A 以 ASCII 格式打印所有分组,最小化链路层头部信息 tcpdump -A-b 在数据链路层上选择协议…...
分糖果——牛客
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 幼儿园准备了nnn包糖果,每包糖果里有111、222或333颗美味的糖果。现在需要将这些这些糖果平分给两个表现优异的小朋友以作奖励,为了公平公正,需要…...
L0、L2和L∞范数这三种范数的区别
目录 一、解释 1. L0范数:数一数你有多少件行李 2. L2范数:别把行李塞得太满 3. L∞范数:别带任何超重的东西 一句话总结 二、作用 1. L0范数的作用:做减法,只留最重要的…...
[实战]zynq7000设备树自动导出GPIO
目录 zynq7000设备树自动导出GPIO添加设备树节点验证实验 结论 zynq7000设备树自动导出GPIO 今天无聊,掏出我82年产的microzed玩一玩。玩啥好呢,要不点个灯吧。于是,三下五除二,通过linux sys接口以及echo,很快就点亮…...
java六人打分
import java.util.Scanner;public class HelloWorld {public static void main(String[] args) {//打分平均分System.out.println("请输入六个评分");Scanner sc new Scanner(System.in);double[] score new double[6];for(int i0;i<score.length;i){System.ou…...
量子计算浪潮下的安全应对之法
量子计算凭借其强大的计算能力,被传言能够在极短时间内秒级破解传统计算机需耗时漫长岁月(以万年算)才能解开的密码,成为了近年来人们讨论的热点。这看似高深的科技名词在网络安全中又扮演着何种角色?我们应从当前人们…...
Windows Server 2022 常见问题解答
一、安装与部署 1.1 系统要求 硬件配置:最低需要 1.4 GHz 64 位处理器、512 MB 内存、32 GB 硬盘空间。但在实际生产环境中,为确保系统流畅运行,建议使用 2.0 GHz 以上处理器、8 GB 以上内存和 100 GB 以上硬盘。软件兼容性:与大多数基于 Windows 的企业级应用兼容,但在安…...
项目组合管理PPM
项目组合管理(Project Portfolio Management, PPM)详述 一、定义与核心目标 定义 项目组合管理是通过系统化的方法,对组织的所有项目和项目集进行识别、选择、优先级排序、资源配置和动态监控,以确保其与战略目标一致,并最大化投资回报(ROI)的管理过程。 核心目标 战略…...
自建开源远程协助服务RustDesk —— 筑梦之路
开源项目 # 服务端https://github.com/rustdesk/rustdesk-server.git# 客户端https://github.com/rustdesk/rustdesk.git 搭建服务端 需要使用的端口、协议 hbbs - RustDesk ID 注册服务器 hbbr - RustDesk 中继服务器默认情况下,hbbs 监听 21115(tcp) , 21…...
【android bluetooth 协议分析 11】【AVDTP详解 2】【avdtp 初始化阶段主要回调关系梳理】
在车机中 a2dp 通常情况下作为 sink. 本篇来帮助各位 朋友梳理一下,这部分的初始化流程。 我们着重梳理 native 层的逻辑, framework - java 侧一般比较容易看明白, 暂时不做梳理。 如果需要笨叔梳理的可以在博客评论。 出专门的章节来梳理。…...
C++回顾 day3
宏定义的数据是在预处理发生了替换 const类型的数据是在编译阶段发生的替换 命名空间 namespace 空间名{int a;void func_print(){printf("func_print");}struct Stu{int x;char *y;};//或者其他命名空间 } Space::x 20; cout << Space::x;using Space::x;…...
机器学习算法-分类决策树
分类决策树算法-python实现 数据集 具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子节点;再对子结点递归地调用以上方法,构…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(9): 意向形
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(9): 意向形 1、前言(1)情况说明(2)工程师的信仰 2、知识点(1)「~てしまう」=「~ちゃう…...
kotlin与MVVM结合使用总结(一)
一、Kotlin 与 MVVM 结合的核心优势 代码简洁性 数据类(data class)简化 Model 层定义,自动生成equals/hashCode/toString扩展函数简化 View 层逻辑(如点击事件扩展)lateinit/by lazy优化 ViewModel 属性初始化 异步处…...
达妙电机CAN通信及实验
项目进一步往下做的时候,要上实物了,需要用到达妙电机,虽然有说明书和例程,但是STM32控制电机的具体时间还是花了些时间,我的板子和例程的有些区别,中间很多地方都需要进行修改完善,而且还补充了…...
语音合成之四基于LLM的语音合成
基于LLM的语音合成 1.技术架构1.1 LlaSA1.2 CosyVoice (和 CosyVoice2)1.3 SparkTTS 2 特性对比2.1 零样本语音克隆2.2 多语种支持2.3 可控语音生成2.4 计算效率和模型大小 总结 当前,在大型语言模型(Large Language Models,LLMs)…...
Docker Python 官方镜像使用说明(TAG说明)
Docker Python 官方镜像使用说明(TAG说明) 本文将以python的3.12版本,详细讲解官方 Python 镜像 的TAGS含义 官方文档:https://github.com/tuonioooo/docker 🧭 一张图先看懂(最常见 Tag) py…...
Node.js 开发用户登录功能(使用mysql实现)
在 Web 开发中,用户登录功能是一个基础且重要的部分。、 一、环境搭建 在开始开发之前,我们需要搭建好相应的开发环境。以下是所需的工具和库: Node.js:作为 JavaScript 的运行环境,为我们的项目提供支持。mysql2&am…...
程序员学英文之Shipment Claim 运输和索赔
Time is precious , don’t waste your time, you should spend your time on something valuable . 时间很宝贵,不要浪费时间,你应该把时间用在有 价值的事情上。 Dia-1: Shipment by Voyage Charter 租船装运 1. May I know when your bo…...
python实战项目64:selenium采集软科中国大学排名数据
python实战项目64:selenium采集软科中国大学排名数据 一、项目需求二、流程分析三、完整代码一、项目需求 本项目的需求是使用selenium采集软科中国大学排名的数据。网站首页如下: 抓取此网页数据一般有两种方式,一种是直接发requests请求,我们这里采用的是使用selenium控…...
Linux服务器:在ufw防火墙设置这套规则sudo ufw allow from 172.0.0.0/8,为什么容器就可以访问宿主机的服务了?
在 Docker 环境中,容器默认使用 桥接网络(bridge),宿主机和容器之间的通信会受到防火墙(如 ufw)的限制。当你执行 sudo ufw allow from 172.0.0.0/8 后,容器可以访问宿主机上的服务,原因如下: 1. Docker 默认使用 172.x.x.x 网段 Docker 默认会创建一个 docker0 网桥…...
Google搜索技巧
谷歌搜索 1. 使用双引号 (" ") 精确匹配短语 ● 例子:"人工智能的定义" ● 作用:确保搜索结果中包含完全匹配的短语,而不是单独的单词。 2. 使用减号 (-) 排除特定词语 ● 例子:苹果 -水果 ● 作用&…...
Reactor编程模型介绍
Reactor 模型是一种基于事件驱动的编程模型,广泛应用于高并发网络服务器的设计中。它通过事件循环和回调机制,将事件的处理逻辑从主线程中解耦出来,从而实现高效的异步 I/O 操作。Reactor 模型的核心思想是利用一个或多个事件分发器(Reactor)来监听各种事件(如 I/O 事件、…...
C++笔记-stack_queue(含deque,priority_queue,仿函数的讲解)
一.stack和queue的基本使用 stack和queue就是我们之前所学的栈和队列,这两个和之前学的vector,list不太一样: 这是vector和list的,注意第一行中写的containers,代表这两个都是容器,但是: stac…...
意见反馈留言二维码制作
意见反馈对于工作整改具有重要作用,在工作中一味埋头苦干不如抬头多听听反馈声音。而传统的反馈内容投递后,因为繁琐性和时效性的枷锁,往往石沉大海,不知何时才能得到回应,这就导致反馈信息的延迟,一些时效…...
扣子智能体平台深度解读:功能剖析与全流程工作流详解
在上一篇文章中,我们已经带大家了解了“智能体”这一概念的内涵,并通过扣子智能体平台的各大模块做了初步介绍,同时用一个简单的示例演示了如何构建和部署第一个智能体。那篇文章打好了基础,让大家对智能体的基本组成与工作方式有…...