feat: rename Golang files to Chinese and supplement root files

Changes:
- Renamed all 10 Golang files from English to Chinese names
- Created 00-项目概述/项目概述.md with comprehensive project overview
- Created 08-算法与数据结构/算法与数据结构学习指南.md with detailed learning guide
- Created 12-面试技巧/面试准备进度.md with progress tracking
- Added .obsidian configuration for better markdown editing
- Updated Claude.MD with Chinese filename rule

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
This commit is contained in:
yasinshaw
2026-03-01 00:33:32 +08:00
parent ab3a99f131
commit 7f3ab362b3
21 changed files with 1903 additions and 0 deletions

1
.obsidian/app.json vendored Normal file
View File

@@ -0,0 +1 @@
{}

1
.obsidian/appearance.json vendored Normal file
View File

@@ -0,0 +1 @@
{}

3
.obsidian/community-plugins.json vendored Normal file
View File

@@ -0,0 +1,3 @@
[
"obsidian-git"
]

33
.obsidian/core-plugins.json vendored Normal file
View File

@@ -0,0 +1,33 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"canvas": true,
"outgoing-link": true,
"tag-pane": true,
"footnotes": false,
"properties": true,
"page-preview": true,
"daily-notes": true,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"editor-status": true,
"bookmarks": true,
"markdown-importer": false,
"zk-prefixer": false,
"random-note": false,
"outline": true,
"word-count": true,
"slides": false,
"audio-recorder": false,
"workspaces": false,
"file-recovery": true,
"publish": false,
"sync": true,
"bases": true,
"webviewer": false
}

452
.obsidian/plugins/obsidian-git/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,10 @@
{
"author": "Vinzent",
"authorUrl": "https://github.com/Vinzent03",
"id": "obsidian-git",
"name": "Git",
"description": "Integrate Git version control with automatic backup and other advanced features.",
"isDesktopOnly": false,
"fundingUrl": "https://ko-fi.com/vinzent",
"version": "2.37.1"
}

View File

