基于Next.js 15与React 19构建现代化个人作品集:技术选型与工程实践

news2026/5/16 4:41:54
1. 项目概述为什么选择 Next.js 15 构建现代个人作品集作为一名在前后端领域摸爬滚打了十多年的开发者我见过也亲手搭建过无数种个人作品集网站。从早期的纯静态 HTML/CSS到 jQuery 时代再到 React/Vue 等框架的兴起技术栈的迭代速度总是快得让人应接不暇。最近我决定彻底重构自己的线上名片目标很明确它必须足够现代、性能顶尖、开发体验流畅并且能真正体现一名技术从业者的专业素养。在经过一番技术选型后我最终将赌注押在了Next.js 15、React 19和TypeScript这套组合拳上并完成了这个名为my-portfolio-nextjs的开源项目。这个项目不仅仅是一个展示个人履历的静态页面它是一个完整的、生产就绪的现代 Web 应用。它解决了几个核心痛点首先传统的作品集网站往往 SEO 表现不佳不利于个人品牌的传播其次许多模板在交互体验和性能上有所欠缺无法给访客留下深刻印象再者维护和更新内容如果过于繁琐很容易让网站变成“僵尸站”。因此我构建的这个作品集模板核心设计思路就是“开箱即用深度定制”——你只需要填充一份数据文件就能获得一个具备动态数据集成GitHub、LeetCode、丝滑交互动画、完整 SEO 优化且响应式设计精美的个人网站。无论你是刚入行的前端新人还是希望更新技术形象的全栈老手这个项目都能为你提供一个坚实且时髦的起点。2. 技术栈深度解析与选型背后的逻辑在启动任何项目前技术选型都是决定成败的第一步。我选择的每一项技术背后都有其明确的场景考量和对未来维护成本的评估。2.1 核心框架Next.js 15 与 React 19 的强强联合选择Next.js 15作为框架基石几乎是当前构建生产级 React 应用的最优解。其最新的 App Router 架构提供了基于文件系统的、直观的路由和布局定义方式这比传统的 Pages Router 在组织复杂应用时清晰得多。更重要的是Next.js 15 默认启用了Turbopack在next dev时这对于大型项目的本地开发热更新速度是质的飞跃。实测下来即使项目组件数量众多修改代码后的刷新几乎在 500ms 内完成这种流畅感对开发效率的提升是巨大的。React 19带来了许多底层优化和新的 Hook如use虽然在这个项目中并未用到所有最新特性但使用其稳定版本意味着能享受更优的运行时性能和更前瞻的生态兼容性。例如React 19 对服务端组件RSC的支持更加成熟这与 Next.js 15 的 App Router 理念完美契合。我的页面src/app/page.tsx大量使用了服务端组件这使得像 GitHub Calendar 这类需要获取外部数据再渲染的模块其数据获取逻辑可以直接在服务端完成生成的 HTML 直接包含内容对首屏加载速度和 SEO 极其友好。2.2 类型安全与开发体验TypeScript 5.0在项目规模稍大时没有类型系统就像在黑暗中摸索。TypeScript 5.0引入了const类型参数、extends约束优化等特性让类型推断更精准。在本项目中我在src/components/constants/data.ts里为所有配置数据如项目、经历、技能定义了严格的接口Interface。这样做的好处是一旦你在修改数据时结构或类型不匹配IDE如 VSCode会立刻报错避免了运行时才发现数据格式错误的问题。例如为Project接口定义title: string,techStack: string[],links: { github?: string; live?: string }等字段能确保每个项目卡片的数据完整且一致。2.3 样式方案Tailwind CSS 4.0 与原子化 CSS 哲学我放弃了传统的 CSS Modules 或 Styled-components全面拥抱Tailwind CSS 4.0。原因很简单效率。在开发 UI 密集的作品集时你需要频繁调整间距、颜色、响应式断点。Tailwind 的原子化类名允许我直接在 JSX 中完成这些调整无需在 CSS 文件和组件文件间反复切换。Tailwind 4.0 在性能和功能上都有提升其 Just-in-Time 引擎确保最终生成的 CSS 文件只包含你用到的类体积极小。注意很多开发者初用 Tailwind 会觉得类名冗长但搭配 VSCode 的Tailwind CSS IntelliSense插件后体验极佳。关键在于要建立一套自己的设计 Token在tailwind.config.js中定义颜色、字体、阴影等确保整个网站的设计系统一致。我在项目中定义了一套主色和深色模式配色所有组件都引用这些 Token保证了换肤的一致性。2.4 动画与交互Framer Motion 的魅力静态页面是枯燥的。Framer Motion是目前 React 生态中最强大且易用的动画库。我利用它实现了几个关键交互页面滚动时导航栏高亮的视差效果、项目卡片和技能标签的悬停浮起动画、以及页面切换时的淡入淡出过渡。它的声明式 API 非常直观例如实现一个卡片悬停效果只需motion.div whileHover{{ y: -5, transition: { duration: 0.2 } }} whileTap{{ scale: 0.98 }} {/* 卡片内容 */} /motion.div更重要的是Framer Motion 尊重用户的系统偏好如果用户设置了prefers-reduced-motion这些动画会自动禁用这是一个重要的可访问性考量。2.5 特色功能实现WebGL 流体光标与数据集成为了打造令人印象深刻的记忆点我引入了两个特色功能。第一个是基于 WebGL 的流体光标动画FluidCursor组件。它不是一个简单的 CSS 效果而是使用react-three/fiber和react-three/drei在页面中渲染的一个极简的 WebGL 画布光标移动时会像墨水在水中一样产生自然的流体拖尾效果。这个效果对性能有一定要求因此我将其封装成一个自定义 Hook (useFluidCursor)并提供了开关选项在低性能设备上可以禁用。第二个是动态数据集成。作品集不应是静态的。我通过 GitHub API 和 LeetCode GraphQL API分别动态获取并渲染用户的贡献日历和解题统计数据。这部分逻辑封装在GithubSection和LeetCodeSection组件中并使用了fetchAPI 在服务端获取数据Next.js 15 中fetch默认缓存。这样做既保证了数据的实时性又利用了服务端渲染的优势避免客户端加载时的布局偏移。3. 项目结构设计与核心组件剖析一个清晰的项目结构是长期可维护性的基石。我采用了 Next.js 15 App Router 推荐的结构并在此基础上根据功能进行了细化。3.1 目录结构模块化与关注点分离src/ ├── app/ # Next.js 15 App Router 核心 │ ├── layout.tsx # 根布局包含元数据、全局样式、主题Provider │ ├── page.tsx # 主页聚合所有章节组件 │ ├── globals.css # 全局Tailwind指令和自定义CSS │ └── providers.tsx # 客户端上下文Provider如主题 ├── components/ │ ├── constants/ │ │ └── data.ts # 项目唯一数据源所有内容在此配置 │ ├── sections/ # 页面各个主要区块组件 │ │ ├── navbar.tsx │ │ ├── about-me.tsx │ │ └── ... │ └── ui/ # 可复用的通用UI组件 │ ├── theme-toggle.tsx │ └── FluidCursor.tsx └── hooks/ # 自定义React Hooks └── useFluidCursor.ts这种结构的核心思想是“数据与视图分离”。所有关于“我”的信息——个人简介、技能列表、项目经历等——全部集中在src/components/constants/data.ts这一个文件中。当你需要定制内容时只需修改这个文件无需触碰任何组件逻辑。sections/目录下的每个组件都专注于渲染data.ts中对应部分的数据职责单一易于测试和替换。3.2 数据驱动设计data.ts的匠心data.ts是这个项目的“心脏”。我为其设计了完整的 TypeScript 接口确保数据结构的严谨性。以“项目”部分为例export interface Project { id: number; title: string; description: string; longDescription?: string; // 可选的详细描述 techStack: string[]; // 技术栈图标名称与Skill Icons API对应 links: { github?: string; live?: string; // 可扩展其他链接类型 }; imageUrl?: string; // 项目封面图路径 } export const PROJECTS: Project[] [ { id: 1, title: E-Commerce Dashboard, description: A real-time analytics dashboard for e-commerce platforms., techStack: [nextjs, typescript, tailwind, nodejs, mongodb], links: { github: https://github.com/yourname/project, live: https://project-demo.vercel.app } }, // ... 更多项目 ];这种设计的好处是当你需要增加一个新的项目时只需要在这个数组里新增一个对象即可。前端的Projects组件会自动遍历这个数组生成统一风格的项目卡片。techStack字段使用了字符串数组这些字符串会动态匹配 Skill Icons 这个免费的图标 API生成对应的技术栈图标既美观又免去了手动管理图标文件的麻烦。3.3 主题与样式系统实现无缝深色模式深色模式已成为现代网站的标配。我使用next-themes库来管理主题状态它在底层利用了 React 的 Context API 和 localStorage。在app/providers.tsx中我包裹了ThemeProvider。关键实现步骤Tailwind 配置在tailwind.config.js的darkMode设置为class这意味着深色模式通过给 HTML 元素添加.dark类来触发。定义颜色变量在globals.css中我使用 CSS 变量定义了一套浅色和深色主题的颜色方案。例如:root { --background: 0 0% 100%; --foreground: 222.2 84% 4.9%; } .dark { --background: 222.2 84% 4.9%; --foreground: 210 40% 98%; }组件中应用在组件中通过bg-background和text-foreground这样的类名来引用这些变量。当主题切换时Tailwind 会自动应用对应的颜色。切换控件ThemeToggle组件是一个客户端组件使用了use client它读取当前主题并提供按钮在light、dark、system之间切换。系统偏好通过window.matchMedia((prefers-color-scheme: dark))来监听。实操心得处理主题切换时的闪屏FOUC是一个常见问题。next-themes通过将主题信息存储在localStorage并在服务端初始渲染时注入一个脚本片段来解决。确保你的根布局 (app/layout.tsx) 是一个服务端组件并在body标签上设置suppressHydrationWarning属性可以进一步避免 React 水合过程中的不匹配警告。4. 核心功能模块实现详解4.1 导航栏与滚动间谍Scroll Spy导航栏 (Navbar) 不仅要好看更要好用。我实现了一个滚动间谍功能当用户滚动页面时导航栏上对应页面章节的链接会高亮。这通过Intersection Observer API和 React 的useState、useEffect配合实现。实现逻辑为每个章节的容器元素如section idprojects添加一个唯一的id。在Navbar组件中为每个导航链接设置对应的href#projects。在page.tsx或一个自定义 Hook 中创建所有章节id的数组。使用useEffect初始化一个IntersectionObserver观察所有章节元素。当某个章节进入视口或占据较大比例时更新一个状态变量activeSection。Navbar组件根据activeSection的值为对应的链接添加高亮样式。技术细节为了平滑滚动我使用了scrollIntoView({ behavior: smooth })方法。同时为了避免在滚动过程中过于频繁地触发高亮切换我为IntersectionObserver设置了合适的threshold如 0.5和rootMargin。4.2 动态数据获取GitHub 与 LeetCode 集成静态的技能描述不如动态的数据有说服力。集成外部数据让作品集“活”了起来。GitHub 贡献日历 我使用了react-github-calendar这个轻量级库。它只需要你的 GitHub 用户名就能渲染出类似 GitHub 个人主页的贡献热力图。为了提升性能我将其封装在一个服务端组件中在构建时或运行时通过库内部逻辑获取数据并生成静态 SVG。这样访客看到的就是一张图片无需等待客户端 JavaScript 执行。LeetCode 数据统计 LeetCode 没有官方公开的简易 API但可以通过其 GraphQL 接口查询数据。我在LeetCodeSection组件中创建了一个服务端函数来发起 GraphQL 请求。这里有一个关键点避免将 API 密钥或敏感信息暴露给客户端。所有数据获取逻辑都必须在服务端完成。// 这是一个在服务端运行的函数示例 async function fetchLeetCodeData(username: string) { const query query getUserProfile($username: String!) { matchedUser(username: $username) { submitStats { acSubmissionNum { difficulty count } } } } ; const response await fetch(https://leetcode.com/graphql, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ query, variables: { username } }), }); const data await response.json(); return data; }注意事项直接从前端调用 LeetCode GraphQL 接口可能会遇到 CORS 限制。更稳健的做法是在 Next.js 项目中创建一个 API Route如app/api/leetcode/route.ts在前端调用这个自己的接口再由这个接口去请求 LeetCode。这样既解决了 CORS 问题也便于缓存和错误处理。我在项目中提供了这种模式的示例。4.3 响应式与图片优化响应式设计全程采用移动优先Mobile First的原则。使用 Tailwind 的响应式前缀如md:,lg:来定义不同断点下的样式。例如导航栏在移动端是汉堡菜单在桌面端是横排项目网格在移动端是单列在平板端是两列在桌面端是三列。图片优化Next.js 的Image组件是性能利器。对于个人头像和项目截图我都使用Image组件。它会自动对图片进行现代格式WebP/AVIF转换、尺寸优化和懒加载。import Image from next/image; Image src/profile-image.jpg altYour Name width{200} height{200} classNamerounded-full priority // 对关键图片如英雄区头像使用 priority 预加载 /务必在next.config.ts中配置好images域如果你使用外部图片托管服务的话。5. 开发、构建与部署全流程实操5.1 本地开发环境搭建首先确保你的 Node.js 版本在 18.17 以上。我推荐使用nvm(Node Version Manager) 来管理多版本。# 1. 克隆项目 git clone https://github.com/shasbinas/my-portfolio-nextjs.git cd my-portfolio-nextjs # 2. 安装依赖 (我使用 pnpm速度更快磁盘空间更省) pnpm install # 3. 启动开发服务器 pnpm dev此时打开http://localhost:3000你应该能看到一个完整的作品集页面并且支持热重载。Turbopack 的快速刷新体验会让你印象深刻。5.2 个性化内容配置这是最关键的一步。打开src/components/constants/data.ts文件你会看到所有可配置的常量对象。ABOUT_ME填写你的姓名、头衔、简介、邮箱、地理位置等。简介部分支持 Markdown 语法可以加粗、换行、添加链接。USER_NAMES填入你的 GitHub 和 LeetCode 用户名。如果你不想展示某一项直接留空字符串对应板块会自动隐藏。SOCIAL_LINKS更新所有社交媒体的链接。图标来自Lucide React和React Icons你可以轻松替换。SKILLS技能分为多个类别如Frontend,Backend,Tools。每个技能项的名称name会用于从 Skill Icons API 获取图标请确保名称与其支持的图标名一致可去其官网查询。PROJECTS这是重头戏。为你最得意的 3-6 个项目填写详细信息。techStack数组里的字符串同样对应 Skill Icons。imageUrl可以是/projects/project1.jpg这样的本地路径也可以是外部 URL。EXPERIENCE和EDUCATION按时间倒序填写你的经历。description字段同样支持 Markdown可以列出你的职责和成就。5.3 样式与主题微调如果你对默认的颜色、字体或间距不满意主要修改两个文件tailwind.config.js在这里扩展你的设计系统。例如修改theme.extend.colors来定义品牌色修改fontFamily来引入自定义字体需要先在globals.css中通过import或font-face加载字体文件。src/app/globals.css文件顶部的tailwind指令不要动。你可以在下面添加自定义的 CSS 变量或全局样式。我定义的主题 CSS 变量也在这里。5.4 代码质量与格式化项目已集成 ESLint 和 Prettier并配置了保存时自动格式化需在 VSCode 中安装 Prettier 插件并启用formatOnSave。# 手动检查代码格式问题 pnpm lint # 手动格式化所有代码 pnpm format # 检查格式化CI/CD 中常用 pnpm format:check5.5 构建与生产部署在部署前务必进行生产构建以检查是否存在错误或优化建议。# 执行生产构建 pnpm buildNext.js 构建器会进行严格的代码分析和优化。如果构建成功你会看到页面路由、静态资源、打包大小等详细信息。然后可以本地预览生产版本pnpm start部署推荐 Vercel这是最无缝的部署体验。将你的代码仓库连接到 Vercel它会自动识别为 Next.js 项目并配置好构建和部署命令。每次向main分支推送代码Vercel 都会自动触发一次新的部署。你还可以配置自定义域名、启用 HTTPS 等。部署到其他平台如果你有自己的服务器或使用其他云服务如 AWS, GCPNext.js 应用可以构建为独立的静态文件通过next export但 App Router 下某些功能受限或作为 Node.js 服务器运行。项目中的Dockerfile提供了一个容器化部署的示例。6. 常见问题、性能优化与避坑指南在实际开发和部署过程中我遇到并解决了一些典型问题这里分享给大家。6.1 常见问题排查问题现象可能原因解决方案本地pnpm dev启动失败端口占用3000 端口已被其他程序使用运行pnpm dev --port 3001指定新端口或关闭占用端口的进程。构建失败提示 TypeScript 类型错误data.ts中数据格式不符合接口定义根据终端报错信息检查并修正data.ts中对应字段的类型。确保techStack是字符串数组links对象结构正确。页面样式错乱Tailwind 类名未生效tailwind.config.js配置错误或内容路径未包含检查tailwind.config.js中content字段确保包含了所有模板文件路径[./src/**/*.{js,ts,jsx,tsx}]。GitHub 日历或 LeetCode 数据不显示API 请求失败、用户名错误、网络问题1. 检查USER_NAMES中的用户名是否正确。2. 打开浏览器开发者工具Network面板查看 API 请求是否返回错误。3. 对于 LeetCode尝试使用前文提到的 API Route 代理方案绕过 CORS。深色模式切换闪屏主题在客户端 JavaScript 加载后才确定确保使用了next-themes并正确配置。检查app/providers.tsx和app/layout.tsx的实现确保ThemeProvider包裹了根布局且suppressHydrationWarning已设置。图片加载缓慢或布局偏移未使用 Next.jsImage组件或未指定尺寸所有图片都应使用Image组件并明确设置width和height属性。对于外部图片在next.config.ts中配置images.remotePatterns。流体光标动画导致页面卡顿低性能设备上 WebGL 压力大在FluidCursor组件或调用它的 Hook 中可以添加设备性能检测逻辑在低端设备上自动禁用该效果。6.2 性能优化要点善用服务端组件 (RSC)将数据获取、静态内容渲染的逻辑尽可能放在服务端组件中。这能减少发送到客户端的 JavaScript 包体积提升首屏性能。本项目中的GithubSection、LeetCodeSection、Projects如果项目数据是静态的都应设为服务端组件。动态导入与代码分割对于非首屏必需的、较大的组件例如复杂的图表库、某些第三方交互组件使用next/dynamic进行动态导入并设置ssr: false。例如const HeavyComponent dynamic(() import(/components/HeavyComponent), { ssr: false });图片优化是重中之重务必使用next/image。对于作品集网站图片往往是流量大头。通过配置合适的sizes属性和quality参数可以在视觉质量和加载速度间取得最佳平衡。分析包大小定期使用pnpm run build后 Next.js 生成的构建分析报告或使用next/bundle-analyzer插件查看哪些依赖包体积过大考虑是否有更轻量的替代方案。谨慎使用动画库Framer Motion 很强大但滥用会导致性能问题。避免在长列表或频繁渲染的组件上使用复杂的动画。使用will-changeCSS 属性提示浏览器优化并确保动画在用户交互如悬停时触发而非自动播放。6.3 进阶定制与扩展思路当你熟悉了项目基础后可以考虑以下方向进行深度定制接入 CMS内容管理系统如果你希望非技术人员也能更新作品集内容可以将data.ts中的数据迁移到 Headless CMS如 Sanity, Contentful, Strapi中。然后使用 Next.js 的generateStaticParams或服务端数据获取在构建时或请求时从 CMS 拉取数据。增加博客模块利用 Next.js 15 的 App Router 和 MDX可以轻松地增加一个/blog路由用 Markdown 文件来写博客。next-mdx-remote或next/mdx都是不错的选择。国际化 (i18n)如果你面向国际受众可以集成next-intl或react-i18next来实现多语言切换。这需要将data.ts中的所有文本内容提取为多语言字典。增强分析除了 Vercel Analytics可以集成更细粒度的分析工具如umami自托管、隐私友好或PostHog来了解访客如何与你的作品集互动。添加测试为关键组件如Navbar,ProjectCard添加单元测试使用 Jest 和 React Testing Library为关键用户流程如导航、主题切换添加端到端测试使用 Cypress 或 Playwright确保后续更新不会破坏核心功能。这个项目是我对现代前端开发最佳实践的一次集中实践。它不仅仅是一个模板更是一个学习 Next.js 15、React 19 和 TypeScript 的鲜活案例。我把它开源出来希望它能帮助更多人高效地搭建起属于自己的专业技术名片。在实际使用中最深的体会是清晰的架构和单一的数据源是长期可维护性的关键。当你需要更新内容时只需修改data.ts当你需要调整样式时Tailwind 和 CSS 变量让你游刃有余。技术会不断更新但好的设计原则是永恒的。如果你在使用的过程中有任何问题或改进的想法欢迎在 GitHub 仓库提交 Issue 或 Pull Request。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2607878.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…