使用Nuxt.js实现服务端渲染(SSR):提升SEO与性能的完整指南
使用Nuxt.js实现服务端渲染(SSR):提升SEO与性能的完整指南
- 使用Nuxt.js实现服务端渲染(SSR):提升SEO与性能的完整指南
- 1. 服务端渲染(SSR)核心概念
- 1.1 CSR vs SSR vs SSG
- 1.2 SSR工作原理图解
- 2. Nuxt.js框架深度解析
- 2.1 Nuxt.js架构设计
- 2.1.1 约定优于配置(Convention Over Configuration)
- 2.1.2 分层架构设计
- 2.2 核心特性全解
- 2.2.1 自动路由系统
- 2.2.2 多渲染模式支持
- 2.3 模块系统与插件机制
- 2.3.1 官方模块生态系统
- 2.3.2 自定义插件开发
- 2.4 配置体系详解
- 2.4.1 核心配置项解析
- 2.4.2 环境变量管理
- 2.5 生命周期全流程解析
- 2.5.1 服务端生命周期
- 2.5.2 客户端Hydration流程
- 2.6 数据获取策略对比
- 2.6.1 asyncData vs fetch
- 2.6.2 数据缓存策略
- 2.7 状态管理进阶实践
- 2.7.1 Vuex模块化架构
- 2.7.2 服务端数据预取
- 2.8 错误处理与调试技巧
- 2.8.1 自定义错误页面
- 2.8.2 性能调试工具
- 2.9 进阶开发技巧
- 2.9.1 动态布局切换
- 2.9.2 混合渲染模式
- 2.10 版本升级指南(Nuxt 2 → Nuxt 3)
- 2.10.1 主要变化点
- 2.10.2 迁移策略
- 3. 实战:构建Nuxt.js SSR应用
- 3.1 项目初始化
- 3.2 动态路由示例
- 4. SEO优化实践
- 4.1 智能元数据管理
- 4.1.1 基础元数据配置
- 4.1.2 动态元数据注入
- 4.1.3 高级元数据管理
- 4.2 结构化数据集成
- 4.2.1 Schema.org 结构化标记
- 4.2.2 面包屑导航实现
- 4.3 预渲染策略优化
- 4.3.1 静态生成配置
- 4.3.2 混合渲染模式
- 4.4 社交媒体优化
- 4.4.1 Open Graph 协议
- 4.4.2 Twitter Cards 配置
- 4.5 国际SEO优化
- 4.5.1 多语言配置
- 4.5.2 hreflang 实现
- 4.6 内容优化策略
- 4.6.1 语义化HTML结构
- 4.6.2 内部链接优化
- 4.7 性能优化与SEO
- 4.7.1 关键资源预加载
- 4.7.2 图片优化方案
- 4.8 SEO监控与分析
- 4.8.1 Google Search Console集成
- 4.8.2 SEO健康检查清单
- 4.9 常见SEO问题解决方案
- 4.9.1 重复内容处理
- 4.9.2 分页优化
- 4.10 持续SEO优化策略
- 4.10.1 内容更新机制
- 4.10.2 性能持续监控
- 5. 性能优化方案
- 5.1 组件级缓存
- 6. 部署配置示例
- 6.1 PM2生产配置
- 总结:
使用Nuxt.js实现服务端渲染(SSR):提升SEO与性能的完整指南
1. 服务端渲染(SSR)核心概念
1.1 CSR vs SSR vs SSG
通过对比表格展示不同渲染方式的差异:
| 特性 | CSR | SSR | SSG |
|---|---|---|---|
| 渲染时机 | 客户端 | 服务端 | 构建时 |
| SEO支持度 | 差 | 优秀 | 优秀 |
| 首屏加载速度 | 慢 | 快 | 极快 |
| 适用场景 | 后台系统 | 内容型网站 | 静态内容网站 |
1.2 SSR工作原理图解
以下是 “2. Nuxt.js框架深度解析” 的详细扩展内容,约5000字:
2. Nuxt.js框架深度解析
2.1 Nuxt.js架构设计
2.1.1 约定优于配置(Convention Over Configuration)
Nuxt.js 采用"约定优于配置"的设计理念,通过标准化目录结构降低决策成本:
├── assets/ # 未编译资源
├── components/ # 可复用组件
├── layouts/ # 布局模板
├── pages/ # 自动生成路由
├── plugins/ # 第三方插件
├── static/ # 直接访问的静态文件
└── store/ # Vuex状态管理
这种设计使得开发者无需手动配置路由和构建流程,专注于业务逻辑开发。对于需要自定义的场景,可通过 nuxt.config.js 进行覆盖。
2.1.2 分层架构设计
Nuxt.js 采用三层架构模型:
- 服务层:处理Node.js服务端逻辑
- 渲染层:实现Vue组件到HTML的转换
- 客户端层:管理浏览器端Hydration
这种分层设计使得SSR过程对开发者透明,同时保持框架的可扩展性。
2.2 核心特性全解
2.2.1 自动路由系统
Nuxt.js 根据 pages 目录结构自动生成路由配置:
pages/
├── index.vue => /
└── users/├── index.vue => /users└── _id.vue => /users/:id
支持动态路由、嵌套路由和自定义路由配置:
// nuxt.config.js
export default {router: {extendRoutes(routes, resolve) {routes.push({path: '/custom',component: resolve(__dirname, 'pages/custom-page.vue')})}}
}
2.2.2 多渲染模式支持
Nuxt.js 提供三种渲染模式:
// nuxt.config.js
export default {ssr: true, // 服务端渲染模式(SSR)target: 'server' // 或 'static'(静态生成)
}
- Universal Mode (SSR)
- Static Site Generation (SSG)
- Single Page Application (SPA)
模式对比:
| 特性 | SSR模式 | SSG模式 | SPA模式 |
|---|---|---|---|
| 首屏加载速度 | 快 | 极快 | 慢 |
| 动态内容支持 | 优秀 | 需客户端hydrate | 完全动态 |
| 部署复杂度 | 需要Node服务器 | 纯静态托管 | 纯静态托管 |
2.3 模块系统与插件机制
2.3.1 官方模块生态系统
Nuxt.js 通过模块系统扩展功能:
// nuxt.config.js
export default {modules: ['@nuxtjs/axios','@nuxtjs/auth-next','@nuxtjs/sitemap']
}
常用官方模块:
@nuxtjs/axios:封装HTTP请求@nuxtjs/pwa:PWA支持@nuxt/content:内容管理系统
2.3.2 自定义插件开发
插件注入示例:
// plugins/hello.js
export default ({ app }, inject) => {inject('hello', (msg) => console.log(`Hello ${msg}!`))
}// nuxt.config.js
export default {plugins: ['~/plugins/hello.js']
}// 组件内使用
this.$hello('World') // 控制台输出 "Hello World!"
2.4 配置体系详解
2.4.1 核心配置项解析
// nuxt.config.js
export default {// 构建配置build: {transpile: ['lodash-es'],extend(config, { isClient }) {if (isClient) {config.optimization.splitChunks.maxSize = 250000}}},// 环境变量publicRuntimeConfig: {API_BASE_URL: process.env.API_BASE_URL || 'https://api.example.com'},// 渲染配置render: {compressor: { threshold: 0 },etag: { weak: true }}
}
2.4.2 环境变量管理
推荐使用 .env 文件:
# .env
API_SECRET=your_api_secret
BASE_URL=https://production.com
配置读取策略:
// nuxt.config.js
export default {publicRuntimeConfig: {baseURL: process.env.BASE_URL},privateRuntimeConfig: {apiSecret: process.env.API_SECRET}
}
2.5 生命周期全流程解析
2.5.1 服务端生命周期
2.5.2 客户端Hydration流程
// 完整生命周期顺序:
1. nuxtServerInit (store)
2. middleware- 全局中间件- 布局中间件- 路由中间件
3. validate()
4. asyncData()
5. fetch()
6. head()
7. 客户端mounted()
2.6 数据获取策略对比
2.6.1 asyncData vs fetch
<script>
export default {async asyncData({ $axios }) {const posts = await $axios.$get('/api/posts')return { posts }},fetch({ store }) {return store.dispatch('loadUserData')}
}
</script>
特性对比:
| 方法 | 执行环境 | 访问组件实例 | 数据合并方式 |
|---|---|---|---|
| asyncData | 仅服务端 | 否 | 直接合并到data |
| fetch | 双端 | 否 | 需手动提交store |
2.6.2 数据缓存策略
// 使用lru-cache实现接口级缓存
const LRU = require('lru-cache')
const cache = new LRU({ max: 1000 })export default function ({ $axios }) {$axios.onRequest((config) => {if (config.cacheKey && cache.has(config.cacheKey)) {return Promise.resolve(cache.get(config.cacheKey))}return config})
}
2.7 状态管理进阶实践
2.7.1 Vuex模块化架构
// store/user.js
export const state = () => ({profile: null
})export const mutations = {SET_PROFILE(state, profile) {state.profile = profile}
}export const actions = {async loadProfile({ commit }) {const profile = await this.$axios.$get('/api/profile')commit('SET_PROFILE', profile)}
}
2.7.2 服务端数据预取
// 使用nuxtServerInit预取全局数据
export const actions = {nuxtServerInit({ dispatch }, { req }) {if (req.headers.cookie) {return dispatch('user/loadFromCookie', req.headers.cookie)}}
}
2.8 错误处理与调试技巧
2.8.1 自定义错误页面
<!-- layouts/error.vue -->
<template><div class="error-container"><h1>{{ error.statusCode }}</h1><p>{{ error.message }}</p><button @click="$router.push('/')">返回首页</button></div>
</template><script>
export default {props: ['error']
}
</script>
2.8.2 性能调试工具
- 使用
nuxt-bundle-analyzer分析构建体积 - 通过
$nuxt.context查看运行时上下文 - 集成Sentry进行错误监控:
// nuxt.config.js
export default {buildModules: ['@nuxtjs/sentry'],sentry: {dsn: process.env.SENTRY_DSN,config: {}}
}
2.9 进阶开发技巧
2.9.1 动态布局切换
<script>
export default {layout(context) {return context.isMobile ? 'mobile' : 'default'}
}
</script>
2.9.2 混合渲染模式
// nuxt.config.js
export default {render: {static: {paths: ['/static-page']},ssr: {paths: ['/dynamic/*']}}
}
2.10 版本升级指南(Nuxt 2 → Nuxt 3)
2.10.1 主要变化点
- 基于Vue 3的Composition API
- Nitro服务引擎替换
- 模块系统重构
- TypeScript原生支持
2.10.2 迁移策略
- 逐步替换Options API为Composition API
- 使用
@nuxt/bridge过渡 - 重构自定义模块
- 更新部署配置
3. 实战:构建Nuxt.js SSR应用
3.1 项目初始化
npx create-nuxt-app my-ssr-project
3.2 动态路由示例
// pages/articles/_id.vue
export default {async asyncData({ params }) {const article = await fetch(`/api/articles/${params.id}`)return { article }},head() {return {title: this.article.title,meta: [{ hid: 'description', name: 'description', content: this.article.excerpt }]}}
}
4. SEO优化实践
4.1 智能元数据管理
4.1.1 基础元数据配置
Nuxt.js 提供全局和组件级的元数据管理能力:
// nuxt.config.js
export default {head: {title: '默认标题',titleTemplate: '%s | 网站品牌',htmlAttrs: { lang: 'zh-CN' },meta: [{ charset: 'utf-8' },{ name: 'viewport', content: 'width=device-width, initial-scale=1' },{ hid: 'description', name: 'description', content: '默认描述' },{ hid: 'keywords', name: 'keywords', content: '默认关键词' }],link: [{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }]}
}
4.1.2 动态元数据注入
在页面组件中覆盖全局配置:
<script>
export default {head() {return {title: this.product.name,meta: [{ hid: 'description', name: 'description', content: this.product.summary },{ hid: 'og:image', property: 'og:image', content: this.product.coverImage },{ name: 'robots', content: this.indexable ? 'index,follow' : 'noindex,nofollow' }]}}
}
</script>
4.1.3 高级元数据管理
使用 @nuxtjs/robots 模块管理爬虫指令:
npm install @nuxtjs/robots
// nuxt.config.js
export default {modules: ['@nuxtjs/robots'],robots: {UserAgent: '*',Disallow: ['/admin', '/private'],Sitemap: process.env.BASE_URL + '/sitemap.xml'}
}
4.2 结构化数据集成
4.2.1 Schema.org 结构化标记
<script>
export default {jsonld() {return {'@context': 'https://schema.org','@type': 'Product',name: this.product.name,image: this.product.images,offers: {'@type': 'Offer',priceCurrency: 'CNY',price: this.product.price}}}
}
</script>
4.2.2 面包屑导航实现
<script>
export default {jsonld() {return {'@context': 'https://schema.org','@type': 'BreadcrumbList',itemListElement: [{'@type': 'ListItem',position: 1,name: '首页',item: process.env.BASE_URL},{'@type': 'ListItem',position: 2,name: this.category.name,item: `${process.env.BASE_URL}/categories/${this.category.slug}`}]}}
}
</script>
4.3 预渲染策略优化
4.3.1 静态生成配置
// nuxt.config.js
export default {target: 'static',generate: {routes: ['/products/1','/products/2',async () => {const products = await fetch('https://api.example.com/products')return products.map(product => `/products/${product.id}`)}],fallback: '404.html'}
}
4.3.2 混合渲染模式
// nuxt.config.js
export default {render: {static: true,ssr: true,hybrid: {routes: {'/dynamic/*': 'ssr','/static/*': 'static'}}}
}
4.4 社交媒体优化
4.4.1 Open Graph 协议
<script>
export default {head() {return {meta: [{ property: 'og:type', content: 'article' },{ property: 'og:url', content: `${process.env.BASE_URL}${this.$route.path}` },{ property: 'og:title', content: this.article.title },{ property: 'og:description', content: this.article.excerpt },{ property: 'og:image', content: this.article.coverImage },{ property: 'og:site_name', content: '网站名称' }]}}
}
</script>
4.4.2 Twitter Cards 配置
<script>
export default {head() {return {meta: [{ name: 'twitter:card', content: 'summary_large_image' },{ name: 'twitter:site', content: '@yourtwitterhandle' },{ name: 'twitter:creator', content: '@authorhandle' }]}}
}
</script>
4.5 国际SEO优化
4.5.1 多语言配置
// nuxt.config.js
export default {modules: ['nuxt-i18n'],i18n: {locales: [{ code: 'en', iso: 'en-US', file: 'en-US.js' },{ code: 'zh', iso: 'zh-CN', file: 'zh-CN.js' }],defaultLocale: 'zh',strategy: 'prefix_except_default',detectBrowserLanguage: false}
}
4.5.2 hreflang 实现
<script>
export default {head() {const links = []this.$i18n.locales.forEach(locale => {links.push({hid: `alternate-hreflang-${locale.code}`,rel: 'alternate',hreflang: locale.iso,href: `${process.env.BASE_URL}${this.$i18n.getPath(locale.code, this.$route.path)}`})})return { link: links }}
}
</script>
4.6 内容优化策略
4.6.1 语义化HTML结构
<template><article><header><h1>{{ article.title }}</h1><time :datetime="article.publishedAt">{{ formatDate(article.publishedAt) }}</time></header><section><nuxt-content :document="article" /></section><footer><author-info :author="article.author" /></footer></article>
</template>
4.6.2 内部链接优化
<template><div class="related-articles"><h2>相关文章</h2><ul><li v-for="article in relatedArticles" :key="article.id"><nuxt-link :to="`/articles/${article.slug}`">{{ article.title }}</nuxt-link></li></ul></div>
</template>
4.7 性能优化与SEO
4.7.1 关键资源预加载
// nuxt.config.js
export default {render: {resourceHints: true,http2: {push: true,pushAssets: (req, res, publicPath, preloadFiles) => {return preloadFiles.filter(f => f.asType === 'script' && f.file === 'runtime.js').map(f => `<${publicPath}${f.file}>; rel=preload; as=${f.asType}`)}}}
}
4.7.2 图片优化方案
<template><picture><source :srcset="require(`~/assets/images/${imageName}?webp`)" type="image/webp"><img :src="require(`~/assets/images/${imageName}`)" :alt="altText"loading="lazy"width="800"height="600"></picture>
</template>
4.8 SEO监控与分析
4.8.1 Google Search Console集成
<!-- layouts/default.vue -->
<script>
export default {head() {return {script: [{hid: 'google-site-verification',src: `https://www.googletagmanager.com/gtag/js?id=${process.env.GA_TRACKING_ID}`,async: true},{hid: 'gtm-init',innerHTML: `window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag('js', new Date());gtag('config', '${process.env.GA_TRACKING_ID}');`,type: 'text/javascript'}]}}
}
</script>
4.8.2 SEO健康检查清单
- 使用 Screaming Frog 抓取全站
- 验证所有页面的HTTP状态码
- 检查是否有重复的元描述和标题(建议不超过3次)
- 分析外链质量(使用Ahrefs或Majestic)
- 移动端友好性测试(Google Mobile-Friendly Test)
- 核心Web指标达标检测(Lighthouse)
4.9 常见SEO问题解决方案
4.9.1 重复内容处理
// nuxt.config.js
export default {modules: ['@nuxtjs/robots'],robots: {rules: {UserAgent: '*',Disallow: ['/search*','/?ref=*']}}
}
4.9.2 分页优化
<script>
export default {head() {const canonical = `${process.env.BASE_URL}${this.$route.path}`const prev = this.currentPage > 1 ? `${canonical}?page=${this.currentPage - 1}`: nullconst next = this.currentPage < this.totalPages ? `${canonical}?page=${this.currentPage + 1}`: nullreturn {link: [{ rel: 'canonical', href: canonical },...(prev ? [{ rel: 'prev', href: prev }] : []),...(next ? [{ rel: 'next', href: next }] : [])]}}
}
</script>
4.10 持续SEO优化策略
4.10.1 内容更新机制
// 自动生成sitemap
const createSitemapRoutes = async () => {const { $content } = require('@nuxt/content')const articles = await $content('articles').fetch()return articles.map(article => `/articles/${article.slug}`)
}export default {sitemap: {hostname: process.env.BASE_URL,routes: createSitemapRoutes,defaults: {changefreq: 'weekly',priority: 0.8}}
}
4.10.2 性能持续监控
// 集成Web Vitals监控
export default function ({ app }) {app.router.afterEach((to, from) => {if (typeof window !== 'undefined' && window.gtag) {setTimeout(() => {import('web-vitals').then(({ getCLS, getFID, getLCP }) => {getCLS(console.log)getFID(console.log)getLCP(console.log)})}, 3000)}})
}
5. 性能优化方案
5.1 组件级缓存
// nuxt.config.js
export default {render: {bundleRenderer: {cache: require('lru-cache')({max: 1000,maxAge: 1000 * 60 * 15})}}
}
6. 部署配置示例
6.1 PM2生产配置
// ecosystem.config.js
module.exports = {apps: [{name: 'my-nuxt-app',exec_mode: 'cluster',instances: 'max',script: './node_modules/nuxt/bin/nuxt.js',args: 'start'}]
}
总结:
本文深入解析了如何通过Nuxt.js实现服务端渲染(SSR)以全面提升SEO与性能。Nuxt.js通过自动路由生成、混合渲染模式(SSR/SSG)和智能数据预取,显著优化首屏加载速度与搜索引擎友好性。
相关文章:
使用Nuxt.js实现服务端渲染(SSR):提升SEO与性能的完整指南
使用Nuxt.js实现服务端渲染(SSR):提升SEO与性能的完整指南 使用Nuxt.js实现服务端渲染(SSR):提升SEO与性能的完整指南1. 服务端渲染(SSR)核心概念1.1 CSR vs SSR vs SSG1.2 SSR工作原…...
java 进阶教程_Java进阶教程 第2版
第2版前言 第1版前言 语言基础篇 第1章 Java语言概述 1.1 Java语言简介 1.1.1 Java语言的发展历程 1.1.2 Java的版本历史 1.1.3 Java语言与C/C 1.1.4 Java的特点 1.2 JDK和Java开发环境及工作原理 1.2.1 JDK 1.2.2 Java开发环境 1.2.3 Java工作原理 1.…...
shell编程(2)——shell脚本执行、传参、变量定义、注释
1、执行shell脚本 执行方式举例shsh xx.shsourcesource xx.sh点号.. xx.sh直接使用命令解释器bash xx.sh使用绝对路径或者相对路径./xx.sh daizhixin:shell$ sh test.sh hell0 world! daizhixin:shell$ source test.sh hell0 world! daizhixin:shell$ . test.sh hell0 wor…...
享元模式——C++实现
目录 1. 享元模式简介 2. 代码示例 1. 享元模式简介 享元模式是一种结构型模式。 享元模式用于缓存共享对象,降低内存消耗。共享对象相同的部分,避免创建大量相同的对象,减少内存占用。 享元模式需要将对象分成内部状态和外部状态两个部分…...
c++ Base64编码
介绍 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。 需要注意的是:标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“”字符变为形如“…...
SSRF 漏洞利用 Redis 实战全解析:原理、攻击与防范
目录 前言 SSRF 漏洞深度剖析 Redis:强大的内存数据库 Redis 产生漏洞的原因 SSRF 漏洞利用 Redis 实战步骤 准备环境 下载安装 Redis 配置漏洞环境 启动 Redis 攻击机远程连接 Redis 利用 Redis 写 Webshell 防范措施 前言 在网络安全领域࿰…...
react的antd表格自定义图标
将原版的加号换成箭头 自定义图标 安装图标包: npm install --save ant-design/icons 引入: import { RightOutlined, DownOutlined } from ant-design/icons; 参数是一个函数 <Table columns{columns} dataSource{data} indentSize{20}expandIc…...
Games104——游戏引擎Gameplay玩法系统:基础AI
这里写目录标题 寻路/导航系统NavigationWalkable AreaWaypoint NetworkGridNavigation Mesh(寻路网格)Sparse Voxel Octree Path FindingDijkstra Algorithm迪杰斯特拉算法A Star(A*算法) Path Smoothing Steering系统Crowd Simu…...
Java 2024年面试总结(持续更新)
目录 最近趁着金三银四面了五六家公司吧,也整理了一些问题供大家参考一下(适合经验三年左右的)。 面试问题(答案是我自己总结的,不一定正确): 总结: 最近趁着金三银四面了五六家公…...
亚博microros小车-原生ubuntu支持系列:22 物体识别追踪
背景知识 跟上一个颜色追踪类似。也是基于opencv的,不过背后的算法有很多 BOOSTING:算法原理类似于Haar cascades (AdaBoost),是一种很老的算法。这个算法速度慢并且不是很准。MIL:比BOOSTING准一点。KCF:速度比BOOST…...
JAVA异步的TCP 通讯-客户端
一、客户端代码示例 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.AsynchronousSocketChannel; import java.nio.channels.CompletionHandler; import java.util.concurrent.ExecutorService; impo…...
python:递归函数与lambda函数
递归函数:1.函数内调用自己 2.有一个出口 1.递归 一.有出口时 def sum(num):if num1:return 1return numsum(num-1) asum(3) print(a) #num3 3sum(2) #num2 2sum(1) #num1是返回1 #即3sum(2)即32sum(1)即321运行结果 6 二.无出口时 def sum(num)…...
G1相对于CMS的的优势
1.G1在压缩空间方面有优势。 2.G1通过将内存空间分成区域(Region)的方式避免内存碎片问题 3.Eden、Survivor、Old区不再固定,在内存使用率上来说更灵活 4.G1可以通过设置预期停顿时间(Pause Time)来控制垃圾收集时间…...
java进阶之并发编程一ReentrantLock的实际应用和线程中断EXAMPLE
引言:继上一篇ReentrantLock的介绍来做俩个小demo。 实现3个线程分别打印指定数字和线程死锁进行线程中断。 上一篇:<<java进阶之并发编程一ReentrantLock同步锁的学习和syncthronized的区别>> **demo1:**ReentrantLock搭配三个线程分别打印指定的数字,直接上代…...
消费kafka消息示例
以下是使用 Java 结合 Spring Kafka 框架来监听 updated-topic-test 这个 Kafka Topic 的详细实现步骤及代码示例,用于捕获人员信息变更的事件。 1. 添加依赖 在 pom.xml 文件中添加 Spring Kafka 相关依赖: <dependencies><!-- Spring Boot…...
分享2款 .NET 开源且强大的翻译工具
前言 对于程序员而言永远都无法逃避和英文打交道,今天大姚给大家分享2款 .NET 开源、功能强大的翻译工具,希望可以帮助到有需要的同学。 STranslate STranslate是一款由WPF开源的、免费的(MIT License)、即开即用、即用即走的翻…...
SpringBoot+Dubbo+zookeeper 急速入门案例
项目目录结构: 第一步:创建一个SpringBoot项目,这里选择Maven项目或者Spring Initializer都可以,这里创建了一个Maven项目(SpringBoot-Dubbo),pom.xml文件如下: <?xml versio…...
Java 面试之结束问答
技术优化 线程池优化 设置最大线程数设置最小核心线程数设置额外线程存活时间选择线程池队列选择合适的线程池选择合适的饱和策略 锁优化 尽量不要锁住方法缩小同步代码块,只锁数据锁中尽量不要再包含锁将锁私有化,在内部管理锁进行适当的锁分解 HT…...
[LeetCode] 二叉树 I — 深度优先遍历(前中后序遍历) | 广度优先遍历(层序遍历):递归法迭代法
二叉树 基础知识深度优先遍历递归法迭代法(栈)144# 二叉树的前序遍历94# 二叉树的中序遍历145# 二叉树的后序遍历 广度优先遍历递归法迭代法(队列)102# 二叉树的层序遍历107# 二叉树的层序遍历 II199# 二叉树的右视图637# 二叉树的…...
主动管理的基本概念
什么是主动管理? 主动管理,又称主动投资,是一种投资策略,投资组合经理进行特定投资的目的是超越投资基准指数。与被动管理不同,主动管理者依靠分析研究、预测以及自己的判断和经验来决定买入、持有和卖出哪些证券。“…...
Python aiortc API
本研究的主要目的是基于Python aiortc api实现抓取本地设备(摄像机、麦克风)媒体流实现Web端预览。本文章仅仅描述实现思路,索要源码请私信我。 demo-server解耦 原始代码解析 http服务器端 import argparse import asyncio import json…...
OpenCV4,快速入门,第二讲:图像色彩空间转换
文章目录 引言一、色彩空间概述1.1 RGB与HSV的区别1.2 HSV的详细含义cvtColor二、cvtColor函数详解2.1 函数原型2.2 参数说明2.3 使用示例三、imwrite函数详解3.1 函数原型3.2 参数说明3.3 使用示例四、完整示例代码五、应用场景与注意事项5.1 HSV的典型应用5.2 注意事项结语引…...
86.(2)攻防世界 WEB PHP2
之前做过,回顾一遍,详解见下面这篇博客 29.攻防世界PHP2-CSDN博客 既然是代码审计题目,打开后又不显示代码,肯定在文件里 <?php // 首先检查通过 GET 请求传递的名为 "id" 的参数值是否严格等于字符串 "admi…...
【Leetcode 每日一题】90. 子集 II
问题背景 给你一个整数数组 n u m s nums nums,其中可能包含重复元素,请你返回该数组所有可能的 子集(幂集)。 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。 数据约束 ● 1 ≤ n u m s . …...
RK3588——解决Linux系统触摸屏坐标方向相反问题
问题描述:触摸正常产生中断,但系统上报的触摸坐标不正确,是反向的坐标。 解决办法通过修改设备树添加属性翻转坐标。 注:需确认对应的驱动是否有解析该属性的具体内容,否则仍然无法生效。...
面对全球化的泼天流量,出海企业如何观测多地域网络质量?
作者:俞嵩、白玙 泼天富贵背后,技术挑战接踵而至 随着全球化进程,出海、全球化成为很多 Toc 产品的必经之路,保障不同地域、不同网络环境的一致的用户体验成为全球化应用的不得不面对的问题。在跨运营商、跨地域的网络环境中&am…...
YOLOv11实时目标检测 | 摄像头视频图片文件检测
在上篇文章中YOLO11环境部署 || 从检测到训练https://blog.csdn.net/2301_79442295/article/details/145414103#comments_36164492,我们详细探讨了YOLO11的部署以及推理训练,但是评论区的观众老爷就说了:“博主博主,你这个只能推理…...
PyQt6/PySide6 的 QPushButton 类
QPushButton 是 PyQt6 或 PySide6 库中用于创建按钮控件的类。按钮是用户界面中最常用的控件之一,用于触发特定的动作或事件。QPushButton 提供了丰富的功能和灵活性,使得开发者可以轻松地创建各种类型的按钮。下面我将详细介绍 QPushButton 的主要特性及…...
libdrm移植到arm设备
一、环境资源要求 下载libdrm Index of /libdrm 这边使用的是2.4.114版本,版本太高对meson版本要求也很高,为了省事用apt安装meson就不用太高版本了,1.x版本虽然使用makefile编译方便但是太老,对应用支持不太好。 https://dri…...
自定义序列化数据类型
目录 1. WritableComparable1.1 Writable1.2 Comparable1.3 IntWritable 2. 自定义序列化数据类型RectangleWritable3. 矩形面积计算3.1 Map3.2 Reduce 4. 代码和结果4.1 pom.xml中依赖配置4.2 工具类util4.3 矩形面积计算4.4 结果 参考 本文引用的Apache Hadoop源代码基于Apac…...