@@ -0,0 +1,705 @@
@keyframes loading {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.git-signs-gutter {
.cm-gutterElement {
/* Needed to align the sign properly for different line heigts. Such as
* when having a heading or list item.
*/
padding-top: 0 !important;
}
}
.workspace-leaf-content[data-type="git-view"] .button-border {
border: 2px solid var(--interactive-accent);
border-radius: var(--radius-s);
}
.workspace-leaf-content[data-type="git-view"] .view-content {
padding-left: 0;
padding-top: 0;
padding-right: 0;
}
.workspace-leaf-content[data-type="git-history-view"] .view-content {
padding-left: 0;
padding-top: 0;
padding-right: 0;
}
.loading {
overflow: hidden;
}
.loading > svg {
animation: 2s linear infinite loading;
transform-origin: 50% 50%;
display: inline-block;
}
.obsidian-git-center {
margin: auto;
text-align: center;
width: 50%;
}
.obsidian-git-textarea {
display: block;
margin-left: auto;
margin-right: auto;
}
.obsidian-git-disabled {
opacity: 0.5;
}
.obsidian-git-center-button {
display: block;
margin: 20px auto;
}
.tooltip.mod-left {
overflow-wrap: break-word;
}
.tooltip.mod-right {
overflow-wrap: break-word;
}
/* Limits the scrollbar to the view body */
.git-view {
display: flex;
flex-direction: column;
position: relative;
height: 100%;
}
.git-tools {
display: flex;
margin-left: auto;
}
.git-tools .type {
padding-left: var(--size-2-1);
display: flex;
align-items: center;
justify-content: center;
width: 11px;
}
.git-tools .type[data-type="M"] {
color: orange;
}
.git-tools .type[data-type="D"] {
color: red;
}
.git-tools .buttons {
display: flex;
}
.git-tools .buttons > * {
padding: 0 0;
height: auto;
}
.workspace-leaf-content[data-type="git-view"] .tree-item-self,
.workspace-leaf-content[data-type="git-history-view"] .tree-item-self {
align-items: center;
}
.workspace-leaf-content[data-type="git-view"]
.tree-item-self:hover
.clickable-icon,
.workspace-leaf-content[data-type="git-history-view"]
.tree-item-self:hover
.clickable-icon {
color: var(--icon-color-hover);
}
/* Highlight an item as active if it's diff is currently opened */
.is-active .git-tools .buttons > * {
color: var(--nav-item-color-active);
}
.git-author {
color: var(--text-accent);
}
.git-date {
color: var(--text-accent);
}
.git-ref {
color: var(--text-accent);
}
/* ====== diff2html ======
The following styles are adapted from the obsidian-version-history plugin by
@kometenstaub https://github.com/kometenstaub/obsidian-version-history-diff/blob/main/src/styles.scss
which itself is adapted from the diff2html library with the following original license:
https://github.com/rtfpessoa/diff2html/blob/master/LICENSE.md
Copyright 2014-2016 Rodrigo Fernandes https://rtfpessoa.github.io/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
.theme-dark,
.theme-light {
--git-delete-bg: #ff475040;
--git-delete-hl: #96050a75;
--git-insert-bg: #68d36840;
--git-insert-hl: #23c02350;
--git-change-bg: #ffd55840;
--git-selected: #3572b0;
--git-delete: #c33;
--git-insert: #399839;
--git-change: #d0b44c;
--git-move: #3572b0;
}
.git-diff {
.d2h-d-none {
display: none;
}
.d2h-wrapper {
text-align: left;
border-radius: 0.25em;
overflow: auto;
}
.d2h-file-header.d2h-file-header {
background-color: var(--background-secondary);
border-bottom: 1px solid var(--background-modifier-border);
font-family:
Source Sans Pro,
Helvetica Neue,
Helvetica,
Arial,
sans-serif;
height: 35px;
padding: 5px 10px;
}
.d2h-file-header,
.d2h-file-stats {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
.d2h-file-header {
display: none;
}
.d2h-file-stats {
font-size: 14px;
margin-left: auto;
}
.d2h-lines-added {
border: 1px solid var(--color-green);
border-radius: 5px 0 0 5px;
color: var(--color-green);
padding: 2px;
text-align: right;
vertical-align: middle;
}
.d2h-lines-deleted {
border: 1px solid var(--color-red);
border-radius: 0 5px 5px 0;
color: var(--color-red);
margin-left: 1px;
padding: 2px;
text-align: left;
vertical-align: middle;
}
.d2h-file-name-wrapper {
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 15px;
width: 100%;
}
.d2h-file-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: var(--text-normal);
font-size: var(--h5-size);
}
.d2h-file-wrapper {
border: 1px solid var(--background-secondary-alt);
border-radius: 3px;
margin-bottom: 1em;
max-height: 100%;
}
.d2h-file-collapse {
-webkit-box-pack: end;
-ms-flex-pack: end;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
border: 1px solid var(--background-secondary-alt);
border-radius: 3px;
cursor: pointer;
display: none;
font-size: 12px;
justify-content: flex-end;
padding: 4px 8px;
}
.d2h-file-collapse.d2h-selected {
background-color: var(--git-selected);
}
.d2h-file-collapse-input {
margin: 0 4px 0 0;
}
.d2h-diff-table {
border-collapse: collapse;
font-family: var(--font-monospace);
font-size: var(--code-size);
width: 100%;
}
.d2h-files-diff {
width: 100%;
}
.d2h-file-diff {
/*
overflow-y: scroll;
*/
border-radius: 5px;
font-size: var(--font-text-size);
line-height: var(--line-height-normal);
}
.d2h-file-side-diff {
display: inline-block;
margin-bottom: -8px;
margin-right: -4px;
overflow-x: scroll;
overflow-y: hidden;
width: 50%;
}
.d2h-code-line {
padding-left: 6em;
padding-right: 1.5em;
}
.d2h-code-line,
.d2h-code-side-line {
display: inline-block;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
width: 100%;
}
.d2h-code-side-line {
/* needed to be changed */
padding-left: 0.5em;
padding-right: 0.5em;
}
.d2h-code-line-ctn {
word-wrap: normal;
background: none;
display: inline-block;
padding: 0;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
vertical-align: middle;
width: 100%;
/* only works for line-by-line */
white-space: pre-wrap;
}
.d2h-code-line del,
.d2h-code-side-line del {
background-color: var(--git-delete-hl);
color: var(--text-normal);
}
.d2h-code-line del,
.d2h-code-line ins,
.d2h-code-side-line del,
.d2h-code-side-line ins {
border-radius: 0.2em;
display: inline-block;
margin-top: -1px;
text-decoration: none;
vertical-align: middle;
}
.d2h-code-line ins,
.d2h-code-side-line ins {
background-color: var(--git-insert-hl);
text-align: left;
}
.d2h-code-line-prefix {
word-wrap: normal;
background: none;
display: inline;
padding: 0;
white-space: pre;
}
.line-num1 {
float: left;
}
.line-num1,
.line-num2 {
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow: hidden;
/*
padding: 0 0.5em;
*/
text-overflow: ellipsis;
width: 2.5em;
padding-left: 0;
}
.line-num2 {
float: right;
}
.d2h-code-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-faint);
cursor: pointer;
display: inline-block;
position: absolute;
text-align: right;
width: 5.5em;
}
.d2h-code-linenumber:after {
content: "\200b";
}
.d2h-code-side-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-faint);
cursor: pointer;
overflow: hidden;
padding: 0 0.5em;
text-align: right;
text-overflow: ellipsis;
width: 4em;
/* needed to be changed */
display: table-cell;
position: relative;
}
.d2h-code-side-linenumber:after {
content: "\200b";
}
.d2h-code-side-emptyplaceholder,
.d2h-emptyplaceholder {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
}
.d2h-code-line-prefix,
.d2h-code-linenumber,
.d2h-code-side-linenumber,
.d2h-emptyplaceholder {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.d2h-code-linenumber,
.d2h-code-side-linenumber {
direction: rtl;
}
.d2h-del {
background-color: var(--git-delete-bg);
border-color: var(--git-delete-hl);
}
.d2h-ins {
background-color: var(--git-insert-bg);
border-color: var(--git-insert-hl);
}
.d2h-info {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
color: var(--text-faint);
}
.d2h-del,
.d2h-ins,
.d2h-file-diff .d2h-change {
color: var(--text-normal);
}
.d2h-file-diff .d2h-del.d2h-change {
background-color: var(--git-change-bg);
}
.d2h-file-diff .d2h-ins.d2h-change {
background-color: var(--git-insert-bg);
}
.d2h-file-list-wrapper {
a {
text-decoration: none;
cursor: default;
-webkit-user-drag: none;
}
svg {
display: none;
}
}
.d2h-file-list-header {
text-align: left;
}
.d2h-file-list-title {
display: none;
}
.d2h-file-list-line {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
text-align: left;
}
.d2h-file-list {
}
.d2h-file-list > li {
border-bottom: 1px solid var(--background-modifier-border);
margin: 0;
padding: 5px 10px;
}
.d2h-file-list > li:last-child {
border-bottom: none;
}
.d2h-file-switch {
cursor: pointer;
display: none;
font-size: 10px;
}
.d2h-icon {
fill: currentColor;
margin-right: 10px;
vertical-align: middle;
}
.d2h-deleted {
color: var(--git-delete);
}
.d2h-added {
color: var(--git-insert);
}
.d2h-changed {
color: var(--git-change);
}
.d2h-moved {
color: var(--git-move);
}
.d2h-tag {
background-color: var(--background-secondary);
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 10px;
margin-left: 5px;
padding: 0 2px;
}
.d2h-deleted-tag {
border: 1px solid var(--git-delete);
}
.d2h-added-tag {
border: 1px solid var(--git-insert);
}
.d2h-changed-tag {
border: 1px solid var(--git-change);
}
.d2h-moved-tag {
border: 1px solid var(--git-move);
}
/* needed for line-by-line*/
.d2h-diff-tbody {
position: relative;
}
}
/* ====================== Line Authoring Information ====================== */
.cm-gutterElement.obs-git-blame-gutter {
/* Add background color to spacing inbetween and around the gutter for better aesthetics */
border-width: 0px 2px 0.2px 2px;
border-style: solid;
border-color: var(--background-secondary);
background-color: var(--background-secondary);
}
.cm-gutterElement.obs-git-blame-gutter > div,
.line-author-settings-preview {
/* delegate text color to settings */
color: var(--obs-git-gutter-text);
font-family: monospace;
height: 100%; /* ensure, that age-based background color occupies entire parent */
text-align: right;
padding: 0px 6px 0px 6px;
white-space: pre; /* Keep spaces and do not collapse them. */
}
@media (max-width: 800px) {
/* hide git blame gutter not to superpose text */
.cm-gutterElement.obs-git-blame-gutter {
display: none;
}
}
.git-unified-diff-view,
.git-split-diff-view .cm-deletedLine .cm-changedText {
background-color: #ee443330;
}
.git-unified-diff-view,
.git-split-diff-view .cm-insertedLine .cm-changedText {
background-color: #22bb2230;
}
.git-obscure-prompt[git-is-obscured="true"] #git-show-password:after {
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg>');
}
.git-obscure-prompt[git-is-obscured="false"] #git-show-password:after {
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye-off"><path d="M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"></path><path d="M14.084 14.158a3 3 0 0 1-4.242-4.242"></path><path d="M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143"></path><path d="m2 2 20 20"></path></svg>');
}
/* Override styling of Codemirror merge view "collapsed lines" indicator */
.git-split-diff-view .ͼ2 .cm-collapsedLines {
background: var(--interactive-normal);
border-radius: var(--radius-m);
color: var(--text-accent);
font-size: var(--font-small);
padding: var(--size-4-1) var(--size-4-1);
}
.git-split-diff-view .ͼ2 .cm-collapsedLines:hover {
background: var(--interactive-hover);
color: var(--text-accent-hover);
}
.git-signs-gutter {
.cm-gutterElement {
display: grid;
}
}
.git-gutter-marker:hover {
border-radius: 2px;
}
.git-gutter-marker.git-add {
background-color: var(--color-green);
justify-self: center;
height: inherit;
width: 0.2rem;
}
.git-gutter-marker.git-change {
background-color: var(--color-yellow);
justify-self: center;
height: inherit;
width: 0.2rem;
}
.git-gutter-marker.git-changedelete {
color: var(--color-yellow);
font-weight: var(--font-bold);
font-size: 1rem;
justify-self: center;
height: inherit;
}
.git-gutter-marker.git-delete {
background-color: var(--color-red);
height: 0.2rem;
width: 0.8rem;
align-self: end;
}
.git-gutter-marker.git-topdelete {
background-color: var(--color-red);
height: 0.2rem;
width: 0.8rem;
align-self: start;
}
div:hover > .git-gutter-marker.git-change {
width: 0.6rem;
}
div:hover > .git-gutter-marker.git-add {
width: 0.6rem;
}
div:hover > .git-gutter-marker.git-delete {
height: 0.6rem;
}
div:hover > .git-gutter-marker.git-topdelete {
height: 0.6rem;
}
div:hover > .git-gutter-marker.git-changedelete {
font-weight: var(--font-bold);
}
.git-gutter-marker.staged {
opacity: 0.5;
}
.git-diff {
.cm-merge-revert {
width: 4em;
}
/* Ensure that merge revert markers are positioned correctly */
.cm-merge-revert > * {
position: absolute;
background-color: var(--background-secondary);
display: flex;
}
}
/* Prevent shifting of the editor when git signs gutter is the only gutter present */
.cm-gutters.cm-gutters-before:has(> .git-signs-gutter:only-child) {
margin-inline-end: 0;
.git-signs-gutter {
margin-inline-start: -1rem;
}
}
.git-changes-status-bar-colored {
.git-add {
color: var(--color-green);
}
.git-change {
color: var(--color-yellow);
}
.git-delete {
color: var(--color-red);
}
}
.git-changes-status-bar .git-add {
margin-right: 0.3em;
}
.git-changes-status-bar .git-change {
margin-right: 0.3em;
}

