Skip to content
Merged
  •  
  •  
  •  
8 changes: 4 additions & 4 deletions app/components/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export async function Footer() {
<ul className="space-y-3 font-body text-sm text-[var(--foreground)]">
<li>
<Link
href="/docs/ai"
href="/docs/learn/ai"
className="hover:text-[#CC0000] transition-colors"
data-umami-event="navigation_click"
data-umami-event-region="footer"
Expand All @@ -74,7 +74,7 @@ export async function Footer() {
</li>
<li>
<Link
href="/docs/computer-science"
href="/docs/learn/cs"
className="hover:text-[#CC0000] transition-colors"
data-umami-event="navigation_click"
data-umami-event-region="footer"
Expand All @@ -85,7 +85,7 @@ export async function Footer() {
</li>
<li>
<Link
href="/docs/CommunityShare"
href="/docs/community"
className="hover:text-[#CC0000] transition-colors"
data-umami-event="navigation_click"
data-umami-event-region="footer"
Expand All @@ -96,7 +96,7 @@ export async function Footer() {
</li>
<li>
<Link
href="/docs/jobs"
href="/docs/career"
className="hover:text-[#CC0000] transition-colors"
data-umami-event="navigation_click"
data-umami-event-region="footer"
Expand Down
10 changes: 5 additions & 5 deletions app/components/Hero.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,22 @@ export async function Hero() {
{
title: t("categories.ai.title"),
desc: t("categories.ai.desc"),
href: "/docs/ai",
href: "/docs/learn/ai",
},
{
title: t("categories.cs.title"),
desc: t("categories.cs.desc"),
href: "/docs/computer-science",
href: "/docs/learn/cs",
},
{
title: t("categories.jobs.title"),
desc: t("categories.jobs.desc"),
href: "/docs/jobs/interview-prep/bq",
href: "/docs/career/interview-prep/bq",
},
{
title: t("categories.community.title"),
desc: t("categories.community.desc"),
href: "/docs/CommunityShare",
href: "/docs/community",
},
];

Expand Down Expand Up @@ -91,7 +91,7 @@ export async function Hero() {
{t("join.body")}
</p>
<Link
href="/docs/ai"
href="/docs/learn/ai"
className="block w-full"
data-umami-event="navigation_click"
data-umami-event-region="hero_cta"
Expand Down
20 changes: 10 additions & 10 deletions app/components/docs/SectionIndex.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import type { PageTree } from "fumadocs-core/server";
*
* 三处使用场景:
* 1. /docs landing SectionIndex 不传参 列出顶层分区(ai / cs / 群友分享 等)
* 2. CommunityShare 首页 SectionIndex root=CommunityShare 列出 Geek / Leetcode / RAG 等子分类
* 3. Leetcode 首页 SectionIndex root=CommunityShare/Leetcode 列出全部 Leetcode 题解
* 2. community 首页 SectionIndex root=community 列出 Geek / Leetcode / RAG 等子分类
* 3. career/interview-prep/leetcode 首页 SectionIndex root=career/interview-prep/leetcode 列出全部 Leetcode 题解
*
* ----------------------------------------------------------------------------
* 为什么不直接用 fumadocs 自带的?
Expand All @@ -27,7 +27,7 @@ import type { PageTree } from "fumadocs-core/server";
* children:
* Folder
* name = AI 知识库
* index = Page(url=/docs/ai, name=AI 知识库) // 有 index.mdx
* index = Page(url=/docs/learn/ai, name=AI 知识库) // 有 index.mdx
* children: [Page, Folder, ...]
* Folder
* name = All projects
Expand All @@ -53,7 +53,7 @@ type FolderNode = Extract<PageTree.Node, { type: "folder" }>;

interface SectionIndexProps {
/**
* 从 pageTree 根往下走的目录路径,段之间用 / 分隔,例如 CommunityShare/Leetcode
* 从 pageTree 根往下走的目录路径,段之间用 / 分隔,例如 career/interview-prep/leetcode
* 不传 = 直接用 pageTree 根节点本身(用于 /docs landing)。
*/
root?: string;
Expand All @@ -69,9 +69,9 @@ interface CardEntry {
/**
* 从 pageTree 根一路钻到 root 指定的目录节点。
*
* 举例:root = CommunityShare/Leetcode
* 1) 根的 children 里找 segmentName = CommunityShare 的 folder
* 2) 再在这个 folder 的 children 里找 segmentName = Leetcode 的 folder
* 举例:root = career/interview-prep/leetcode
* 1) 根的 children 里找 segmentName = career 的 folder
* 2) 再在这个 folder 的 children 里找 segmentName = interview-prep/leetcode 的 folder
* 3) 返回这个 folder 节点
*
* 任一段找不到就返回 null(组件会渲染一个明显的错误提示,而不是静默空页)。
Expand Down Expand Up @@ -101,7 +101,7 @@ function findFolderByPath(
* 为什么不直接用 folder.name:
* fumadocs 的 FolderNode.name 是 ReactNode 类型(可能是 string,也可能是 JSX),
* 直接字符串比较会在极端情况踩坑。更可靠的办法是从 folder.index.url 反推——
* 比如 /docs/CommunityShare/Geek 最后一段 Geek 就是目录名。
* 比如 /docs/community/dev-tips 最后一段 Geek 就是目录名。
*
* 没 index 时退回 name.toString()。目前仓库里这种情况目录名都是纯字符串,
* 所以兜底够用。
Expand Down Expand Up @@ -154,10 +154,10 @@ function buildCanonicalUrlSet(): Set<string> {
* 用途:folder 没有自己的 index.mdx 时,不能硬拼 /docs/<folder> 做卡片链接(Next 路由
* 里没这条,会 404)。所以往里走一层,找到第一个 page 文件的 url 拿来做兜底链接。比如:
*
* CommunityShare/Language/ 没 index.mdx
* community/language/ 没 index.mdx
* pte-intro.mdx 用这篇的 url 做兜底
*
* 点击卡片会进到 /docs/CommunityShare/Language/pte-intro,不会 404。
* 点击卡片会进到 /docs/community/language/pte-intro,不会 404。
*/
function findFirstPageUrl(
nodes: PageTree.Node[],
Expand Down
2 changes: 1 addition & 1 deletion app/docs/[...slug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ export async function generateMetadata({ params }: Param): Promise<Metadata> {
notFound();
}

// 规范化 slug → canonical 路径。用户访问 /docs/ai/rl(原文)或 /docs/ai/rl.en(翻译版)
// 规范化 slug → canonical 路径。用户访问 /docs/learn/ai/rl(原文)或 /docs/learn/ai/rl.en(翻译版)
// 都统一指向原始 slug,避免两个 URL 竞争同一份内容的 PageRank。
const slugPath = (slug ?? []).join("/");
const canonical = slugPath ? `/docs/${slugPath}` : "/docs";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@ title: Senior Tech-Industry Engineer Coffee Chat Recap
description: ""
date: "2025-11-01"
tags:
- tag-one
- career
- networking
- tech-industry
- australia-job-market
- career-path
- sre
docId: ld59a8z1v84ig4rlr0p0n2a9
lang: en
translatedFrom: zh
Expand Down Expand Up @@ -94,7 +99,7 @@ Planning your timeline well in advance is crucial — internships are often the

- Connect broadly on LinkedIn to build your personal platform — treat it as a professional showcase, not a social feed;
- Real internal company transition example: "From Amazon IT Support to Developer";
- Highly recommended: [Student Job Preparation Guide](https://involutionhell.vercel.app/docs/jobs/interview-prep/preparations-to-get-an-offer-as-a-student).
- Highly recommended: [Student Job Preparation Guide](https://involutionhell.com/docs/career/interview-prep/preparations-to-get-an-offer-as-a-student).

## 6. Visa and International Career Paths: The E-3 Visa

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@ title: 资深科技大厂程序员Coffee Chat回顾
description: ""
date: "2025-11-01"
tags:
- tag-one
- career
- networking
- tech-industry
- australia-job-market
- career-path
- sre
docId: ld59a8z1v84ig4rlr0p0n2a9
---

Expand Down Expand Up @@ -90,7 +95,7 @@ R 老师提醒:**实习申请需提前半年准备**,一般在 2–4 月开

- 领英可以多connect一些人,展示自己的平台,不要当朋友圈发;
- 真实公司内部转型案例:“从亚麻 IT Support 转 Dev”;
- 干货推荐:[学生求职准备指南](https://involutionhell.vercel.app/docs/jobs/interview-prep/preparations-to-get-an-offer-as-a-student)。
- 干货推荐:[学生求职准备指南](https://involutionhell.com/docs/career/interview-prep/preparations-to-get-an-offer-as-a-student)。

## 六、签证与国际发展路径:E3 签证

Expand Down
15 changes: 15 additions & 0 deletions app/docs/career/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
title: Career
description: 求职准备、面试经验、社群活动——从刷题到拿 offer 的全流程。
date: "2026-04-18"
docId: crr0001index2026041800000001
---

import { SectionIndex } from "@/app/components/docs/SectionIndex";

求职场景的一站式内容:

- **Interview Prep**:刷题(LeetCode)、BQ、OA、Video Interview 技巧
- **Events**:Coffee Chat、Mock Interview、Career Journey 等社群活动回顾

<SectionIndex root="career" />
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@ title: "Conquering Every Interview Stage | OA Coding Grind, HireVue Score Tricks
description: ""
date: "2025-09-19"
tags:
- tag-one
- interview-preparation
- online-assessment
- video-interview
- group-interview
- australia-job-market
docId: fkk8ghklsr15a0s3vcxnswnj
lang: en
translatedFrom: zh
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@ title: "面试阶段逐关击破 | OA刷题血泪史 + VI分数偷看技巧 +
description: ""
date: "2025-09-19"
tags:
- tag-one
- interview-preparation
- online-assessment
- video-interview
- group-interview
- australia-job-market
docId: fkk8ghklsr15a0s3vcxnswnj
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ docId: ylpucy1rbbnfpe3t62u8kcfq
[//]: #
[//]: # "<p><strong>Exemplary example 1:</strong></p>"
[//]: #
[//]: # '<p>&lt;img src="https://assets.leetcode.com/uploads/2018/12/07/circularlinkedlist.png" /&gt;</p>'
[//]: # '<p><img src="https://assets.leetcode.com/uploads/2018/12/07/circularlinkedlist.png" /></p>'
[//]: #
[//]: # "<pre>"
[//]: # "<strong>enter:</strong>head = [3,2,0,-4], pos = 1"
Expand All @@ -33,7 +33,7 @@ docId: ylpucy1rbbnfpe3t62u8kcfq
[//]: #
[//]: # "<p><strong>Exemplary example 2:</strong></p>"
[//]: #
[//]: # '<p>&lt;img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/07/circularlinkedlist_test2.png" /&gt;</p>'
[//]: # '<p><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/07/circularlinkedlist_test2.png" /></p>'
[//]: #
[//]: # "<pre>"
[//]: # "<strong>enter:</strong>head = [1,2], pos = 0"
Expand All @@ -43,7 +43,7 @@ docId: ylpucy1rbbnfpe3t62u8kcfq
[//]: #
[//]: # "<p><strong>Exemplary example 3:</strong></p>"
[//]: #
[//]: # '<p>&lt;img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/07/circularlinkedlist_test3.png" /&gt;</p>'
[//]: # '<p><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/07/circularlinkedlist_test3.png" /></p>'
[//]: #
[//]: # "<pre>"
[//]: # "<strong>enter:</strong>head = [1], pos = -1"
Expand All @@ -57,7 +57,7 @@ docId: ylpucy1rbbnfpe3t62u8kcfq
[//]: #
[//]: # "<ul> "
[//]: # " <li>Linked中节点的数目范围在范围 <code>[0, 10<sup>4</sup>]</code> Inside</li> "
[//]: # " <li><code>-10<sup>5</sup> &lt;= Node.val &lt;= 10&lt;sup&gt;5</sup></code></li> "
[//]: # " <li><code>-10<sup>5</sup> <= Node.val <= 10<sup>5</sup></code></li> "
[//]: # " <li><code>pos</code> Value <code>-1</code> 或者Linked中的一indivualhave效索引</li> "
[//]: # "</ul>"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ import { SectionIndex } from "@/app/components/docs/SectionIndex";

欢迎查阅 Leetcode 相关的分享内容。

<SectionIndex root="CommunityShare/Leetcode" />
<SectionIndex root="career/interview-prep/leetcode" />
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ title: "Must-Read Before Your Interview: Four Tips That Significantly Boost Your
description: ""
date: "2025-09-28"
tags:
- tag-one
- interview-preparation
- career
docId: cgo4lweflk5jx1hsncr8hshk
lang: en
translatedFrom: zh
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ title: " 面试前必看:掌握这四个小技巧,你的成功率会大大
description: ""
date: "2025-09-28"
tags:
- tag-one
- interview-preparation
- career
docId: cgo4lweflk5jx1hsncr8hshk
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ title: A Programmer's Guide to Job Searching and Internships as a Student
description: ""
date: "2025-09-29"
tags:
- tag-one
- internship
- job-search
- new-grad
- student-career
docId: pne40puz5alzsf0f5jb0frbm
lang: en
translatedFrom: zh
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ title: 程序员学生时期求职与实习经验分享
description: ""
date: "2025-09-29"
tags:
- tag-one
- internship
- job-search
- new-grad
- student-career
docId: pne40puz5alzsf0f5jb0frbm
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@ title: Building a Personal/Team "Permanent" Image Host with Cloudflare R2 + Shar
description: ""
date: "2025-09-27"
tags:
- tag-one
- image-hosting
- cloudflare-r2
- sharex
- self-hosting
- cdn
docId: gj4bn01un0s0841berfvwrn5
lang: en
translatedFrom: zh
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@ title: 使用 Cloudflare R2 + ShareX 搭建个人/团队专属“永久”图床
description: ""
date: "2025-09-27"
tags:
- tag-one
- image-hosting
- cloudflare-r2
- sharex
- self-hosting
- cdn
docId: gj4bn01un0s0841berfvwrn5
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ title: Git Getting Started Guide — Git Tips Every Developer Should Know
description: ""
date: "2025-09-19"
tags:
- tag-one
- git-basics
- version-control
- git-workflow
- programmer-essentials
docId: tksz80mfqqyzwzzer5p3uxtg
lang: en
translatedFrom: zh
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ title: Git入门操作指南-程序员必会的git小技巧
description: ""
date: "2025-09-19"
tags:
- tag-one
- git-basics
- version-control
- git-workflow
- programmer-essentials
docId: tksz80mfqqyzwzzer5p3uxtg
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ title: How to Deploy Your Own GitHub Image Hosting with PictureCDN
description: ""
date: "2025-09-27"
tags:
- tag-one
- image-hosting
- github-pages
- cdn
- self-hosting
docId: e6udpzrorhvgeeda6xpy1e0s
lang: en
translatedFrom: zh
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ title: 如何部署你自己的Github图床-PictureCDN
description: ""
date: "2025-09-27"
tags:
- tag-one
- image-hosting
- github-pages
- cdn
- self-hosting
docId: e6udpzrorhvgeeda6xpy1e0s
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ import { SectionIndex } from "@/app/components/docs/SectionIndex";

> 转载文章请先联系原作者获取授权,谢谢!

<SectionIndex root="CommunityShare" />
<SectionIndex root="community" />
Loading
Loading