├── .eslintrc.json ├── .gitattributes ├── .github └── workflows │ └── nextjs.yml ├── .gitignore ├── README.md ├── ads.txt ├── app ├── GoogleAnalytics.tsx ├── [language] │ ├── ClientSideTutorialTree.tsx │ ├── LanguageLayoutClient.tsx │ ├── LanguageLayoutServer.tsx │ ├── LanguageProvider.tsx │ ├── [...tutorial] │ │ └── page.tsx │ ├── [tutorial] │ │ └── page.tsx │ ├── layout.tsx │ ├── page.tsx │ └── tutorialUtils.ts ├── about │ └── page.tsx ├── api │ ├── available-languages │ │ └── route.ts │ ├── chat │ │ └── route.ts │ ├── language-layout │ │ └── route.ts │ ├── tutorial-content │ │ └── route.ts │ ├── tutorial-structure │ │ └── route.ts │ └── tutorials │ │ └── route.ts ├── components │ ├── AIChatHistory.tsx │ ├── AIChatWidget.tsx │ ├── ChatWindow.tsx │ ├── ErrorBoundary.tsx │ ├── SEO.tsx │ └── TutorialCard.tsx ├── contact │ └── page.tsx ├── favicon.ico ├── fonts │ ├── GeistMonoVF.woff │ └── GeistVF.woff ├── globals.css ├── layout.js ├── layout.tsx ├── page.tsx ├── privacy │ └── page.tsx ├── sitemap.ts ├── tutorials │ └── [lang] │ │ └── [slug] │ │ └── page.tsx └── types.ts ├── components.json ├── components ├── AIChatWidget.module.css ├── AIChatWidget.tsx ├── AdSense.tsx ├── ClientTranslation.tsx ├── GoogleAds.tsx ├── Header.js ├── LanguageSelector.tsx ├── Layout.js ├── TutorialSidebar.tsx ├── tutorial-layout.tsx └── ui │ ├── button.tsx │ ├── collapsible.tsx │ ├── dropdown-menu.tsx │ ├── scroll-area.tsx │ └── sheet.tsx ├── config └── languageOrder.ts ├── lib ├── tutorials.ts ├── useTranslation.ts └── utils.ts ├── next.config.js ├── next.config.mjs ├── package-lock.json ├── package.json ├── pages └── _app.js ├── postcss.config.mjs ├── process.env.NODE_ENV ├── public ├── chat.png ├── favicon.ico └── images │ ├── chat.png │ ├── default-og-image.jpg.png │ ├── default-twitter-image.jpg.png │ ├── logo.png │ └── logo_副本3.png ├── renamefold.js ├── robots.txt ├── styles └── AIChatWidget.css ├── tailwind.config.js ├── tailwind.config.ts ├── tsconfig.json └── tutorials ├── Angular ├── 001. 基础入门 │ ├── 001_Angular.md │ ├── 002_TypeScript.md │ ├── 003_Node.js npm Angular CLI.md │ ├── 004_Angular.md │ └── 005_Angular.md ├── 02. 组件基础 │ ├── 006_article.md │ ├── 007_article.md │ ├── 008_article.md │ ├── 009_Vue.js.md │ └── 010_(Input Output).md ├── 03. 指令 │ ├── 011_AngularngIf ngFor ngSwitch.md │ ├── 012_CSS.md │ ├── 013_Angular.md │ └── 014_article.md ├── 04. 服务和依赖注入 │ ├── 015_article.md │ ├── 016_article.md │ ├── 017_-.md │ └── 018_article.md ├── 05. 路由 │ ├── 019_-.md │ ├── 020_React.md │ ├── 021_React.md │ ├── 022_Angular.md │ └── 023_article.md ├── 06. 表单处理 │ ├── 024_- Angular.md │ ├── 025_article.md │ ├── 026_article.md │ ├── 027_article.md │ └── 028_article.md ├── 07. HTTP 客户端 │ ├── 029_HttpClientNode.jsHTTP.md │ ├── 030_HTTP.md │ ├── 031_Java.md │ ├── 032_Python.md │ └── 033_Web.md ├── 08. RxJS 和响应式编程 │ ├── 034_Understanding Observables and Observers in Programming.md │ ├── 035_article.md │ ├── 036_Understanding Subject Types in Programming.md │ ├── 037_article.md │ └── 038_RxJS.md ├── 09. 模块化开发 │ ├── 039_NgModule - Angular.md │ ├── 040_article.md │ ├── 041_article.md │ ├── 042_article.md │ └── 043_article.md ├── 10. 组件进阶 │ ├── 044_article.md │ ├── 045_Vue.js.md │ ├── 046_-.md │ ├── 047_Shadow DOMWeb.md │ └── 048_article.md ├── 11. 变更检测 │ ├── 049_article.md │ ├── 050_Angular OnPush.md │ ├── 051_- Angular.md │ └── 052_article.md ├── 12. 动画 │ ├── 053_-.md │ ├── 054_article.md │ ├── 055_Web.md │ └── 056_article.md ├── 13. 国际化 (i18n) │ ├── 057_article.md │ ├── 058_-.md │ ├── 059_article.md │ └── 060_AOT.md ├── 14. 测试 │ ├── 061_JasmineKarma.md │ ├── 062_article.md │ ├── 063_article.md │ └── 064_(Protractor).md ├── 15. Angular Universal (SSR) │ ├── 065_article.md │ ├── 066_SEO.md │ ├── 067_SEO.md │ └── 068_article.md ├── 16. PWA 和离线功能 │ ├── 069_Service WorkerWeb.md │ ├── 070_WebApp Shell.md │ ├── 071_article.md │ └── 072_article.md ├── 17. 状态管理 │ ├── 073_NgRx.md │ ├── 074_article.md │ ├── 075_(Effects).md │ └── 076_NGXS Akita.md ├── 18. 性能优化 │ ├── 077_AOT.md │ ├── 078_(Tree Shaking).md │ ├── 079_article.md │ ├── 080_article.md │ └── 081_article.md ├── 19. 安全性 │ ├── 082_(XSS).md │ ├── 083_CSRF.md │ ├── 084_(CSP).md │ └── 085_Web.md ├── 20. 高级主题 │ ├── 086_article.md │ ├── 087_Angular.md │ ├── 088_WebAssembly.md │ └── 089_Angular ElementsWeb.md ├── 21. DevOps 和部署 │ ├── 090_CICD.md │ ├── 091_Docker.md │ ├── 092_Firebase Heroku.md │ └── 093_article.md ├── 22. 项目实战 │ ├── 094_article.md │ ├── 095_article.md │ └── 096_Web.md ├── 23. Angular 生态系统 │ ├── 097_UIMaterialPrimeNG.md │ ├── 098_IDE.md │ ├── 099_Angular.md │ └── 100_article.md └── Angular课程大纲.md ├── Bootstrap ├── 01. 基础入门 │ ├── 001_Bootstrap.md │ ├── 002_Bootstrap.md │ ├── 003_-.md │ ├── 004_article.md │ └── 005_article.md ├── 02. 排版和文本 │ ├── 006_article.md │ ├── 007_article.md │ ├── 008_CSS.md │ ├── 009_article.md │ └── 010_HTMLCSS.md ├── 03. 组件 │ ├── 011_article.md │ ├── 012_article.md │ ├── 013_article.md │ ├── 014_Web.md │ └── 015_-.md ├── 04. 布局组件 │ ├── 016_Python.md │ ├── 017_article.md │ ├── 018_Flexbox.md │ ├── 019_article.md │ └── 020_CSS.md ├── 05. 表单 │ ├── 021_article.md │ ├── 022_article.md │ ├── 023_article.md │ ├── 024_article.md │ └── 025_-.md ├── 06. 实用工具类 │ ├── 026_CSS.md │ ├── 027_article.md │ ├── 028_CSS.md │ ├── 029_CSS.md │ └── 030_CSS.md ├── 07. JavaScript 组件 │ ├── 031_article.md │ ├── 032_article.md │ ├── 033_article.md │ ├── 034_article.md │ └── 035_article.md ├── 08. 自定义 Bootstrap │ ├── 036_Sass -.md │ ├── 037_article.md │ ├── 038_CSS.md │ ├── 039_- React.md │ └── 040_CSS.md ├── 09. 响应式设计进阶 │ ├── 041_article.md │ ├── 042_article.md │ ├── 043_article.md │ ├── 044_article.md │ └── 045_CSS.md ├── 10. 图标和图形 │ ├── 046_Bootstrap Icons.md │ ├── 047_Font Awesome.md │ ├── 048_SVG.md │ ├── 049_article.md │ └── 050_article.md ├── 11. 表格和数据展示 │ ├── 051_- HTMLCSS.md │ ├── 052_article.md │ ├── 053_article.md │ ├── 054_article.md │ └── 055_article.md ├── 12. 动画和过渡 │ ├── 056_CSS.md │ ├── 057_article.md │ ├── 058_article.md │ ├── 059_article.md │ └── 060_article.md ├── 13. 辅助功能和可访问性 │ ├── 061_ARIA.md │ ├── 062_article.md │ ├── 063_article.md │ ├── 064_article.md │ └── 065_article.md ├── 14. 性能优化 │ ├── 066_article.md │ ├── 067_article.md │ ├── 068_article.md │ ├── 069_CSS.md │ └── 070_article.md ├── 15. 集成第三方库 │ ├── 071_article.md │ ├── 072_article.md │ ├── 073_article.md │ ├── 074_article.md │ └── 075_article.md ├── 16. 跨浏览器兼容性 │ ├── 076_article.md │ ├── 077_Polyfills.md │ ├── 078_Web.md │ ├── 079_CSS.md │ └── 080_article.md ├── 17. 工作流和开发工具 │ ├── 081_npm.md │ ├── 082_Gulp Webpack.md │ ├── 083_GitSVN.md │ ├── 084_article.md │ └── 085_article.md ├── 18. 响应式邮件模板 │ ├── 086_article.md │ ├── 087_article.md │ ├── 088_article.md │ ├── 089_article.md │ └── 090_-.md ├── 19. 项目实战 │ ├── 091_article.md │ ├── 092_-.md │ ├── 093_article.md │ └── 094_article.md ├── 20. Bootstrap 生态系统 │ ├── 095_Bootstrap.md │ ├── 096_article.md │ ├── 097_Bootstrap.md │ └── 098_article.md └── Bootstrap课程大纲.md ├── CSS ├── 01. 基础入门 │ ├── 001_CSS.md │ ├── 002_CSS.md │ ├── 003_article.md │ ├── 004_CSS.md │ └── 005_article.md ├── 02. 核心概念 │ ├── 006_CSS.md │ ├── 007_Flexbox.md │ ├── 008_CSS Grid.md │ ├── 009_article.md │ └── 010_CSS.md ├── 03. 高级特性 │ ├── 011_CSSSassLess.md │ ├── 012_CSS.md │ ├── 013_CSS ModulesCSS.md │ ├── 014_CSS-in-JS.md │ └── 015_CSS HoudiniCSS.md ├── 04. 性能优化 │ ├── 016_CSS.md │ ├── 017_CSS.md │ ├── 018_CSS.md │ ├── 019_article.md │ └── 020_article.md ├── 05. 最佳实践 │ ├── 021_CSS (BEM OOCSS).md │ ├── 022_CSSITCSSSMACSS.md │ ├── 023_article.md │ ├── 024_Web.md │ └── 025_(WCAG).md ├── 06. 工具和框架 │ ├── 026_CSS Normalize.css.md │ ├── 027_CSSBootstrapTailwind CSS.md │ ├── 028_PostCSS.md │ ├── 029_CSS-in-JSstyled-componentsEmotion.md │ └── 030_CSS.md ├── 07. 高级主题 │ ├── 031_CSS Hacks -.md │ ├── 032_CSS (CSS Variables).md │ ├── 033_CSS.md │ ├── 034_CSS.md │ └── 035_article.md ├── 08. 实战项目 │ ├── 036_article.md │ ├── 037_article.md │ ├── 038_CSS.md │ └── 039_article.md ├── 09. 工具和资源 │ ├── 040_CSS.md │ ├── 041_CSS.md │ ├── 042_CSS Sprite.md │ ├── 043_article.md │ └── 044_article.md ├── 10. 新特性和未来趋势 │ ├── 045_CSS Grid Level 2 -.md │ ├── 046_CSS.md │ ├── 047_Mastering CSS Layers A Comprehensive Guide.md │ ├── 048_Container QueriesCSS.md │ └── 049_CSS.md └── CSS课程大纲.md ├── CSharp ├── 01. 基础入门 │ ├── 001_C.md │ ├── 002_Visual Studio .NET SDK.md │ ├── 003_C (Hello World).md │ ├── 004_article.md │ └── 005_article.md ├── 02. 核心概念 │ ├── 006_(OOP).md │ ├── 007_Python.md │ ├── 008_article.md │ ├── 009_Java.md │ └── 010_C.md ├── 03. 高级特性 │ ├── 011_Java.md │ ├── 012_C.md │ ├── 013_LINQ.md │ ├── 014_(asyncawait).md │ └── 015_C.md ├── 04. 内存管理和性能 │ ├── 016_article.md │ ├── 017_article.md │ ├── 018_using.md │ ├── 019_article.md │ └── 020_article.md ├── 05. 文件和数据处理 │ ├── 021_IO.md │ ├── 022_article.md │ ├── 023_ADO.NETEntity Framework.md │ ├── 024_XMLJSON.md │ └── 025_article.md ├── 06. 图形用户界面 (GUI) │ ├── 026_Windows Forms.md │ ├── 027_WPF (Windows Presentation Foundation).md │ ├── 028_XAML.md │ ├── 029_article.md │ └── 030_UI.md ├── 07. Web开发 │ ├── 031_ASP.NET Core.md │ ├── 032_MVCWeb.md │ ├── 033_ASP.NET Core Razor Pages.md │ ├── 034_Web API.md │ └── 035_Blazor.md ├── 08. 测试和调试 │ ├── 036_NUnitxUnit.md │ ├── 037_article.md │ ├── 038_article.md │ ├── 039_article.md │ └── 040_article.md ├── 09. 设计模式和最佳实践 │ ├── 041_article.md │ ├── 042_SOLID.md │ ├── 043_article.md │ ├── 044_article.md │ └── 045_article.md ├── 10. 高级主题 │ ├── 046_article.md │ ├── 047_SocketHTTP.md │ ├── 048_article.md │ ├── 049_article.md │ └── 050_article.md ├── 11. 项目实战 │ ├── 051_article.md │ ├── 052_Windows.md │ ├── 053_Web.md │ └── 054_(Xamarin).md ├── 12. 工具和资源 │ ├── 055_NuGet.md │ ├── 056_Git.md │ ├── 057_CICD.md │ └── 058_article.md ├── 13. 最新特性 │ ├── 059_C.md │ ├── 060_.NET 67.md │ └── 061_article.md └── C#课程大纲.md ├── Cpp ├── 01. 基础入门 │ ├── 001_C.md │ ├── 002_article.md │ ├── 003_C (Hello World).md │ ├── 004_article.md │ └── 005_article.md ├── 02. 核心概念 │ ├── 006_article.md │ ├── 007_if-else switch for while.md │ ├── 008_article.md │ ├── 009_C.md │ └── 010_C.md ├── 03. 面向对象编程 │ ├── 011_Python.md │ ├── 012_article.md │ ├── 013_C.md │ ├── 014_C.md │ └── 015_C.md ├── 04. 高级特性 │ ├── 016_article.md │ ├── 017_Python.md │ ├── 018_C.md │ ├── 019_C.md │ └── 020_JavaLambda.md ├── 05. 标准库 │ ├── 021_(iostream).md │ ├── 022_Cvector list map.md │ ├── 023_article.md │ ├── 024_article.md │ └── 025_article.md ├── 06. 内存管理 │ ├── 026_(new delete).md │ ├── 027_-.md │ ├── 028_(unique_ptr shared_ptr weak_ptr).md │ └── 029_article.md ├── 07. 现代C++特性 │ ├── 030_C11141720.md │ ├── 031_C.md │ ├── 032_Cautodecltype.md │ ├── 033_Cfor.md │ └── 034_Python.md ├── 08. 设计模式和最佳实践 │ ├── 035_C.md │ ├── 036_SOLID.md │ ├── 037_article.md │ └── 038_Web.md ├── 09. 项目实战 │ ├── 039_article.md │ ├── 040_(GUI).md │ └── 041_article.md ├── 10. 工具和资源 │ ├── 042_Git.md │ ├── 043_(CMake).md │ ├── 044_Google Test.md │ ├── 045_(Doxygen).md │ └── 046_-.md ├── 11. 高级主题 │ ├── 047_article.md │ ├── 048_CCLI.md │ ├── 049_article.md │ └── 050_C.md └── C++课程大纲.md ├── Django ├── 01. 基础入门 │ ├── 001_Django.md │ ├── 002_article.md │ ├── 003_-.md │ ├── 004_Understanding MVT (Model-View-Template) Architecture.md │ └── 005_Django.md ├── 02. 模型和数据库 │ ├── 006_article.md │ ├── 007_article.md │ ├── 008_Django.md │ ├── 009_article.md │ └── 010_- Django.md ├── 03. 视图和 URL 配置 │ ├── 011_Django.md │ ├── 012_URL.md │ ├── 013_article.md │ ├── 014_Django.md │ └── 015_Web.md ├── 04. 模板系统 │ ├── 016_article.md │ ├── 017_Django.md │ ├── 018_Django.md │ ├── 019_- Django.md │ └── 020_article.md ├── 05. 表单处理 │ ├── 021_Django Form.md │ ├── 022_article.md │ ├── 023_DjangoModelForm.md │ ├── 024_Django (Formsets).md │ └── 025_article.md ├── 06. 认证和授权 │ ├── 026_article.md │ ├── 027_- Django.md │ ├── 028_Linux.md │ ├── 029_article.md │ └── 030_-.md ├── 07. Admin 站点 │ ├── 031_Admin -.md │ ├── 032_article.md │ ├── 033_Admin -.md │ ├── 034_Admin.md │ └── 035_article.md ├── 08. 会话和 Cookie │ ├── 036_article.md │ ├── 037_Cookie.md │ ├── 038_article.md │ └── 039_- JavaScriptHTML.md ├── 09. 缓存机制 │ ├── 040_article.md │ ├── 041_Web.md │ ├── 042_article.md │ ├── 043_API.md │ └── 044_article.md ├── 10. REST API 开发 │ ├── 045_Django REST framework.md │ ├── 046_Python.md │ ├── 047_DjangoWeb.md │ ├── 048_article.md │ └── 049_API.md ├── 11. 测试 │ ├── 050_article.md │ ├── 051_Python.md │ ├── 052_article.md │ ├── 053_article.md │ └── 054_article.md ├── 12. 安全性 │ ├── 055_CSRF -.md │ ├── 056_XSS Web.md │ ├── 057_SQL.md │ ├── 058_Web.md │ └── 059_article.md ├── 13. 部署 │ ├── 060_article.md │ ├── 061_article.md │ ├── 062_Gunicorn Nginx.md │ ├── 063_Docker.md │ └── 064_CICD.md ├── 14. 性能优化 │ ├── 065_article.md │ ├── 066_article.md │ ├── 067_Web.md │ ├── 068_(Celery).md │ └── 069_article.md ├── 15. 高级主题 │ ├── 070_- Django.md │ ├── 071_article.md │ ├── 072_article.md │ ├── 073_article.md │ └── 074_(Haystack).md ├── 16. 第三方集成 │ ├── 075_article.md │ ├── 076_article.md │ ├── 077_article.md │ ├── 078_(AWS S3).md │ └── 079_(Channels).md ├── 17. 项目结构和最佳实践 │ ├── 080_article.md │ ├── 081_article.md │ ├── 082_GitGitHub.md │ ├── 083_article.md │ └── 084_article.md ├── 18. Django 生态系统 │ ├── 085_article.md │ ├── 086_Django CMS.md │ ├── 087_WagtailCMS.md │ ├── 088_Django.md │ └── 089_article.md ├── 19. 项目实战 │ ├── 090_article.md │ ├── 091_article.md │ ├── 092_article.md │ └── 093_RESTful API.md └── Django课程大纲.md ├── Express.js ├── 01. 基础入门 │ ├── 001_Express.js.md │ ├── 002_Node.js npm.md │ ├── 003_Express.js.md │ ├── 004_Web.md │ └── 005_article.md ├── 02. 核心概念 │ ├── 006_article.md │ ├── 007_article.md │ ├── 008_article.md │ ├── 009_EJSPug.md │ └── 010_Python.md ├── 03. 中间件和扩展 │ ├── 011_Web.md │ ├── 012_article.md │ ├── 013_article.md │ ├── 014_Web.md │ └── 015_article.md ├── 04. 数据库集成 │ ├── 016_MongoDB Mongoose.md │ ├── 017_SQL MySQL PostgreSQL.md │ ├── 018_Sequelize - ORM.md │ └── 019_-.md ├── 05. RESTful API 开发 │ ├── 020_RESTful.md │ ├── 021_API.md │ ├── 022_article.md │ └── 023_API (Swagger).md ├── 06. 性能优化和安全 │ ├── 024_Web.md │ ├── 025_GZIP.md │ ├── 026_article.md │ ├── 027_(CORS).md │ └── 028_article.md ├── 07. 测试和调试 │ ├── 029_MochaChaiJavaScript.md │ ├── 030_article.md │ ├── 031_article.md │ ├── 032_article.md │ └── 033_article.md ├── 08. 部署和运维 │ ├── 034_(Heroku AWS).md │ ├── 035_Docker.md │ ├── 036_PM2.md │ ├── 037_article.md │ └── 038_CICD.md ├── 09. 高级主题 │ ├── 039_WebSocket.md │ ├── 040_GraphQL Express.md │ ├── 041_article.md │ └── 042_(SSR).md ├── 10. 实战项目 │ ├── 043_article.md │ ├── 044_API.md │ └── 045_article.md ├── 11. 工具和资源 │ ├── 046_ExpressNode.js.md │ ├── 047_article.md │ ├── 048_article.md │ └── 049_article.md ├── 12. 版本更新 │ ├── 050_Express 5.x.md │ └── 051_article.md └── Express.js课程大纲.md ├── Go ├── 01. 基础入门 │ ├── 001_Go.md │ ├── 002_- GoGOPATH.md │ ├── 003_Go (Hello World).md │ ├── 004_article.md │ └── 005_article.md ├── 02. 核心概念 │ ├── 006_Python.md │ ├── 007_if-else switch for.md │ ├── 008_Go.md │ ├── 009_Python(Map).md │ └── 010_Go.md ├── 03. 并发编程 │ ├── 011_GoGoroutines.md │ ├── 012_Understanding Channels in Go Programming.md │ ├── 013_SQLSelect.md │ ├── 014_MutexWaitGroup.md │ └── 015_article.md ├── 04. 包管理和模块 │ ├── 016_Python.md │ ├── 017_-.md │ ├── 018_Go Modules.md │ └── 019_article.md ├── 05. 标准库 │ ├── 020_Golang fmt.md │ ├── 021_Goioioutil.md │ ├── 022_Goos.md │ ├── 023_Go nethttp.md │ └── 024_Goencodingjson.md ├── 06. 错误处理和测试 │ ├── 025_Python.md │ ├── 026_GoPanicRecover.md │ ├── 027_article.md │ ├── 028_article.md │ └── 029_article.md ├── 07. Web 开发 │ ├── 030_HTTP.md │ ├── 031_article.md │ ├── 032_article.md │ ├── 033_RESTful API.md │ └── 034_SQLNoSQL.md ├── 08. 高级特性 │ ├── 035_Java.md │ ├── 036_Gounsafe.md │ ├── 037_CgoGoC.md │ ├── 038_article.md │ └── 039_article.md ├── 09. 工具和生态系统 │ ├── 040_Go.md │ ├── 041_linting.md │ ├── 042_article.md │ └── 043_article.md ├── 10. 最佳实践 │ ├── 044_article.md │ ├── 045_article.md │ ├── 046_article.md │ └── 047_article.md ├── 11. 部署和运维 │ ├── 048_article.md │ ├── 049_Docker.md │ ├── 050_CICD.md │ └── 051_article.md ├── 12. 实战项目 │ ├── 052_article.md │ ├── 053_Web.md │ └── 054_article.md ├── 13. 高级主题 │ ├── 055_Go.md │ ├── 056_Go.md │ └── 057_Go.md ├── 14. 版本更新 │ ├── 058_Go 1.x.md │ └── 059_article.md └── Go课程大纲.md ├── HTML ├── 01. 基础入门 │ ├── 001_HTML.md │ ├── 002_article.md │ ├── 003_HTML.md │ ├── 004_HTML.md │ └── 005_HTML5.md ├── 02. 核心概念 │ ├── 006_HTML5.md │ ├── 007_article.md │ ├── 008_article.md │ ├── 009_Web.md │ └── 010_HTML.md ├── 03. 样式和布局 │ ├── 011_HTMLCSS.md │ ├── 012_HTMLCSS.md │ ├── 013_CSS.md │ ├── 014_CSS.md │ └── 015_article.md ├── 04. 高级特性 │ ├── 016_HTML5 Canvas.md │ ├── 017_SVG.md │ ├── 018_Web localStorage sessionStorage.md │ ├── 019_API.md │ └── 020_article.md ├── 05. 可访问性和 SEO │ ├── 021_ARIAWeb.md │ ├── 022_SEO.md │ ├── 023_alt.md │ ├── 024_article.md │ └── 025_article.md ├── 06. 性能优化 │ ├── 026_article.md │ ├── 027_article.md │ ├── 028_article.md │ ├── 029_article.md │ └── 030_article.md ├── 07. 集成和扩展 │ ├── 031_JavaScript.md │ ├── 032_CSS (Bootstrap Tailwind).md │ ├── 033_article.md │ └── 034_CDN.md ├── 08. 最佳实践 │ ├── 035_article.md │ ├── 036_Web.md │ ├── 037_article.md │ ├── 038_article.md │ └── 039_Git.md ├── 09. 工具和开发流程 │ ├── 040_article.md │ ├── 041_HTML.md │ ├── 042_article.md │ ├── 043_(GitHub).md │ └── 044_article.md ├── 10. 实战项目 │ ├── 045_article.md │ ├── 046_article.md │ ├── 047_article.md │ └── 048_- HTML CSS.md ├── 11. 新特性和趋势 │ ├── 049_HTML5.1 HTML5.2.md │ ├── 050_PWA( Web ).md │ ├── 051_Web Components.md │ └── 052_HTML.md ├── 12. 资源和持续学习 │ ├── 053_W3C Web.md │ ├── 054_MDN Web.md │ ├── 055_article.md │ └── 056_article.md └── HTML课程大纲.md ├── Haskell ├── 01. 基础入门 │ ├── 001_Haskell.md │ ├── 002_Haskell (GHC Stack).md │ ├── 003_Haskell.md │ ├── 004_article.md │ └── 005_GHCi.md ├── 02. 函数和类型 │ ├── 006_-.md │ ├── 007_article.md │ ├── 008_article.md │ ├── 009_article.md │ └── 010_(Typeclasses).md ├── 03. 列表和元组 │ ├── 011_-.md │ ├── 012_Python.md │ ├── 013_Python.md │ └── 014_article.md ├── 04. 高阶函数 │ ├── 015_Mastering Map Filter and Fold Functions in Functional Programming.md │ ├── 016_article.md │ ├── 017_article.md │ └── 018_Python (Lambda).md ├── 05. 递归 │ ├── 019_article.md │ ├── 020_article.md │ ├── 021_article.md │ └── 022_article.md ├── 06. 代数数据类型 │ ├── 023_article.md │ ├── 024_article.md │ ├── 025_Maybe Either.md │ └── 026_article.md ├── 07. 类型类进阶 │ ├── 027_(Eq Ord Show Read).md │ ├── 028_Python.md │ ├── 029_Python.md │ └── 030_article.md ├── 08. Monads │ ├── 031_Monad.md │ ├── 032_Understanding the Maybe Monad in Functional Programming.md │ ├── 033_Understanding the List Monad in Haskell.md │ ├── 034_Understanding the IO Monad in Functional Programming.md │ └── 035_Monad.md ├── 09. 函子和应用函子 │ ├── 036_Functor.md │ ├── 037_Applicative.md │ └── 038_article.md ├── 10. 错误处理 │ ├── 039_Python.md │ ├── 040_Either.md │ └── 041_Monad.md ├── 11. 并发和并行编程 │ ├── 042_article.md │ ├── 043_Understanding Software Transactional Memory (STM).md │ ├── 044_article.md │ └── 045_article.md ├── 12. 输入输出 │ ├── 046_IO.md │ ├── 047_article.md │ ├── 048_article.md │ └── 049_article.md ├── 13. 模块系统 │ ├── 050_- Python.md │ ├── 051_Python.md │ ├── 052_article.md │ └── 053_CabalStack.md ├── 14. 高级类型系统特性 │ ├── 054_(Type Families).md │ ├── 055_(GADTs).md │ ├── 056_article.md │ └── 057_article.md ├── 15. 测试和调试 │ ├── 058_QuickCheck.md │ ├── 059_HUnit.md │ ├── 060_article.md │ └── 061_article.md ├── 16. 设计模式和架构 │ ├── 062_article.md │ ├── 063_(DSL).md │ └── 064_article.md ├── 17. 数据处理和分析 │ ├── 065_article.md │ ├── 066_JSON CSV.md │ └── 067_article.md ├── 18. Web 开发 │ ├── 068_Yesod.md │ ├── 069_RESTful API.md │ └── 070_(Persistent).md ├── 19. 性能优化 │ ├── 071_article.md │ ├── 072_article.md │ └── 073_article.md ├── 20. 项目实战 │ ├── 074_article.md │ ├── 075_Web.md │ └── 076_article.md ├── 21. Haskell 生态系统 │ ├── 077_Hackage.md │ ├── 078_Haskell.md │ └── 079_article.md └── Haskell课程大纲.md ├── Java ├── 01. 基础入门 │ ├── 001_Java.md │ ├── 002_JDK.md │ ├── 003_Java - Java.md │ ├── 004_Python.md │ └── 005_article.md ├── 02. 控制流程 │ ├── 006_if-else switch.md │ ├── 007_for while do-while.md │ └── 008_break continue return.md ├── 03. 面向对象编程基础 │ ├── 009_Python.md │ ├── 010_Java.md │ ├── 011_article.md │ ├── 012_Python.md │ ├── 013_Java.md │ └── 014_Java.md ├── 04. Java 核心类 │ ├── 015_StringStringBuilder.md │ ├── 016_Java.md │ ├── 017_API.md │ └── 018_article.md ├── 05. 异常处理 │ ├── 019_Python.md │ ├── 020_Understanding Try-Catch-Finally in Programming.md │ ├── 021_article.md │ └── 022_article.md ├── 06. 集合框架 │ ├── 023_Java List Set Map.md │ ├── 024_JavaArrayListLinkedList.md │ ├── 025_Java HashSet TreeSet.md │ ├── 026_JavaHashMapTreeMap.md │ └── 027_-.md ├── 07. 泛型 │ ├── 028_Java.md │ ├── 029_Java.md │ ├── 030_Java.md │ └── 031_article.md ├── 08. I │ └── O 操作 │ │ ├── 032_article.md │ │ ├── 033_Java.md │ │ ├── 034_Java.md │ │ └── 035_article.md ├── 09. 多线程编程 │ ├── 036_article.md │ ├── 037_article.md │ ├── 038_article.md │ └── 039_Java.md ├── 10. Java 8+ 新特性 │ ├── 040_Lambda.md │ ├── 041_Java Stream API.md │ ├── 042_JavaOptional.md │ ├── 043_Python.md │ └── 044_Java 9.md ├── 11. 函数式编程 │ ├── 045_Java.md │ ├── 046_Java.md │ └── 047_article.md ├── 12. JDBC 数据库编程 │ ├── 048_article.md │ ├── 049_SQL.md │ ├── 050_article.md │ └── 051_article.md ├── 13. Java Web 基础 │ ├── 052_ServletJSPWeb.md │ ├── 053_Web (Tomcat).md │ └── 054_MVC.md ├── 14. Spring 框架 │ ├── 055_Spring Core.md │ ├── 056_Spring MVC.md │ ├── 057_Spring Boot.md │ └── 058_(AOP).md ├── 15. 构建工具和项目管理 │ ├── 059_Maven.md │ ├── 060_Gradle.md │ └── 061_article.md ├── 16. 测试 │ ├── 062_JUnit.md │ ├── 063_(TDD).md │ └── 064_Mock.md ├── 17. Java 虚拟机 (JVM) │ ├── 065_JVM.md │ ├── 066_Java.md │ └── 067_article.md ├── 18. 设计模式 │ ├── 068_article.md │ └── 069_(SOLID) -.md ├── 19. 高级主题 │ ├── 070_Java.md │ ├── 071_article.md │ ├── 072_Java NIOIO.md │ └── 073_article.md ├── 20. 性能优化 │ ├── 074_article.md │ ├── 075_JVM - Java.md │ └── 076_article.md ├── 21. 项目实战 │ ├── 077_article.md │ ├── 078_Web.md │ └── 079_RESTful API.md ├── 22. Java 生态系统 │ ├── 080_article.md │ ├── 081_Java.md │ └── 082_article.md └── Java课程大纲.md ├── JavaScript ├── 01. 基础入门 │ ├── 001_JavaScript.md │ ├── 002_Node.js.md │ ├── 003_article.md │ ├── 004_article.md │ └── 005_article.md ├── 02. 控制流程 │ ├── 006_if else switch.md │ ├── 007_for while do-while.md │ └── 008_(try catch throw).md ├── 03. 函数 │ ├── 009_-.md │ ├── 010_article.md │ ├── 011_JavaScript.md │ └── 012_JavaScript.md ├── 04. 数据结构 │ ├── 013_article.md │ ├── 014_JavaScript.md │ ├── 015_Map Set.md │ └── 016_JSON.md ├── 05. DOM 操作 │ ├── 017_DOM -.md │ ├── 018_JavaScript.md │ └── 019_HTML.md ├── 06. 异步编程 │ ├── 020_JavaScript.md │ ├── 021_Understanding JavaScript Promises.md │ ├── 022_JavaScriptAsyncAwait.md │ └── 023_AJAX Fetch API.md ├── 07. ES6+ 特性 │ ├── 024_JavaScript let const.md │ ├── 025_JavaScript.md │ ├── 026_JavaScript.md │ ├── 027_JavaScript.md │ └── 028_(importexport).md ├── 08. 面向对象编程 │ ├── 029_JavaScript.md │ ├── 030_Python.md │ └── 031_Java.md ├── 09. 函数式编程 │ ├── 032_- JavaScript.md │ ├── 033_Mastering Map Filter and Reduce in JavaScript.md │ ├── 034_article.md │ └── 035_article.md ├── 10. 浏览器 API │ ├── 036_localStorage sessionStorage.md │ ├── 037_Geolocation API.md │ ├── 038_Web WorkersWeb.md │ └── 039_Service WorkersWeb.md ├── 11. Node.js 基础 │ ├── 040_Node.js.md │ ├── 041_Python.md │ ├── 042_article.md │ └── 043_HTTP.md ├── 12. 前端框架 │ ├── 044_React.js.md │ ├── 045_Vue.js.md │ └── 046_Angular - Angular.md ├── 13. 构建工具和模块打包器 │ ├── 047_npm.md │ ├── 048_Webpack.md │ └── 049_Babel.md ├── 14. 测试和调试 │ ├── 050_JestJavaScript.md │ ├── 051_article.md │ └── 052_article.md ├── 15. 安全性 │ ├── 053_(XSS).md │ ├── 054_(CSRF).md │ └── 055_article.md ├── 16. 前端性能优化 │ ├── 056_article.md │ ├── 057_article.md │ └── 058_Web.md ├── 17. 现代 Web 开发 │ ├── 059_Web(PWA).md │ ├── 060_WebAssembly.md │ └── 061_GraphQL.md ├── 18. 项目实战 │ ├── 062_(SPA).md │ ├── 063_WebSockets.md │ └── 064_Web.md ├── 19. JavaScript 生态系统 │ ├── 065_article.md │ ├── 066_article.md │ └── 067_JavaScript.md ├── JavaScript课程大纲.md └── basics │ └── variables.md ├── Kotlin ├── 01. 基础入门 │ ├── 001_Kotlin.md │ ├── 002_IntelliJ IDEAAndroid Studio.md │ ├── 003_Kotlin.md │ ├── 004_article.md │ └── 005_(var val).md ├── 02. 控制流 │ ├── 006_(if when).md │ ├── 007_for while do-while.md │ └── 008_break continue return.md ├── 03. 函数和 Lambda 表达式 │ ├── 009_-.md │ ├── 010_Python.md │ ├── 011_PythonLambda.md │ ├── 012_Lambda.md │ └── 013_JavaScript.md ├── 04. 类和对象 │ ├── 014_- Python.md │ ├── 015_Java.md │ ├── 016_article.md │ ├── 017_Java.md │ ├── 018_Kotlin.md │ └── 019_article.md ├── 05. Null 安全 │ ├── 020_article.md │ ├── 021_(.).md │ ├── 022_Elvis ().md │ ├── 023_TypeScript ().md │ └── 024_article.md ├── 06. 集合 │ ├── 025_Understanding List Set and Map in Programming.md │ ├── 026_Python.md │ ├── 027_filter map reduce.md │ └── 028_Python.md ├── 07. 函数式编程 │ ├── 029_article.md │ ├── 030_article.md │ ├── 031_article.md │ └── 032_article.md ├── 08. 协程 │ ├── 033_article.md │ ├── 034_Kotlin.md │ ├── 035_article.md │ ├── 036_Java.md │ └── 037_article.md ├── 09. 泛型 │ ├── 038_article.md │ ├── 039_article.md │ ├── 040_Java.md │ └── 041_Java.md ├── 10. 委托 │ ├── 042_Kotlin.md │ ├── 043_Kotlin.md │ └── 044_LazyObservable.md ├── 11. 反射 │ ├── 045_Python.md │ ├── 046_Python.md │ ├── 047_JavaScript.md │ └── 048_JavaAPI.md ├── 12. DSL 构建 │ ├── 049_- Kotlin.md │ ├── 050_article.md │ ├── 051_C.md │ └── 052_(DSL).md ├── 13. 互操作性 │ ├── 053_Kotlin Java.md │ ├── 054_Java Kotlin.md │ ├── 055_Kotlin Java.md │ └── 056_Java.md ├── 14. Android 开发 │ ├── 057_Kotlin for Android.md │ ├── 058_Android Jetpack Kotlin.md │ ├── 059_Android.md │ └── 060_article.md ├── 15. 服务器端开发 │ ├── 061_Ktor.md │ ├── 062_Spring Boot Kotlin.md │ └── 063_Exposed.md ├── 16. 测试 │ ├── 064_JUnit 5 Kotlin.md │ ├── 065_(Mockk).md │ └── 066_article.md ├── 17. 多平台开发 │ ├── 067_Kotlin Multiplatform.md │ ├── 068_article.md │ └── 069_article.md ├── 18. 工具和生态系统 │ ├── 070_Gradle Kotlin DSL Kotlin.md │ ├── 071_Kotlin.md │ └── 072_article.md ├── 19. 设计模式 │ ├── 073_Kotlin.md │ └── 074_article.md ├── 20. 性能优化 │ ├── 075_C.md │ ├── 076_article.md │ └── 077_article.md ├── 21. 项目实战 │ ├── 078_Android.md │ ├── 079_article.md │ └── 080_article.md ├── 22. Kotlin 生态系统 │ ├── 081_JetBrains -.md │ ├── 082_Kotlin.md │ └── 083_article.md └── Kotlin课程大纲.md ├── MATLAB ├── 01. 基础入门 │ ├── 001_MATLAB.md │ ├── 002_article.md │ ├── 003_MATLAB.md │ ├── 004_Python.md │ └── 005_article.md ├── 02. 核心概念 │ ├── 006_article.md │ ├── 007_-.md │ ├── 008_article.md │ ├── 009_if-else for while.md │ └── 010_article.md ├── 03. 数据可视化 │ ├── 011_2D.md │ ├── 012_3D.md │ ├── 013_article.md │ └── 014_article.md ├── 04. 高级特性 │ ├── 015_article.md │ ├── 016_article.md │ ├── 017_article.md │ ├── 018_article.md │ └── 019_article.md ├── 05. 应用领域 │ ├── 020_article.md │ ├── 021_article.md │ ├── 022_article.md │ ├── 023_article.md │ └── 024_article.md ├── 06. 编程技巧和最佳实践 │ ├── 025_article.md │ ├── 026_article.md │ ├── 027_article.md │ └── 028_article.md ├── 07. 工具箱和扩展 │ ├── 029_Simulink.md │ ├── 030_article.md │ └── 031_article.md ├── 08. GUI 开发 │ ├── 032_GUIDE.md │ ├── 033_App Designer.md │ └── 034_article.md ├── 09. 与其他语言集成 │ ├── 035_MEX (CC).md │ ├── 036_Python.md │ └── 037_Java.md ├── 10. 实战项目 │ ├── 038_article.md │ ├── 039_article.md │ └── 040_article.md ├── 11. 工具和资源 │ ├── 041_MATLAB.md │ ├── 042_article.md │ └── 043_File Exchange.md ├── 12. 版本更新 │ ├── 044_article.md │ └── 045_article.md └── MATLAB课程大纲.md ├── MongoDB ├── 01. 基础入门 │ ├── 001_MongoDB.md │ ├── 002_article.md │ ├── 003_article.md │ └── 004_MongoDB Shell.md ├── 02. 核心概念 │ ├── 005_CRUD.md │ ├── 006_article.md │ ├── 007_article.md │ ├── 008_article.md │ └── 009_article.md ├── 03. 数据建模和设计 │ ├── 010_article.md │ ├── 011_article.md │ ├── 012_vs.md │ └── 013_article.md ├── 04. 高级特性 │ ├── 014_MongoDB.md │ ├── 015_MongoDB.md │ ├── 016_article.md │ ├── 017_article.md │ └── 018_article.md ├── 05. 部署和运维 │ ├── 019_article.md │ ├── 020_article.md │ ├── 021_article.md │ └── 022_-.md ├── 06. 与应用程序集成 │ ├── 023_Node.js Python Java.md │ ├── 024_MongooseNode.jsODM.md │ ├── 025_article.md │ └── 026_article.md ├── 07. 云端MongoDB │ ├── 027_MongoDB Atlas.md │ └── 028_(AWS Azure GCP).md ├── 08. 最佳实践 │ ├── 029_article.md │ ├── 030_article.md │ ├── 031_article.md │ └── 032_article.md ├── 09. 高级主题 │ ├── 033_BI.md │ ├── 034_MongoDB Realm.md │ ├── 035_article.md │ └── 036_article.md ├── 10. 实战项目 │ ├── 037_article.md │ ├── 038_article.md │ └── 039_article.md ├── 11. 工具和资源 │ ├── 040_MongoDB Compass.md │ ├── 041_MongoDB Charts.md │ ├── 042_article.md │ └── 043_article.md ├── 12. 版本更新 │ ├── 044_article.md │ └── 045_article.md └── MongoDB课程大纲.md ├── Next.js ├── 01. 基础入门 │ ├── 001_Next.js.md │ ├── 002_Next.js.md │ ├── 003_Next.js.md │ ├── 004_Next.js.md │ └── 005_Next.js.md ├── 02. 核心概念 │ ├── 006_Next.js (SSR).md │ ├── 007_Next.js (SSG).md │ ├── 008_Next.js.md │ ├── 009_Next.jsgetServerSideProps getStaticProps getStaticPaths.md │ └── 010_Next.js API.md ├── 03. 组件和样式 │ ├── 011_Next.jsReact.md │ ├── 012_Next.jsCSS Modules.md │ ├── 013_Next.js Sass.md │ └── 014_Next.jsStyled-components.md ├── 04. 高级特性 │ ├── 015_Next.js.md │ ├── 016_Next.jsAppDocument.md │ ├── 017_Next.js.md │ ├── 018_Next.js.md │ ├── 019_Next.js.md │ └── 020_Next.js.md ├── 05. 部署和优化 │ ├── 021_VercelNext.js.md │ ├── 022_Next.js.md │ ├── 023_Next.js.md │ └── 024_Next.js SEO.md ├── 06. 集成和扩展 │ ├── 025_Next.jsReduxMobX.md │ ├── 026_(MongoDB PostgreSQL) - Next.js.md │ ├── 027_Next.js.md │ └── 028_JestReact Testing LibraryNext.js.md ├── 07. 最佳实践 │ ├── 029_Next.js.md │ ├── 030_Next.js.md │ ├── 031_Next.js.md │ └── 032_Next.js.md ├── 08. 高级主题 │ ├── 033_Next.js TypeScript.md │ ├── 034_Webpack - Next.js.md │ ├── 035_Next.js.md │ └── 036_Next.js.md ├── 09. 实战项目 │ ├── 037_Next.js.md │ ├── 038_Next.js.md │ └── 039_Next.js.md ├── 10. 工具和资源 │ ├── 040_Next.js CLI.md │ ├── 041_Next.js.md │ ├── 042_Next.js.md │ └── 043_Next.js.md ├── 11. 版本更新 │ ├── 044_Next.js 13.md │ └── 045_Next.js.md └── next.js课程大纲.md ├── Node.js ├── 01. 基础入门 │ ├── 001_Node.js.md │ ├── 002_(nvm).md │ ├── 003_Node.js.md │ ├── 004_CommonJS ES Modules.md │ └── 005_npm yarn.md ├── 02. 核心概念 │ ├── 006_article.md │ ├── 007_Promise asyncawait.md │ ├── 008_Node.js(Streams)(Buffers).md │ ├── 009_article.md │ └── 010_HTTPHTTPS.md ├── 03. Web 开发 │ ├── 011_Express.js.md │ ├── 012_Node.js.md │ ├── 013_EJSPug.md │ ├── 014_RESTful API.md │ └── 015_article.md ├── 04. 数据库集成 │ ├── 016_SQL (MySQL PostgreSQL).md │ ├── 017_NoSQL (MongoDB).md │ ├── 018_ORM ODM Sequelize Mongoose.md │ └── 019_article.md ├── 05. 高级特性 │ ├── 020_article.md │ ├── 021_article.md │ ├── 022_WebSocket.md │ ├── 023_article.md │ └── 024_article.md ├── 06. 测试和调试 │ ├── 025_JestMochaJavaScript.md │ ├── 026_article.md │ ├── 027_article.md │ └── 028_article.md ├── 07. 部署和运维 │ ├── 029_Docker.md │ ├── 030_Heroku AWS Azure.md │ ├── 031_CICD.md │ └── 032_article.md ├── 08. 安全性 │ ├── 033_article.md │ ├── 034_article.md │ ├── 035_HTTPSSSLTLS.md │ └── 036_CORS.md ├── 09. 最佳实践 │ ├── 037_article.md │ ├── 038_article.md │ ├── 039_article.md │ └── 040_Linting.md ├── 10. 高级主题 │ ├── 041_TypeScript Node.js.md │ ├── 042_GraphQL API.md │ ├── 043_article.md │ └── 044_Serverless AWS Lambda Vercel Functions.md ├── 11. 实战项目 │ ├── 045_article.md │ ├── 046_article.md │ └── 047_API.md ├── 12. 工具和资源 │ ├── 048_VS CodePostman.md │ ├── 049_article.md │ ├── 050_article.md │ └── 051_article.md ├── 13. 新特性和趋势 │ ├── 052_Node.js.md │ ├── 053_ECMAScript Node.js.md │ └── 054_DenoBun.md └── Node.js课程大纲.md ├── PHP ├── 01. 基础入门 │ ├── 001_PHP.md │ ├── 002_XAMPPWAMP.md │ ├── 003_article.md │ ├── 004_article.md │ └── 005_article.md ├── 02. 控制结构 │ ├── 006_if-else switch.md │ ├── 007_for while do-while foreach.md │ └── 008_(break continue).md ├── 03. 函数 │ ├── 009_-.md │ ├── 010_Python.md │ ├── 011_article.md │ └── 012_article.md ├── 04. 数组 │ ├── 013_article.md │ ├── 014_article.md │ └── 015_article.md ├── 05. 字符串处理 │ ├── 016_Python.md │ └── 017_article.md ├── 06. 面向对象编程 │ ├── 018_Python.md │ ├── 019_article.md │ ├── 020_Java.md │ ├── 021_C.md │ └── 022_Rust (Traits).md ├── 07. 错误处理 │ ├── 023_Python.md │ └── 024_article.md ├── 08. 文件系统操作 │ ├── 025_article.md │ ├── 026_article.md │ └── 027_article.md ├── 09. 数据库操作 │ ├── 028_MySQL.md │ ├── 029_PDO.md │ ├── 030_CRUD.md │ └── 031_SQL.md ├── 10. Web 开发基础 │ ├── 032_HTTP.md │ ├── 033_GET POST.md │ ├── 034_Session Cookie.md │ └── 035_article.md ├── 11. 安全性 │ ├── 036_article.md │ ├── 037_XSS Web.md │ ├── 038_CSRF.md │ └── 039_SQL.md ├── 12. PHP 高级特性 │ ├── 040_C.md │ ├── 041_Python.md │ ├── 042_JavaAPI.md │ └── 043_Python.md ├── 13. 现代 PHP 开发 │ ├── 044_ComposerPHP.md │ ├── 045_PSRPHP.md │ └── 046_article.md ├── 14. PHP 框架 │ ├── 047_Laravel.md │ ├── 048_Symfony.md │ └── 049_CodeIgniter.md ├── 15. RESTful API 开发 │ ├── 050_API -.md │ ├── 051_RESTful API.md │ └── 052_API.md ├── 16. 性能优化 │ ├── 053_article.md │ ├── 054_MemcachedRedis.md │ └── 055_article.md ├── 17. 测试 │ ├── 056_PHPUnit.md │ ├── 057_article.md │ └── 058_(TDD).md ├── 18. 部署和服务器 │ ├── 059_Apache.md │ ├── 060_Nginx.md │ └── 061_PHP-FPM.md ├── 19. 项目实战 │ ├── 062_article.md │ ├── 063_article.md │ └── 064_article.md ├── 20. PHP 生态系统 │ ├── 065_CMSWordPressDrupal.md │ ├── 066_PHP.md │ ├── 067_PHP.md │ └── 068_article.md └── PHP课程大纲.md ├── Perl ├── 01. 基础入门 │ ├── 001_Perl.md │ ├── 002_Perl.md │ ├── 003_Perl.md │ ├── 004_article.md │ └── 005_article.md ├── 02. 控制结构 │ ├── 006_if unless elsif else.md │ ├── 007_for foreach while until.md │ └── 008_next last redo.md ├── 03. 数据结构 │ ├── 009_article.md │ ├── 010_article.md │ ├── 011_article.md │ └── 012_article.md ├── 04. 子程序 │ ├── 013_-.md │ ├── 014_Python.md │ ├── 015_article.md │ └── 016_article.md ├── 05. 文件操作 │ ├── 017_article.md │ ├── 018_article.md │ ├── 019_article.md │ └── 020_article.md ├── 06. 正则表达式 │ ├── 021_article.md │ ├── 022_article.md │ ├── 023_article.md │ └── 024_article.md ├── 07. 模块和包 │ ├── 025_Python.md │ ├── 026_- Python.md │ ├── 027_C.md │ └── 028_CPANPerl.md ├── 08. 面向对象编程 │ ├── 029_Python.md │ ├── 030_Python.md │ ├── 031_article.md │ └── 032_Java.md ├── 09. 引用和复杂数据结构 │ ├── 033_Python.md │ ├── 034_C.md │ ├── 035_article.md │ ├── 036_article.md │ └── 037_JavaScript.md ├── 10. 特殊变量 │ ├── 038_article.md │ ├── 039_article.md │ └── 040_article.md ├── 11. 进程和系统交互 │ ├── 041_article.md │ ├── 042_article.md │ └── 043_article.md ├── 12. 网络编程 │ ├── 044_article.md │ ├── 045_-.md │ └── 046_article.md ├── 13. Web 开发 │ ├── 047_CGI.md │ ├── 048_Mojolicious Web.md │ └── 049_article.md ├── 14. 数据库编程 │ ├── 050_DBI.md │ ├── 051_SQL.md │ └── 052_article.md ├── 15. 文本处理和报告生成 │ ├── 053_article.md │ ├── 054_article.md │ └── 055_PythonPDF.md ├── 16. XML 和 JSON 处理 │ ├── 056_XML.md │ ├── 057_JSON.md │ └── 058_article.md ├── 17. 性能优化 │ ├── 059_article.md │ ├── 060_article.md │ └── 061_article.md ├── 18. 测试和调试 │ ├── 062_article.md │ ├── 063_article.md │ └── 064_Python.md ├── 19. 安全编程 │ ├── 065_article.md │ ├── 066_article.md │ └── 067_article.md ├── 20. 项目实战 │ ├── 068_article.md │ ├── 069_article.md │ └── 070_Web.md ├── 21. Perl 生态系统 │ ├── 071_CPAN Perl.md │ ├── 072_Perl.md │ └── 073_article.md └── Perl课程大纲.md ├── PostgreSQL ├── 01. 基础入门 │ ├── 001_PostgreSQL.md │ ├── 002_article.md │ ├── 003_-.md │ ├── 004_SQL (SELECT INSERT UPDATE DELETE).md │ └── 005_PSQL.md ├── 02. 核心概念 │ ├── 006_article.md │ ├── 007_article.md │ ├── 008_article.md │ ├── 009_article.md │ ├── 010_(Schema).md │ └── 011_ACID.md ├── 03. 高级查询 │ ├── 012_SQL.md │ ├── 013_SQL(JOIN).md │ ├── 014_UNION INTERSECT EXCEPT.md │ ├── 015_SQL.md │ └── 016_(CTE).md ├── 04. 数据库设计 │ ├── 017_article.md │ ├── 018_ER.md │ ├── 019_article.md │ ├── 020_Python.md │ └── 021_article.md ├── 05. 性能优化 │ ├── 022_article.md │ ├── 023_article.md │ ├── 024_article.md │ ├── 025_article.md │ └── 026_PostgreSQLVACUUMANALYZE.md ├── 06. 高级特性 │ ├── 027_article.md │ ├── 028_article.md │ ├── 029_article.md │ ├── 030_article.md │ └── 031_JSONJSONB - PostgreSQL.md ├── 07. 并发控制 │ ├── 032_article.md │ ├── 033_MVCC().md │ ├── 034_article.md │ └── 035_article.md ├── 08. 备份和恢复 │ ├── 036_pg_dumppg_restorePostgreSQL.md │ ├── 037_(PITR).md │ ├── 038_article.md │ └── 039_article.md ├── 09. 安全性 │ ├── 040_article.md │ ├── 041_article.md │ ├── 042_SSL.md │ └── 043_PostgreSQL.md ├── 10. 扩展和插件 │ ├── 044_PostGISpgcrypto.md │ ├── 045_article.md │ └── 046_(FDW).md ├── 11. 管理和监控 │ ├── 047_article.md │ ├── 048_article.md │ ├── 049_PgBouncer.md │ └── 050_article.md ├── 12. 与应用程序集成 │ ├── 051_JDBCODBC.md │ ├── 052_ORMHibernateSQLAlchemy.md │ └── 053_article.md ├── 13. 大数据和分析 │ ├── 054_article.md │ ├── 055_SQL.md │ ├── 056_article.md │ └── 057_Hadoop.md ├── 14. 云端PostgreSQL │ ├── 058_Amazon RDS for PostgreSQL.md │ ├── 059_Azure Database for PostgreSQL.md │ └── 060_Google Cloud SQL for PostgreSQL.md ├── 15. 版本更新和迁移 │ ├── 061_article.md │ ├── 062_article.md │ └── 063_PostgreSQL.md ├── 16. 实战项目 │ ├── 064_article.md │ ├── 065_article.md │ └── 066_article.md ├── 17. 工具和资源 │ ├── 067_pgAdminGUIPostgreSQL.md │ ├── 068_article.md │ └── 069_article.md └── PostgreSQL课程大纲.md ├── Python ├── 01. 基础入门 │ ├── 001_Python.md │ ├── 002_PythonIDE.md │ ├── 003_Python.md │ ├── 004_article.md │ └── 005_-.md ├── 02. 控制流程 │ ├── 006_(if elif else).md │ ├── 007_for while.md │ └── 008_(try except).md ├── 03. 数据结构 │ ├── 009_Python.md │ ├── 010_Python.md │ └── 011_article.md ├── 04. 函数和模块 │ ├── 012_-.md │ ├── 013_article.md │ ├── 014_Python.md │ └── 015_Pythonpip.md ├── 05. 面向对象编程 │ ├── 016_Python.md │ ├── 017_article.md │ └── 018_article.md ├── 06. 文件操作和I │ └── O │ │ ├── 019_article.md │ │ ├── 020_CSVJSON.md │ │ └── 021_article.md ├── 07. 高级特性 │ ├── 022_Python.md │ ├── 023_Python.md │ ├── 024_Python.md │ └── 025_article.md ├── 08. 标准库 │ ├── 026_Pythondatetimetime.md │ ├── 027_Pythonossys.md │ ├── 028_Pythonre.md │ └── 029_Python Collections.md ├── 09. 第三方库 │ ├── 030_NumPy Pandas.md │ ├── 031_Matplotlib.md │ ├── 032_PythonRequestsHTTP.md │ └── 033_FlaskDjango Web.md ├── 10. 数据库操作 │ ├── 034_SQLite.md │ ├── 035_MySQLPostgreSQL.md │ └── 036_SQLAlchemy ORM.md ├── 11. Web开发 │ ├── 037_HTML CSS.md │ ├── 038_Flask.md │ ├── 039_Django.md │ └── 040_RESTful API.md ├── 12. 数据科学和机器学习 │ ├── 041_Jupyter Notebook.md │ ├── 042_article.md │ ├── 043_Scikit-learn.md │ └── 044_TensorFlowPyTorch.md ├── 13. 项目实战 │ ├── 045_article.md │ ├── 046_Web.md │ ├── 047_article.md │ └── 048_article.md ├── 14. 高级主题 │ ├── 049_article.md │ ├── 050_TDD.md │ ├── 051_Python.md │ └── 052_Apache SparkPySpark.md ├── 15. 工具和最佳实践 │ ├── 053_Git.md │ ├── 054_(venv virtualenv).md │ ├── 055_Python (PEP 8).md │ └── 056_Sphinx.md ├── 16. Python 生态系统 │ ├── 057_Python.md │ ├── 058_article.md │ ├── 059_Python.md │ └── 060_article.md └── Python课程大纲.md ├── R ├── 01. 基础入门 │ ├── 001_R.md │ ├── 002_R RStudio -.md │ ├── 003_R.md │ ├── 004_article.md │ └── 005_article.md ├── 02. 数据导入和导出 │ ├── 006_CSV.md │ ├── 007_Excel - Python.md │ ├── 008_(SQL).md │ └── 009_Web.md ├── 03. 数据处理和转换 │ ├── 010_article.md │ ├── 011_Python.md │ ├── 012_(reshape2 ).md │ └── 013_article.md ├── 04. 数据可视化 │ ├── 014_article.md │ ├── 015_ggplot2 -.md │ ├── 016_Plotly.md │ └── 017_article.md ├── 05. 统计分析基础 │ ├── 018_article.md │ ├── 019_article.md │ ├── 020_article.md │ └── 021_article.md ├── 06. 高级统计方法 │ ├── 022_(ANOVA).md │ ├── 023_(PCA).md │ ├── 024_article.md │ └── 025_article.md ├── 07. 机器学习 │ ├── 026_article.md │ ├── 027_article.md │ ├── 028_article.md │ └── 029_article.md ├── 08. 文本挖掘和自然语言处理 │ ├── 030_article.md │ ├── 031_article.md │ ├── 032_article.md │ └── 033_LDABERTopic.md ├── 09. 大数据处理 │ ├── 034_R data.table.md │ ├── 035_dplyr tidyr.md │ ├── 036_article.md │ └── 037_article.md ├── 10. R Markdown 和报告生成 │ ├── 038_R Markdown.md │ ├── 039_-.md │ ├── 040_(Shiny).md │ └── 041_article.md ├── 11. 函数编程 │ ├── 042_-.md │ ├── 043_article.md │ ├── 044_article.md │ └── 045_(S3 S4 ).md ├── 12. 包开发 │ ├── 046_R R.md │ ├── 047_Roxygen2R.md │ ├── 048_testthatR.md │ └── 049_CRANR.md ├── 13. 高性能 R 编程 │ ├── 050_article.md │ ├── 051_Python.md │ ├── 052_Rcpp C.md │ └── 053_Rparallel.md ├── 14. 网络分析 │ ├── 054_igraph.md │ ├── 055_article.md │ └── 056_article.md ├── 15. 空间数据分析 │ ├── 057_Rspsf.md │ ├── 058_article.md │ ├── 059_article.md │ └── 060_article.md ├── 16. 生物信息学应用 │ ├── 061_Bioconductor.md │ ├── 062_article.md │ ├── 063_article.md │ └── 064_article.md ├── 17. 金融数据分析 │ ├── 065_article.md │ ├── 066_article.md │ ├── 067_article.md │ └── 068_Python.md ├── 18. Web 应用开发 │ ├── 069_Shiny.md │ ├── 070_article.md │ └── 071_Shiny.md ├── 19. 项目实战 │ ├── 072_article.md │ ├── 073_article.md │ └── 074_article.md ├── 20. R 生态系统 │ ├── 075_CRAN Bioconductor.md │ ├── 076_R.md │ └── 077_article.md └── R课程大纲.md ├── React ├── 01. 基础入门 │ ├── 001_React.md │ ├── 002_Node.js npm Create React App.md │ ├── 003_JSX.md │ ├── 004_article.md │ └── 005_ReactPropsState.md ├── 02. React 核心概念 │ ├── 006_React.md │ ├── 007_article.md │ ├── 008_React.md │ ├── 009_Keys.md │ └── 010_article.md ├── 03. 组件进阶 │ ├── 011_article.md │ ├── 012_(HOC) React.md │ ├── 013_Understanding Render Props in React.md │ ├── 014_React Context API.md │ └── 015_RefsDOM.md ├── 04. Hooks │ ├── 016_React HooksuseState useEffect.md │ ├── 017_ReactuseContext.md │ ├── 018_ReactuseReducer.md │ ├── 019_Hooks.md │ └── 020_Hooks.md ├── 05. 状态管理 │ ├── 021_Redux.md │ ├── 022_Redux Toolkit.md │ ├── 023_MobX -.md │ ├── 024_Recoil.md │ └── 025_article.md ├── 06. 路由 │ ├── 026_React Router.md │ ├── 027_Web.md │ ├── 028_React.md │ ├── 029_Angular.md │ └── 030_article.md ├── 07. 性能优化 │ ├── 031_React.memo useMemo.md │ ├── 032_Understanding useCallback in React.md │ ├── 033_article.md │ ├── 034_article.md │ └── 035_article.md ├── 08. 测试 │ ├── 036_Jest.md │ ├── 037_React Testing Library.md │ ├── 038_article.md │ ├── 039_article.md │ └── 040_(Cypress).md ├── 09. 样式处理 │ ├── 041_CSS-in-JSStyled-components.md │ ├── 042_CSS ModulesCSS.md │ ├── 043_Tailwind CSS.md │ └── 044_Web.md ├── 10. 表单处理 │ ├── 045_vs React.md │ ├── 046_article.md │ ├── 047_Formik.md │ └── 048_React Hook Form.md ├── 11. 数据获取 │ ├── 049_Fetch API.md │ ├── 050_AxiosJavaScriptHTTP.md │ ├── 051_React Query.md │ ├── 052_SWR.md │ └── 053_GraphQL Apollo Client.md ├── 12. 服务端渲染 (SSR) │ ├── 054_Next.js.md │ ├── 055_SSR vs CSR vs SSG.md │ ├── 056_article.md │ └── 057_SEO.md ├── 13. 动画 │ ├── 058_React Transition Group.md │ ├── 059_React SpringUI.md │ ├── 060_Framer MotionUI.md │ └── 061_SVG.md ├── 14. 国际化 │ ├── 062_React IntlReact.md │ ├── 063_i18next.md │ └── 064_article.md ├── 15. 无障碍性 (A11y) │ ├── 065_ARIA.md │ ├── 066_article.md │ ├── 067_Web.md │ └── 068_article.md ├── 16. TypeScript 集成 │ ├── 069_TypeScript.md │ ├── 070_React.md │ ├── 071_article.md │ └── 072_Hooks.md ├── 17. 安全性 │ ├── 073_XSS Web.md │ ├── 074_CSRF.md │ ├── 075_article.md │ └── 076_article.md ├── 18. 部署和优化 │ ├── 077_article.md │ ├── 078_Docker.md │ ├── 079_CICD.md │ └── 080_article.md ├── 19. 高级模式和最佳实践 │ ├── 081_article.md │ ├── 082_article.md │ ├── 083_React.md │ └── 084_article.md ├── 20. 项目实战 │ ├── 085_article.md │ ├── 086_article.md │ └── 087_article.md ├── 21. React 生态系统 │ ├── 088_article.md │ ├── 089_React Native.md │ ├── 090_React.md │ └── 091_article.md └── React课程大纲.md ├── Ruby ├── 01. 基础入门 │ ├── 001_Ruby.md │ ├── 002_Ruby.md │ ├── 003_IRB ( Ruby).md │ ├── 004_article.md │ └── 005_article.md ├── 02. 控制结构 │ ├── 006_if unless case.md │ ├── 007_while until for each.md │ └── 008_Ruby.md ├── 03. 方法和块 │ ├── 009_article.md │ ├── 010_article.md │ └── 011_RubyProcLambda.md ├── 04. 数组和哈希 │ ├── 012_article.md │ ├── 013_article.md │ └── 014_Python.md ├── 05. 字符串和符号 │ ├── 015_Python.md │ └── 016_article.md ├── 06. 面向对象编程 │ ├── 017_Python.md │ ├── 018_Python.md │ ├── 019_Java.md │ ├── 020_Python.md │ └── 021_article.md ├── 07. 模块和混入 │ ├── 022_Python.md │ ├── 023_(Mixin).md │ └── 024_C.md ├── 08. 文件和 I │ └── O 操作 │ │ ├── 025_article.md │ │ ├── 026_article.md │ │ └── 027_article.md ├── 09. 异常处理 │ ├── 028_Python.md │ ├── 029_article.md │ └── 030_Python.md ├── 10. Ruby 高级特性 │ ├── 031_JavaScript.md │ ├── 032_article.md │ ├── 033_Python.md │ └── 034_article.md ├── 11. 并发和线程 │ ├── 035_article.md │ ├── 036_article.md │ └── 037_(Fiber).md ├── 12. 测试 │ ├── 038_RSpec.md │ ├── 039_(TDD).md │ └── 040_article.md ├── 13. Ruby on Rails 基础 │ ├── 041_MVCWeb.md │ ├── 042_Web.md │ ├── 043_ActiveRecord.md │ └── 044_Web.md ├── 14. 数据库操作 │ ├── 045_ActiveRecord.md │ ├── 046_article.md │ └── 047_article.md ├── 15. Web 开发 │ ├── 048_Rack.md │ ├── 049_Sinatra.md │ └── 050_API.md ├── 16. 部署和运维 │ ├── 051_Capistrano.md │ ├── 052_Passenger Puma.md │ └── 053_Web.md ├── 17. Ruby 生态系统 │ ├── 054_RubyGems.md │ ├── 055_Bundler.md │ └── 056_Ruby Gems.md ├── 18. 设计模式和最佳实践 │ ├── 057_Ruby.md │ ├── 058_article.md │ └── 059_article.md ├── 19. 函数式编程概念 │ ├── 060_article.md │ ├── 061_JavaScript.md │ └── 062_article.md ├── 20. 项目实战 │ ├── 063_article.md │ ├── 064_Web.md │ └── 065_article.md ├── 21. Ruby 社区和资源 │ ├── 066_article.md │ ├── 067_article.md │ └── 068_article.md └── Ruby课程大纲.md ├── Rust ├── 01. 基础入门 │ ├── 001_Rust.md │ ├── 002_Rust rustup cargo.md │ ├── 003_Rust.md │ ├── 004_article.md │ └── 005_if loop while for.md ├── 02. 核心概念 │ ├── 006_article.md │ ├── 007_Rust.md │ ├── 008_React.md │ ├── 009_C.md │ └── 010_article.md ├── 03. 模块和包管理 │ ├── 011_Python.md │ ├── 012_CargoRust.md │ ├── 013_Rust Crate.md │ └── 014_article.md ├── 04. 高级特性 │ ├── 015_Java.md │ ├── 016_Rust (Traits).md │ ├── 017_Python.md │ ├── 018_C.md │ └── 019_article.md ├── 05. 内存管理和安全 │ ├── 020_article.md │ ├── 021_article.md │ ├── 022_Understanding Unsafe Rust.md │ └── 023_(Box Rc Arc).md ├── 06. 异步编程 │ ├── 024_Future asyncawait.md │ ├── 025_Tokio.md │ └── 026_IO.md ├── 07. 测试和文档 │ ├── 027_Python.md │ ├── 028_article.md │ ├── 029_article.md │ └── 030_article.md ├── 08. 性能优化 │ ├── 031_article.md │ ├── 032_article.md │ ├── 033_article.md │ └── 034_Introduction to SIMD Programming.md ├── 09. Rust 生态系统 │ ├── 035_serde rayon clap.md │ ├── 036_Web (Actix Rocket).md │ ├── 037_article.md │ └── 038_article.md ├── 10. 最佳实践 │ ├── 039_article.md │ ├── 040_article.md │ ├── 041_Rust.md │ └── 042_article.md ├── 11. 高级主题 │ ├── 043_article.md │ ├── 044_FFI.md │ ├── 045_Rust no_std.md │ └── 046_WebAssembly.md ├── 12. 实战项目 │ ├── 047_article.md │ ├── 048_Web.md │ └── 049_article.md ├── 13. 工具和资源 │ ├── 050_IDE (VS Code IntelliJ IDEA).md │ ├── 051_Rust Analyzer.md │ ├── 052_Clippy.md │ └── 053_article.md ├── 14. 版本更新 │ ├── 054_Rust.md │ └── 055_article.md ├── 15. 前沿技术 │ ├── 056_Rust.md │ ├── 057_Rust.md │ └── 058_Rust.md └── Rust课程大纲.md ├── SQL ├── 01. 基础入门 │ ├── 001_SQL.md │ ├── 002_article.md │ ├── 003_( MySQL PostgreSQL).md │ ├── 004_SQL.md │ └── 005_article.md ├── 02. 数据定义语言 (DDL) │ ├── 006_(CREATE TABLE) - SQL.md │ ├── 007_(ALTER TABLE).md │ ├── 008_(DROP TABLE).md │ ├── 009_article.md │ └── 010_article.md ├── 03. 数据操作语言 (DML) │ ├── 011_(INSERT) - SQL.md │ ├── 012_(UPDATE).md │ ├── 013_(DELETE) -.md │ ├── 014_(SELECT).md │ └── 015_WHERE - SQL.md ├── 04. 查询进阶 │ ├── 016_SQL (ORDER BY).md │ ├── 017_SQLGROUP BY.md │ ├── 018_SUM AVG COUNT MAX MIN.md │ ├── 019_SQLHAVING.md │ └── 020_SQL.md ├── 05. 多表查询 │ ├── 021_INNER JOIN LEFT JOIN RIGHT JOIN FULL JOIN.md │ ├── 022_SQL.md │ ├── 023_UNION UNION ALL.md │ └── 024_SQL.md ├── 06. 函数和表达式 │ ├── 025_Python.md │ ├── 026_article.md │ ├── 027_Python.md │ ├── 028_(CASE WHEN).md │ └── 029_article.md ├── 07. 事务管理 │ ├── 030_article.md │ ├── 031_ACID.md │ ├── 032_(BEGIN COMMIT ROLLBACK).md │ └── 033_article.md ├── 08. 索引和性能优化 │ ├── 034_-.md │ ├── 035_SQL.md │ ├── 036_article.md │ └── 037_article.md ├── 09. 存储过程和函数 │ ├── 038_SQL.md │ ├── 039_-.md │ ├── 040_Python.md │ └── 041_Python.md ├── 10. 触发器 │ ├── 042_article.md │ ├── 043_-.md │ ├── 044_BEFORE AFTER INSTEAD OF.md │ └── 045_article.md ├── 11. 视图 │ ├── 046_article.md │ ├── 047_-.md │ ├── 048_article.md │ └── 049_article.md ├── 12. 安全性和权限管理 │ ├── 050_article.md │ ├── 051_article.md │ ├── 052_article.md │ └── 053_article.md ├── 13. 高级查询技术 │ ├── 054_SQL.md │ ├── 055_(CTE).md │ ├── 056_article.md │ └── 057_PIVOT UNPIVOT.md ├── 14. 数据仓库概念 │ ├── 058_article.md │ ├── 059_article.md │ ├── 060_ETL.md │ └── 061_OLAP.md ├── 15. NoSQL 集成 │ ├── 062_NoSQL.md │ ├── 063_JSON.md │ └── 064_article.md ├── 16. 数据库设计 │ ├── 065_(ERD).md │ ├── 066_article.md │ └── 067_article.md ├── 17. 数据库管理和维护 │ ├── 068_article.md │ ├── 069_article.md │ ├── 070_article.md │ └── 071_article.md ├── 18. 大数据和分布式数据库 │ ├── 072_article.md │ ├── 073_article.md │ └── 074_article.md ├── 19. SQL 在应用开发中的应用 │ ├── 075_ORM.md │ ├── 076_article.md │ └── 077_article.md ├── 20. 项目实战 │ ├── 078_article.md │ ├── 079_article.md │ └── 080_article.md ├── 21. SQL 和数据库生态系统 │ ├── 081_MySQL PostgreSQL Oracle SQL Server.md │ ├── 082_SQL.md │ └── 083_article.md └── SQL课程大纲.md ├── Scala ├── 01. 基础入门 │ ├── 001_Scala.md │ ├── 002_JDKScala IDE.md │ ├── 003_Scala.md │ ├── 004_article.md │ └── 005_ifelse.md ├── 02. 核心概念 │ ├── 006_article.md │ ├── 007_article.md │ ├── 008_Python.md │ ├── 009_article.md │ └── 010_Python.md ├── 03. 高级特性 │ ├── 011_Rust (Traits).md │ ├── 012_JavaScript.md │ ├── 013_Java.md │ ├── 014_JavaScript.md │ └── 015_JavaScript.md ├── 04. 并发编程 │ ├── 016_Akka Actor.md │ ├── 017_JavaScriptFuturePromise.md │ ├── 018_article.md │ └── 019_article.md ├── 05. 工具和生态系统 │ ├── 020_SBTScala.md │ ├── 021_ScalaTest.md │ ├── 022_Scala REPL.md │ └── 023_CatsScalaz.md ├── 06. 最佳实践 │ ├── 024_article.md │ ├── 025_article.md │ ├── 026_article.md │ └── 027_article.md ├── 07. 高级主题 │ ├── 028_article.md │ ├── 029_article.md │ ├── 030_article.md │ └── 031_Java Java.md ├── 08. 实战项目 │ ├── 032_Web ( Play Framework).md │ ├── 033_( Apache Spark).md │ └── 034_RESTful API.md ├── 09. 工具和资源 │ ├── 035_IntelliJ IDEA Scala.md │ ├── 036_Scala.md │ └── 037_article.md ├── 10. 版本更新 │ ├── 038_Scala 3 (Dotty).md │ └── 039_Scala 2 Scala 3.md ├── 11. 前沿技术 │ ├── 040_Scala.js JavaScript.md │ ├── 041_Scala Native.md │ └── 042_ZIO.md └── Scala课程大纲.md ├── Swift ├── 01. 基础入门 │ ├── 001_Swift.md │ ├── 002_Xcode.md │ ├── 003_Swift Playground.md │ ├── 004_article.md │ ├── 005_article.md │ └── 006_article.md ├── 02. 控制流 │ ├── 007_if switch.md │ ├── 008_Swiftfor-in while repeat-while.md │ └── 009_(break continue).md ├── 03. 集合类型 │ ├── 010_article.md │ ├── 011_article.md │ └── 012_Python.md ├── 04. 函数和闭包 │ ├── 013_-.md │ ├── 014_article.md │ ├── 015_Swift.md │ └── 016_Swift.md ├── 05. 枚举和结构体 │ ├── 017_-.md │ ├── 018_Swift.md │ ├── 019_-.md │ └── 020_C.md ├── 06. 类和对象 │ ├── 021_- Python.md │ ├── 022_JavaScript.md │ ├── 023_article.md │ └── 024_article.md ├── 07. 协议和扩展 │ ├── 025_article.md │ ├── 026_Swift.md │ └── 027_article.md ├── 08. 错误处理 │ ├── 028_article.md │ ├── 029_Javathrowstry.md │ └── 030_article.md ├── 09. 泛型 │ ├── 031_article.md │ ├── 032_Java.md │ └── 033_article.md ├── 10. 内存管理 │ ├── 034_ARC()iOS.md │ └── 035_article.md ├── 11. 并发编程 │ ├── 036_GCD (Grand Central Dispatch).md │ ├── 037_iOS.md │ └── 038_article.md ├── 12. Swift 标准库 │ ├── 039_Swift Sequence Collection.md │ ├── 040_article.md │ └── 041_article.md ├── 13. 函数式编程 │ ├── 042_Pythonmap filter reduce.md │ ├── 043_JavaScript.md │ └── 044_article.md ├── 14. UI 开发基础 (UIKit) │ ├── 045_- iOS.md │ ├── 046_iOS.md │ └── 047_article.md ├── 15. SwiftUI 入门 │ ├── 048_UI.md │ ├── 049_-.md │ ├── 050_Python.md │ └── 051_article.md ├── 16. 网络编程 │ ├── 052_URLSessioniOS.md │ ├── 053_Codable Swift.md │ └── 054_JSON.md ├── 17. 数据持久化 │ ├── 055_Understanding UserDefaults in iOS Development.md │ ├── 056_Core Data.md │ └── 057_article.md ├── 18. 测试 │ ├── 058_XCTest iOS.md │ ├── 059_Python.md │ └── 060_UI.md ├── 19. 应用程序生命周期 │ ├── 061_App.md │ ├── 062_article.md │ └── 063_article.md ├── 20. 高级主题 │ ├── 064_Python.md │ ├── 065_article.md │ └── 066_Actor (Swift 5.5).md ├── 21. 设计模式 │ ├── 067_MVCMVVM.md │ ├── 068_C.md │ ├── 069_article.md │ └── 070_article.md ├── 22. 第三方库集成 │ ├── 071_CocoaPodsiOS.md │ └── 072_Swift Package Manager.md ├── 23. 项目实战 │ ├── 073_iOS.md │ ├── 074_macOS.md │ └── 075_Swift.md ├── 24. Swift 生态系统 │ ├── 076_Swift.md │ ├── 077_Swift.md │ └── 078_article.md └── Swift课程大纲.md ├── TypeScript ├── 01. 基础入门 │ ├── 001_TypeScript.md │ ├── 002_Node.js TypeScript.md │ ├── 003_TypeScript.md │ ├── 004_-.md │ └── 005_TypeScript (tsconfig.json).md ├── 02. TypeScript 类型系统 │ ├── 006_(number string boolean array tuple).md │ ├── 007_article.md │ ├── 008_TypeScript Any Unknown.md │ ├── 009_Understanding Void Null and Undefined in Programming.md │ ├── 010_TypeScript Never.md │ └── 011_TypeScript.md ├── 03. 函数 │ ├── 012_article.md │ ├── 013_Python.md │ ├── 014_JavaScript.md │ ├── 015_C.md │ └── 016_JavaScriptThis.md ├── 04. 接口和类型 │ ├── 017_article.md │ ├── 018_Python.md │ ├── 019_TypeScript.md │ ├── 020_- TypeScript.md │ ├── 021_Java.md │ └── 022_vs TypeScript.md ├── 05. 类 │ ├── 023_-.md │ ├── 024_article.md │ ├── 025_Javapublic private protected.md │ ├── 026_article.md │ └── 027_Java.md ├── 06. 高级类型 │ ├── 028_TypeScript.md │ ├── 029_TypeScript.md │ ├── 030_TypeScript.md │ ├── 031_null.md │ ├── 032_article.md │ └── 033_TypeScript.md ├── 07. 泛型 │ ├── 034_article.md │ ├── 035_Java.md │ ├── 036_Java.md │ └── 037_Java.md ├── 08. 模块和命名空间 │ ├── 038_ES6.md │ ├── 039_C.md │ └── 040_article.md ├── 09. 装饰器 │ ├── 041_Python.md │ ├── 042_Python.md │ ├── 043_Python.md │ └── 044_Python.md ├── 10. 高级特性 │ ├── 045_(Mixins).md │ ├── 046_TypeScript.md │ ├── 047_Python.md │ ├── 048_TypeScript infer.md │ └── 049_TypeScript Partial Readonly Pick.md ├── 11. 异步编程 │ ├── 050_Understanding JavaScript Promises.md │ ├── 051_AsyncAwaitJavaScript.md │ └── 052_article.md ├── 12. TypeScript 与 React │ ├── 053_React (Create React App with TypeScript).md │ ├── 054_article.md │ ├── 055_Props State.md │ ├── 056_article.md │ └── 057_React Hooks TypeScript.md ├── 13. TypeScript 与 Node.js │ ├── 058_TypeScript Node.js.md │ ├── 059_TypeScript (types).md │ └── 060_TypeScript Express.md ├── 14. 测试 │ ├── 061_Jest TypeScript.md │ ├── 062_article.md │ └── 063_article.md ├── 15. 工具和生态系统 │ ├── 064_TSLint ESLint.md │ ├── 065_Webpack TypeScript.md │ └── 066_TypeScript API.md ├── 16. 设计模式 │ ├── 067_TypeScript.md │ └── 068_article.md ├── 17. 性能优化 │ ├── 069_article.md │ └── 070_article.md ├── 18. 项目实战 │ ├── 071_TypeScript.md │ └── 072_TypeScript.md ├── 19. TypeScript 生态系统 │ ├── 073_TypeScript.md │ ├── 074_TypeScript.md │ └── 075_article.md └── TypeScript课程大纲.md ├── Vue.js ├── 01. 基础入门 │ ├── 001_Vue.js.md │ ├── 002_Vue CLI Vite.md │ ├── 003_Vue.md │ ├── 004_Vue.md │ └── 005_article.md ├── 02. 核心概念 │ ├── 006_article.md │ ├── 007_Props Events ProvideInject.md │ ├── 008_Vue.js.md │ ├── 009_article.md │ └── 010_-.md ├── 03. 组件和样式 │ ├── 011_Vue.js(.vue).md │ ├── 012_() - Vue.js.md │ ├── 013_Scoped CSSVue.js.md │ ├── 014_CSSSassLess.md │ └── 015_- Vue.js.md ├── 04. 高级特性 │ ├── 016_Vue Router.md │ ├── 017_Vuex.md │ ├── 018_(Mixins).md │ ├── 019_article.md │ └── 020_article.md ├── 05. 性能优化 │ ├── 021_DOM diff.md │ ├── 022_Vue.js.md │ ├── 023_Vue.js Keep-Alive.md │ └── 024_article.md ├── 06. 工具和生态系统 │ ├── 025_Vue DevToolsVue.js.md │ ├── 026_Vue Test UtilsVue.js.md │ ├── 027_Vue CLI.md │ └── 028_Nuxt.jsVue.js.md ├── 07. 最佳实践 │ ├── 029_article.md │ ├── 030_article.md │ ├── 031_article.md │ └── 032_Web.md ├── 08. 高级主题 │ ├── 033_TypeScript Vue.md │ ├── 034_JSX.md │ ├── 035_(SSR).md │ └── 036_(SSG).md ├── 09. 实战项目 │ ├── 037_article.md │ ├── 038_article.md │ └── 039_article.md ├── 10. 工具和资源 │ ├── 040_UI (Element UI Vuetify).md │ ├── 041_(Pinia).md │ ├── 042_article.md │ └── 043_article.md ├── 11. Vue 3 新特性 │ ├── 044_Vue 3Composition API.md │ ├── 045_Teleport - Vue.js.md │ ├── 046_Android Fragments.md │ └── 047_Vue 2 Vue 3.md ├── 12. 前沿技术 │ ├── 048_Vite.md │ ├── 049_Vue 3 TypeScript.md │ ├── 050_VueUse.md │ └── 051_().md └── Vue.js课程大纲.md └── restore.py /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next", 3 | "rules": { 4 | "react/no-unescaped-entities": "off", 5 | "@next/next/no-page-custom-font": "off" 6 | } 7 | } -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /ads.txt: -------------------------------------------------------------------------------- 1 | google.com, pub-7522094408813551, DIRECT, f08c47fec0942fa0 -------------------------------------------------------------------------------- /app/GoogleAnalytics.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import Script from 'next/script'; 4 | 5 | export default function GoogleAnalytics() { 6 | return ( 7 | <> 8 | 12 | 21 | > 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /app/[language]/ClientSideTutorialTree.tsx: -------------------------------------------------------------------------------- 1 | //ts-nocheck 2 | 3 | 'use client'; 4 | 5 | import { usePathname } from 'next/navigation' 6 | import Link from 'next/link' 7 | import { useState } from 'react' 8 | 9 | interface TutorialItem { 10 | title: string; 11 | path: string; 12 | items?: TutorialItem[]; 13 | } 14 | 15 | function RenderTutorialTree({ items, language, currentPath }: { items: TutorialItem[], language: string, currentPath: string }) { 16 | return ( 17 |
9 | CoderWithAI is a comprehensive online learning platform designed to help individuals master various programming languages. Our goal is to provide high-quality, accessible tutorials for learners of all levels, from beginners to advanced programmers. 10 |
11 |12 | Our platform features: 13 |
14 |21 | We believe in the power of education and the importance of making programming knowledge accessible to everyone. Our team of experienced developers and educators work tirelessly to create content that is both informative and engaging. 22 |
23 |24 | Whether you're looking to start a career in software development, enhance your current skills, or simply explore the world of programming, we're here to support your learning journey. 25 |
26 | 27 | Return to Home 28 | 29 |{message}
11 |Something went wrong:
10 |{error.message}11 |
{tutorial.description}
} 25 |9 | We value your feedback and are always here to assist you. If you have any questions, suggestions, or concerns, please don't hesitate to reach out to us. 10 |
11 |19 | Stay updated with our latest tutorials and programming tips by following us on social media: 20 |
21 |27 | We aim to respond to all inquiries within 24-48 hours during business days. 28 |
29 | 30 | Return to Home 31 | 32 |9 | At CoderWithAI, we are committed to protecting your privacy and ensuring the security of your personal information. This Privacy Policy outlines how we collect, use, and safeguard your data when you use our website. 10 |
11 |13 | We may collect the following types of information: 14 |
15 |22 | We use the collected information to: 23 |
24 |32 | We implement appropriate technical and organizational measures to protect your personal information against unauthorized access, alteration, disclosure, or destruction. 33 |
34 |36 | You have the right to access, correct, or delete your personal information. If you have any questions or requests regarding your data, please contact us. 37 |
38 |39 | This privacy policy is subject to change. We encourage you to review it periodically. 40 |
41 |42 | Last updated: {new Date().toLocaleDateString()} 43 |
44 | 45 | Return to Home 46 | 47 |`)用于包裹文本内容。Bootstrap 为段落提供了默认的样式,使其在不同设备上都能保持一致的外观。 59 | 60 | ```html 61 |
这是一个段落。段落用于包裹文本内容,使其在不同设备上都能保持一致的外观。
62 | ``` 63 | 64 | ### 2.2 段落的样式 65 | 66 | Bootstrap 为段落提供了默认的字体大小、行高和颜色。你可以通过覆盖这些样式来自定义段落的外观。 67 | 68 | ```html 69 | 76 |这是一个自定义样式的段落。
77 | ``` 78 | 79 | ### 2.3 实践练习 80 | 81 | 创建一个包含多个段落的 HTML 页面,并尝试通过 CSS 自定义它们的样式。 82 | 83 | ## 3. 结合使用标题和段落 84 | 85 | 在实际网页设计中,标题和段落通常是结合使用的。标题用于定义内容的层次结构,而段落用于详细描述内容。 86 | 87 | ```html 88 |在网页设计中,标题和段落是最基本的文本元素。它们不仅用于传达信息,还通过结构化的方式帮助用户更好地理解内容。
90 |标题元素(`
段落元素(`
`)用于包裹文本内容。Bootstrap 为段落提供了默认的样式,使其在不同设备上都能保持一致的外观。
94 | ``` 95 | 96 | ### 3.1 实践练习 97 | 98 | 创建一个包含多个标题和段落的 HTML 页面,并尝试通过 CSS 自定义它们的样式。 99 | 100 | ## 4. 总结 101 | 102 | 标题和段落是网页设计中最基本的文本元素。通过合理使用标题和段落,你可以帮助用户更好地理解内容,并提升网页的可读性。Bootstrap 为这些元素提供了默认的样式,同时也允许你通过 CSS 进行自定义。 103 | 104 | 通过本教程的学习,你应该能够熟练地在 Bootstrap 中使用标题和段落,并能够通过 CSS 自定义它们的样式。希望你能将这些知识应用到实际的网页设计中,创造出更加美观和易读的网页。 -------------------------------------------------------------------------------- /tutorials/Bootstrap/16. 跨浏览器兼容性/080_article.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 测试和调试技巧:提升编程效率的关键 3 | date: 2023-10-05 4 | description: 本课程深入探讨了测试和调试技巧,帮助开发者提升编程效率,减少错误,并优化代码质量。 5 | slug: testing-debugging-techniques 6 | tags: 7 | - 测试 8 | - 调试 9 | - 编程技巧 10 | category: 编程教程 11 | keywords: 12 | - 测试技巧 13 | - 调试方法 14 | - 代码优化 15 | --- 16 | 17 | # 测试和调试技巧 18 | 19 | 在Web开发过程中,测试和调试是确保代码质量和用户体验的关键步骤。本教程将介绍一些基本的测试和调试技巧,帮助你更好地理解和解决开发中遇到的问题。 20 | 21 | ## 1. 理论解释 22 | 23 | ### 1.1 测试的重要性 24 | 25 | 测试是确保代码按照预期工作的过程。通过测试,你可以发现并修复代码中的错误,确保应用在不同环境和设备上的表现一致。 26 | 27 | ### 1.2 调试的必要性 28 | 29 | 调试是定位和修复代码中错误的过程。通过调试,你可以逐步检查代码的执行过程,找出问题的根源并进行修正。 30 | 31 | ## 2. 代码示例 32 | 33 | ### 2.1 单元测试 34 | 35 | 单元测试是针对代码中最小单元的测试,通常是函数或方法。以下是一个使用Jest进行单元测试的示例: 36 | 37 | ```javascript 38 | // 被测试的函数 39 | function add(a, b) { 40 | return a + b; 41 | } 42 | 43 | // 测试用例 44 | test('adds 1 + 2 to equal 3', () => { 45 | expect(add(1, 2)).toBe(3); 46 | }); 47 | ``` 48 | 49 | ### 2.2 调试技巧 50 | 51 | 使用浏览器的开发者工具进行调试是常见的做法。以下是一个简单的调试示例: 52 | 53 | ```javascript 54 | function calculateSum(a, b) { 55 | let sum = a + b; 56 | console.log('Sum:', sum); // 使用console.log进行调试 57 | return sum; 58 | } 59 | 60 | calculateSum(5, 10); 61 | ``` 62 | 63 | ## 3. 实践练习 64 | 65 | ### 3.1 单元测试练习 66 | 67 | 1. 创建一个简单的JavaScript函数,例如`multiply(a, b)`,用于计算两个数的乘积。 68 | 2. 使用Jest编写测试用例,验证该函数在不同输入下的输出是否正确。 69 | 70 | ### 3.2 调试练习 71 | 72 | 1. 创建一个包含错误的JavaScript函数,例如`calculateArea(width, height)`,用于计算矩形的面积。 73 | 2. 使用浏览器的开发者工具逐步调试该函数,找出并修复错误。 74 | 75 | ## 4. 常见问题及解决方案 76 | 77 | ### 4.1 测试覆盖率不足 78 | 79 | **解决方案**:确保每个函数和方法都有对应的测试用例,覆盖所有可能的输入和边界条件。 80 | 81 | ### 4.2 调试信息不明确 82 | 83 | **解决方案**:使用详细的日志信息,例如`console.log`或`console.error`,帮助定位问题。 84 | 85 | ## 5. 总结 86 | 87 | 测试和调试是Web开发中不可或缺的环节。通过掌握基本的测试和调试技巧,你可以更高效地开发和维护代码,确保应用的质量和稳定性。 88 | 89 | 希望本教程能帮助你更好地理解和应用测试和调试技巧。继续学习和实践,你将能够在开发过程中更加游刃有余。 -------------------------------------------------------------------------------- /tutorials/Bootstrap/Bootstrap课程大纲.md: -------------------------------------------------------------------------------- 1 | # Bootstrap 课程大纲 2 | 3 | ## 基础入门 4 | - Bootstrap 简介和历史 5 | - 安装和引入 Bootstrap 6 | - 响应式设计原理 7 | - 网格系统基础 8 | - 移动优先设计 9 | 10 | ## 排版和文本 11 | - 标题和段落 12 | - 文本对齐和转换 13 | - 列表样式 14 | - 引用和代码块 15 | - 文本颜色和背景 16 | 17 | ## 组件 18 | - 按钮和按钮组 19 | - 导航和导航栏 20 | - 下拉菜单 21 | - 表单和输入组 22 | - 卡片和媒体对象 23 | 24 | ## 布局组件 25 | - 容器类型 26 | - 网格系统详解 27 | - Flexbox 布局 28 | - 响应式工具类 29 | - 间距和边距 30 | 31 | ## 表单 32 | - 表单布局 33 | - 表单控件样式 34 | - 表单验证状态 35 | - 自定义表单 36 | - 输入组和前缀后缀 37 | 38 | ## 实用工具类 39 | - 边框和圆角 40 | - 颜色系统 41 | - 显示属性 42 | - 定位和浮动 43 | - 阴影效果 44 | 45 | ## JavaScript 组件 46 | - 模态框 47 | - 轮播图 48 | - 折叠面板 49 | - 标签页和手风琴 50 | - 工具提示和弹出框 51 | 52 | ## 自定义 Bootstrap 53 | - 使用 Sass 变量 54 | - 主题定制 55 | - 编译自定义 CSS 56 | - 创建自定义组件 57 | - 覆盖默认样式 58 | 59 | ## 响应式设计进阶 60 | - 断点管理 61 | - 响应式图片 62 | - 隐藏和显示元素 63 | - 响应式嵌入内容 64 | - 打印样式 65 | 66 | ## 图标和图形 67 | - Bootstrap Icons 68 | - Font Awesome 集成 69 | - SVG 图标使用 70 | - 自定义图标字体 71 | - 图标动画效果 72 | 73 | ## 表格和数据展示 74 | - 基本表格样式 75 | - 响应式表格 76 | - 数据网格 77 | - 分页组件 78 | - 排序和过滤 79 | 80 | ## 动画和过渡 81 | - CSS 过渡效果 82 | - 动画工具类 83 | - 滚动动画 84 | - 加载动画 85 | - 自定义动画 86 | 87 | ## 辅助功能和可访问性 88 | - ARIA 属性使用 89 | - 键盘导航 90 | - 屏幕阅读器兼容性 91 | - 颜色对比度 92 | - 可访问性最佳实践 93 | 94 | ## 性能优化 95 | - 按需加载组件 96 | - 压缩和合并资源 97 | - 图片优化 98 | - 关键 CSS 提取 99 | - 延迟加载技术 100 | 101 | ## 集成第三方库 102 | - 日期选择器 103 | - 数据表格插件 104 | - 图表库集成 105 | - 富文本编辑器 106 | - 文件上传组件 107 | 108 | ## 跨浏览器兼容性 109 | - 浏览器支持范围 110 | - polyfills 使用 111 | - 渐进增强策略 112 | - 浏览器特定样式 113 | - 测试和调试技巧 114 | 115 | ## 工作流和开发工具 116 | - npm 和包管理 117 | - 使用 Gulp 或 Webpack 118 | - 版本控制最佳实践 119 | - 代码质量工具 120 | - 文档生成 121 | 122 | ## 响应式邮件模板 123 | - 邮件模板基础 124 | - 响应式邮件设计 125 | - 跨邮件客户端兼容性 126 | - 邮件模板测试 127 | - 邮件营销最佳实践 128 | 129 | ## 项目实战 130 | - 响应式网站开发 131 | - 管理后台界面设计 132 | - 电子商务网站前端 133 | - 移动应用界面原型 134 | 135 | ## Bootstrap 生态系统 136 | - Bootstrap 主题市场 137 | - 常用插件和扩展 138 | - Bootstrap 社区和资源 139 | - 持续学习和新版本跟进 -------------------------------------------------------------------------------- /tutorials/CSS/CSS课程大纲.md: -------------------------------------------------------------------------------- 1 | # CSS 课程大纲 2 | 3 | ## 基础入门 4 | - CSS 简介和历史 5 | - CSS 语法和选择器 6 | - 盒模型和布局基础 7 | - 颜色和背景 8 | - 文本样式和字体 9 | 10 | ## 核心概念 11 | - 定位和浮动 12 | - Flexbox 布局 13 | - Grid 布局 14 | - 响应式设计 15 | - 动画和过渡效果 16 | 17 | ## 高级特性 18 | - CSS 预处理器 (Sass, Less) 19 | - CSS 变量 20 | - CSS Modules 21 | - CSS-in-JS 22 | - CSS Houdini 23 | 24 | ## 性能优化 25 | - CSS 优化技巧 26 | - 关键 CSS 27 | - CSS 代码分割 28 | - 浏览器渲染原理 29 | - 性能测试和分析 30 | 31 | ## 最佳实践 32 | - CSS 命名规范 (BEM, OOCSS) 33 | - CSS 架构 (ITCSS, SMACSS) 34 | - 可维护性和可扩展性 35 | - 跨浏览器兼容性 36 | - 可访问性 (WCAG) 37 | 38 | ## 工具和框架 39 | - CSS 重置和 Normalize.css 40 | - CSS 框架 (Bootstrap, Tailwind CSS) 41 | - PostCSS 和插件生态系统 42 | - CSS-in-JS 库 (styled-components, Emotion) 43 | - CSS 调试工具 44 | 45 | ## 高级主题 46 | - CSS Hacks 和技巧 47 | - CSS 自定义属性 (CSS Variables) 48 | - CSS 计数器和生成内容 49 | - 打印样式 50 | - 国际化和本地化 51 | 52 | ## 实战项目 53 | - 响应式网站设计 54 | - 动画效果库 55 | - 自定义 CSS 框架 56 | - 主题切换系统 57 | 58 | ## 工具和资源 59 | - CSS 验证工具 60 | - CSS 在线编辑器 61 | - 图标库和 CSS Sprite 62 | - 社区资源和博客 63 | - 官方规范和文档 64 | 65 | ## 新特性和未来趋势 66 | - CSS Grid Level 2 67 | - CSS Nesting 68 | - CSS Layers 69 | - Container Queries 70 | - 新的选择器和伪类 -------------------------------------------------------------------------------- /tutorials/CSharp/01. 基础入门/003_C (Hello World).md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 创建第一个C#程序 (Hello World) 3 | date: 2023-10-05 4 | description: 本课程将指导您如何使用C#编程语言创建您的第一个程序,即经典的“Hello World”程序。 5 | slug: first-csharp-program-hello-world 6 | tags: 7 | - C# 8 | - 编程入门 9 | - Hello World 10 | category: 编程基础 11 | keywords: 12 | - C#入门 13 | - Hello World程序 14 | - C#编程教程 15 | --- 16 | 17 | # 创建第一个C#程序 (Hello World) 18 | 19 | ## 1. 概述 20 | 21 | 在本教程中,我们将学习如何创建一个简单的C#程序,即经典的“Hello World”程序。通过这个程序,你将了解C#的基本语法和如何在Visual Studio中编写、编译和运行C#代码。 22 | 23 | ## 2. 环境搭建 24 | 25 | ### 2.1 安装Visual Studio 26 | 27 | Visual Studio是微软提供的一款强大的集成开发环境(IDE),适用于C#开发。你可以从[Visual Studio官网](https://visualstudio.microsoft.com/)下载并安装它。 28 | 29 | ### 2.2 安装.NET SDK 30 | 31 | .NET SDK是开发.NET应用程序所需的软件开发工具包。它包含了编译器、库和工具,用于构建和运行C#应用程序。你可以从[.NET官网](https://dotnet.microsoft.com/download)下载并安装.NET SDK。 32 | 33 | ## 3. 创建第一个C#程序 34 | 35 | ### 3.1 打开Visual Studio 36 | 37 | 1. 启动Visual Studio。 38 | 2. 选择“创建新项目”。 39 | 3. 在项目模板中选择“控制台应用”。 40 | 4. 输入项目名称(例如“HelloWorld”)并选择保存位置。 41 | 5. 点击“创建”按钮。 42 | 43 | ### 3.2 编写代码 44 | 45 | Visual Studio会自动生成一个包含`Program.cs`文件的项目。打开`Program.cs`文件,你会看到以下代码: 46 | 47 | ```csharp 48 | using System; 49 | 50 | namespace HelloWorld 51 | { 52 | class Program 53 | { 54 | static void Main(string[] args) 55 | { 56 | Console.WriteLine("Hello World!"); 57 | } 58 | } 59 | } 60 | ``` 61 | 62 | ### 3.3 代码解释 63 | 64 | - `using System;`:引入`System`命名空间,使得我们可以使用`Console`类。 65 | - `namespace HelloWorld`:定义一个名为`HelloWorld`的命名空间。 66 | - `class Program`:定义一个名为`Program`的类。 67 | - `static void Main(string[] args)`:定义程序的入口点,即`Main`方法。 68 | - `Console.WriteLine("Hello World!");`:在控制台输出“Hello World!”。 69 | 70 | ### 3.4 运行程序 71 | 72 | 1. 点击Visual Studio工具栏中的“启动”按钮(绿色三角形)。 73 | 2. 程序将在控制台窗口中运行,并显示“Hello World!”。 74 | 75 | ## 4. 实践练习 76 | 77 | ### 4.1 修改输出内容 78 | 79 | 尝试修改`Console.WriteLine`中的字符串,例如改为“Hello, C#!”,然后重新运行程序,观察输出结果。 80 | 81 | ### 4.2 添加更多输出 82 | 83 | 在`Main`方法中添加更多的`Console.WriteLine`语句,输出不同的内容,例如: 84 | 85 | ```csharp 86 | Console.WriteLine("Welcome to C# programming!"); 87 | Console.WriteLine("This is your first C# program."); 88 | ``` 89 | 90 | ### 4.3 理解命名空间 91 | 92 | 尝试在不同的命名空间中创建新的类,并在`Main`方法中调用这些类的方法,理解命名空间的作用。 93 | 94 | ## 5. 总结 95 | 96 | 通过本教程,你已经成功创建并运行了第一个C#程序。你学习了如何在Visual Studio中创建项目、编写代码以及运行程序。接下来,你可以继续学习C#的基本语法和数据类型,逐步深入了解C#编程的更多内容。 97 | 98 | ## 6. 下一步 99 | 100 | 在掌握了“Hello World”程序的创建后,你可以继续学习C#的基本语法和数据类型,为后续的面向对象编程打下坚实的基础。 -------------------------------------------------------------------------------- /tutorials/CSharp/C#课程大纲.md: -------------------------------------------------------------------------------- 1 | # C# 课程大纲 2 | 3 | ## 基础入门 4 | - C# 简介和特性 5 | - 环境搭建 (Visual Studio, .NET SDK) 6 | - 创建第一个C#程序 (Hello World) 7 | - 基本语法和数据类型 8 | - 变量、常量和运算符 9 | 10 | ## 核心概念 11 | - 面向对象编程 (OOP) 基础 12 | - 类和对象 13 | - 继承和多态 14 | - 接口和抽象类 15 | - 命名空间和程序集 16 | 17 | ## 高级特性 18 | - 泛型 19 | - 委托和事件 20 | - LINQ (Language Integrated Query) 21 | - 异步编程 (async/await) 22 | - 反射和特性 23 | 24 | ## 内存管理和性能 25 | - 值类型和引用类型 26 | - 垃圾回收机制 27 | - 使用 using 语句管理资源 28 | - 性能优化技巧 29 | - 内存泄漏防范 30 | 31 | ## 文件和数据处理 32 | - 文件I/O操作 33 | - 序列化和反序列化 34 | - 数据库访问 (ADO.NET, Entity Framework) 35 | - XML和JSON处理 36 | - 正则表达式 37 | 38 | ## 图形用户界面 (GUI) 39 | - Windows Forms 基础 40 | - WPF (Windows Presentation Foundation) 41 | - XAML 基础 42 | - 数据绑定 43 | - 控件和布局 44 | 45 | ## Web开发 46 | - ASP.NET Core 简介 47 | - MVC 架构 48 | - Razor Pages 49 | - Web API 开发 50 | - Blazor 框架入门 51 | 52 | ## 测试和调试 53 | - 单元测试 (NUnit, xUnit) 54 | - 集成测试 55 | - 调试技巧 56 | - 日志记录 57 | - 代码覆盖率 58 | 59 | ## 设计模式和最佳实践 60 | - 常用设计模式 61 | - SOLID 原则 62 | - 代码重构 63 | - 依赖注入 64 | - 单元测试最佳实践 65 | 66 | ## 高级主题 67 | - 多线程编程 68 | - 网络编程 (Socket, HTTP) 69 | - 安全性和加密 70 | - 与操作系统交互 71 | - 性能分析和优化 72 | 73 | ## 项目实战 74 | - 控制台应用程序 75 | - Windows 桌面应用 76 | - Web 应用开发 77 | - 移动应用开发 (Xamarin) 78 | 79 | ## 工具和资源 80 | - NuGet 包管理 81 | - 版本控制 (Git) 82 | - CI/CD 工具 83 | - 社区资源和文档 84 | 85 | ## 最新特性 86 | - C# 最新版本特性介绍 87 | - .NET 6/7 新功能 88 | - 跨平台开发 -------------------------------------------------------------------------------- /tutorials/Cpp/C++课程大纲.md: -------------------------------------------------------------------------------- 1 | # C++ 课程大纲 2 | 3 | ## 基础入门 4 | - C++ 简介和历史 5 | - 环境搭建 (编译器选择和安装) 6 | - 创建第一个C++程序 (Hello World) 7 | - 基本语法和数据类型 8 | - 变量、常量和运算符 9 | 10 | ## 核心概念 11 | - 函数和函数重载 12 | - 控制流 (if-else, switch, for, while) 13 | - 数组和字符串 14 | - 指针和引用 15 | - 结构体和类 16 | 17 | ## 面向对象编程 18 | - 类和对象 19 | - 封装、继承和多态 20 | - 构造函数和析构函数 21 | - 虚函数和抽象类 22 | - 运算符重载 23 | 24 | ## 高级特性 25 | - 模板和泛型编程 26 | - 异常处理 27 | - 命名空间 28 | - 智能指针 29 | - Lambda 表达式 30 | 31 | ## 标准库 32 | - 输入输出流 (iostream) 33 | - 容器 (vector, list, map) 34 | - 算法库 35 | - 字符串处理 (string) 36 | - 多线程支持 (thread) 37 | 38 | ## 内存管理 39 | - 动态内存分配 (new 和 delete) 40 | - 内存泄漏和调试技巧 41 | - 智能指针详解 (unique_ptr, shared_ptr, weak_ptr) 42 | - 自定义内存分配器 43 | 44 | ## 现代C++特性 45 | - C++11/14/17/20 新特性概览 46 | - 移动语义和右值引用 47 | - auto 和 decltype 48 | - 范围for循环 49 | - 初始化列表 50 | 51 | ## 设计模式和最佳实践 52 | - 常用设计模式在C++中的实现 53 | - SOLID原则 54 | - 代码重构技巧 55 | - 性能优化策略 56 | 57 | ## 项目实战 58 | - 控制台应用程序 59 | - 图形用户界面 (GUI) 应用 60 | - 网络编程基础 61 | 62 | ## 工具和资源 63 | - 版本控制 (Git) 64 | - 构建系统 (CMake) 65 | - 单元测试框架 (Google Test) 66 | - 代码文档生成 (Doxygen) 67 | - 社区资源和推荐书籍 68 | 69 | ## 高级主题 70 | - 元编程和模板元编程 71 | - C++/CLI 和与其他语言的交互 72 | - 并行编程和并发 73 | - 嵌入式系统中的C++ 74 | -------------------------------------------------------------------------------- /tutorials/Django/09. 缓存机制/041_Web.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 视图缓存:优化Web应用性能的关键技术 3 | date: 2023-10-05 4 | description: 本课程深入探讨视图缓存技术,帮助开发者优化Web应用性能,减少服务器负载,提升用户体验。 5 | slug: view-caching-optimization 6 | tags: 7 | - 性能优化 8 | - Web开发 9 | - 缓存技术 10 | category: 编程技术 11 | keywords: 12 | - 视图缓存 13 | - 性能优化 14 | - Web应用 15 | --- 16 | 17 | # 视图缓存 18 | 19 | ## 概述 20 | 21 | 在Web开发中,缓存是一种提高性能的重要手段。Django提供了强大的缓存机制,可以帮助我们减少数据库查询和服务器负载。视图缓存是Django缓存机制的一部分,它允许我们将视图的输出结果缓存起来,以便在后续请求中直接使用缓存的结果,而不必每次都重新生成视图。 22 | 23 | ## 为什么需要视图缓存? 24 | 25 | 视图缓存的主要目的是减少服务器的工作量,提高响应速度。对于那些不经常变化的内容,缓存可以显著减少数据库查询和模板渲染的时间。例如,一个包含大量静态内容的页面,或者一个需要复杂计算的页面,都可以通过视图缓存来优化性能。 26 | 27 | ## 视图缓存的配置 28 | 29 | ### 1. 缓存后端配置 30 | 31 | 在Django中,缓存可以通过多种后端来实现,包括内存缓存、文件缓存、数据库缓存等。首先,我们需要在`settings.py`中配置缓存后端。 32 | 33 | ```python 34 | CACHES = { 35 | 'default': { 36 | 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 37 | 'LOCATION': 'unique-snowflake', 38 | } 39 | } 40 | ``` 41 | 42 | 上面的配置使用了内存缓存(`LocMemCache`),`LOCATION`是一个唯一的标识符,用于区分不同的缓存实例。 43 | 44 | ### 2. 启用视图缓存 45 | 46 | Django提供了两种方式来启用视图缓存:使用装饰器和使用模板标签。 47 | 48 | #### 使用装饰器 49 | 50 | Django提供了一个名为`cache_page`的装饰器,可以直接应用于视图函数或类视图。 51 | 52 | ```python 53 | from django.views.decorators.cache import cache_page 54 | from django.shortcuts import render 55 | 56 | @cache_page(60 * 15) # 缓存15分钟 57 | def my_view(request): 58 | # 视图逻辑 59 | return render(request, 'my_template.html') 60 | ``` 61 | 62 | 在上面的例子中,`my_view`的输出结果将被缓存15分钟。 63 | 64 | #### 使用模板标签 65 | 66 | 如果你只想缓存视图的一部分内容,可以使用模板标签`{% cache %}`。 67 | 68 | ```html 69 | {% load cache %} 70 | {% cache 500 sidebar %} 71 | 72 | {% endcache %} 73 | ``` 74 | 75 | 上面的代码将`sidebar`部分的内容缓存500秒。 76 | 77 | ## 实践练习 78 | 79 | ### 练习1:使用装饰器缓存视图 80 | 81 | 1. 创建一个新的Django项目和应用。 82 | 2. 在`views.py`中定义一个视图函数,并使用`cache_page`装饰器缓存该视图。 83 | 3. 配置缓存后端,并在浏览器中访问该视图,观察缓存效果。 84 | 85 | ### 练习2:使用模板标签缓存部分内容 86 | 87 | 1. 在模板文件中使用`{% cache %}`标签缓存页面的某个部分。 88 | 2. 修改缓存时间,观察缓存效果。 89 | 90 | ## 缓存策略和最佳实践 91 | 92 | ### 1. 选择合适的缓存时间 93 | 94 | 缓存时间的选择取决于内容的更新频率。对于频繁更新的内容,缓存时间应较短;对于静态内容,缓存时间可以较长。 95 | 96 | ### 2. 缓存失效机制 97 | 98 | Django提供了缓存失效机制,可以通过`cache.delete`方法手动删除缓存。 99 | 100 | ```python 101 | from django.core.cache import cache 102 | 103 | cache.delete('my_view') 104 | ``` 105 | 106 | ### 3. 缓存键的唯一性 107 | 108 | 确保缓存键的唯一性,避免不同内容使用相同的缓存键。 109 | 110 | ## 总结 111 | 112 | 视图缓存是Django中提高性能的重要手段之一。通过合理配置和使用缓存,可以显著减少服务器负载,提高应用的响应速度。希望本教程能帮助你理解和掌握Django中的视图缓存技术。 -------------------------------------------------------------------------------- /tutorials/Django/12. 安全性/055_CSRF -.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CSRF 保护 - 防止跨站请求伪造攻击 3 | date: 2023-10-05 4 | description: 本课程详细讲解如何通过实施CSRF保护措施来防止跨站请求伪造攻击,确保Web应用程序的安全性。 5 | slug: csrf-protection 6 | tags: 7 | - 网络安全 8 | - Web开发 9 | - 安全防护 10 | category: 编程安全 11 | keywords: 12 | - CSRF保护 13 | - 跨站请求伪造 14 | - Web安全 15 | --- 16 | 17 | # CSRF 保护 18 | 19 | ## 概述 20 | 21 | 跨站请求伪造(CSRF)是一种常见的网络攻击手段,攻击者通过诱导用户在已登录的网站上执行非预期的操作,从而达到攻击目的。Django 提供了内置的 CSRF 保护机制,帮助开发者防范这种攻击。 22 | 23 | ## 理论解释 24 | 25 | ### 什么是 CSRF? 26 | 27 | CSRF 攻击利用了用户在已登录的网站上保持的会话状态。攻击者通过构造一个恶意请求,诱导用户在不知情的情况下执行操作。例如,攻击者可能通过电子邮件发送一个链接,用户点击后会向银行网站发送转账请求。 28 | 29 | ### Django 的 CSRF 保护机制 30 | 31 | Django 通过在表单中添加一个隐藏的 CSRF 令牌来保护用户免受 CSRF 攻击。这个令牌在用户提交表单时会被验证,确保请求是合法的。 32 | 33 | ## 代码示例 34 | 35 | ### 启用 CSRF 保护 36 | 37 | Django 默认启用了 CSRF 保护。你只需要在表单中添加 `{% csrf_token %}` 标签即可。 38 | 39 | ```html 40 | 41 | 47 | ``` 48 | 49 | ### 视图中的 CSRF 保护 50 | 51 | 在视图中,Django 会自动检查 CSRF 令牌。如果令牌无效,Django 会返回一个 403 Forbidden 错误。 52 | 53 | ```python 54 | # myapp/views.py 55 | from django.shortcuts import render 56 | from django.views.decorators.csrf import csrf_protect 57 | 58 | @csrf_protect 59 | def my_view(request): 60 | if request.method == 'POST': 61 | # 处理表单提交 62 | pass 63 | return render(request, 'myapp/my_form.html') 64 | ``` 65 | 66 | ## 实践练习 67 | 68 | ### 练习 1:创建一个简单的表单 69 | 70 | 1. 创建一个新的 Django 项目和应用。 71 | 2. 在应用中创建一个视图,渲染一个包含表单的模板。 72 | 3. 在模板中添加 `{% csrf_token %}` 标签。 73 | 4. 提交表单并观察 CSRF 保护的效果。 74 | 75 | ### 练习 2:禁用 CSRF 保护 76 | 77 | 1. 在视图中使用 `@csrf_exempt` 装饰器禁用 CSRF 保护。 78 | 2. 提交表单并观察结果。 79 | 3. 重新启用 CSRF 保护,确保应用的安全性。 80 | 81 | ## 总结 82 | 83 | CSRF 保护是 Django 提供的一项重要安全功能,能够有效防止跨站请求伪造攻击。通过在表单中添加 `{% csrf_token %}` 标签,并确保视图中正确处理 CSRF 令牌,开发者可以轻松地保护用户免受 CSRF 攻击。 84 | 85 | ## 进一步学习 86 | 87 | - 深入了解 Django 的安全设置和最佳实践。 88 | - 学习如何自定义 CSRF 保护机制以适应特定需求。 89 | - 探索其他安全相关的主题,如 XSS 防御、SQL 注入防御等。 90 | 91 | 通过本教程的学习,你应该能够理解并应用 Django 的 CSRF 保护机制,提升你的 Web 应用的安全性。 -------------------------------------------------------------------------------- /tutorials/Django/Django课程大纲.md: -------------------------------------------------------------------------------- 1 | # Django 课程大纲 2 | 3 | ## 基础入门 4 | - Django 简介和特性 5 | - 安装和环境设置 6 | - 项目结构和管理命令 7 | - MVT (Model-View-Template) 架构 8 | - 第一个 Django 应用 9 | 10 | ## 模型和数据库 11 | - 模型定义和字段类型 12 | - 数据库迁移 13 | - 查询集和管理器 14 | - 模型关系 (一对多、多对多) 15 | - 自定义模型方法 16 | 17 | ## 视图和 URL 配置 18 | - 函数视图和类视图 19 | - URL 模式和命名 20 | - 视图参数和请求处理 21 | - 通用视图 22 | - 中间件 23 | 24 | ## 模板系统 25 | - 模板语法和标签 26 | - 模板继承 27 | - 上下文处理器 28 | - 自定义模板标签和过滤器 29 | - 静态文件处理 30 | 31 | ## 表单处理 32 | - Django Form 类 33 | - 表单验证 34 | - ModelForm 35 | - 表单集 (Formsets) 36 | - 文件上传处理 37 | 38 | ## 认证和授权 39 | - 用户认证系统 40 | - 自定义用户模型 41 | - 权限和组 42 | - 登录、注销和注册视图 43 | - 基于类的权限控制 44 | 45 | ## Admin 站点 46 | - Admin 站点定制 47 | - 模型注册和配置 48 | - 自定义 Admin 操作 49 | - Admin 主题和样式 50 | - 权限和分组管理 51 | 52 | ## 会话和 Cookie 53 | - 会话框架 54 | - Cookie 处理 55 | - 用户状态管理 56 | - 购物车实现 57 | 58 | ## 缓存机制 59 | - 缓存后端配置 60 | - 视图缓存 61 | - 模板片段缓存 62 | - 低级缓存 API 63 | - 缓存策略和最佳实践 64 | 65 | ## REST API 开发 66 | - Django REST framework 入门 67 | - 序列化器 68 | - 视图集和路由器 69 | - 认证和权限 70 | - API 版本控制 71 | 72 | ## 测试 73 | - 单元测试 74 | - 模型测试 75 | - 视图测试 76 | - 表单测试 77 | - 测试客户端 78 | 79 | ## 安全性 80 | - CSRF 保护 81 | - XSS 防御 82 | - SQL 注入防御 83 | - 点击劫持保护 84 | - 安全设置和最佳实践 85 | 86 | ## 部署 87 | - 生产环境设置 88 | - 静态文件收集和服务 89 | - Gunicorn 和 Nginx 配置 90 | - Docker 容器化 91 | - CI/CD 流程 92 | 93 | ## 性能优化 94 | - 数据库优化 95 | - 查询优化 96 | - 缓存策略 97 | - 异步任务处理 (Celery) 98 | - 负载均衡 99 | 100 | ## 高级主题 101 | - 自定义模板标签和过滤器 102 | - 信号系统 103 | - 自定义中间件 104 | - 国际化和本地化 105 | - 全文搜索 (Haystack) 106 | 107 | ## 第三方集成 108 | - 社交认证 109 | - 支付集成 110 | - 邮件发送 111 | - 文件存储 (AWS S3) 112 | - 实时功能 (Channels) 113 | 114 | ## 项目结构和最佳实践 115 | - 应用设计原则 116 | - 代码组织和重用 117 | - 版本控制和协作 118 | - 文档编写 119 | - 代码质量和风格指南 120 | 121 | ## Django 生态系统 122 | - 常用第三方包 123 | - Django CMS 124 | - Wagtail 125 | - Django 社区和资源 126 | - 持续学习和职业发展 127 | 128 | ## 项目实战 129 | - 博客系统开发 130 | - 电子商务平台 131 | - 社交网络应用 132 | - RESTful API 服务 -------------------------------------------------------------------------------- /tutorials/Express.js/Express.js课程大纲.md: -------------------------------------------------------------------------------- 1 | # Express.js 教程 2 | 3 | ## 基础入门 4 | - Express.js 简介和特点 5 | - 环境搭建 (Node.js, npm) 6 | - 创建第一个 Express.js 应用 7 | - 路由基础 8 | - 中间件概念 9 | 10 | ## 核心概念 11 | - 请求和响应对象 12 | - 路由进阶 (参数, 查询字符串) 13 | - 静态文件服务 14 | - 模板引擎 (EJS, Pug) 15 | - 错误处理 16 | 17 | ## 中间件和扩展 18 | - 常用中间件介绍 19 | - 自定义中间件开发 20 | - 第三方中间件集成 21 | - 身份认证中间件 22 | - 文件上传处理 23 | 24 | ## 数据库集成 25 | - MongoDB 与 Mongoose 26 | - SQL 数据库 (MySQL, PostgreSQL) 27 | - ORM 工具 (Sequelize) 28 | - 数据验证和安全性 29 | 30 | ## RESTful API 开发 31 | - RESTful 设计原则 32 | - API 版本控制 33 | - 数据序列化和反序列化 34 | - API 文档生成 (Swagger) 35 | 36 | ## 性能优化和安全 37 | - 缓存策略 38 | - 压缩和 GZIP 39 | - 安全最佳实践 40 | - 跨域资源共享 (CORS) 41 | - 负载均衡 42 | 43 | ## 测试和调试 44 | - 单元测试 (Mocha, Chai) 45 | - 集成测试 46 | - 性能测试 47 | - 调试技巧 48 | - 日志管理 49 | 50 | ## 部署和运维 51 | - 部署到云平台 (Heroku, AWS) 52 | - 容器化 (Docker) 53 | - 进程管理 (PM2) 54 | - 监控和日志 55 | - CI/CD 流程 56 | 57 | ## 高级主题 58 | - WebSocket 集成 59 | - GraphQL 与 Express 60 | - 微服务架构 61 | - 服务端渲染 (SSR) 62 | 63 | ## 实战项目 64 | - 博客系统 65 | - 电商平台 API 66 | - 实时聊天应用 67 | 68 | ## 工具和资源 69 | - Express 生成器 70 | - 常用库和插件 71 | - 社区资源 72 | - 官方文档 73 | 74 | ## 版本更新 75 | - Express 5.x 新特性 76 | - 从旧版本迁移指南 -------------------------------------------------------------------------------- /tutorials/Go/06. 错误处理和测试/029_article.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 提升代码质量:测试覆盖率详解 3 | date: 2023-10-05 4 | description: 本课程深入探讨如何通过提高测试覆盖率来提升代码质量,确保软件的可靠性和稳定性。 5 | slug: test-coverage-guide 6 | tags: 7 | - 测试 8 | - 代码质量 9 | - 软件开发 10 | category: 编程技术 11 | keywords: 12 | - 测试覆盖率 13 | - 代码质量 14 | - 软件测试 15 | --- 16 | 17 | # 测试覆盖率 18 | 19 | ## 1. 什么是测试覆盖率? 20 | 21 | 测试覆盖率是衡量测试用例对代码覆盖程度的指标。它表示在执行测试时,代码中有多少部分被实际执行过。测试覆盖率通常以百分比表示,百分比越高,说明测试用例覆盖的代码越多,代码的可靠性也越高。 22 | 23 | ### 1.1 为什么测试覆盖率重要? 24 | 25 | - **提高代码质量**:通过测试覆盖率,可以确保代码的各个部分都被测试到,减少潜在的bug。 26 | - **发现未测试的代码**:高覆盖率可以帮助你发现哪些代码没有被测试到,从而编写更多的测试用例。 27 | - **增强信心**:高覆盖率可以让你对代码的正确性更有信心,尤其是在进行重构或添加新功能时。 28 | 29 | ## 2. Go语言中的测试覆盖率 30 | 31 | Go语言内置了对测试覆盖率的支持。通过`go test`命令,你可以轻松生成测试覆盖率报告。 32 | 33 | ### 2.1 生成测试覆盖率报告 34 | 35 | 要生成测试覆盖率报告,可以使用以下命令: 36 | 37 | ```bash 38 | go test -coverprofile=coverage.out 39 | ``` 40 | 41 | 这个命令会运行所有的测试,并生成一个名为`coverage.out`的文件,其中包含了测试覆盖率的数据。 42 | 43 | ### 2.2 查看测试覆盖率报告 44 | 45 | 生成覆盖率报告后,你可以使用以下命令查看详细的覆盖率信息: 46 | 47 | ```bash 48 | go tool cover -html=coverage.out -o coverage.html 49 | ``` 50 | 51 | 这个命令会将覆盖率数据转换为HTML格式,并生成一个名为`coverage.html`的文件。你可以用浏览器打开这个文件,查看详细的覆盖率报告。 52 | 53 | ## 3. 代码示例 54 | 55 | ### 3.1 示例代码 56 | 57 | 假设我们有一个简单的Go程序,计算两个整数的和: 58 | 59 | ```go 60 | // main.go 61 | package main 62 | 63 | func Add(a, b int) int { 64 | return a + b 65 | } 66 | ``` 67 | 68 | ### 3.2 编写测试用例 69 | 70 | 为了测试`Add`函数,我们可以编写一个简单的测试用例: 71 | 72 | ```go 73 | // main_test.go 74 | package main 75 | 76 | import "testing" 77 | 78 | func TestAdd(t *testing.T) { 79 | result := Add(2, 3) 80 | if result != 5 { 81 | t.Errorf("Expected 5, but got %d", result) 82 | } 83 | } 84 | ``` 85 | 86 | ### 3.3 生成和查看覆盖率报告 87 | 88 | 首先,运行测试并生成覆盖率报告: 89 | 90 | ```bash 91 | go test -coverprofile=coverage.out 92 | ``` 93 | 94 | 然后,查看覆盖率报告: 95 | 96 | ```bash 97 | go tool cover -html=coverage.out -o coverage.html 98 | ``` 99 | 100 | 打开生成的`coverage.html`文件,你会看到`Add`函数的覆盖率是100%,因为测试用例完全覆盖了`Add`函数的代码。 101 | 102 | ## 4. 实践练习 103 | 104 | ### 4.1 练习1:编写更多测试用例 105 | 106 | 为`Add`函数编写更多的测试用例,例如测试负数、零和边界值。然后生成覆盖率报告,确保所有情况都被覆盖。 107 | 108 | ### 4.2 练习2:测试覆盖率分析 109 | 110 | 编写一个包含多个函数的Go程序,并编写相应的测试用例。生成覆盖率报告,分析哪些代码没有被测试到,并编写额外的测试用例来提高覆盖率。 111 | 112 | ## 5. 总结 113 | 114 | 测试覆盖率是确保代码质量的重要工具。通过Go语言内置的工具,你可以轻松生成和查看测试覆盖率报告。通过编写更多的测试用例,你可以提高代码的覆盖率,从而提高代码的可靠性和可维护性。 115 | 116 | 希望这篇教程能帮助你更好地理解和应用测试覆盖率的概念。继续实践和探索,你会发现测试覆盖率在实际项目中的巨大价值。 -------------------------------------------------------------------------------- /tutorials/Go/11. 部署和运维/048_article.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 构建和交叉编译:从入门到精通 3 | date: 2023-10-05 4 | description: 本课程深入探讨如何构建和交叉编译软件,涵盖从基础概念到高级技术的全面内容,适合所有编程爱好者和专业开发者。 5 | slug: build-and-cross-compile 6 | tags: 7 | - 构建 8 | - 交叉编译 9 | - 软件开发 10 | category: 编程技术 11 | keywords: 12 | - 构建工具 13 | - 交叉编译器 14 | - 软件编译 15 | --- 16 | 17 | # 构建和交叉编译 18 | 19 | ## 概述 20 | 21 | 在Go语言开发中,构建和交叉编译是两个非常重要的概念。构建是指将源代码编译成可执行文件的过程,而交叉编译则是指在一个操作系统上编译出另一个操作系统上可执行的程序。本教程将详细介绍如何在Go语言中进行构建和交叉编译,并提供相应的代码示例和实践练习。 22 | 23 | ## 构建Go程序 24 | 25 | ### 理论解释 26 | 27 | 构建Go程序是将Go源代码编译成可执行文件的过程。Go语言提供了一个强大的命令行工具`go build`,可以方便地完成这一任务。`go build`命令会根据源代码文件生成一个可执行文件,该文件可以在目标操作系统上直接运行。 28 | 29 | ### 代码示例 30 | 31 | 假设我们有一个简单的Go程序`main.go`,内容如下: 32 | 33 | ```go 34 | package main 35 | 36 | import "fmt" 37 | 38 | func main() { 39 | fmt.Println("Hello, World!") 40 | } 41 | ``` 42 | 43 | 我们可以使用以下命令来构建这个程序: 44 | 45 | ```bash 46 | go build main.go 47 | ``` 48 | 49 | 执行上述命令后,会在当前目录下生成一个可执行文件`main`(在Windows系统上会生成`main.exe`)。 50 | 51 | ### 实践练习 52 | 53 | 1. 创建一个名为`hello.go`的文件,内容与上面的`main.go`相同。 54 | 2. 使用`go build`命令构建这个程序。 55 | 3. 运行生成的可执行文件,确保输出为`Hello, World!`。 56 | 57 | ## 交叉编译 58 | 59 | ### 理论解释 60 | 61 | 交叉编译是指在一个操作系统上编译出另一个操作系统上可执行的程序。Go语言支持跨平台编译,通过设置环境变量`GOOS`和`GOARCH`,可以指定目标操作系统和架构。 62 | 63 | ### 代码示例 64 | 65 | 假设我们想在Linux系统上编译一个可以在Windows系统上运行的程序。我们可以使用以下命令: 66 | 67 | ```bash 68 | GOOS=windows GOARCH=amd64 go build main.go 69 | ``` 70 | 71 | 执行上述命令后,会在当前目录下生成一个名为`main.exe`的可执行文件,该文件可以在Windows系统上运行。 72 | 73 | ### 实践练习 74 | 75 | 1. 在Linux或macOS系统上,使用交叉编译命令生成一个可以在Windows系统上运行的可执行文件。 76 | 2. 将生成的可执行文件传输到Windows系统上,并运行它,确保输出为`Hello, World!`。 77 | 78 | ## 构建和交叉编译的高级用法 79 | 80 | ### 构建多个文件 81 | 82 | 如果项目包含多个Go文件,可以使用`go build`命令直接构建整个包: 83 | 84 | ```bash 85 | go build ./... 86 | ``` 87 | 88 | ### 使用`go install` 89 | 90 | `go install`命令会将编译后的可执行文件安装到`$GOPATH/bin`目录下,方便全局使用: 91 | 92 | ```bash 93 | go install ./... 94 | ``` 95 | 96 | ### 使用`go generate` 97 | 98 | `go generate`命令可以自动生成代码,常用于生成资源文件或模板代码: 99 | 100 | ```bash 101 | go generate ./... 102 | ``` 103 | 104 | ## 总结 105 | 106 | 通过本教程,我们学习了如何在Go语言中进行构建和交叉编译。构建是将源代码编译成可执行文件的过程,而交叉编译则允许我们在一个操作系统上编译出另一个操作系统上可执行的程序。掌握了这些技能,你将能够更灵活地开发和部署Go语言应用程序。 107 | 108 | ## 下一步 109 | 110 | 接下来,你可以尝试在不同的操作系统上进行交叉编译,或者探索Go语言的其他高级特性,如并发编程、Web服务器开发等。继续学习和实践,你将能够更深入地掌握Go语言的强大功能。 -------------------------------------------------------------------------------- /tutorials/Go/Go课程大纲.md: -------------------------------------------------------------------------------- 1 | # Go 课程大纲 2 | 3 | ## 基础入门 4 | - Go 语言简介和特性 5 | - 环境搭建 (安装Go, 配置GOPATH) 6 | - 第一个Go程序 (Hello World) 7 | - 基本语法和数据类型 8 | - 变量、常量和运算符 9 | 10 | ## 核心概念 11 | - 函数和方法 12 | - 控制流 (if-else, switch, for) 13 | - 数组和切片 14 | - 映射 (map) 15 | - 结构体和接口 16 | 17 | ## 并发编程 18 | - Goroutines 19 | - Channels 20 | - Select 语句 21 | - 同步原语 (Mutex, WaitGroup) 22 | - 并发模式和最佳实践 23 | 24 | ## 包管理和模块 25 | - 包的概念和导入 26 | - 创建和使用模块 27 | - Go Modules 28 | - 依赖管理 29 | 30 | ## 标准库 31 | - fmt 包 32 | - io 和 ioutil 包 33 | - os 包 34 | - net/http 包 35 | - encoding/json 包 36 | 37 | ## 错误处理和测试 38 | - 错误处理机制 39 | - panic 和 recover 40 | - 单元测试 41 | - 基准测试 42 | - 测试覆盖率 43 | 44 | ## Web 开发 45 | - HTTP 服务器基础 46 | - 路由和中间件 47 | - 模板引擎 48 | - RESTful API 设计 49 | - 数据库集成 (SQL, NoSQL) 50 | 51 | ## 高级特性 52 | - 反射 53 | - unsafe 包 54 | - cgo 55 | - 内存管理和垃圾回收 56 | - 性能优化技巧 57 | 58 | ## 工具和生态系统 59 | - go 命令行工具 60 | - 代码格式化和 linting 61 | - 调试技巧 62 | - 常用第三方库介绍 63 | 64 | ## 最佳实践 65 | - 项目结构 66 | - 错误处理策略 67 | - 日志和监控 68 | - 代码风格指南 69 | 70 | ## 部署和运维 71 | - 构建和交叉编译 72 | - 容器化 (Docker) 73 | - CI/CD 集成 74 | - 性能分析和优化 75 | 76 | ## 实战项目 77 | - 命令行工具开发 78 | - Web 服务器开发 79 | - 微服务架构实践 80 | 81 | ## 高级主题 82 | - Go 语言内部原理 83 | - 编写Go编译器插件 84 | - 贡献到Go开源社区 85 | 86 | ## 版本更新 87 | - Go 1.x 新特性 88 | - 版本迁移指南 -------------------------------------------------------------------------------- /tutorials/HTML/01. 基础入门/003_HTML.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: HTML 文档结构基础教程 3 | date: 2023-10-05 4 | description: 本课程详细讲解HTML文档的基本结构,包括DOCTYPE声明、html、head、body等关键元素的使用方法。 5 | slug: html-document-structure 6 | tags: 7 | - HTML 8 | - 前端开发 9 | - 网页设计 10 | category: 网页开发 11 | keywords: 12 | - HTML文档结构 13 | - DOCTYPE声明 14 | - HTML基础 15 | --- 16 | 17 | # HTML 文档结构 18 | 19 | ## 概述 20 | 21 | HTML(超文本标记语言)是构建网页的基础。一个HTML文档由一系列的标签组成,这些标签定义了网页的结构和内容。理解HTML文档的基本结构是学习HTML的第一步。 22 | 23 | ## HTML 文档的基本结构 24 | 25 | 一个标准的HTML文档通常包含以下几个部分: 26 | 27 | 1. **文档类型声明 (``)** 28 | 2. **HTML 根元素 (``)** 29 | 3. **头部 (``)** 30 | 4. **主体 (``)** 31 | 32 | ### 1. 文档类型声明 (``) 33 | 34 | 文档类型声明告诉浏览器当前文档使用的HTML版本。对于HTML5,文档类型声明非常简单: 35 | 36 | ```html 37 | 38 | ``` 39 | 40 | ### 2. HTML 根元素 (``) 41 | 42 | `` 标签是HTML文档的根元素,所有其他元素都包含在这个标签内。 43 | 44 | ```html 45 | 46 | ``` 47 | 48 | `lang` 属性用于指定文档的语言,这里我们使用 `zh-CN` 表示中文(简体)。 49 | 50 | ### 3. 头部 (``) 51 | 52 | `` 标签包含了文档的元数据,如标题、字符集、样式表链接等。这些信息不会直接显示在网页上,但它们对网页的显示和行为至关重要。 53 | 54 | ```html 55 | 56 | 57 |这是一个段落。
72 | 73 | ``` 74 | 75 | - `` 标签定义了一个段落。 77 | 78 | ## 完整的 HTML 文档示例 79 | 80 | 将上述所有部分组合在一起,我们得到一个完整的HTML文档: 81 | 82 | ```html 83 | 84 | 85 |
86 | 87 |这是一个段落。
92 | 93 | 94 | ``` 95 | 96 | ## 实践练习 97 | 98 | ### 练习 1: 创建一个简单的HTML文档 99 | 100 | 1. 打开你喜欢的文本编辑器(如VS Code、Sublime Text等)。 101 | 2. 创建一个新文件,并将其保存为 `index.html`。 102 | 3. 按照上面的示例,编写一个简单的HTML文档。 103 | 4. 在浏览器中打开 `index.html` 文件,查看效果。 104 | 105 | ### 练习 2: 添加更多内容 106 | 107 | 1. 在 `` 标签内添加更多的标题和段落。 108 | 2. 尝试添加一个列表 (`