226
.obsidian/workspace.json vendored Normal file
View File

@@ -0,0 +1,226 @@
{
"main": {
"id": "cfc31b234f9d0e88",
"type": "split",
"children": [
{
"id": "32f5a06066909fa8",
"type": "tabs",
"children": [
{
"id": "fcbc762a80282002",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "questions/elastic-search.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "elastic-search"
}
}
]
}
],
"direction": "vertical"
},
"left": {
"id": "276b96a5bbc9d368",
"type": "split",
"children": [
{
"id": "2374cad907aa10ed",
"type": "tabs",
"children": [
{
"id": "16a7ce8de420dd10",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {
"sortOrder": "alphabetical",
"autoReveal": false
},
"icon": "lucide-folder-closed",
"title": "文件列表"
}
},
{
"id": "d44f4fc7eab3f4fb",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
},
"icon": "lucide-search",
"title": "搜索"
}
},
{
"id": "facb2114dd375ef7",
"type": "leaf",
"state": {
"type": "bookmarks",
"state": {},
"icon": "lucide-bookmark",
"title": "书签"
}
}
]
}
],
"direction": "horizontal",
"width": 300
},
"right": {
"id": "302ba9ccf0f34d23",
"type": "split",
"children": [
{
"id": "c307a3a357cfa8f6",
"type": "tabs",
"children": [
{
"id": "c4d3c0b53796add6",
"type": "leaf",
"state": {
"type": "backlink",
"state": {
"file": "questions/elastic-search.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-coming-in",
"title": "elastic-search 的反向链接列表"
}
},
{
"id": "8767022e398a069a",
"type": "leaf",
"state": {
"type": "outgoing-link",
"state": {
"file": "questions/elastic-search.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-going-out",
"title": "elastic-search 的出链列表"
}
},
{
"id": "fd81199af1061e2b",
"type": "leaf",
"state": {
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-tags",
"title": "标签"
}
},
{
"id": "14164e0847f558c7",
"type": "leaf",
"state": {
"type": "all-properties",
"state": {
"sortOrder": "frequency",
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-archive",
"title": "添加笔记属性"
}
},
{
"id": "90b517de1aa00c75",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"file": "questions/elastic-search.md",
"followCursor": false,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-list",
"title": "elastic-search 的大纲"
}
}
]
}
],
"direction": "horizontal",
"width": 300,
"collapsed": true
},
"left-ribbon": {
"hiddenItems": {
"switcher:打开快速切换": false,
"graph:查看关系图谱": false,
"canvas:新建白板": false,
"daily-notes:打开/创建今天的日记": false,
"templates:插入模板": false,
"command-palette:打开命令面板": false,
"bases:新建数据库": false,
"obsidian-git:Open Git source control": false
}
},
"active": "fcbc762a80282002",
"lastOpenFiles": [
"12-面试技巧/面试准备进度.md",
"12-面试技巧",
"00-项目概述/项目概述.md",
"00-项目概述",
"08-算法与数据结构/算法与数据结构学习指南.md",
"08-算法与数据结构",
"questions/13-Golang语言/数据库操作.md",
"questions/13-Golang语言/项目结构和工程化.md",
"questions/13-Golang语言/反射和unsafe.md",
"questions/13-Golang语言/HTTP和Web开发.md",
"questions/13-Golang语言/性能优化.md",
"questions/13-Golang语言/内存模型和垃圾回收.md",
"questions/13-Golang语言/并发编程进阶.md",
"questions/13-Golang语言/错误处理和测试.md",
"questions/13-Golang语言/Goroutine和并发模型.md",
"questions/13-Golang语言/Golang基础语法.md",
"questions/java-memory.md",
"questions/linux-commands.md",
"questions/elastic-search.md",
"questions/01-分布式系统/分布式事务.md",
"questions/13-Golang语言/go-reflect-unsafe.md",
"questions/13-Golang语言/go-performance.md",
"questions/13-Golang语言/go-database.md",
"questions/13-Golang语言/go-memory-model.md",
"questions/13-Golang语言/go-http-web.md",
"questions/13-Golang语言/go-goroutine.md",
"questions/13-Golang语言/go-engineering.md",
"questions/13-Golang语言/go-concurrent-advanced.md",
"questions/13-Golang语言/go-basic-syntax.md",
"questions/13-Golang语言",
"questions/12-面试技巧",
"questions/11-运维",
"questions/10-中间件",
"questions/09-网络与安全",
"questions/08-算法与数据结构",
"questions/07-系统设计"
]
}

View File

@@ -0,0 +1,157 @@
# 项目概述
## 项目简介
这是一个用于记录和追踪后端 P7 级别面试问题和答案的完整项目。
## 目录结构
```
/Users/yasin/code/interview/
├── 00-项目概述/ # 项目说明(本文件)
├── questions/ # 所有面试题和答案(按主题分类)
└── .git/
```
## 内容组织
### questions/ 目录结构
所有面试题和答案都按主题分类在 `questions/` 目录下:
#### 1. 分布式系统9 个文件)
- 分布式事务
- 分布式锁
- 分布式 ID 生成
- 一致性哈希
- CAP 理论和 BASE 理论
- 数据库分库分表
- MySQL 主从延迟
- 事务隔离级别
- 数据库锁机制
#### 2. 数据库2 个文件)
- MySQL 索引优化
- MyBatis 核心原理
#### 3. 缓存5 个文件)
- 缓存穿透/击穿/雪崩
- Redis 架构
- Redis 数据结构
- ConcurrentHashMap 原理
- LRU 缓存实现
#### 4. 消息队列1 个文件)
- 消息队列RocketMQ/Kafka
#### 5. 并发编程4 个文件)
- Java 并发编程基础
- 线程池核心参数
- 设计模式
- 限流策略与算法
#### 6. JVM1 个文件)
- JVM 和垃圾回收
#### 7. 系统设计10 个文件)
- 秒杀系统设计
- 短链接系统设计
- LBS 附近的人设计
- 即时通讯系统设计
- 社交信息流设计
- API 网关
- 系统设计方法论
- 微服务架构
- RPC 框架
- 服务网格
#### 8. 算法与数据结构6 个文件)
- B+ 树原理
- 红黑树原理
- 跳表原理
- 时间轮算法
- LRU 缓存实现
- 算法与数据结构学习指南
#### 9. 网络与安全3 个文件)
- TCP/IP 网络协议
- 加密与安全
- 性能优化
#### 10. 中间件4 个文件)
- Spring Boot 核心原理
- Nacos 注册中心
- Dubbo 框架
- Nginx
#### 11. 运维4 个文件)
- Docker 容器
- Kubernetes
- CI/CD 持续集成部署
- 可观测性
#### 12. 面试技巧1 个文件)
- 面试技巧和职业规划
#### 13. Golang 语言10 个文件)⭐
- Golang 基础语法
- Goroutine 和并发模型
- 错误处理和测试
- 并发编程进阶
- 内存模型和垃圾回收
- 性能优化
- HTTP 和 Web 开发
- 接口和类型系统
- 反射和 unsafe
- 项目结构和工程化
- 数据库操作
## 面试官设定
- **角色**:资深后端面试官
- **目标职级**P7阿里 P7 相当于资深专家/技术专家)
- **技术栈**Go/Java、微服务、分布式系统、数据库、缓存、消息队列等
## 使用方式
1. **按主题学习**:从你感兴趣或薄弱的主题开始
2. **循序渐进**:先基础,后高级
3. **动手实践**:将代码示例运行起来
4. **定期复习**:面试前定期回顾重点内容
## Git 提交策略
每次面试会话后会提交一个新的 git 版本,方便追踪历史记录。
## 统计信息
- **总文件数**60 个
- **分类数量**13 个
- **总内容量**:约 12,000+ 行
- **覆盖主题**分布式系统、数据库、缓存、消息队列、并发编程、JVM、系统设计、算法与数据结构、网络、安全、性能优化、中间件、运维、面试技巧、Golang 语言
## 学习路径建议
### 初级1-3 个月)
1. 计算机基础
2. 后端核心(语言、并发、内存管理)
3. 数据库基础
### 中级3-6 个月)
1. 分布式系统基础
2. 微服务基础
3. 中间件基础
### 高级6 12 个月)
1. 分布式系统深入
2. 系统设计
3. 性能优化
### P7 级别12 个月+
1. 架构设计能力
2. 技术广度和深度
3. 团队协作和影响力
---
**备注**:建议按照 `questions/` 目录下的主题顺序系统性地学习和准备。

