从零构建GitHub Pages静态博客:Jekyll选型、部署与优化全指南

news2026/5/9 16:14:03
1. 项目概述一个静态博客的诞生与演进“lofder/lofder.github.io”这个看似简单的GitHub仓库地址背后代表的是一个非常经典且实用的个人项目一个基于GitHub Pages托管的静态个人博客。对于很多开发者、技术爱好者乃至内容创作者来说这几乎是迈入个人数字资产建设的第一步。它不仅仅是一个存放代码的仓库更是一个人的数字名片、技术笔记库、思想沉淀地甚至是一个小型的产品试验田。我搭建和维护过不止一个这样的站点深知从一个空仓库到一个内容丰富、体验流畅、维护省心的博客中间有多少细节值得琢磨。这个项目的核心价值在于其极致的简洁与可控性。你拥有从内容创作、样式设计到部署发布的完整控制权无需担心平台算法、审核规则或是突然的服务变更。GitHub Pages提供了免费、稳定且自带全球CDN的托管服务而Jekyll、Hugo、Hexo等静态站点生成器则将内容管理变得像写Markdown文档一样简单。最终产出的是一个加载飞快、对搜索引擎友好、完全属于你自己的独立站点。无论是记录学习心得、分享项目经验还是展示作品集它都是一个绝佳的载体。接下来我将以一个资深实践者的视角为你拆解从零开始构建并深度优化这样一个博客的完整路径、核心决策点以及那些只有踩过坑才知道的宝贵经验。2. 核心架构选型与设计思路当你决定要建一个“lofder.github.io”这样的博客时面临的第一个关键选择就是技术栈。这个选择将直接影响你后续的写作体验、站点性能和维护成本。2.1 静态站点生成器为何是Jekyll、Hugo或Hexo静态站点生成器SSG是这个项目的基石。它的工作原理是将你写的Markdown文档、HTML模板、CSS样式等原材料通过一套构建工具编译成纯粹的HTML、CSS、JavaScript文件。这些生成的文件可以直接被任何Web服务器如GitHub Pages托管无需数据库和服务器端动态语言如PHP、Python。为什么选择SSG极致性能与安全生成的纯静态文件服务器只需“读取”和“发送”响应速度极快。由于没有数据库和动态脚本执行环境几乎不存在SQL注入、远程代码执行等动态网站常见的安全漏洞。版本控制友好你的所有文章Markdown、配置YAML/TOML、样式CSS都是文本文件可以完美地用Git进行版本管理。每一次修改、每一篇文章的增删都留有清晰的历史记录。免费且强大的托管GitHub Pages、GitLab Pages、Vercel、Netlify等服务都对静态站点提供优秀的免费托管支持通常自带SSL证书和全球CDN。专注内容创作你只需要关心Markdown文档的撰写剩下的排版、样式、部署都由工具链自动完成。主流SSG选型分析JekyllGitHub Pages的“官方支持”和“默认选项”。如果你希望获得最无缝的GitHub Pages集成体验推送即发布Jekyll是首选。它使用Ruby开发主题生态丰富尤其是很多简洁的技术博客主题。但它的构建速度在文章量很大时会相对较慢且Ruby环境对部分Windows用户可能不太友好。Hugo以“世界最快的静态网站生成器”闻名使用Go语言编写构建速度是碾压级的。它的单二进制文件部署方式使得安装和运行异常简单。主题生态同样庞大。如果你追求极致的构建和本地预览速度或者文章数量预期会非常多Hugo是绝佳选择。Hexo基于Node.js对于前端开发者非常友好。拥有丰富的插件生态可以轻松实现各种功能扩展如文章加密、图片懒加载、SEO优化等。如果你熟悉JavaScript/Node.js技术栈希望有高度的自定义和扩展能力Hexo很合适。我的选择与建议对于纯粹的、以内容为中心的博客且希望与GitHub Pages绑定最紧密我推荐从Jekyll开始。它的学习曲线平缓社区资源丰富出了问题也最容易找到解决方案。当你对流程熟悉后如果对速度或特定功能有更高要求再考虑迁移到Hugo或Hexo也不迟。2.2 仓库结构与核心文件解析一个典型的“lofder.github.io”仓库结构如下理解每个文件/目录的作用至关重要lofder.github.io/ ├── _config.yml # 站点的核心配置文件Jekyll ├── _posts/ # 存放所有博客文章的Markdown文件 │ ├── 2024-05-20-welcome-to-jekyll.md │ └── ... ├── _layouts/ # 布局模板文件如default.html, post.html ├── _includes/ # 可复用的HTML片段如header.html, footer.html ├── _sass/ # Sass样式表源文件 ├── assets/ # 静态资源CSS, JS, images │ ├── css/ │ ├── js/ │ └── images/ ├── about.md # “关于”页面 ├── index.md # 首页通常会被转换为index.html └── Gemfile # Ruby依赖管理文件Jekyll_config.yml这是博客的“大脑”。在这里定义站点标题、描述、作者、URL、主题设置、插件列表、构建规则等。任何全局性的修改几乎都在这里进行。_posts内容的核心。所有文章都必须以YYYY-MM-DD-title.md的格式命名并放在这个目录下。Jekyll会依据文件名中的日期自动处理文章排序和归档。_layouts _includes这是实现站点外观一致性的关键。_layouts定义页面的骨架如文章页布局、主页布局_includes定义骨架中可复用的“零件”如导航栏、侧边栏、评论组件。通过组合它们可以高效地管理站点的HTML结构。assets存放所有样式、脚本和图片。良好的实践是将CSS和JS文件最小化Minify并合并以提升页面加载速度。图片建议使用现代格式如WebP并配合CDN或图片懒加载技术。2.3 设计哲学内容优先与极简主义在开始动手写代码或选主题之前先想清楚博客的设计哲学。对于个人技术博客我强烈推崇“内容优先”和“极简主义”。内容优先意味着站点的所有设计决策都应服务于内容的清晰呈现。避免使用过于花哨的动画、复杂的背景或拥挤的布局这些都会分散读者的注意力。足够的留白、清晰的字体对比度、合理的行高和段间距这些才是提升阅读体验的关键。极简主义不仅体现在视觉上也体现在代码和功能上。只添加真正必要的功能如搜索、评论、目录导航。每一个额外的JavaScript库或第三方服务都可能拖慢站点速度、引入隐私问题或增加维护复杂度。一个加载迅速、界面干净、核心功能可靠的博客远比一个功能繁多但卡顿臃肿的博客更受读者欢迎。基于这个哲学在选择或自定义主题时你应该关注排版是否优雅易读代码高亮是否清晰移动端适配是否完善是否包含了过多你不需要的社交分享或广告位从一个极简的主题开始然后按需添加功能是更可控的策略。3. 从零开始的详细搭建流程假设我们选择Jekyll作为生成器并准备使用一个现成的主题进行快速启动。以下是手把手的操作流程。3.1 本地开发环境搭建在将任何代码推送到GitHub之前建立一个本地开发环境是必须的。这允许你在本地编写、预览和调试你的博客。安装Ruby与JekyllmacOS通常系统自带Ruby但建议使用Homebrew安装新版Rubybrew install ruby。然后通过Gem安装Jekyll和Bundlergem install jekyll bundler。Windows最推荐使用 RubyInstaller 。下载并安装时务必勾选“Add Ruby executables to your PATH”。安装完成后在命令行同样执行gem install jekyll bundler。Linux使用系统包管理器安装Ruby和开发工具例如在Ubuntu上sudo apt install ruby-full build-essential然后gem install jekyll bundler。验证安装运行jekyll -v和bundle -v如果能看到版本号说明安装成功。创建本地博客项目# 创建一个新的Jekyll站点命名为 myblog你可以换成任意名字 jekyll new myblog # 进入项目目录 cd myblog # 安装项目所需的Gem依赖根据Gemfile bundle install # 启动本地预览服务器 bundle exec jekyll serve执行完最后一条命令后打开浏览器访问http://localhost:4000你应该能看到默认的Jekyll欢迎页面。至此本地环境就绪。3.2 关联GitHub仓库与初始配置在GitHub上创建仓库登录GitHub点击“New repository”。仓库名必须严格遵循[你的用户名].github.io的格式例如我的用户名是lofder那么仓库名就是lofder.github.io。将仓库设置为公开Public初始化可以不用添加README因为我们本地已有项目。将本地项目与远程仓库关联# 进入你的本地项目目录myblog cd myblog # 初始化Git如果jekyll new时没自动初始化 git init # 将本地所有文件添加到暂存区 git add . # 提交第一次更改 git commit -m Initial commit: Jekyll site structure # 添加远程仓库地址请替换成你的仓库URL git remote add origin https://github.com/lofder/lofder.github.io.git # 将本地提交推送到GitHub的main分支 git push -u origin main推送完成后等待1-2分钟访问https://lofder.github.io你的博客就已经在线了GitHub Pages会自动检测到这是一个Jekyll仓库并开始构建。深度定制 _config.yml 打开本地的_config.yml文件这是你博客的“总控台”。以下是一些关键配置项# 站点基本信息 title: 你的博客标题 email: 你的公开邮箱可选 description: 一段吸引人的博客描述对SEO很重要 baseurl: # 如果你的站点不在根目录则填写子路径通常留空 url: https://lofder.github.io # 你的完整域名 # 构建设置 markdown: kramdown # 使用的Markdown解析器 highlighter: rouge # 代码高亮引擎 plugins: # 需要使用的Jekyll插件 - jekyll-feed # 生成RSS订阅源 - jekyll-sitemap # 生成站点地图 # 主题设置如果你使用了第三方主题这里会有更多配置 theme: minima # 默认主题是minima # 自定义变量可以在整个站点中通过 site.xxx 访问 author: name: 你的名字 twitter: 你的Twitter用户名每次修改_config.yml后需要重启本地服务器 (bundle exec jekyll serve) 才能生效。3.3 主题的选择、应用与自定义使用主题是快速获得一个美观界面的最佳方式。Jekyll主题主要有两种使用方式远程主题Gem-based Theme主题作为一个Ruby Gem被引入。这是GitHub Pages官方推荐的方式因为Pages服务器支持直接构建。修改_config.yml中的theme字段即可。优点升级方便结构清晰。缺点自定义覆盖样式和布局稍显复杂需要创建同名文件进行覆盖。本地主题Forked Theme直接将主题的整个仓库代码复制到你的项目中。你可以任意修改所有文件。优点完全的控制权修改直接。缺点难以同步主题作者的后续更新。以应用远程主题“Minimal Mistakes”为例在Gemfile中添加主题Gemgem minimal-mistakes-jekyll。运行bundle install安装新依赖。在_config.yml中将theme改为minimal-mistakes-jekyll。根据主题文档你可能需要调整_config.yml中的其他设置并创建特定的页面如标签页、分类页。自定义样式 即使使用远程主题你也可以深度自定义。主题的样式通常由Sass文件控制。你可以在_sass目录下创建一个名为_custom.scss的文件在里面写入你的自定义CSS规则。然后在assets/css/main.scss文件的最前面在主题导入之前添加一行导入语句--- --- import custom; // 导入你的自定义样式 import minimal-mistakes/skins/{{ site.minimal_mistakes_skin | default: default }}; // 主题样式 import minimal-mistakes; // 主题样式这样你的_custom.scss中的规则就会覆盖主题的默认样式实现个性化。4. 内容创作与管理的核心实践博客的灵魂是内容。如何高效、规范地创作和管理内容是维持博客生命力的关键。4.1 文章Post的规范写作在_posts目录下每一篇文章都是一个Markdown文件。文件名和文件头Front Matter的规范性至关重要。文件名规范必须使用YYYY-MM-DD-title-separated-by-hyphens.md格式。例如2024-05-20-getting-started-with-jekyll.md。日期决定了文章的排序和归档路径。Front Matter文件头这是文章元数据的存放地位于文件顶部用三条短横线---包裹。一个完整的Front Matter示例--- layout: post title: 深入理解静态站点生成器 date: 2024-05-20 14:30:00 0800 categories: [技术, 博客] tags: [Jekyll, Hugo, SSG, GitHub Pages] author: lofder toc: true # 是否生成文章目录 mathjax: true # 是否支持数学公式 image: path: /assets/images/ssg-cover.jpg caption: 静态站点生成器架构示意图 ---layout指定使用哪个布局模板通常是post。title、date、author自解释。categories和tags用于文章分类和标签。分类是层级式的如[技术, 前端]标签是扁平化的。合理使用它们能极大改善站点导航和SEO。toc为长文章自动生成目录提升阅读体验。image可以指定文章的封面图在文章列表和社交媒体分享时显示。正文写作使用标准的Markdown语法。Jekyll支持扩展语法如使用{% highlight python %}和{% endhighlight %}Liquid标签进行更精确的代码高亮。对于图片建议使用图床如GitHub本身、Imgur、或自建CDN并配合懒加载避免仓库过大。4.2 页面Page的创建除了博客文章你还需要“关于”、“项目”、“归档”等独立页面。这些页面不放在_posts里。创建页面在根目录下直接创建Markdown文件如about.md。页面Front Matter--- layout: page title: 关于我 permalink: /about/ # 自定义页面URL这里是 /about/ ---内容在Front Matter下方直接写Markdown内容即可。这个页面最终会被生成为https://lofder.github.io/about/。4.3 数据文件_data的妙用_data目录是Jekyll一个非常强大的功能它允许你使用YAML、JSON或CSV格式来存储结构化数据并在整个站点中通过 Liquid 模板语言调用。这非常适合管理导航菜单、项目列表、友情链接等。例如创建一个_data/navigation.yml文件- name: 首页 link: / - name: 归档 link: /year-archive/ - name: 分类 link: /categories/ - name: 关于 link: /about/然后在导航栏模板如_includes/nav.html中你可以这样遍历它nav {% for item in site.data.navigation %} a href{{ item.link | relative_url }}{{ item.name }}/a {% endfor %} /nav这样当你需要增删导航项时只需修改YAML文件无需触碰HTML模板实现了内容与结构的分离。5. 高级功能集成与性能优化一个基础的博客搭建完成后通过集成一些高级功能和进行性能优化可以显著提升博客的专业度和用户体验。5.1 评论系统的接入由于静态博客没有后端评论功能需要依赖第三方服务。主流选择有Disqus最老牌功能强大但免费版有广告且对国内网络环境不友好。Gitalk、Utterances基于GitHub Issues的评论系统。将博客的评论区映射为一个GitHub仓库的Issue。用户需要使用GitHub账号登录评论。优点完全免费、无广告、评论内容以Issue形式保存在你自己的仓库里数据自主。缺点非GitHub用户无法评论样式相对简单。Waline一个简洁、安全的自托管评论系统。你需要自己准备一个后端服务器如VPS和数据库来部署Waline服务端然后在博客前端引入客户端JS。优点数据完全自控支持多种登录方式功能可定制性强。缺点需要一定的运维成本。以集成Utterances为例在Utterances官网 (utteranc.es) 配置关联你的GitHub仓库。它会生成一段script代码。将这段代码粘贴到你的文章布局模板_layouts/post.html中通常放在文章内容之后。Jekyll会在构建每篇文章时自动插入这个脚本。5.2 搜索功能的实现静态博客实现全文搜索同样需要借助前端JavaScript或第三方服务。Simple-Jekyll-Search一个轻量级的客户端JavaScript搜索库。它需要你在构建时生成一个包含所有文章标题、内容和URL的JSON文件Jekyll可以轻松做到然后前端JS加载这个JSON文件并进行本地搜索。优点完全免费、无需外部依赖、搜索速度快数据量不大时。缺点当文章数量非常多如上千篇时生成的JSON文件会很大影响初始加载速度。Algolia专业的搜索即服务SaaS。它提供强大的全文搜索、拼写纠错、同义词等功能。通常有免费的额度如每月1万次搜索对于个人博客足够。优点搜索体验极佳、功能强大。缺点需要额外的配置步骤免费额度用完后需付费。使用Simple-Jekyll-Search的步骤创建一个search.json布局文件用于输出文章数据的JSON格式。在_config.yml中配置输出这个JSON文件。在页面中引入simple-jekyll-search.min.js库。编写HTML搜索框和结果容器并初始化搜索库。5.3 性能优化关键点一个快速的博客是对读者最基本的尊重也对SEO有巨大帮助。图片优化压缩使用工具如TinyPNG、ImageOptim、Squoosh在上传前压缩图片。现代格式优先使用WebP格式它在同等质量下体积比JPEG/PNG小很多。可以使用picture元素提供兼容性回退。懒加载为图片添加loadinglazy属性让图片在进入视口时才加载。响应式图片使用srcset属性为不同屏幕尺寸提供不同分辨率的图片。CSS/JS优化最小化与合并使用Jekyll插件如jekyll-assets或构建工具如Webpack、Gulp在构建时自动压缩和合并CSS/JS文件减少HTTP请求数。异步/延迟加载对于非关键JS如评论、统计代码使用async或defer属性防止阻塞页面渲染。利用GitHub Pages和CDNGitHub Pages本身已经提供了不错的全球CDN。确保你的CNAME文件如果你使用自定义域名配置正确。可以考虑将静态资源如图片、字体托管在专门的CDN服务上如jsDelivr它可以直接加速GitHub仓库中的文件进一步分散负载。预生成与缓存静态站点本身就是“预生成”的极致。确保你的_config.yml中设置了合理的永久链接permalink结构便于缓存。可以通过在HTML头中添加Cache-Control等HTTP头来指导浏览器和CDN缓存静态资源。6. 自动化部署与持续维护将本地写作与线上发布流程自动化能让你更专注于内容本身。6.1 GitHub Actions自动化工作流除了GitHub Pages的自动构建你还可以利用GitHub Actions实现更高级的自动化。自动构建检查每次向main分支推送代码时自动运行Jekyll构建检查是否有语法错误或构建失败并将结果通过邮件或Slack通知你。文章拼写/语法检查集成如textlint这样的工具在提交前自动检查Markdown文件中的拼写和语法错误。优化图片在构建流程中自动调用压缩工具处理新添加的图片。自动部署到多个平台除了GitHub Pages还可以同时部署到Netlify、Vercel等作为备份或测试环境。一个简单的构建检查Action示例 (.github/workflows/build-check.yml)name: Jekyll Build Check on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - uses: ruby/setup-rubyv1 with: ruby-version: 3.1 - run: bundle install - run: bundle exec jekyll build --safe6.2 自定义域名的绑定使用username.github.io的域名很实用但绑定一个自己的域名如blog.lofder.com会让博客更个性化、更专业。购买域名在域名注册商如Cloudflare, Namecheap, GoDaddy处购买你心仪的域名。配置DNS在你的域名管理后台添加一条CNAME记录。将主机名如blog指向lofder.github.io。或者如果你想用根域名如lofder.com则需要添加四条A记录指向GitHub Pages的IP地址这些IP地址可以在GitHub官方文档中找到它们可能会变。在仓库中设置在你的博客仓库根目录下创建一个名为CNAME的纯文本文件没有后缀里面只写一行你的自定义域名如blog.lofder.com。在仓库的Settings-Pages页面Custom domain部分填写你的域名并保存。等待生效DNS更改可能需要几分钟到几小时全球生效。生效后访问你的自定义域名就能看到博客了。GitHub会自动为你配置SSL证书启用HTTPS。6.3 备份与版本控制策略你的整个博客就是一个Git仓库这本身就是最好的备份。但还需要注意定期推送养成习惯写完文章或做完修改后及时git commit和git push。分支策略可以使用main分支作为生产分支专门用于部署。创建一个dev或source分支用于日常开发和写作测试无误后再合并到main。这样能保证线上站点的稳定性。本地备份虽然代码在GitHub但本地最好也有一份完整的副本。可以考虑定期将整个仓库打包备份到其他云盘或本地硬盘。内容备份对于第三方服务的数据如评论如果用Disqus或Waline定期导出备份。如果使用基于GitHub Issues的评论数据本身就在仓库里无需额外备份。7. 常见问题与故障排查实录在多年的维护中我遇到过各种各样的问题。这里记录下最典型的几个及其解决方案。7.1 构建失败Page build failure这是GitHub Pages构建时最常见的问题。通常会在你的仓库的“Settings” - “Pages”页面看到错误信息或者收到GitHub的告警邮件。原因1使用了不支持的插件。GitHub Pages出于安全考虑只支持 一部分白名单内的Jekyll插件 。排查检查你的_config.yml中的plugins列表和Gemfile。解决移除不支持的插件或者寻找替代品。如果必须使用可以考虑改用GitHub Actions自行构建然后将生成的_site目录推送到另一个分支如gh-pages或另一个仓库再让GitHub Pages从这个分支/仓库部署。原因2YAML语法错误。_config.yml或文章Front Matter中的YAML格式不正确比如缩进用了Tab键而不是空格或者字符串忘记加引号导致解析歧义。排查使用在线的YAML验证器或者本地运行bundle exec jekyll build看具体报错行。解决严格按照YAML语法修正。确保缩进是空格冒号后面有空格多层嵌套对齐正确。原因3Markdown文件编码或特殊字符。文件保存为带BOM的UTF-8或者内容中包含一些特殊字符如未经转义的{%}Liquid标签定界符。排查用文本编辑器如VS Code检查文件编码确保是UTF-8无BOM。检查文章内容。解决转换编码。对于Liquid标签定界符如果需要原样输出可以使用{{ {% raw }}%}和{{ {% endraw }}%}包裹起来。7.2 本地预览正常线上样式错乱原因1CSS/JS资源路径错误。在本地使用http://localhost:4000访问而在线上是https://lofder.github.io或自定义域名。如果资源路径使用了绝对路径或错误的baseurl就会404。排查打开浏览器开发者工具查看“网络”选项卡确认CSS/JS文件是否成功加载状态码应为200。解决在模板中始终使用Jekyll的relative_url或absolute_url过滤器来生成链接。例如link href{{ /assets/css/main.css | relative_url }} relstylesheet。确保_config.yml中的url和baseurl设置正确。原因2浏览器缓存。你更新了CSS但浏览器还缓存着旧版本。解决强制刷新页面CtrlF5 / CmdShiftR。对于生产环境可以考虑为资源文件添加版本号或哈希后缀通过构建工具实现确保每次更新后URL都变化从而绕过缓存。7.3 文章不显示或排序错误原因1文件名格式错误。文章没有放在_posts目录下或者文件名没有严格遵守YYYY-MM-DD-title.md的格式。解决检查文件名和目录位置。原因2Front Matter日期格式错误。date字段的格式必须是YYYY-MM-DD HH:MM:SS /-TTTT如果只写了日期时间部分默认为00:00:00。时区设置也可能导致文章出现在“未来”从而不被显示。解决检查Front Matter中的date字段。如果想立即发布确保日期时间不晚于当前时间。可以在_config.yml中设置future: true来显示未来的文章仅用于预览。原因3文章被设置为“草稿”。Jekyll默认会忽略文件名以_drafts目录下的文件以及Front Matter中设置了published: false的文章。解决如果文章在_drafts目录将其移到_posts。如果设置了published: false将其改为true或删除该行。7.4 自定义域名HTTPS证书问题绑定自定义域名后GitHub Pages会自动申请Let‘s Encrypt证书但有时会失败。现象浏览器提示“连接不安全”或证书无效。排查检查CNAME文件内容是否正确是否已提交到仓库根目录。在仓库的“Settings” - “Pages”页面查看自定义域名状态。如果显示“Not yet provisioned”或类似信息说明证书还在申请中等待即可最长可能24小时。使用在线工具如SSL Labs的SSL测试检查你的域名证书状态。解决最常见的原因是DNS记录未完全生效或配置有误。确保你的DNS记录CNAME或A记录指向正确。在GitHub Pages设置中暂时移除自定义域名保存然后再重新添加一次强制触发重新申请证书。确保你的域名没有设置任何特殊的DNS记录如CAA记录阻止Let‘s Encrypt签发证书。维护一个静态博客就像打理一个数字花园它需要持续的耕耘。从最初的技术选型、环境搭建到日常的内容创作、样式调优再到后期的性能打磨、故障排查每一步都蕴含着学习与成长的乐趣。这个以你用户名命名的github.io站点不仅是你的技术展示窗更是你思考过程的记录仪。它安静、稳定、完全属于你在信息洪流中为你保留一片独立的数字天地。开始行动吧从创建那个以你名字命名的仓库开始写下你的第一行代码、第一篇文章这片天地将随着你的耕耘而日益繁茂。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

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

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…