View File

@@ -0,0 +1,121 @@
# 算法与数据结构学习指南
## 概述
本项目包含算法和数据结构相关的面试题和详细解释,涵盖了后端面试中最重要的数据结构及其实现。
## 核心算法主题
### 1. B+ 树B+ Tree
- **位置**`08-算法与数据结构/B+树原理.md`
- **重点**:数据库索引、文件系统
- **核心特性**:多路搜索树、有序叶子节点、高效范围查询
- **应用**MySQL、PostgreSQL、文件系统
### 2. LRU 缓存LRU Cache
- **位置**`08-算法与数据结构/LRU缓存实现.md`
- **重点**:缓存淘汰策略
- **核心特性**最近最少使用淘汰、O(1) 操作
- **应用**Web 缓存、数据库查询缓存、内存管理
### 3. 红黑树Red-Black Tree
- **位置**`08-算法与数据结构/红黑树原理.md`
- **重点**:自平衡二叉搜索树
- **核心特性**红黑着色、O(log n) 操作
- **应用**Java TreeMap、Linux 内核、数据库索引
### 4. 跳表Skip List
- **位置**`08-算法与数据结构/跳表原理.md`
- **重点**:概率型数据结构
- **核心特性**多层链表、O(log n) 操作
- **应用**Redis 有序集合、数据库索引、路由表
### 5. 时间轮Timing Wheel
- **位置**`08-算法与数据结构/时间轮算法.md`
- **重点**:任务调度和延迟执行
- **核心特性**:分层时间桶、高效任务管理
- **应用**:分布式系统、消息队列、缓存过期
## 文档结构
每个算法文档包含:
### 核心组件
1. **原理**:数据结构的详细解释
2. **图解说明**:图表示例
3. **代码实现**:完整可运行的代码
4. **时间复杂度分析**:性能分析
5. **实际应用场景**:真实用例
6. **对比**:与其他数据结构的对比
### 面试重点
- **时间复杂度**:所有操作的大 O 分析
- **空间复杂度**:内存使用分析
- **实际应用**:在何处以及为何使用每种结构
- **常见面试问题**:详细答案的 Q&A 部分
## 使用指南
### 面试准备
1. 从 **B+ 树**开始 - 数据库理解的基础
2. 学习 **LRU 缓存** - 系统设计面试必备
3. 理解 **红黑树** - 理解平衡树
4. 探索 **跳表** - 理解概率平衡方法
5. 掌握 **时间轮** - 分布式系统关键
### 实际实现
- 每个文档包含多种实现方法
- 从基本实现开始,然后探索高级变体
- 研究并发实现用于生产环境
- 理解不同方法的权衡
### 关键学习点
1. **理解"为什么"**:不仅是如何,还有为什么每种结构存在
2. **权衡**:每种结构都有优缺点 - 理解它们
3. **性能**:始终考虑时间和空间复杂度
4. **实际应用**:将正确的结构匹配到正确的问题
## 相关资源
### 系统设计主题
- `01-分布式系统/数据库分库分表.md`:数据库分片策略
- `04-消息队列/消息队列RocketMQ_Kafka.md`:消息队列实现
- `05-并发编程/限流策略与算法.md`:限流算法
- `01-分布式系统/一致性哈希.md`:一致性哈希
### 性能优化
- `02-数据库/MySQL索引优化.md`MySQL 索引优化
- `01-分布式系统/MySQL主从延迟.md`:数据库复制策略
- `03-缓存/缓存穿透击穿雪崩.md`:缓存问题和解决方案
### 微服务和分布式系统
- `01-分布式系统/分布式ID生成.md`:分布式 ID 生成
- `01-分布式系统/分布式事务.md`:分布式事务
- `07-系统设计/社交信息流设计.md`Feed 流系统设计
- `07-系统设计/LBS附近的人设计.md`:负载均衡系统设计
- `07-系统设计/秒杀系统设计.md`:秒杀系统设计
- `07-系统设计/短链接系统设计.md`:短链接系统设计
## 入门指南
1. **阅读每个文档** 理解基础
2. **运行代码示例** 查看实际效果
3. **练习面试问题**:每个文档末尾的 Q&A
4. **对比不同方法**:理解权衡
## 贡献
这是一个持续维护的文档。欢迎:
- 添加新的算法主题
- 改进现有解释
- 添加更多代码示例
- 增强 Q&A 部分
- 分享真实用例
## 许可证
本项目开源,使用 MIT 许可证。
---
**注意**:所有文档使用中文编写,以便更清晰易懂。代码示例使用 Java 以便广泛理解。

View File

@@ -0,0 +1,194 @@
# 面试准备进度
## 当前状态
- **总文件数**60 个
- **已分类文件数**60 个
- **分类数量**13 个
- **完成度**100%
---
## 分类进度
### ✅ 已完成分类
1. **分布式系统**9/9- 100%
- ✅ 分布式事务
- ✅ 分布式锁
- ✅ 分布式ID生成
- ✅ 一致性哈希
- ✅ CAP理论和BASE理论
- ✅ 数据库分库分表
- ✅ MySQL主从延迟
- ✅ 事务隔离级别
- ✅ 数据库锁机制
2. **数据库**2/2- 100%
- ✅ MySQL索引优化
- ✅ MyBatis核心原理
3. **缓存**5/5- 100%
- ✅ 缓存穿透/击穿/雪崩
- ✅ Redis架构
- ✅ Redis数据结构
- ✅ ConcurrentHashMap原理
- ✅ LRU缓存实现
4. **消息队列**1/1- 100%
- ✅ 消息队列RocketMQ/Kafka
5. **并发编程**4/4- 100%
- ✅ Java并发编程基础
- ✅ 线程池核心参数
- ✅ 设计模式
- ✅ 限流策略与算法
6. **JVM**1/1- 100%
- ✅ JVM和垃圾回收
7. **系统设计**10/10- 100%
- ✅ 秒杀系统设计
- ✅ 短链接系统设计
- ✅ LBS附近的人设计
- ✅ 即时通讯系统设计
- ✅ 社交信息流设计
- ✅ API网关
- ✅ 系统设计方法论
- ✅ 微服务架构
- ✅ RPC框架
- ✅ 服务网格
8. **算法与数据结构**6/6- 100%
- ✅ B+树原理
- ✅ 红黑树原理
- ✅ 跳表原理
- ✅ 时间轮算法
- ✅ LRU缓存实现
- ✅ 算法与数据结构学习指南
9. **网络与安全**3/3- 100%
- ✅ TCP/IP网络协议
- ✅ 加密与安全
- ✅ 性能优化
10. **中间件**4/4- 100%
- ✅ Spring Boot核心原理
- ✅ Nacos注册中心
- ✅ Dubbo框架
- ✅ Nginx
11. **运维**4/4- 100%
- ✅ Docker容器
- ✅ Kubernetes
- ✅ CI/CD持续集成部署
- ✅ 可观测性
12. **面试技巧**2/2- 100%
- ✅ 面试技巧和职业规划
- ✅ 面试准备进度
13. **Golang语言**10/10- 100%
- ✅ Golang基础语法
- ✅ Goroutine和并发模型
- ✅ 错误处理和测试
- ✅ 并发编程进阶
- ✅ 内存模型和垃圾回收
- ✅ 性能优化
- ✅ HTTP和Web开发
- ✅ 接口和类型系统
- ✅ 反射和unsafe
- ✅ 项目结构和工程化
- ✅ 数据库操作
---
## 学习建议
### 第一阶段1-2个月
- **重点**:分布式系统基础、数据库基础、缓存基础
- **目标**:掌握核心概念和基本原理
### 第二阶段2-3个月
- **重点**消息队列、并发编程、JVM
- **目标**:深入理解并发和性能优化
### 第三阶段3-4个月
- **重点**:系统设计、算法与数据结构
- **目标**:具备系统设计能力
### 第四阶段4-6个月
- **重点**Golang语言、网络与安全、中间件
- **目标**:全面掌握后端技术栈
### 第五阶段6-12个月
- **重点**:实战项目、性能优化、架构设计
- **目标**达到P7水平
---
## P7 能力要求
### 技术深度
- [ ] 理解分布式系统原理和实现
- [ ] 精通数据库和缓存优化
- [ ] 掌握并发编程和性能调优
- [ ] 具备系统设计能力
### 技术广度
- [ ] 熟悉多种中间件和框架
- [ ] 了解网络和信息安全
- [ ] 掌握运维和部署
- [ ] 具备多语言能力Go/Java
### 软技能
- [ ] 良好的沟通能力
- [ ] 团队协作能力
- [ ] 技术影响力
- [ ] 问题解决能力
---
## 复习计划
### 每周复习
- 周一:分布式系统
- 周二:数据库和缓存
- 周三:消息队列和并发
- 周四:系统设计
- 周五:算法和数据结构
- 周六Golang和中间件
- 周日:综合复习
### 面试前冲刺
- **前2周**:全面复习所有知识点
- **前1周**:重点复习弱项和系统设计
- **前3天**:模拟面试和项目经验梳理
- **前1天**:放松和心态调整
---
## 项目经验准备
### 必备项目经验
1. **高并发系统**:秒杀、抢购等
2. **分布式系统**:微服务、分布式事务
3. **性能优化**:数据库优化、缓存优化
4. **系统重构**:架构升级、技术选型
### 项目准备清单
- [ ] 项目背景和业务场景
- [ ] 技术架构和设计思路
- [ ] 遇到的问题和解决方案
- [ ] 性能指标和优化成果
- [ ] 团队协作和个人贡献
---
## 备注
- **更新日期**2026-03-01
- **总内容量**:约 12,000+ 行
- **覆盖主题**分布式系统、数据库、缓存、消息队列、并发编程、JVM、系统设计、算法与数据结构、网络、安全、性能优化、中间件、运维、面试技巧、Golang语言
**祝面试成功!** 🎉