diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..3901ff5 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,3 @@ +本次更新的内容主要为... + +欢迎前来学习 diff --git a/.github/workflows/cos.yaml b/.github/workflows/cos.yaml new file mode 100644 index 0000000..fe5dd1b --- /dev/null +++ b/.github/workflows/cos.yaml @@ -0,0 +1,43 @@ +name: update to cos + +on: + push: + branches: + - master + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: install doc dependencies + run: sudo npm i + + - name: build + run: | + npm run docs:build + + - name: install coscmd and tccli + run: | + sudo pip3 install coscmd + sudo pip3 install tccli + + - name: confirgure coscmd and tccli + env: + SECRET_ID: ${{ secrets.TCLOUD_API_ID }} + SECRET_KEY: ${{ secrets.TCLOUD_API_KEY }} + BUCKET: hdu-cs-wiki-1307923872 + REGION: ap-shanghai + run: | + coscmd config -a $SECRET_ID -s $SECRET_KEY -b $BUCKET -r $REGION -m 10 -p 5 + tccli configure set secretId $SECRET_ID + tccli configure set secretKey $SECRET_KEY + tccli configure set region $REGION + + - name: upload and refresh cdn + run: | + coscmd upload -rfs --delete ./.vitepress/dist/ / + tccli cdn PurgePathCache --cli-unfold-argument --Paths https://wiki.xyxsw.site/ --FlushType flush diff --git a/.github/workflows/link-pr.yaml b/.github/workflows/link-pr.yaml new file mode 100644 index 0000000..54efb3e --- /dev/null +++ b/.github/workflows/link-pr.yaml @@ -0,0 +1,40 @@ +name: links when pr + +on: + pull_request: + branches: [ master ] + paths: + - '**.md' + - '.lycheeignore' + +jobs: + linkChecker: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: install doc dependencies + run: sudo npm i + + - name: build + run: | + npm run docs:build + + - name: Link Checker + uses: lycheeverse/lychee-action@v1.8.0 + with: + fail: true + # For parameter description, see https://github.com/lycheeverse/lychee#commandline-parameters + # -E, --exclude-all-private Exclude all private IPs from checking. + # -i, --insecure Proceed for server connections considered insecure (invalid TLS) + # -n, --no-progress Do not show progress bar. + # -t, --timeout Website timeout in seconds from connect to response finished [default:20] + # --max-concurrency Maximum number of concurrent network requests [default: 128] + # -a --accept Comma-separated list of accepted status codes for valid links + + # .vitepress/dist the site directory to check + # *.md all markdown files in the root directory + args: -E -i -n -t 45 --max-concurrency 64 -a 401,403 -- '.vitepress/dist' '*.md' + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.github/workflows/link-schedule.yaml b/.github/workflows/link-schedule.yaml new file mode 100644 index 0000000..ea6cabd --- /dev/null +++ b/.github/workflows/link-schedule.yaml @@ -0,0 +1,45 @@ +name: links + +on: + # repository_dispatch: + workflow_dispatch: + schedule: + - cron: "30 8 * * *" + +jobs: + linkChecker: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: install doc dependencies + run: sudo npm i + + - name: build + run: | + npm run docs:build + + - name: Link Checker + uses: lycheeverse/lychee-action@v1.8.0 + with: + # For parameter description, see https://github.com/lycheeverse/lychee#commandline-parameters + # -E, --exclude-all-private Exclude all private IPs from checking. + # -i, --insecure Proceed for server connections considered insecure (invalid TLS) + # -n, --no-progress Do not show progress bar. + # -t, --timeout Website timeout in seconds from connect to response finished [default:20] + # --max-concurrency Maximum number of concurrent network requests [default: 128] + # -a --accept Comma-separated list of accepted status codes for valid links + + # .vitepress/dist the site directory to check + # *.md all markdown files in the root directory + args: -E -i -n -t 45 --max-concurrency 64 -a 401,403 -- '.vitepress/dist' '*.md' + output: out.md + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + - name: Create Issue From File + uses: peter-evans/create-issue-from-file@v3 + with: + title: Broken Link Detected + content-filepath: out.md + assignees: nightwhite diff --git a/.github/workflows/subscribe.yaml b/.github/workflows/subscribe.yaml new file mode 100644 index 0000000..31bf625 --- /dev/null +++ b/.github/workflows/subscribe.yaml @@ -0,0 +1,50 @@ +name: Subscribe to updates + +on: + pull_request: + types: + - closed + branches: + - 'master' + paths: + - '**.md' +jobs: + subscribe: + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 # OR "2" -> To retrieve the preceding commit. + + - name: Changed Files Exporter + id: changed-files + uses: umani/changed-files@v4.0.0 + with: + repo-token: ${{ github.token }} + pattern: '^.*\.(md|markdown)$' + + - name: Get PR labels + id: pr-labels + uses: joerick/pr-labels-action@v1.0.8 + + - name: Post Data + id: post-data + uses: octokit/request-action@v2.x + with: + route: POST https://np4l5e.laf.run/pr + repo: ${{github.event.repository.full_name}} + title: ${{ github.event.pull_request.title }} + work_branch: ${{ steps.branch.outputs.work_branch }} + base_branch: ${{ steps.branch.outputs.base_branch }} + id: ${{ github.event.pull_request.number }} + labels: ${{ steps.pr-labels.outputs.labels }} + files_updated: ${{ steps.changed-files.outputs.files_updated }} + files_created: ${{ steps.changed-files.outputs.files_created }} + files_deleted: ${{ steps.changed-files.outputs.files_deleted }} + source_url: ${{ github.event.pull_request.html_url }} + content: | + | + ${{ github.event.pull_request.body }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 03d85d5..8040e26 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules dist cache -.temp \ No newline at end of file +.temp +.vitepress/dist diff --git a/.lycheeignore b/.lycheeignore new file mode 100644 index 0000000..e483565 --- /dev/null +++ b/.lycheeignore @@ -0,0 +1,2 @@ +hdu-cs-wiki/edit +file:// diff --git a/.vitepress/config.js b/.vitepress/config.js index 7b68de9..03b383b 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -1,6 +1,9 @@ -import { defineConfig } from 'vitepress' - +// import { defineConfig } from 'vitepress' +import { withMermaid } from "vitepress-plugin-mermaid"; import mathjax3 from 'markdown-it-mathjax3'; +import { main_sidebar, chapter2, chapter3, chapter4, chapter5, chapter6, chapter7, chapter8 } from './sidebar.js'; +import { nav } from './nav.js'; +import PanguPlugin from 'markdown-it-pangu' const customElements = [ 'mjx-container', @@ -93,565 +96,32 @@ const customElements = [ ]; // https://vitepress.dev/reference/site-config -export default defineConfig({ +export default withMermaid({ lang: 'zh-CN', title: "HDU-CS-WIKI", description: "HDU计算机科学讲义", lastUpdated: true, - head: [['script', { async: "async", src: 'https://umami.hdu-cs.wiki/script.js', "data-website-id": "3f11687a-faae-463a-b863-6127a8c28301" }]], + head: [['script', { async: "async", src: 'https://umami.hdu-cs.wiki/script.js', "data-website-id": "3f11687a-faae-463a-b863-6127a8c28301", "data-domains": "wiki.xyxsw.site,hdu-cs.wiki" }]], themeConfig: { // https://vitepress.dev/reference/default-theme-config - nav: [ - { text: '首页', link: '/' }, - ], + nav: nav(), - sidebar: [ - { - text: '简介', - collapsed: true, - items: [ - { text: '简介', link: '/简介' }, - { text: '使用指南', link: '/使用指南' }, - ] - }, - { - text: '1.杭电生存指南(最重要模块)', - collapsed: true, - items: [ - { text: '1.1人文社科的重要性(韩健夫老师寄语)', link: '/1.杭电生存指南/1.1人文社科的重要性(韩健夫老师寄语)' }, - { text: '1.2竞赛指北', link: '/1.杭电生存指南/1.2竞赛指北' }, - { text: '1.3导师选择', link: '/1.杭电生存指南/1.3导师选择' }, - { text: '1.4小心项目陷阱', link: '/1.杭电生存指南/1.4小心项目陷阱' }, - { text: '1.5小组作业避雷指南', link: '/1.杭电生存指南/1.5小组作业避雷指南' }, - { text: '1.6正确解读GPA', link: '/1.杭电生存指南/1.6正确解读GPA' }, - { text: '1.7杭电出国自救指南', link: '/1.杭电生存指南/1.7杭电出国自救指南' }, - { text: '1.8转专业二三事', link: '/1.杭电生存指南/1.8转专业二三事' }, - { text: '1.9问题专题:好想进入实验室', link: '/1.杭电生存指南/1.9问题专题:好想进入实验室' }, - { text: '1.10如何读论文', link: '/1.杭电生存指南/1.10如何读论文' }, - { text: '1.11陷入虚无主义?进来看看吧', link: '/1.杭电生存指南/1.11陷入虚无主义?进来看看吧' }, - ] - }, - { - text: '2.高效学习', - collapsed: true, - items: [ - { text: '2.高效学习', link: '/2.高效学习/2.高效学习' }, - { - text: '2.1高效的前提:摆脱高中思维', - collapsed: true, - items: [ - { text: '2.1高效的前提:摆脱高中思维', link: '/2.高效学习/2.1高效的前提:摆脱高中思维' }, - { text: '2.1.1悲壮的学习方式', link: '/2.高效学习/2.1.1悲壮的学习方式' }, - { text: '2.1.2浮躁的心理状态', link: '/2.高效学习/2.1.2浮躁的心理状态' }, - { text: '2.1.3错误的提问姿态', link: '/2.高效学习/2.1.3错误的提问姿态' }, - { text: '2.1.4书籍的盲目崇拜', link: '/2.高效学习/2.1.4书籍的盲目崇拜' }, - { text: '2.1.5错误的学习配比', link: '/2.高效学习/2.1.5错误的学习配比' }, - ] - }, - { text: '2.2优雅的使用工具', link: '/2.高效学习/2.2优雅的使用工具' }, - { - text: '2.3高效的信息检索', - collapsed: true, - items: [ - { text: '2.3高效的信息检索', link: '/2.高效学习/2.3高效的信息检索' }, - { text: '2.3.1阅读文档(B百度爬)', link: '/2.高效学习/2.3.1阅读文档(B百度爬)' }, - { text: '2.3.2检索论文核心内容', link: '/2.高效学习/2.3.2检索论文核心内容' }, - { text: '2.3.3优秀的开源社区', link: '/2.高效学习/2.3.3优秀的开源社区' }, - { text: '补充:为什么不要用百度', link: '/2.高效学习/补充:为什么不要用百度' }, - ] - }, - { text: '2.4优雅的记笔记', link: '/2.高效学习/2.4优雅的记笔记' }, - { text: '2.5以理工科的方式阅读英语', link: '/2.高效学习/2.5以理工科的方式阅读英语' }, - ] - }, - { - text: '3.编程思维体系构建', - collapsed: true, - items: [ - { text: '3.编程思维体系构建', link: '/3.编程思维体系构建/3.编程思维体系构建' }, - { text: '3.0 编程入门之道', link: '/3.编程思维体系构建/3.0 编程入门之道' }, - { text: '3.1该使用哪个编辑器???', link: '/3.编程思维体系构建/3.1该使用哪个编辑器???' }, - { - text: '3.2算法杂谈', - collapsed: true, - items: [ - { text: '3.2算法杂谈', link: '/3.编程思维体系构建/3.2算法杂谈' }, - { text: '3.2.1为什么要选择ACM——谈谈我与ACM', link: '/3.编程思维体系构建/3.2.1为什么要选择ACM——谈谈我与ACM' }, - { text: '3.2.2手把手教你学算法——如何使用OJ(Online Judge)', link: '/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge)' }, - ] - }, - { text: '3.3如何选择编程语言', link: '/3.编程思维体系构建/3.3如何选择编程语言' }, - { - text: '3.4C语言', - collapsed: true, - items: [ - { text: '3.4C语言', link: '/3.编程思维体系构建/3.4C语言' }, - { text: '3.4.1FAQ:常见问题', link: '/3.编程思维体系构建/3.4.1FAQ:常见问题' }, - { text: '3.4.2用什么写 C 语言', link: '/3.编程思维体系构建/3.4.2用什么写 C 语言' }, - { text: '3.4.3解决编程问题的普适性过程', link: '/3.编程思维体系构建/3.4.3解决编程问题的普适性过程' }, - { text: '3.4.4C语言前置概念学习', link: '/3.编程思维体系构建/3.4.4C语言前置概念学习' }, - { - text: '3.4.5阶段一:编程属性', - collapsed: true, - items: [ - { text: '3.4.5阶段一:编程属性', link: '/3.编程思维体系构建/3.4.5阶段一:编程属性' }, - { text: '3.4.5.1C语言自测标准——链表', link: '/3.编程思维体系构建/3.4.5.1C语言自测标准——链表' }, - ] - }, - { - text: '3.4.6阶段二:文字冒险(cool)', - collapsed: true, - items: [ - { text: '3.4.6阶段二:文字冒险(cool)', link: '/3.编程思维体系构建/3.4.6阶段二:文字冒险(cool)' }, - { text: '3.4.6.1.开始冒险', link: '/3.编程思维体系构建/3.4.6.1.开始冒险' }, - { text: '3.4.6.2.探索未知', link: '/3.编程思维体系构建/3.4.6.2.探索未知' }, - { text: '3.4.6.3.指明地点', link: '/3.编程思维体系构建/3.4.6.3.指明地点' }, - { text: '3.4.6.4.创建对象', link: '/3.编程思维体系构建/3.4.6.4.创建对象' }, - { text: '3.4.6.5.捡起物品', link: '/3.编程思维体系构建/3.4.6.5.捡起物品' }, - { text: '3.4.6.6.绘制地图', link: '/3.编程思维体系构建/3.4.6.6.绘制地图' }, - { text: '3.4.6.7.增大距离', link: '/3.编程思维体系构建/3.4.6.7.增大距离' }, - { text: '3.4.6.8.移动方向', link: '/3.编程思维体系构建/3.4.6.8.移动方向' }, - { text: '3.4.6.9.练习:生成代码', link: '/3.编程思维体系构建/3.4.6.9.练习:生成代码' }, - { text: '3.4.6.10.增添属性', link: '/3.编程思维体系构建/3.4.6.10.增添属性' }, - { text: '3.4.6.11.设置条件', link: '/3.编程思维体系构建/3.4.6.11.设置条件' }, - { text: '3.4.6.12.开启关闭', link: '/3.编程思维体系构建/3.4.6.12.开启关闭' }, - { text: '3.4.6.13.编写解析器', link: '/3.编程思维体系构建/3.4.6.13.编写解析器' }, - { text: '3.4.6.14.丰富命令', link: '/3.编程思维体系构建/3.4.6.14.丰富命令' }, - { text: '3.4.6.15.赋予明暗', link: '/3.编程思维体系构建/3.4.6.15.赋予明暗' }, - { text: '3.4.6.16.结语:你终将自由', link: '/3.编程思维体系构建/3.4.6.16.结语:你终将自由' }, - ] - }, - { - text: '3.4.7C基础知识杂谈', - collapsed: true, - items: [ - { text: '3.4.7C基础知识杂谈', link: '/3.编程思维体系构建/3.4.7C基础知识杂谈' }, - { text: '3.4.7.1GDB初探索(编程可阅览)', link: '/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览)' }, - { text: '3.4.7.1.1调试理论', link: '/3.编程思维体系构建/3.4.7.1.1调试理论' }, - { text: '3.4.7.2C的历史问题:undefined behavior', link: '/3.编程思维体系构建/3.4.7.2C的历史问题:undefined behavior' }, - { text: '3.4.7.3C编译器干了什么', link: '/3.编程思维体系构建/3.4.7.3C编译器干了什么' }, - { text: '3.4.7.4Inline Assembly与链接加载', link: '/3.编程思维体系构建/3.4.7.4Inline Assembly与链接加载' }, - ] - }, - ] - }, - { text: '3.5git与github', link: '/3.编程思维体系构建/3.5git与github' }, - { - text: '3.6Python(灵巧的胶水)', - collapsed: true, - items: [ - { text: '3.6Python(灵巧的胶水)', link: '/3.编程思维体系构建/3.6Python(灵巧的胶水)' }, - { text: '3.6.1从CS61A看编程语言学习', link: '/3.编程思维体系构建/3.6.1从CS61A看编程语言学习' }, - { text: '3.6.2环境配置', link: '/3.编程思维体系构建/3.6.2环境配置' }, - { text: '3.6.3安装python', link: '/3.编程思维体系构建/3.6.3安装python' }, - { - text: '3.6.4Python for fun', - collapsed: true, - items: [ - { text: '3.6.4Python for fun', link: '/3.编程思维体系构建/3.6.4Python for fun' }, - { text: '3.6.4.0阶段零:Python解释器', link: '/3.编程思维体系构建/3.6.4.0阶段零:Python解释器' }, - { text: '3.6.4.1阶段一:熟悉语句', link: '/3.编程思维体系构建/3.6.4.1阶段一:熟悉语句' }, - { text: '3.6.4.2阶段二:递归操作', link: '/3.编程思维体系构建/3.6.4.2阶段二:递归操作' }, - { text: '3.6.4.3阶段三:数据抽象', link: '/3.编程思维体系构建/3.6.4.3阶段三:数据抽象' }, - { text: '3.6.4.4阶段四:高阶函数', link: '/3.编程思维体系构建/3.6.4.4阶段四:高阶函数' }, - { text: '3.6.4.5阶段五:迭代生成', link: '/3.编程思维体系构建/3.6.4.5阶段五:迭代生成' }, - { text: '3.6.4.6结语', link: '/3.编程思维体系构建/3.6.4.6结语' }, - ] - } - ] - }, - { text: '3.X 聊聊设计模式和程序设计', link: '/3.编程思维体系构建/3.X 聊聊设计模式和程序设计' }, - { - text: '3.Y 附加模块:Linux', - collapsed: true, - items: [ - { text: '3.Y 附加模块:Linux', link: '/3.编程思维体系构建/3.Y 附加模块:Linux' }, - { text: '3.Y.1VMware的安装与安装Ubuntu22.04系统', link: '/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统' }, - { text: '3.Y.2WSL的安装', link: '/3.编程思维体系构建/3.Y.2WSL的安装' }, - { text: '3.Y.3Linux初探索', link: '/3.编程思维体系构建/3.Y.3Linux初探索' }, - { text: '3.Y.4Vim初探索', link: '/3.编程思维体系构建/3.Y.4Vim初探索' }, - { text: '3.Y.5linux小任务', link: '/3.编程思维体系构建/3.Y.5linux小任务' }, - ] - } - ] - }, - { - text: '4.人工智能', - collapsed: true, - items: [ - { text: '4.人工智能', link: '/4.人工智能/4.人工智能' }, - { text: '4.1前言', link: '/4.人工智能/4.1前言' }, - { text: '4.2机器学习(AI)快速入门(quick start)', link: '/4.人工智能/4.2机器学习(AI)快速入门(quick start)' }, - { - text: '4.3人工智能导论及机器学习入门', - collapsed: true, - items: [ - { text: '4.3人工智能导论及机器学习入门', link: '/4.人工智能/4.3人工智能导论及机器学习入门' }, - { - text: '4.3.1搜索', - collapsed: true, - items: [ - { text: '4.3.1搜索', link: '/4.人工智能/4.3.1搜索' }, - { text: '4.3.1.1程序示例——maze迷宫解搜索', link: '/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索' }, - { text: '4.3.1.2项目:Tic-Tac-Toe井字棋', link: '/4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋' }, - ] - }, - { - text: '4.3.2知识推理', - collapsed: true, - items: [ - { text: '4.3.2知识推理', link: '/4.人工智能/4.3.2知识推理' }, - { text: '4.3.2.1程序示例——命题逻辑与模型检测', link: '/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测' }, - { text: '4.3.2.2项目:扫雷,骑士与流氓问题', link: '/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题' }, - ] - }, - { - text: '4.3.3不确定性问题', - collapsed: true, - items: [ - { text: '4.3.3不确定性问题', link: '/4.人工智能/4.3.3不确定性问题' }, - { text: '4.3.3.1程序示例', link: '/4.人工智能/4.3.3.1程序示例' }, - { text: '4.3.3.2项目:遗传', link: '/4.人工智能/4.3.3.2项目:遗传' }, - ] - }, - ] - }, - { text: '4.4FAQ:常见问题', link: '/4.人工智能/4.4FAQ:常见问题' }, - { - text: '4.6深度学习', - collapsed: true, - items: [ - { text: '4.6深度学习', link: '/4.人工智能/4.6深度学习' }, - { text: '4.6.1工欲善其事,必先利其器', link: '/4.人工智能/4.6.1工欲善其事,必先利其器' }, - { text: '4.6.2你可能会需要的术语介绍', link: '/4.人工智能/4.6.2你可能会需要的术语介绍' }, - { text: '4.6.3深度学习快速入门', link: '/4.人工智能/4.6.3深度学习快速入门' }, - { text: '4.6.4Pytorch安装', link: '/4.人工智能/4.6.4Pytorch安装' }, - { - text: '4.6.5计算机视觉(CV)', - collapsed: true, - items: [ - { text: '4.6.5计算机视觉(CV)', link: '/4.人工智能/4.6.5计算机视觉(CV)' }, - { text: '4.6.5.1CV领域任务(研究目标)', link: '/4.人工智能/4.6.5.1CV领域任务(研究目标)' }, - { - text: '4.6.5.2CV中的数据预处理(torchvision)', - collapsed: true, - items: [ - { text: '4.6.5.2CV中的数据预处理(torchvision)', link: '/4.人工智能/4.6.5.2CV中的数据预处理(torchvision)' }, - { text: '4.6.5.2.1数据读取', link: '/4.人工智能/4.6.5.2.1数据读取' }, - { text: '4.6.5.2.2数据增强', link: '/4.人工智能/4.6.5.2.2数据增强' }, - ] - }, - { - text: '4.6.5.3CV中的经典网络', - collapsed: true, - items: [ - { text: '4.6.5.3CV中的经典网络', link: '/4.人工智能/4.6.5.3CV中的经典网络' }, - { text: '4.6.5.3.1AlexNet', link: '/4.人工智能/4.6.5.3.1AlexNet' }, - { text: '4.6.5.3.2FCN', link: '/4.人工智能/4.6.5.3.2FCN' }, - { text: '4.6.5.3.3ResNet', link: '/4.人工智能/4.6.5.3.3ResNet' }, - { text: '4.6.5.3.4UNet', link: '/4.人工智能/4.6.5.3.4UNet' }, - { text: '4.6.5.3.5GAN', link: '/4.人工智能/4.6.5.3.5GAN' }, - { text: '4.6.5.3.6思考题参考', link: '/4.人工智能/4.6.5.3.6思考题参考' }, - { text: '4.6.5.3.7还要学更多?', link: '/4.人工智能/4.6.5.3.7还要学更多?' }, - ] - }, - { - text: '4.6.5.4神经辐射场(NeRF)', - collapsed: true, - items: [ - { text: '4.6.5.4神经辐射场(NeRF)', link: '/4.人工智能/4.6.5.4神经辐射场(NeRF)' }, - { text: '4.6.5.4.1NeRF', link: '/4.人工智能/4.6.5.4.1NeRF' }, - { text: '4.6.5.4.2NeRF的改进方向', link: '/4.人工智能/4.6.5.4.2NeRF的改进方向' }, - { text: '4.6.5.4.3自制数据集的工具COLMAP', link: '/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP' }, - ] - }, - { - text: '4.6.5.5行人重识别(ReID)', - collapsed: true, - items: [ - { text: '4.6.5.5行人重识别(ReID)', link: '/4.人工智能/4.6.5.5行人重识别(ReID)' }, - ] - }, - ] - }, - { - text: '4.6.6自然语言处理(NLP)', - collapsed: true, - items: [ - { text: '4.6.6自然语言处理(NLP)', link: '/4.人工智能/4.6.6自然语言处理(NLP)' }, - { text: '4.6.6.1NLP领域任务(研究目标)', link: '/4.人工智能/4.6.6.1NLP领域任务(研究目标)' }, - { - text: '4.6.6.2推荐系统', - collapsed: true, - items: [ - { text: '4.6.6.2推荐系统', link: '/4.人工智能/4.6.6.2推荐系统' }, - { text: '4.6.6.2.1推荐系统经典模型综述', link: '/4.人工智能/4.6.6.2.1推荐系统经典模型综述' }, - { - text: '4.6.6.2.2基于数据的角度,看待推荐系统的构造', - collapsed: true, - items: [ - { text: '4.6.6.2.2基于数据的角度,看待推荐系统的构造', link: '/4.人工智能/4.6.6.2.2基于数据的角度,看待推荐系统的构造' }, - { text: '4.6.6.2.2.1《推荐系统实践》读后的一些想法', link: '/4.人工智能/4.6.6.2.2.1《推荐系统实践》读后的一些想法' }, - { text: '4.6.6.2.2.2推荐系统概念解释 and 一个好的推荐系统', link: '/4.人工智能/4.6.6.2.2.2推荐系统概念解释 and 一个好的推荐系统' }, - { text: '4.6.6.2.2.3推荐系统实例', link: '/4.人工智能/4.6.6.2.2.3推荐系统实例' }, - { text: '4.6.6.2.2.4利用用户行为数据', link: '/4.人工智能/4.6.6.2.2.4利用用户行为数据' }, - { text: '4.6.6.2.2.5推荐系统冷启动', link: '/4.人工智能/4.6.6.2.2.5推荐系统冷启动' }, - { text: '4.6.6.2.2.6利用标签信息', link: '/4.人工智能/4.6.6.2.2.6利用标签信息' }, - { text: '4.6.6.2.2.7利用上下文信息', link: '/4.人工智能/4.6.6.2.2.7利用上下文信息' }, - ] - }, - { text: '4.6.6.2.3序列化推荐', link: '/4.人工智能/4.6.6.2.3序列化推荐' }, - ] - }, - { text: '4.6.6.3知识图谱', link: '/4.人工智能/4.6.6.3知识图谱' }, - ] - }, - { - text: '4.6.7Transformer', - collapsed: true, - items: [ - { text: '4.6.7Transformer', link: '/4.人工智能/4.6.7Transformer' }, - { text: '4.6.7.1VIT', link: '/4.人工智能/4.6.7.1VIT' }, - { text: '4.6.7.2BERT', link: '/4.人工智能/4.6.7.2BERT' }, - { text: '4.6.7.3MAE', link: '/4.人工智能/4.6.7.3MAE' }, - ] - }, - { - text: '4.6.8对比学习', - collapsed: true, - items: [ - { text: '4.6.8对比学习', link: '/4.人工智能/4.6.8对比学习' }, - { text: '4.6.8.1前言', link: '/4.人工智能/4.6.8.1前言' }, - { text: '4.6.8.2Inst Disc', link: '/4.人工智能/4.6.8.2Inst Disc' }, - { text: '4.6.8.3定义正负样本的方式', link: '/4.人工智能/4.6.8.3定义正负样本的方式' }, - { text: '4.6.8.4MoCo', link: '/4.人工智能/4.6.8.4MoCo' }, - { text: '4.6.8.5SimCLR', link: '/4.人工智能/4.6.8.5SimCLR' }, - { text: '4.6.8.6SwAV', link: '/4.人工智能/4.6.8.6SwAV' }, - { text: '4.6.8.7BYOL', link: '/4.人工智能/4.6.8.7BYOL' }, - { text: '4.6.8.8SimSiam', link: '/4.人工智能/4.6.8.8SimSiam' }, - { text: '4.6.8.9MoCo v3', link: '/4.人工智能/4.6.8.9MoCo v3' }, - { text: '4.6.8.10总结', link: '/4.人工智能/4.6.8.10总结' }, - ] - }, - { - text: '4.6.9深度强化学习', - collapsed: true, - items: [ - { text: '4.6.9深度强化学习', link: '/4.人工智能/4.6.9深度强化学习' }, - { text: '4.6.9.1前言', link: '/4.人工智能/4.6.9.1前言' }, - { text: '4.6.9.2基础资料推荐', link: '/4.人工智能/4.6.9.2基础资料推荐' }, - { text: '4.6.9.3基本概念介绍', link: '/4.人工智能/4.6.9.3基本概念介绍' }, - ] - } - ] - }, - { text: '4.7图网络略述(intro&GCN)', link: '/4.人工智能/4.7图网络略述(intro&GCN)' }, - { text: '4.8数据分析', link: '/4.人工智能/4.8数据分析' }, - { text: '4.9如何做研究', link: '/4.人工智能/4.9如何做研究' }, - { text: '4.10科研论文写作', link: '/4.人工智能/4.10科研论文写作' }, - { text: '4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents', link: '/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents' }, - { text: '4.12本章节内容的局限性', link: '/4.人工智能/4.12本章节内容的局限性' }, - { - text: 'FunRec', - collapsed: true, - items: [ - { text: 'FunRec概述', link: '/4.人工智能/FunRec概述' }, - { - text: '推荐系统概述', - collapsed: true, - items: [ - { text: '推荐系统的意义', link: '/4.人工智能/ch01/ch1.1.md' }, - { text: '推荐系统架构', link: '/4.人工智能/ch01/ch1.2.md' }, - { text: '推荐系统技术栈', link: '/4.人工智能/ch01/ch1.3.md' }, - ] - }, - { - text: '推荐系统算法基础', - collapsed: true, - items: [ - { - text: '经典召回模型', - collapsed: true, - items: [ - { - text: '基于协同过滤的召回', collapsed: true, items: [ - { text: 'UserCF', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/usercf.md' }, - { text: 'ItemCF', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/itemcf.md' }, - { text: 'Swing', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/Swing.md' }, - { text: '矩阵分解', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/mf.md' }, - ] - }, - { text: 'FM召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/FM.md' }, - { - text: 'item2vec召回系列', collapsed: true, items: [ - { text: 'word2vec原理', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/word2vec.md' }, - { text: 'item2vec召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/item2vec.md' }, - { text: 'Airbnb召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/Airbnb.md' }, - ] - }, - { text: 'YoutubeDNN召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/YoutubeDNN.md' }, - { - text: '双塔召回', collapsed: true, items: [ - { text: '经典双塔', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/DSSM.md' }, - { text: 'Youtube双塔', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/YoutubeTwoTower.md' }, - ] - }, - { - text: '图召回', collapsed: true, items: [ - { text: 'EGES', link: '/4.人工智能/ch02/ch2.1/ch2.1.3/EGES.md' }, - { text: 'PinSAGE', link: '/4.人工智能/ch02/ch2.1/ch2.1.3/PinSage.md' }, - ] - }, - { - text: '序列召回', collapsed: true, items: [ - { text: 'MIND', link: '/4.人工智能/ch02/ch2.1/ch2.1.4/MIND.md' }, - { text: 'SDM', link: '/4.人工智能/ch02/ch2.1/ch2.1.4/SDM.md' }, - ] - }, - { - text: '树模型召回', collapsed: true, items: [ - { text: 'TDM', link: '/4.人工智能/ch02/ch2.1/ch2.1.5/TDM.md' }, - ] - } - ] - }, - { - text: '经典排序模型', - collapsed: true, - items: [ - { text: 'GBDT+LR', link: '/4.人工智能/ch02/ch2.2/ch2.2.1.md' }, - { - text: '特征交叉', collapsed: true, items: [ - { text: 'FM', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/FM.md' }, - { text: 'PNN', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/PNN.md' }, - { text: 'DCN', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/DCN.md' }, - { text: 'AutoInt', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/AutoInt.md' }, - { text: 'FiBiNET', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/FiBiNet.md' }, - ] - }, - { - text: 'WideNDeep系列', collapsed: true, items: [ - { text: 'Wide&Deep', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/WideNDeep.md' }, - { text: 'NFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/NFM.md' }, - { text: 'AFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/AFM.md' }, - { text: 'DeepFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/DeepFM.md' }, - { text: 'xDeepFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/xDeepFM.md' }, - ] - }, - { - text: '序列模型', collapsed: true, items: [ - { text: 'DIN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DIN.md' }, - { text: 'DIEN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DIEN.md' }, - { text: 'DSIN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DSIN.md' }, - ] - }, - { - text: '多任务学习', collapsed: true, items: [ - { text: '多任务学习概述', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/2.2.5.0.md' }, - { text: 'ESMM', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/ESMM.md' }, - { text: 'MMOE', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md' }, - { text: 'PLE', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/PLE.md' }, - ] - } - ] - } - ] - } - ] - } - ] - }, - { - text: '5.富有生命的嵌入式', - collapsed: true, - items: [ - { text: '5.富有生命的嵌入式', link: '/5.富有生命的嵌入式/5.富有生命的嵌入式' }, - { text: '5.1嵌入式是什么?可以吃吗?', link: '/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?' }, - { text: '5.2New meaning of C', link: '/5.富有生命的嵌入式/5.2New meaning of C' }, - { text: '5.3还玩裸机?上操作系统!', link: '/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!' }, - ] - }, - { - text: '6.计算机安全', - collapsed: true, - items: [ - { text: '6.计算机安全', link: '/6.计算机安全/6.计算机安全' }, - { - text: '6.1网络安全', - collapsed: true, - items: [ - { text: '6.1网络安全', link: '/6.计算机安全/6.1网络安全' }, - { text: '6.1.1SQL 注入', link: '/6.计算机安全/6.1.1SQL 注入' }, - ] - }, - { - text: '6.2二进制安全', - collapsed: true, - items: [ - { text: '6.2二进制安全', link: '/6.计算机安全/6.2二进制安全' }, - { text: '6.2.1基础工具的使用', link: '/6.计算机安全/6.2.1基础工具的使用' }, - { text: '6.2.2软件破解、软件加固', link: '/6.计算机安全/6.2.2软件破解、软件加固' }, - ] - }, - { text: '6.4CTF信息安全竞赛', link: '/6.计算机安全/6.4CTF信息安全竞赛' }, - ] - }, - { - text: '7.Web开发入门', - collapsed: true, - items: [ - { text: '7.Web开发入门', link: '/7.Web开发入门/7.Web开发入门' }, - { - text: '7.1前端部分', - collapsed: true, - items: [ - { text: '7.1前端部分', link: '/7.Web开发入门/7.1前端部分' }, - { text: '7.1.1基础部分', link: '/7.Web开发入门/7.1.1基础部分' }, - { text: '7.1.2进阶部分', link: '/7.Web开发入门/7.1.2进阶部分' }, - { text: '7.1.3附录1:前端介绍(详细版)', link: '/7.Web开发入门/7.1.3附录1:前端介绍(详细版)' }, - { text: '7.1.4附录2:大前端开发', link: '/7.Web开发入门/7.1.4附录2:大前端开发' }, - { text: '7.1.5附录3:跨端开发', link: '/7.Web开发入门/7.1.5附录3:跨端开发' }, - ] - }, - { - text: '7.2后端部分', - collapsed: true, - items: [ - { text: '7.2后端部分', link: '/7.Web开发入门/7.2后端部分' }, - { text: '7.2.1基础部分', link: '/7.Web开发入门/7.2.1基础部分' }, - { text: '7.2.2进阶部分', link: '/7.Web开发入门/7.2.2进阶部分' }, - ] - } - ] - }, - { - text: '8.基础学科', - collapsed: true, - items: [ - { text: '8.基础学科', link: '/8.基础学科/8.基础学科' }, - { text: '8.1经济学科普Part1', link: '/8.基础学科/8.1经济学科普Part1' }, - { text: '8.2定积分', link: '/8.基础学科/8.2定积分' }, - ] - }, - { - text: 'Contributors', - link: '/contributors' - }, - { - text: '贡献指南', - link: '/CONTRIBUTING' - }, - { - text: 'notebook测试', - link: '/notebook' - } - ], + sidebar: { + '/': main_sidebar(), + '/2.高效学习/': chapter2(), + '/3.编程思维体系构建/': chapter3(), + '/4.人工智能/': chapter4(), + '/5.富有生命的嵌入式/': chapter5(), + '/6.计算机安全/': chapter6(), + '/7.网络应用开发/': chapter7(), + '/8.基础学科/': chapter8(), + }, socialLinks: [ { icon: 'github', link: 'https://github.com/camera-2018/hdu-cs-wiki' } ], footer: { - message: 'Made with ❤️ by HDU 计算机科协 && ALL 协作者', - copyright: 'Copyright © 2023-present Evan You && HDU 计算机科协 && ALL 协作者' + message: 'Made with ❤️ by ALL 协作者', + copyright: 'Copyright © 2023-present Evan You && ALL 协作者' }, lastUpdatedText: '上次更改', docFooter: { @@ -665,10 +135,12 @@ export default defineConfig({ pattern: 'https://github.com/camera-2018/hdu-cs-wiki/edit/master/:path', text: '在 GitHub 上修改此页' }, + externalLinkIcon: true, }, markdown: { config: (md) => { md.use(mathjax3); + md.use(PanguPlugin); }, }, vue: { diff --git a/.vitepress/nav.js b/.vitepress/nav.js new file mode 100644 index 0000000..2775ef7 --- /dev/null +++ b/.vitepress/nav.js @@ -0,0 +1,25 @@ +export function nav() { + return [ + { text: '首页', link: '/' }, + { + text: '章节', items: + [ + { text: '1.杭电生存指南(最重要模块)', link: '/1.杭电生存指南/1.1人文社科的重要性(韩健夫老师寄语)' }, + { text: '2.高效学习', link: '/2.高效学习/2.高效学习' }, + { text: '3.编程思维体系构建', link: '/3.编程思维体系构建/3.编程思维体系构建' }, + { text: '4.人工智能', link: '/4.人工智能/4.人工智能' }, + { text: '5.富有生命的嵌入式', link: '/5.富有生命的嵌入式/5.富有生命的嵌入式' }, + { text: '6.计算机安全', link: '/6.计算机安全/6.计算机安全' }, + { text: '7.网络应用开发', link: '/7.网络应用开发/7.网络应用开发入门' }, + { text: '8.基础学科', link: '/8.基础学科/8.基础学科' }, + ] + }, + { text: 'Wiki史', link: '/wiki史' }, + { + text: '友链', items: + [ + { text: '杭电导航', link: 'https://wiki.hduhelp.com' }, + ] + }, + ] +} \ No newline at end of file diff --git a/.vitepress/sidebar.js b/.vitepress/sidebar.js new file mode 100644 index 0000000..847fc95 --- /dev/null +++ b/.vitepress/sidebar.js @@ -0,0 +1,640 @@ +export function main_sidebar() { + return [ + { + text: '简介', + collapsed: true, + items: [ + { text: '简介', link: '/简介' }, + { text: '使用指南', link: '/使用指南' }, + ] + }, + { + text: '1.杭电生存指南(最重要模块)', + collapsed: true, + items: [ + { text: '1.1人文社科的重要性(韩健夫老师寄语)', link: '/1.杭电生存指南/1.1人文社科的重要性(韩健夫老师寄语)' }, + { text: '1.2竞赛指北', link: '/1.杭电生存指南/1.2竞赛指北' }, + { text: '1.3导师选择', link: '/1.杭电生存指南/1.3导师选择' }, + { text: '1.4小心项目陷阱', link: '/1.杭电生存指南/1.4小心项目陷阱' }, + { text: '1.5小组作业避雷指南', link: '/1.杭电生存指南/1.5小组作业避雷指南' }, + { text: '1.6正确解读GPA', link: '/1.杭电生存指南/1.6正确解读GPA' }, + { text: '1.7杭电出国自救指南', link: '/1.杭电生存指南/1.7杭电出国自救指南' }, + { text: '1.8转专业二三事', link: '/1.杭电生存指南/1.8转专业二三事' }, + { text: '1.9问题专题:好想进入实验室', link: '/1.杭电生存指南/1.9问题专题:好想进入实验室' }, + { text: '1.10如何读论文', link: '/1.杭电生存指南/1.10如何读论文' }, + { text: '1.11陷入虚无主义?进来看看吧', link: '/1.杭电生存指南/1.11陷入虚无主义?进来看看吧' }, + { text: '1.12程序员如何活久一点', link: '/1.杭电生存指南/1.12程序员如何活久一点' }, + { text: '1.13选课原则与抢课技巧', link: '/1.杭电生存指南/1.13选课原则与抢课技巧' }, + ] + }, + { + text: "2.高效学习", + collapsed: true, + items: [{ text: "2.高效学习", link: "/2.高效学习/2.高效学习" }] + }, + { + text: "3.编程思维体系构建", + collapsed: true, + items: [ + { text: "3.编程思维体系构建", link: "/3.编程思维体系构建/3.编程思维体系构建" } + ] + }, + { + text: "4.人工智能", + collapsed: true, + items: [{ text: "4.人工智能", link: "/4.人工智能/4.人工智能" }] + }, + { + text: "5.富有生命的嵌入式", + collapsed: true, + items: [ + { text: "5.富有生命的嵌入式", link: "/5.富有生命的嵌入式/5.富有生命的嵌入式" } + ] + }, + { + text: "6.计算机安全", + collapsed: true, + items: [{ text: "6.计算机安全", link: "/6.计算机安全/6.计算机安全" }] + }, + { + text: "7.网络应用开发入门", + collapsed: true, + items: [ + { text: "7.网络应用开发入门", link: "/7.网络应用开发/7.网络应用开发入门" } + ] + }, + { + text: "8.基础学科", + collapsed: true, + items: [{ text: "8.基础学科", link: "/8.基础学科/8.基础学科" }] + }, + { + text: 'Contributors', + link: '/contributors' + }, + { + text: '贡献指南', + link: '/CONTRIBUTING' + }, + { + text: 'notebook测试', + link: '/notebook' + } + ] +} + +export function chapter2() { + return [ + { text: '返回上一层', link: '/简介' }, + { + text: '2.高效学习', + collapsed: false, + items: [ + { text: '2.高效学习', link: '/2.高效学习/2.高效学习' }, + { + text: '2.1高效的前提:摆脱高中思维', + collapsed: true, + items: [ + { text: '2.1高效的前提:摆脱高中思维', link: '/2.高效学习/2.1高效的前提:摆脱高中思维' }, + { text: '2.1.1悲壮的学习方式', link: '/2.高效学习/2.1.1悲壮的学习方式' }, + { text: '2.1.2浮躁的心理状态', link: '/2.高效学习/2.1.2浮躁的心理状态' }, + { text: '2.1.3错误的提问姿态', link: '/2.高效学习/2.1.3错误的提问姿态' }, + { text: '2.1.4书籍的盲目崇拜', link: '/2.高效学习/2.1.4书籍的盲目崇拜' }, + { text: '2.1.5错误的学习配比', link: '/2.高效学习/2.1.5错误的学习配比' }, + ] + }, + { text: '2.2优雅的使用工具', link: '/2.高效学习/2.2优雅的使用工具' }, + { + text: '2.3高效的信息检索', + collapsed: true, + items: [ + { text: '2.3高效的信息检索', link: '/2.高效学习/2.3高效的信息检索' }, + { text: '2.3.1阅读文档(B百度爬)', link: '/2.高效学习/2.3.1阅读文档(B百度爬)' }, + { text: '2.3.2检索论文核心内容', link: '/2.高效学习/2.3.2检索论文核心内容' }, + { text: '2.3.3优秀的开源社区', link: '/2.高效学习/2.3.3优秀的开源社区' }, + { text: '补充:为什么不要用百度', link: '/2.高效学习/补充:为什么不要用百度' }, + ] + }, + { text: '2.4优雅的记笔记', link: '/2.高效学习/2.4优雅的记笔记' }, + { text: '2.5以理工科的方式阅读英语', link: '/2.高效学习/2.5以理工科的方式阅读英语' }, + { text: '2.6学会使用AI辅助学习', link: '/2.高效学习/2.6学会使用AI辅助学习' }, + ] + }, + ] +} + +export function chapter3() { + return [ + { text: '返回上一层', link: '/简介' }, + { + text: '3.编程思维体系构建', + collapsed: false, + items: [ + { text: '3.编程思维体系构建', link: '/3.编程思维体系构建/3.编程思维体系构建' }, + { text: '3.0 编程入门之道', link: '/3.编程思维体系构建/3.0 编程入门之道' }, + { text: '3.1该使用哪个编辑器???', link: '/3.编程思维体系构建/3.1该使用哪个编辑器???' }, + { + text: '3.2算法杂谈', + collapsed: true, + items: [ + { text: '3.2算法杂谈', link: '/3.编程思维体系构建/3.2算法杂谈' }, + { text: '3.2.1为什么要选择ACM——谈谈我与ACM', link: '/3.编程思维体系构建/3.2.1为什么要选择ACM——谈谈我与ACM' }, + { text: '3.2.2手把手教你学算法——如何使用OJ(Online Judge)', link: '/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge)' }, + { text: '3.2.3ACM 竞赛从入门到入坟', link: '/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟' }, + ] + }, + { text: '3.3如何选择编程语言', link: '/3.编程思维体系构建/3.3如何选择编程语言' }, + { + text: '3.4C语言', + collapsed: true, + items: [ + { text: '3.4C语言', link: '/3.编程思维体系构建/3.4C语言' }, + { text: '3.4.1FAQ:常见问题', link: '/3.编程思维体系构建/3.4.1FAQ:常见问题' }, + { text: '3.4.2用什么写 C 语言', link: '/3.编程思维体系构建/3.4.2用什么写 C 语言' }, + { text: '3.4.3解决编程问题的普适性过程', link: '/3.编程思维体系构建/3.4.3解决编程问题的普适性过程' }, + { text: '3.4.4C语言前置概念学习', link: '/3.编程思维体系构建/3.4.4C语言前置概念学习' }, + { + text: '3.4.5阶段一:编程属性', + collapsed: true, + items: [ + { text: '3.4.5阶段一:编程属性', link: '/3.编程思维体系构建/3.4.5阶段一:编程属性' }, + { text: '3.4.5.1C语言自测标准——链表', link: '/3.编程思维体系构建/3.4.5.1C语言自测标准——链表' }, + ] + }, + { + text: '3.4.6阶段二:文字冒险(cool)', + collapsed: true, + items: [ + { text: '3.4.6阶段二:文字冒险(cool)', link: '/3.编程思维体系构建/3.4.6阶段二:文字冒险(cool)' }, + { text: '3.4.6.1.开始冒险', link: '/3.编程思维体系构建/3.4.6.1.开始冒险' }, + { text: '3.4.6.2.探索未知', link: '/3.编程思维体系构建/3.4.6.2.探索未知' }, + { text: '3.4.6.3.指明地点', link: '/3.编程思维体系构建/3.4.6.3.指明地点' }, + { text: '3.4.6.4.创建对象', link: '/3.编程思维体系构建/3.4.6.4.创建对象' }, + { text: '3.4.6.5.捡起物品', link: '/3.编程思维体系构建/3.4.6.5.捡起物品' }, + { text: '3.4.6.6.绘制地图', link: '/3.编程思维体系构建/3.4.6.6.绘制地图' }, + { text: '3.4.6.7.增大距离', link: '/3.编程思维体系构建/3.4.6.7.增大距离' }, + { text: '3.4.6.8.移动方向', link: '/3.编程思维体系构建/3.4.6.8.移动方向' }, + { text: '3.4.6.9.练习:生成代码', link: '/3.编程思维体系构建/3.4.6.9.练习:生成代码' }, + { text: '3.4.6.10.增添属性', link: '/3.编程思维体系构建/3.4.6.10.增添属性' }, + { text: '3.4.6.11.设置条件', link: '/3.编程思维体系构建/3.4.6.11.设置条件' }, + { text: '3.4.6.12.开启关闭', link: '/3.编程思维体系构建/3.4.6.12.开启关闭' }, + { text: '3.4.6.13.编写解析器', link: '/3.编程思维体系构建/3.4.6.13.编写解析器' }, + { text: '3.4.6.14.丰富命令', link: '/3.编程思维体系构建/3.4.6.14.丰富命令' }, + { text: '3.4.6.15.赋予明暗', link: '/3.编程思维体系构建/3.4.6.15.赋予明暗' }, + { text: '3.4.6.16.结语:你终将自由', link: '/3.编程思维体系构建/3.4.6.16.结语:你终将自由' }, + ] + }, + { + text: '3.4.7C基础知识杂谈', + collapsed: true, + items: [ + { text: '3.4.7C基础知识杂谈', link: '/3.编程思维体系构建/3.4.7C基础知识杂谈' }, + { text: '3.4.7.1GDB初探索(编程可阅览)', link: '/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览)' }, + { text: '3.4.7.1.1调试理论', link: '/3.编程思维体系构建/3.4.7.1.1调试理论' }, + { text: '3.4.7.2C的历史问题:undefined behavior', link: '/3.编程思维体系构建/3.4.7.2C的历史问题:undefined behavior' }, + { text: '3.4.7.3C编译器干了什么', link: '/3.编程思维体系构建/3.4.7.3C编译器干了什么' }, + { text: '3.4.7.4Inline Assembly与链接加载', link: '/3.编程思维体系构建/3.4.7.4Inline Assembly与链接加载' }, + ] + }, + ] + }, + { text: '3.5git与github', link: '/3.编程思维体系构建/3.5git与github' }, + { + text: '3.6Python(灵巧的胶水)', + collapsed: true, + items: [ + { text: '3.6Python(灵巧的胶水)', link: '/3.编程思维体系构建/3.6Python(灵巧的胶水)' }, + { text: '3.6.1从CS61A看编程语言学习', link: '/3.编程思维体系构建/3.6.1从CS61A看编程语言学习' }, + { text: '3.6.2环境配置', link: '/3.编程思维体系构建/3.6.2环境配置' }, + { text: '3.6.3安装python', link: '/3.编程思维体系构建/3.6.3安装python' }, + { + text: '3.6.4Python for fun', + collapsed: true, + items: [ + { text: '3.6.4Python for fun', link: '/3.编程思维体系构建/3.6.4Python for fun' }, + { text: '3.6.4.0阶段零:Python解释器', link: '/3.编程思维体系构建/3.6.4.0阶段零:Python解释器' }, + { text: '3.6.4.1阶段一:熟悉语句', link: '/3.编程思维体系构建/3.6.4.1阶段一:熟悉语句' }, + { text: '3.6.4.2阶段二:递归操作', link: '/3.编程思维体系构建/3.6.4.2阶段二:递归操作' }, + { text: '3.6.4.3阶段三:数据抽象', link: '/3.编程思维体系构建/3.6.4.3阶段三:数据抽象' }, + { text: '3.6.4.4阶段四:高阶函数', link: '/3.编程思维体系构建/3.6.4.4阶段四:高阶函数' }, + { text: '3.6.4.5阶段五:迭代生成', link: '/3.编程思维体系构建/3.6.4.5阶段五:迭代生成' }, + { text: '3.6.4.6结语', link: '/3.编程思维体系构建/3.6.4.6结语' }, + ] + } + ] + }, + { text: '3.X 聊聊设计模式和程序设计', link: '/3.编程思维体系构建/3.X 聊聊设计模式和程序设计' }, + { + text: '3.Y 附加模块:Linux', + collapsed: true, + items: [ + { text: '3.Y 附加模块:Linux', link: '/3.编程思维体系构建/3.Y 附加模块:Linux' }, + { text: '3.Y.1VMware的安装与安装Ubuntu22.04系统', link: '/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统' }, + { text: '3.Y.2WSL的安装', link: '/3.编程思维体系构建/3.Y.2WSL的安装' }, + { text: '3.Y.3Linux初探索', link: '/3.编程思维体系构建/3.Y.3Linux初探索' }, + { text: '3.Y.4Vim初探索', link: '/3.编程思维体系构建/3.Y.4Vim初探索' }, + { text: '3.Y.5linux小任务', link: '/3.编程思维体系构建/3.Y.5linux小任务' }, + ] + } + ] + }, + + ] +} + +export function chapter4() { + return [ + { text: '返回上一层', link: '/简介' }, + { + text: '4.人工智能', + collapsed: false, + items: [ + { text: '4.人工智能', link: '/4.人工智能/4.人工智能' }, + { text: '4.1前言', link: '/4.人工智能/4.1前言' }, + { text: '4.2机器学习(AI)快速入门(quick start)', link: '/4.人工智能/4.2机器学习(AI)快速入门(quick start)' }, + { + text: '4.3人工智能导论及机器学习入门', + collapsed: true, + items: [ + { text: '4.3人工智能导论及机器学习入门', link: '/4.人工智能/4.3人工智能导论及机器学习入门' }, + { + text: '4.3.1搜索', + collapsed: true, + items: [ + { text: '4.3.1搜索', link: '/4.人工智能/4.3.1搜索' }, + { text: '4.3.1.1程序示例——maze迷宫解搜索', link: '/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索' }, + { text: '4.3.1.2项目:Tic-Tac-Toe井字棋', link: '/4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋' }, + ] + }, + { + text: '4.3.2知识推理', + collapsed: true, + items: [ + { text: '4.3.2知识推理', link: '/4.人工智能/4.3.2知识推理' }, + { text: '4.3.2.1程序示例——命题逻辑与模型检测', link: '/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测' }, + { text: '4.3.2.2项目:扫雷,骑士与流氓问题', link: '/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题' }, + ] + }, + { + text: '4.3.3不确定性问题', + collapsed: true, + items: [ + { text: '4.3.3不确定性问题', link: '/4.人工智能/4.3.3不确定性问题' }, + { text: '4.3.3.1程序示例', link: '/4.人工智能/4.3.3.1程序示例' }, + { text: '4.3.3.2项目:遗传', link: '/4.人工智能/4.3.3.2项目:遗传' }, + ] + }, + ] + }, + { text: '4.4FAQ:常见问题', link: '/4.人工智能/4.4FAQ:常见问题' }, + { + text: '4.6深度学习', + collapsed: true, + items: [ + { text: '4.6深度学习', link: '/4.人工智能/4.6深度学习' }, + { text: '4.6.1工欲善其事,必先利其器', link: '/4.人工智能/4.6.1工欲善其事,必先利其器' }, + { text: '4.6.2你可能会需要的术语介绍', link: '/4.人工智能/4.6.2你可能会需要的术语介绍' }, + { text: '4.6.3深度学习快速入门', link: '/4.人工智能/4.6.3深度学习快速入门' }, + { text: '4.6.4Pytorch安装', link: '/4.人工智能/4.6.4Pytorch安装' }, + { + text: '4.6.5计算机视觉(CV)', + collapsed: true, + items: [ + { text: '4.6.5计算机视觉(CV)', link: '/4.人工智能/4.6.5计算机视觉(CV)' }, + { text: '4.6.5.1CV领域任务(研究目标)', link: '/4.人工智能/4.6.5.1CV领域任务(研究目标)' }, + { + text: '4.6.5.2CV中的数据预处理(torchvision)', + collapsed: true, + items: [ + { text: '4.6.5.2CV中的数据预处理(torchvision)', link: '/4.人工智能/4.6.5.2CV中的数据预处理(torchvision)' }, + { text: '4.6.5.2.1数据读取', link: '/4.人工智能/4.6.5.2.1数据读取' }, + { text: '4.6.5.2.2数据增强', link: '/4.人工智能/4.6.5.2.2数据增强' }, + ] + }, + { + text: '4.6.5.3CV中的经典网络', + collapsed: true, + items: [ + { text: '4.6.5.3CV中的经典网络', link: '/4.人工智能/4.6.5.3CV中的经典网络' }, + { text: '4.6.5.3.1AlexNet', link: '/4.人工智能/4.6.5.3.1AlexNet' }, + { text: '4.6.5.3.2FCN', link: '/4.人工智能/4.6.5.3.2FCN' }, + { text: '4.6.5.3.3ResNet', link: '/4.人工智能/4.6.5.3.3ResNet' }, + { text: '4.6.5.3.4UNet', link: '/4.人工智能/4.6.5.3.4UNet' }, + { text: '4.6.5.3.5GAN', link: '/4.人工智能/4.6.5.3.5GAN' }, + { text: '4.6.5.3.6思考题参考', link: '/4.人工智能/4.6.5.3.6思考题参考' }, + { text: '4.6.5.3.7还要学更多?', link: '/4.人工智能/4.6.5.3.7还要学更多?' }, + ] + }, + { + text: '4.6.5.4神经辐射场(NeRF)', + collapsed: true, + items: [ + { text: '4.6.5.4神经辐射场(NeRF)', link: '/4.人工智能/4.6.5.4神经辐射场(NeRF)' }, + { text: '4.6.5.4.1NeRF', link: '/4.人工智能/4.6.5.4.1NeRF' }, + { text: '4.6.5.4.2NeRF的改进方向', link: '/4.人工智能/4.6.5.4.2NeRF的改进方向' }, + { text: '4.6.5.4.3自制数据集的工具COLMAP', link: '/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP' }, + ] + }, + { + text: '4.6.5.5行人重识别(ReID)', + collapsed: true, + items: [ + { text: '4.6.5.5行人重识别(ReID)', link: '/4.人工智能/4.6.5.5行人重识别(ReID)' }, + ] + }, + ] + }, + { + text: '4.6.6自然语言处理(NLP)', + collapsed: true, + items: [ + { text: '4.6.6自然语言处理(NLP)', link: '/4.人工智能/4.6.6自然语言处理(NLP)' }, + { text: '4.6.6.1NLP领域任务(研究目标)', link: '/4.人工智能/4.6.6.1NLP领域任务(研究目标)' }, + { + text: '4.6.6.2推荐系统', + collapsed: true, + items: [ + { text: '4.6.6.2推荐系统', link: '/4.人工智能/4.6.6.2推荐系统' }, + { text: '4.6.6.2.1推荐系统经典模型综述', link: '/4.人工智能/4.6.6.2.1推荐系统经典模型综述' }, + { + text: '4.6.6.2.2基于数据的角度,看待推荐系统的构造', + collapsed: true, + items: [ + { text: '4.6.6.2.2基于数据的角度,看待推荐系统的构造', link: '/4.人工智能/4.6.6.2.2基于数据的角度,看待推荐系统的构造' }, + { text: '4.6.6.2.2.1《推荐系统实践》读后的一些想法', link: '/4.人工智能/4.6.6.2.2.1《推荐系统实践》读后的一些想法' }, + { text: '4.6.6.2.2.2推荐系统概念解释 and 一个好的推荐系统', link: '/4.人工智能/4.6.6.2.2.2推荐系统概念解释 and 一个好的推荐系统' }, + { text: '4.6.6.2.2.3推荐系统实例', link: '/4.人工智能/4.6.6.2.2.3推荐系统实例' }, + { text: '4.6.6.2.2.4利用用户行为数据', link: '/4.人工智能/4.6.6.2.2.4利用用户行为数据' }, + { text: '4.6.6.2.2.5推荐系统冷启动', link: '/4.人工智能/4.6.6.2.2.5推荐系统冷启动' }, + { text: '4.6.6.2.2.6利用标签信息', link: '/4.人工智能/4.6.6.2.2.6利用标签信息' }, + { text: '4.6.6.2.2.7利用上下文信息', link: '/4.人工智能/4.6.6.2.2.7利用上下文信息' }, + ] + }, + { text: '4.6.6.2.3序列化推荐', link: '/4.人工智能/4.6.6.2.3序列化推荐' }, + ] + }, + { text: '4.6.6.3知识图谱', link: '/4.人工智能/4.6.6.3知识图谱' }, + ] + }, + { + text: '4.6.7Transformer', + collapsed: true, + items: [ + { text: '4.6.7Transformer', link: '/4.人工智能/4.6.7Transformer' }, + { text: '4.6.7.1VIT', link: '/4.人工智能/4.6.7.1VIT' }, + { text: '4.6.7.2BERT', link: '/4.人工智能/4.6.7.2BERT' }, + { text: '4.6.7.3MAE', link: '/4.人工智能/4.6.7.3MAE' }, + ] + }, + { + text: '4.6.8对比学习', + collapsed: true, + items: [ + { text: '4.6.8对比学习', link: '/4.人工智能/4.6.8对比学习' }, + { text: '4.6.8.1前言', link: '/4.人工智能/4.6.8.1前言' }, + { text: '4.6.8.2Inst Disc', link: '/4.人工智能/4.6.8.2Inst Disc' }, + { text: '4.6.8.3定义正负样本的方式', link: '/4.人工智能/4.6.8.3定义正负样本的方式' }, + { text: '4.6.8.4MoCo', link: '/4.人工智能/4.6.8.4MoCo' }, + { text: '4.6.8.5SimCLR', link: '/4.人工智能/4.6.8.5SimCLR' }, + { text: '4.6.8.6SwAV', link: '/4.人工智能/4.6.8.6SwAV' }, + { text: '4.6.8.7BYOL', link: '/4.人工智能/4.6.8.7BYOL' }, + { text: '4.6.8.8SimSiam', link: '/4.人工智能/4.6.8.8SimSiam' }, + { text: '4.6.8.9MoCo v3', link: '/4.人工智能/4.6.8.9MoCo v3' }, + { text: '4.6.8.10总结', link: '/4.人工智能/4.6.8.10总结' }, + ] + }, + { + text: '4.6.9深度强化学习', + collapsed: true, + items: [ + { text: '4.6.9深度强化学习', link: '/4.人工智能/4.6.9深度强化学习' }, + { text: '4.6.9.1前言', link: '/4.人工智能/4.6.9.1前言' }, + { text: '4.6.9.2基础资料推荐', link: '/4.人工智能/4.6.9.2基础资料推荐' }, + { text: '4.6.9.3基本概念介绍', link: '/4.人工智能/4.6.9.3基本概念介绍' }, + ] + } + ] + }, + { text: '4.7图网络略述(intro&GCN)', link: '/4.人工智能/4.7图网络略述(intro&GCN)' }, + { text: '4.8数据分析', link: '/4.人工智能/4.8数据分析' }, + { text: '4.9如何做研究', link: '/4.人工智能/4.9如何做研究' }, + { text: '4.10科研论文写作', link: '/4.人工智能/4.10科研论文写作' }, + { text: '4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents', link: '/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents' }, + { text: '4.12本章节内容的局限性', link: '/4.人工智能/4.12本章节内容的局限性' }, + { text: 'SRT社团介绍', link: '/4.人工智能/SRT' }, + { + text: 'FunRec', + collapsed: true, + items: [ + { text: 'FunRec概述', link: '/4.人工智能/FunRec概述' }, + { + text: '推荐系统概述', + collapsed: true, + items: [ + { text: '推荐系统的意义', link: '/4.人工智能/ch01/ch1.1.md' }, + { text: '推荐系统架构', link: '/4.人工智能/ch01/ch1.2.md' }, + { text: '推荐系统技术栈', link: '/4.人工智能/ch01/ch1.3.md' }, + ] + }, + { + text: '推荐系统算法基础', + collapsed: true, + items: [ + { + text: '经典召回模型', + collapsed: true, + items: [ + { + text: '基于协同过滤的召回', collapsed: true, items: [ + { text: 'UserCF', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/usercf.md' }, + { text: 'ItemCF', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/itemcf.md' }, + { text: 'Swing', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/Swing.md' }, + { text: '矩阵分解', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/mf.md' }, + ] + }, + { text: 'FM召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/FM.md' }, + { + text: 'item2vec召回系列', collapsed: true, items: [ + { text: 'word2vec原理', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/word2vec.md' }, + { text: 'item2vec召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/item2vec.md' }, + { text: 'Airbnb召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/Airbnb.md' }, + ] + }, + { text: 'YoutubeDNN召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/YoutubeDNN.md' }, + { + text: '双塔召回', collapsed: true, items: [ + { text: '经典双塔', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/DSSM.md' }, + { text: 'Youtube双塔', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/YoutubeTwoTower.md' }, + ] + }, + { + text: '图召回', collapsed: true, items: [ + { text: 'EGES', link: '/4.人工智能/ch02/ch2.1/ch2.1.3/EGES.md' }, + { text: 'PinSAGE', link: '/4.人工智能/ch02/ch2.1/ch2.1.3/PinSage.md' }, + ] + }, + { + text: '序列召回', collapsed: true, items: [ + { text: 'MIND', link: '/4.人工智能/ch02/ch2.1/ch2.1.4/MIND.md' }, + { text: 'SDM', link: '/4.人工智能/ch02/ch2.1/ch2.1.4/SDM.md' }, + ] + }, + { + text: '树模型召回', collapsed: true, items: [ + { text: 'TDM', link: '/4.人工智能/ch02/ch2.1/ch2.1.5/TDM.md' }, + ] + } + ] + }, + { + text: '经典排序模型', + collapsed: true, + items: [ + { text: 'GBDT+LR', link: '/4.人工智能/ch02/ch2.2/ch2.2.1.md' }, + { + text: '特征交叉', collapsed: true, items: [ + { text: 'FM', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/FM.md' }, + { text: 'PNN', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/PNN.md' }, + { text: 'DCN', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/DCN.md' }, + { text: 'AutoInt', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/AutoInt.md' }, + { text: 'FiBiNET', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/FiBiNet.md' }, + ] + }, + { + text: 'WideNDeep系列', collapsed: true, items: [ + { text: 'Wide&Deep', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/WideNDeep.md' }, + { text: 'NFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/NFM.md' }, + { text: 'AFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/AFM.md' }, + { text: 'DeepFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/DeepFM.md' }, + { text: 'xDeepFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/xDeepFM.md' }, + ] + }, + { + text: '序列模型', collapsed: true, items: [ + { text: 'DIN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DIN.md' }, + { text: 'DIEN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DIEN.md' }, + { text: 'DSIN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DSIN.md' }, + ] + }, + { + text: '多任务学习', collapsed: true, items: [ + { text: '多任务学习概述', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/2.2.5.0.md' }, + { text: 'ESMM', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/ESMM.md' }, + { text: 'MMOE', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md' }, + { text: 'PLE', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/PLE.md' }, + ] + } + ] + } + ] + } + ] + } + ] + }, + ] +} + +export function chapter5() { + return [ + { text: '返回上一层', link: '/简介' }, + { + text: '5.富有生命的嵌入式', + collapsed: false, + items: [ + { text: '5.富有生命的嵌入式', link: '/5.富有生命的嵌入式/5.富有生命的嵌入式' }, + { text: '5.1嵌入式是什么?可以吃吗?', link: '/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?' }, + { text: '5.2New meaning of C', link: '/5.富有生命的嵌入式/5.2New meaning of C' }, + { text: '5.3还玩裸机?上操作系统!', link: '/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!' }, + ] + }, + ] +} + +export function chapter6() { + return [ + { text: '返回上一层', link: '/简介' }, + { + text: '6.计算机安全', + collapsed: false, + items: [ + { text: '6.计算机安全', link: '/6.计算机安全/6.计算机安全' }, + { + text: '6.1Web安全', + collapsed: true, + items: [ + { text: '6.1Web安全', link: '/6.计算机安全/6.1Web安全' }, + { text: '6.1.1SQL 注入', link: '/6.计算机安全/6.1.1SQL 注入' }, + ] + }, + { + text: '6.2二进制安全', + collapsed: true, + items: [ + { text: '6.2二进制安全', link: '/6.计算机安全/6.2二进制安全' }, + { text: '6.2.1基础工具的使用', link: '/6.计算机安全/6.2.1基础工具的使用' }, + { text: '6.2.2软件破解、软件加固', link: '/6.计算机安全/6.2.2软件破解、软件加固' }, + { text: '6.2.3漏洞挖掘、漏洞利用', link: '/6.计算机安全/6.2.3漏洞挖掘、漏洞利用' }, + ] + }, + { text: '6.3密码学', link: '/6.计算机安全/6.3密码学' }, + { text: '6.4安全杂项', link: '/6.计算机安全/6.4安全杂项' }, + ] + }, + ] +} + +export function chapter7() { + return [ + { text: '返回上一层', link: '/简介' }, + { + text: '7.网络应用开发', + collapsed: false, + items: [ + { text: '7.网络应用开发入门', link: '/7.网络应用开发/7.网络应用开发入门' }, + { + text: '7.1WEB开发入门', + collapsed: true, + items: [ + { text: '7.1WEB开发入门', link: '/7.网络应用开发/7.1WEB开发入门' }, + { + text: '7.1.1前端部分', + collapsed: true, + items: [ + { text: '7.1.1前端部分', link: '/7.网络应用开发/7.1.1前端部分' }, + { text: '7.1.1.1基础部分', link: '/7.网络应用开发/7.1.1.1基础部分' }, + { text: '7.1.1.2进阶部分', link: '/7.网络应用开发/7.1.1.2进阶部分' }, + { text: '7.1.1.3附录1:前端介绍(详细版)', link: '/7.网络应用开发/7.1.1.3附录1:前端介绍(详细版)' }, + { text: '7.1.1.4附录2:大前端开发', link: '/7.网络应用开发/7.1.1.4附录2:大前端开发' }, + { text: '7.1.1.5附录3:跨端开发', link: '/7.网络应用开发/7.1.1.5附录3:跨端开发' }, + ] + }, + { + text: '7.1.2后端部分', + collapsed: true, + items: [ + { text: '7.1.2后端部分', link: '/7.网络应用开发/7.1.2后端部分' }, + { text: '7.1.2.1基础部分', link: '/7.网络应用开发/7.1.2.1基础部分' }, + { text: '7.1.2.2进阶部分', link: '/7.网络应用开发/7.1.2.2进阶部分' }, + ] + }, + ] + }, + ] + }, + ] +} + +export function chapter8() { + return [ + { text: '返回上一层', link: '/简介' }, + { + text: '8.基础学科', + collapsed: false, + items: [ + { text: '8.基础学科', link: '/8.基础学科/8.基础学科' }, + { text: '8.1经济学科普Part1', link: '/8.基础学科/8.1经济学科普Part1' }, + ] + } + ] +} \ No newline at end of file diff --git a/.vitepress/theme/index.js b/.vitepress/theme/index.js index 9d3c570..a2684fb 100644 --- a/.vitepress/theme/index.js +++ b/.vitepress/theme/index.js @@ -2,6 +2,9 @@ import { h, watch } from 'vue' // import Theme from 'vitepress/theme' import DefaultTheme from 'vitepress/theme-without-fonts' +import Download from '../../components/Download.vue' +import Bilibili from '../../components/Bilibili.vue' +import Parallax from '../../components/Parallax.vue' import './style.css' import './rainbow.css' @@ -16,6 +19,9 @@ export default { }, enhanceApp(ctx) { DefaultTheme.enhanceApp(ctx) + ctx.app.component('Download', Download) + ctx.app.component('Bilibili', Bilibili) + ctx.app.component('Parallax', Parallax) if (typeof window === 'undefined') return diff --git a/.vitepress/theme/style.css b/.vitepress/theme/style.css index 964d06a..87ef58a 100644 --- a/.vitepress/theme/style.css +++ b/.vitepress/theme/style.css @@ -25,6 +25,14 @@ --vp-font-family-base: 'Noto Sans SC', 'Noto Color Emoji', sans-serif; --vp-font-family-mono: 'Noto Sans Mono', sans-serif, monospace, consolas; } +/** + * 这个版本可能有 bug,build 后字体变不了还为 consolas 可能是我自己配的有问题 可能是这个版本拉了 总之就加个临时的 + * -------------------------------------------------------------------------- */ +code { + font-family: 'Noto Sans Mono', sans-serif, monospace, consolas !important; + font-weight: 400 !important; + font-size: 14px !important; +} /** * Component: Button @@ -179,4 +187,10 @@ mjx-container { .jp-RenderedHTMLCommon :not(pre) > code { background-color: var(--vp-c-mute) !important; +} + +.VPImage { + user-drag: none !important; + -webkit-user-drag: none !important; + -moz-user-drag: none !important; } \ No newline at end of file diff --git a/1.杭电生存指南/1.12程序员如何活久一点.md b/1.杭电生存指南/1.12程序员如何活久一点.md new file mode 100644 index 0000000..2bbbdcf --- /dev/null +++ b/1.杭电生存指南/1.12程序员如何活久一点.md @@ -0,0 +1,41 @@ +# 程序员如何活久一点 +### 1. 术语 + +* ACM: All-Cause Mortality / 全因死亡率 + +### 2. 目标 + +* 稳健地活得更久 + +### 3. 关键结果 + +* 降低66.67%全因死亡率 +* 增加\~20年预期寿命 +* ~~维持多巴胺于中轴~~ + +### 4. 分析 + +* 主要参考:对ACM的学术文献相对较多,可以作为主要参考 +* 增加寿命与ACM关系非线性:显然增加寿命与ACM关系是非线性函数,这里假设 `DeltaLifeSpan=(1/(1+DeltaACM)-1)*10`(DeltaACM为ACM变化值;公式欢迎优化) +* 变量无法简单叠加:显然各个变量之间并不符合独立同分布假设,变量之间的实际影响也并不明确 +* 存在矛盾观点:所有的证据都有文献/研究对应,但注意到:有些文献之间有显著矛盾的观点(如对于碳水摄入比例的矛盾);有些文献存在较大争议(如认为22点前睡觉会提升43%全因死亡率) +* 研究仅表达相关:所有文献表明的更多是相关而非因果,在阅读时要考虑文献是否充分证明了因果 —— 如某文献表明了日均>=7000步的人有显著低的全因死亡率。但步数少的人可能包含更多长期病患,如果没有合理的排除这块数据,那此文献调查失真 + +### 5. 行动 + +* 输入 + * 固体:吃白肉(-11%\~-3% ACM)、蔬果为主(-26%\~-17% ACM),多吃辣(-23% ACM),多吃坚果(-27%\~-4% ACM),*少吃蛋黄(否则+7% ACM/0.5颗/天)(存在争议)*,中量碳水、多吃植物蛋白(-10% ACM),少吃超加工食物(-62%\~-18%) + * 液体:喝咖啡(-22%\~-12% ACM),喝牛奶(-17%\~-10% ACM),喝茶(-15%\~-8% ACM),少喝或不喝甜味饮料(否则每天一杯+7% ACM,+多巴胺),戒酒或每周100g(纯酒精量(g)=饮酒量(ml)×酒精浓度(%)×酒精密度0.8g/ml)内(否则+\~50% ACM,无上限) + * 气体:不吸烟(否则+~50% ACM,-12\~-11年寿命) + * 光照:晒太阳(-~40% ACM) + * 药物:二甲双胍(糖尿病人相比正常人可以+3年)、复合维生素(-8%癌症风险)、亚精胺(-60%\~-30% ACM)、葡萄糖胺(-39% ACM) +* 输出 + * 运动:每周3次45分钟挥拍运动(-47% ACM) + * 日常:刷牙(-25% ACM) + * 睡眠:每天睡7小时全因死亡率最低;且22-24点间最好,*早睡+43% ACM,晚睡+15% ACM(存在争议)* +* 上下文 + * 体重:减肥(-54% ACM) + +::: tip 🧑‍🍳 +全文 [程序员延寿指南 | A programmer's guide to live longer](https://github.com/geekan/HowToLiveLonger) +::: diff --git a/1.杭电生存指南/1.13选课原则与抢课技巧.md b/1.杭电生存指南/1.13选课原则与抢课技巧.md new file mode 100644 index 0000000..969c6fb --- /dev/null +++ b/1.杭电生存指南/1.13选课原则与抢课技巧.md @@ -0,0 +1,54 @@ +# 选课原则与抢课技巧 + +> author: ek1ng +> +> 本文编写自2021.07.31,也许有些内容已经过时,请选择性参考。 + +## 选课原则 +### 要选哪些课 +在杭电,学生必须修读完培养计划上所有的课程才能够毕业,因此选课遵循的唯一纲要便是培养计划,一切以培养计划上的要求为准,体育课、通识必修课、通识选修课、专业选修课、专业必修课等等,请注意任何选课尽可能请以培养计划的课程代码为准,若课程代码不同则需要通过课程替代等方式。 +### 为什么要选课 +选课其实是选老师,而选择的选课老师的背后则是课程考核方式、给分高低、成绩占比、课堂签到情况等等。选择正确的老师能够使课堂更加符合你的预期,不论是教学质量还是教学方式亦或期末分数上。 + +在讨论之前,必须声明一些学校课程的基本要求,例如学校要求老师采取易班点名的方式,所以除了某些老师以外大多数老师都会采取不定次数的课堂点名以及点教室人头的方式作为考核考勤情况的方式。 +### 学校开什么课 +学校开展体育课(大一大二4学期分别修读不同类别的体育课程4次)、通识选修课 ~~(通常各专业需要修读人文类、国际类、科技类学分4、4、2个)~~ +:::warning +2023年更新:现在是国际类、人文类、艺术类、科技类学分4、2、2、2个(不管怎么变应该加起来都是10分) +::: +### 选什么课好 +在杭电换客群或者与认识的室友、同学、朋友等等交流开展某课程的某老师教学情况,打听情报以选择合适的老师。此处的情报通常指老师的教学方式如何,采取怎样的签到方式等等。如果曾经上过某老师开展的a课程,那么通常对于他开展的b课程,签到情况和给分情况都仍然能够适用,但是教学情况则未必。 +### 常见问题Q&A +Q1:我该如何安排我这一学期的课程? + +A1:尽可能按照培养计划给出的每学期修读建议修读,适当先在大一、大二修读通识选修、体育课以及适量的专业必修专业选修,在大三修读更多的专业课程。当然如果完全打乱培养计划在杭电也是完全允许的,你完全可以在大一、大二修读大三的课程,在大三修读大一的课程,这么做的意义也许是你希望通过修读课程顺序的改变来调整你个人的时间安排,不论如何这是符合学校规章制度的操作,只要你想你就可以这么做。 + +Q2:选课所谓第一轮选课第二轮选课到底是如何进行的? + +A2:第一轮选课可以选择的课为体育课、通识选修课(英语拓展课、大学军事、公选课都包括在内)、推荐课表上的课程。第二轮选课可以跨年级跨学院跨专业选课,只要能搜到的课都是可以上的,不过请注意,思修近代史毛概马原形策等课程并不能提前修读。第二轮选课通常进行到开学后3周,在开学前3周,可以通过签课的方式即在授课老师、学院的批准通过下选上自己没有抢到的课,理论上任何课(需要注意公选课、体育课一般无法签课,老师是否同意签课通常看老师的个人情况,学院通常会在老师批准的情况下通过批准)只要经过批准都可以签课成功后出现在课表上。请注意,学分上限为32.5(不包括暑假短学期课程),转专业后学分上限自动扩为40,若非转专业学生可以在绩点3.0以上的情况下开学前3周内提出扩学分请求。 +:::warning +2023年更新:学分上限好像变高了,但我忘了是多少🤡 +::: + +Q3:大一上如何选课? + +A3:大一上选课的安排在最后时间段,体育被默认选了太极拳,并选不到“好”的公选课专业课等等,不太建议选很多课,选一门新生研讨课或者推荐不选课。 + +## 抢课技巧 +### 选课背景 +2021年上学期的选课中,杭电更换了正方全新的选课平台http://newjw.hdu.edu.cn ,目前选课平台的特性为,在选课时间内开放至公网ip可以访问,可以并发请求,~~并不会网页卡崩~~,抢课全靠手速。 +:::tip +1. 鉴于杭电复杂的网络环境,在**内网**抢课甚至不如**公网**😅,所以建议在寝室里连上网线(公网)抢课。 + +2. **网页会卡崩**,刚开始选课0~5分钟系统会未响应甚至将你踢出登录,还会让你浏览器爆掉显示 *欧呦,崩溃啦* 之类的字样,一切听天由命。 +::: +## 具体技巧 +#### 系统开放前 +通常系统开放前可以查询开课情况,那么可以根据开课情况自己提前规划安排想上的课程。 +#### 系统开放时 + +##### 第一轮选课、第二轮选课开放系统时 +提前在粘贴板中剪切/复制第一手要抢的课程,并且在选课平台开放时间前几秒,不停点击刷新,直至选课平台显示的内容不为非选课时间而是可以搜索,粘贴课程名并且点击抢课即可第一手抢到最想抢的课程,再依次抢接下来准备上的课。若课表上已经被系统默认选的课占了想要选的课的位置,那么就需要先退课再选课。 + +##### 假期以及开学前三周 +这时候会有同学因为不想选某门课程或者通过将课卡在其他人号上想在假期“转移”到自己号上,选课系统中的课程余量就会时不时出现波动,此时可以上去系统看看说不定能捡漏哦。签课以及扩学分在开学前三周进行,请关注学校通知并且通过签课选上自己没能选上的课程。 diff --git a/1.杭电生存指南/1.2竞赛指北.md b/1.杭电生存指南/1.2竞赛指北.md index 07a0127..fdf35a6 100644 --- a/1.杭电生存指南/1.2竞赛指北.md +++ b/1.杭电生存指南/1.2竞赛指北.md @@ -92,6 +92,6 @@ 由于笔者是创意组的,对其他组别不是很了解,就来介绍一下我们组别的情况。我们组别全称是智能车百度创意组,是由百度与鲸鱼机器人赞助的一个比较新的组别(目前是第三年,不过也开始卷起来了),该组别与传统组别的一个比较大的不同是对于硬件方面的要求并不高(但也是需要了解的,像 arduino ,stm32 这些稍微都得玩的起来),侧重会偏向软件算法方向。百度创意组总体分为两个阶段,线上赛和线下赛,线上赛的任务有点像是 kaggle 打榜,不过是百度官方命题,并且在飞浆平台上进行测试的,本质考验的就是你对神经网络的理解和调参(炼丹),如下图所示 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnQe2AYHX93NUz6Sfoq3hUPd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnQe2AYHX93NUz6Sfoq3hUPd.png) diff --git a/1.杭电生存指南/1.4小心项目陷阱.md b/1.杭电生存指南/1.4小心项目陷阱.md index d624f64..3eee61b 100644 --- a/1.杭电生存指南/1.4小心项目陷阱.md +++ b/1.杭电生存指南/1.4小心项目陷阱.md @@ -1,6 +1,6 @@ # 小心项目陷阱 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPmQ725zYTxiyo2LqQkphib.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPmQ725zYTxiyo2LqQkphib.png) ## 辨别项目质量 @@ -52,7 +52,7 @@ 但是大家参与之前你一定要想你的能力是否等于这个项目的量级,一般情况下,要么你技术特别强,要么可能会存在一定的问题。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPSolGcUy1R0Dk2FUhPaLLc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPSolGcUy1R0Dk2FUhPaLLc.png) 所以说,还是那句话,小心甄别。 diff --git a/1.杭电生存指南/1.5小组作业避雷指南.md b/1.杭电生存指南/1.5小组作业避雷指南.md index 9bc6a6d..540ede4 100644 --- a/1.杭电生存指南/1.5小组作业避雷指南.md +++ b/1.杭电生存指南/1.5小组作业避雷指南.md @@ -11,6 +11,8 @@ ::: warning 🤣 [与人合作中的 “生死疲劳” 哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1494y1o7jp) + + **一定要看看这个** ::: diff --git a/1.杭电生存指南/1.7杭电出国自救指南.md b/1.杭电生存指南/1.7杭电出国自救指南.md index 15aa6df..c4ecbcc 100644 --- a/1.杭电生存指南/1.7杭电出国自救指南.md +++ b/1.杭电生存指南/1.7杭电出国自救指南.md @@ -6,13 +6,13 @@ ## 序言:一组数据看出国 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndFjrKQMhZJsH1vN1fEfaQb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndFjrKQMhZJsH1vN1fEfaQb.png) 点开图片可以看到左边是西交利物浦的出国数据,中间是杭电的数据,右边是成都电子科技大学的数据,可以看出西交利物浦每年去名校的数量大概是杭电一年的 20-40 倍,成电是杭电的一年的 10 倍左右,杭电出国数据实际上只有寥寥几个名校,剩下的则是一些英国院校。 这其中原因除了杭电高性价比的就业环境,双非院校选择出国深造的人数较低,我认为比较还有一点则是信息差。优秀的大学都有他们自己的飞跃手册,其中会介绍每个国家的优劣,以及申请的一些注意事项,详见下图。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnKMzGr9LSrXWmKxa1lSM1zJ.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnKMzGr9LSrXWmKxa1lSM1zJ.png) 优越的校友资源和前人留下的数据和方案,加下信息差的叠加,就像符合幂律分布的无标度网络一样,只会让我们的差距越来越大,在感叹其他学校飞跃手册的优越性的同时也发现了一些不可参考性,因为在其中也存在着很多问题,在这些学校中,可能名校读博就是老师写个推荐信就有了面试的机会,可能去港大 / G5 就是大学四年均分 80 分的难度。有很多资料在不同的角度,我们很难参考,所以我不经会想问?那我们呢,我们考多少多少分能够去什么学校,我们想要直博应该怎么准备,所以我打算完成这份出国留学的手册,能够为学弟学妹们铺路,同样希望后面也能够有学弟学妹做完善和补充。 diff --git a/2.高效学习/2.1.1悲壮的学习方式.md b/2.高效学习/2.1.1悲壮的学习方式.md index 24e237f..8997bfd 100644 --- a/2.高效学习/2.1.1悲壮的学习方式.md +++ b/2.高效学习/2.1.1悲壮的学习方式.md @@ -1,6 +1,6 @@ # 2.1.1 悲壮的学习方式 -# 现状 +## 现状 古人刻苦学习的故事,直到现在还在我们的身边不断上演。学生趴在山一样高的习题集边上苦苦奋斗,绝对是我校作为国内一流大学的亮丽的风景线。 @@ -8,7 +8,7 @@ 我无意全盘否定同学们吃苦耐劳的精神,但这份精神充其量只能称为悲壮。我们耗费了大量的时间和精力掌握的那些考点、技巧,在真正的知识殿堂里根本登不上大雅之堂。哪怕我们特征值求得再熟练,积分积得再复杂,中国的载人飞船也不会因此而顺利上天。 -# 解决 +## 解决 学习的时候,不要有负担心理。很多同学在学习知识的时候带着一种学不完或者学不会我就上吊算了的心态,其实这是比较危险的一种精神状态。 diff --git a/2.高效学习/2.1.2浮躁的心理状态.md b/2.高效学习/2.1.2浮躁的心理状态.md index d6a1fa6..d31221e 100644 --- a/2.高效学习/2.1.2浮躁的心理状态.md +++ b/2.高效学习/2.1.2浮躁的心理状态.md @@ -1,16 +1,22 @@ # 2.1.2 浮躁的心理状态 -# 现状 +## 现状 -> 我明明很努力了,但是就是学不懂,群里的同学好像啥都会 WOC
我周围的同学怎么参加竞赛的科研经历丰富的都有就我是废物呜呜呜
我的同学啥都有了但是我什么都没
为什么我室友都脱单了我还是单身狗 +> 我明明很努力了,但是就是学不懂,群里的同学好像啥都会 WOC +> +> 我周围的同学怎么参加竞赛的科研经历丰富的都有就我是废物呜呜呜 +> +> 我的同学啥都有了但是我什么都没 +> +> 为什么我室友都脱单了我还是单身狗 浮躁,往往来源于和他人的比较是具有社会属性的我们的人之常情。 然而,我们往往不能从中获得任何鼓励反而深受打击。 -# 解决方案 +## 解决方案 -如果我在这里说戒骄戒躁一定会被打的(逃) +如果我在这里说戒骄戒躁一定会被打的(逃) 学不懂一门课程,大可不必着急,慢慢来,也可以问问学长学姐或者思考一下这门课到底为什么如此组织。 @@ -26,4 +32,4 @@ 如果实在不行,来找 ZZM 聊聊吧。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPDWiNgkgppK1XWq5cRQ71b.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPDWiNgkgppK1XWq5cRQ71b.jpg) diff --git a/2.高效学习/2.1.3错误的提问姿态.md b/2.高效学习/2.1.3错误的提问姿态.md index 028fbd2..c7ea21d 100644 --- a/2.高效学习/2.1.3错误的提问姿态.md +++ b/2.高效学习/2.1.3错误的提问姿态.md @@ -28,7 +28,7 @@ 问题还是没有解决,现在我该怎么做? -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhuhE7qBLHyJKaesHGC033b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhuhE7qBLHyJKaesHGC033b.png) 欢迎大家阅读 @@ -36,7 +36,6 @@ [https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md) 提问的智慧 - ## 关于如何搜索代码 如果我现在想要把图片读取并转换成灰度图,我该怎么去搜索呢? diff --git a/2.高效学习/2.1.4书籍的盲目崇拜.md b/2.高效学习/2.1.4书籍的盲目崇拜.md index d927702..72137aa 100644 --- a/2.高效学习/2.1.4书籍的盲目崇拜.md +++ b/2.高效学习/2.1.4书籍的盲目崇拜.md @@ -1,12 +1,12 @@ # 2.1.4 书籍的盲目崇拜 -# 现状 +## 现状 很多同学在学习一个知识的时候,总是喜欢 "我们要学 C 语言,我买一本大黑书看看!" -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnqsCWmUTDr5UDLYca9YkhHh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnqsCWmUTDr5UDLYca9YkhHh.png) 诚然,上面的各种书写的非常好,但是我们需要思考的是,阅读这些真的能达到我们想要的目标吗??? @@ -14,7 +14,7 @@ 通常情况是,如果你阅读了一句话,用了解释这个词的意思用了三个你不懂的额外的词汇去解释,你去查这三个词汇的时候,又发现了五个你不懂的,无限循环下去。 -# 解决 +## 解决 因此,当你只是为了学习一个简单的知识,或者说为了完成一个简单的目标的时候,肝书可能不是最高效的选择。最高效的方法可能是需要什么的时候就去学习这么一个单一的知识点,并且将他和现有的体系联系起来 diff --git a/2.高效学习/2.1.5错误的学习配比.md b/2.高效学习/2.1.5错误的学习配比.md index 806812d..06ea6a0 100644 --- a/2.高效学习/2.1.5错误的学习配比.md +++ b/2.高效学习/2.1.5错误的学习配比.md @@ -18,4 +18,4 @@ 在你完成这份讲义的时候,希望你可以有选择的阅览一部分,然后带着问题去看某些课,效率也会高很多。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnSq1JzWhVrFs3MePPzp5Txg.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnSq1JzWhVrFs3MePPzp5Txg.jpg) diff --git a/2.高效学习/2.1高效的前提:摆脱高中思维.md b/2.高效学习/2.1高效的前提:摆脱高中思维.md index ad381b2..985b6a4 100644 --- a/2.高效学习/2.1高效的前提:摆脱高中思维.md +++ b/2.高效学习/2.1高效的前提:摆脱高中思维.md @@ -1,6 +1,6 @@ # 2.1 高效的前提:摆脱高中思维 -# 高中思维 +## 高中思维 高考,诚然为大众提供了阶级跃迁的途径 @@ -12,20 +12,34 @@ 就算你把课本上的内容搞得再烂熟,绝不代表你真正对这门课能有什么理解。 -并且,全部依赖他人给你指明方向的人生已经结束了! +**并且,全部依赖他人给你指明方向的人生已经结束了!** -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcne9EK3xz8LHOXfM8w9ih5Ig.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcne9EK3xz8LHOXfM8w9ih5Ig.png) 你无法依赖大学里的老师还是家里的父母来为你指明所谓的方向,你的人生只属于你自己,你的道路也只能由你自己来思考。 考研的老师会更加重视你是否有能力与他进行利益交换,公司更在乎你是否可以为公司创造价值,想当然的思考已经无法跟上这个飞速运转的世界了。 -# 大学现状 +## 大学现状 在这里引用一段上海交通大学生存指南的一段话。 -> 在当今流水线式的教育体制下,我们就像廉价的零件一样被生产出来。因为数量巨大,没人会对每一个人的教学质量负责。
领导不会为你负责。对于一个争做世界一流大学的研究型学校,管好科研,管好实验室才是当务之急。
相比之下,本科生教学显得无利可图。教授也不会为你负责。拉到足够的经费发表足够的论文,满足学院要求才是生存大计。
要说管学生,也肯定先要管好自己实验室的硕士博士,而非那一百多人大课堂里的某个本科生。就算是科研任务不太重的一些任课教师,他们也不会为你负责——学不懂?那是因为你智力低,要么就是自己底下不用功。为什么跟你一个班上的某某某同学,人家就能懂?
诚然,就算是老师上课说孟加拉语,一个班上也非常有可能冒出一两个翻翻书看看图就能学到八九不离十的同学(或者根本就是以前学过)。
真正在课堂上口传心授的教学,其质量是不会有人过问的。教学评估会考察实验报告格式是否合格,出勤率是否够,但是绝对不会考察上百人的班上到底有几个听懂了的。
试想一下,每个学院每个系有成百上千的学生,每人有着不同的思想、不同的目标、不同的知识背景、不同的接受力,我们怎么可能去指望一个统一的“教学培养计划”强制应用在每个人头上的时候,能够产生效果?好比说食堂师傅炒一大锅菜给上千人吃,我敢说我分到的那盘,不是炒糊就肯定得夹生。
所谓“教学培养计划”,其科学性必须经过教育权威的论证。然而现实中塞给我们的推荐课表,却让人失望。且不深究选修课的分类、学分、毕业条件每年一个样,三年大变样,使得不少同学毕业前夕竞相奔走;甚至连两门相依赖课程的教学先后顺序都搞错过,这样的教学培养计划,实在让人难以信任 +> 在当今流水线式的教育体制下,我们就像廉价的零件一样被生产出来。因为数量巨大,没人会对每一个人的教学质量负责。 +> +> 领导不会为你负责。对于一个争做世界一流大学的研究型学校,管好科研,管好实验室才是当务之急。 +> +> 相比之下,本科生教学显得无利可图。教授也不会为你负责。拉到足够的经费发表足够的论文,满足学院要求才是生存大计。 +> +> 要说管学生,也肯定先要管好自己实验室的硕士博士,而非那一百多人大课堂里的某个本科生。就算是科研任务不太重的一些任课教师,他们也不会为你负责——学不懂?那是因为你智力低,要么就是自己底下不用功。为什么跟你一个班上的某某某同学,人家就能懂? +> +> 诚然,就算是老师上课说孟加拉语,一个班上也非常有可能冒出一两个翻翻书看看图就能学到八九不离十的同学(或者根本就是以前学过)。 +> +> 真正在课堂上口传心授的教学,其质量是不会有人过问的。教学评估会考察实验报告格式是否合格,出勤率是否够,但是绝对不会考察上百人的班上到底有几个听懂了的。 +> +> 试想一下,每个学院每个系有成百上千的学生,每人有着不同的思想、不同的目标、不同的知识背景、不同的接受力,我们怎么可能去指望一个统一的“教学培养计划”强制应用在每个人头上的时候,能够产生效果?好比说食堂师傅炒一大锅菜给上千人吃,我敢说我分到的那盘,不是炒糊就肯定得夹生。 +> +> 所谓“教学培养计划”,其科学性必须经过教育权威的论证。然而现实中塞给我们的推荐课表,却让人失望。且不深究选修课的分类、学分、毕业条件每年一个样,三年大变样,使得不少同学毕业前夕竞相奔走;甚至连两门相依赖课程的教学先后顺序都搞错过,这样的教学培养计划,实在让人难以信任 诚然,杭电不可避免地也会受相应的“学术共同体”的影响,波及了包括但不限于竞赛,授课质量,氛围引导方面诸多的影响。 -但是不可否认的,杭电也有不少优秀的老师愿意投身于教育事业当中。并且,杭电仍然有不少教育资源,可以满足一个人的所需所求。(保研除外) +但是不可否认的,杭电也有不少优秀的老师愿意投身于教育事业当中。并且,杭电仍然有不少教育资源,可以满足一个人的所需所求。~~(保研除外)~~ diff --git a/2.高效学习/2.2优雅的使用工具.md b/2.高效学习/2.2优雅的使用工具.md index 81278a0..6589dfa 100644 --- a/2.高效学习/2.2优雅的使用工具.md +++ b/2.高效学习/2.2优雅的使用工具.md @@ -1,19 +1,24 @@ # 2.2 优雅的使用工具 -请大家记住使用工具的基本原则 你所感到不方便的!都有工具解决! +::: tip 🤗 +如果你也有好的工具推荐,请补充喵~ +::: + +请大家记住使用工具的基本原则 **你所感到不方便的!都有工具解决!** + +因此本小节的核心要义在于推荐一些有趣的有助于提高效率的小工具。 + +## 电脑软件及插件 -因此本小节的核心要义在于推荐一些有趣的有助于提高效率的小工具 -## 电脑便捷辅助插件 - [Everything](https://www.voidtools.com/zh-cn/downloads/) 电脑上的全局文件搜索 方便你找到不知道丢哪的文件 - [SpaceSniffer](http://www.uderzo.it/main_products/space_sniffer/download.html) 快速分析硬盘空间占用情况 解放储存,不解放大脑 -- [IDM 及百度云脚本](https://greasyfork.org/zh-CN/scripts/436446-%E7%BD%91%E7%9B%98%E7%9B%B4%E9%93%BE%E4%B8%8B%E8%BD%BD%E5%8A%A9%E6%89%8B) 帮助你将百度云提速(暂不可用) - [XDM](https://github.com/subhra74/xdm) :IDM 的跨平台版本。 -- [uTools](https://www.u.tools/) :自由组合插件集(最好用的是 Alt+Space 搜索功能,和 PowerToys 二选一)非常强大,比如安装 fileshare 可以在局域网共享超大文件,而且是跨平台的。 -- [PowerToys](https://github.com/microsoft/PowerToys) :微软官方出品包含诸多功能,解决 windows 下一些小痛点。 -- [Connect to Work or Games from Anywhere | Parsec](https://parsec.app/) :串流小工具,简单来说你就是可以在手机上玩电脑了,远程操作,极致体验(也可以玩游戏) +- [uTools](https://www.u.tools/) :自由组合插件集(最好用的是 Alt+Space 搜索功能)非常强大,比如安装 fileshare 可以在局域网共享超大文件,而且是跨平台的。 +- [PowerToys](https://github.com/microsoft/PowerToys) :微软官方出品,包含诸多功能,解决 windows 下一些小痛点。 +- [Connect to Work or Games from Anywhere | Parsec](https://parsec.app/) :串流小工具,简单来说你就是可以在手机上玩电脑了,远程操作,极致体验~~(也可以玩游戏)~~ - [VMware workstation](../3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.Y.1VMware%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E5%AE%89%E8%A3%85Ubuntu22.04%E7%B3%BB%E7%BB%9F.md):虚拟机就用它!但是最好自己找找盗版,正版要钱。 - [cloc](https://github.com/AlDanial/cloc): 统计代码行数(空白行,注释行,代码行)的小工具 -- mv & cp 命令显示进度条: 在复制大文件的时候非常友好,可以通过以下脚本安装 +- mv & cp 命令显示进度条: 在复制大文件的时候非常友好,可以通过以下脚本安装(Linux系统) ```bash #!/bin/bash @@ -44,12 +49,17 @@ rm coreutils-8.32 coreutils-8.32.tar.xz ``` ## 笔记工具 -- [Typora](https://typora.io/) 付费的,你可以去并夕夕啊淘宝啊花个不多于 5 块钱的钱买盗版 😋,( 正版 $14.99 ),真的好用,感觉没有 Markdown 编辑器能好用过 Typora🤥 -- [MarkText](https://github.com/marktext/marktext) 免费的 平替 Typora (?)感觉不太好用 😤 + +- [Typora](https://typora.io/) 付费的,~~你可以去并夕夕啊淘宝啊花个不多于 5 块钱的钱买盗版 😋~~,( 正版 $14.99 ),真的好用,感觉没有 Markdown 编辑器能好用过 Typora🤥。 +- [MarkText](https://github.com/marktext/marktext) 免费的,平替 Typora。 +- [MiaoYan](https://github.com/tw93/MiaoYan) 仅支持 apple ,界面挺清爽。 - [思源笔记](https://b3log.org/siyuan/) 一个国产开源的笔记/知识库软件,优势是 本地化、双链、Markdown 语法,与 Obsidian 定位相似,但 Geek 成分和自定义空间相对更高 - [Zotero](https://www.zotero.org/):协助文献阅读还有写笔记,支持与平板同传(同时他是开源的,所以可以添加一些插件) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnO1PEsVd4KY7reeU64spShf.jpg) -- [Notion](http://notion.so): 笔记终结者,非常强大,(设计理念被钉钉,飞书,我来非常抄袭)。在线就可以使用。唯一的缺点是可能需要科学上网。 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnO1PEsVd4KY7reeU64spShf.jpg) + +- [Notion](http://notion.so): 笔记终结者,非常强大,(设计理念被钉钉,飞书,我来非常抄袭)。在线就可以使用。 + ## 文献辅助阅读工具 - [知云文献翻译](https://www.zhiyunwenxian.cn/):可以有效帮助你翻译论文和文章甚至英文书籍 @@ -57,7 +67,7 @@ rm coreutils-8.32 coreutils-8.32.tar.xz ## 浏览器插件 -- [沉浸式翻译](https://immersive-translate.owenyoung.com/installation):中英文对照翻译,可以给你英文下面写一小行中文翻译(里面免费的 api 只有谷歌,必应,腾讯,不过够了,也可以自行配置其他 api ) +- [沉浸式翻译](https://immersivetranslate.com/docs/installation/):中英文对照翻译,可以给你英文下面写一小行中文翻译(里面免费的 api 只有谷歌,必应,腾讯,不过够了,也可以自行配置其他 api ) - (你真的不玩原神吗)来试试这款原神浏览器插件 [派蒙 paimon](https://github.com/daidr/paimon-webext) : 可以实时显示你的树脂,委托,派遣等情况提示。 - [wappalyzer](https://www.wappalyzer.com/):如果你是个 web 仔,这个插件可以帮你检测网页所用的前后端技术栈。 - [FeHelper--Web 前端助手](https://github.com/zxlie/FeHelper):十几个小工具的集合,包括 base64 离线解码等。 diff --git a/2.高效学习/2.3.1阅读文档(B百度爬).md b/2.高效学习/2.3.1阅读文档(B百度爬).md index f536f0b..f0ccff4 100644 --- a/2.高效学习/2.3.1阅读文档(B百度爬).md +++ b/2.高效学习/2.3.1阅读文档(B百度爬).md @@ -1,12 +1,12 @@ -# 2.3.1 阅读文档(B 百度爬) +# 2.3.1 阅读文档(破百度爬) -# 查找教程 +## 查找教程 一般帮助我们快速入门的最好的教程是在官网上的。 比如 Pytorch 的官方文档(甚至有中文版哦)。 -同时,在 Youtube 和 B 站 上的不少资料也值得称道。 +同时,在 Youtube 和 B 站上的不少资料也值得称道。 我不建议各位看黑马程序员,尚硅谷这种培训班的教程,太过细致反而有些本末倒置。 @@ -14,7 +14,7 @@ 不要用百度百科!太多错误了! -# 查找资料 +## 查找资料 你应该使用下表中推荐的网站: @@ -24,7 +24,7 @@ - 通常来说, 英文维基百科比中文维基百科和百度百科包含更丰富的内容。 - 一些中文论坛内大家互相抄,很有可能你阅读了很久都没有找到正确的答案,并且英文社区内的内容远远比中文的要好。 -# 英文阅读 +## 英文阅读 随着科学技术的发展, 在国际学术交流中使用英语已经成为常态: 顶尖的论文无一不使用英文来书写, 在国际上公认的计算机领域经典书籍也是使用英文编著。 @@ -38,10 +38,16 @@ 当然也有一些巧妙地方法帮助大家进行阅读,比如知云文献翻译,不要依赖这类软件! -# 科学上网 +## 合理使用代理服务 -学会科学上网是非常重要的一步哦 +学会合理使用代理服务是非常重要的一步哦 -机场无法给大家推荐,但是梯子经常用的无非就是 clash, ssr, v2ray 等 +无法给大家推荐,但是经常用的无非就是 , 等 如果不知道怎么办,可以求助(找学长) + + diff --git a/2.高效学习/2.3.2检索论文核心内容.md b/2.高效学习/2.3.2检索论文核心内容.md index 040939f..58d05e8 100644 --- a/2.高效学习/2.3.2检索论文核心内容.md +++ b/2.高效学习/2.3.2检索论文核心内容.md @@ -2,11 +2,11 @@ 请克服对论文英文的恐惧,适当的利用翻译软件。 -由于笔者只阅读过 CV 领域和NLP领域的一些文章,且阅读量并不算太高,故对论文的理解不仅有限且仅限于该领域内的论文风格和内容技巧,望读者见谅。 +~~由于笔者只阅读过 CV 领域和NLP领域的一些文章,且阅读量并不算太高,故对论文的理解不仅有限且仅限于该领域内的论文风格和内容技巧,望读者见谅。~~ ## 论文的一般结构 -### 1.title(标题) +### 1. title(标题) 首先是标题部分。 @@ -16,19 +16,23 @@ 论文作者会在标题下面指出,当我们的论文阅读量到一定程度之后可以关注一下作者。当我们在关注或研究某一个领域时,该领域的几篇重要论文读下来我们就可以知道哪个作者在该领域较为活跃,谁提出了 Backbone ,谁在挖坑(填坑)。可以通过作者进而检索到你感兴趣的工作或判断论文写作质量。 -### 2.abstract(摘要) +### 2. abstract(摘要) Abstract 是论文中一篇具有独立性的短文,用简单、明确、易懂、精辟的语言对全文内容加以概括,提取论文的主要信息。作者的观点、论文的主要内容、研究成果、独到的见解,这些都会在摘要中体现出来,是需要重点阅读的地方。 摘要在资料交流方面承担着至关重要的作用。摘要会收录到大型资料库中并为读者提供信息,因此我们可以通过摘要索引查找论文。 摘要的四要素:目的、方法、结果和结论称为摘要的四要素。 + (1)目的:指出研究的范围、目的、重要性、任务和前提条件,不是主题的简单重复。 + (2)方法:根据研究的主要内容和发现的问题,说明在这个过程中都做了哪些工作。(摘要中的方法不会太过详细,一般只会给出一个名词) + (3)结果:陈述研究之后重要的新发现、新成果及价值,包括通过调研、实验、观察取得的数据和结果,并剖析其不理想的局限部分。 + (4)结论:通过对这个课题的研究所得出的重要结论,包括从中取得证实的正确观点,进行分析研究,比较预测其在实际生活中运用的意义,理论与实际相结合的价值。 -### 3.introduction(导言) +### 3. introduction(导言) Introduction 主要是对整篇论文的一个介绍,读者看完 introduction 后就知道论文的几乎所有工作。 @@ -36,19 +40,19 @@ Introduction 会说明论文的主题、范围和研究目的。 然后阐明研究的起因、背景及相关领域简要历史回顾。(前人做了哪些工作、哪些尚未解决、目前进展到何种程度等)这一部分不同的论文情况不同,有些论文会单独拿出来作为一部分(related work),当我们刚进入到某一个领域时,我们可以通过这一部分了解该领域的大致研究风格和该篇论文的研究路径,get 到作者的研究思路(论文的这个课题存在有着哪些问题以及所面临怎样的挑战,发现前人工作的缺陷以及在此基础上的改进),有时可能会对我们的工作有启发。当然,如果我们对这一领域足够了解,可以不需要看这一部分,研究思路也可以在论文的方法部分自行体会。 -### 4.method(提出的算法) +### 4. method(提出的算法) -此处为文章主体,详细介绍了他是怎么做的,如果需要复现的话需要仔细阅读这一部分,无论复现与否都需要详细阅读,理解具体操作与作者的理论并尽可能将二者结合(该领域的某些方面可解释性并不强)。读者不仅可以从该部分具体理解论文工作,还可以从中发现与前人工作的不同,并从中提出进一步改进。 +此处为文章主体,详细介绍了他是怎么做的,~~如果需要复现的话需要仔细阅读这一部分~~,无论复现与否都需要详细阅读,理解具体操作与作者的理论并尽可能将二者结合~~(该领域的某些方面可解释性并不强)~~。读者不仅可以从该部分具体理解论文工作,还可以从中发现与前人工作的不同,并从中提出进一步改进。 -### 5.experiment(实验) +### 5. experiment(实验) -一般情况为介绍我为什么很牛逼,这里一般可以跳过如果不写文章的话 +~~一般情况为介绍我为什么很牛逼,这里一般可以跳过如果不写文章的话~~ -该部分一般会晒出工作的效果,我们可以从中更直观的体会工作的改进,甚至可以根据结果直接推断结果好坏的某些原因(不过一般论文中的图片当然都会放效果很好的以便作者吹逼,真想看效果建议复现工作),大胆并合理的假设推理也是科研工作中不可缺少的一个能力。 +该部分一般会晒出工作的效果,我们可以从中更直观的体会工作的改进,甚至可以根据结果直接推断结果好坏的某些原因~~(不过一般论文中的图片当然都会放效果很好的以便作者吹逼,真想看效果建议复现工作)~~,大胆并合理的假设推理也是科研工作中不可缺少的一个能力。 -### 6.conclusion(结论) +### 6. conclusion(结论) -Conclusion 结论部分,一般阅读完开头直接阅读结尾,就基本清楚文章脉络结构和思考方案了 +~~Conclusion 结论部分,一般阅读完开头直接阅读结尾,就基本清楚文章脉络结构和思考方案了~~ 结论和摘要的内容基本相似,但某些论文的结论中可能还会指出对该工作的不足之处,还有该领域内对该工作的一些期望(挖坑)。 @@ -56,19 +60,21 @@ Introduction 会说明论文的主题、范围和研究目的。 视频地址: [如何读论文【论文精读】](https://www.bilibili.com/video/BV1H44y1t75x) -### 第一遍(海选): + + +### 第一遍(海选) 阅读标题、摘要、结论。花费十几分钟时间了解论文是否适合你的研究方向。 看完之后可以再看一看方法和实验部分重要的图和表,进而判断这篇论文是否适合自己,是否和自己当前在做的工作相似。 -### 第二遍(大致把握): +### 第二遍(大致把握) 确定论文值得读之后,快速将整个论文过一遍,不需要知道所有的细节,先尝试去理解论文中重要的图和表,知道每一个部分在干什么,圈出比较重要的相关文献。 若到此为止:知道它解决什么问题,结果怎么样,大概用了什么方法,但是觉得文章很难看不太懂,可以去读他们之前引用的那些文章,读完之后再回头读这篇文章。 -### 第三遍(重点研读): +### 第三遍(重点研读) 第三遍是最详细的一遍,当我们在读第三遍时通常意味着我们对该论文的工作很感兴趣了,这时我们需要力争做到知道每一段和每一句都在说什么、干什么。基本了解整个文章的细节,在之后基于他做研究,或者在之后提到它的时候,可以详详细细的复述一遍。 diff --git a/2.高效学习/2.3.3优秀的开源社区.md b/2.高效学习/2.3.3优秀的开源社区.md index e7a7a19..1072a0b 100644 --- a/2.高效学习/2.3.3优秀的开源社区.md +++ b/2.高效学习/2.3.3优秀的开源社区.md @@ -1,16 +1,16 @@ # 2.3.3 优秀的开源社区 -# 什么是开源? +## 什么是开源? 开源是源代码可以任意获取的计算机软件,这种软件的著作权持有人在软件协议的规定下保留一部分权利并允许用户学习、修改以及以任何目的向任何人分发该软件。 开源协议通常符合开放源代码的定义的要求。 - + 但是后续因为各种原因(有一段有趣的历史,大伙可以去了解一下)开源也变为了很多种形式,比如说较为严格的,如果你使用了我的代码,你就必须也得开源,以及可以自由使用只需要标记参考了哪些源码就行。 - + 这里面有非常多有趣的历史故事以及各种渊源,感兴趣的同学可以自行了解一下 -# 灵活使用开源社区 +## 灵活使用开源社区 开源社区有时候是我们大伙学习一个新技术,查找某一个资料非常好的一种方式。 @@ -22,7 +22,7 @@ 如果说国外的 -[GitHub: Where the world builds software](https://github.com/)(最好科学上网)(全世界最大的开源社区) +[GitHub: Where the world builds software](https://github.com/)(全世界最大的开源社区) 在本章内容 /3.编程思维体系构建/3.5git与github 中详细介绍了github和git的使用方法,大家可以参考一下 @@ -34,94 +34,61 @@ awesome (你想学的东西) 例如 awesome C -# 开源的意义 +## 开源的意义 本章内容节选自Datawhale 5位成员在AI TIME的分享,《清华、北大、上交大、哈工大、中山大学5位同学眼中的开源》。 ## Z世代的开源新态度 - - 杨毅远,王琦与江季作为《Easy RL: 强化学习教程》的作者,他们有着丰富的开源经历与感受。 - - 杨毅远:开源收获的是一个正向反馈 在互联网上开源自己的论文代码、项目代码以及学习心得等内容,也有助于和他人沟通交流,收获的也是一个正向反馈。针对问题普通人如何实现开源,杨毅远认为还是要先拥抱开源,不必操之过急,开源工作需要是有意义的工作,是一个漫长的工作。 - - 王琦:开源的过程虽然会占用自己的一部分时间,但这却是一个幸福的烦恼。 论文末尾大多会附上代码地址,即代码开源。大家在看到论文代码开源的情况下会认为这篇论文能够复现的可能性比较大。虽然在将开源项目发布到GitHub之后给他人问题答复的过程可能会占用自己的一部分时间,但这可以算是一个幸福的烦恼。 - - 江季:敢于开源的人也是一个乐于分享,心态积极的人。 互联网上的开源是需要勇气的,毕竟开源后的代码要在互联网上面临网友们的考验。江季对于开源的领域也有自己独到的见解,他以春秋战国时期的百家争鸣为例,阐述了无论是对于工科生还是文科生,开源这件事都是很适用的。 - - 张文涛:能够与志同道合的人交流,是开源过程中至关重要的一环。 开源不是一个瞬间,而是需要持续地去做,无论是主动还是被动。将项目发布到网络上只是一个起点,之后反复与他人交流和解决问题,进而对项目进行不断的修正。 - - 陈安东:要像种一棵树一样等到自己的开源工作开花结果。 开源可以分为三点:首先是要知道自己想要什么;第二点是做开源一定要有始有终,只有完整的开源工作才能被大家使用和学习,完整的工作才能在之后有优化迭代的空间;第三是要有一个”开源是一个长期的过程”这样的心态。 - - ## 作为年轻一代,我们眼中的企业开源 - - 王琦:企业的目的可能是先通过开源抢占市场,后续再通过推行定制化的服务来盈利。 - - 陈安东:开源是一种企业与市场自我革命的做法,这种革命能够促进技术的发展,最终为用户带来好处。 一个行业的开源企业对传统1对1收费的市场是一个不小的冲击,因为这个市场份额也就随着这家免费的开源企业而不断减小。但是由于开源带来的技术分享反而使市场更加集中与优质化,技术也随着开源而更快速的迭代,从而产生了更好用的产品。 - - 张文涛:开源有利于提升产品的影响力 虽然公司在做开源之前不一定有明确商业目的,但是可能在开源过程中发现一些可盈利的点来开发出其产品线。然后,企业可以将这块收入的一部分反馈到开源的过程之中来增加产品的影响力。 - - 杨毅远:开源不失为一种提高公司知名度和用户信任感的方式 如果是一家中小型的创业公司,是否可以把自己核心的一部分开源出来?这样不失为一种提高公司知名度和用户信任感的方式。此外,当把实验代码开源到网络上之后,人们也希望有其他同领域的专家、研究人员可以一起来滚动更新这个任务。 - - ## 关于未来的开源,我们想说…… - - 江季:开源是一个很有前景的领域,然而现在的开源文化还并不成熟,开源确实是仍然在路上。 开源目前仍然存在不够合格的现象,比如说某些人的开源工作难以复现。开源是一个很有前景的领域,尤其是在促进学术界发展上。然而现在的开源文化还并不成熟,开源网站中占据大部分篇幅的还是广告,并没有形成知识分享的模式,开源确实是仍然在路上。 - - - 张文涛:开源的形式丰富多样,暂时不必思考太多,可以先和志同道合的人一起前进。 - - 王琦:三体人的先进在于一代又一代的持续知识共享,我们可以先模仿、学习他人的项目。 我们如今做的东西,可能在历史长河之中早已被他人做过。如果提前了解到这些,可以很大地提升我们的工作效率。如果想做一个优质的开源项目,我们可以先模仿、学习他人的项目。 - - 陈安东:开源应该是一个特别酷的东西,要敢于让别人看到自己的工作。 如今的开源还远远不够,大多数人还停留在在闭门造车的阶段。鼓励大家将自己的项目分享出来让大家来一起参与,接受大家的评价,彼此交流与指出问题,这样不但可以让开源工作更好,也可以让参与开源的大家收获满满。 diff --git a/2.高效学习/2.4优雅的记笔记.md b/2.高效学习/2.4优雅的记笔记.md index 1b6b578..b2f357c 100644 --- a/2.高效学习/2.4优雅的记笔记.md +++ b/2.高效学习/2.4优雅的记笔记.md @@ -12,6 +12,8 @@ Typora 看看下面教程 -https://www.markdown.xyz/ +https://www.markdown.xyz + 以及这个 -https://castel.dev/post/lecture-notes-1/ + +https://castel.dev/post/lecture-notes-1 diff --git a/2.高效学习/2.5以理工科的方式阅读英语.md b/2.高效学习/2.5以理工科的方式阅读英语.md index 86f943d..cd054d6 100644 --- a/2.高效学习/2.5以理工科的方式阅读英语.md +++ b/2.高效学习/2.5以理工科的方式阅读英语.md @@ -2,11 +2,12 @@ 作为一名理工科学生,也许英语并不是你的强势,但往往学习又难以避开英语。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/G6zAbGrTKoBLsfxhmvHcUBVynpc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/G6zAbGrTKoBLsfxhmvHcUBVynpc.png) 下面提供一些英语阅读的方法: -1. 学好英语(顺便过四六级) -2. 文档阅读:使用浏览器插件,例如:[沙拉查词](https://saladict.crimx.com/)、[划词翻译](https://hcfy.app/)。 +1. **学好英语(顺便过四六级)** +2. 文档阅读:使用浏览器插件,例如:[沙拉查词](https://saladict.crimx.com/)、[划词翻译](https://hcfy.app/)、[沉浸式翻译](https://immersivetranslate.com/docs/) 3. Youtube 等视频网站的双语字幕 [languagereactor](https://www.languagereactor.com/)。 4. 实用翻译软件[复制即翻译](https://copytranslator.github.io/)。 +5. ~~Galgame 翻译 [LunaTranslator](https://github.com/HIllya51/LunaTranslator)~~ diff --git a/2.高效学习/2.6学会使用AI辅助学习.md b/2.高效学习/2.6学会使用AI辅助学习.md new file mode 100644 index 0000000..59afd9f --- /dev/null +++ b/2.高效学习/2.6学会使用AI辅助学习.md @@ -0,0 +1,15 @@ +# 2.1.6学会使用AI辅助学习 + +在过去,AI取代人类似乎一直是一件遥远的事情,但在 2022 年末OpenAI 的 ChatGPT 发布后在全球引发了一场 AI 热潮,ChatGPT 所表现出来的能力让我们思考在不久的未来我们真的会被AI取代吗? + +在知识储备上,我们人类在 AI 面前绝不占优势,就比如 ChatGPT 是几乎使用了绝大多数西方互联网的优质回答而训练出来的,想要在知识储备量战胜AI已经成了天方夜谭,但大家也不要为不知道一些知识而焦虑,我很欣赏南京大学的蒋炎岩教授说的一句话:“大佬和小白的差距并不是知识量的差距,而是大佬知道如何问出好的问题,搜索引擎会告诉你答案,或许未来还可以问 AI ” + +假如你已经玩过 ChatGPT ,你会发现它还远没有到真正取代人类的地步,而是它的出现已经能够使教育以及学习方式发生巨大变革。接下去我会给你们一些小建议: + +- 如果你希望完成一件事但却不知道怎么做,你可以问搜索引擎 (PS:远离百度! 通常会得到 StackOverflow 上的答案),或是直接问 ChatGPT!不过要小心,人工智能现在还经常一本正经胡说八道。 +- 问出合适的问题,就像你问一个大佬,假如你给出的 Prompt 非常宽泛而模糊,无论是谁都没法保障给出的答案是你想要的。比如你问“如何学好数学”,你可能会得到“多做题”这样的答案,但这并不是你想要的。你应该问“如何学好导数”,这样你就能得到更加精准的答案。问ChatGPT也是同样的道理,假如你给了它一个非常宽泛的 Prompt ,它也只能给你一个模糊而无用的回答,假如给它的 Prompt 非常准确,那么你得到一个优质的回答的概率也会更高。 +- 有时候遇到一些你不愿意从头读到尾的手册,这时候去问ChatGPT是一个合适的选择,在一个手册里可能你需要的只是其中的一小段,但是手册却有几十页,此时ChatGPT的优势就体现出来了,它会根据你给的 Prompt 从手册中总结你需要的知识告诉你,这极大地降低了检索知识的成本,所以我觉得ChatGPT更像一个加强版搜索引擎。 +- 向AI获取知识,在现在的很多时候,AI对于知识的掌控和讲解的逻辑性甚至超过了相当一大部分老师,或许去听3节长课甚至不如向ChatGPT问几个问题学到的知识更多,(或许未来的课堂可以变成老师下发一张写着问题的卡片,我们只需要发给ChatGPT,通过它的回答来学习)。 +- 还有就是,在大学你会遇到非常多非常无趣的报告,甚至有些报告需要查重,没人愿意写,这时候ChatGPT就成为了拯救你的时间的利器,直接告诉它报告的要求,同时限定个数和字数,往往它能给出能混出相对高分的优质(低信息熵)报告,当然这适合的是一些水课报告,专业课报告别这么搞,专业课报告最好用它做来辅助你的写作,而不是直接抄袭。 + +> PS. 不论ChatGPT还是一些别的AI,它们的回答都不是绝对准确的,使用的时候要带有自己的思考,不要盲目相信AI的指示,把AI作为你的帮手,这能极大提高你的学习效率。 diff --git a/2.高效学习/2.高效学习.md b/2.高效学习/2.高效学习.md index 0005ea1..8b7559e 100644 --- a/2.高效学习/2.高效学习.md +++ b/2.高效学习/2.高效学习.md @@ -9,22 +9,27 @@ author:zzm 邮箱 1264517821@qq.com 但是首先各位需要了解几个名词 ::: danger 名词提醒 -# RTFM +
RTFM
Read the f**(friendly) manual -# STFW +::: + +::: danger 名词提醒 + +
STFW
Search the "friendly" website ::: -# 为什么不能直接告诉我? + +## 为什么不能直接告诉我? 因为本讲义的目的除了让你学会知识以外,更重要的目的是教给你如何当一个合格的大学生。 一个合格的大学生理应具备独立解决问题的能力。 -并且这是无论是学术界还是工业界都非常重视的基本素养 +**并且这是无论是学术界还是工业界都非常重视的基本素养** 当遇到问题不是赶紧找个大神帮我,而是"我来试试 STFW 和 RTFM, 看能不能自己解决". @@ -34,17 +39,16 @@ Search the "friendly" website 这也是我们希望大伙能获得的能力,如果把全部信息都塞上去难免有些揠苗助长。 -况且现在还有GPT来辅助你去解决问题,大大降低了学习的难度,不过大家需要谨慎考虑的是,现在的机器也会一本正经的胡说八道 - +况且现在还有ChatGPT来辅助你去解决问题,大大降低了学习的难度,不过大家需要谨慎考虑的是,现在的机器也会一本正经的胡说八道 ::: -# 如果真的不知道怎么解决怎么办? +## 如果真的不知道怎么解决怎么办? -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnSmy1oqFO1glYIYGRZ9NhEb.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnSmy1oqFO1glYIYGRZ9NhEb.jpg) 来细看看本章节的内容吧! -# 参考内容 上海交大生存指南 +## 参考内容 上海交大生存指南 [https://survivesjtu.gitbook.io/survivesjtumanual/](https://survivesjtu.gitbook.io/survivesjtumanual/) diff --git a/2.高效学习/补充:为什么不要用百度.md b/2.高效学习/补充:为什么不要用百度.md index 96623e4..b4759cc 100644 --- a/2.高效学习/补充:为什么不要用百度.md +++ b/2.高效学习/补充:为什么不要用百度.md @@ -1,19 +1,19 @@ # 补充:为什么不要用百度 -相信大家都用过百度来搜索一些非技术问题, 而且一般很容易找到答案. 但随着问题技术含量的提高, 百度的搜索结果会变得越来越不靠谱. 坚持使用百度搜索技术问题, 你将很有可能会碰到以下情况之一: +相信大家都用过百度来搜索一些非技术问题,而且一般很容易找到答案。 但随着问题技术含量的提高,百度的搜索结果会变得越来越不靠谱。 坚持使用百度搜索技术问题,你将很有可能会碰到以下情况之一: -- 搜不到相关结果, 你感到挫败 -- 搜到看似相关的结果, 但无法解决问题, 你在感到挫败之余, 也发现自己浪费了不少时间 -- 你搜到了解决问题的方案, 但没有发现原因分析, 结果你不知道这个问题背后的细节 +- 搜不到相关结果,你感到挫败 +- 搜到看似相关的结果,但无法解决问题,你在感到挫败之余,也发现自己浪费了不少时间 +- 你搜到了解决问题的方案,但没有发现原因分析,结果你不知道这个问题背后的细节 -你可能会觉得"可以解决问题就行, 不需要了解问题背后的细节". 但对于一些问题(例如编程问题), 你了解这些细节就相当于学到了新的知识, 所以你应该去了解这些细节, 让自己懂得更多. +你可能会觉得"可以解决问题就行,不需要了解问题背后的细节"。 但对于一些问题(例如编程问题),你了解这些细节就相当于学到了新的知识,所以你应该去了解这些细节,让自己懂得更多。 -如果谷歌能以更高的概率提供可以解决问题的方案, 并且带有原因分析, 你应该没有理由使用百度来搜索技术问题. 如果你仍然坚持使用百度, 原因就只有一个: 你不想主动去成长. +如果谷歌能以更高的概率提供可以解决问题的方案,并且带有原因分析,你应该没有理由使用百度来搜索技术问题。 如果你仍然坚持使用百度,原因就只有一个: 你不想主动去成长。 -你或许会觉得翻阅手册太麻烦了, 所以可能会在百度上随便搜一篇博客来尝试寻找解决方案. 但是, 你需要明确以下几点: +你或许会觉得翻阅手册太麻烦了,所以可能会在百度上随便搜一篇博客来尝试寻找解决方案。 但是,你需要明确以下几点: -- 你搜到的博客可能也是转载别人的, 有可能有坑 -- 博主只是分享了他的经历, 有些说法也不一定准确 -- 搜到了相关内容, 也不一定会有全面的描述 +- 你搜到的博客可能也是转载别人的,有可能有坑 +- 博主只是分享了他的经历,有些说法也不一定准确 +- 搜到了相关内容,也不一定会有全面的描述 -最重要的是, 当你尝试了上述方法而又无法解决问题的时候, 你需要明确"我刚才只是在尝试走捷径, 看来我需要试试 RTFM 了". +最重要的是,当你尝试了上述方法而又无法解决问题的时候,你需要明确"我刚才只是在尝试走捷径,看来我需要试试 RTFM 了"。 diff --git a/3.编程思维体系构建/3.2.1为什么要选择ACM——谈谈我与ACM.md b/3.编程思维体系构建/3.2.1为什么要选择ACM——谈谈我与ACM.md index d95f55f..455ba8b 100644 --- a/3.编程思维体系构建/3.2.1为什么要选择ACM——谈谈我与ACM.md +++ b/3.编程思维体系构建/3.2.1为什么要选择ACM——谈谈我与ACM.md @@ -36,6 +36,8 @@ author:wenjing ③ 在初高中参加竞赛的学生的数量和质量有极可能已经有所下降,因为竞赛相关政策的紧缩,稀烂的强基计划替代了对竞赛友好的自主招生,选择全力投身竞赛,拼搏省队的学生有所下降,有基础的学生现在也不见得很强。 +UPD at 2023/7/19:从长期来看,这个结论应该是没有错的,但是很可惜,如果您是2023届的新生,您将遭遇紧缩政策下一波不得不来hdu的竞赛高材生,截至笔者更新为止,已经有五位NOI银牌选手和两位具备NOI银牌能力的选手提前加入了集训队,也许对于零基础的同学而言,仍然只要和别的零基础同学竞争保底的三个席位就好了。但从长远来看,进队不是结束,抢夺比赛机会才是开始。而且如果hdu能抢到这样的生源,其他学校的水平大概率也会上涨,就算有了比赛机会也很难说会不会拿铜遗憾结尾。如果您出于好奇,想了解这荒谬的景象是如何诞生,请参阅电子书[《整型溢出》](https://zhuanlan.zhihu.com/p/117660874) + 进队的学生零基础偏少,如果你选择这条路你可能需要克服不小的困难 # 我应该以什么态度学习 ACM? diff --git a/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge).md b/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge).md index 6758252..8560f2f 100644 --- a/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge).md +++ b/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge).md @@ -6,7 +6,7 @@ 进入 [https://www.luogu.com.cn/](https://www.luogu.com.cn/) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing1.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing1.png) ## 社交模块 @@ -16,11 +16,11 @@ 点开题库,我们看见以下界面 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing2.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing2.png) 在上方我们可以筛选我们想要的题目,接下来我们点开 P1000 为例 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing3.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing3.png) 右侧三个模块为折叠状态,下面介绍他们的作用 @@ -34,7 +34,7 @@ 点击提交答案 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing4.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing4.png) 左侧可以选择语言类型,C++ 用户建议选择 C++14。 @@ -44,7 +44,7 @@ O2 优化是一种优化(废话)假如您的代码复杂度正确但 TLE, 怎么知道自己代码的问题出在哪里呢?记录模块是帮助你的好工具。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing5.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing5.png) AC:通过该数据点 @@ -64,7 +64,7 @@ OLE:输出超限 放心你见不到的 点开侧栏题单 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing6.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing6.png) 建议新手从官方精选题单开始,由浅入深,由简到难。等到对算法形成概念,针对漏洞补习时可以尝试用户分享题单(到那个阶段已经有很多手段去找题了,刘教练的题单就够你做了) @@ -76,7 +76,7 @@ OLE:输出超限 放心你见不到的 进入 [https://codeforces.com/?locale=en](https://codeforces.com/?locale=en) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing7.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing7.png) 比起 Luogu,这样的 UI 设计离 CN 互联网已经很远了(然而比起更硬核的一些做题网站,CF 的 UI 真是越看越顺眼) @@ -100,7 +100,7 @@ OLE:输出超限 放心你见不到的 进入比赛页面 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing8.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing8.png) 上方为将举办比赛,显示开始时间(UTC+8 也就是我们时区的时间)和持续时间大多都开始的比较晚,例如笔者就没有这么晚学习的习惯,所以一般赛后写题。比赛分为以下几种类型(例如写在括号里的 Div.2) @@ -114,14 +114,14 @@ Div.1、Div.2、Div.3、Div.4 数字越小难度越大。 ## VP -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing9.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing9.png) 这是一场笔者之前赛后补过的 Div.2,画面右下角分别为赛后公告和题解,右侧便是开启 VP 的按钮。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing10.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing10.png) VP模拟赛时的好处就是在虚拟参赛中获得真实比赛才能积累的经验,比如这里笔者发现通过前三题后,我应该先去看看 F 题,因为做出来的人更多,我有更大的可能性做出来,ACM 中题目并不是 100% 按难度排序。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing11.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing11.png) 进入 VP 后,我们可以发现比起正常赛后补题有了明显不同。 @@ -135,25 +135,25 @@ Div.1、Div.2、Div.3、Div.4 数字越小难度越大。 让我们点开 A 题,来看看如何提交答案 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing12.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing12.png) 可以看见,右侧有一个 submit,与 luogu 不同的是,你需要上传源代码文件(如 cpp)然后选择 G++17 为语言,提交。 当然,你也可以点开上侧的 submit code -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing13.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing13.png) 选择题目、语言,填写代码后提交,就和 Luogu 的方式一样了。 同样,在上侧 MY SUBMISSIONS 处可以查看已提交的代码和状态 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing14.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing14.png) ## PROBLEMSET 同样,CF 也有题库 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing15.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing15.png) 如果你只想做某道题而不是某场比赛,这里也许更适合你。 diff --git a/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟.md b/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟.md new file mode 100644 index 0000000..6ce1658 --- /dev/null +++ b/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟.md @@ -0,0 +1,79 @@ +# 3.2.3 ACM 竞赛从入门到入坟 + +> 作者:[选择公理](https://github.com/axiomofchoice-hjt) +> +> 利益相关:2021 杭电六队,2022 杭电一队成员 + +相信大家从前面的文章中已经了解 ACM 的基本情况,这里就不赘述了。 + +首先需要强调的是,选择 ACM 这条路非常辛苦,每天要花大量时间刷题;同时,ACM 也是残酷的,唯有实力才能保证你不被集训队淘汰。 + +这里就不得不提一下参加 ACM 竞赛的一般流程了: + +1. 大一上:参加集训队选拔,进入集训队(错过选拔的要用 [Codeforces](https://codeforces.com/) 分数来向老刘申请)。 +2. 大一下:主要是个人训练,经历多轮淘汰,期末会组队(三人一队)。 +3. 大一暑假:以组队形式参加多校等训练,这些训练将决定你在大二这个赛季能参加几次比赛。 +4. 大二:训练或比赛。没比赛资格没关系,你可以沉淀,大三还有机会。 +5. 大三同上,但是也有选择退出的。 + +## 第一阶段 + +打 ACM 要趁早。从上面流程图可以看出来,大一入学就应该决定好了,然后是学习,再然后参加选拔(冷知识:集训队不是想进就能进的)。 + +### 群 + +首先是加群。每一届老刘都会弄个杭电 ACM 新生群,没有门槛的。想要加这个群,可以问一问杭电的其他群 / 学长学姐。 + +群里主要关注两件事,一个是 ACM 公选课,一个是选拔。然后有问题也可以丢群里。 + +### 公选课 + +老刘每学期都有公选课,大一上的时候可以去旁听。公选课的内容和选拔是相关的,课讲了哪些,选拔就考哪些。所以,跟上课程进度是很有必要的。 + +### 要学什么 + +编程语言(C/C++)是算法的前提,而公选课是不会教你语言的,得自学。零基础的同学要注意了,千万不要跟着 C 语言的课来学,太慢了。尽量在一个礼拜内学完 C 的基础内容(指针可以跳过),然后跟上公选课。C++ 可以晚点再学。 + +说明一下,语言其实包含很多语法,但是 ACM 用得到的只是其中的一个子集。像 C 的指针,C++ 的模板,都是很难但是鸡肋的知识点。如果你要做工程,那这些语法都得学。 + +学会语言后,可以找一个算法书(算法竞赛入门经典(刘汝佳),算法赛进阶指南(李煜东)等等)系统学习各种算法。 + +提醒一下,这里讲到的所有东西都要上机实践,ACM 非常注重实践。你在开始学语言的时候就要多上机。 + +### 选拔 + +在大一上 10 月开始,每个月至少 1 场选拔赛(上机编程的模式),每场比赛都会根据参选人员的实际表现确定若干数量的同学入围集训队。 + +除了选拔,还有一种进队方法那就是 [Codeforces](https://codeforces.com/)。Codeforces 每个账号都会有一个分数(rating),打 Codeforces 比赛打得好就上分,反之就掉分。只要大一上你的 rating 连续三次达到 1400(具体以老刘为准),就可以向老刘申请入队。事实上,这种方法甚至到了大二都是可以的(大二你的 rating 可能要 1900),不过几乎没有人这么做,所以还是要趁早。 + +大一上会选拔 50-60 人,大一下会保留 20 人左右。(仅供参考) + +## 第二阶段 + +恭喜你,你已经学完了基础算法,可以进入以刷题为主的学习模式了。 + +刷题平台(OJ)有很多,如果没有特别适合你的,那就去刷 [Codeforces](https://codeforces.com/)。因为这个平台比赛多,老刘认可。建议 Codeforces 的每场比赛都参加(如果时间不好可以第二天补上)。 + +说到时间,Codeforces 比赛最常见的时间是 22:35 到 00:35(Codeforces 是俄罗斯的,有时差,所以时间有点阴间)。ACMer 其实很多都是熬夜党。 + +打完比赛,建议钻研一下自己没做出的前一两题,写个题解。为什么要写题解呢,一个是方便以后来回顾,一个是加深印象,一个是把自己的思维用文字表达出来,这样能发现思维的漏洞(比如证明不严谨之类的)。题解写出来发不发博客就看个人喜好吧。作者以前也是坚持写博客写了很久。 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Axiomofchoice_1.png) + +为什么要打 Codeforces 比赛呢?主要原因是打比赛有计时,有压力(怕掉分的压力),能让人提升更快。不要因为怕掉分就不参加了,你要相信只要你一直打比赛,你的 rating 曲线一定是波动上升的。 + +另外建议大家整理一个自己的模板(算法套路),这里推荐几个资料供参考:[OI Wiki](https://oi-wiki.org),[Kuangbin 模板](https://kuangbin.github.io/2018/08/01/ACM-template/)。想要验证模板可以去 [luogu](https://www.luogu.com.cn/),luogu 收录了很多模板题。 + +## 第三阶段 + +恭喜你,你应该已经度过淘汰阶段,到了组队环节了,祝愿你组队能抱到大腿。 + +有了队伍,可以考虑一下分工问题,包括读题、键盘手、各种算法类型等分工。这里建议对于任何一类问题(比如数据结构),队伍里要有至少两个人擅长,因为两个人讨论解决问题比一个人要快很多很多。而在比赛中期,最好的策略也是双开,即两个人研究一题,剩下一个研究另一题(不过这只是经验之谈了)。 + +如果你在激烈的竞争中获得参赛资格,那么你基本可以认为你有至少银牌的实力了。(~~拿了铜牌及以下老刘会生气的~~) + +## 退役的姿势 + +打 ACM 很多是为了方便找工作的,但是作者这届找工作太难了😭,光凭借 ACM 奖牌是远远不够的,要拥有好多其他能力。 + +不管你 ACM 是否取得了成绩,建议退役后要好好做规划,多了解行情,选择好的方向进行研究。 diff --git a/3.编程思维体系构建/3.3如何选择编程语言.md b/3.编程思维体系构建/3.3如何选择编程语言.md index c797b5a..3e6d9e1 100644 --- a/3.编程思维体系构建/3.3如何选择编程语言.md +++ b/3.编程思维体系构建/3.3如何选择编程语言.md @@ -10,7 +10,7 @@ 首先附上一张经典老图 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnW0YQY58RXhwdtRj5k6ndlc.jpeg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnW0YQY58RXhwdtRj5k6ndlc.jpeg) ## C 语言/C++ @@ -56,6 +56,6 @@ Python 在图里是电锯,适合干比较“狂野”的任务,也是深度 频繁应用于Web 开发,安卓应用等等。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPv2FcyQxGLjYHThSaJNwRf.jpeg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPv2FcyQxGLjYHThSaJNwRf.jpeg) 当然还有各种形形色色的编程语言等着同学们去探索。 diff --git a/3.编程思维体系构建/3.4.1FAQ:常见问题.md b/3.编程思维体系构建/3.4.1FAQ:常见问题.md index 9327da4..4327261 100644 --- a/3.编程思维体系构建/3.4.1FAQ:常见问题.md +++ b/3.编程思维体系构建/3.4.1FAQ:常见问题.md @@ -8,7 +8,7 @@ 尝试借鉴他人的代码也未尝不可,但是要保证每一行都看懂哦 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnQ4rvJqVbXJaWMOwceHdrQb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnQ4rvJqVbXJaWMOwceHdrQb.png) # 我感觉讲义写的不够细 @@ -67,6 +67,6 @@ NJU-ICS-PA 南京大学计算机系统基础 # 坚持了好久还是搞不定, 我想放弃了 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnuNXrb5zOppCZAlGQ19wuDk.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnuNXrb5zOppCZAlGQ19wuDk.jpg) 也许是你坚持的姿势不对,来和 ZZM 聊聊吧 diff --git a/3.编程思维体系构建/3.4.2用什么写 C 语言.md b/3.编程思维体系构建/3.4.2用什么写 C 语言.md index 6232ff8..b076ad5 100644 --- a/3.编程思维体系构建/3.4.2用什么写 C 语言.md +++ b/3.编程思维体系构建/3.4.2用什么写 C 语言.md @@ -2,9 +2,11 @@ 初学 C 语言,第一个问题莫过于用什么软件编写 C 语言程序。学校的老师可能会推荐包括但不限于 VC6.0,CodeBlocks,devC++,Visual Studio2013 等,如果你的电脑不是老年机,那么以上软件衷心建议你不要去使用,过于老旧了。 -# Windows-Visual Studio +## Windows-Visual Studio -[vs2022(Visual Studio 2022)指南&&技巧要领](https://www.bilibili.com/video/BV1Xt411g7jT?vd_source=699341ff80cb01917fb43665199a48dd) +[vs2022(Visual Studio 2022)指南&&技巧要领](https://www.bilibili.com/video/BV1Xt411g7jT) + + Visual Studio (以下简称 VS )是 Windows 下最完美的 C/C++ 等语言的开发平台,有“宇宙第一 IDE”之称,功能丰富,开箱即用。目前更新到 2022 版。 @@ -16,7 +18,7 @@ Visual Studio (以下简称 VS )是 Windows 下最完美的 C/C++ 等语言 选择社区版 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhNeAnlrbcdJciMUY9oNTuc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhNeAnlrbcdJciMUY9oNTuc.png) 社区版和专业版等的区别:社区版免费,功能上几乎无差别 @@ -24,7 +26,7 @@ Visual Studio (以下简称 VS )是 Windows 下最完美的 C/C++ 等语言 选择 C++ 桌面开发,其他不用选,有需要了再说。另外,Python 开发不好使,不要像我一样选 Python 开发。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnkjmKcCxIgRIzA5kyUZckye.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnkjmKcCxIgRIzA5kyUZckye.png) 安装完成后,一般来说 VS 不会自动创建桌面快捷方式,你需要到开始菜单中启动 VS。 @@ -38,19 +40,19 @@ VS 是项目制,你需要创建一个项目才能开始编写代码并运行 打开 VS,会打开如下界面(我使用深色主题),在此处单击“创建新项目” -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn6MgNnY2qBd1yAudeirx6Sh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn6MgNnY2qBd1yAudeirx6Sh.png) 在创建新项目页面中选择项目模板为控制台应用(空项目亦可,后续手动添加.c 源文件),并单击下一步 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnFwZpWZ3fQkdd3mCO8Mr9Wj.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnFwZpWZ3fQkdd3mCO8Mr9Wj.png) 为你的项目起一个名字,以及选择项目的位置,一般默认即可,如果你有强迫症,C 盘一定不能放个人数据,请自行修改。完成后单击“创建” -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnkxd472wIT39DbEiBsyPWzf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnkxd472wIT39DbEiBsyPWzf.png) 自此就创建了一个项目了,你将会到达如下界面: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvOGdjKLnvXvJM7nlE8yVcb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvOGdjKLnvXvJM7nlE8yVcb.png) 其中,左侧(如果在一开始没有选择 C++ 开发环境的话可能在右侧)为资源管理器,列出了本项目所用到的所有文件,包括代码(外部依赖项、源文件、头文件),以及将来开发图形化界面所需的资源文件;最中间占据面积最多的是代码编辑器窗口,你以后将会在这里编写你的 C 语言代码。最下面是输出窗口,源代码进行编译时,会在此处给出编译进度以及可能的代码中的错误。 @@ -66,7 +68,7 @@ C 语言是编译型语言,因此说“运行”代码其实并不是十分合 当你编写完自己的代码后,即可单击“本地 Windows 调试器”(或者使用快捷键 F5)进行“运行”。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhTxhUYMHeYHdrq0zWzLomb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhTxhUYMHeYHdrq0zWzLomb.png) 你可能会发现在“本地 Windows 调试器”右侧还有一个绿色三角形,并且单击这个也可以“运行”,这两个的区别在于“本地 Windows 调试器”是调试运行,右侧那个是不调试直接运行。 @@ -74,17 +76,17 @@ C 语言是编译型语言,因此说“运行”代码其实并不是十分合 如果你的代码被 VS 提示“This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.” -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfrxYjk5CCjMfY0mLK1B1Ze.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfrxYjk5CCjMfY0mLK1B1Ze.png) 需要你在项目-xxx 属性(xxx 是你的项目名)-C/C++-代码生成-安全检查里将安全检查禁用 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniHhCIUQY0oB3ALlxqgciLd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniHhCIUQY0oB3ALlxqgciLd.png) ## 调试 IDE 相比于代码编辑器,最强大的一点莫过于成熟的调试系统。通过调试,可以快速定位代码中没有被编译器检查出来的逻辑错误。如果需要调试,则可以在这个位置单击,打下断点,并且运行程序,程序运行时,就会在此处暂停下来,暂停时就可以查看各个变量的值了。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnydHyaNPqUEVVWmbdGofX0d.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnydHyaNPqUEVVWmbdGofX0d.png) ## 深色主题 @@ -94,15 +96,15 @@ IDE 相比于代码编辑器,最强大的一点莫过于成熟的调试系统 ### 仔细查看报错 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnC6TAAdtS0P5HzebFgFn2lc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnC6TAAdtS0P5HzebFgFn2lc.png) 如果程序代码中出现红色波浪线,则表示该处代码有“错误”,并且该处的错误会同步显示在下面的这个位置,单击即可看到错误详情。如果代码中出现绿色波浪线,则表示该处代码中有警告。警告和错误的区别是警告可以通过编译运行,但编译器认为你这里可能写错了;错误是完全不可以通过编译。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn7zL0QFakVTpYBdpOmmWOvc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn7zL0QFakVTpYBdpOmmWOvc.png) ### 善用提示 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2ouk043lNQEUkVkIS7bSSd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2ouk043lNQEUkVkIS7bSSd.png) 当你打一些函数名或者关键字时,VS 会给出你语法提示,如果这个提示正确,按下 Tab 键即可将这个提示补全到你的代码里;或者你也可以跟着这个提示打一遍,防止打错关键字。 @@ -136,7 +138,7 @@ vscode 的项目和 VS 不同,vscode 的项目比较松散,并没有 VS 那 编写完代码后,保存文件,并点击运行-启动调试 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnim98FJybpkGl8sfqxP9v9b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnim98FJybpkGl8sfqxP9v9b.png) 此时会弹出如下选择框,我的电脑上同时安装有 VS 和 gcc 编译器,因此有两个,大部分的电脑上应该只有一个“C++ (Windows)”,选择你电脑上的编译器并运行即可。 @@ -162,25 +164,25 @@ CLion 是 jetbrains 家族的 C 语言 IDE XCode 是 mac 官方的 IDE,能编写所有 mac 家族设备的软件。但缺点是没有中文。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn05Ca6Wu5TxFMplZCw2N8Jb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn05Ca6Wu5TxFMplZCw2N8Jb.png) 打开以后选择 Create a new Xcode project,选择 macOS-Command Line Tool -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbnrVCmNGfriHhU5pL76gsd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbnrVCmNGfriHhU5pL76gsd.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnjaObP5JzpICUx1PMO9MQg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnjaObP5JzpICUx1PMO9MQg.png) 两个空里第一个填项目名,第二个随便填就行 next 后选择项目保存的位置,之后即可到达以下界面: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnl06p0ZS8SSQsWJNLQLYIjc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnl06p0ZS8SSQsWJNLQLYIjc.png) 点左上方小三角即可运行 在行号上点击并运行即可调试 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnmRygjmZfwFzODP2N6bVoEh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnmRygjmZfwFzODP2N6bVoEh.png) # Linux diff --git a/3.编程思维体系构建/3.4.3解决编程问题的普适性过程.md b/3.编程思维体系构建/3.4.3解决编程问题的普适性过程.md index aa47eed..080412f 100644 --- a/3.编程思维体系构建/3.4.3解决编程问题的普适性过程.md +++ b/3.编程思维体系构建/3.4.3解决编程问题的普适性过程.md @@ -3,7 +3,7 @@ - 本篇不需要任何前置知识,推荐在学习 C 语言和学完 C 语言后各看一遍。 - 我们鼓励你在解决问题的时候进行思考,锻炼解决问题的能力,而不只是成为一个做代码翻译工作的“码农”。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/YAOvb6gquofiAYxsn3tcxcCYngf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/YAOvb6gquofiAYxsn3tcxcCYngf.png) 解决编程问题的常见误区: @@ -13,7 +13,7 @@ 如果你计划得足够好并且代码编写得正确,你的代码将在第一次工作。即便它第一次不起作用,那么你至少有一个对于代码如何调试的可靠计划。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HMipbO4vSoM3jhxSZ7Kcuddqnxh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HMipbO4vSoM3jhxSZ7Kcuddqnxh.png) ## Work an Example Yourself diff --git a/3.编程思维体系构建/3.4.4C语言前置概念学习.md b/3.编程思维体系构建/3.4.4C语言前置概念学习.md index 54a0545..538ae48 100644 --- a/3.编程思维体系构建/3.4.4C语言前置概念学习.md +++ b/3.编程思维体系构建/3.4.4C语言前置概念学习.md @@ -4,7 +4,9 @@ 以下方式难度由易到难,但并不意味着收获由小到大: -1.Video:[B 站翁恺的 C 语言课程](https://www.bilibili.com/video/BV19W411B7w1?spm_id_from=333.337.search-card.all.click&vd_source=da5a5affb1b0c71c0d7e410b1d1a3c17)(非常基础,缺点是只看视频学的过浅) +1.Video:[B 站翁恺的 C 语言课程](https://www.bilibili.com/video/BV19W411B7w1)(非常基础,缺点是只看视频学的过浅) + + 2.MOOC:[翁凯 C 课程的 MOOC 慕课](https://www.icourse163.org/course/ZJU-9001)(同上,慕课的习题和 Projects 性价比不高,几乎没有差别) @@ -34,6 +36,6 @@ 计算机思维与计算机科学与编码能力 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Hqzbbs6iYobnxWxz11Ocfa9gnHd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Hqzbbs6iYobnxWxz11Ocfa9gnHd.png) ### CS education is more than just “learning how to code”! diff --git a/3.编程思维体系构建/3.4.5.1C语言自测标准——链表.md b/3.编程思维体系构建/3.4.5.1C语言自测标准——链表.md index fa4e451..7c2ce95 100644 --- a/3.编程思维体系构建/3.4.5.1C语言自测标准——链表.md +++ b/3.编程思维体系构建/3.4.5.1C语言自测标准——链表.md @@ -6,13 +6,13 @@ 使用链表存储数据,不强制要求数据在内存中集中存储,各个元素可以分散存储在内存中。例如,使用链表存储 {1,2,3},各个元素在内存中的存储状态可能是: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnuwZzqX4dF8xKTYajwrDSxf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnuwZzqX4dF8xKTYajwrDSxf.png) 可以看到,数据不仅没有集中存放,在内存中的存储次序也是混乱的。那么,链表是如何存储数据间逻辑关系的呢? 链表存储数据间逻辑关系的实现方案是:为每一个元素配置一个指针,每个元素的指针都指向自己的直接后继元素,如下图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnAnkVAJmMT0NSNvo6crXYAd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnAnkVAJmMT0NSNvo6crXYAd.png) 显然,我们只需要记住元素 1 的存储位置,通过它的指针就可以找到元素 2,通过元素 2 的指针就可以找到元素 3,以此类推,各个元素的先后次序一目了然。像图 2 这样,数据元素随机存储在内存中,通过指针维系数据之间“一对一”的逻辑关系,这样的存储结构就是链表。 @@ -20,13 +20,13 @@ 在链表中,每个数据元素都配有一个指针,这意味着,链表上的每个“元素”都长下图这个样子: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcncRc5OKZROtxC9rpQYxrjvf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcncRc5OKZROtxC9rpQYxrjvf.png) 数据域用来存储元素的值,指针域用来存放指针。数据结构中,通常将这样的整体称为结点。 也就是说,链表中实际存放的是一个一个的结点,数据元素存放在各个结点的数据域中。举个简单的例子,图 3 中 {1,2,3} 的存储状态用链表表示,如下图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn0VMYQlez7tQTNkTPDkCsvg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn0VMYQlez7tQTNkTPDkCsvg.png) 在 C 语言中,可以用结构体表示链表中的结点,例如: @@ -66,7 +66,7 @@ typedef struct Node* Link; 例如,创建一个包含头结点的链表存储 {1,2,3},如下图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnjAoO54txAhnu7Ry8ExjGvc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnjAoO54txAhnu7Ry8ExjGvc.png) ## 链表的创建 @@ -104,7 +104,7 @@ while (Judgement) } ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn8ZxT5oMkScArZjZhgM6TYb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8ZxT5oMkScArZjZhgM6TYb.png) ### 创建结点——尾插法 @@ -121,7 +121,7 @@ while (Judgement) //for同理 } ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnMjc9pwgZgk1GBmBRlBS6d.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnMjc9pwgZgk1GBmBRlBS6d.png) ## 链表的基本操作 @@ -176,7 +176,7 @@ int GetElem(Link *L, int i; int *e) 例如,在链表 `{1,2,3,4}` 的基础上分别实现在头部、中间、尾部插入新元素 5,其实现过程如图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxjex5Q3Lt9AAx6roN3ClUg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxjex5Q3Lt9AAx6roN3ClUg.png) 从图中可以看出,虽然新元素的插入位置不同,但实现插入操作的方法是一致的,都是先执行步骤 1 ,再执行步骤 2。实现代码如下: @@ -207,7 +207,7 @@ int ListInsert(Link *L, int i, int e) 对于没有头结点的链表,在头部插入结点比较特殊,需要单独实现。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn1hlL1Fk4kDK4CPT2hJxwnV.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn1hlL1Fk4kDK4CPT2hJxwnV.png) 和 2)、3) 种情况相比,由于链表没有头结点,在头部插入新结点,此结点之前没有任何结点,实现的步骤如下: @@ -253,7 +253,7 @@ temp->next=temp->next->next; 例如,从存有 `{1,2,3,4}` 的链表中删除存储元素 3 的结点,则此代码的执行效果如图 3 所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnn3QHja0tzEwqJl9Mk4KnCg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnn3QHja0tzEwqJl9Mk4KnCg.png) 实现代码如下: @@ -282,7 +282,7 @@ int ListDelete(Link *L, int i, int* e) 对于不带头结点的链表,需要单独考虑删除首元结点的情况,删除其它结点的方式和图 3 完全相同,如下图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXjwE0yDFvpQxLaPw7FifxV.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXjwE0yDFvpQxLaPw7FifxV.png) 实现代码如下: @@ -319,7 +319,7 @@ int ListDelete(Link *L, int i, int* e) 如图所示,假设此时圆周周围有 5 个人,要求从编号为 3 的人开始顺时针数数,数到 2 的那个人出列: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngx7ZPA7pONbJo82LbNCO1g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngx7ZPA7pONbJo82LbNCO1g.png) 出列顺序依次为: @@ -339,10 +339,10 @@ int ListDelete(Link *L, int i, int* e) 为了使空链表和非空链表处理一致,我们通常设一个头结点,当然,并不是说,循环链表一定要头结点,这需要注意。循环链表带有头结点的空链表如图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3l30usevMTgv1ZbZ0mfJdh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3l30usevMTgv1ZbZ0mfJdh.png) 对于非空的循环链表如图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngoLTiM9wto9uCGzH7nkjkW.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngoLTiM9wto9uCGzH7nkjkW.png) 循环链表和单链表的主要差异就在于循环的判断条件上,原来是判断 p->next 是否为空,现在则是 p->next 不等于头结点,则循环未结束。 diff --git a/3.编程思维体系构建/3.4.6阶段二:文字冒险(cool).md b/3.编程思维体系构建/3.4.6阶段二:文字冒险(cool).md index 1b45adc..e87fd8d 100644 --- a/3.编程思维体系构建/3.4.6阶段二:文字冒险(cool).md +++ b/3.编程思维体系构建/3.4.6阶段二:文字冒险(cool).md @@ -20,7 +20,7 @@ 当然,如果你选择跳过,也不会对 python 开发那里造成非常大的影响但是你会错失一个非常宝贵的学习机会。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnustZBhjMu8FPN0Kxi4Mwvf.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnustZBhjMu8FPN0Kxi4Mwvf.jpg) 在 1980 年代, [文字冒险](http://en.wikipedia.org/wiki/Text_adventure) 是一种受人尊敬的电脑游戏类型。但是时代已经变了,在 21 世纪,它们与 带有 3D 引擎的现代 [MMORPG 相比显得苍白无力。](http://en.wikipedia.org/wiki/Mmorpg)书籍在电影的兴起中幸存下来,而基于文本的游戏很快就输掉了与图形游戏的战斗。“互动小说”由一个活跃的社区保持活力,但它的商业价值早已不复存在。 diff --git a/3.编程思维体系构建/3.4.7.1.1调试理论.md b/3.编程思维体系构建/3.4.7.1.1调试理论.md index 51160b9..2a1e2f0 100644 --- a/3.编程思维体系构建/3.4.7.1.1调试理论.md +++ b/3.编程思维体系构建/3.4.7.1.1调试理论.md @@ -28,7 +28,7 @@ - 打印变量, 断点, 监视点, 函数调用栈... -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnaqLMfwqNMTcYEPuF3vFjqg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaqLMfwqNMTcYEPuF3vFjqg.png) # 调试理论 diff --git a/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览).md b/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览).md index 34e2c55..ed04eaa 100644 --- a/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览).md +++ b/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览).md @@ -2,7 +2,7 @@ 请在开始进行 C 语言编程之后查阅使用 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHXggg6eLy86vFmb4shOksh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHXggg6eLy86vFmb4shOksh.png) # GDB 是什么? diff --git a/3.编程思维体系构建/3.4.7.2C的历史问题:undefined behavior.md b/3.编程思维体系构建/3.4.7.2C的历史问题:undefined behavior.md index e919267..46b7141 100644 --- a/3.编程思维体系构建/3.4.7.2C的历史问题:undefined behavior.md +++ b/3.编程思维体系构建/3.4.7.2C的历史问题:undefined behavior.md @@ -1,6 +1,6 @@ # C 的历史问题:undefined behavior -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnIdOChXQUGMvnxWcB7uTWLh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnIdOChXQUGMvnxWcB7uTWLh.png) 简写为 UB diff --git a/3.编程思维体系构建/3.4C语言.md b/3.编程思维体系构建/3.4C语言.md index 92d378b..79108cb 100644 --- a/3.编程思维体系构建/3.4C语言.md +++ b/3.编程思维体系构建/3.4C语言.md @@ -6,7 +6,7 @@ 值得一提的是,我不会在本教程讲授过于基础的概念,但是会贴出你可能需要学习的内容。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnAnXUHDqsMYVrDlBfFunoVf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnAnXUHDqsMYVrDlBfFunoVf.png) 同时我要说的是:C 语言为了适配多种多样的硬件以及各式各样的操作,他对非常多的 undefined 操作不做太多限制,也就是说你可能会出现各种各样的问题,甚至把你电脑炸了 diff --git a/3.编程思维体系构建/3.5git与github.md b/3.编程思维体系构建/3.5git与github.md index 759c57b..8c51999 100644 --- a/3.编程思维体系构建/3.5git与github.md +++ b/3.编程思维体系构建/3.5git与github.md @@ -22,7 +22,7 @@ - Linux 下 -``` +```bash # Debian , Ubuntu sudo apt install git ``` @@ -35,7 +35,7 @@ sudo apt install git 安装好之后,你需要先进行一些配置工作。在终端里输入以下命令: -``` +```bash git config --global user.name "Zhang San" # your name git config --global user.email "zhangsan@foo.com" # your email ``` @@ -44,7 +44,7 @@ git config --global user.email "zhangsan@foo.com" # your email 你会通过 `git clone` 命令来拉取远程仓库的代码,里面已经包含一些 `git` 记录,因此不需要额外进行初始化。如果你想在别的实验、项目中使用 `git` ,你首先需要切换到实验、项目的目录中,然后输入 -``` +```bash git init ``` @@ -54,7 +54,7 @@ git init 使用 -``` +```bash git log ``` @@ -64,7 +64,7 @@ git log 使用 -``` +```bash git status ``` @@ -76,23 +76,23 @@ git status 首先你需要使用 `git status` 查看是否有新的文件或已修改的文件未被跟踪;若有,则使用 `git add` 将文件加入跟踪列表,例如 -``` +```bash git add file.c ``` -会将 `file.c` 加入跟踪列表。如果需要一次添加所有未被跟踪的文件,你可以使用 +会将 `file.c` 加入**跟踪列表**。如果需要一次添加所有未被跟踪的文件,你可以使用 -``` +```bash git add -A -# or +# 或者 git add . ``` 但这样可能会跟踪了一些不必要的文件(二进制文件),例如编译产生的 `.o` 文件,和最后产生的可执行文件。事实上,我们只需要跟踪代码源文件即可。为了让 `git` 在添加跟踪文件之前作筛选,你可以编辑 `.gitignore` 文件( 没有的话手动创建 文件名就叫这个 ),在里面给出需要被 `git` 忽略的文件和文件类型。 -这个网页可以根据你搜索的语言来给你创建必要的 `.gitignore` 文件 +[这个网页](https://www.toptal.com/developers/gitignore) 可以根据你搜索的语言来给你创建必要的 `.gitignore` 文件 -``` +```bash # .gitignore文件示例 .idea # 编辑器配置 __pycache__ # 缓存文件夹 @@ -107,13 +107,13 @@ file.o # 一个编译后的文件 把新文件加入跟踪列表后, 使用 `git status` 再次确认. 确认无误后就可以存档了, 使用 -``` +```bash git commit -m "...comment..." ``` 提交工程当前的状态(注释)。其中 `...comment...` 是你本次提交的注释( 一般在注释中简略写出本次提交干了什么)以下为注释规范,养成良好习惯请遵守: -``` +```bash 模板: type(scope): subject @@ -149,7 +149,7 @@ subject为commit概述 如果你遇到了上文提到的让你悲痛欲绝的情况,现在你可以使用光玉来救你一命了。首先使用 `git log` 来查看已有的存档,并决定你需要回到哪个过去。每一份存档都有一个 `hash code`,例如 `b87c512d10348fd8f1e32ddea8ec95f87215aaa5` , 你需要通过 `hash code` 来告诉 `git` 你希望读哪一个档。使用以下命令进行读档: -``` +```bash git reset --hard b87c ``` @@ -161,7 +161,7 @@ git reset --hard b87c 当然还是有办法来避免上文提到的副作用的,这就是 `git` 的分支功能。使用命令: -``` +```bash git branch ``` @@ -169,7 +169,7 @@ git branch 读档的时候使用以下命令: -``` +```bash git checkout b87c ``` @@ -178,13 +178,13 @@ git checkout b87c - 查看 `b87c` 存档的内容 - 使用以下命令切换到其它分支 -``` +```bash git checkout 分支名 ``` - 对代码的内容进行修改,但你不能使用 `git commit` 进行存档,你需要使用 -``` +```bash git checkout -B 分支名 ``` @@ -200,23 +200,50 @@ git checkout -B 分支名 ## 全球最大男性交友网站 —— Github +::: tip 🤡 +想象一下你正在进行人生中第一次软件开发的小组合作。 + +你把任务分配好让组员去写代码中的某一个模块。组员写好之后发给你。 + +你一看,通过QQ发过来的是一个文件啊文件 比如说 `学生管理模块.c` 你打开一看,我去是**乱码**。 + +你废了九牛二虎之力把他的 GBK 编码改成 UTF8 之后,细细地品鉴这段代码,发现我去有严重逻辑错误,而且代码很不规范。 + +你通过QQ告诉他,这一行有问题,能不能改一下。他说,好的我改一下。 + +然后又发了文件啊文件给你,如此反复循环,你俩已经互相传了好几百个源代码文件,很没效率! +::: + + +> 通过Git版本控制管理自己的代码 ,再通过Github来发布、同步互联,是一个很好的解决方案! + 简介 作为开源代码库以及版本控制系统,Github 拥有超过 900 万开发者用户。随着越来越多的应用程序转移到了云上,Github 已经成为了管理软件开发以及发现已有代码的首选方法。 -页面大概是这样: +页面大概是这样(老图): -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHemi9HkeAG1fgoznHbHLrc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHemi9HkeAG1fgoznHbHLrc.png) ### Git 和 Github -[GitHub](https://github.com/)[ ](https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。 +[GitHub](https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。 ### Git 绑定 Github +::: tip 🤗 +下面将教学如何注册这个网站,并给[本项目](https://github.com/camera-2018/hdu-cs-wiki)点一个小小的 kita kita 的 star🎇 +::: + #### 第一步:注册账号 -([GitHub 官网](https://github.com/))右上角 sign up 会有一个非常酷炫的界面指引你注册 🥳 +([GitHub 官网](https://github.com/))右上角点击 sign up 会有一个非常酷炫的界面指引你注册 🥳 + +他会用一个像是命令行交互的方式引导注册,你需要依次填写 `邮箱` 、`密码` 、 `用户名(此为 ID 非昵称)` 、`是否同意邮箱广告推送` 、`机器验证码` 之后创建账户,随后会给你填写的邮箱发送验证码,填写注册。 + +随后是一个欢迎问卷😋随便填写、如果他问你什么PRO Plan 选择 free 不付费就好。 + +最后你访问[GitHub 官网](https://github.com)应该会显示你的 dashboard 管理台界面 #### 第二步:创建 SSH Key 并获取公钥 @@ -226,7 +253,7 @@ git checkout -B 分支名 如果没有,打开 Shell( Windows 下打开 Git Bash 前提是你已经安装好了 git 在桌面右键应该会有 Git bash here 选项 ),创建 SSH Key: -```powershell +```bash ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电子邮件地址 ``` @@ -234,32 +261,33 @@ ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电 #### 第三步:绑定 Github -登陆 `GitHub`,打开 `settings` +登陆 `GitHub`,点击右上角自己的头像,打开 `settings` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn9VFPUYHl8ghJ3C78RsXjtf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-12-32.png) 然后打开左侧栏 `SSH and GPG`` keys` 页面 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn1HbQct335qvZ71tGNu7jne.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn1HbQct335qvZ71tGNu7jne.png) 然后,点 `New SSH Key`,填上任意 Title,在 Key 文本框里粘贴 `id_rsa.pub` 文件的内容即可 #### 第四步:创建仓库并和本地绑定 -绑定完 GitHub 然后你可以创建仓库了 -首先在 GitHub 主页,找到 “New” 按钮,创建一个新的仓库 +绑定完 GitHub 然后你可以创建仓库了 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5sVnE76FYpVW2RDxtWDiZc.png) +首先在 GitHub 主页,找到 `New` 或者 `Create repository` 一个绿色的按钮,创建一个新的仓库 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5sVnE76FYpVW2RDxtWDiZc.png) 然后填上这个仓库的大名就可以创建了 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnsN133WrLrbxsX8JgvsQmif.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnsN133WrLrbxsX8JgvsQmif.png) 根据之前学习的方法在本地创建完 git 仓库之后 在 git bash 中输入: -```powershell +```bash git remote add origin git@github.com:yourname/gitexample.git # 请将yourname换成自己的id ``` @@ -268,45 +296,61 @@ git remote add origin git@github.com:yourname/gitexample.git 或者是直接 git clone 下来 -```powershell +```bash git clone git@github.com:yourname/gitexample.git ``` +> 以上方法是基于 ssh 方式的,下面方法是基于 HTTPS 方式的 + +或者你可以跟随新创建之后的指引,`…or create a new repository on the command line` 内他描述了如何创建一个文件夹、创建一个README.md的文件,然后和github仓库绑定。 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-19-18.png) + + + ### 下载代码——clone 拷贝他人存档也未尝不可,而我们如果用他人存档时,次次都需要一样一样的拷贝文件和代码未免太过折磨,下面简单介绍如何使用 -```powershell -git clone [url] +```bash +git clone ``` 接下去对着下面这个 GitHub 的代码使用一下 首先,代码的 url 在下图所示的位置 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTiaT2EnNfKVkretPsyajVd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTiaT2EnNfKVkretPsyajVd.png) 然后复制完代码后切换回我们的命令行 ```bash -e: #powershell or cmd -# 进入到想要存储该代码的地方 +# powershell or cmd +# 进入(cd)到想要存储该代码的地方(父文件夹目录) git clone https://github.com/camera-2018/git-example.git ``` +> 这里使用的[例子](https://github.com/camera-2018/git-example)是我的仓库,当然你也可以用你自己的仓库。 +> +> 如果你使用我的仓库的话,你 clone 过后在你自己电脑更改的文件等东西,是没法直接提交回来的(因为你没有我仓库管理权限) +> +> 如果你非要给我的仓库添加东西呢 也是可以,参照下面的 PR (Pull Request)教程 + 一阵抽搐过后就下载好了 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn8aRDQpe7uuDxFv9v1WvZ4c.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8aRDQpe7uuDxFv9v1WvZ4c.png) -注意:用完之后别忘记给 camera-2018 点个 follow 呃呃 follow 没用 star 有用 +::: tip +用完之后别忘记给 camera-2018 点个 follow 😋 `呃呃 follow 没用 star 有用` +::: -注意:失败就重试吧 还失败建议使用魔法 +注意:失败就重试吧 还失败建议使用魔法(非国内网你懂得) ### 提交和合并分支 如图 我在仓库里新建了 `helloworld.c` 并且写了一些代码 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZpPsp4FP78auolzHvCKP0g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZpPsp4FP78auolzHvCKP0g.png) 接下来是提交操作 @@ -314,7 +358,7 @@ git clone https://github.com/camera-2018/git-example.git git status #看一下文件暂存区 ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnm4R1ZN0WeUBuYht6zge7pd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnm4R1ZN0WeUBuYht6zge7pd.png) 红色表示文件没有提交到暂存区 我们要提交 @@ -324,7 +368,7 @@ git status #看一下文件暂存区 git add . #将没有提交的所有文件加入暂存区 ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnYHd076RAqfDmHjbUkeNSvg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnYHd076RAqfDmHjbUkeNSvg.png) 绿色表示所有文件已加入暂存 @@ -332,61 +376,131 @@ git add . #将没有提交的所有文件加入暂存区 git commit -m "feat(helloworld): add helloworld file" ``` -将刚才加入暂区的文件发起了一个提交 注释是 `feat(helloworld): add helloworld file` +将刚才加入暂区的文件发起了一个提交,提交注释(commit message)是 `feat(helloworld): add helloworld file` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcni2dupDzNO8qTWPAxS5c67b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcni2dupDzNO8qTWPAxS5c67b.png) -1. 如果这是你自己的仓库有权限 你就可以直接使用 +1. 如果这是你自己的仓库有权限(本人仓库或 Collaborators 有权限的情况下)你就可以直接使用 -```bash -git push origin main # origin是第四步里remote add起的远程名字 - # main是分支名 -``` + ```bash + git push origin main # origin是第四步里remote add起的远程名字 + # main是分支名 + ``` -上传本次提交 + 上传本次提交 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnNBu1EJnva4EkyQZAVlwGMe.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnNBu1EJnva4EkyQZAVlwGMe.png) -1. 如果你没有本仓库的主分支提交权限 可以提交 pr(pull requests) +2. 如果你没有本仓库的主分支提交权限 可以提交 PR(Pull Requests) -这里假设我是协作者 无主分支权限 + **第一种情况:这里假设我是协作者 无主分支权限,但有创建分支权限** -首先创建一个新分支 命名为 `yourname-dev` + 首先创建一个新分支 命名为 `yourname-dev` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnaS7aOzdt31vsZZx8R1s33e.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaS7aOzdt31vsZZx8R1s33e.png) -然后按照上面的方法 `git clone` 并切换到你刚创建的分支 + 然后按照上面的方法 `git clone` 并切换到你刚创建的分支 -```bash -git switch camera-2018-dev -``` + ```bash + git switch camera-2018-dev + ``` -然后提交一个文件 这里使用 vscode 自带的 git 工具试试 + 然后提交一个文件,这里直接使用 vscode 自带的 git 工具试试 (很方便、不用敲命令行) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnmwlYWOzwPbNqTAuSZK9dW3.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnmwlYWOzwPbNqTAuSZK9dW3.png) -点暂存所有更改 写好 comment 之后点提交 + 点暂存所有更改 写好 comment 之后点提交 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfcCnAdtdX2oyLIC3NibVnf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfcCnAdtdX2oyLIC3NibVnf.png) -最后点同步更改上传 + 最后点同步更改上传 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn9DSPlFgG2WMZhTOE9Zhzgb.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn9DSPlFgG2WMZhTOE9Zhzgb.png) -如果是你提交 在 github 上会显示这个 快捷创建 pr 的按钮 + 如果是你提交 在 github 上会显示这个 快捷创建 pr 的按钮 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHd7Qfi8C0Y7V2Ot5ii4vpf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHd7Qfi8C0Y7V2Ot5ii4vpf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnyt3eeZQyN8b1xM1WjDrTGe.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnyt3eeZQyN8b1xM1WjDrTGe.png) -点它创建 pr + 点它创建 PR -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJOjh1Zfp9tCd3llL9NsEzb.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJOjh1Zfp9tCd3llL9NsEzb.png) -这样管理本仓库的人看到 pr 请求就可以 merge 合并辣 + 这样管理本仓库的人看到 pr 请求就可以 merge 合并辣 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnBMq0sw6c48jvjdPJwmAGtZ.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnBMq0sw6c48jvjdPJwmAGtZ.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngNZOSnYUtCKH6pm8UaUMNd.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngNZOSnYUtCKH6pm8UaUMNd.png) -实际合作过程中可能会出现代码冲突无法 merge 的情况 😋 遇到了自己去 STFW 吧 + 实际合作过程中可能会出现代码冲突无法 merge 的情况 😋 遇到了自己去 STFW 吧 + + **第二种情况:我不是协作者、我什么权限也没有,我看了这个 public 项目后觉得很好但是有一些问题,我要给他贡献一些代码** + + 可以点击仓库右上角的 fork + + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-34-21.png) + + 这样会在你的名下多出来一份这个同名仓库,而这个仓库你是拥有所有权限的,你可以 clone 你这个同名仓库,更改代码,提交代码之后 + + 回到源仓库点击 Pull Request 然后创建 PR `New pull request` + + 最上面会提示你说 + + Comparing changes + Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also **compare across forks** . + + 点击小蓝字 `compare across forks` 这会让你对比你fork仓库和源代码仓库的提交记录,之后就可以创建 PR 了,原作者看到了会合并。 + + +### 其他功能 + +问题跟踪:GitHub的问题跟踪功能可用于报告软件中的问题、错误和功能请求,并进行讨论、分配和解决。 + +Wiki页面:用户可以创建和编辑与存储库相关的Wiki页面,用于提供项目的文档、指南、示例代码等。 + +Pull请求(Pull Requests):使用者可以将自己的代码变更提交给其他项目的所有者,并请求合并到主干代码中。 + +项目管理:GitHub提供项目管理功能,包括任务管理、里程碑(milestones)、项目板(project boards)等工具,可用于组织和跟踪项目的进展。 + +部署功能:GitHub可以与各种持续集成和部署(CI/CD)工具集成,帮助开发人员自动化构建、测试和部署他们的应用程序。 + +统计信息:GitHub提供有关存储库活动和贡献者的统计信息,例如提交图表、活动日历等,有助于跟踪和分析项目的发展。 + +社交功能:用户可以关注其他用户、存储库和组织,接收他们的更新和活动通知,并与他们进行交流和讨论。 + +代码审核(Code Review):GitHub的Pull请求功能允许团队成员对代码进行审查和讨论,以确保代码质量和最佳实践。 + +集成和扩展:GitHub支持与其他工具和服务的集成,例如持续集成(CI)工具、代码质量检查工具、项目管理工具等。 + +页面托管:GitHub Pages功能使您可以托管静态网站和文档,这在展示和共享项目文档、演示和博客等方面非常有用。 + +然后还有一些比如说 Copilot 之类的有用的功能。 + +[Copilot](https://github.com/features/copilot) 是 GitHub 推出的一款基于人工智能技术的代码辅助工具。它使用了机器学习模型 codex,并针对编写代码的场景进行了训练。 + +Copilot 可以根据上下文和输入的提示,为开发人员生成代码建议和自动完成。它可以通过分析现有代码库、注释和上下文来生成代码片段,提高编码效率并减少重复劳动。 + +## [Copilot](https://github.com/features/copilot) 白嫖教程 + +你需要学生认证你的 Github 账号。 + +地址在 https://education.github.com/students 点击 `Sign up for Global Campus` 来开始认证,下面会让你输入学校,绑定学校邮箱(杭电为 @hdu.edu.cn 结尾的邮箱)(如果你是杭电新生的话,可能要等到智慧杭电账号发放时才能注册杭电邮箱)并上传**学生证明**(从21年开始这个验证越来越严,如果不过的话你可以尝试 `学生证第一页`、`学生证第一页英文翻译(像有道翻译那样 P 图上去)`、`学信网学籍证明英文翻译(英文也是 P 上去)`) + +通过了的话你的账户会有 Pro 标识 然后你可以享受的 Github 学生包里包含[这些东西](https://education.github.com/pack) + +里面比较有用的有 +- JETBRAINS 全家桶的免费用(我没用,我用的是jb自己家的验证方式,不是github) +- name.com 家的一个一年期的免费域名(大概价值吧 六七十块钱?) +- github 的容量扩容和 actions 时间扩容、Codespaces 时间延长、Pages 扩容(没啥用倒是) +- Termius 学生包,这是我很喜欢用的终端软件,有学生包可以多端同步ssh的账号密码啥的,很方便。 +- Sentry 容量扩容 +- Copilot 免费用 + +你可以在 `settings` 里看到你的copilot ,配置如下 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-59-49.png) + +然后就可以在你喜欢的 IDE 或编辑器上下载 Copilot 插件,来启用他。 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_18-02-19.png) diff --git a/3.编程思维体系构建/3.6.2环境配置.md b/3.编程思维体系构建/3.6.2环境配置.md index abf536f..6dd9660 100644 --- a/3.编程思维体系构建/3.6.2环境配置.md +++ b/3.编程思维体系构建/3.6.2环境配置.md @@ -10,21 +10,21 @@ 装下来之后具体操作可以看[安装教程](https://blog.csdn.net/in546/article/details/117400839),如果自动配置环境变量的选项是灰色的话,请按照下面的教程把下面的几个文件路径加入环境变量。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3PLPIvKSSvYiCnwx50FYvf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3PLPIvKSSvYiCnwx50FYvf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvTQPcmPpUonmDZFZXNnGWd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvTQPcmPpUonmDZFZXNnGWd.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn6ZnAzhaj2Tj7xk9K6FxBJh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn6ZnAzhaj2Tj7xk9K6FxBJh.png) 在里面添加并写入文件路径加入就好了~ -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnsuoHmhK4dBCLHlKhpRWIe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnsuoHmhK4dBCLHlKhpRWIe.png) 然后打开 Pycharm,创建新项目,设置按照以下方式操作,记得挂梯子。 如果不挂梯子,请按照教程配置清华源。[我是教程](https://blog.csdn.net/jasneik/article/details/114227716) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTfvjYweuIZFKlcH78X38Pd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTfvjYweuIZFKlcH78X38Pd.png) 然后一个新的环境就创建好辣~ diff --git a/3.编程思维体系构建/3.6.3安装python.md b/3.编程思维体系构建/3.6.3安装python.md index ef45cc6..91d14e0 100644 --- a/3.编程思维体系构建/3.6.3安装python.md +++ b/3.编程思维体系构建/3.6.3安装python.md @@ -2,9 +2,13 @@ 教程 -[Python 小白必看,非常生动的 Pycharm 与 Anaconda 安装教学,干货!_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1Bp4y117UW?p=1&share_medium=android&share_plat=android&share_source=COPY&share_tag=s_i×tamp=1623240637&unique_k=vHC5Wg) +[Python 小白必看,非常生动的 Pycharm 与 Anaconda 安装教学,干货!_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1Bp4y117UW) -[Win10 下 Conda-Pycharm-Pytorch 的安装_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV15U4y1J7Ss?from=search&seid=1987861827719523712&spm_id_from=333.337.0.0) + + +[Win10 下 Conda-Pycharm-Pytorch 的安装_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV15U4y1J7Ss) + + # 巧妇难为无米之炊 @@ -32,7 +36,7 @@ 可以输入 `python3 --version` 检验是否成功。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn95LbcwuMC2dIViOxWk8BFb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn95LbcwuMC2dIViOxWk8BFb.png) # Jupyter Notebook @@ -50,6 +54,6 @@ jupyter notebook 进行使用 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfwk8gnFAHu5JzVUiugJjQe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfwk8gnFAHu5JzVUiugJjQe.png) [Pycharm](https://www.jetbrains.com/zh-cn/pycharm/):可能很多同学已经用上了,我在这里不做更多解释 diff --git a/3.编程思维体系构建/3.6.4.2阶段二:递归操作.md b/3.编程思维体系构建/3.6.4.2阶段二:递归操作.md index 532bbd5..8826120 100644 --- a/3.编程思维体系构建/3.6.4.2阶段二:递归操作.md +++ b/3.编程思维体系构建/3.6.4.2阶段二:递归操作.md @@ -2,7 +2,7 @@ 什么是递归呢? -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnCNpeAE9Hy61cyvtxfioIHg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnCNpeAE9Hy61cyvtxfioIHg.png) # diff --git a/3.编程思维体系构建/3.6.4.3阶段三:数据抽象.md b/3.编程思维体系构建/3.6.4.3阶段三:数据抽象.md index cc879ca..4258b78 100644 --- a/3.编程思维体系构建/3.6.4.3阶段三:数据抽象.md +++ b/3.编程思维体系构建/3.6.4.3阶段三:数据抽象.md @@ -184,7 +184,7 @@ P7:9*9 乘法表 可能现在对你来说,构建像下图这样的 99 乘法表已经是非常容易的一件事了,可是如果我要求你使用 python 的列表推导式(list comprehension),在两行以内完成呢? -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnccDSRQj5W3lZWEUkCOHz2b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnccDSRQj5W3lZWEUkCOHz2b.png) P8:couple 情侣 diff --git a/3.编程思维体系构建/3.6.5.1lab00:让我们开始吧.md b/3.编程思维体系构建/3.6.5.1lab00:让我们开始吧.md index a6e032b..f1f21cc 100644 --- a/3.编程思维体系构建/3.6.5.1lab00:让我们开始吧.md +++ b/3.编程思维体系构建/3.6.5.1lab00:让我们开始吧.md @@ -158,7 +158,7 @@ VS Code 的另一个不错的功能是它具有“嵌入式终端”。因此, 首先,打开一个终端窗口。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/L5HvblSuYonJn4x03a4cMLKknrh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/L5HvblSuYonJn4x03a4cMLKknrh.png) #### 主目录 @@ -174,11 +174,11 @@ VS Code 的另一个不错的功能是它具有“嵌入式终端”。因此, PATH 就像一个地址:它告诉您和计算机到某个文件夹的完整路径(或路由)。请记住,您可以通过两种不同的方式访问计算机上的文件和目录(文件夹)。您可以使用终端(这是一个命令行界面或 CLI),也可以使用 Finder Finder 是图形用户界面(或 GUI)的一个 例子导航技术不同,但文件相同。例如,这是我的 CS 61A 实验室文件夹在我的 GUI 中的样子: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/CWDhbW6gzogyMFxtd6kcnPBunv2.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CWDhbW6gzogyMFxtd6kcnPBunv2.png) 这是完全相同的文件夹在终端中的外观: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HZNMbzGZOoQGAhxQ29gcM5V4nNd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HZNMbzGZOoQGAhxQ29gcM5V4nNd.png) 请注意,在这两种情况下,黄色框都显示了 PATH,紫色椭圆显示了“labs”文件夹的内容。 @@ -186,7 +186,7 @@ PATH 就像一个地址:它告诉您和计算机到某个文件夹的完整路 让我们停下来思考一下终端和 Python 解释器之间的区别。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HgTfbMhCGodZbzxBNh9crH3cnCe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HgTfbMhCGodZbzxBNh9crH3cnCe.png) 1. 哪个是终端? 2. 哪个是 Python 解释器? @@ -197,7 +197,7 @@ A 和 D 都是我的终端。在这里您可以运行 bash 命令,例如 `cd` B 是 Python 解释器。你可以从 >>> 提示中看出这意味着你已经启动了一个 Python 解释器。您还可以判断,因为启动它的命令是可见的:`python3`。该 `python3` 命令启动 Python 解释器。如果您在 Python 解释器中键入 bash 命令,您可能会遇到语法错误!这是一个例子: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GEN5b1HHdoDegPxAp8WcQDGknoc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GEN5b1HHdoDegPxAp8WcQDGknoc.png) C 是我的代码编辑器。这是我可以编写 Python 代码以通过我的终端执行的地方。 @@ -287,7 +287,7 @@ mkdir lab 现在,如果您列出目录的内容(使用 `ls`),您将看到两个文件夹,`projects` 和 `lab`. -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Cpfzb9oK2oMyGxxgkqVceE8DnId.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Cpfzb9oK2oMyGxxgkqVceE8DnId.png) ### 更多目录更改 @@ -475,7 +475,7 @@ ______ 实验室还将包括函数编写问题。在你的文本编辑器中打开 `lab00.py`。您可以 `open .` 在 MacOS 或 `start .` Windows 上键入以在 Finder/文件资源管理器中打开当前目录。然后双击或右键单击以在文本编辑器中打开文件。你应该看到这样的东西: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/FkOybDwtnoQeRyxejlwcjhQ2nch.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FkOybDwtnoQeRyxejlwcjhQ2nch.png) 三引号中的行 `"""` 称为文档字符串(Docstring),它描述了函数应该做什么。在 61A 中编写代码时,您应该始终阅读文档字符串! @@ -483,7 +483,7 @@ ______ 在这里,我们圈出了文档字符串和文档测试,以便于查看: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/MF4ZbUZ0qo70gRxeNGocsYvmnwe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MF4ZbUZ0qo70gRxeNGocsYvmnwe.png) 在 `twenty_twenty_two`, diff --git a/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统.md b/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统.md index 60f4533..6665f59 100644 --- a/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统.md +++ b/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统.md @@ -14,13 +14,13 @@ 一路下一步 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcntUYJNAaOwB8L6KSEhJJojh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcntUYJNAaOwB8L6KSEhJJojh.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnQkVQ4uyYCveO6toBujoGOc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnQkVQ4uyYCveO6toBujoGOc.png) 这俩我推荐勾掉 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndgDKfTuio3nF0QboemIPHe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndgDKfTuio3nF0QboemIPHe.png) 安装过后点许可证 输上面的 key 激活 @@ -30,15 +30,15 @@ 下好回到 VMware -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnGHnjgZvtcBrm0XXitFl4Jg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnGHnjgZvtcBrm0XXitFl4Jg.png) 创建新的虚拟机-典型(推荐)-下一步-安装程序 iso 选中你刚下的 iso 下一步 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXilUhHNEyU4r95FxiVgCdg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXilUhHNEyU4r95FxiVgCdg.png) 这里填你一会儿要登录 linux 的个人信息 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnp33Oc3Ia2HzASTZJNOhEWb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnp33Oc3Ia2HzASTZJNOhEWb.png) 这里建议把位置改到其他盘 @@ -46,21 +46,21 @@ 启动后进入 Ubuntu 安装 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5Uk41JyjjdTzXWQqUkexzc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5Uk41JyjjdTzXWQqUkexzc.png) 键盘映射 直接 continue 接下来一路 continue install now -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnLxZnyFN3ohE8zrTwNaCA8e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnLxZnyFN3ohE8zrTwNaCA8e.png) 最后 restart -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnLguvbHihJ3ngqrtyGLI6zf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnLguvbHihJ3ngqrtyGLI6zf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnCX92JHjg8PU3quKs4GziZb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnCX92JHjg8PU3quKs4GziZb.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnL5Jn3g7AdzVzoBb6ZINs1f.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnL5Jn3g7AdzVzoBb6ZINs1f.png) 这个 skip @@ -68,15 +68,15 @@ 点右上角 settings -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn85Yb3JIQ3520KeaSoyPVDd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn85Yb3JIQ3520KeaSoyPVDd.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZLHO1JGWoSqhM9zEEhSMAd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZLHO1JGWoSqhM9zEEhSMAd.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvLxCTKYfogPm9GNaKmusEf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvLxCTKYfogPm9GNaKmusEf.png) 然后按指引 restart 系统 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn30VJILYpO81pq89mAmzjTf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn30VJILYpO81pq89mAmzjTf.png) 会提示你要不要重新命名这些用户下的文件夹 @@ -84,27 +84,27 @@ 如果你的语言还没有变过来的话 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnKzJjY8Dvj13A49bnMAztPg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnKzJjY8Dvj13A49bnMAztPg.png) 点击这个他会安装语言 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndHnAuGC7TXhQgLkpLkHghf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndHnAuGC7TXhQgLkpLkHghf.png) 把汉语拖到英文之上 点应用到整个系统 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnltCL3atXHtC3BUj5VI1Lqf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnltCL3atXHtC3BUj5VI1Lqf.png) 右上角 logout 重新登陆 就是中文辣 最后在设置-电源把息屏改成从不 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnLCJzGoFrUbWIMAPGFkxcb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnLCJzGoFrUbWIMAPGFkxcb.png) 至此 恭喜安装完成! 之后就可以在桌面上右键 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnG6z1VpAYUGMSkSwDBUxEvf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnG6z1VpAYUGMSkSwDBUxEvf.png) 打开命令行 diff --git a/3.编程思维体系构建/3.Y.2WSL的安装.md b/3.编程思维体系构建/3.Y.2WSL的安装.md index 307cf97..3afe3ca 100644 --- a/3.编程思维体系构建/3.Y.2WSL的安装.md +++ b/3.编程思维体系构建/3.Y.2WSL的安装.md @@ -15,10 +15,10 @@ (现在可能是只开 `适用于Linux的windows子系统`) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnYVkEecWdUs710e8h6G9GTh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnYVkEecWdUs710e8h6G9GTh.png) 如果你的 windows 版本为家庭版 那么 hyperv 选项是没有的 你需要右键以管理员权限打开以下脚本来强行开启 hyperv -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnoCF5MilDma33yviwRGdDHe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnoCF5MilDma33yviwRGdDHe.png) diff --git a/3.编程思维体系构建/3.Y.3Linux初探索.md b/3.编程思维体系构建/3.Y.3Linux初探索.md index 4572a61..55e0b8f 100644 --- a/3.编程思维体系构建/3.Y.3Linux初探索.md +++ b/3.编程思维体系构建/3.Y.3Linux初探索.md @@ -133,7 +133,12 @@ int main(void) { } ``` -> 相信你在写完代码之后苦于不知道怎么保存并退出,不用担心,这个是正常的,毕竟上面提到的两个文本编辑器都是以入门时的学习曲线及其陡峭而著称。
对于 vi(m)风格的编辑器,你需要先按 `ESC` 返回 NORMAL 模式(具体处于那个模式可以观察窗口左下角,NORMAL 模式是空白的),再输入 `:wq` 来保存并退出(注意 `:` 是输入的一部分 )(`:q 仅退出` `:q! 不保存退出` )
呃呃 [【保姆级入门】Vim 编辑器](https://www.bilibili.com/video/BV13t4y1t7Wg) +> 相信你在写完代码之后苦于不知道怎么保存并退出,不用担心,这个是正常的,毕竟上面提到的两个文本编辑器都是以入门时的学习曲线及其陡峭而著称。 +> 对于 vi(m)风格的编辑器,你需要先按 `ESC` 返回 NORMAL 模式(具体处于那个模式可以观察窗口左下角,NORMAL 模式是空白的),再输入 `:wq` 来保存并退出(注意 `:` 是输入的一部分 )(`:q 仅退出` `:q! 不保存退出` ) +> +> [【保姆级入门】Vim 编辑器](https://www.bilibili.com/video/BV13t4y1t7Wg) +> +> 保存后就能够看到 `hello.c` 的内容了. 终端中可以用 `cat hello.c` 查看代码的内容. 如果要将它编译, 可以使用 `gcc` 命令: diff --git a/3.编程思维体系构建/3.编程思维体系构建.md b/3.编程思维体系构建/3.编程思维体系构建.md index 2b09343..3fdccb0 100644 --- a/3.编程思维体系构建/3.编程思维体系构建.md +++ b/3.编程思维体系构建/3.编程思维体系构建.md @@ -24,7 +24,7 @@ python内容完成后,基本学习到如何使用python当一门工具使用 如果你要开始,推荐你从3.0开始阅读,然后挑选你喜欢的内容 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnOrKXUsIPJAUXyGB3Txewve.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnOrKXUsIPJAUXyGB3Txewve.png) ## 本章参考内容 diff --git a/3.编程思维体系构建/static/Axiomofchoice_1.png b/3.编程思维体系构建/static/Axiomofchoice_1.png new file mode 100644 index 0000000..5a24e8b Binary files /dev/null and b/3.编程思维体系构建/static/Axiomofchoice_1.png differ diff --git a/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents.md b/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents.md index d046dbb..8e0576c 100644 --- a/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents.md +++ b/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents.md @@ -219,13 +219,13 @@ ICL(In-Context Learning,上下文学习)和 COT(Chain of Thought,思 虽然学界对此没有太大的共识,但其原理无非在于给予 LLMs 更翔实的上下文,让输出与输入有着更紧密的关联与惯性。(从某种意义上来说,也可以将其认为是一种图灵机式的编程) -> ICL:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Xjw5bXgRNolw6OxBiEecfOUTn5b.png) +> ICL:
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Xjw5bXgRNolw6OxBiEecfOUTn5b.png) ICL 为输出增加惯性 > 可以简单认为,通过 ICL Prompt,能强化人类输入到机器输出的连贯性,借以提升输出的确定性。
在经过“回答”的 finetune 之前,大模型的原始能力就是基于给定文本进行接龙,而 ICL 的引入则在“回答”这一前提条件下,降低了机器开始接龙这一步骤中的语义跨度,从而使得输出更加可控。
-COT:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/NT04baWdNoYzRrxjJFfcXCgbnLh.png) +COT:
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/NT04baWdNoYzRrxjJFfcXCgbnLh.png) COT 为输出增加关联 @@ -240,7 +240,7 @@ COT 为输出增加关联 (需要注意的是,TaskMatrix.AI 更大程度上是一个愿景向的调研案例,尚未正式落地生态) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GlM9be7Hvo4EepxQfEOcRvzpnKd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GlM9be7Hvo4EepxQfEOcRvzpnKd.png) TaskMatrix 的生态愿景 @@ -275,7 +275,7 @@ TaskMatrix 的生态愿景 - Usage Example:API 的调用方法样例 - Composition Instruction:API 的使用贴士,如应该与其它什么 API 组合使用,是否需要手动释放等 -> 样例:打开文件 API
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/IFWXbgiy8oOj5axvJd8cJu6pnVb.png) +> 样例:打开文件 API
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/IFWXbgiy8oOj5axvJd8cJu6pnVb.png) 基于此类文档内容和 ICL 的能力,LLMs 能从输入中习得调用 API 的方法,依此快速拓展了其横向能力 @@ -287,11 +287,11 @@ COT for TaskMatrix 在 TaskMatirx 中,通过该模式,让 MCFM 将任务转化为待办大纲,并最终围绕大纲检索并组合 API,完成整体工作 -> 样例:写论文
构建完成工作大纲
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GAeJbok1FoTFLixLQAlcxdAPned.png) +> 样例:写论文
构建完成工作大纲
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GAeJbok1FoTFLixLQAlcxdAPned.png) TaskMatrix 自动围绕目标拆解任务 -> 自动调用插件和组件
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/PUHZbzk7jo5Avuxo1g6cgD9snXg.png) +> 自动调用插件和组件
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PUHZbzk7jo5Avuxo1g6cgD9snXg.png) TaskMatrix 自动为任务创建 API 调用链 @@ -313,7 +313,7 @@ TaskMatrix 自动为任务创建 API 调用链 Decomp 的核心思想为将复杂问题通过 Prompt 技巧,将一个复杂的问题由 LLMs 自主划分为多个子任务。随后,我们通过 LLMs 完成多个任务,并将过程信息最终组合并输出理想的效果 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/X7iLbYOcpoXZy7xuhorc71LSnod.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/X7iLbYOcpoXZy7xuhorc71LSnod.png) 几种 Prompt 方法图示 @@ -321,7 +321,7 @@ Decomp 的核心思想为将复杂问题通过 Prompt 技巧,将一个复杂 而对于 Decomp 过程,则又是由一个原始的 Decomp Prompt 驱动 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/A7OubowqYo11O3xn0KbcRoscnEh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/A7OubowqYo11O3xn0KbcRoscnEh.png) Decomp 方法执行样例 @@ -347,7 +347,7 @@ Decomp 的原始功能实际上并不值得太过关注,但我们急需考虑 通过问题的分解和通过“专用函数”的执行,我们可以轻易让 LLMs 实现自身无法做到的调用 API 工作,例如主动从外部检索获取回答问题所需要的知识。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/N1z8bU7dzoD6x1xKtT3cpm9Pnpe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/N1z8bU7dzoD6x1xKtT3cpm9Pnpe.png) Decomp 方法调用外部接口样例 @@ -359,7 +359,7 @@ Decomp 方法调用外部接口样例 [HuggingGPT](https://arxiv.org/abs/2303.17580) 一文也许并未直接参考 Decomp 方法,而是用一些更规范的手法完成该任务,但其充分流水线化的 Prompt 工程无疑是 Decomp 方法在落地实践上的最佳注脚 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Uct8bXhTgocChExgmiWcQTbSnGb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Uct8bXhTgocChExgmiWcQTbSnGb.png) HuggingGPT @@ -407,7 +407,7 @@ Generative Agents 构建了一套框架,让 NPC 可以感知被模块化的世 - 一方面,其包含场景中既有对象,包括建筑和摆件等的基础层级信息 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/BKZPbpDrIo95amxDZANccwHZnpd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/BKZPbpDrIo95amxDZANccwHZnpd.png) Generative Agents 的场景信息管理 @@ -635,7 +635,7 @@ AutoGPT 主要特性如下: 其提醒我们,就连我们的意识主体性,也只是陈述自我的一个表述器而已。我们是否应当反思对语言能力的过度迷信,从而相信我们能通过训练模型构建 All in One 的智能实体? -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ED4qbjSrMoR2sQxJnGEcCtvjn8d.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ED4qbjSrMoR2sQxJnGEcCtvjn8d.png) 全局工作空间理论 @@ -905,7 +905,7 @@ AutoGPT 的核心记忆设计依赖于预包装的 Prompt 本体,这一包装 Generative Agent 通过自动化评估记忆的价值,并构建遗忘系统、关注系统等用于精准从自己繁杂的记忆中检索对于当前情景有用的信息。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/StjCbHn2BoqTrNxF64ScvrPInCe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/StjCbHn2BoqTrNxF64ScvrPInCe.png) Generative Agents :基于 Reflection 构建记忆金字塔 diff --git a/4.人工智能/4.12本章节内容的局限性.md b/4.人工智能/4.12本章节内容的局限性.md index 10adacf..ada5f72 100644 --- a/4.人工智能/4.12本章节内容的局限性.md +++ b/4.人工智能/4.12本章节内容的局限性.md @@ -60,4 +60,4 @@ ZZM 曾经尝试过投入大量时间去钻研数学以及机器学习相关的 联系 ZZM,我努力改 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfYSoVgoERduiWP0jWNWMxf.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfYSoVgoERduiWP0jWNWMxf.jpg) diff --git a/4.人工智能/4.1前言.md b/4.人工智能/4.1前言.md index c28f3c0..fc05421 100644 --- a/4.人工智能/4.1前言.md +++ b/4.人工智能/4.1前言.md @@ -13,7 +13,7 @@ 计算机视觉旨在用计算机模拟人类处理图片信息的能力,就比如这里有一张图片——手写数字 9 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvQiaAx6WgPx64s8fBklVwh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvQiaAx6WgPx64s8fBklVwh.png) 对我们人类而言,能够很轻松地知道这张图片中包含的信息(数字 9),而对计算机来说这只是一堆像素。计算机视觉的任务就是让计算机能够从这堆像素中得到‘数字 9’这个信息。 @@ -21,15 +21,15 @@ 图像分割是在图片中对物体分类,并且把它们所对应的位置标示出来。下图就是把人的五官,面部皮肤和头发分割出来,效(小)果(丑)图如下: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxn5GlJZmsrMV5qKNwMlDPc.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxn5GlJZmsrMV5qKNwMlDPc.jpg) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnokdWGegr2XCi1vfg0ZZiWg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnokdWGegr2XCi1vfg0ZZiWg.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2o9ilOZg6jI6ssTYWhoeme.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2o9ilOZg6jI6ssTYWhoeme.png) 图像生成相信大家一定不陌生,NovalAI 在 2022 年火的一塌糊涂,我觉得不需要我过多赘述,对它(Diffusion model)的改进工作也是层出不穷,这里就放一张由可控姿势网络(ControlNet)生成的图片吧: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnUjnRociXua1yKj6dmU1A3c.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnUjnRociXua1yKj6dmU1A3c.png) 三维重建也是很多研究者关注的方向,指的是传入对同一物体不同视角的照片,来生成 3D 建模的任务。这方面比图像处理更加前沿并且难度更大。具体见[4.6.5.4神经辐射场(NeRF)](4.6.5.4%E7%A5%9E%E7%BB%8F%E8%BE%90%E5%B0%84%E5%9C%BA(NeRF).md) 章节。 @@ -39,9 +39,9 @@ 这就更好理解了,让计算机能够像人类一样,理解文本中的“真正含义”。在计算机眼中,文本就是单纯的字符串,NLP 的工作就是把字符转换为计算机可理解的数据。举个例子,ChatGPT(或者 New Bing)都是 NLP 的成果。在过去,NLP 领域被细分为了多个小任务,比如文本情感分析、关键段落提取等。而 ChatGPT 的出现可以说是集几乎所有小任务于大成,接下来 NLP 方向的工作会向 ChatGPT 的方向靠近。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnyh6pakAkcxCKq6pLylSdef.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnyh6pakAkcxCKq6pLylSdef.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnwWnoEDulgWdqGkY0WeYogc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnwWnoEDulgWdqGkY0WeYogc.png) ## 多模态(跨越模态的处理) @@ -53,7 +53,7 @@ 具体的任务比如说图片问答,传入一张图片,问 AI 这张图片里面有几只猫猫,它们是什么颜色,它告诉我有一只猫猫,是橙色的: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnrMvM1THshjXXOuh8WXi2zr.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnrMvM1THshjXXOuh8WXi2zr.jpg) ## 对比学习 @@ -84,3 +84,8 @@ # And more? 我们对AI的定义如果仅仅只有这些内容,我认为还是太过于狭隘了,我们可以把知识规划,知识表征等等东西都可以将他划入AI的定义中去,当然这些还期待着你的进一步探索和思考~ + + +# 特别致谢 + +非常荣幸能在本章中得到 IIPL智能信息处理实验室 http://iipl.net.cn 的宝贵贡献,衷心感谢他们的无私支持与帮助! diff --git a/4.人工智能/4.2机器学习(AI)快速入门(quick start).md b/4.人工智能/4.2机器学习(AI)快速入门(quick start).md index 1a125bc..77eb764 100644 --- a/4.人工智能/4.2机器学习(AI)快速入门(quick start).md +++ b/4.人工智能/4.2机器学习(AI)快速入门(quick start).md @@ -26,7 +26,7 @@ 甚至深度学习,也只是机器学习的一部分,不过使用了更多技巧和方法,增大了计算能力罢了。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbtaUStj8coQiNTmZzfWqNl.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbtaUStj8coQiNTmZzfWqNl.png) # 两种机器学习算法 @@ -42,11 +42,11 @@ 近三个月来,每当你的城市里有人卖了房子,你都记录了下面的细节——卧室数量、房屋大小、地段等等。但最重要的是,你写下了最终的成交价: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnL1MNHqAyDjcxIzjFTOdYtt.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnL1MNHqAyDjcxIzjFTOdYtt.png) 然后你让新人根据着你的成交价来估计新的数量 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnwcDWIDvLnuvZ1uOb75QKPh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnwcDWIDvLnuvZ1uOb75QKPh.png) 这就是监督学习,你有一个参照物可以帮你决策。 @@ -66,7 +66,7 @@ 这其实就是一种经典的聚类算法 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnSn17EC3YvEnA6GScKNAF3e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnSn17EC3YvEnA6GScKNAF3e.png) 可以把特征不一样的数据分开,有非常多的操作,你感兴趣可以选择性的去了解一下。 @@ -139,7 +139,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): 第二步把每个数值都带入进行运算。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniDICYiLh7ddcxEVrHxFODe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniDICYiLh7ddcxEVrHxFODe.png) 比如说,如果第一套房产实际成交价为 25 万美元,你的函数估价为 17.8 万美元,这一套房产你就差了 7.2 万。 @@ -168,13 +168,13 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): 为了避免这种情况,数学家们找到了很多种[聪明的办法](https://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/Gradient_descent)来快速找到优秀的权重值。下面是一种: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXkjzipUjgJpFYXaEhbEN8e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXkjzipUjgJpFYXaEhbEN8e.png) 这就是被称为 loss 函数的东西。 这是个专业属于,你可以选择性忽略他,我们将它改写一下 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXbd7bqnqPwF8f1Up8rHq5e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXbd7bqnqPwF8f1Up8rHq5e.png) θ 表示当前的权重值。 J(θ) 表示「当前权重的代价」。 @@ -182,7 +182,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): 如果我们为这个等式中所有卧室数和面积的可能权重值作图的话,我们会得到类似下图的图表: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniBPPpszGhbOWGpvto38Alf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniBPPpszGhbOWGpvto38Alf.png) 因此,我们需要做的只是调整我们的权重,使得我们在图上朝着最低点「走下坡路」。如果我们不断微调权重,一直向最低点移动,那么我们最终不用尝试太多权重就可以到达那里。 @@ -194,7 +194,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): 当你使用一个机器学习算法库来解决实际问题时,这些都已经为你准备好了。但清楚背后的原理依然是有用的。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2xlALHL53uUMXSHjloWiOe.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2xlALHL53uUMXSHjloWiOe.jpg) 枚举法 @@ -225,7 +225,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): 我们换一个好看的形式给他展示 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhbR6lGSXd6UAEpRvSIYSHg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhbR6lGSXd6UAEpRvSIYSHg.png) 箭头头表示了函数中的权重。 @@ -233,17 +233,17 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): 所以为了更加的智能化,我们可以利用不同的权重来多次运行这个算法,收集各种不同情况下的估价。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnpDPWKnB6x4fQmGpyvLQJLf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnpDPWKnB6x4fQmGpyvLQJLf.png) 然后我们把四种整合到一起,就得到一个超级答案 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnplbH8Ot0U6cuLHStDmXyze.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnplbH8Ot0U6cuLHStDmXyze.png) 这样我们相当于得到了更为准确的答案 # 神经网络是什么 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhLjMMdts91f8gcpgSVE8Ed.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhLjMMdts91f8gcpgSVE8Ed.png) 我们把四个超级网络的结合图整体画出来,其实这就是个超级简单的神经网络,虽然我们省略了很多的内容,但是他仍然有了一定的拟合能力 @@ -318,17 +318,17 @@ print('y_pred=',y_test.data) 我们试着只识别一个数字 8 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnOvoCMEuaMIpKZkfoFLDitf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnOvoCMEuaMIpKZkfoFLDitf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZQnrltieoJ93DT79pyX45e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZQnrltieoJ93DT79pyX45e.png) 我们把一幅 18×18 像素的图片当成一串含有 324 个数字的数组,就可以把它输入到我们的神经网络里面了: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZ6bzfOUDQgPAJrKI7Pp3Yc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZ6bzfOUDQgPAJrKI7Pp3Yc.png) 为了更好地操控我们的输入数据,我们把神经网络的输入节点扩大到 324 个: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnha4DXsSfAUIYbCQqAx6QKd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnha4DXsSfAUIYbCQqAx6QKd.png) 请注意,我们的神经网络现在有了两个输出(而不仅仅是一个房子的价格)。第一个输出会预测图片是「8」的概率,而第二个则输出不是「8」的概率。概括地说,我们就可以依靠多种不同的输出,利用神经网络把要识别的物品进行分组。 @@ -349,7 +349,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 当数字并不是正好在图片中央的时候,我们的识别器就完全不工作了。一点点的位移我们的识别器就掀桌子不干了 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnShOBEoOhsJLR6L5xyr7INb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnShOBEoOhsJLR6L5xyr7INb.png) 这是因为我们的网络只学习到了正中央的「8」。它并不知道那些偏离中心的「8」长什么样子。它仅仅知道中间是「8」的图片规律。 @@ -365,9 +365,9 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 当然,你同时也需要更强的拟合能力和更深的网络。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnLwoxR6OC3ZBxqtMcKg4v6b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnLwoxR6OC3ZBxqtMcKg4v6b.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnIcHcRF34F6jJgTRvhyAevc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnIcHcRF34F6jJgTRvhyAevc.png) 一层一层堆叠起来,这种方法很早就出现了。 @@ -377,7 +377,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 作为人类,你能够直观地感知到图片中存在某种层级(hierarchy)或者是概念结构(conceptual structure)。比如说,你在看 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndjXp5ayczwemklMk9ZA3ig.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndjXp5ayczwemklMk9ZA3ig.jpg) 你会快速的辨认出一匹马,一个人。 @@ -387,7 +387,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 有人对此做过研究,人的眼睛可能会逐步判断一个物体的信息,比如说你看到一张图片,你会先看颜色,然后看纹理然后再看整体,那么我们需要一种操作来模拟这个过程,我们管这种操作叫卷积操作。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnsm0cJGKqt0AU8Kv3K3rkKg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnsm0cJGKqt0AU8Kv3K3rkKg.png) ## 卷积是如何工作的 @@ -395,13 +395,13 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 当然也有最新研究说卷积不具备平移不变性,但是我这里使用这个概念是为了大伙更好的理解,举个例子:你将 8 无论放在左上角还是左下角都改变不了他是 8 的事实 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHo4tt4wmnC7sUykRPPLKmm.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHo4tt4wmnC7sUykRPPLKmm.png) 我们将一张图像分成这么多个小块,然后输入神经网络中的是一个小块。每次判断一张小图块。 然而,有一个非常重要的不同:对于每个小图块,我们会使用同样的神经网络权重。换一句话来说,我们平等对待每一个小图块。如果哪个小图块有任何异常出现,我们就认为这个图块是「异常」 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnCxlvaanbzweMmeCOsp1xKf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnCxlvaanbzweMmeCOsp1xKf.png) 换一句话来说,我们从一整张图片开始,最后得到一个稍小一点的数组,里面存储着我们图片中的哪一部分有异常。 @@ -413,7 +413,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 让我们先来看每个 2×2 的方阵数组,并且留下最大的数: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnquKepO4wJ74KfNIy3LtqVg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnquKepO4wJ74KfNIy3LtqVg.png) 每一波我们只保留一个数,这样就大大减少了图片的计算量了。 @@ -435,7 +435,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 你猜怎么着?数组就是一串数字而已,所以我们我们可以把这个数组输入到另外一个神经网络里面去。最后的这个神经网络会决定这个图片是否匹配。为了区分它和卷积的不同,我们把它称作「全连接」网络 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnDqrUZwXHzgmLR6yvbYSgsV.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnDqrUZwXHzgmLR6yvbYSgsV.png) 我们的图片处理管道是一系列的步骤:卷积、最大池化,还有最后的「全连接」网络。 diff --git a/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md b/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md index ad70497..d3c0838 100644 --- a/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md +++ b/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md @@ -4,6 +4,10 @@ 完成习题 ::: +::: tip 📥 +本节附件下载 +::: + /4.人工智能/code/MAZE.zip # Node @@ -172,7 +176,7 @@ class Maze: 5. 两种算法总是能找到相同长度的路径 2. 下面的问题将问你关于下面迷宫的问题。灰色单元格表示墙壁。在这个迷宫上运行了一个搜索算法,找到了从 A 点到 B 点的黄色突出显示的路径。在这样做的过程中,红色突出显示的细胞是探索的状态,但并没有达到目标。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/MKtXbfJW3ocWT3xSMK0cwVc4nWf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MKtXbfJW3ocWT3xSMK0cwVc4nWf.png) 在讲座中讨论的四种搜索算法中——深度优先搜索、广度优先搜索、曼哈顿距离启发式贪婪最佳优先搜索和曼哈顿距离启发式$A^*$ @@ -192,7 +196,7 @@ class Maze: 4. 深度限制的极小极大值永远不会比没有深度限制的极大极小值更可取 4. 下面的问题将询问您关于下面的 Minimax 树,其中绿色向上箭头表示 MAX 玩家,红色向下箭头表示 MIN 玩家。每个叶节点都标有其值。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UVssbyMxCoEQSuxvjh3caWAFnOb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/UVssbyMxCoEQSuxvjh3caWAFnOb.png) 根节点的值是多少? diff --git a/4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋.md b/4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋.md index 97ce88f..422ad9a 100644 --- a/4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋.md +++ b/4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋.md @@ -4,6 +4,10 @@ 如果你卡住了,请记得回来阅读文档,或请求身边人的帮助。 +::: tip 📥 +本节附件下载 +::: + `pip3 install -r requirements.txt` # 理解 diff --git a/4.人工智能/4.3.1搜索.md b/4.人工智能/4.3.1搜索.md index 0fd712b..de60c51 100644 --- a/4.人工智能/4.3.1搜索.md +++ b/4.人工智能/4.3.1搜索.md @@ -18,13 +18,13 @@ 导航是使用搜索算法的一个典型的搜索,它接收您的当前位置和目的地作为输入,并根据搜索算法返回建议的路径。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Hesobke0ZocH48xGFyocf9Cxntd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Hesobke0ZocH48xGFyocf9Cxntd.png) 在计算机科学中,还有许多其他形式的搜索问题,比如谜题或迷宫。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/SYw4bOzqAo65PQxZQLucbZAxnHd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/SYw4bOzqAo65PQxZQLucbZAxnHd.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LPgEbVQg2oZBSexmGWwcwfbdnVd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LPgEbVQg2oZBSexmGWwcwfbdnVd.png) # 举个例子 @@ -42,14 +42,14 @@ - 搜索算法开始的状态。在导航应用程序中,这将是当前位置。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HCxXbwKFyof6DFx6FZ8c5EHknBh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HCxXbwKFyof6DFx6FZ8c5EHknBh.png) - 动作(Action) - 一个状态可以做出的选择。更确切地说,动作可以定义为一个函数。当接收到状态$s$作为输入时,$Actions(s)$将返回可在状态$s$ 中执行的一组操作作为输出。 - 例如,在一个数字华容道中,给定状态的操作是您可以在当前配置中滑动方块的方式。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/MpgrbCjtDo1NlLxVyL1cMH6FnAg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MpgrbCjtDo1NlLxVyL1cMH6FnAg.png) - 过渡模型(Transition Model) @@ -58,14 +58,14 @@ - 在接收到状态$s$和动作$a$作为输入时,$Results(s,a)$返回在状态$s$中执行动作$a$ 所产生的状态。 - 例如,给定数字华容道的特定配置(状态$s$),在任何方向上移动正方形(动作$a$)将导致谜题的新配置(新状态)。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/RKV2buJoroCV6SxiMUuct3dbnPU.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/RKV2buJoroCV6SxiMUuct3dbnPU.png) - 状态空间(State Space) - 通过一系列的操作目标从初始状态可达到的所有状态的集合。 - 例如,在一个数字华容道谜题中,状态空间由所有$\frac{16!}{2}$种配置,可以从任何初始状态达到。状态空间可以可视化为有向图,其中状态表示为节点,动作表示为节点之间的箭头。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/JdCqb2UI9ooWmdxk258cTIIznab.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/JdCqb2UI9ooWmdxk258cTIIznab.png) - 目标测试(Goal Test) @@ -112,9 +112,9 @@ - 展开节点(找到可以从该节点到达的所有新节点),并将生成的节点添加到边域。 - 将当前节点添加到探索集。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/K53FbGmswoM7JAxqJZxcQEjdnES.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/K53FbGmswoM7JAxqJZxcQEjdnES.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/THhpbemEHoxl80xHeTjc9d35nVh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/THhpbemEHoxl80xHeTjc9d35nVh.png) 边域从节点 A 初始化开始 @@ -122,9 +122,9 @@ a. 取出边域中的节点 A,展开节点 A,将节点 B 添加到边域。 b. 取出节点 B,展开,添加...... c. 到达目标节点,停止,返回解决方案 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/XmnObIGaUoF4ssxkgzUc4vTUnmf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/XmnObIGaUoF4ssxkgzUc4vTUnmf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Wsntb9rLwogdAKxpJgLchrI8nae.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Wsntb9rLwogdAKxpJgLchrI8nae.png) 会出现什么问题?节点 A-> 节点 B-> 节点 A->......-> 节点 A。我们需要一个探索集,记录已搜索的节点! @@ -143,13 +143,13 @@ c. 到达目标节点,停止,返回解决方案 - 所找到的解决方案可能不是最优的。 - 在最坏的情况下,该算法将在找到解决方案之前探索每一条可能的路径,从而在到达解决方案之前花费尽可能长的时间。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/SGVWbCcTlobQwJxSjKvcNyJAnEG.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/SGVWbCcTlobQwJxSjKvcNyJAnEG.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Vv9Sb26QfoMrkqx5apycIYPJnlf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Vv9Sb26QfoMrkqx5apycIYPJnlf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Gjd5bpdpcoIxGtxcUJ0c2OVfnOf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Gjd5bpdpcoIxGtxcUJ0c2OVfnOf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/M2vZbA5hpoT9RExuAGwcBHF1nmh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/M2vZbA5hpoT9RExuAGwcBHF1nmh.png) - 代码实现 @@ -175,13 +175,13 @@ def remove(self): - 几乎可以保证该算法的运行时间会比最短时间更长。 - 在最坏的情况下,这种算法需要尽可能长的时间才能运行。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/S6SRbMUrcoYQCYxZGgJczkdcnBP.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/S6SRbMUrcoYQCYxZGgJczkdcnBP.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Xg7Qbv59IoQB3bxPFO1ceXgRnkf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Xg7Qbv59IoQB3bxPFO1ceXgRnkf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/X34Rb5R7AonUg3xYs7DcQzSfndg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/X34Rb5R7AonUg3xYs7DcQzSfndg.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/PQeZbJv3Bom6NYxa6lccT084nFn.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PQeZbJv3Bom6NYxa6lccT084nFn.png) - 代码实现 @@ -202,13 +202,13 @@ def remove(self): - 贪婪最佳优先搜索扩展最接近目标的节点,如启发式函数$h(n)$所确定的。顾名思义,该函数估计下一个节点离目标有多近,但可能会出错。贪婪最佳优先算法的效率取决于启发式函数的好坏。例如,在迷宫中,算法可以使用启发式函数,该函数依赖于可能节点和迷宫末端之间的曼哈顿距离。曼哈顿距离忽略了墙壁,并计算了从一个位置到目标位置需要向上、向下或向两侧走多少步。这是一个简单的估计,可以基于当前位置和目标位置的$(x,y)$坐标导出。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Pe3WbBuTjomWjfxd5Ryc3OPPnSd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Pe3WbBuTjomWjfxd5Ryc3OPPnSd.png) - 然而,重要的是要强调,与任何启发式算法一样,它可能会出错,并导致算法走上比其他情况下更慢的道路。不知情的搜索算法有可能更快地提供一个更好的解决方案,但它比知情算法更不可能这样。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HkvdbcEdmo6RtjxOqqic31XFnSh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HkvdbcEdmo6RtjxOqqic31XFnSh.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/SU2DbQeN2oxs5ex3K3NcMaJfnch.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/SU2DbQeN2oxs5ex3K3NcMaJfnch.png) - $A^*$搜索 @@ -220,9 +220,9 @@ def remove(self): - 一致性,这意味着从新节点到目标的估计路径成本加上从先前节点转换到该新节点的成本应该大于或等于先前节点到目标的估计路径成本。用方程的形式表示,$h(n)$是一致的,如果对于每个节点n$和后续节点n'$,从n$到$n'$的步长为c$,满足$h(n)≤h(n')+c$。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/BbIiba1pwo3uI7x4k7QcwicznGc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/BbIiba1pwo3uI7x4k7QcwicznGc.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HhG9bcJP2okKMMxY0FGclP0AnXY.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HhG9bcJP2okKMMxY0FGclP0AnXY.png) # 对抗性搜索 @@ -232,41 +232,41 @@ def remove(self): - 作为对抗性搜索中的一种算法,Minimax 将获胜条件表示为$(-1)$表示为一方,$(+1)$表示为另一方。进一步的行动将受到这些条件的驱动,最小化的一方试图获得最低分数,而最大化的一方则试图获得最高分数。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/FYu3bQwCZofBgsxKDJiciTR7nzc.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FYu3bQwCZofBgsxKDJiciTR7nzc.png) - 井字棋 AI 为例 - $s_0$: 初始状态(在我们的情况下,是一个空的3X3棋盘) - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/WstnbmHwYoQauRxUQOCclz8Jngb.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/WstnbmHwYoQauRxUQOCclz8Jngb.png) - $Players(s)$: 一个函数,在给定状态$$s$$的情况下,返回轮到哪个玩家(X或O)。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/DKzTbJSZMoc1UkxT9KOcIHqvnob.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/DKzTbJSZMoc1UkxT9KOcIHqvnob.png) - $Actions(s)$: 一个函数,在给定状态$$s$$的情况下,返回该状态下的所有合法动作(棋盘上哪些位置是空的)。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LuEzbLOaqox7yox5lXzcouWYnKc.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LuEzbLOaqox7yox5lXzcouWYnKc.png) - $Result(s, a)$: 一个函数,在给定状态$$s$$和操作$$a$$的情况下,返回一个新状态。这是在状态$$s$$上执行动作$$a$$(在游戏中移动)所产生的棋盘。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/AdOVbwCGhoVcWVx21TMcdhbDnIg.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/AdOVbwCGhoVcWVx21TMcdhbDnIg.png) - $Terminal(s)$: 一个函数,在给定状态$$s$$的情况下,检查这是否是游戏的最后一步,即是否有人赢了或打成平手。如果游戏已结束,则返回True,否则返回False。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EOfJbvoUMogVT8xsrTxcl5ugnrk.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EOfJbvoUMogVT8xsrTxcl5ugnrk.png) - $Utility(s)$: 一个函数,在给定终端状态s的情况下,返回状态的效用值:$$-1、0或1$$。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UcpAbpWtJoHb5Wx6ycrcG2ZZnIe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/UcpAbpWtJoHb5Wx6ycrcG2ZZnIe.png) - 算法的工作原理: - 该算法递归地模拟从当前状态开始直到达到终端状态为止可能发生的所有游戏状态。每个终端状态的值为$(-1)$、$0$或$(+1)$。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/DN3mb0lbno2AHvx2M0JcrTvtnYf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/DN3mb0lbno2AHvx2M0JcrTvtnYf.png) - 根据轮到谁的状态,算法可以知道当前玩家在最佳游戏时是否会选择导致状态值更低或更高的动作。 @@ -278,7 +278,7 @@ def remove(self): 在得到这些值之后,最大化的玩家会选择最高的一个。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EjB9bzgZNohQtkxXwXgcVrKwnth.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EjB9bzgZNohQtkxXwXgcVrKwnth.png) - 具体算法: @@ -310,7 +310,7 @@ def remove(self): - 这一点最容易用一个例子来说明:最大化的玩家知道,在下一步,最小化的玩家将试图获得最低分数。假设最大化玩家有三个可能的动作,第一个动作的值为4。然后玩家开始为下一个动作生成值。要做到这一点,如果当前玩家做出这个动作,玩家会生成最小化者动作的值,并且知道最小化者会选择最低的一个。然而,在完成最小化器所有可能动作的计算之前,玩家会看到其中一个选项的值为3。这意味着没有理由继续探索最小化玩家的其他可能行动。尚未赋值的动作的值无关紧要,无论是10还是(-10)。如果该值为10,则最小化器将选择最低选项3,该选项已经比预先设定的4差。如果尚未估价的行动结果是(-10),那么最小化者将选择(-10)这一选项,这对最大化者来说更加不利。因此,在这一点上为最小化者计算额外的可能动作与最大化者无关,因为最大化玩家已经有了一个明确的更好的选择,其值为4。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LDZab4TeMoByvDxF1Onc8WQenpb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LDZab4TeMoByvDxF1Onc8WQenpb.png) - 深度限制的极大极小算法(Depth-Limited Minimax) diff --git a/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测.md b/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测.md index 7a4513b..db1d8ef 100644 --- a/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测.md +++ b/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测.md @@ -4,6 +4,10 @@ 完成习题 ::: + +::: tip 📥 +本节附件下载 +::: # Sentence——父类 ```python @@ -311,15 +315,15 @@ check_knowledge(knowledge) 在这个游戏中,玩家一按照一定的顺序排列颜色,然后玩家二必须猜测这个顺序。每一轮,玩家二进行猜测,玩家一返回一个数字,指示玩家二正确选择了多少颜色。让我们用四种颜色模拟一个游戏。假设玩家二猜测以下顺序: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/FZCJbOzr9o4oQPx7SNGcFxTSnRd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FZCJbOzr9o4oQPx7SNGcFxTSnRd.png) 玩家一回答“二”。因此,我们知道其中一些两种颜色位于正确的位置,而另两种颜色则位于错误的位置。根据这些信息,玩家二试图切换两种颜色的位置。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Y80wbn96sol7PUxO5fKcOA9Hnbg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Y80wbn96sol7PUxO5fKcOA9Hnbg.png) 现在玩家一回答“零”。因此,玩家二知道切换后的颜色最初位于正确的位置,这意味着未被切换的两种颜色位于错误的位置。玩家二切换它们。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EuXObldHcoaO74xIzZocQQKTn4k.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EuXObldHcoaO74xIzZocQQKTn4k.png) 在命题逻辑中表示这一点需要我们有(颜色的数量)$^2$个原子命题。所以,在四种颜色的情况下,我们会有命题 red0,red1,red2,red3,blue0…代表颜色和位置。下一步是用命题逻辑表示游戏规则(每个位置只有一种颜色,没有颜色重复),并将它们添加到知识库中。最后一步是将我们所拥有的所有线索添加到知识库中。在我们的案例中,我们会补充说,在第一次猜测中,两个位置是错误的,两个是正确的,而在第二次猜测中没有一个是对的。利用这些知识,模型检查算法可以为我们提供难题的解决方案。 diff --git a/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题.md b/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题.md index 7951b78..7b0c716 100644 --- a/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题.md +++ b/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题.md @@ -4,6 +4,10 @@ 如果你卡住了,请记得回来阅读文档,或请求身边人的帮助。 +::: tip 📥 +本节附件下载 +::: + `pip3 install -r requirements.txt` # 骑士与流氓问题 @@ -71,7 +75,7 @@ C 说:“A 是骑士。” 写一个 AI 来玩扫雷游戏。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/CQmGb6QTjoeyVCx9vjncYF2QnQe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CQmGb6QTjoeyVCx9vjncYF2QnQe.png) ## 背景 @@ -80,7 +84,7 @@ C 说:“A 是骑士。” - 扫雷器是一款益智游戏,由一个单元格网格组成,其中一些单元格包含隐藏的“地雷”。点击包含地雷的单元格会引爆地雷,导致用户输掉游戏。单击“安全”单元格(即不包含地雷的单元格)会显示一个数字,指示有多少相邻单元格包含地雷,其中相邻单元格是指从给定单元格向左、向右、向上、向下或对角线一个正方形的单元格。 - 例如,在这个 3x3 扫雷游戏中,三个 1 值表示这些单元格中的每个单元格都有一个相邻的单元格,该单元格是地雷。四个 0 值表示这些单元中的每一个都没有相邻的地雷。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/BcfWbqCNKoXpTHxPQVqczsvcnBd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/BcfWbqCNKoXpTHxPQVqczsvcnBd.png) - 给定这些信息,玩家根据逻辑可以得出结论,右下角单元格中一定有地雷,左上角单元格中没有地雷,因为只有在这种情况下,其他单元格上的数字标签才会准确。 - 游戏的目标是标记(即识别)每个地雷。在游戏的许多实现中,包括本项目中的实现中,玩家可以通过右键单击单元格(或左键双击,具体取决于计算机)来标记地雷。 @@ -90,7 +94,7 @@ C 说:“A 是骑士。” - 你在这个项目中的目标是建立一个可以玩扫雷游戏的人工智能。回想一下,基于知识的智能主体通过考虑他们的知识库来做出决策,并根据这些知识做出推断。 - 我们可以表示人工智能关于扫雷游戏的知识的一种方法是,使每个单元格成为命题变量,如果单元格包含地雷,则为真,否则为假。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/IROdbJ4zAooiWNxitU9cRovbnne.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/IROdbJ4zAooiWNxitU9cRovbnne.png) - 我们现在掌握了什么信息?我们现在知道八个相邻的单元格中有一个是地雷。因此,我们可以写一个逻辑表达式,如下所示,表示其中一个相邻的单元格是地雷。 - `Or(A,B,C,D,E,F,G,H)` @@ -124,12 +128,12 @@ Or( - 这种表示法中的每个逻辑命题都有两个部分:一个是网格中与提示数字有关的一组单元格 `cell`,另一个是数字计数 `count`,表示这些单元格中有多少是地雷。上面的逻辑命题说,在单元格 A、B、C、D、E、F、G 和 H 中,正好有 1 个是地雷。 - 为什么这是一个有用的表示?在某种程度上,它很适合某些类型的推理。考虑下面的游戏。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UiHObqm4noSOKlxcEtScuwPlnLd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/UiHObqm4noSOKlxcEtScuwPlnLd.png) - 利用左下数的知识,我们可以构造命题 `{D,E,G}=0`,意思是在 D、E 和 G 单元中,正好有 0 个是地雷。凭直觉,我们可以从这句话中推断出所有的单元格都必须是安全的。通过推理,每当我们有一个 `count` 为 0 的命题时,我们就知道该命题的所有 `cell` 都必须是安全的。 - 同样,考虑下面的游戏。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/VSbubz9JYo7H8XxgSbCcmMQHniK.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/VSbubz9JYo7H8XxgSbCcmMQHniK.png) - 我们的人工智能会构建命题 `{E,F,H}=3`。凭直觉,我们可以推断出所有的 E、F 和 H 都是地雷。更一般地说,任何时候 `cell` 的数量等于 `count`,我们都知道这个命题的所有单元格都必须是地雷。 - 一般来说,我们只希望我们的命题是关于那些还不知道是安全的还是地雷的 `cell`。这意味着,一旦我们知道一个单元格是否是地雷,我们就可以更新我们的知识库来简化它们,并可能得出新的结论。 @@ -137,7 +141,7 @@ Or( - 同样,如果我们的人工智能知道命题 `{A,B,C}=2`,并且我们被告知 C 是一颗地雷,我们可以从命题中删除 C,并减少计数的值(因为 C 是导致该计数的地雷),从而得到命题 `{A、B}=1`。这是合乎逻辑的:如果 A、B 和 C 中有两个是地雷,并且我们知道 C 是地雷,那么 A 和 B 中一定有一个是地雷。 - 如果我们更聪明,我们可以做最后一种推理。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GsxxbeoPzoOZn4xSUaecVzKNnBc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GsxxbeoPzoOZn4xSUaecVzKNnBc.png) - 考虑一下我们的人工智能根据中间顶部单元格和中间底部单元格会知道的两个命题。从中上角的单元格中,我们得到 `{A,B,C}=1`。从底部中间单元格中,我们得到 `{A,B,C,D,E}=2`。从逻辑上讲,我们可以推断出一个新的知识,即 `{D,E}=1`。毕竟,如果 A、B、C、D 和 E 中有两个是地雷,而 A、B 和 C 中只有一个是地雷的话,那么 D 和 E 必须是另一个地雷。 - 更一般地说,任何时候我们有两个命题满足 `set1=count1` 和 `set2=count2`,其中 `set1` 是 `set2` 的子集,那么我们可以构造新的命题 `set2-set1=count2-count1`。考虑上面的例子,以确保你理解为什么这是真的。 diff --git a/4.人工智能/4.3.2知识推理.md b/4.人工智能/4.3.2知识推理.md index 7738ade..93b3329 100644 --- a/4.人工智能/4.3.2知识推理.md +++ b/4.人工智能/4.3.2知识推理.md @@ -112,7 +112,7 @@ - $KB$: 如果今天是星期四并且不下雨,那我将出门跑步;今天是星期四;今天不下雨。$(P\land\lnot Q)\to R,P,\lnot Q$ - 查询结论(query): $R$ - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/E8YrbXnGtoNHEJxmAttcX4p0nlg.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/E8YrbXnGtoNHEJxmAttcX4p0nlg.png) - 接下来,让我们看看如何将知识和逻辑表示为代码。 @@ -175,31 +175,31 @@ def check_all(knowledge, query, symbols, model):# 如果模型对每个符号都 - 模型检查不是一种有效的算法,因为它必须在给出答案之前考虑每个可能的模型(提醒:如果在$KB$为真的所有模型(真值分配)下,查询结论$R$为真,则$R$ 也为真)。 推理规则允许我们根据现有知识生成新信息,而无需考虑所有可能的模型。 - 推理规则通常使用将顶部部分(前提)与底部部分(结论)分开的水平条表示。 前提是我们有什么知识,结论是根据这个前提可以产生什么知识。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/FjYOb3Qr5ofHdOx7REacdcyqn0c.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FjYOb3Qr5ofHdOx7REacdcyqn0c.png) - 肯定前件(Modus Ponens) - 如果我们知道一个蕴涵及其前件为真,那么后件也为真。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HaqObF0xAoX6O8xDX7KctF0jnpf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HaqObF0xAoX6O8xDX7KctF0jnpf.png) - 合取消除(And Elimination) - 如果 And 命题为真,则其中的任何一个原子命题也为真。 例如,如果我们知道哈利与罗恩和赫敏是朋友,我们就可以得出结论,哈利与赫敏是朋友。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/TI5Mb781YocwpqxRsyRcPS8WnAg.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/TI5Mb781YocwpqxRsyRcPS8WnAg.png) - 双重否定消除(Double Negation Elimination) - 被两次否定的命题为真。 例如,考虑命题“哈利没有通过考试是不正确的”。 这两个否定相互抵消,将命题“哈利通过考试”标记为真。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/NuabbQqZjoBkNixz45AcDZ8Bnrg.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/NuabbQqZjoBkNixz45AcDZ8Bnrg.png) - 蕴含消除(Implication Elimination) - 蕴涵等价于被否定的前件和后件之间的 Or 关系。 例如,命题“如果正在下雨,哈利在室内”等同于命题“(没有下雨)或(哈利在室内)”。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/S31Ub9xcUo9yArxntWscU47pnwh.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/S31Ub9xcUo9yArxntWscU47pnwh.png) | $P$ | $Q$ | $P\to Q$ | $\lnot P\lor Q$ | | --- | --- | -------- | --------------- | @@ -212,25 +212,25 @@ def check_all(knowledge, query, symbols, model):# 如果模型对每个符号都 - 等值命题等价于蕴涵及其逆命题的 And 关系。 例如,“当且仅当 Harry 在室内时才下雨”等同于(“如果正在下雨,Harry 在室内”和“如果 Harry 在室内,则正在下雨”)。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EtPMbOXWwopIZsxjUJ0cYvHXn5g.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EtPMbOXWwopIZsxjUJ0cYvHXn5g.png) - 德摩根律(De Morgan’s Law) - 可以将 And 连接词变成 Or 连接词。考虑以下命题:“哈利和罗恩都通过了考试是不正确的。” 由此,可以得出“哈利通过考试不是真的”或者“罗恩不是真的通过考试”的结论。 也就是说,要使前面的 And 命题为真,Or 命题中至少有一个命题必须为真。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GTagbx1jso6l8gx1rQOcPW3inIb.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GTagbx1jso6l8gx1rQOcPW3inIb.png) - 同样,可以得出相反的结论。考虑这个命题“哈利或罗恩通过考试是不正确的”。 这可以改写为“哈利没有通过考试”和“罗恩没有通过考试”。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/XOeTbb4BooRbKBx4gHwc3A7EnYf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/XOeTbb4BooRbKBx4gHwc3A7EnYf.png) - 分配律(Distributive Property) - 具有两个用 And 或 Or 连接词分组的命题可以分解为由 And 和 Or 组成的更小单元。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/KBxzbZhUCoX7FBx5ZVFczfPvnoc.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/KBxzbZhUCoX7FBx5ZVFczfPvnoc.png) - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/CvPybic63o7jSlxvuzpcFxjQnse.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CvPybic63o7jSlxvuzpcFxjQnse.png) ## 知识和搜索问题 @@ -247,16 +247,16 @@ def check_all(knowledge, query, symbols, model):# 如果模型对每个符号都 - 归结是一个强大的推理规则,它规定如果 Or 命题中的两个原子命题之一为假,则另一个必须为真。 例如,给定命题“Ron 在礼堂”或“Hermione 在图书馆”,除了命题“Ron 不在礼堂”之外,我们还可以得出“Hermione 在图书馆”的结论。 更正式地说,我们可以通过以下方式定义归结: - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/PBF7bNpPcoTh1bxP4rqcshA5nIg.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PBF7bNpPcoTh1bxP4rqcshA5nIg.png) - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LTKXbs7VPoZxlqxfXfkczFh0nBh.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LTKXbs7VPoZxlqxfXfkczFh0nBh.png) - 归结依赖于互补文字,两个相同的原子命题,其中一个被否定而另一个不被否定,例如$P$和$¬P$。 - 归结可以进一步推广。 假设除了“Rom 在礼堂”或“Hermione 在图书馆”的命题外,我们还知道“Rom 不在礼堂”或“Harry 在睡觉”。 我们可以从中推断出“Hermione 在图书馆”或“Harry 在睡觉”。 正式地说: - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/MebubVSxRonfZ2xnYj9c5TYCnIg.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MebubVSxRonfZ2xnYj9c5TYCnIg.png) - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UZn3b4V8mo1OXxxKDQ0cAjwYnyf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/UZn3b4V8mo1OXxxKDQ0cAjwYnyf.png) - 互补文字使我们能够通过解析推理生成新句子。 因此,推理算法定位互补文字以生成新知识。 - 从句(Clause)是多个原子命题的析取式(命题符号或命题符号的否定,例如$P$, $¬P$)。 析取式由Or逻辑连接词 ($P ∨ Q ∨ R$) 相连的命题组成。 另一方面,连接词由And逻辑连接词 ($P ∧ Q ∧ R$) 相连的命题组成。 从句允许我们将任何逻辑语句转换为合取范式 (CNF),它是从句的合取,例如:$(A ∨ B ∨ C) ∧ (D ∨ ¬E) ∧ (F ∨ G)$。 diff --git a/4.人工智能/4.3.3.1程序示例.md b/4.人工智能/4.3.3.1程序示例.md index 8e5e85f..c3b1111 100644 --- a/4.人工智能/4.3.3.1程序示例.md +++ b/4.人工智能/4.3.3.1程序示例.md @@ -5,6 +5,11 @@ 完成习题 ::: + +::: tip 📥 +本节附件下载 +::: + 本节代码不做额外梳理,[不确定性问题](./4.3.3%E4%B8%8D%E7%A1%AE%E5%AE%9A%E6%80%A7%E9%97%AE%E9%A2%98.md) 中已有解释。 ## Quiz @@ -30,7 +35,7 @@ 9. 1 3. 回答关于贝叶斯网络的问题,问题如下: - ![](static/PUesbhgsFoiucAxWBKYcUUU3nMd.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PUesbhgsFoiucAxWBKYcUUU3nMd.png) 以下哪句话是真的? diff --git a/4.人工智能/4.3.3.2项目:遗传.md b/4.人工智能/4.3.3.2项目:遗传.md index 352424e..86fb146 100644 --- a/4.人工智能/4.3.3.2项目:遗传.md +++ b/4.人工智能/4.3.3.2项目:遗传.md @@ -5,13 +5,18 @@ 如果你卡住了,请记得回来阅读文档,或请求身边人的帮助。 ::: + +::: tip 📥 +本节附件下载 +::: + ## 背景 - GJB2 基因的突变版本是导致新生儿听力障碍的主要原因之一。每个人都携带两个版本的基因,因此每个人都有可能拥有 0、1 或 2 个听力障碍版本的 GJB2 基因。不过,除非一个人接受基因测试,否则要知道一个人拥有多少个变异的 GJB2 基因并不那么容易。这是一些 "隐藏状态":具有我们可以观察到的影响(听力损伤)的信息,但我们不一定直接知道。毕竟,有些人可能有 1 或 2 个突变的 GJB2 基因,但没有表现出听力障碍,而其他人可能没有突变的 GJB2 基因,但仍然表现出听力障碍。 - 每个孩子都会从他们的父母那里继承一个 GJB2 基因。如果父母有两个变异基因,那么他们会将变异基因传给孩子;如果父母没有变异基因,那么他们不会将变异基因传给孩子;如果父母有一个变异基因,那么该基因传给孩子的概率为 0.5。不过,在基因被传递后,它有一定的概率发生额外的突变:从导致听力障碍的基因版本转变为不导致听力障碍的版本,或者反过来。 - 我们可以尝试通过对所有相关变量形成一个贝叶斯网络来模拟所有这些关系,就像下面这个网络一样,它考虑了一个由两个父母和一个孩子组成的家庭。 -![](static/FNyab3RWQo3EA8xu8T7cyLwhnyh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FNyab3RWQo3EA8xu8T7cyLwhnyh.png) - 家庭中的每个人都有一个 `Gene` 随机变量,代表一个人有多少个特定基因(例如,GJB2 的听力障碍版本):一个 0、1 或 2 的值。家族中的每个人也有一个 `Trait` 随机变量,它是 `yes` 或 `no`,取决于该人是否表达基于该基因的性状(例如,听力障碍)。从每个人的 `Gene` 变量到他们的 `Trait` 变量之间有一个箭头,以编码一个人的基因影响他们具有特定性状的概率的想法。同时,也有一个箭头从母亲和父亲的 `Gene` 随机变量到他们孩子的 `Gene` 随机变量:孩子的基因取决于他们父母的基因。 - 你在这个项目中的任务是使用这个模型对人群进行推断。给出人们的信息,他们的父母是谁,以及他们是否具有由特定基因引起的特定可观察特征(如听力损失),你的人工智能将推断出每个人的基因的概率分布,以及任何一个人是否会表现出有关特征的概率分布。 diff --git a/4.人工智能/4.3.3不确定性问题.md b/4.人工智能/4.3.3不确定性问题.md index d3362bc..f6ed14a 100644 --- a/4.人工智能/4.3.3不确定性问题.md +++ b/4.人工智能/4.3.3不确定性问题.md @@ -24,11 +24,11 @@ $ - 用标准骰子掷出数字 R 的概率可以表示为 $P(R)$ 。在我们的例子中,$P(R)=1/6$ ,因为有六个可能的世界(从 1 到 6 的任何数字),并且每个世界有相同的可能性发生。现在,考虑掷两个骰子的事件。现在,有 36 个可能的事件,同样有相同的可能性发生。 -![](static/GqlRbfW7Yom5a9xKCBHckMBuniF.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GqlRbfW7Yom5a9xKCBHckMBuniF.png) - 然而,如果我们试图预测两个骰子的总和,会发生什么?在这种情况下,我们只有 11 个可能的值(总和必须在 2 到 12 之间),而且它们的出现频率并不相同。 -![](static/Y8EbbcnUsoHHlFxHCrGcIUDNn0f.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Y8EbbcnUsoHHlFxHCrGcIUDNn0f.png) - 为了得到事件发生的概率,我们将事件发生的世界数量除以可能发生的世界总数。例如,当掷两个骰子时,有 36 个可能的世界。只有在其中一个世界中,当两个骰子都得到 6 时,我们才能得到 12 的总和。因此,$P(12)=\frac{1}{36}$,或者,换句话说,掷两个骰子并得到两个和为 12 的数字的概率是$\frac{1}{36}$。$P(7)$是多少?我们数了数,发现和 7 出现在 6 个世界中。因此,$P(7)=\frac{6}{36}=\frac{1}{6}$。 @@ -49,11 +49,11 @@ $P(a\land b)=P(a)P(b|a)$ - 例如,考虑$P(总和为12|在一个骰子上掷出6)$,或者掷两个骰子假设我们已经掷了一个骰子并获得了六,得到十二的概率。为了计算这一点,我们首先将我们的世界限制在第一个骰子的值为六的世界: -![](static/MkZ6bIPFroAm3lxzLydcsn5QnNg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MkZ6bIPFroAm3lxzLydcsn5QnNg.png) - 现在我们问,在我们将问题限制在(除以$P(6)$,或第一个骰子产生 6 的概率)的世界中,事件 a(和为 12)发生了多少次? -![](static/XZfhbR6sBorTI9x7hVVchGLUn3b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/XZfhbR6sBorTI9x7hVVchGLUn3b.png) ## 随机变量(Random Variables) @@ -135,7 +135,7 @@ $P(Flight=取消)=0.1$ - 每个节点 X 具有概率分布$P(X|Parents(X))$。 - 让我们考虑一个贝叶斯网络的例子,该网络包含影响我们是否按时赴约的随机变量。 -![](static/GKc6be6ueopUYZxxQg4cS4AVnmb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GKc6be6ueopUYZxxQg4cS4AVnmb.png) - 让我们从上到下描述这个贝叶斯网络: @@ -279,21 +279,21 @@ for node, prediction in zip(model.states, predictions): - 如果我们从对 Rain 变量进行采样开始,则生成的值 none 的概率为 0.7,生成的值 light 的概率为 0.2,而生成的值 heavy 的概率则为 0.1。假设我们的采样值为 none。当我们得到 Maintenance 变量时,我们也会对其进行采样,但只能从 Rain 等于 none 的概率分布中进行采样,因为这是一个已经采样的结果。我们将通过所有节点继续这样做。现在我们有一个样本,多次重复这个过程会生成一个分布。现在,如果我们想回答一个问题,比如什么是$P(Train=on\ time)$,我们可以计算变量 Train 具有准时值的样本数量,并将结果除以样本总数。通过这种方式,我们刚刚生成了$P(Train=on\ {time})$的近似概率。 -![](static/CreObGAg4oXB0oxe2hMcQbYZnAc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CreObGAg4oXB0oxe2hMcQbYZnAc.png) -![](static/Vr96bdSafoV4kBxJ3x2cAU0TnOg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Vr96bdSafoV4kBxJ3x2cAU0TnOg.png) - 我们也可以回答涉及条件概率的问题,例如$P(rain=light|train=on\ {time})$。在这种情况下,我们忽略 Train 值为 delay 的所有样本,然后照常进行。我们计算在$Train=\text{on time}$的样本中有多少样本具有变量$Rain=light$,然后除以$Train=\text{on time}$的样本总数。 -![](static/KsELbuMTCoKZkGxU9U5czQpanKg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/KsELbuMTCoKZkGxU9U5czQpanKg.png) -![](static/MrP0b2FbXofDsOxgnmncufUynAB.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MrP0b2FbXofDsOxgnmncufUynAB.png) 去除$T= on time$的样本 -![](static/Ilj3bPKuwo0l6Dx13rZcVXfenOb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Ilj3bPKuwo0l6Dx13rZcVXfenOb.png) -![](static/AptYbb5MZoylvex7LvPcSqivnef.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/AptYbb5MZoylvex7LvPcSqivnef.png) 选择$R=light$的样本 @@ -357,11 +357,11 @@ print(Counter(data)) - 马尔科夫链是一个随机变量的序列,每个变量的分布都遵循马尔科夫假设。也就是说,链中的每个事件的发生都是基于之前事件的概率。 - 为了构建马尔可夫链,我们需要一个过渡模型,该模型将根据当前事件的可能值来指定下一个事件的概率分布。 -![](static/VBGxbrNgAovuKXxnTKYcm7UinFd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/VBGxbrNgAovuKXxnTKYcm7UinFd.png) - 在这个例子中,基于今天是晴天,明天是晴天的概率是 0.8。这是合理的,因为晴天之后更可能是晴天。然而,如果今天是雨天,明天下雨的概率是 0.7,因为雨天更有可能相继出现。使用这个过渡模型,可以对马尔可夫链进行采样。从一天是雨天或晴天开始,然后根据今天的天气,对第二天的晴天或雨天的概率进行采样。然后,根据明天的情况对后天的概率进行采样,以此类推,形成马尔科夫链: -![](static/XBghbKBaVoz0C4xa85rch804ngd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/XBghbKBaVoz0C4xa85rch804ngd.png) - 给定这个马尔可夫链,我们现在可以回答诸如“连续四个雨天的概率是多少?”这样的问题。下面是一个如何在代码中实现马尔可夫链的例子: @@ -394,7 +394,7 @@ print(model.sample(50)) - 在衡量网站的用户参与度时,隐藏的状态是用户的参与程度,而观察是网站或应用程序的分析。 - 举个例子。我们的人工智能想要推断天气(隐藏状态),但它只能接触到一个室内摄像头,记录有多少人带了雨伞。这里是我们的传感器模型(sensor model),表示了这些概率: -![](static/E0TtbfgiCoV2dtxbbPHcjPgXnQe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/E0TtbfgiCoV2dtxbbPHcjPgXnQe.png) - 在这个模型中,如果是晴天,人们很可能不会带伞到大楼。如果是雨天,那么人们就很有可能带伞到大楼来。通过对人们是否带伞的观察,我们可以合理地预测外面的天气情况。 @@ -403,7 +403,7 @@ print(model.sample(50)) - 假设证据变量只取决于相应的状态。例如,对于我们的模型,我们假设人们是否带雨伞去办公室只取决于天气。这不一定反映了完整的事实,因为,比如说,比较自觉的、不喜欢下雨的人可能即使在阳光明媚的时候也会到处带伞,如果我们知道每个人的个性,会给模型增加更多的数据。然而,传感器马尔科夫假设忽略了这些数据,假设只有隐藏状态会影响观察。 - 隐马尔科夫模型可以用一个有两层的马尔科夫链来表示。上层,变量$X$,代表隐藏状态。底层,变量$E$,代表证据,即我们所拥有的观察。 -![](static/FnyrbYSEWohimaxIYPSchotGnse.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FnyrbYSEWohimaxIYPSchotGnse.png) - 基于隐马尔科夫模型,可以实现多种任务: diff --git a/4.人工智能/4.3人工智能导论及机器学习入门.md b/4.人工智能/4.3人工智能导论及机器学习入门.md index c02a88b..09e1ce2 100644 --- a/4.人工智能/4.3人工智能导论及机器学习入门.md +++ b/4.人工智能/4.3人工智能导论及机器学习入门.md @@ -6,7 +6,7 @@ 人工智能是一个宏大的愿景,目标是让机器像我们人类一样思考和行动,既包括增强我们人类脑力也包括增强我们体力的研究领域。而学习只是实现人工智能的手段之一,并且,只是增强我们人类脑力的方法之一。所以,人工智能包含机器学习。机器学习又包含了深度学习,他们三者之间的关系见下图。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/AMU7bSgh4o8tEIxk82icvtbDn0c.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/AMU7bSgh4o8tEIxk82icvtbDn0c.png) # 如何学习本节内容 diff --git a/4.人工智能/4.4FAQ:常见问题.md b/4.人工智能/4.4FAQ:常见问题.md index 6eee368..e0b774b 100644 --- a/4.人工智能/4.4FAQ:常见问题.md +++ b/4.人工智能/4.4FAQ:常见问题.md @@ -42,11 +42,11 @@ 机器学习包括深度学习 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnBP4QHAJnXrNfOiK8hp6LIc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnBP4QHAJnXrNfOiK8hp6LIc.png) [同时向你推荐这个 Data Analytics,Data Analysis,数据挖掘,数据科学,机器学习,大数据的区别是什么?](https://www.quora.com/What-is-the-difference-between-Data-Analytics-Data-Analysis-Data-Mining-Data-Science-Machine-Learning-and-Big-Data-1) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxPsUwwhcCC0zBerZ2s88ld.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxPsUwwhcCC0zBerZ2s88ld.png) ## 我没有任何相关概念 diff --git a/4.人工智能/4.6.1工欲善其事,必先利其器.md b/4.人工智能/4.6.1工欲善其事,必先利其器.md index 3e30ec4..9da961a 100644 --- a/4.人工智能/4.6.1工欲善其事,必先利其器.md +++ b/4.人工智能/4.6.1工欲善其事,必先利其器.md @@ -6,7 +6,7 @@ ## 深度学习框架 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnWLzi1LIWLCncrXcTcjAKne.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnWLzi1LIWLCncrXcTcjAKne.png) ### 1、深度学习框架是什么 @@ -113,9 +113,9 @@ PyTorch 完全基于 Python。 官网如下 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnaF9UWNcr5pt99Zu5Wr0PTg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaF9UWNcr5pt99Zu5Wr0PTg.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnqHCP5KiSF4Vmc6M1cjEXKg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnqHCP5KiSF4Vmc6M1cjEXKg.png) 选择 Conda 或者 Pip 安装皆可 @@ -140,15 +140,21 @@ conda config --set show_channel_urls yes ### TensorFlow -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5u9u9M6DPRh83ufoSwfuof.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5u9u9M6DPRh83ufoSwfuof.png) #### 教程 -[在 Windows 上配置 pytorch!(CPU 和 GPU 版)](https://www.bilibili.com/video/BV1YY4y1B7cA?spm_id_from=333.337.search-card.all.click&vd_source=8e0b454d3850af2ce4435d1ca2d9e040) +[在 Windows 上配置 pytorch!(CPU 和 GPU 版)](https://www.bilibili.com/video/BV1YY4y1B7cA) -[Windows 下 PyTorch 入门深度学习环境安装与配置 CPU GPU 版](https://www.bilibili.com/video/BV1S5411X7FY?p=1&vd_source=8e0b454d3850af2ce4435d1ca2d9e040) + -[最新 TensorFlow 2.8 极简安装教程](https://www.bilibili.com/video/BV1i34y1r7dv/?spm_id_from=333.788&vd_source=8e0b454d3850af2ce4435d1ca2d9e040) +[Windows 下 PyTorch 入门深度学习环境安装与配置 CPU GPU 版](https://www.bilibili.com/video/BV1S5411X7FY) + + + +[最新 TensorFlow 2.8 极简安装教程](https://www.bilibili.com/video/BV1i34y1r7dv) + + #### 思考题:为什么需要 CUDA 版本??? @@ -161,17 +167,17 @@ cuda 版本需要额外配置,我们将这个任务留给聪明的你!!! 同时按下键盘的 win+r 键,打开 cmd,键入 `dxdiag` 然后回车 系统、显卡、声卡以及其他输入设备的信息都在这里了。(给出我的界面) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXHceTuUl0XzCNJv9RqHN9c.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXHceTuUl0XzCNJv9RqHN9c.png) cuda 版本查看 桌面空白位置摁下右键 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbxhAei6H4OWjaN0Hp0YICg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbxhAei6H4OWjaN0Hp0YICg.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnp9i1SagOxXd17W9BiP3RNe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnp9i1SagOxXd17W9BiP3RNe.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngaZNZB3XLSJia0rk0DgGbe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngaZNZB3XLSJia0rk0DgGbe.png) #### linux @@ -187,11 +193,11 @@ nvidia-smi 通常大家所指的 cuda 是位于/usr/local 下的 cuda -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcntFGELTpdcVoigy5ldCorAb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcntFGELTpdcVoigy5ldCorAb.png) 当然可以看到 cuda 是 cuda-11.6 所指向的软链接(类似 windows 的快捷方式),所以我们如果要切换 cuda 版本只需要改变软链接的指向即可。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTB39MtPKBr9CgufCpSIYuf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTB39MtPKBr9CgufCpSIYuf.png) cuda driver version 是 cuda 的驱动版本。 @@ -199,9 +205,9 @@ cuda runtimer version 是我们实际很多时候我们实际调用的版本。 二者的版本是可以不一致的。如下图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnATNfI2spkNsXbqtIuwwY6c.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnATNfI2spkNsXbqtIuwwY6c.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnz03UebyZ42JNOXpdUfjMBg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnz03UebyZ42JNOXpdUfjMBg.png) 一般来讲 cuda driver 是向下兼容的。所以 cuda driver version >= cuda runtime version 就不会太大问题。 @@ -211,13 +217,13 @@ cuda runtimer version 是我们实际很多时候我们实际调用的版本。 以 pytorch 为例,可以看到在安装过程中我们选择的 cuda 版本是 10.2 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcns8yMCuacj0A2BbMU6ZB08b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcns8yMCuacj0A2BbMU6ZB08b.png) 那么这个 cudatookit10.2 和 nvidia-smi 的 11.7 以及 nvcc -V 的 11.4 三者有什么区别呢? pytorch 实际只需要 cuda 的链接文件,即.so 文件,这些链接文件就都包含的 cudatookkit 里面。并不需要 cuda 的头文件等其他东西,如下所示 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXWjMnlXjMg2lA1ApjoUhnh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXWjMnlXjMg2lA1ApjoUhnh.png) 所以我们如果想让使用 pytorch-cuda 版本,我们实际上不需要/usr/local/cuda。只需要在安装驱动的前提下,在 python 里面安装 cudatookit 即可。 @@ -227,8 +233,8 @@ pytorch 实际只需要 cuda 的链接文件,即.so 文件,这些链接文 Cudnn 是一些链接文件,你可以理解成是为了给 cuda 计算加速的东西。同样的我们也可以用以下命令查看/usr/local/cuda 的 cudnn: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPD5DbA3NPimtV0kVoDJGmh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPD5DbA3NPimtV0kVoDJGmh.png) 以及 pytorch 的 cuda 环境的 cudnn -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZQ2Mc52Us6ku543l7WPEZd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZQ2Mc52Us6ku543l7WPEZd.png) diff --git a/4.人工智能/4.6.2你可能会需要的术语介绍.md b/4.人工智能/4.6.2你可能会需要的术语介绍.md index 9e6ee71..5e4da52 100644 --- a/4.人工智能/4.6.2你可能会需要的术语介绍.md +++ b/4.人工智能/4.6.2你可能会需要的术语介绍.md @@ -40,8 +40,8 @@ 这是我用照片重建的独角兽稀疏点云,红色的不用管,是照相机视角(图不够多,巨糊) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnWx8hYfT6kFug4A1iA3uftg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnWx8hYfT6kFug4A1iA3uftg.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbWfXyklyZwpjwy8uz2XnLh.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbWfXyklyZwpjwy8uz2XnLh.jpg) 先这些,后续想起来了可能会补充。 diff --git a/4.人工智能/4.6.3深度学习快速入门.md b/4.人工智能/4.6.3深度学习快速入门.md index 4266aae..a6f6aea 100644 --- a/4.人工智能/4.6.3深度学习快速入门.md +++ b/4.人工智能/4.6.3深度学习快速入门.md @@ -2,7 +2,10 @@ ## 刘二大人(Pytorch) -## [【速成课:人工智能】Ai - [21 集全/中英双语] - Artificial Intelligence_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1P7411r7Dw/?spm_id_from=333.999.0.0&vd_source=2cb6252f9211ae9d29cf1f76f0aea8d7) +## 速成课:人工智能 +[【速成课:人工智能】Ai - [21 集全/中英双语] - Artificial Intelligence_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1P7411r7Dw) + + Crash course 的课程,可以基本了解pytorch的内容,但是当然有很多内容已经有些过时 @@ -65,7 +68,7 @@ Crash course 的课程,可以基本了解pytorch的内容,但是当然有很 ### 损失 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnRbeabbEppeHlM39UwqJSJc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnRbeabbEppeHlM39UwqJSJc.png) 首先我们需要有一个损失函数$F(x),x=true-predict$ @@ -74,13 +77,13 @@ Crash course 的课程,可以基本了解pytorch的内容,但是当然有很 ### 梯度下降 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnMuwaG2okodvywzbxX138Re.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnMuwaG2okodvywzbxX138Re.png) 假设损失函数为$y=x^2$,梯度下降的目的是快速找到导数为 0 的位置(附近) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn83M9AW6xDm5pBIqmZEC6Kf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn83M9AW6xDm5pBIqmZEC6Kf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcneVFa131Lb9xDMCsIMI9fcc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcneVFa131Lb9xDMCsIMI9fcc.png) 以此类推,我们最后的 w 在 0 的附近反复横跳,最后最接近目标函数的权重 w 就是 0。 @@ -94,7 +97,7 @@ Crash course 的课程,可以基本了解pytorch的内容,但是当然有很 # 关于 MINIST -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxdyWA6Sj82kNxMlQ1b9hDg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxdyWA6Sj82kNxMlQ1b9hDg.png) 这个数据集可以说是最最经典的数据集了,里面有 0-9 这 10 个数字的手写图片和标注,正确率最高已经到了 99.7%. diff --git a/4.人工智能/4.6.4Pytorch安装.md b/4.人工智能/4.6.4Pytorch安装.md index c874237..b4c2e36 100644 --- a/4.人工智能/4.6.4Pytorch安装.md +++ b/4.人工智能/4.6.4Pytorch安装.md @@ -4,7 +4,7 @@ 进入官网后选择 Install,在下面表格中按照你的配置进行选择: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxltvaT52E6mu6JIYaKvM1X.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxltvaT52E6mu6JIYaKvM1X.png) 其中 Package 部分选择安装的途径,这里主要介绍 Pip 和 Conda 两种途径。 @@ -56,8 +56,8 @@ conda config --show channels 同时按下 Win+R,运行 cmd,输入 `dxdiag` 并回车。系统、显卡、声卡以及其他设备信息都会显示。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnepK0nkI8pWAJaO89zQoRgh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnepK0nkI8pWAJaO89zQoRgh.png) cuda 版本查看 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnRoZEZsUdVduFRR9DjegeNh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnRoZEZsUdVduFRR9DjegeNh.png) diff --git a/4.人工智能/4.6.5.1CV领域任务(研究目标).md b/4.人工智能/4.6.5.1CV领域任务(研究目标).md index 5b313cb..72368c6 100644 --- a/4.人工智能/4.6.5.1CV领域任务(研究目标).md +++ b/4.人工智能/4.6.5.1CV领域任务(研究目标).md @@ -2,7 +2,7 @@ ### CV 领域的大任务 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTUlm8EI0byGJJQ78IqGWGx.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTUlm8EI0byGJJQ78IqGWGx.png) #### (a)Image classification 图像分类 @@ -18,7 +18,7 @@ - 这张图我们需要标注两个类别 `head(头)、helmet(头盔)` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnoyxKL4bOeYOOjrh6it0BHd.gif) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnoyxKL4bOeYOOjrh6it0BHd.gif) #### (c)Semantic segmentation 语义分割 @@ -32,13 +32,13 @@ #### (e)Key Point 人体关键点检测 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnT2udZtMmV2kLQsXoPuElNd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnT2udZtMmV2kLQsXoPuElNd.png) 通过人体关键节点的组合和追踪来识别人的运动和行为,对于描述人体姿态,预测人体行为至关重要。 #### (f)Scene Text Recognition(STR)场景文字识别 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnB8ZB4bSaHhIhPFHHrxkakb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnB8ZB4bSaHhIhPFHHrxkakb.png) 很多照片中都有一些文字信息,这对理解图像有重要的作用。 @@ -48,7 +48,7 @@ 利用两张图片或者其他信息生成一张新的图片 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnOdmG0c1kkivVdTn5RUMCIc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnOdmG0c1kkivVdTn5RUMCIc.png) 利用左边两张小图生成右边的图片 @@ -56,6 +56,6 @@ 将输入图片分辨率增加 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnDJ5aNv49ySjw96uCCF0dW8.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnDJ5aNv49ySjw96uCCF0dW8.png) 当然还有一些新兴领域我们没有写入~ diff --git a/4.人工智能/4.6.5.2.1数据读取.md b/4.人工智能/4.6.5.2.1数据读取.md index 11673aa..9e0b5c4 100644 --- a/4.人工智能/4.6.5.2.1数据读取.md +++ b/4.人工智能/4.6.5.2.1数据读取.md @@ -117,7 +117,7 @@ Torchvision 库中的 torchvision.datasets 包中提供了丰富的图像数据 下表中列出了 torchvision.datasets 包所有支持的数据集。各个数据集的说明与接口,详见链接 [https://pytorch.org/vision/stable/datasets.html](https://pytorch.org/vision/stable/datasets.html)。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxvqC7FKt1qeCZoI2kVf9yg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxvqC7FKt1qeCZoI2kVf9yg.png) 注意,torchvision.datasets 这个包本身并不包含数据集的文件本身,它的工作方式是先从网络上把数据集下载到用户指定目录,然后再用它的加载器把数据集加载到内存中。最后,把这个加载后的数据集作为对象返回给用户。 @@ -129,11 +129,11 @@ MNIST 数据集是一个著名的手写数字数据集,因为上手简单, MNIST 数据集是 NIST 数据集的一个子集,MNIST 数据集你可以通过[这里](http://yann.lecun.com/exdb/mnist/)下载。它包含了四个部分。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnCP2Sp932nPy8Il5Z5d4Aih.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnCP2Sp932nPy8Il5Z5d4Aih.png) MNIST 数据集是 ubyte 格式存储,我们先将“训练集图片”解析成图片格式,来直观地看一看数据集具体是什么样子的。具体怎么解析,我们在后面数据预览再展开。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnjsG31hhjqdxOnoCGFGR6sh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnjsG31hhjqdxOnoCGFGR6sh.png) 接下来,我们看一下如何使用 Torchvision 来读取 MNIST 数据集。 diff --git a/4.人工智能/4.6.5.3.1AlexNet.md b/4.人工智能/4.6.5.3.1AlexNet.md index c52e06a..46968ca 100644 --- a/4.人工智能/4.6.5.3.1AlexNet.md +++ b/4.人工智能/4.6.5.3.1AlexNet.md @@ -12,21 +12,21 @@ AlexNet 有 6 千万个参数和 650,000 个神经元。 ### 网络框架图 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcng0jB2dmDD18EwU8nAIFPIc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcng0jB2dmDD18EwU8nAIFPIc.png) ### 使用 ReLU 激活函数代替 tanh 在当时,标准的神经元激活函数是 tanh()函数,这种饱和的非线性函数在梯度下降的时候要比非饱和的非线性函数慢得多,因此,在 AlexNet 中使用 ReLU 函数作为激活函数。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnFlENdpKXUR7l4MhUXFKzfg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnFlENdpKXUR7l4MhUXFKzfg.png) ### 采用 Dropout 防止过拟合 dropout 方法会遍历网络的每一层,并设置消除神经网络中节点的概率。假设网络中的每一层,每个节点都以抛硬币的方式设置概率,每个节点得以保留和消除的概率都是 0.5,设置完节点概率,我们会消除一些节点,然后删除掉从该节点进出的连线,最后得到一个节点更少,规模更小的网络(如下图所示),然后再用反向传播方法进行训练。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnNXzBUtJWXbUtEZzxugBr6W.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnNXzBUtJWXbUtEZzxugBr6W.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn7kG0PcXNumIdTFuEdaHl0e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn7kG0PcXNumIdTFuEdaHl0e.png) ### diff --git a/4.人工智能/4.6.5.3.2FCN.md b/4.人工智能/4.6.5.3.2FCN.md index ba2c1b5..f3eec40 100644 --- a/4.人工智能/4.6.5.3.2FCN.md +++ b/4.人工智能/4.6.5.3.2FCN.md @@ -10,7 +10,7 @@ ### 框架图 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndYCXYj7rNfhXoSaEPZxpyc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndYCXYj7rNfhXoSaEPZxpyc.png) ### 同 CNN 的对比 @@ -26,7 +26,7 @@ FCN 对图像进行像素级的分类,从而解决了语义级别的图像分 这里图像的反卷积使用了这一种反卷积手段使得图像可以变大,FCN 作者使用的方法是这里所说反卷积的一种变体,这样就可以获得相应的像素值,图像可以实现 end to end。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngqgiogbvy4OYpIzIo6eSXd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngqgiogbvy4OYpIzIo6eSXd.png) ### 视频 diff --git a/4.人工智能/4.6.5.3.3ResNet.md b/4.人工智能/4.6.5.3.3ResNet.md index 54cee95..9edc309 100644 --- a/4.人工智能/4.6.5.3.3ResNet.md +++ b/4.人工智能/4.6.5.3.3ResNet.md @@ -21,11 +21,11 @@ 如图所示,随着层数越来越深,预测的效果反而越来越差(error 越大) ::: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnBDfBnOPmS0btwNseKvsN6f.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnBDfBnOPmS0btwNseKvsN6f.png) ## 网络模型 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnn8a16DYyEPEVuHxvvw7eAf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnn8a16DYyEPEVuHxvvw7eAf.png) ::: warning 😺 我们可以看到,ResNet 的网络依旧非常深,这是因为研究团队不仅发现了退化现象,还采用出一个可以将网络继续加深的 trick:shortcut,亦即我们所说的 residual。 @@ -35,7 +35,7 @@ ::: ### residual 结构 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhgVaLChu3O2omGJKzFU7uB.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhgVaLChu3O2omGJKzFU7uB.png) ## 网络代码 @@ -197,7 +197,7 @@ def resnet101(num_classes=1000, include_top=True): ## 视频 -https://www.bilibili.com/video/BV1P3411y7nn + ## 思考 diff --git a/4.人工智能/4.6.5.3.4UNet.md b/4.人工智能/4.6.5.3.4UNet.md index 837161e..2cd4886 100644 --- a/4.人工智能/4.6.5.3.4UNet.md +++ b/4.人工智能/4.6.5.3.4UNet.md @@ -8,7 +8,7 @@ ## 网络框架 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnoo4bKuLo5qQdQmRP2H75Sb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnoo4bKuLo5qQdQmRP2H75Sb.png) ::: warning 😺 @@ -45,7 +45,7 @@ U-net 网络的结构如图所示,蓝色箭头代表卷积和激活函数, ## 视频 -https://www.bilibili.com/video/BV1Vq4y127fB + ## 思考 1 ::: warning 🤔 diff --git a/4.人工智能/4.6.5.3.7还要学更多?.md b/4.人工智能/4.6.5.3.7还要学更多?.md index ee633e0..12b9354 100644 --- a/4.人工智能/4.6.5.3.7还要学更多?.md +++ b/4.人工智能/4.6.5.3.7还要学更多?.md @@ -6,11 +6,11 @@ - 你可以先行尝试一下怎么把在 MNIST 上训练的网络真正投入应用,比如识别一张你自己用黑笔写的数字~ -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2juA3J3ycnHoN5SmYAfEfd.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2juA3J3ycnHoN5SmYAfEfd.jpg) - 比如你可以尝试训练一个网络来实现人体五官分割(笔者之前就玩过这个)数据集采用 [helen 数据集](https://pages.cs.wisc.edu/~lizhang/projects/face-parsing/),关于数据集的架构你可以搜一搜,自己设计一个 Dataloader 和 YourModle 来实现前言中的五官分割效果(真的很有乐子 hhh) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJJlzanhvtE55Q7d0IR1vph.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJJlzanhvtE55Q7d0IR1vph.png) - 当然你也可以尝试一些自己感兴趣的小任务来锻炼工程能力~ diff --git a/4.人工智能/4.6.5.4.1NeRF.md b/4.人工智能/4.6.5.4.1NeRF.md index 37291b8..15c09fa 100644 --- a/4.人工智能/4.6.5.4.1NeRF.md +++ b/4.人工智能/4.6.5.4.1NeRF.md @@ -6,11 +6,11 @@ NeRF 想做这样一件事,不需要中间三维重建的过程,仅根据位 在生成建模前,我们需要对被建模物体进行密集的采样,如下图是一个示例的训练集,它含有 100 张图片以及保存了每一张图片相机参数(表示拍摄位置,拍摄角度,焦距的矩阵)的 json 文件。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn6jg09V944MU1sBsstmdaib.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn6jg09V944MU1sBsstmdaib.png) 你可以看到,这 100 张图片是对一个乐高推土机的多角度拍摄结果。我们需要的是一个可以获取这个推土机在任意角度下拍摄的图片的模型。如图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnLEEyuUWOwiJOePhmmsAakd.gif) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnLEEyuUWOwiJOePhmmsAakd.gif) 现在来看 NeRF 网络: @@ -40,7 +40,7 @@ NeRF 想做这样一件事,不需要中间三维重建的过程,仅根据位 - 对应的小方块的 RGB 信息 - 不透明度 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcni4q9Cp8G7H9HjKMrfImcZe.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcni4q9Cp8G7H9HjKMrfImcZe.jpg) 在这里,作者选择了最简单的 MLP,因此,这是一个输入为 5 维,输出为 4 维向量($R,G,B,\sigma$)的简单网络,值得注意的是,不透明度与观察角度无关,这里在网络中进行了特殊处理,让这个值与后两维无关。 @@ -58,15 +58,15 @@ NeRF 想做这样一件事,不需要中间三维重建的过程,仅根据位 这段要仔细看和推导,第一遍不容易直接懂。顺带一提,我们的小方块学名叫体素为了显得我们更专业一点以后就叫它体素罢 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnwHy3Hlhbu2bOsi6r2BYJe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnwHy3Hlhbu2bOsi6r2BYJe.png) 上面所说的公式具体如下:t 是我们的$\sigma$,$t_f,t_n$分别是离发射点最远的体素和最近的体素。这个公式求得是像素的颜色。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnDWBUOJucS2YdT7MlKBAq8g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnDWBUOJucS2YdT7MlKBAq8g.png) 思路总体如上,这里放一张找来的渲染过程示意图(不知道为什么有点包浆) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfH30VDvbSdzahs5lRuirUd.gif) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfH30VDvbSdzahs5lRuirUd.gif) # 算法细节部分 @@ -86,10 +86,10 @@ NeRF 想做这样一件事,不需要中间三维重建的过程,仅根据位 粗网络就是上述采样方法用的普通网络,而粗网络输出的不透明度值会被作为一个概率分布函数,精细网络根据这个概率分布在光线上进行采样,不透明度越大的点,它的邻域被采样的概率越大,也就实现了我们要求的在实体上多采样,空气中少采样。最后精细网络输出作为结果,因此粗网络可以只求不透明度,无视颜色信息。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnwl72wntQgYMFvRPTWY5fPf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnwl72wntQgYMFvRPTWY5fPf.png) ## 位置编码 学过 cv 的大家想必对这个东西耳熟能详了吧~,这里的位置编码是对输入的两个位置和一个方向进行的(体素位置,相机位置和方向),使用的是类似 transformer 的三角函数类编码如下。位置编码存在的意义是放大原本的 5 维输入对网络的影响程度,把原本的 5D 输入变为 90 维向量;并且加入了与其他体素的相对位置信息。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnliAj5mb0Afz0TOMwrwytmh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnliAj5mb0Afz0TOMwrwytmh.png) diff --git a/4.人工智能/4.6.5.4.2NeRF的改进方向.md b/4.人工智能/4.6.5.4.2NeRF的改进方向.md index 2d74469..e5c93fb 100644 --- a/4.人工智能/4.6.5.4.2NeRF的改进方向.md +++ b/4.人工智能/4.6.5.4.2NeRF的改进方向.md @@ -12,19 +12,19 @@ Pixel-nerf 对输入图像使用卷积进行特征提取再执行 nerf,若有多个输入,对每个视角都执行 CNN,在计算光线时,取每一个已有视角下该坐标的特征,经过 mlp 后算平均。可以在少量视角下重建视图,需要进行预训练才能使用,有一定自动补全能力(有限) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnEiUODOd4FOBxYIZmmihyef.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnEiUODOd4FOBxYIZmmihyef.png) ### 2.IBRnet IBRnet 是 pixel-nerf 的改进版,取消了 CNN,并且在 mlp 后接入了 transformer 结构处理体密度(不透明度),对这条光线上所有的采样点进行一个 transformer。同时,在获取某个体素的颜色和密度时,作者用了本视角相邻的两个视角,获取对应体素在这两张图片中的像素,以图片像素颜色,视角,图片特征作为 mlp 的输入。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnwH75jIO9NiVwQaBqDrbe8e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnwH75jIO9NiVwQaBqDrbe8e.png) ### 3.MVSnerf MVSnerf 它用 MVS 的方法构建代价体然后在后面接了一个 nerf,MVS 是使用多视角立体匹配构建一个代价体,用 3D 卷积网络进行优化,这里对代价体进行 nerf 采样,可以得到可泛化网络。它需要 15min 的微调才能在新数据上使用。多视角立体匹配是一种传统算法,通过光线,几何等信息计算图像中小块的相似度,得出两个相机视角之间的位置关系。这个算法也被广泛使用在得到我们自己采样的数据的相机变换矩阵上(我就是这么干的) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbd2YxumunZR9LZG3ANrPrb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbd2YxumunZR9LZG3ANrPrb.png) 此处涉及较多图形学,使用了平面扫描算法,其中有单应性变换这个角度变换算法,推导与讲解如下: @@ -34,7 +34,7 @@ 平面扫描就是把 A 视角中的某一像素点(如图中红色区域)的相邻的几个像素提取出来,用单应性变换转换到 B 视角中,这时候用的深度是假设的深度,遍历所有假设的深度,计算通过每一个假设深度经过单应性变换得到的像素小块和 B 视角中对应位置的差值(loss),取最小的 loss 处的深度作为该像素的深度。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5JmWUh1Gu283biqHq3Op0r.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5JmWUh1Gu283biqHq3Op0r.png) 构建代价体: @@ -55,7 +55,7 @@ 展开说说:其实这也是神经网络发展的一个方向,以前的深层网络倾向于把所有东西用网络参数表示,这样推理速度就会慢,这里使用哈希表的快速查找能力存储一些数据信息,instant-ngp 就是把要表达的模型数据特征按照不同的精细度存在哈希表中,使用时通过哈希表调用或插值调用。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXSUge0BqBCecdDJLQr4cRc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXSUge0BqBCecdDJLQr4cRc.png) # 3.可编辑(指比如人体运动等做修改工作的) @@ -63,7 +63,7 @@ Human-nerf 生成可编辑的人体运动视频建模,输入是一段人随便动动的视频。输出的动作可以编辑修改,并且对衣物折叠等有一定优化。使用的模型并非全隐式的,并且对头发和衣物单独使用变换模型。使用了逆线性蒙皮模型提取人物骨骼(可学习的模型),上面那个蓝色的就是姿态矫正模块,这个模块赋予骨骼之间运动关系的权重(因为使用的是插值处理同一运动时不同骨骼的平移旋转矩阵,一块骨骼动会牵动其他骨骼)图中的 Ω 就是权重的集合,它通过 mlp 学习得到。然后得到显式表达的人物骨骼以及传入视频中得到的对应骨骼的 mesh,skeletal motion 就是做游戏人物动作用的编辑器这种,后面残差链接了一个 non-rigid-motion(非刚性动作),这个是专门处理衣物和毛发的,主要通过学习得到,然后粗暴的加起来就能得到模型,再经过传统的 nerf 渲染出图像。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHRnNXHvwVXrRmM8wnl53p9.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHRnNXHvwVXrRmM8wnl53p9.png) ### 2.Neural Body @@ -75,7 +75,7 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作,演示视频右下。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnYmy1MnyWSPNEWvFWj9mzCf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnYmy1MnyWSPNEWvFWj9mzCf.png) 这是 EasyMocap 的演示。 @@ -87,7 +87,7 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作 是个预训练模型,训练的模块就是这个 3D 卷积神经网络。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbclBwg3BsubGOrt8vZf0qb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbclBwg3BsubGOrt8vZf0qb.png) ### 3.wild-nerf @@ -101,11 +101,11 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作 在此网络的单个输出上貌似是不监督的,因为没办法进行人为标注。这点我不是很确定,以后如果发现了会来修改的。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnYeaiioqtFzQlztsTwiEpzg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnYeaiioqtFzQlztsTwiEpzg.png) 渲染经过形变的物体时,光线其实是在 t=0 时刻进行渲染的,因为推土机的铲子放下去了,所以光线是弯曲的。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcng7xDooDmmpbCJRyLJBucwe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcng7xDooDmmpbCJRyLJBucwe.png) # 4.用于辅助传统图像处理 @@ -123,23 +123,23 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作 GRAF 把 GAN 与 nerf 结合,增加了两个输入,分别是外观/形状编码 z2D 采样编码 v,z 用来改变渲染出来东西的特征,比如把生成的车变色或者变牌子,suv 变老爷车之类的。v(s,u)用来改变下图 2 中训练时选择光线的标准。这里训练时不是拿 G 生成的整张图扔进 D 网络,而是根据 v 的参数选择一些光线组成的 batch 扔进 D 进行辨别 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnVyFqHIoA2MGGc4JJo9tObh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnVyFqHIoA2MGGc4JJo9tObh.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvBzqwCn9i8GGBIkMFEs3ne.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvBzqwCn9i8GGBIkMFEs3ne.png) ### 2.GIRAFFE GIRAFFE 是 GRAF 的改进工作,可以把图片中的物品,背景一个个解耦出来单独进行改变或者移动和旋转,也可以增加新的物品或者减少物品,下图中蓝色是不可训练的模块,橙色可训练。以我的理解好像要设置你要解耦多少个(N)物品再训练,网络根据类似 k 近邻法的方法在特征空间上对物品进行分割解耦,然后分为 N 个渲染 mlp 进行训练,训练前加入外观/形状编码 z。最后还是要扔进 D 训练。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnB04hwHA1o64WBvYSyVTDod.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnB04hwHA1o64WBvYSyVTDod.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnC2bKVHOANjGOePLHk7jfZe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnC2bKVHOANjGOePLHk7jfZe.png) ### 3.OSF OSFObject-Centric Neural Scene Rendering,可以给移动的物体生成合理的阴影和光照效果。加入了新的坐标信息:光源位置,与相机坐标等一起输入。对每个小物件构建一个单独的小 nerf,计算这个小 nerf 的体素时要先经过光源照射处理(训练出来的)然后在每个小物件之间也要计算反射这样的光线影响,最后进行正常的渲染。这篇文章没人写 review,有点冷门,这些都是我自己读完感觉的,不一定对。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnV7YcKIq5y8TkOGEGzrPc5g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnV7YcKIq5y8TkOGEGzrPc5g.png) ### 4.Hyper-nerf-gan @@ -153,7 +153,7 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作 左边是常规卷积网络生成图像,右边是用 INR 生成图像。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnGCCZ8qXD1Hhc531NxfLzLd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnGCCZ8qXD1Hhc531NxfLzLd.png) 这种方法存在两个问题: @@ -165,8 +165,8 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作 FMM 主要是把要学习的矩阵转化为两个低秩矩阵,去先生成他们俩再相乘,减少网络计算量。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn0oHY54dgL2bxmryxjqxC6f.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn0oHY54dgL2bxmryxjqxC6f.png) 现在开始讲 Hyper-nerf-gan 本身,它看上去其实就是 nerf 接在 gan 上。不过有一些变化,比如输入不再包含视角信息,我很怀疑它不能很好表达反光效果。而且抛弃了粗网络细网络的设计,只使用粗网络减少计算量。这里的 generator 完全就是 INR-Gan 的形状,生成权重,然后再经过 nerf 的 mlp 层生成,没啥别的了,就这样吧。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnc9bZ1nqt3Lighlrj9zSrdd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnc9bZ1nqt3Lighlrj9zSrdd.png) diff --git a/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP.md b/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP.md index 0dd2147..029b38a 100644 --- a/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP.md +++ b/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP.md @@ -2,7 +2,7 @@ 如何使用和怎么下载就不讲了,直接搜就有,它可以把多个拍摄同一物体的图片转换为它们对应视角的相机矩阵和拍摄角度,可以实现自制数据集做 nerf。它的流程(SFM 算法)可以概括如下: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXzgaIhmUQ7HQtEn52ksWIf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXzgaIhmUQ7HQtEn52ksWIf.png) 这里主要是记录一下它的原理: 首先是一个经典关键点匹配技术:SIFT @@ -11,53 +11,53 @@ ## DOG 金字塔 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcneERqw4amGHf6f2SX7gcdny.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcneERqw4amGHf6f2SX7gcdny.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnv4dRbGDg9eemcyQFREYs0b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnv4dRbGDg9eemcyQFREYs0b.png) 下面是原理方法: 首先是高斯金字塔,它是把原图先放大两倍,然后使用高斯滤波(高斯卷积)对图像进行模糊化数次,取出倒数第三层缩小一半继续进行这个过程,也就是说它是由一组一组的小金字塔组成的。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnKJWrCUc5cPOuZg01HqNCsc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnKJWrCUc5cPOuZg01HqNCsc.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnd25i5LQ7WjGJEe2xgU3qce.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnd25i5LQ7WjGJEe2xgU3qce.jpg) 然后是基于高斯金字塔的 DOG 金字塔,也叫差分金字塔,它是把相邻的高斯金字塔层做减法得到的,因为经过高斯模糊,物体的轮廓(或者说不变特征)被模糊化,也就是被改变。通过相减可以得到这些被改变的点。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcncKZlnG7F4oEpcrQYqth8kh.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcncKZlnG7F4oEpcrQYqth8kh.jpg) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnAEQSDhsLdDsNOQVxqcic5d.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnAEQSDhsLdDsNOQVxqcic5d.jpg) ## 空间极值点检测 为了找到变化的最大的几个点来作为特征点,我们需要找到变化的极值点,因此需要进行比较,这里是在整个金字塔中进行对比,我们提取某个点周边 3*3*3 的像素点进行比较,找到最大或最小的局部极值点。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnl48ovxbqSeTljgF3rp16ue.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnl48ovxbqSeTljgF3rp16ue.png) 同时我们也对关键点分配方向,也就是这个点在图片空间中的梯度方向 梯度为: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbQx8TntyX8iETPixOnKjef.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbQx8TntyX8iETPixOnKjef.png) 梯度方向为: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfw5FrBxPaD4bNFT4GFyXmd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfw5FrBxPaD4bNFT4GFyXmd.png) 我们计算以关键点为中心的邻域内所有点的梯度方向,然后把这些 360 度范围内的方向分配到 36 个每个 10 度的方向中,并构建方向直方图,这里的示例使用了 8 个方向,几个随你其实: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnyuV5HCumJMhyW7Cb3HSxcg.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnyuV5HCumJMhyW7Cb3HSxcg.jpg) 取其中最大的为主方向,若有一个方向超过主方向的 80%,那么把它作为辅方向。 操作可以优化为下图,先把关键点周围的像素分成 4 块,每块求一次上面的操作,以这个 4 个梯度直方图作为关键点的方向描述。也就是一个 2*2*8(方向数量)的矩阵作为这个点的方向特征。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnEvWRhUKcWKAoYKWbN1kAuc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnEvWRhUKcWKAoYKWbN1kAuc.png) 实验表明,使用 4*4*8=122 的描述更加可靠。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniVb6FvrZziID1B1JFmgVzx.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniVb6FvrZziID1B1JFmgVzx.jpg) 特征点的匹配是通过计算两组特征点的 128 维的关键点的欧式距离实现的。欧式距离越小,则相似度越高,当欧式距离小于设定的阈值时,可以判定为匹配成功。 diff --git a/4.人工智能/4.6.5.5行人重识别(ReID).md b/4.人工智能/4.6.5.5行人重识别(ReID).md index 1e252a4..c3f0e87 100644 --- a/4.人工智能/4.6.5.5行人重识别(ReID).md +++ b/4.人工智能/4.6.5.5行人重识别(ReID).md @@ -8,10 +8,10 @@ 该任务目前在学术上是检索出不同摄像头下的相同行人图片,同时数据集中只有人的全身照,如下图所示。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ReID1.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ReID1.png) 但是实际上在实际应用中的时候会和检测结合,简单来说先框出目标后分类,如下图所示。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ReID2.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ReID2.png) 这个方向做的比较的奇怪,该模块只做整体性介绍,同时希望学习该模块的你对经典网络有所了解。 diff --git a/4.人工智能/4.6.6.1NLP领域任务(研究目标).md b/4.人工智能/4.6.6.1NLP领域任务(研究目标).md index 28f933c..e729a12 100644 --- a/4.人工智能/4.6.6.1NLP领域任务(研究目标).md +++ b/4.人工智能/4.6.6.1NLP领域任务(研究目标).md @@ -4,25 +4,25 @@ 分类 (text classification): 给一句话或者一段文本,判断一个标签。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/PxE3b05ApofzZ1x8u49cirdUnye.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PxE3b05ApofzZ1x8u49cirdUnye.png) 图 2:分类 (text classification) 蕴含 (textual entailment): 给一段话,和一个假设,看看前面这段话有没有蕴含后面的假设。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/OuhabfzABoqxQxxS1n1cPLTinKb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/OuhabfzABoqxQxxS1n1cPLTinKb.png) 图 3:蕴含 (textual entailment) 相似 (Similarity): 判断两段文字是否相似。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ByeFbxTfToxFlgxh6xmcIKeRnzd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ByeFbxTfToxFlgxh6xmcIKeRnzd.png) 图 4:相似 (Similarity) 多选题 (Multiple Choice): 给个问题,从 N 个答案中选出正确答案。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ZYgybsj5dol1Ifx96Koc6SRpnmc.jpeg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ZYgybsj5dol1Ifx96Koc6SRpnmc.jpeg) 图 5:多选题 (Multiple Choice) diff --git a/4.人工智能/4.6.6.2.2.3推荐系统实例.md b/4.人工智能/4.6.6.2.2.3推荐系统实例.md index c603636..c2fd453 100644 --- a/4.人工智能/4.6.6.2.2.3推荐系统实例.md +++ b/4.人工智能/4.6.6.2.2.3推荐系统实例.md @@ -1,6 +1,6 @@ # 推荐系统的外围架构 -![推荐系统外围架构图](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/推荐系统外围架构图.png) +![推荐系统外围架构图](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/推荐系统外围架构图.png)
推荐系统外围架构图
@@ -22,7 +22,7 @@ 若是将推荐系统的任务细分,可以结合现实实际情况:将最新加入的物品推荐给用户;商业上需要宣传的物品推荐给用户;为用户推荐不同种类的物品。 **复杂的特征和情况不同的任务**会让推荐系统变得非常复杂,所以推荐系统的架构为了方便考虑,采用多个不同的推荐引擎组成,每个推荐引擎专门负责某一类特征和一种任务,而推荐系统再将推荐引擎的结果按照一定的优先级合并,排序并返回给UI系统。 -![推荐系统的架构图](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/推荐系统的架构图.png) +![推荐系统的架构图](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/推荐系统的架构图.png)
推荐系统的架构
如上图所示。 @@ -38,7 +38,7 @@ - 推荐列表筛选、过滤、重排列部分 -![推荐引擎的架构](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/推荐引擎的架构.png) +![推荐引擎的架构](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/推荐引擎的架构.png) 以上为推荐引擎的架构图。 diff --git a/4.人工智能/4.6.6.2.2.4利用用户行为数据.md b/4.人工智能/4.6.6.2.2.4利用用户行为数据.md index b29e6b8..d49ef7d 100644 --- a/4.人工智能/4.6.6.2.2.4利用用户行为数据.md +++ b/4.人工智能/4.6.6.2.2.4利用用户行为数据.md @@ -179,7 +179,7 @@ $$Preference(u,i)=r_{ui}=p^T_uq_i=\sum^F_{f=1}{p_{u,k}q_{i,k}}$$ 在研究图模型之前,需要用已有的数据生成一个图,设二元组 $(u,i)$ 表示用u对于物品 i 产生过行为。令 $G(V,E)$ 表示用户物品二分图,其中$V=V_U\cup V_I$ 由用户顶点集合和物品顶点集合组成,$E$ 是边的集合。对于数据集中的二元组 $(u,i)$ 图中都会有对应的边 $e(v_u,v_i)\in E$ 如下图所示。 -![用户物品二分图模型](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/用户物品二分图模型.png) +![用户物品二分图模型](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/用户物品二分图模型.png) ### 基于图的推荐算法 diff --git a/4.人工智能/4.6.6.2.3序列化推荐.md b/4.人工智能/4.6.6.2.3序列化推荐.md index 312ee80..3c0065f 100644 --- a/4.人工智能/4.6.6.2.3序列化推荐.md +++ b/4.人工智能/4.6.6.2.3序列化推荐.md @@ -10,5 +10,5 @@

而SRSs则是将用户和商品的交互建模为一个动态的序列并且利用序列的依赖性来活捉当前和最近用户的喜好。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnolggxKhDZDBzIFPIaDFfhc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnolggxKhDZDBzIFPIaDFfhc.png) diff --git a/4.人工智能/4.6.6.2推荐系统.md b/4.人工智能/4.6.6.2推荐系统.md index b7d488b..6fa4dd1 100644 --- a/4.人工智能/4.6.6.2推荐系统.md +++ b/4.人工智能/4.6.6.2推荐系统.md @@ -4,7 +4,7 @@ 如下图是阿里巴巴著名的“千人千面”推荐系统 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3bdrD08wpaYhL59ezDukuc.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3bdrD08wpaYhL59ezDukuc.jpg) 还有短视频应用用户数量的急剧增长,这背后,视频推荐引擎发挥着不可替代的作用 diff --git a/4.人工智能/4.6.6.3知识图谱.md b/4.人工智能/4.6.6.3知识图谱.md index badb06c..dca6173 100644 --- a/4.人工智能/4.6.6.3知识图谱.md +++ b/4.人工智能/4.6.6.3知识图谱.md @@ -42,4 +42,4 @@ 在成功搭建起知识图谱这个数据库后,接下来就是最重要的一步了,让计算机理解——表示学习。目前这个方向,最重要的就是向量化,将节点和关系全部向量化,一方面有向量的平移不变性的好处,另一方面也方便计算,在从中穿插点图论的相关知识,例如将知识图谱看成特大号异构图进行处理。不过这方面方向太多,难以一一列举。 - [https://www.cnblogs.com/fengwenying/default.html?page=5](https://www.cnblogs.com/fengwenying/default.html?page=5) 胡萝不青菜的博客 -- [https://space.bilibili.com/497998686?spm_id_from=333.337.0.0](https://space.bilibili.com/497998686?spm_id_from=333.337.0.0) up 主骰子 AI,知识图谱在推荐系统上的利用 +- [up主 骰子 AI](https://space.bilibili.com/497998686?spm_id_from=333.337.0.0) up 主 骰子 AI,知识图谱在推荐系统上的利用 diff --git a/4.人工智能/4.6.7.1VIT.md b/4.人工智能/4.6.7.1VIT.md index 7a0e16c..ef5c653 100644 --- a/4.人工智能/4.6.7.1VIT.md +++ b/4.人工智能/4.6.7.1VIT.md @@ -18,7 +18,7 @@ ## 模型详解 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn1wqKtwBc6MCJDm7ehvhXac.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn1wqKtwBc6MCJDm7ehvhXac.png) ### 模型主题结构 @@ -51,9 +51,9 @@ 例如 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn1szLG4Y4s0UkY3kkW18Xoc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn1szLG4Y4s0UkY3kkW18Xoc.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnv2inISAGi2xOauc3pxKpCb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnv2inISAGi2xOauc3pxKpCb.png) 其中该张图片的编码为[0.5,0.6,0.3,....] @@ -70,4 +70,4 @@ ## 视频 -https://www.bilibili.com/video/BV15P4y137jb \ No newline at end of file + diff --git a/4.人工智能/4.6.7.2BERT.md b/4.人工智能/4.6.7.2BERT.md index 09fbc71..b28e205 100644 --- a/4.人工智能/4.6.7.2BERT.md +++ b/4.人工智能/4.6.7.2BERT.md @@ -30,13 +30,13 @@ mlp 的重点和创新并非它的模型结构,而是它的训练方式,前 BERT 模型的输入就是上面三者的和,如图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngc1a7cWapQA9rSLXYqUvkf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngc1a7cWapQA9rSLXYqUvkf.png) ## 模型结构 简单来说,BERT 是 transformer编码器的叠加,也就是下图左边部分。这算一个 block。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPg8594YzCdnX6KZxpEYYod.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPg8594YzCdnX6KZxpEYYod.png) 说白了就是一个 多头自注意力=>layer-norm=> 接 feed forward(其实就是 mlp)=>layer-norm,没有什么创新点在这里。因为是一个 backbone 模型,它没有具体的分类头之类的东西。输出就是最后一层 block 的输出。 @@ -74,6 +74,8 @@ BERT 因为是以完型填空训练的,因此不能用于文本生成任务, # 相关资料: -李沐的【BERT 论文逐段精读【论文精读】】 [https://www.bilibili.com/video/BV1PL411M7eQ/?share_source=copy_web&vd_source=59df19b7fca15c3fb440b91c21605fc6](https://www.bilibili.com/video/BV1PL411M7eQ/?share_source=copy_web&vd_source=59df19b7fca15c3fb440b91c21605fc6) +李沐的【BERT 论文逐段精读【论文精读】】https://www.bilibili.com/video/BV1PL411M7eQ + + 原论文:[https://arxiv.org/pdf/1810.04805v2](https://arxiv.org/pdf/1810.04805v2) diff --git a/4.人工智能/4.6.7.3MAE.md b/4.人工智能/4.6.7.3MAE.md index 3f34265..45f7ac5 100644 --- a/4.人工智能/4.6.7.3MAE.md +++ b/4.人工智能/4.6.7.3MAE.md @@ -28,7 +28,7 @@ cv 领域,其实预训练模型早已推广,一般是在 imagenet 上进行 在这里,作者为了加大任务的难度,扩大了被 mask 掉的比例,避免模型只学到双线性插值去修补缺的图像。作者把 75% 的 patch 进行 mask,然后放入模型训练。从下图可以看出,被 mask 的块是不进行编码的,这样也可以降低计算量,减少成本。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnd7HTEFOiJxVQ3jtOpzK4ie.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnd7HTEFOiJxVQ3jtOpzK4ie.png) 在被保留的块通过编码器后,我们再在原先位置插入只包含位置信息的 mask 块,一起放入解码器。 @@ -38,12 +38,14 @@ cv 领域,其实预训练模型早已推广,一般是在 imagenet 上进行 下面是原论文给的训练结果,可以看到效果是很惊人的。(有些图我脑补都补不出来) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPWO0VWbPvCE537tf6MWu4e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPWO0VWbPvCE537tf6MWu4e.png) # 相关资料 更具体的比如模型性能对比最好还是去看原论文或者李沐老师的讲解 -李沐【MAE 论文逐段精读【论文精读】】 [https://www.bilibili.com/video/BV1sq4y1q77t/?share_source=copy_web&vd_source=59df19b7fca15c3fb440b91c21605fc6](https://www.bilibili.com/video/BV1sq4y1q77t/?share_source=copy_web&vd_source=59df19b7fca15c3fb440b91c21605fc6) +李沐【MAE 论文逐段精读【论文精读】】 https://www.bilibili.com/video/BV1sq4y1q77t + + 原论文:[https://arxiv.org/pdf/2111.06377v2.pdf](https://arxiv.org/pdf/2111.06377v2.pdf) diff --git a/4.人工智能/4.6.7Transformer.md b/4.人工智能/4.6.7Transformer.md index 47c8ecb..f03dcbf 100644 --- a/4.人工智能/4.6.7Transformer.md +++ b/4.人工智能/4.6.7Transformer.md @@ -38,7 +38,9 @@ 论文的优秀讲解 -[Transformer 中 Self-Attention 以及 Multi-Head Attention 详解_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV15v411W78M?spm_id_from=333.337.search-card.all.click&vd_source=2cb6252f9211ae9d29cf1f76f0aea8d7) +[Transformer 中 Self-Attention 以及 Multi-Head Attention 详解_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV15v411W78M) + + 除此之外就是相关代码,不要求你可以完全自己复现,但是要保证非常重要的知识都懂 diff --git a/4.人工智能/4.6.8.1前言.md b/4.人工智能/4.6.8.1前言.md index 91210d0..697999b 100644 --- a/4.人工智能/4.6.8.1前言.md +++ b/4.人工智能/4.6.8.1前言.md @@ -24,7 +24,7 @@ 直观来讲,我们把特征的向量进行一下归一化,它们就分布在一个超球面上。简单起见,我们先看 3 维向量 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJ6HpIJqxJuxiz7Cw5GopSh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJ6HpIJqxJuxiz7Cw5GopSh.png) 我们通过正样本(跟拿到的特征应当相近的另一个特征)与负样本(反之)的对比,使得 diff --git a/4.人工智能/4.6.8.2Inst Disc.md b/4.人工智能/4.6.8.2Inst Disc.md index 108f14f..3d6e134 100644 --- a/4.人工智能/4.6.8.2Inst Disc.md +++ b/4.人工智能/4.6.8.2Inst Disc.md @@ -8,7 +8,7 @@ 作者团队认为,让这些猎豹,雪豹的标签相互接近(指互相在判别时都排名靠前)的原因并不是它们有相似的标签,而是它们有相似的图像特征。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnrR3eFvOSKYRH8Ni0dvHYkc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnrR3eFvOSKYRH8Ni0dvHYkc.png) ## 个体判别任务 @@ -16,7 +16,7 @@ 于是他们把每一个图片当作一个类别,去跟其他的图片做对比,具体模型如下 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPNukes2FlNwUFSKiqIJEbd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPNukes2FlNwUFSKiqIJEbd.png) 先介绍一下模型结构: @@ -48,11 +48,11 @@ A 是起始点,B 是第一次更新后的点,C 是第二次更新后的点 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5zfD155Joy1eD5CvbZXZnc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5zfD155Joy1eD5CvbZXZnc.png) 而在我们刚刚提到的动量更新里,它的公式可以概括为: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTLEK31rFmuRo2MOWGRBoYe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTLEK31rFmuRo2MOWGRBoYe.png) m 表示动量,k 是新的特征,q 是上一个特征,只要设置小的动量就可以使改变放缓。 diff --git a/4.人工智能/4.6.8.3定义正负样本的方式.md b/4.人工智能/4.6.8.3定义正负样本的方式.md index 11e65b6..c62f67d 100644 --- a/4.人工智能/4.6.8.3定义正负样本的方式.md +++ b/4.人工智能/4.6.8.3定义正负样本的方式.md @@ -4,7 +4,7 @@ # 1.时序性定义(生成式模型) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnC10uzdj0G0BJPlUZKFIi7C.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnC10uzdj0G0BJPlUZKFIi7C.png) 这是处理音频的一个例子,给模型 t 时刻以前的信息,让它抽取特征并对后文进行预测,真正的后文作为正样本,负样本当然是随便选取就好啦。 @@ -24,4 +24,4 @@ (这篇论文我准备开个新坑放着了,因为说实话不算对比学习,算多模态) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnssaOVvp73SVIrzVvZPr1Je.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnssaOVvp73SVIrzVvZPr1Je.png) diff --git a/4.人工智能/4.6.8.4MoCo.md b/4.人工智能/4.6.8.4MoCo.md index 3288838..1d633dd 100644 --- a/4.人工智能/4.6.8.4MoCo.md +++ b/4.人工智能/4.6.8.4MoCo.md @@ -24,7 +24,7 @@ NCE 把所有负样本都视作一样的,但实际上负样 右边就是 memory bank 啦 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnKMjslIshEA5SFqc8rbmqoe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnKMjslIshEA5SFqc8rbmqoe.png) # MoCo 做出的改进 @@ -38,7 +38,7 @@ NCE 把所有负样本都视作一样的,但实际上负样 动量编码器是独立于原编码器的一个编码器,它的参数是根据原编码器动量更新的,k 和 q 就是指代全部参数了 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnFLSP9PtQRkgYgcMwM4idog.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnFLSP9PtQRkgYgcMwM4idog.png) 这样的话就是解码器在缓慢更新,比对特征使用动量更新要更有连续性。 @@ -48,7 +48,7 @@ NCE 把所有负样本都视作一样的,但实际上负样 [(什么?你看到这了还不会交叉熵?戳这里)](https://zhuanlan.zhihu.com/p/149186719) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnWI38bkSzeCe5TtVTBCrNh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnWI38bkSzeCe5TtVTBCrNh.png) q·k 其实就是各个特征(因为那时候用的都是 transformer 了,这里就是 trnasformer 里的 k 和 q) @@ -56,9 +56,9 @@ q·k 其实就是各个特征(因为那时候用的都是 transformer 了, T 越大,损失函数就越对所有负样本一视同仁,退化为二分类的 NCEloss;T 越小,损失函数就越关注一些难分类的特征,但有时候会出现两张其实都是猫猫的图片,你硬要让模型说猫猫跟猫猫不一样,这也不太好,这个参数要根据数据集情况适中调整。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhuabU9XzXmVQfu0ruENs83.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhuabU9XzXmVQfu0ruENs83.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnsGpqCNePn2G34GnJqPieBf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnsGpqCNePn2G34GnJqPieBf.png) 上面那张是 T 较大的情况,下面是 T 较小的情况(x 轴是各个类别,y 轴是分类得分) diff --git a/4.人工智能/4.6.8.5SimCLR.md b/4.人工智能/4.6.8.5SimCLR.md index 58696f0..07c49fa 100644 --- a/4.人工智能/4.6.8.5SimCLR.md +++ b/4.人工智能/4.6.8.5SimCLR.md @@ -6,7 +6,7 @@ x 是输入的图片,它经过两种不同的数据增强得到 xi 和 xj 两个正样本,而同一个 mini-batch 里的所有其他样本都作为负样本。说白了还是个体判别任务 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnq5TYzSltn6CsPM3Bn3xxAb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnq5TYzSltn6CsPM3Bn3xxAb.png) 左右的f 都是编码器,并且是完全一致共享权重的,可以说是同一个。 @@ -18,7 +18,7 @@ x 是输入的图片,它经过两种不同的数据增强得到 xi 和 xj 两 下面这个是更加具体的流程图 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnj3FZsRiJbWsKW07b9B8Fkb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnj3FZsRiJbWsKW07b9B8Fkb.png) # 总结 diff --git a/4.人工智能/4.6.8.6SwAV.md b/4.人工智能/4.6.8.6SwAV.md index 53db0b4..bbfd152 100644 --- a/4.人工智能/4.6.8.6SwAV.md +++ b/4.人工智能/4.6.8.6SwAV.md @@ -20,7 +20,7 @@ 下图左边是常规的对比学习(比如 SimCLR)的结构,右图是 SWAV 的结构,不难看出多了一个叫 prototypes 的东西。这个东西其实是聚类中心向量所构成的矩阵。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnGteJZelEtVqBFwwukw7c8g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnGteJZelEtVqBFwwukw7c8g.png) 下面的内容可能有些理解上的难度(反正我第一次听讲解的时候就云里雾里的),我会尽可能直白地描述这个过程。 @@ -40,7 +40,7 @@ 而我们的优化要采用 [K-means](https://zhuanlan.zhihu.com/p/78798251)(不懂可以看这里)的类似做法,先对聚类中心进行优化,再对特征进行优化。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnKe4DzDfdNbhhHowdE4BJEf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnKe4DzDfdNbhhHowdE4BJEf.png) so,why?相信你现在肯定是一脸懵,不过别急,希望我能为你讲懂。 diff --git a/4.人工智能/4.6.8.7BYOL.md b/4.人工智能/4.6.8.7BYOL.md index 1c4afd7..fd53f56 100644 --- a/4.人工智能/4.6.8.7BYOL.md +++ b/4.人工智能/4.6.8.7BYOL.md @@ -18,7 +18,7 @@ predictor的模型结构就是跟 z 一样的mlp 层。它的任务是通过紫色的特征去预测粉色的特征。也就是说它的代理任务换成了生成式。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcne7eizRhw5GKRSpF40KcMEh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcne7eizRhw5GKRSpF40KcMEh.png) 而具体的损失只有预测特征和真实特征的损失,用的是MSEloss。 @@ -32,7 +32,7 @@ ### 有篇博客在复现 BYOL 时,不小心没加这个 BN 层,导致模型直接摆烂。那么 BN 到底藏着什么呢? -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn8wfpZCjOD2lFsM03N5vatl.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8wfpZCjOD2lFsM03N5vatl.png) 我们得先来回顾一下 BN 做了什么。 @@ -52,7 +52,7 @@ BN 根据批次的均值和方差进行归一化   这篇论文叫 BYOL works even without batch statistics,即在没有 BN 的时候 BYOL 照样能工作,详细的消融实验结果如下表所示 : -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcncmJWb99mlUUIFTPjGoCqYb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcncmJWb99mlUUIFTPjGoCqYb.png) BN 非常关键:只要是 `projector`(SimCLR 提出的 mlp)中没有 BN 的地方,SimCLR 性稍微下降;但是 BYOL 全都模型坍塌了。 diff --git a/4.人工智能/4.6.8.8SimSiam.md b/4.人工智能/4.6.8.8SimSiam.md index 88bc544..98fe5f1 100644 --- a/4.人工智能/4.6.8.8SimSiam.md +++ b/4.人工智能/4.6.8.8SimSiam.md @@ -20,7 +20,7 @@ BYOL 之后,大家都发现对比学习是靠许许多多的小 trick 和技 虽然看起来只有左边预测右边,其实右边也有一个 predictor 去预测左边的特征,两边是对称的,左右的优化有先后顺序。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnWk5QzvbsSNlyV4B7SMt5zb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnWk5QzvbsSNlyV4B7SMt5zb.png) 结构其实没什么特殊的地方,主要讲讲思想。 @@ -44,7 +44,7 @@ BYOL 之后,大家都发现对比学习是靠许许多多的小 trick 和技 这是作者总结的所有”孪生网络“的模型结构,很精炼。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn8OWwnN8ae2vUVttqlu5O8e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8OWwnN8ae2vUVttqlu5O8e.png) 下面是这些网络训练结果的对比,也列出了它们分别有哪些 trick(用的是分类任务) @@ -52,8 +52,8 @@ BYOL 之后,大家都发现对比学习是靠许许多多的小 trick 和技 负样本 动量编码器 训练轮数 ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3uizAKNhAxQryOwvHxFSDb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3uizAKNhAxQryOwvHxFSDb.png) 具体结果还是图片比较直观( -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnqdfrOIxim4wBayDDBitHCd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnqdfrOIxim4wBayDDBitHCd.png) diff --git a/4.人工智能/4.6.8.9MoCo v3.md b/4.人工智能/4.6.8.9MoCo v3.md index 8613747..f849189 100644 --- a/4.人工智能/4.6.8.9MoCo v3.md +++ b/4.人工智能/4.6.8.9MoCo v3.md @@ -10,7 +10,7 @@ MoCo v3,它缝合了 MoCo 和 SimSiam,以及新的骨干网络 VIT。 可能因为和前面的工作太像了,作者就没有给模型总览图,我们借 MoCo 的总览图来讲 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhxg4HZw2NExIbYZxQGISze.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhxg4HZw2NExIbYZxQGISze.png) 总体架构其实没有太多变化,还是 memory bank 的结构,右边也还是动量编码器,不过加入了 SimCLR 提出的 projection head(就是额外的那层 mlp),并且在对比上用了 SimSiam 的预测头对称学习方式。具体也不展开了,都是老东西缝合在一起。 @@ -18,11 +18,11 @@ MoCo v3,它缝合了 MoCo 和 SimSiam,以及新的骨干网络 VIT。 作者在用 VIT 做骨干网络训练的时候,发现如下问题: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnMMhbVk6wc81H8BSoack7Mg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnMMhbVk6wc81H8BSoack7Mg.png) 在使用 VIT 训练的时候,batchsize 不算太大时训练很平滑,但是一旦 batchsize 变大,训练的图像就会出现如上图这样的波动。于是作者去查看了每一层的梯度,发现问题出在VIT 的第一层线性变换上。也就是下图中的粉色那个层,把图片打成 patch 后展平做的线性变换。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniBkiypcv6IQbxr9D6JukOb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniBkiypcv6IQbxr9D6JukOb.png) 在这一层中,梯度会出现波峰,而正确率则会突然下跌。 diff --git a/4.人工智能/4.6.9.3基本概念介绍.md b/4.人工智能/4.6.9.3基本概念介绍.md index 9daafb4..c4c7761 100644 --- a/4.人工智能/4.6.9.3基本概念介绍.md +++ b/4.人工智能/4.6.9.3基本概念介绍.md @@ -4,13 +4,13 @@ ## 强化学习的基本过程 前面已经介绍过强化学习的核心过程,在于智能体与环境进行交互,通过给出的奖励反馈作为信号学习的过程。简单地用图片表示如下: -![](static/4.6.9.3.1.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/4.6.9.3.1.png) 正是在这个与环境的交互过程中,智能体不断得到反馈,目标就是尽可能地让环境反馈的奖励足够大。 ## 强化学习过程的基本组成内容 为了便于理解,我们引入任天堂经典游戏——[新超级马里奥兄弟U](https://www.nintendoswitch.com.cn/new_super_mario_bros_u_deluxe/pc/index.html),作为辅助理解的帮手。作为一个2D横向的闯关游戏,它的状态空间和动作空间无疑是简单的。 -![](static/4.6.9.3.2.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/4.6.9.3.2.png) 1.智能体(Agent):它与环境交互,可以观察到环境并且做出决策,然后反馈给环境。在马里奥游戏中,能操控的这个马里奥本体就是智能体。 @@ -22,7 +22,7 @@ 5.策略(Policy):智能体采取动作的规则,分为**确定性策略**与**随机性策略**。确定性策略代表在相同的状态下,智能体所输出的动作是唯一的。而随机性策略哪怕是在相同的状态下,输出的动作也有可能不一样。这么说有点过于抽象了,那么请思考这个问题:在下面这张图的环境中,如果执行确定性策略会发生什么?(提示:着重关注两个灰色的格子) -![](static/4.6.9.3.3.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/4.6.9.3.3.png) 因此,在强化学习中我们一般使用随机性策略。随机性策略通过引入一定的随机性,使环境能够被更好地探索。同时,如果策略固定——你的对手很容易能预测你的下一步动作并予以反击,这在博弈中是致命的。 随机性策略$\pi$定义如下: diff --git a/4.人工智能/4.8数据分析.md b/4.人工智能/4.8数据分析.md index bc292b9..317b4e1 100644 --- a/4.人工智能/4.8数据分析.md +++ b/4.人工智能/4.8数据分析.md @@ -4,11 +4,10 @@ author:zzm 讲讲某个人在大一的悲惨经历来为大家串起来一个精简的数据科学工作包括了哪些步骤,同时给各位介绍一些优质的教程 -同时,这章内容将详细阐述[与人合作的生死疲劳](https://www.bilibili.com/video/BV1494y1o7jp/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=2cb6252f9211ae9d29cf1f76f0aea8d7) +同时,这章内容将详细阐述[与人合作的生死疲劳](../1.杭电生存指南/1.5小组作业避雷指南.md) # 悲惨世界 - ::: danger 若有雷同,纯属瞎编~~根据真实事件改编 后人哀之而不鉴之,亦使后人而复哀后人也! @@ -219,7 +218,9 @@ The End~~~~~~~~~~ 数据科学是当今计算机和互联网领域最热门的话题之一。直到今天,人们已经从应用程序和系统中收集了相当大量的数据,现在是分析它们的时候了。从数据中产生建议并创建对未来的预测。[在这个网站中](https://www.quora.com/Data-Science/What-is-data-science),您可以找到对于数据科学的更为精确的定义。 -同时,我向各位推荐一个非常有趣的科普视频想你讲解数据分析师到底在做什么:[怎么会有这么性感的职业吶?](https://www.bilibili.com/video/BV1ZW4y1x7UU/?spm_id_from=333.999.0.0&vd_source=2cb6252f9211ae9d29cf1f76f0aea8d7) +同时,我向各位推荐一个非常有趣的科普视频想你讲解数据分析师到底在做什么:[怎么会有这么性感的职业吶?](https://www.bilibili.com/video/BV1ZW4y1x7UU) + + # Datawhale的生态体系 diff --git a/4.人工智能/4.人工智能.md b/4.人工智能/4.人工智能.md index 43e9297..39b2a37 100644 --- a/4.人工智能/4.人工智能.md +++ b/4.人工智能/4.人工智能.md @@ -73,7 +73,9 @@ 但是,现在我会说,也许当时的我真的错了。我并没有思考过所谓人类的智能和AI的智能的关系,也忽视了当某一个趋势或方向发展到极致之后,量变会引发什么样的质变。 -[推荐大伙可以看看这个](https://www.bilibili.com/video/BV11c41157aU/?spm_id_from=333.999.0.0&vd_source=2cb6252f9211ae9d29cf1f76f0aea8d7) +[推荐大伙可以看看这个](https://www.bilibili.com/video/BV11c41157aU) + + ## 看山是山 > 孟德尔出生于奥地利帝国(今天的捷克共和国)的西里西亚,是现代遗传学的创始人。尽管几千年来农民就知道动植物的杂交可以促进某些理想的性状,但孟德尔在1856年至1863年之间进行的豌豆植物实验建立了许多遗传规则,现称为孟德尔定律。 diff --git a/4.人工智能/FunRec概述.md b/4.人工智能/FunRec概述.md index 54e4b11..af1441b 100644 --- a/4.人工智能/FunRec概述.md +++ b/4.人工智能/FunRec概述.md @@ -2,7 +2,7 @@ # 序言 -这是一篇datawhale的相当优秀的推荐系统教程,因此特别请相先生废了九牛二虎之力把FunRec的半套内容,较为完整的移植到了本wiki中。 +这是一篇datawhale的相当优秀的推荐系统教程,因此特别废了九牛二虎之力把FunRec的半套内容,较为完整的移植到了本wiki中。 ## 为什么要专门移植这篇? diff --git a/4.人工智能/SRT.md b/4.人工智能/SRT.md new file mode 100644 index 0000000..e3f6dce --- /dev/null +++ b/4.人工智能/SRT.md @@ -0,0 +1,15 @@ +# SRT社团介绍 + +SRT 社团,全名 Student Research Trainning,旨在通过真正的科研活动培养本科生的科研能力。SRT 社团依托 [智能信息处理处理实验室](http://iipl.net.cn/index/list_team.aspx)(IIPL),主要研究方向围绕人工智能,具体来说,包括:计算机视觉,多模态,3D 视觉,Slam 等领域。有充足且优质的显卡资源,工位资源,以及学长学姐,老师的指导。 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Am3Iwb1ggnyUkB1b9osh.png) + +社团每年都在全校范围为智能信息处理实验室招收,培养本科生。本科生进入实验室后跟随导师独立或合作进行科研项目,发表论文。我们届时会在自动化以及通信学院进行宣讲招新,新生在经过1-2学期的培养后,能够具备独立科研的能力。在正式进入实验室前,可以暂时使用社团的工位,进入实验室后可以拥有独立工位以及显卡资源。社团的实验室在科技馆五楼,欢迎大家常来 ~ + +对于每一位新生,我们将教授包括但不限于:PyTorch,深度学习基础,卷积神经网络,Transformer 的知识和使用它们的能力。届时将会有定期随讲授内容发布的任务,完成任务,掌握相应技术且通过考核的同学在与导师交流后可以正式进入实验室。 + +同时,实验室推荐社团的本科生到杭电丽水研究院实习。 + +当然,在学习人工智能模块时遇到任何问题也都可以咨询我们,我们将在能力范围内尽力给各位解答! + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/srt2023newqqgroup.png) diff --git a/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md b/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md index 53ae82d..af8dd6f 100644 --- a/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md +++ b/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md @@ -77,8 +77,8 @@ OK, 到这里就把MMOE的故事整理完了,模型结构本身并不是很 那么, 为什么多任务学习为什么是有效的呢? 这里整理一个看到比较不错的答案: >多任务学习有效的原因是引入了归纳偏置,两个效果: -> - 互相促进: 可以把多任务模型之间的关系看作是互相先验知识,也称为归纳迁移,有了对模型的先验假设,可以更好提升模型的效果。解决数据稀疏性其实本身也是迁移学习的一个特性,多任务学习中也同样会体现 ->- 泛化作用:不同模型学到的表征不同,可能A模型学到的是B模型所没有学好的,B模型也有其自身的特点,而这一点很可能A学不好,这样一来模型健壮性更强 +> - 互相促进: 可以把多任务模型之间的关系看作是互相 先验知识,也称为归纳迁移,有了对模型的先验假设,可以更好提升模型的效果。解决数据稀疏性其实本身也是迁移学习的一个特性,多任务学习中也同样会体现 +> - 泛化作用:不同模型学到的表征不同,可能A模型学到的是B模型所没有学好的,B模型也有其自身的特点,而这一点很可能A学不好,这样一来模型健壮性更强 ## MMOE模型的简单复现之多任务预测 ### 模型概貌 diff --git a/4.人工智能/code/Read.md b/4.人工智能/code/Read.md deleted file mode 100644 index 9bd0f06..0000000 --- a/4.人工智能/code/Read.md +++ /dev/null @@ -1 +0,0 @@ -这里存放示例代码和作业 diff --git a/4.人工智能/static/Am3Iwb1ggnyUkB1b9osh.png b/4.人工智能/static/Am3Iwb1ggnyUkB1b9osh.png new file mode 100644 index 0000000..25693bc Binary files /dev/null and b/4.人工智能/static/Am3Iwb1ggnyUkB1b9osh.png differ diff --git a/4.人工智能/static/srt2023newqqgroup.png b/4.人工智能/static/srt2023newqqgroup.png new file mode 100644 index 0000000..7e42dd3 Binary files /dev/null and b/4.人工智能/static/srt2023newqqgroup.png differ diff --git a/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md b/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md index ed12687..1faca46 100644 --- a/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md +++ b/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md @@ -1,6 +1,6 @@ # 嵌入式是什么?可以吃吗? -> Author:肖扬 +> Author:肖扬 # 概念引入与讲解 @@ -8,7 +8,7 @@ 这不是因为那些人没有完全入门嵌入式,而是因为在嵌入式的学习过程中你会发现,它的概念会越来越大,逐渐模糊了你的认知,就拿一张某乎上的照片而言: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcny07MPlh99IIS5yxAdL4iDb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcny07MPlh99IIS5yxAdL4iDb.png) 可见嵌入式的概念之广。 @@ -20,7 +20,7 @@ 这玩意儿大家估计不陌生,比如你去酒店里,也许会有一个可以坐电梯上下楼层来完成特定任务的机器人(说实话高二在某季酒店第一次见的时候还蛮新鲜) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn99MPmacSrXPkIgQ13FLABc.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn99MPmacSrXPkIgQ13FLABc.jpg) 而它也是一个嵌入式产品(或者说它们)。 diff --git a/5.富有生命的嵌入式/5.2New meaning of C.md b/5.富有生命的嵌入式/5.2New meaning of C.md index dc20fd2..2389768 100644 --- a/5.富有生命的嵌入式/5.2New meaning of C.md +++ b/5.富有生命的嵌入式/5.2New meaning of C.md @@ -83,15 +83,15 @@ ORG 0BH 下面引入一个 STM32F1 系列的 GPIO 部分寄存器图(来源正点原子提供的 F1 参考手册): -![](static/MyDMbeCKLowC1Mx7Q6Ec9BLPn4g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MyDMbeCKLowC1Mx7Q6Ec9BLPn4g.png) -![](static/LJ1SbFfv6oUIgtx8CstcbWTNnRg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LJ1SbFfv6oUIgtx8CstcbWTNnRg.png) 如果我们想做一个简单的实验-驱动一个 LED 灯(假设此 LED 灯以 PB5 为输出驱动口),在对相应的 RCC 时钟等配置之外,最重要的是对相应的 GPIO 口的配置,首先我们查阅其寄存器的物理起始地址: -![](static/CZ3cbiEhsoWDgJxhwXIcpUkAnMg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CZ3cbiEhsoWDgJxhwXIcpUkAnMg.png) -![](static/HTFUbsQCNouQVzx0QYiciQWOnZf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HTFUbsQCNouQVzx0QYiciQWOnZf.png) 可见 GPIO 外设通过 APB2 总线进行地址定位与传输数据的,所以我们要控制 PB5 的话首先需要定位到对应的地址: diff --git a/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!.md b/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!.md index fbfd3f5..a5ee4b4 100644 --- a/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!.md +++ b/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!.md @@ -16,13 +16,13 @@ RTOS 中最重要的概念则是“任务”。 我们可以回想一下在 MCU 开发过程中,一般都是在 main 函数里做个 while(1)来完成大部分的处理,将一些相对来说对实时性要求高的函数(如 PID 控制器)扔到定时器中断当中,即应用程序是个无限的循环,是个单任务系统(前后台系统),while(1)作为后台,中断服务函数作为前台。这里采用了“正点原子”的一张图: -![](static/boxcnFySF1Cd02I052V0a9glH1c.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnFySF1Cd02I052V0a9glH1c.png) 而 RTOS 则是一个多任务系统,那么它这么做有什么好处呢? 2>1 嘛(乐),实际上在前后台系统中,你的每项 Task 要轮流排队等着上次 Task 执行结束后再进行自己的程序,大大影响了其系统的实时性要求;而 RTOS 中我们把整个 while(1)区分成了很多小任务,并且在表面上看起来这些任务运行起来像是同时进行,实际上是因为任务所需的时间较少导致它看起来像是并行,但这将会带来新的疑问,到底什么任务先执行呢?RTOS 就为此提供了任务的相关 API 接口,赋予任务相应的执行优先级属性,并通过任务调度器来控制任务的执行顺序。这里同样采用了“正点原子”的一张图: -![](static/boxcntQgR61yRboDpyb1bpI10Xp.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcntQgR61yRboDpyb1bpI10Xp.png) 所以,其实可以这么说:RTOS 将整个流程变成了很多个 while(1)【每个任务都是个 while(1)】。 @@ -51,7 +51,8 @@ int main(){ 1、b 站正点原子官方 FreeRTOS 教学(在今年有做全面的更新,比之前讲的更为清晰,难得的优秀入门视频) -[https://www.bilibili.com/video/BV19g411p7UT/?spm_id_from=333.999.0.0&vd_source=6ee6cc25ef1d46409e1f14084644c1f7](https://www.bilibili.com/video/BV19g411p7UT/?spm_id_from=333.999.0.0&vd_source=6ee6cc25ef1d46409e1f14084644c1f7) + + 2、FreeRTOS 官网(官网往往是最适合学习的地方)[www.freertos.org](http://www.freertos.org) @@ -65,7 +66,7 @@ int main(){ 由于硬件技术的飞速发展,针对于机器人软件设计的框架也面临着极大的挑战,而 ROS 的出现无异是所有机器人开发者的福音,因为如果按照以前的制作一个机器人流程来讲,也许你要经历以下步骤:硬件结构搭建、控制处理、相关算法构建等等,但是 ROS 的开源共享模式令其可以在其平台上巧妙利用别人的开源模型完成自己的机器人搭建,也就是说 Ros 的出现打破了原本各个开发者(或团队)闭门造车的开发现象,使得其可以共享优秀的机器人应用软件,换句话说就是提高了机器人研发的软件复用率。(毕竟哪个团队都不可能同时在建图、导航、视觉等机器人应用方面处于顶尖位置) -![](static/boxcnRy7E27xggqNshXX3cu4J5Q.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnRy7E27xggqNshXX3cu4J5Q.png) 由于 ROS 中完成度最高的是 Ubuntu,所以我们建议你以此展开学习,当然你也可以选择 macOS、Debian 等 OS。 @@ -145,13 +146,13 @@ void chatterCallback(const std_msgs::String::ConstPtr& msg) 1、b 站古月居 ROS21 讲(讲的比较浅,但是可以作为入门学习视频,了解整个框架,感兴趣地可以看胡老师的 ROS2 系列视频,毕竟 ROS1 近期已经停更了,要保持不断学习的姿态) -[https://www.bilibili.com/video/BV1zt411G7Vn/?spm_id_from=333.999.0.0&vd_source=6ee6cc25ef1d46409e1f14084644c1f7](https://www.bilibili.com/video/BV1zt411G7Vn/?spm_id_from=333.999.0.0&vd_source=6ee6cc25ef1d46409e1f14084644c1f7) + 提一嘴:很多人学 ROS 就学一个开头-比如就学了古月居的 21 讲,就认为自己已经了解到了 ROS 的大部分内容了(不会有人现在还是纯看视频学习吧),实际上这是非常错误的想法。当你学完了视频的内容后,你甚至可能不会移植 wiki 上的功能包(x_x),甚至不知道如何去开发一个真实的机器人(因为此 21 讲只是理论上的讲解,去做一个虚拟机器人在 gazebo 上运行)。ROS 的学习上需要我们花大量的心思去学会接触新的东西,你们并不能只局限于我提供的推荐学习资料,因为相应的功能包不是一成不变的,而且也不是只有那么几个功能包,当你感受了 ROS 的自主建图、自主导航、机械臂控制、机器学习开发等等等等等等后,你才会发现 ROS 的世界是如此美妙! 2、b 站赵虚左 ROS 课程(讲得细致多了,需要耐心看下去,要是我入门 ROS 的时候有这个视频就好了) -[https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?spm_id_from=333.999.0.0&vd_source=6ee6cc25ef1d46409e1f14084644c1f7](https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?spm_id_from=333.999.0.0&vd_source=6ee6cc25ef1d46409e1f14084644c1f7) + 3、古月居的《ROS 机器人开发实践》(根据国外的《ROS By Example》改编,但是更贴近于入门开发,会有相关功能包更细致的解析) diff --git a/5.富有生命的嵌入式/5.富有生命的嵌入式.md b/5.富有生命的嵌入式/5.富有生命的嵌入式.md index 0f713e6..7c88e20 100644 --- a/5.富有生命的嵌入式/5.富有生命的嵌入式.md +++ b/5.富有生命的嵌入式/5.富有生命的嵌入式.md @@ -1,7 +1,12 @@ # 5.富有生命的嵌入式 -> Author:肖扬 +Author:肖扬 +孵化器实验室 2023 招新群(QQ): 879805955 + +预热 OJ 平台:[OJ 平台(C 语言为主)](http://hdufhq.cn/) + +> 实验室不仅有嵌入式方向,还有硬件、网络 web 开发方向! 在本模块,我们将为你讲述何为嵌入式、如何学嵌入式、如何爱上嵌入式 @@ -11,6 +16,6 @@ > “点星星之火,燃燎原之势,热血芳华,理想当燃” -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3t2GyLQqe4RpGdRtakcwBc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3t2GyLQqe4RpGdRtakcwBc.png) ps:若对此部分讲义有相关疑问或者建议,欢迎 QQ 联系-1213047454 diff --git a/6.计算机安全/6.1.1SQL 注入.md b/6.计算机安全/6.1.1SQL 注入.md index 149456d..d89e491 100644 --- a/6.计算机安全/6.1.1SQL 注入.md +++ b/6.计算机安全/6.1.1SQL 注入.md @@ -2,7 +2,7 @@ Author: `Liki4` from Vidar-Team -Vidar-Team 2022 招新 QQ 群: 865294458(仅向校内开放) +Vidar-Team 2023 招新 QQ 群: 861507440(仅向校内开放) Vidar-Team 官网: [https://vidar.club/](https://vidar.club/) @@ -34,7 +34,7 @@ def check_pass(username, password): 从 `users` 表中查出 `username` 对应的 `password` 的哈希值,将其与用户传入的密码哈希值进行比对,若相等则意味着用户传入的密码与数据库中储存的密码相吻合,于是返回准许登录 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHiNBWN86AR4AvSSsUVwSWb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHiNBWN86AR4AvSSsUVwSWb.png) 那么问题来了,在语句 @@ -144,7 +144,7 @@ mysql> select group_concat(id,username separator '_') from users; 现在我们传入 `Liki4'` 这个字符串 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn8TrpE02fnPV7dFzkmnHiAe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8TrpE02fnPV7dFzkmnHiAe.png) 很遗憾,报错了,这个查询因为 SQL 语句存在语法错误而无法完成。 @@ -154,7 +154,7 @@ mysql> select group_concat(id,username separator '_') from users; 那如果我们传入 `Liki4';#` 这个字符串,那么在拼接后的查询又是什么结果呢 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbAKreqEeZxOYQuQMtZbd9d.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbAKreqEeZxOYQuQMtZbd9d.png) 很显然,`#` 号将原本语句的 `';` 注释掉了 @@ -166,7 +166,7 @@ mysql> select group_concat(id,username separator '_') from users; `raw_sql_danger' UNION SELECT password FROM users WHERE username = 'Liki5';#` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniDohuM3F8FbMqz7YSC0Y5g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniDohuM3F8FbMqz7YSC0Y5g.png) 真是惊人的壮举!我完全不认识这个叫 Liki5 的家伙,但我居然知道了他的密码对应的哈希值! @@ -273,7 +273,7 @@ if __name__ == "__main__": 接下来我们进行一次常规查询 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnpCCmEi6LIKNi0UqEkXfJ8g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnpCCmEi6LIKNi0UqEkXfJ8g.png) 可以看到我们成功从数据库中查出了 `username` 和 `password`,并显示在返回中 @@ -293,7 +293,7 @@ def query(username): ... ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbaW15gnJc1O9Iv9WXqJxPc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbaW15gnJc1O9Iv9WXqJxPc.png) 可以看到,实际执行的语句为 @@ -307,7 +307,7 @@ SELECT * FROM users WHERE username = '123' UNION SELECT 1, 2;#' 构造语句 `123' UNION SELECT DATABASE(), @@version;#` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnDeDp5yPE7W4KX9ByBl9ovh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnDeDp5yPE7W4KX9ByBl9ovh.png) 我们就能看到返回中包含了当前数据库名与当前数据库版本 @@ -317,13 +317,13 @@ SELECT * FROM users WHERE username = '123' UNION SELECT 1, 2;#' > `information_schema` 库是一个 MySQL 内置数据库,储存了数据库中的一些基本信息,比如数据库名,表名,列名等一系列关键数据,SQL 注入中可以查询该库来获取数据库中的敏感信息。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnkwvSnhKBhlHNLOSthgul9d.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnkwvSnhKBhlHNLOSthgul9d.png) 我们可以发现,当前数据库中还存在一张叫 `secret` 的表,让我们偷看一下里面存的是什么 构造语句 `123' UNION SELECT 1, secret_string FROM secret;#` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3kfhJ79ByNML2Z1Q1MwRye.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3kfhJ79ByNML2Z1Q1MwRye.png) 好像得到了什么不得了的秘密 :-) @@ -363,7 +363,7 @@ if __name__ == "__main__": 这样一来我们就只能知道自己是否登录成功,并不能看到查询返回的结果了 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2seUNESHkLC9PYvDp0vFbe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2seUNESHkLC9PYvDp0vFbe.png) 那也就是说,我们无法直观地查看数据库中的数据了,即便查出了不该查的也看不到了 :-( @@ -396,7 +396,7 @@ else: > rlike 是 MySQL 中的一个关键字,是 regex 和 like 的结合体 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJEeAKow3ZhUSvbL4FQXxOh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJEeAKow3ZhUSvbL4FQXxOh.png) 这里实际执行的语句就变成了 @@ -404,13 +404,13 @@ else: SELECT password FROM users WHERE username = 'Liki4' AND if(@@version rlike '^5',1,0); ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJ3jImTQcMUOWJclTACj74e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJ3jImTQcMUOWJclTACj74e.png) ```sql SELECT password FROM users WHERE username = 'Liki4' AND if(@@version rlike '^8',1,0); ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnEDPFbKQ6iaM5WhHWUWmI5d.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnEDPFbKQ6iaM5WhHWUWmI5d.png) 也就是说,当 if 语句中的条件为真时,这个查询才会将 password 查询出来 @@ -480,7 +480,7 @@ if __name__ == "__main__": exp() ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXyMaLh26lkNuAPiQVHuaNg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXyMaLh26lkNuAPiQVHuaNg.png) #### @@ -523,7 +523,7 @@ if __name__ == "__main__": 如果想要让布尔盲注不可用,我们可以做一个假设,假设我们并不知道账户的密码,也就无法通过登陆验证,这个时候就失去了布尔盲注最大的依赖,也就无法得知 if 表达式的真或假了。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndxf4WEQQQEXspS7GwNKI6J.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndxf4WEQQQEXspS7GwNKI6J.png) 但,真的没办法了吗? @@ -600,7 +600,7 @@ if __name__ == "__main__": exp() ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnsStdHC5VmBylyx6S7hakEb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnsStdHC5VmBylyx6S7hakEb.png) ### 基于报错的 SQL 注入 (TODO) @@ -640,7 +640,7 @@ if __name__ == "__main__": main() ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnl67uDDSIdh3J7y7Jxjk0dc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnl67uDDSIdh3J7y7Jxjk0dc.png) 这样一来如果 SQL 语句执行报错的话,错误信息就会被打印出来 @@ -671,9 +671,9 @@ MySQL 8.0 doc: [https://dev.mysql.com/doc/refman/8.0/en/](https://dev.mysql.com/ `Liki4';INSERT INTO users VALUES ('Liki3','01848f8e70090495a136698a41c5b37406968c648ab12133e0f256b2364b5bb5');#` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnrMIc2m6oubxC86CEtw1jMe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnrMIc2m6oubxC86CEtw1jMe.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnVRdntvakiTpt7nP8JhKKfc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnVRdntvakiTpt7nP8JhKKfc.png) INSERT 语句也被成功执行了,向数据库中插入了 Liki3 的数据 @@ -776,7 +776,7 @@ INSERT 语句也被成功执行了,向数据库中插入了 Liki3 的数据 在 GB2312、GBK、GB18030、BIG5、Shift_JIS 等编码下来吃掉 ASCII 字符的方法,可以用来绕过 `addslashes()` `id=0%df%27%20union%20select%201,2,database();` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnaRtyUGC0sX3btnFIgpDCob.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaRtyUGC0sX3btnFIgpDCob.png) ### information_schema 被过滤 @@ -795,7 +795,7 @@ select table_name from mysql.innodb_index_stats where database_name=database select table_name from mysql.innodb_table_stats where database_name=database(); ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbMtjAq8osStjcSbFuIdDSc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbMtjAq8osStjcSbFuIdDSc.png) ##### MySQL 5.7 的新特性 @@ -812,7 +812,7 @@ select table_name from sys.schema_table_statistics_with_buffer where table_schem select table_name from sys.x$schema_table_statistics_with_buffer where table_schema=database(); ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnV68mdIQmovJwczDsOc53gc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnV68mdIQmovJwczDsOc53gc.png) ### 无列名注入 @@ -820,7 +820,7 @@ select table_name from sys.x$schema_table_statistics_with_buffer where table_sch `select a,b from (select 1 as a, 2 as b union select * from users)x;` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnI3jJNlLqq4f7WqRKGEWTeh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnI3jJNlLqq4f7WqRKGEWTeh.png) ## 超脱 MySQL 之外 (TODO) diff --git a/6.计算机安全/6.1Web安全.md b/6.计算机安全/6.1Web安全.md new file mode 100644 index 0000000..ab4323b --- /dev/null +++ b/6.计算机安全/6.1Web安全.md @@ -0,0 +1,87 @@ +# Web入门指北 + +> 本文来自HGAME Mini 2022 Web 入门材料,目的是为了帮助新生更好的入门Web安全。 + +## 0x00 前言 + +本文希望为对Web感兴趣的同学提供在入门方向上的指导,以便与更加平滑的入门Web方向的学习。 + +## 0x01 Web安全基础 + +### Web安全是什么 + +首先Web安全是CTF比赛一直以来都很重要的一部分,CTF比赛目前主体还是Jeopardy解题模式,主要分为Web安全,Re逆向工程,Pwn,Crypto密码学,Misc安全杂项五个方向。相比于Re和Pwn两个二进制方向,Web安全在初期入门时门槛较低,并不需要太多对底层知识的了解,对小白也较为友好,能够比较快速的上手做题。 + +虽然Web安全入门门槛比较低,但是不得不承认需要学习的技术栈很多,在说起你经常听闻的Java、Php、Go、Javascript等种种语言之前,我们先来看看Web应用的发展史,理解一下Web应用是什么。 + +### Web发展史 + +> 这段发展史可能有很多名字不太好懂,但是提到这一段发展史是希望你能够对Web技术的发展过程有个框架性的理解,如果有很多困惑的地方可以多多使用搜索引擎,这篇[文章]()写的很详细也可以阅读一下~ + +最初的Web应用是静态页面,托管在ISP(Internet Service Provider)上,主要就是比较简单的文字,图片,当时能做的也就是简单浏览网页。而后有了Flash等多媒体技术,网页的功能开始逐渐丰富,音视频和网页的动态交互也让网页开始能够完成更多的事,给用户更好的体验。再随着CGI(Common Gateway Interface)的产生,CGI是Web服务器和外部应用程序的通信接口标准,Web服务器就可以通过CGI执行外部程序,再通过外部程序根据请求内容生成动态内容。再之后随着PHP/JSP等编程语言的加入,MVC思想、REST(Representation State Transformation)架构风格的产生,Web应用开发技术也逐步变化,直到如今,Web应用的开发技术主要分为前端和后端。**简单来说,前端就是用户直接可以看见的部分,比如说我们访问百度,百度页面上面的搜索框、按钮、logo,搜索后展示的网页文字和内容,这些都是属于前端的范畴;而后端主要是用户看不见的部分,比如在百度上搜索Vidar-Team,会能根据搜索内容返回相关的文章,这就是后端所做的部分**。 + +### Web应用的数据是如何交互的 + +> 非常推荐查看MDN文章[万维网是如何工作的](https://developer.mozilla.org/zh-CN/docs/Learn/Getting_started_with_the_web/How_the_Web_works)和[浏览器的工作原理](https://developer.mozilla.org/zh-CN/docs/Web/Performance/How_browsers_work)详细了解一下~ + +而Web应用的数据是如何交互的呢?为什么用户输入`https://vidar.club`访问协会官网后浏览器上就会呈现页面呢? + +![What happens when you visit a URL](https://ek1ng.oss-cn-hangzhou.aliyuncs.com/1.png) + +当我们在浏览器的地址栏中输入`https://vidar.club`后,首先会做的事情是DNS查询,浏览器会去寻找页面资源的位置,也就是寻找这个域名对应的ip地址是多少。因为ip地址的格式为xxx.xxx.xxx.xxx,这对于一个用户并不容易记住,因此我们用形象的域名来让用户记住网址,你看,`vidar.club`就比`1.117.117.147`这个ip好记太多了吧。浏览器根据域名`vidar.club`向DNS服务器查询对应ip地址,得到响应对应ip地址为`1.117.117.147`。 + +而当浏览器知道了服务器的IP地址后,就会与服务器进行TCP三次握手,三次握手机制是用来让两端尝试进行通信,之后为了让链接更加安全,就会进行TLS协商。你看我们输入的是`https://`,这表明我们使用了https协议进行访问,http协议的数据传输是明文的,这并不安全,而https使用ssl/tls协议进行加密处理,这会让访问变得安全。顺带一提如果使用http访问协会官网也会强制使用https哦,可以试一试`http://vidar.club`。当三次握手和TLS协商完成后,我们就已经和服务器建立了安全连接啦。 + +建立安全连接后,浏览器会向服务器发送HTTP Get请求,请求服务器返回我们事先放在服务器上面的对应网页的内容,这个请求的内容通常是一个HTML文件,而当服务器受到请求后,就会使用相关的响应头和HTML的内容进行回复。 + +浏览器收到服务端的200 OK的HTTP响应,收到服务端发过来的HTML文件后,会处理HTML标记并且构建DOM树,最终就形成了你看到的页面啦。 + +HTTP请求和响应的具体内容可以使用浏览器(推荐使用Chrome、Firefox或Edge)的F12开发者工具进行查看,打开f12后选择网络并且刷新页面捕获请求,点击这个vidar.club就可以看到啦。 + +![Chrome的开发者工具图1](https://ek1ng.oss-cn-hangzhou.aliyuncs.com/2.png) +![Chrome的开发者工具图1](https://ek1ng.oss-cn-hangzhou.aliyuncs.com/3.png) + +## 0x02 Web安全入门 + +### 我是零基础小白,从什么开始好呢? + +> 万丈高楼平地起 + +虽然在Web安全的技术栈中,会比较少的提及C/C++安全的问题,更多的都是一些你经常听说的Java、Php等语言的安全问题,不过如果你目前是没有任何编程基础,协会也同样推荐打好基础,先好好学习C语言。对于没有编程基础的你,从C语言这样一门接近底层的高级语言开始学习可以更好学习计算机内部原理,并且学会C语言后有一定的编程基础,入门其他语言也绝非难事。 + +### Web技术栈 + +首先需要明确的是,Web安全和Web开发是分不开的,并不是说对安全感兴趣就不需要懂开发,恰恰相反,开发是安全的基础,如果没有开发能力,在之后学习中面对一些代码审计也会感觉到非常茫然,所以学习Web安全之前首要的就是先学习Web开发。而Web开发的学习路线在学长们身上大多不是很固定,有的人接触到的Web开发的第一门语言是PHP,PHP虽然在现在看来已经不是一门优秀的语言了,后端开发的主流技术栈已经是Java和Go了,但是PHP仍然是一门在安全学习上非常推荐的语言,有很多历史漏洞可以让大家更好的入门。也有的学长最先开始接触的是Go/Java/Js,那如果你已经有一定Web开发基础,可以直接参考下面的学习路线与学习资料,如果你还没有Web开发基础并且认为C语言已经学的不错了,就可以尝试选择一门自己感兴趣的语言进行学习,并且尝试自己写一些感兴趣的Web应用,比如搭建一个博客,写一个Todolist用来记事等等,兴趣是最好的导师,一边写自己感兴趣的Web应用一边学习是非常不错的。 + +## 0x03 学习资料与学习路线推荐 + +- 兔兔的sql注入小游戏 + 招新群中的迎新机器人具有一个blog功能,这个blog功能存在一个sql注入的漏洞,通过漏洞查询出数据库中的flag可以找管理员兑换一杯奶茶哦~(支线任务x) +- 搭建博客 + 博客可以记录自己的学习过程与经历,也可以当作一个Web应用开发的小练习 +- 刷题 + 如果你想一边学习Web开发一边做做题目,感受一下Web安全,可以在协会的招新训练平台上面做做题目,要是毫无头绪也可以问问学长学姐们哦~训练平台上的题目可以帮助你更好的入门CTF! +- 学习资料 + 面对网络各式各样的学习资料,这些网站和书籍会对你入门有所帮助 + - [MDN 网络文档](https://developer.mozilla.org) + - [Web 安全学习笔记](https://websec.readthedocs.io) + - [CTF wiki](https://github.com/ctf-wiki/ctf-wiki) + - [HTML CSS 基础](https://www.w3cschool.cn/) + - JS:《JavaScript DOM编程基础》 + - C:《C Primer Plus》 + - PHP:《PHP和MySQL Web开发》 + - Python: 《Python从入门到实践》的入门部分 + - HTTP:《图解HTTP》 + - 《从0到1:CTFer成长之路》 + - 《白帽子讲Web安全》 + 上面提到的书协会都有哦,欢迎有空的时候来协会看书自习! +- 学习路线 + 可以根据上面提到的学习资料和协会的2022提前批招新标准进行个人学习路线的规划,这份Github上很火的[Web Roadmap](https://github.com/hideraldus13/roadmap-do-desenvolvedor-web)也可以参考一下。 + +## 0x04 最后 + +> 勿以浮沙筑高台 + +欢迎对Web安全感兴趣的你,如果在学习过程中遇到困难可以随时在 Vidar-Team 招新群中提问哦,祝你在Web安全的学习道路上越走越远~ + +`VIDAR{Web_1s_3asy_t0_st4rt!!}` diff --git a/6.计算机安全/6.1网络安全.md b/6.计算机安全/6.1网络安全.md deleted file mode 100644 index 3f68243..0000000 --- a/6.计算机安全/6.1网络安全.md +++ /dev/null @@ -1,3 +0,0 @@ -# 网络安全 - -网络安全是一个很宽泛的话题,得益于目前网络应用越来越多,网络安全花样多,手段强,攻击性也比二进制安全要高。比如从网站的登录入口脱出整个数据库?通过奇奇怪怪的链接端了钓鱼网站的后台?通过爬虫抓取网页内容,制作各种自动化脚本(抢票、抢课、自动刷网课视频)? diff --git a/6.计算机安全/6.2.1基础工具的使用.md b/6.计算机安全/6.2.1基础工具的使用.md index 1de7c86..54122fd 100644 --- a/6.计算机安全/6.2.1基础工具的使用.md +++ b/6.计算机安全/6.2.1基础工具的使用.md @@ -1,11 +1,302 @@ # 基础工具的使用 -# IDA pro - IDA pro (交互式反编译器专业版)是二进制安全研究人员必备的反汇编、反编译工具,功能繁多而强大,反编译结果清晰明了。 -## 安装 +IDA pro 是收费软件,价格极其昂贵,一套完全版人民币 10W 左右,因此可以到各大网站下载破解版,注意到一些知名网站下载,比如吾爱破解等,防止下载的软件包含病毒。在编写此文时,IDA pro 更新到了 8.3,网上能找到的最新的版本为 7.7。本文由于版权原因,不提供下载链接。 -IDA pro 是收费软件,价格极其昂贵,一般人买不起,因此可以到各大网站下载破解版,注意到一些知名网站下载,比如吾爱破解等,防止下载的软件包含病毒。在编写此文时,IDA pro 更新到了 8.0,网上能找到的最新的版本为 7.7。本文由于版权原因,不提供下载链接。 +# 简易使用方法 + +> 本文档仅作快速入门,更加细节的内容还请读者查阅其他资料以及多加实践。 +> +> 另外在任何使用上操作的问题,都可以在群里提问! + +## 0x00 IDA 简单介绍 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809113855166.png) + +IDA是一款交互式反汇编和反编译工具,其支持文件类型和文件平台丰富。 + +可静态分析也可动态调试,可以说是二进制手的吃饭工具了 + +## 0x01 启动界面 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809114834244.png) + +``` +NEW:打开IDA同时弹出对话框选择要打开的文件 +Go:单独打开ida,打开界面将文件拖入 +Previous,或者下面的列表项:快速打开之前的的文件 +``` + +这里选择Go键,打开以后,将文件拖入 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809124156697.png) + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809124408179.png) + +这里按我们的默认选项点击OK即可 + +## 0x02 关闭界面 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809125554853.png) + +``` +第一个选项:就是不打包数据包文件,那么这些数据库文件就会分开这放。 +第二个选项及图中选项:就是把这几个数据库文件打包为1个(如.i64文件),下次打开我们分析的文件的时候,打开这个文件即可。 +第三个选项:不会删掉数据库文件,而是打包压缩到存储的文件里面去了。 +下面两个选项 +第一个选项:回收垃圾,如果打包文件太大了,可以选用这个选项,清理不必要的内存 +最后一个选项:当分析时候写错了,选中最后一个,最后一次打开的操作不保留了。(解决错误操作) +``` + +## 0x03 主界面- IDA View&Pseudocode + +反汇编代码的图表窗口 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809130857159.png) + + 按**空格键**切换成文本结构的反汇编 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809130940294.png) + + 按**F5**进行反编译跳转至`Pseudocode`(伪代码)界面 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809131038284.png) + +然后就可以分析代码逻辑了 + +直接点击函数名可以进入到对应函数内部查看函数逻辑 + +## 0x04 主界面- Hex View + +十六进制窗口(不太常用) + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809132027773.png) + +## 0x05 主界面-Structures + +结构体窗口 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809132130778.png) + +## 0x06 主界面-Enums + +枚举类型界面 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809132242739.png) + +## 0x07 主界面-Imports + +导入表 + +可以查看当前模块用了哪些模块的哪些函数 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809132327043.png) + +## 0x08 主界面-Exports + +导出表 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809151050575.png) + +## 0x09 主界面-Strings + +按`Shift+F12`转到`String`界面,该操作会搜索程序中的字符串数据并展示 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809153126737.png) + +按`Ctrl+F`后输入想要检索的字符可以快速搜索字符串 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809153408536.png) + +## 0x0a 其他界面-Functions + +罗列了程序中用到的所有函数,包括底层调用的库的函数 + +其中一般来说`main`是程序的主要函数 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809151328885.png) + +## 0x0b 其他界面-Output + +程序的输出信息都会展示在这里 + +其中包括插件的加载信息、插件/脚本运行时的输出等 + +另外还可以直接在下面输入python语句,方便在ida使用过程中简单的数据处理 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809151536894.png) + +## 0x0c 其他界面-导航栏 + +一个二进制文件包括不同的区块,这里显示程序的不同类型数据,不同的颜色代表二进制文件中不同的块 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809151815243.png) + + + +## 0x0d 常用快捷键 + +> 边用边记,多打打就会记住了! +> +> 只记录了部分 + +- `;` 为当前指令添加注释 +- `/` 在伪代码中添加注释 +- `g` 跳转到任意地址 +- `Esc` 返回到跳转前的位置 +- `n` 定义或修改名称,常用来修改函数和变量的名字 +- `A` 按照ASCII显示数据 +- `D` 分别按字节、字、双字来显示数据 +- `F5`反编译汇编代码,得到C伪代码 +- `Shift+F12` 搜索程序中的字符串 + +- `Alt+t` 搜索程序中的指令 +- `Ctrl+x` 查看变量和函数的引用 +- `Y` 修改变量/函数类型 +- `F2`快速下断点 + +## 0x0e 常用插件 + +> 具体安装和使用不在此展开了 + +- [Find Crypt](https://github.com/polymorf/findcrypt-yara) -- 寻找常用加密算法中的常数(需要安装 [yara-python](https://github.com/VirusTotal/yara-python)) +- [Keypatch](https://github.com/keystone-engine/keypatch) -- 基于 Keystone 的 Patch 二进制文件插件 +- [LazyIDA: Make your IDA Lazy! ](https://github.com/P4nda0s/LazyIDA) -- 快速Dump内存数据 +- [Finger](https://github.com/aliyunav/Finger) -- 函数签名识别插件 +- [D810](https://gitlab.com/eshard/d810) -- 去混淆插件 + +## 0x10 IDA Python + +IDA 提供可与其交互的IDA Python接口,可以使用Python做很多的辅助操作 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809154742462.png) + +可以参考这篇文章了解常用的接口 + +[IDA Python 常用函数 | 4nsw3r's Blog](https://4nsw3r.top/2022/02/11/IDA%20Python%20%E5%B8%B8%E7%94%A8%E5%87%BD%E6%95%B0/) + +## 0x11 IDA 动态调试 + +> 暂时只对Windows和Linux下的文件调试做介绍,Mac和Android下的文件调试有待读者后续探索 + +### 调试Windows下的文件 + +可以先在汇编代码或伪代码界面下断点,然后`F9`选择调试器,这里直接选`Local Windows Debugger` + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809160044665.png) + +之后就可以用F7(单步不跳过执行)/F8(单步跳过执行)/F9(继续执行,遇到断点停止)进行调试 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809163138453.png) + +### 调试Linux下的文件 + +可以先在汇编代码或伪代码界面下断点 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809155352920.png) + +由于Linux下文件调试比较特殊,需要远程起一个服务器运行服务端,这里可以使用**Vmware**或者**WSL2(Windows subsystem Linux)**进行调试 + +因篇幅有限,在这里直接贴篇链接供大家学习并选择调试方式 + +- Vmware 调试 [IDA动态调试ELF](https://bbs.pediy.com/thread-247830.htm) +- WSL 调试 (安装好WSL直接运行ida dbgsrv目录下linux_server文件即可以) + +后面是一样的调试步骤 + +## 0x12 一个简单程序的分析 + +#### 源代码 + +```c +#include +#include + +void change(char* str) { + for (int i = 0; i < strlen(str) ; i++) { + str[i] = str[i] - 1; + } +} + + int check(char* str){ + return strcmp(str, "ek`fzHC@^0r^m/s^b/lo0dw2c|") == 0; + } + +int main() { + char input[100]; + scanf("%100s", input); + change(input); + if (check(input)) { + printf("You are right\n"); + } + else { + printf("You are wrong\n"); + } +} +``` + +#### 分析历程 + +##### 将程序拖入IDA + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809173439491.png) + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809173548998.png) + +##### F5分析查看伪代码 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809173627488.png) + +发现有`change`和`check`的自定义函数 + +按`n`修改一下变量名 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809174001600.png) + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809174015603.png) + +分别进入里面查看函数逻辑 + +##### 查看函数逻辑 + +change函数 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809174035800.png) + +check函数 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809174058831.png) + +###### 静态分析逻辑 + +change函数是对输入字符串的每一个字节进行修改 + +然后在check函数进行比较 + +###### 动态分析逻辑 + +在change函数进入前下好断点 + +随意的进行一些输入 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809174913326.png) + +然后断下来 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809174957987.png) + +F7进入函数进行单步不跳过调试 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809175413448.png) + +遇到类似`strlen`等库函数可以F8单步调试跳过 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/image-20220809175459668.png) + +可以发现输入字符串的每一个字节的Ascii值都减小了1 + +##### 脚本编写 + +试试写一个脚本解出这道题吧! -## 简易使用方法 diff --git a/6.计算机安全/6.2.2软件破解、软件加固.md b/6.计算机安全/6.2.2软件破解、软件加固.md index 9f6627e..7631692 100644 --- a/6.计算机安全/6.2.2软件破解、软件加固.md +++ b/6.计算机安全/6.2.2软件破解、软件加固.md @@ -45,7 +45,7 @@ ESP 定律的原理在于利用程序中堆栈平衡来快速找到 OEP. 还是上一篇的示例, 入口一句 `pushad`, 我们按下 F8 执行 `pushad` 保存寄存器状态, 我们可以在右边的寄存器窗口里发现 `ESP` 寄存器的值变为了红色, 也即值发生了改变. -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJdWqlHmhlvB471dIGT4GEh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJdWqlHmhlvB471dIGT4GEh.png) 我们鼠标右击 `ESP` 寄存器的值, 也就是图中的 `0019FF64`, 选择 `HW break[ESP]` 后, 按下 `F9` 运行程序, 程序会在触发断点时断下. 如图来到了 `0040D3B0` 的位置. 这里就是上一篇我们单步跟踪时到达的位置, 剩余的就不再赘述. diff --git a/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md b/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md new file mode 100644 index 0000000..e7d0a07 --- /dev/null +++ b/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md @@ -0,0 +1,204 @@ +# 漏洞挖掘、漏洞利用 +## 常见二进制安全漏洞 +### 栈溢出 +#### 栈介绍 +栈是一种典型的后进先出 (Last in First Out) 的数据结构,其操作主要有压栈 (push) 与出栈 (pop) 两种操作,如下图所示(维基百科)。两种操作都操作栈顶,当然,它也有栈底。 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/stack.png) + +高级语言在运行时都会被转换为汇编程序,在汇编程序运行过程中,充分利用了栈这一数据结构。每个程序在运行时都有虚拟地址空间,其中某一部分就是该程序对应的栈,用于保存函数调用信息和局部变量。此外,常见的操作也是压栈与出栈。需要注意的是,**程序的栈是从进程地址空间的高地址向低地址增长的**。 +#### 栈溢出基本原理 +以最基本的C语言为例,C语言的函数局部变量就保存在栈中。 +```C +#include +int main() +{ + char ch[8]={0}; + char ch2[8]={0}; + printf("ch: %p, ch2: %p",ch,ch2); +} +``` + +对于如上程序,运行后可以发现`ch`和`a`的地址相差不大(`a`和`ch`的顺序不一定固定为`a`在前`ch`在后): + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/out1.PNG) + +可以发现`ch`和`ch2`刚好差`8`个字节,也就是`ch`的长度。 +`ch`只有`8`个字节,那么如果我们向`ch`中写入超过`8`个字节的数据呢?很显然,会从`ch`处发生溢出,写入到`ch2`的空间中,覆盖`ch2`的内容。 + +```C +#include +int main() +{ + char ch[8]={0}; + char ch2[8]={0}; + scanf("%s",ch); + printf("ch: %s, ch2: %s",ch,ch2); +} +``` + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/out2.PNG) + +这就是栈溢出的基本原理。 + +#### 栈溢出的基本利用 +##### 0x0 +对于以上程序,“栈溢出”带来的后果仅仅是修改了局部变量的值,会造成一些程序的逻辑错误: + +```C +#include +int main() +{ + char input[20]; + char password[]="vidar-team"; + scanf("%s",input); + if(!strcmp(password,input)) + { + printf("login success!"); + } + else + { + printf("password is wrong!"); + } + return 0; +} +``` + +如上代码所示,如果我们想办法通过向input中输入过长的字符串覆盖掉password的内容,我们就可以实现任意password“登录”。 + +那么能不能有一些更劲爆的手段呢? + +> 以下内容涉及x86汇编语言知识 + +在C语言编译之后,通常会产生汇编语言,汇编语言的字节码可以直接在物理CPU上运行。而C语言函数调用会被编译为如下形式: + +```C +#include +int add(int a,int b) +{ + return a+b; +} +int main() +{ + int a,b; + scanf("%d %d",&a,&b); + printf("%d",add(a,b)); + return 0; +} +``` +```asm +add: +endbr64 +push rbp +mov rbp, rsp +mov [rbp+var_4], edi +mov [rbp+var_8], esi +mov edx, [rbp+var_4] +mov eax, [rbp+var_8] +add eax, edx +pop rbp +retn + +main: +endbr64 +push rbp +mov rbp, rsp +sub rsp, 10h +mov rax, fs:28h +mov [rbp+var_8], rax +xor eax, eax +lea rdx, [rbp+var_C] +lea rax, [rbp+var_10] +mov rsi, rax +lea rax, format ; "%d %d" +mov rdi, rax ; format +mov eax, 0 +call _scanf +mov edx, [rbp+var_C] +mov eax, [rbp+var_10] +mov esi, edx +mov edi, eax +call add +mov esi, eax +lea rax, aD ; "%d" +mov rdi, rax ; format +mov eax, 0 +call _printf +mov eax, 0 +leave +retn +``` + +可以看到其中使用`call`指令来调用`add`函数。那么该指令是如何工作的呢?其实`call`指令相当于`push next_loc;jmp loc`,通过将`call`指令下一行汇编的地址压栈的方式,等到函数调用完再取回,从而从`call`指令的下一行继续执行。由于栈地址从高向低生长,新调用的函数的局部变量生成在返回地址的上方(低地址处),因此如果我们在新函数中使用栈溢出来修改这一返回地址,如果将返回地址修改为某个函数的地址,就可以执行任意函数: + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/stack2.png) + +> 注意该图中,使用32位的寄存器(EBP、ESP、EIP),实际原理一样的,并且上方为高地址,下方为低地址 + +在此给出一道题作为例子:https://github.com/ctf-wiki/ctf-challenges/raw/master/pwn/stackoverflow/ret2text/bamboofox-ret2text/ret2text + +32位的程序,我们使用IDA来打开该题目,查看反编译代码,可以发现有非常明显的栈溢出: + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/main.png) + +由于第`8`行`gets`函数并没有检查输入的长度和`s`的长度,我们可以轻易地通过栈溢出来控制`main`函数的返回地址。而在程序中,存在另外一个函数`secure`,在该函数中有一个后门`system("/bin/sh")`,如果我们想办法执行该后门,就可以拿到目标机器的`shell`,从而控制目标计算机。 + +由于我们需要将返回地址在标准输入中输入待测程序,而返回地址拆分成小端序的字节后经常无法手动输入到待测程序中,所以此处我们使用`pwntools`这一`python`包来方便地进行攻击。 +首先查看后门的地址: + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/backdoor.png) + +接着计算溢出长度,这里我们使用gdb来调试程序,图中的gdb安装了pwndbg插件,该插件在pwn调试时比较好用: + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/gdb.png) + +将断点打在`gets`函数前后,可以看到此时`esp`值为`0xffffcd80`,`ebp`值为`0xffffce08`,在 IDA 中我们又可以看到`s`相对于`esp`的偏移为`+1C`,此时我们即可计算`hex(0xffffcd80+0x1c-0xffffce08)=-0x6C`,即`s`相对于`ebp`的偏移为`0x6C`,由于在`main`函数的开头有`push ebp`的操作,所以将`0x6C`再加`4`,即可到达返回地址处: + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/s.png) + +```python +from pwn import * +sh=process("./pwn") +exp=b'a'*(0x6c+4) +exp+=p32(0x0804863A) # 4字节的返回地址 +sh.sendline(exp) +sh.interactive() # 切换为手动交互模式 +``` + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/shell.png) + +##### 0x1 +通过上面的学习,我们已经可以知道执行任意函数的办法,但很多情况下,对于攻击者来说,程序中并没有可用的后门函数来达到攻击的目的,因此我们需要一种手段,来让程序执行任意代码(任意汇编代码),这样就可以最高效地进行攻击。ROP(Return Oriented Programming)面向返回编程就是这样的一种技术,在栈溢出的基础上,通过在程序中寻找以retn结尾的小片段(gadgets),来改变某些寄存器、栈变量等的值,再结合Linux下的系统调用,我们就可以执行需要的任意代码。 + +ROP网上已有非常系统的资料,在这里不做过多的叙述,可参考ctf-wiki: https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/basic-rop/#ret2shellcode + +### 格式化字符串 +格式化字符串的利用思路来源于`printf`函数中的`%n`format标签,该标签的作用和`%s`、`%d`等不同,是将已打印的字符串的长度返回到该标签对应的变量中。在正常情况下的使用不会出现什么问题: + +```C +printf("abcd%n",&num); +//输出abcd,并且num的值为4 +``` + +但如果在编写代码时忘记format字符串: + +```C +printf(something_want_print); +``` + +此时若攻击者可以自定义该字符串,就可以使用`%d`、`%p`、`%s`等打印栈上数据,或者`%n`来覆写栈上的数据,如果覆写了返回地址,就可以实现任意代码执行。 + +```C +char ch[20]; +scanf("%s",ch);// 输入 %d%n%n%n%n%n +printf(ch); +``` + +## 漏洞挖掘技术 +### 代码审计 +代码审计分人工代码审计和自动化代码审计,人工审计由安全研究人员查看代码来发现漏洞,需要安全研究人员很高的研究经验,投入大量的人力。自动化代码审计目前的发展进度迅速,如由 Vidar-Team 毕业学长 LoRexxar 主导的开源项目Kunlun-M:https://github.com/LoRexxar/Kunlun-M + +以及字节跳动公司开源的appshark:https://github.com/bytedance/appshark + +### fuzz +fuzz是一种自动化测试手段,通过一定的算法生成一定规律的随机的数据输入到程序中,如果程序发生崩溃等异常,即可知道此处可能有漏洞。比较著名的有[AFL](https://github.com/google/AFL)、[AFLplusplus](https://github.com/AFLplusplus/AFLplusplus)、[libfuzzer](https://llvm.org/docs/LibFuzzer.html)、[honggfuzz](https://github.com/google/honggfuzz)等。 diff --git a/6.计算机安全/6.2二进制安全.md b/6.计算机安全/6.2二进制安全.md index 8e98494..ca9458c 100644 --- a/6.计算机安全/6.2二进制安全.md +++ b/6.计算机安全/6.2二进制安全.md @@ -10,6 +10,11 @@ reverse 主要研究软件破解,软件加固,计算机病毒等。 现实场景下,这两种方向通常界限比较模糊,统称的二进制安全主要研究漏洞挖掘,漏洞利用,软件加固,计算机病毒,游戏安全等。 +## 入门材料 +> HGAME Mini 2022 Reverse Pwn 入门材料 +> Reverse:https://www.notion.so/b92ca2bfaacf4e7c873882dff9dbf649 +> Pwn:https://ek1ng.oss-cn-hangzhou.aliyuncs.com/HGAME%20Mini%202022%20Pwn%E5%85%A5%E9%97%A8%E6%8C%87%E5%8C%97.pdf + ## 学习二进制安全需要具备哪些基础? - 扎实的 C 语言基础,目前现有的各种二进制分析工具通常都会把汇编代码重新反编译为 C 语言程序。 diff --git a/6.计算机安全/6.3密码学.md b/6.计算机安全/6.3密码学.md new file mode 100644 index 0000000..92cd764 --- /dev/null +++ b/6.计算机安全/6.3密码学.md @@ -0,0 +1,74 @@ +## 什么是密码学 + +> 本文来自HGAME Mini 2022 Crypto 入门材料。 + +密码学分为密码编码学和密码分析学,前者寻求**提供信息机密性、完整性和非否认性等的方法**,后者研究**加密信息的破译和伪造等破坏密码技术所能提供安全性**的方法。CTF比赛中的密码学题目偏向于密码分析。 + +## 如何学习密码学 + +### 数学基础 + +数论,线性代数,抽象代数 + +当你有了这些基础之后才能更熟练的使用一些数学工具。 + +学习这些基础的东西最好的方法就是看书(群文件里都有哦~),如果是英文的话尽量看原著,这对后面看论文帮助很大。 + +### 编程基础 + +你可能需要了解一些python的基础语法。还有一些简单的算法。 + +### 一些基础的密码系统 + +古典密码: + +- 凯撒密码 +- 维吉尼亚密码 +- 栅栏密码 +- 希尔密码 +- 培根加密 +- 摩斯电码 +- 等 + +现代密码: + +- RSA(非常经典) +- AES +- DES +- ECC +- 等 + +还有近几年多起来的格密码 + +主要看一些书籍,或者在ctf-wiki.org学习。学习的过程中尽可能的多写一些demo,既锻炼了编程能力也可以更好的了解一些密码系统。 + +有能力的同学可以先看一下这位教授的关于密码学的课程 [https://m.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg](https://m.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg) + +## 工具 + +一些python的库: + +- pycryptodome(就是Crypto库) + +[https://pycryptodome.readthedocs.io/en/latest/](https://pycryptodome.readthedocs.io/en/latest/) + +- gmpy2(数论) +- sympy + +sagemath(一个功能极其强大的集成工具) + +## 刷题平台 + +[https://cryptohack.org/](https://cryptohack.org/) (推荐) + +buuoj + +bugku(比较入门的题) + +ctfhub + +## 写在最后的话 + +密码学可能刚入门起来感觉非常难受(可能不包括古典密码),但事实是不管那个方向或者说任何的一门学科的学习过程都是这样的(怪胎除外)。因为现在大家基本上都是兴趣驱动的,所以希望大家永远保持对新知识的好奇心,这样就不会感觉说这是一个任务一样的东西。其实密码学还是很有意思的。 + +`synt{pelcg0_1f_r4fl_g0_fg4eg!!}` diff --git a/6.计算机安全/6.4CTF信息安全竞赛.md b/6.计算机安全/6.4CTF信息安全竞赛.md deleted file mode 100644 index 8b9552f..0000000 --- a/6.计算机安全/6.4CTF信息安全竞赛.md +++ /dev/null @@ -1,16 +0,0 @@ -# CTF 信息安全竞赛 - -## 简介 - -CTF(Capture the Flag),一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。在比赛中,会设定题目,每道题目基本都是由现实环境抽象出来的简单版,通过对题目的攻击或分析,可以拿到一串特定的字符串,即 flag,将这串字符串提交,即可证明你拿下了这道题目,主办方/自动化的比赛平台就会按照一定的规则给予你分数。 - -## CTF 历史 - -CTF 的前身是传统黑客之间的网络技术比拼游戏,起源于 1996 年第四届 DEFCON。第一个 CTF 比赛(1996 年 - 2001 年),没有明确的比赛规则,没有专业搭建的比赛平台与环境。由参数队伍各自准备比赛目标(自行准备与防守比赛目标,并要尝试攻破对方的比赛目标)。而组织者大都只是一些非专业的志愿者,接受参赛队伍手工计分的请求。 - -如今的 CTF 俨然成为计算机安全里的一大类重要比赛,已经规模化,由专业队伍承担比赛平台、命题、赛事组织以及自动化积分系统。由传统 CTF 衍生出来的其他比赛形式也层出不穷,如 awd 攻防模式,awdp 大规模攻防兼备模式等 - -## CTF 的一些误区 - -- 学计算机安全 != 打 CTF。CTF 只是学计算机安全的一个途径或者说捷径,因为 CTF 题目往往是真实场景的抽象。并不是学计算机安全一定就要打 CTF,打 CTF 也不一定等同于学会了计算机安全,现代 CTF 的很多技术并不能应用到实战中,不过虽然这么说,但是如果有志于安全研究,从 CTF 开始仍然是一个不错的选择。 -- CTF != 电子竞技。CTF 除了 awd 稍微具有那么一点点的观赏性以外,其他的毫无观赏性可言。并不像一些影视剧中那样黑客们一脸沉着冷静地敲打着键盘,屏幕上的代码飞速滚动,过了一会弹出来一个闪烁的大框框“Hacked by XXX”。awd 的观赏性也仅仅架设于当某队伍拿到了另一支队伍的 flag 时,会有动态的效果(如动画等)来显示。 diff --git a/6.计算机安全/6.4安全杂项.md b/6.计算机安全/6.4安全杂项.md new file mode 100644 index 0000000..311c511 --- /dev/null +++ b/6.计算机安全/6.4安全杂项.md @@ -0,0 +1,146 @@ +# MISC入门指南 + +> 本文来自HGAME Mini 2022 Misc 入门材料 + +## MISC简单介绍 + +Misc 是 Miscellaneous 的缩写,杂项、混合体、大杂烩的意思,它是一个庞大而又有趣的分支,几乎会涉及所有分类的基础,包括内容安全、安全运维、网络编程、AI安全等不属于传统分类的知识,作为发散思维、拓展自己的一个知识面而言也是挺不错的方向。 + +**MISC大概有这些方面内容**: + +- 信息收集 +- 编码转换 +- 隐写分析 +- 数字取证 +- ...... + +![img](https://ctf-wiki.org/misc/figure/all.png) + +## 简单分块介绍 + +### 信息收集 + +#### 基本搜集技巧 + +简单一句话:多问搜索引擎,搜就完事了! + +- 目标 Web 网页、地理位置、相关组织 +- Google 基本搜索与挖掘技巧 (Google hacking) +- 网站、域名、IP:whois 等 +- 通过搜索引擎查找特定安全漏洞或私密信息 +- 组织结构和人员、个人资料、电话、电子邮件 +- 企业等实体:YellowPage、企业信用信息网 +- 国内:百度地图、卫星地图、街景 + +### 编码转换 + +- 各种古典密码 + - 摩斯电码 + - 凯撒密码 + - 栅栏密码 + - ROT13 + - 维吉尼亚密码 + +- 计算机常用编码 + - Ascii + - Unicode + - HTML实体编码 +- 其他编码 + - 二维码 + - 条形码 + - Js加密/Jother/JSFuck + - URL编码 + - Hex编码 + - Base大家族 + - MD5、SHA1等类似加密型 + - 与佛论禅 + - 兽音译者 + - ... + +### 隐写 + +- 图片隐写 + - jpg隐写 + - Steghide + - Stegdetect + - Slienteye + - Jhps + - png隐写 + - Stepsolve + - Stepic + - gif隐写 + - 时间 + - 空间 + - bmp隐写 + - LSB +- 音频隐写 + - 频谱 + - 波形 + - LSB + - Tools + - Wav + - Steganography + - steghide + + - Mp3 + - Mp3stego + +- 视频隐写 + - MSU Stego + - TCStego + +- 文档隐写 + - Word + - PDF +- 流量包 + - 协议 + - 传输 + +- 交换数据流 + - NTFS + +- Vmdk + - dsfok-tools + + +### 取证 + +- 图片取证 + - Jpg + - stegdetect + - Png + - Pngcheck + - Tweakpng +- 音频取证 + - Audacity +- 视频取证 + - FFmpeg +- 流量包取证 + - Wireshark + - Tshark + - Pacpfix +- 内存取证 + - Vol +- 磁盘文件取证 + - Ftx +- 文档取证 + - Pdf + - Pdf-parser + - Pdf-crack + - Word +- 压缩包 + - Zip + - Fcrackzip + - Apchpr + - Pkcrack + - Rar + - Rarcrack +- 固件分析 + - binwalk + - sleuthkit + + + + + +`VIDAR{Misc_1s_e4sy_t0_st4rt!!}` diff --git a/6.计算机安全/6.5ctf学习网站推荐.md b/6.计算机安全/6.5ctf学习网站推荐.md new file mode 100644 index 0000000..8e27fe5 --- /dev/null +++ b/6.计算机安全/6.5ctf学习网站推荐.md @@ -0,0 +1,28 @@ +# CTF学习网站推荐 + +CTF的学习对于初学者而言可能有些手无足措。因为它涵盖了许多的方向:web,reverse,pwn,crypto,misc,IOT等方向。每一个都需要一定的基础 + +需要一定的基础才能去解决题目,获取flag。 + +以下是一些给CTF初学者的网站,欢迎补充: + +## 学习网站: + +学习其实最高效的可能还是通过打比赛,实操,看大牛博客来学习。但是感觉对于新人而言打好基础和入门是最重要的,很多时候入门了,发现感兴趣了,一切就顺利起来了。因此以下就先放一些容易使人入门的网站。 + +- [Hello CTF](https://ctf.tj.cn/) +- [简介 - CTF Wiki (ctf-wiki.org)](https://ctf-wiki.org/) +- [CTFHub](https://www.ctfhub.com/#/index) + +## 练习网站: + +- [主页 | NSSCTF](https://www.nssctf.cn/index) +- [BUUCTF在线评测 (buuoj.cn)](https://buuoj.cn/) +- [攻防世界 (xctf.org.cn)](https://adworld.xctf.org.cn) +- [Hack The Box: Hacking Training For The Best | Individuals & Companies](https://www.hackthebox.com/) +- [CryptoHack – A fun, free platform for learning cryptography](https://cryptohack.org/) + +## 工具网站: + +之后再补充 + diff --git a/6.计算机安全/6.计算机安全.md b/6.计算机安全/6.计算机安全.md index 9264540..c375410 100644 --- a/6.计算机安全/6.计算机安全.md +++ b/6.计算机安全/6.计算机安全.md @@ -1,5 +1,21 @@ # 6.计算机安全 -> 本模块由 Vidar-Team 信息安全协会成员倾情奉献 +> 本模块由 [Vidar-Team](https://vidar.club) 信息安全协会成员倾情奉献,Vidar-Team 成立于2008年9月,其名 Vidar 来源于北欧神话"诸神黄昏"中幸存于难、带领人类重建了家园的神 Víðarr,是由杭州电子科技大学一群热爱信息安全的小伙伴自发成立的技术型团体 ,作为高校战队活跃于各大ctf赛事。 +> +> Vidar-Team 2023 招新 QQ 群: 861507440(仅向校内开放),欢迎对安全感兴趣的小伙伴加入我们! -计算机安全,通俗的讲就是黑客,主要研究计算机领域的攻防技术,主要包括网络安全和二进制安全两大类。现有的 CTF 信息安全竞赛里面还会看到密码学和杂项,以及最近几年新兴的 IoT 安全,人工智能安全等。 + +计算机安全,通俗的讲就是黑客,主要研究计算机领域的攻防技术,主要包括网络安全(Web)和二进制安全(Bin,包含Pwn和Reverse)两大类。现有的 CTF 信息安全竞赛里面还会看到密码学(Crypto)和安全杂项(Misc),以及最近几年新兴的 IoT 安全,人工智能安全等方向。本系列文章会按照CTF的5个方向,Web、Pwn、Reverse、Crypto、Misc来进行介绍。目前引入了HGAME Mini2022我们编写给新生的入门材料,在今年的10月份和寒假,我们也会分别举办HGAME Mini和HGAME这两场CTF,来帮助新生更好的入门安全。 + +下面是一些CTF领域写的不错的入门文章和平台,也可以根据文章内容进行学习~ + +### 入门文章 +CTF-Wiki:https://ctf-wiki.org/ +CTF快速入门手册:https://github.com/ProbiusOfficial/CTF-QuickStart + + +### 刷题平台 +攻防世界: https://adworld.xctf.org.cn/challenges/list +Bugku: https://ctf.bugku.com/ +ctfhub: https://www.ctfhub.com/#/index +NSSCTF: https://www.ctfer.vip/index diff --git a/6.计算机安全/static/backdoor.png b/6.计算机安全/static/backdoor.png new file mode 100644 index 0000000..5ef4558 Binary files /dev/null and b/6.计算机安全/static/backdoor.png differ diff --git a/6.计算机安全/static/gdb.png b/6.计算机安全/static/gdb.png new file mode 100644 index 0000000..c3b6081 Binary files /dev/null and b/6.计算机安全/static/gdb.png differ diff --git a/6.计算机安全/static/main.png b/6.计算机安全/static/main.png new file mode 100644 index 0000000..d28b631 Binary files /dev/null and b/6.计算机安全/static/main.png differ diff --git a/6.计算机安全/static/out1.PNG b/6.计算机安全/static/out1.PNG new file mode 100644 index 0000000..64143d7 Binary files /dev/null and b/6.计算机安全/static/out1.PNG differ diff --git a/6.计算机安全/static/out2.PNG b/6.计算机安全/static/out2.PNG new file mode 100644 index 0000000..7dfbd2d Binary files /dev/null and b/6.计算机安全/static/out2.PNG differ diff --git a/6.计算机安全/static/s.png b/6.计算机安全/static/s.png new file mode 100644 index 0000000..0f6d2ca Binary files /dev/null and b/6.计算机安全/static/s.png differ diff --git a/6.计算机安全/static/shell.png b/6.计算机安全/static/shell.png new file mode 100644 index 0000000..abf643c Binary files /dev/null and b/6.计算机安全/static/shell.png differ diff --git a/6.计算机安全/static/stack.png b/6.计算机安全/static/stack.png new file mode 100644 index 0000000..0c9242e Binary files /dev/null and b/6.计算机安全/static/stack.png differ diff --git a/6.计算机安全/static/stack2.png b/6.计算机安全/static/stack2.png new file mode 100644 index 0000000..43990e4 Binary files /dev/null and b/6.计算机安全/static/stack2.png differ diff --git a/7.Web开发入门/7.1.1基础部分.md b/7.网络应用开发/7.1.1.1基础部分.md similarity index 93% rename from 7.Web开发入门/7.1.1基础部分.md rename to 7.网络应用开发/7.1.1.1基础部分.md index c5766f2..deace25 100644 --- a/7.Web开发入门/7.1.1基础部分.md +++ b/7.网络应用开发/7.1.1.1基础部分.md @@ -45,13 +45,13 @@ 设计稿如下: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg) #### 可能需要用到的图片资源 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbigxAK5SbxiWuDHr1Ashne.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbigxAK5SbxiWuDHr1Ashne.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnrqddPFusKhe0vZuzXJOosg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnrqddPFusKhe0vZuzXJOosg.png) #### 基本要求 @@ -93,9 +93,9 @@ ### 🎫TodoList -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnikdFX5WNml7sgtPMOJQiGh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnikdFX5WNml7sgtPMOJQiGh.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnFZwQVTUWkfsbNxYfJkgPDg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnFZwQVTUWkfsbNxYfJkgPDg.png)
一些参考
@@ -121,7 +121,7 @@ - 实现不同设备屏幕尺寸的自适应 - 添加任务热力图(可以参考一下 GitHub 个人主页哦 🤔) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcncVQswB7ziUoV4LvEs35DAe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcncVQswB7ziUoV4LvEs35DAe.png) #### 可能涉及的知识点 diff --git a/7.Web开发入门/7.1.2进阶部分.md b/7.网络应用开发/7.1.1.2进阶部分.md similarity index 90% rename from 7.Web开发入门/7.1.2进阶部分.md rename to 7.网络应用开发/7.1.1.2进阶部分.md index 778e4ef..e4526d3 100644 --- a/7.Web开发入门/7.1.2进阶部分.md +++ b/7.网络应用开发/7.1.1.2进阶部分.md @@ -10,11 +10,11 @@ 如果你曾经用过助手的小程序,你可能会在首页看到这样的天气卡片: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTNJhtqw6Km24fKgAnjZtBS.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTNJhtqw6Km24fKgAnjZtBS.png) 当然了,平时大家也会用到各种天气 APP -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnUuqMoTjiOH9NSdYx4GCGme.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnUuqMoTjiOH9NSdYx4GCGme.png) 那么,让我们动手实现一个天气卡片吧~ @@ -63,9 +63,9 @@ ## 🎶 音乐播放器 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnRaBolh8i2FkoIJW69a5g3e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnRaBolh8i2FkoIJW69a5g3e.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJ13CDzxp9lwEtGivTuJ4nh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJ13CDzxp9lwEtGivTuJ4nh.png) 相信你平时或多或少都会听音乐,那么你是喜欢用网易云还是 QQ 音乐呢?或者是系统自带的音乐播放器?不过,其实你也可以自己做一个音乐播放器,来满足你对听音乐这件事的所有幻想,听起来是不是很酷呢 😎~那么,来试试看吧! diff --git a/7.Web开发入门/7.1.3附录1:前端介绍(详细版).md b/7.网络应用开发/7.1.1.3附录1:前端介绍(详细版).md similarity index 100% rename from 7.Web开发入门/7.1.3附录1:前端介绍(详细版).md rename to 7.网络应用开发/7.1.1.3附录1:前端介绍(详细版).md diff --git a/7.Web开发入门/7.1.4附录2:大前端开发.md b/7.网络应用开发/7.1.1.4附录2:大前端开发.md similarity index 100% rename from 7.Web开发入门/7.1.4附录2:大前端开发.md rename to 7.网络应用开发/7.1.1.4附录2:大前端开发.md diff --git a/7.Web开发入门/7.1.5附录3:跨端开发.md b/7.网络应用开发/7.1.1.5附录3:跨端开发.md similarity index 93% rename from 7.Web开发入门/7.1.5附录3:跨端开发.md rename to 7.网络应用开发/7.1.1.5附录3:跨端开发.md index f136b61..f5cd32e 100644 --- a/7.Web开发入门/7.1.5附录3:跨端开发.md +++ b/7.网络应用开发/7.1.1.5附录3:跨端开发.md @@ -69,7 +69,7 @@ 它是基于WebView渲染,通过JS Bridge 把一部分系统能力开放给JS调用。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/235436487dsfhtwuytjyfj.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/235436487dsfhtwuytjyfj.png) WebView容器的工作原理是基于Web技术来实现界面和功能,通过将原生的接口封装、暴露给JavaScript调用,JavaScript编写的页面可以运行在系统自带的WebView中。这样做的优势是,对于前端开发者比较友好,可以很快地实现页面跨端,同时保留调用**原生的能力**,通过搭建桥接层和原生能力打通。但这种设计,跨端的能力受限于桥接层,当调用之前没有的原生能力时,就需要增加桥。另外,浏览器内核的渲染独立于系统组件,无法保证原生体验,**渲染的效果会差不少**。 @@ -80,7 +80,7 @@ WebView容器的工作原理是基于Web技术来实现界面和功能,通过 浏览器提供了一个容器,屏蔽了底层差异,提供了统一的 api(dom api),这样就可以实现同一份代码跑在不同平台的统一的容器里。这个容器叫做浏览器引擎,由 js 引擎、渲染引擎等构成。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/fdegetyjyrj.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/fdegetyjyrj.png) #### PWA 尽管PWA的出现不是为了“跨端”,但他们对于“跨端”的天然支持,能够让一套代码运行在PC、移动两端,就再一次产生了跨端设计实施的可能性。 @@ -107,7 +107,7 @@ PWA 是 Google 于 2016 年提出的概念,于 2017 年正式落地,于 2018 #### Electron -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wettrjryju.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wettrjryju.png) Electron 是使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序的框架,可构建出兼容 Mac、Windows 和 Linux 三个平台的应用程序。 @@ -123,7 +123,7 @@ Electron 的跨端原理并不难理解:它通过集成浏览器内核,使 #### React Native React Native 是一个由 Facebook 于2015年9月发布的一款开源的 JavaScript 框架,它可以让开发者使用 JavaScript 和 React 来开发跨平台的移动应用。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/eryyjyuj.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/eryyjyuj.png) React Native 的思路是最大化地复用前端的生态和 Native 的生态,和 WebView 容器的最大区别在于 View 的渲染体系。React Native 抛弃了低效的浏览器内核渲染,转而**使用自己的 DSL 生成中间格式**,然后映射到对应的平台,**渲染成平台的组件**。相对 WebView 容器,体验会有一定的提升。不过,渲染时需要 JavaScript 和原生之间通信,在有些场景可能会导致卡顿。另外就是,渲染还是在Native层,要求开发人员对Native有一定的熟悉度。 @@ -150,7 +150,7 @@ Flutter与上述Recat Native、WebView容器本质上都是不同的,它没有 微信小程序的渲染层与逻辑层分别由两个线程管理,渲染层的界面使用 webview 进行渲染;逻辑层采用 JSCore运行JavaScript代码。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/rtjyujyu.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/rtjyujyu.png) ## 类前端开发:拿过来吧你 @@ -166,7 +166,7 @@ Flutter与上述Recat Native、WebView容器本质上都是不同的,它没有 JS UI框架采用类HTML和CSS Web编程语言作为页面布局和页面样式的开发语言,页面业务逻辑则支持ECMAScript规范的JavaScript语言。JS UI框架提供的类Web编程范式,可以让开发者避免编写UI状态切换的代码,视图配置信息更加直观。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/3465ytyjyjy.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/3465ytyjyjy.png) ## 跨端不只是跨端:爱你的全世界 @@ -174,9 +174,9 @@ JS UI框架采用类HTML和CSS Web编程语言作为页面布局和页面样式 ## 什么样的场景可以跨端? 跨端应用能够真正推进下去,除了有技术保障外,还需要合适的需求场景,使用PC端的功能型产品主要是需要大屏带来的“效率”(办公、个人管理、教育)与“沉浸”(数据、金融、游戏、影视)体验。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ertehry.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ertehry.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ertjyunyunm.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ertjyunyunm.png) 依赖PC、移动双端进行经营管理的电商场景,也有很多内容适合跨端。 @@ -185,25 +185,25 @@ JS UI框架采用类HTML和CSS Web编程语言作为页面布局和页面样式 1. 双端基础组件设计规则对齐(对前端来说是同类组件API、属性对齐以及组件功能形态映射) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ewttrhjy.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ewttrhjy.png) Select对应Picker 1. 布局响应规则(行列变化,聚合变化等); -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/20191118PGkkRz.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/20191118PGkkRz.jpg) 卡片布局的一种聚合变化 1. 交互形态响应规则(导航、交互模式等); -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/20191118aoefIO.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/20191118aoefIO.jpg) 表单型弹窗对应新页面 1. 不同场景的跨端策略,例如Dashboard页面的跨端应保证用户在首屏快速获取关键信息,下图的Bootstrap模板是一个错误示例,移动端的布局方式浪费首屏空间,降低用户获取关键信息的效率。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/20191118BrYZzg.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/20191118BrYZzg.jpg) Mobile first 不是唯一准则。进行具体场景的跨端设计时,我们会从两端场景出发重新对比分析用户的需求差异,明确体验的增强点与折损点。特别是电商中后台场景中:有些业务中用户的主阵地并不是在移动端,而是PC端,比如用户运营策略的设置;有些是两端分别承载不同的场景需求,比如任务的处理。 @@ -217,7 +217,7 @@ Mobile first 不是唯一准则。进行具体场景的跨端设计时,我们 Serverless字面意思是无服务,但并不代表再也不需要服务器了,而是指开发者不需要过多的考虑服务器的问题,计算资源作为服务出现而不是服务器的概念出现。 那么Serverlss,是对全部底层资源和操作的封装,让开发者专注于业务逻辑。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/gfhuewgfuiwe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/gfhuewgfuiwe.png) Serverless = Faas (Function as a service) + Baas (Backend as a service) @@ -254,7 +254,7 @@ Serverless 带来的其实是前端研发模式上的颠覆。相对以往纯前 - 无需在代码内考虑高并发高可靠性,可以专注于业务 - 通过云函数实例的高并发能力,实现业务高并发 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/fhuieufsiofhei.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/fhuieufsiofhei.png) #### 自动弹性压缩 @@ -281,7 +281,7 @@ uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编 - 在Android平台,将.uts文件编译为kotlin代码 - 在iOS平台,将.uts文件编译为swift代码 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/uni-function-diagram.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/uni-function-diagram.png) 1. 区分页面和组件的区别:页面和组件的生命周期 2. 云函数、云数据库 @@ -298,12 +298,12 @@ uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编 1. Frameless:桌面端不仅仅只有方框矩形,而是想你所想。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/df77f01037fc4ceb8d4aa8f06168fc95~tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/df77f01037fc4ceb8d4aa8f06168fc95~tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif) ## 参考作业 尝试使用某种跨端框架和云函数,实现一个查看课表应用,形式不限。推荐使用hdu-lis包拿到数据。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Snipaste_2023-04-22_18-57-44.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-04-22_18-57-44.png) diff --git a/7.Web开发入门/7.1前端部分.md b/7.网络应用开发/7.1.1前端部分.md similarity index 100% rename from 7.Web开发入门/7.1前端部分.md rename to 7.网络应用开发/7.1.1前端部分.md diff --git a/7.Web开发入门/7.2.1基础部分.md b/7.网络应用开发/7.1.2.1基础部分.md similarity index 98% rename from 7.Web开发入门/7.2.1基础部分.md rename to 7.网络应用开发/7.1.2.1基础部分.md index bba4753..e157ba4 100644 --- a/7.Web开发入门/7.2.1基础部分.md +++ b/7.网络应用开发/7.1.2.1基础部分.md @@ -27,7 +27,9 @@ Hello~这里是杭电助手技术部后端,无论基础如何,您都可以 这只吉祥物囊袋鼠的英文学名为 Gopher,每位热爱 Golang 的开发者都会自称 Gopher (就像 jvaver 一样(x),而它的造型出于创始人之一 Rob Pike 的妻子之手。 #### 视频资料(P2-P3): -https://www.bilibili.com/video/BV1zR4y1t7Wj/ + + + #### 文字资料: - Golang 官网(非常好记: go.dev(eloper)) @@ -74,7 +76,7 @@ GoLand 可以使用教育邮箱学生认证白嫖噢~👀 #### 视频资料(P4-P6): -https://www.bilibili.com/video/BV1zR4y1t7Wj/ + #### 文字资料: @@ -103,7 +105,8 @@ Golang 的语法是 C/C++ 系的,在许多地方你都可以看到他们的影 #### 视频资料(P9-P56 每集视频并不长,不要被吓到了喔): -https://www.bilibili.com/video/BV1zR4y1t7Wj/ + + #### 文字资料: @@ -147,6 +150,9 @@ https://www.runoob.com/http/http-intro.html - [《互联网时代》纪录片](https://www.bilibili.com/video/BV1DU4y147XR/) - 与 HTTP 没什么关系,但给当时的我带来极大的震撼和触动。互联网是人类连接的重要一步,是对人类自由、平等、互通之理念长达半个世纪的深刻贯彻。 + + + > 原本稀薄的得以聚合,曾经蜷曲的得以伸展,容易被忽略的得以显现,可能被排斥的获得接纳:孤独的不再孤独,卑微的不再卑微,每一个生命绽放的声音,从来没有像这样韵味深长。 - [HTTP | MDN](https://developer.mozilla.org/zh-CN/docs/Web/HTTP) - HTTP 协议较为权威的参考文档和资料。 diff --git a/7.Web开发入门/7.2.2进阶部分.md b/7.网络应用开发/7.1.2.2进阶部分.md similarity index 95% rename from 7.Web开发入门/7.2.2进阶部分.md rename to 7.网络应用开发/7.1.2.2进阶部分.md index 0af5400..009baea 100644 --- a/7.Web开发入门/7.2.2进阶部分.md +++ b/7.网络应用开发/7.1.2.2进阶部分.md @@ -2,7 +2,7 @@ 请先通读后端基础任务文档: -[基础部分](./7.2.1%E5%9F%BA%E7%A1%80%E9%83%A8%E5%88%86.md) +[基础部分](./7.1.2.1基础部分.md) 你可以清晰地感受到,基础任务并不是一个生产可用的服务,它仅可作为一个 DEMO 用于演示。尝试为它的生产部署之路添砖加瓦! diff --git a/7.Web开发入门/7.2后端部分.md b/7.网络应用开发/7.1.2后端部分.md similarity index 100% rename from 7.Web开发入门/7.2后端部分.md rename to 7.网络应用开发/7.1.2后端部分.md diff --git a/7.Web开发入门/7.Web开发入门.md b/7.网络应用开发/7.1WEB开发入门.md similarity index 94% rename from 7.Web开发入门/7.Web开发入门.md rename to 7.网络应用开发/7.1WEB开发入门.md index 7004859..e675321 100644 --- a/7.Web开发入门/7.Web开发入门.md +++ b/7.网络应用开发/7.1WEB开发入门.md @@ -1,4 +1,4 @@ -# 7.Web 开发入门 +# 7.网络应用开发入门 > 作者:aFlyBird0 @@ -70,7 +70,7 @@ 我们这里就来个极简版吧: -1. 最终形态是网站(用户访问 [http://message.srt.com](http://message.srt.com) 就能参与留言)。 +1. 最终形态是网站(用户访问 [https://message.hdu-cs.wiki](https://message.hdu-cs.wiki) 就能参与留言,这个网站是虚构的 不存在哦~)。 2. 留言的时候需要填写昵称(不需要注册)、留言内容(只支持纯文字)。 #### 2.3.2 前端 @@ -107,7 +107,7 @@ A:理论上可以。但一般不会这么做(除了一些实时的网络聊 登登登,后端登场! -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnorsQ6py7AU0LsCtn4f5LSd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnorsQ6py7AU0LsCtn4f5LSd.png) 解释一下: @@ -136,7 +136,7 @@ A:理论上可以。但一般不会这么做(除了一些实时的网络聊 1. 测试 2. 如果程序出现了 bug,调试程序 -3. 没问题之后需要把写好的后端部署到服务器上。即放到一个互联网公网能访问的地方,给出前端地址(也就是 [http://message.srt.com](http://message.srt.com))同时后端也要运行起来,处理后台逻辑。 +3. 没问题之后需要把写好的后端部署到服务器上。即放到一个互联网公网能访问的地方,给出前端地址(也就是 [https://message.hdu-cs.wiki](https://message.hdu-cs.wiki))同时后端也要运行起来,处理后台逻辑。 4. 写项目文档,防止后面接手的人看不懂你写的项目(甚至不写文档可能过几天你自己都看不懂了) 5. 持续维护项目(修复 bug,开发新功能) diff --git a/7.网络应用开发/7.网络应用开发入门.md b/7.网络应用开发/7.网络应用开发入门.md new file mode 100644 index 0000000..b4618e7 --- /dev/null +++ b/7.网络应用开发/7.网络应用开发入门.md @@ -0,0 +1,3 @@ +# 7.网络应用开发入门 + +本章节原本的名字是「WEB开发入门」,后来发现这个标题涵盖的范围还是小了点。因为网络应用开发不仅仅涉及到前端的网页设计和开发、后端数据库操作等方面,还包括云原生的应用部署和管理等等一系列相关知识。因此,我们拓展了这一章节的内容,以便读者可以全面了解网络应用开发的各个方面。 \ No newline at end of file diff --git a/7.Web开发入门/static/20191118BrYZzg.jpg b/7.网络应用开发/static/20191118BrYZzg.jpg similarity index 100% rename from 7.Web开发入门/static/20191118BrYZzg.jpg rename to 7.网络应用开发/static/20191118BrYZzg.jpg diff --git a/7.Web开发入门/static/20191118PGkkRz.jpg b/7.网络应用开发/static/20191118PGkkRz.jpg similarity index 100% rename from 7.Web开发入门/static/20191118PGkkRz.jpg rename to 7.网络应用开发/static/20191118PGkkRz.jpg diff --git a/7.Web开发入门/static/20191118aoefIO.jpg b/7.网络应用开发/static/20191118aoefIO.jpg similarity index 100% rename from 7.Web开发入门/static/20191118aoefIO.jpg rename to 7.网络应用开发/static/20191118aoefIO.jpg diff --git a/7.Web开发入门/static/235436487dsfhtwuytjyfj.png b/7.网络应用开发/static/235436487dsfhtwuytjyfj.png similarity index 100% rename from 7.Web开发入门/static/235436487dsfhtwuytjyfj.png rename to 7.网络应用开发/static/235436487dsfhtwuytjyfj.png diff --git a/7.Web开发入门/static/3465ytyjyjy.png b/7.网络应用开发/static/3465ytyjyjy.png similarity index 100% rename from 7.Web开发入门/static/3465ytyjyjy.png rename to 7.网络应用开发/static/3465ytyjyjy.png diff --git a/7.Web开发入门/static/Snipaste_2023-04-22_18-57-44.png b/7.网络应用开发/static/Snipaste_2023-04-22_18-57-44.png similarity index 100% rename from 7.Web开发入门/static/Snipaste_2023-04-22_18-57-44.png rename to 7.网络应用开发/static/Snipaste_2023-04-22_18-57-44.png diff --git a/7.Web开发入门/static/boxcnFZwQVTUWkfsbNxYfJkgPDg.png b/7.网络应用开发/static/boxcnFZwQVTUWkfsbNxYfJkgPDg.png similarity index 100% rename from 7.Web开发入门/static/boxcnFZwQVTUWkfsbNxYfJkgPDg.png rename to 7.网络应用开发/static/boxcnFZwQVTUWkfsbNxYfJkgPDg.png diff --git a/7.Web开发入门/static/boxcnJ13CDzxp9lwEtGivTuJ4nh.png b/7.网络应用开发/static/boxcnJ13CDzxp9lwEtGivTuJ4nh.png similarity index 100% rename from 7.Web开发入门/static/boxcnJ13CDzxp9lwEtGivTuJ4nh.png rename to 7.网络应用开发/static/boxcnJ13CDzxp9lwEtGivTuJ4nh.png diff --git a/7.Web开发入门/static/boxcnRaBolh8i2FkoIJW69a5g3e.png b/7.网络应用开发/static/boxcnRaBolh8i2FkoIJW69a5g3e.png similarity index 100% rename from 7.Web开发入门/static/boxcnRaBolh8i2FkoIJW69a5g3e.png rename to 7.网络应用开发/static/boxcnRaBolh8i2FkoIJW69a5g3e.png diff --git a/7.Web开发入门/static/boxcnTNJhtqw6Km24fKgAnjZtBS.png b/7.网络应用开发/static/boxcnTNJhtqw6Km24fKgAnjZtBS.png similarity index 100% rename from 7.Web开发入门/static/boxcnTNJhtqw6Km24fKgAnjZtBS.png rename to 7.网络应用开发/static/boxcnTNJhtqw6Km24fKgAnjZtBS.png diff --git a/7.Web开发入门/static/boxcnUuqMoTjiOH9NSdYx4GCGme.png b/7.网络应用开发/static/boxcnUuqMoTjiOH9NSdYx4GCGme.png similarity index 100% rename from 7.Web开发入门/static/boxcnUuqMoTjiOH9NSdYx4GCGme.png rename to 7.网络应用开发/static/boxcnUuqMoTjiOH9NSdYx4GCGme.png diff --git a/7.Web开发入门/static/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg b/7.网络应用开发/static/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg similarity index 100% rename from 7.Web开发入门/static/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg rename to 7.网络应用开发/static/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg diff --git a/7.Web开发入门/static/boxcnbigxAK5SbxiWuDHr1Ashne.png b/7.网络应用开发/static/boxcnbigxAK5SbxiWuDHr1Ashne.png similarity index 100% rename from 7.Web开发入门/static/boxcnbigxAK5SbxiWuDHr1Ashne.png rename to 7.网络应用开发/static/boxcnbigxAK5SbxiWuDHr1Ashne.png diff --git a/7.Web开发入门/static/boxcncVQswB7ziUoV4LvEs35DAe.png b/7.网络应用开发/static/boxcncVQswB7ziUoV4LvEs35DAe.png similarity index 100% rename from 7.Web开发入门/static/boxcncVQswB7ziUoV4LvEs35DAe.png rename to 7.网络应用开发/static/boxcncVQswB7ziUoV4LvEs35DAe.png diff --git a/7.Web开发入门/static/boxcnikdFX5WNml7sgtPMOJQiGh.png b/7.网络应用开发/static/boxcnikdFX5WNml7sgtPMOJQiGh.png similarity index 100% rename from 7.Web开发入门/static/boxcnikdFX5WNml7sgtPMOJQiGh.png rename to 7.网络应用开发/static/boxcnikdFX5WNml7sgtPMOJQiGh.png diff --git a/7.Web开发入门/static/boxcnorsQ6py7AU0LsCtn4f5LSd.png b/7.网络应用开发/static/boxcnorsQ6py7AU0LsCtn4f5LSd.png similarity index 100% rename from 7.Web开发入门/static/boxcnorsQ6py7AU0LsCtn4f5LSd.png rename to 7.网络应用开发/static/boxcnorsQ6py7AU0LsCtn4f5LSd.png diff --git a/7.Web开发入门/static/boxcnrqddPFusKhe0vZuzXJOosg.png b/7.网络应用开发/static/boxcnrqddPFusKhe0vZuzXJOosg.png similarity index 100% rename from 7.Web开发入门/static/boxcnrqddPFusKhe0vZuzXJOosg.png rename to 7.网络应用开发/static/boxcnrqddPFusKhe0vZuzXJOosg.png diff --git a/7.Web开发入门/static/df77f01037fc4ceb8d4aa8f06168fc95~tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif b/7.网络应用开发/static/df77f01037fc4ceb8d4aa8f06168fc95~tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif similarity index 100% rename from 7.Web开发入门/static/df77f01037fc4ceb8d4aa8f06168fc95~tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif rename to 7.网络应用开发/static/df77f01037fc4ceb8d4aa8f06168fc95~tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif diff --git a/7.Web开发入门/static/ertehry.png b/7.网络应用开发/static/ertehry.png similarity index 100% rename from 7.Web开发入门/static/ertehry.png rename to 7.网络应用开发/static/ertehry.png diff --git a/7.Web开发入门/static/ertjyunyunm.png b/7.网络应用开发/static/ertjyunyunm.png similarity index 100% rename from 7.Web开发入门/static/ertjyunyunm.png rename to 7.网络应用开发/static/ertjyunyunm.png diff --git a/7.Web开发入门/static/eryyjyuj.png b/7.网络应用开发/static/eryyjyuj.png similarity index 100% rename from 7.Web开发入门/static/eryyjyuj.png rename to 7.网络应用开发/static/eryyjyuj.png diff --git a/7.Web开发入门/static/ewttrhjy.png b/7.网络应用开发/static/ewttrhjy.png similarity index 100% rename from 7.Web开发入门/static/ewttrhjy.png rename to 7.网络应用开发/static/ewttrhjy.png diff --git a/7.Web开发入门/static/fdegetyjyrj.png b/7.网络应用开发/static/fdegetyjyrj.png similarity index 100% rename from 7.Web开发入门/static/fdegetyjyrj.png rename to 7.网络应用开发/static/fdegetyjyrj.png diff --git a/7.Web开发入门/static/fhuieufsiofhei.png b/7.网络应用开发/static/fhuieufsiofhei.png similarity index 100% rename from 7.Web开发入门/static/fhuieufsiofhei.png rename to 7.网络应用开发/static/fhuieufsiofhei.png diff --git a/7.Web开发入门/static/gfhuewgfuiwe.png b/7.网络应用开发/static/gfhuewgfuiwe.png similarity index 100% rename from 7.Web开发入门/static/gfhuewgfuiwe.png rename to 7.网络应用开发/static/gfhuewgfuiwe.png diff --git a/7.Web开发入门/static/rtjyujyu.png b/7.网络应用开发/static/rtjyujyu.png similarity index 100% rename from 7.Web开发入门/static/rtjyujyu.png rename to 7.网络应用开发/static/rtjyujyu.png diff --git a/7.Web开发入门/static/uni-function-diagram.png b/7.网络应用开发/static/uni-function-diagram.png similarity index 100% rename from 7.Web开发入门/static/uni-function-diagram.png rename to 7.网络应用开发/static/uni-function-diagram.png diff --git a/7.Web开发入门/static/wettrjryju.png b/7.网络应用开发/static/wettrjryju.png similarity index 100% rename from 7.Web开发入门/static/wettrjryju.png rename to 7.网络应用开发/static/wettrjryju.png diff --git a/8.基础学科/8.2定积分.md b/8.基础学科/8.2定积分.md deleted file mode 100644 index 55aabf3..0000000 --- a/8.基础学科/8.2定积分.md +++ /dev/null @@ -1,116 +0,0 @@ -本文主要讲解定积分在计算时运用的各种化简技巧。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/lake_card_mindmap.png) - -# 一:由不定积分计算定积分 - - -## 1.1原函数成立区间的问题 - -注意:由不定积分推导出的原函数在定积分的区间不一定成立!!!
对于大多数定积分题目,可直接由代入不定积分的结论。 - - -# 二:利用对称性化简定积分 - - -## 2.1奇偶对称和周期性 - -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/picture1.png) -
-命题1:设函数f在区间$[0,a]$可积,且关于区间中点$\frac{a}{2}$为奇函数,即对于$x\in[0,a]$,有$f(x)=-f(a-x)$,则成立
$\int_0^af(x)dx=0$。
命题2:设函数f在区间$[0,a]$可积,且关于区间中点$\frac{a}{2}$为偶函数,即对于$x\in[0,a]$,有$f(x)=f(a-x)$, 则成立
$\int_0^af(x)dx=2\int_0^{\frac{a}{2}}f(x)dx$。
命题3:若函数f为定义在$-\infty$\int_a^{a+T}f(x)dx=\int_0^Tf(x)dx$
**_Proof:_**
将积分区间拆成多段,带入上文对称公式,之后换元即可,证明的本质是统一了积分区间。
_**Example:**
$\int_0^{2\pi}\frac{dx}{sin^4x+cos^4x}$ - -利用:$sin^4x+cos^4x=(sin^2x+cos^2x)^2-2sin^2xcos^2x=1-\frac{1}{2}sin^2(2x)=\frac{1}{2}(1+cos^2(2x))$,周期为$\pi/2$
两次利用命题3,将积分区间化简为$[0,\frac{\pi}{2}]$。由于被积函数关于$\pi/4$偶对称,利用命题2,可将积分区间化简为$[0,\frac{\pi}{4}]$,故原式等于:
$4\int_0^{\frac{\pi}{2}}\frac{dx}{sin^4x+cos^4x}=8\int_0^{\frac{\pi}{4}}\frac{dx}{sin^4x+cos^4x}=16\int_0^{\frac{\pi}{4}}\frac{dx}{1+cos^2(2x)}=8\int_0^{\frac{\pi}{2}}\frac{dt}{1+cos^2(t)}=8\int_0^{\frac{\pi}{2}}\frac{d(tant)}{2+tan^2t}$
$=8\int_{0}^{+\infty}\frac{du}{u^2+2}=4\sqrt{2}arctan(\frac{u}{\sqrt{2}})|_0^{+\infty}=2\sqrt{2}\pi$_ - -## 2.2积分区间的缩小 - -命题4:设f在$[0,a]$上可积,则成立$\int_0^af(x)dx=\int_0^{\frac{a}{2}}[f(x)+f(a-x)]dx$,此为命题1,2的推广形式。
可推广为:$\int_a^bf(x)dx=\int_a^{\frac{a+b}{2}}[f(x)+f(a+b-x)]dx$,该命题在$f(x)+f(a+b-x)$更好积分时使用。
**_Proof:_
反向利用命题2,$\int_0^af(x)dx=\frac{1}{2}(\int_0^af(x)dx+\int_0^af(a-x)dx)=\int_0^{\frac{a}{2}}[f(x)+f(a-x)]dx$
命题5:若f(x)在闭区间$[0,1]$上连续,则
(a)$\int_0^{\frac{\pi}{2}}f(sinx)dx=\int_0^{\frac{\pi}{2}}f(cosx)dx$
(b)$\int_0^{\pi}xf(sinx)dx=\frac{\pi}{2}\int_0^{\pi}f(sinx)dx$
(c)$\int_0^{\pi}f(sinx)dx=2\int_0^{\frac{\pi}{2}}f(sinx)dx$
**_Proof:_**
(a)$x=\pi/2-t$,(b)$x=\pi-t$,(c)$t=x-\pi/2$
也可由命题4直接推出,如对于(b)
$\int_0^{\pi}(x-\pi/2)f(sinx)dx=\int_0^{\frac{\pi}{2}}(x-\pi/2+\pi-x-\pi/2)f(sinx)dx=0$
_**Example1:**_
(a)$\int_0^{\pi/2}\frac{sinx}{sinx+cosx}dx$    (b)$\int_0^{\pi/2}ln(sinx)dx$    (c)$\int_0^{\pi/2}ln(tanx)dx$
(d)$\int_0^{\pi/2}\frac{1}{1+tan^ax}dx$       (e)$\int_0^{\pi}\frac{xsinx}{1+cos^2x}dx$    (f)$\int_0^1\frac{lnx}{\sqrt{1-x^2}}dx$
例如,对于b,利用命题4,$\int_0^{\frac{\pi}{4}}[ln(sin(x))+ln(cos(x))]dx=\int_0^{\frac{\pi}{4}}[ln(sin(2x)/2]dx$
$=\int_0^{\frac{\pi}{4}}[ln(sin(2x))-ln(2)]dx=\frac{1}{2}\int_0^{\frac{\pi}{2}}ln(sin(x))dx-\frac{\pi}{4}ln2=-\frac{\pi}{2}ln2$
_**Example2:**_
设$f(x)$在$[a,b]$上连续且单调增加,证明:$\int_a^bxf(x)dx\geq\frac{a+b}{2}\int_a^bf(x)dx$
$\int_a^b(x-\frac{a+b}{2})f(x)dx=\int_a^{\frac{a+b}{2}}[(x-\frac{a+b}{2})f(x)+(a+b-x-\frac{a+b}{2})f(a+b-x)]dx$
$=\int_a^{\frac{a+b}{2}}(x-\frac{a+b}{2})[f(x)-f(a+b-x)]dx$
因为$f(x)$单增,所以$f(x)-f(a+b-x)\leq0$,原式大于等于0,证毕。 - -# 三:利用递归表达式化简定积分 - -注意:全部利用分部积分构造递推表达式,使得分部积分脱出积分号的项为0,对积分内指数进行降阶即可。 - -## 3.1高阶三角函数 -$I_0=\int_0^{\pi/2}dx=\pi/2$,$I_1=\int_0^{\pi/2}sinxdx=1$,$I_2=\int_0^{\pi/2}sin^2xdx=\pi/4$
思考:如果$I_n$为一数列$I_n=\int_0^{\pi/2}sin^nxdx$,请问
(1)$I_n$的递推表达式为?
(2)$I_n$的通项表达式为?
(3)$I_n(n\to\infty)$的极限为?
(4)求$\lim_{k\to\infty}\frac{I_{2k+1}}{I_{2k}}$?
答案:
(1),(2)
-![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/picture2.png) - -推论:由命题4得,对cosx做上述操作得到结果相同。
(3)$I_n(n\to\infty)$的极限为0,如图为$sin^n(x)在[0,1]$的函数图像,因为$sin^n(x)![save.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564801370246-b0067524-94bb-4de3-9d1d-fde22a35d9bf.png#align=left&display=inline&height=158&name=save.png&originHeight=400&originWidth=650&size=32867&status=done&style=none&width=256)
证明:
法一:积分的有界性
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564497996832-07ba349b-e630-4e23-a0ae-781051191e00.png#align=left&display=inline&height=165&name=image.png&originHeight=295&originWidth=596&size=39253&status=done&style=none&width=333)
这里第二项趋于0是因为$sin^n(x)\to0$,从图中也可以观察出来。
法二:
$if\ n=2k$
$I_{2k}=\frac{(2k-1)!!}{(2k)!!}=\frac{(2k-1)\cdot(2k-3)\cdot\cdot\cdot5\cdot3\cdot1}{(2k)(2k-2)\cdot\cdot\cdot6\cdot4\cdot2}\cdot\frac{\pi}{2}$
$0$\therefore I_{2k}\to0$
$\therefore I_{2k+1}=\int_0^{\pi/2}sinx\cdot sin^{2k}xdx=sinx_0\cdot\int_0^{\pi/2}sin^{2k}xdx\to0$
$\therefore I_{n}\to0$
(4)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564147108664-81bb7241-200a-4d44-bc2c-d054f460cf32.png#align=left&display=inline&height=87&name=image.png&originHeight=202&originWidth=1071&size=42020&status=done&style=none&width=462)
维基百科:[沃利斯乘积](https://zh.wikipedia.org/wiki/%E6%B2%83%E5%88%A9%E6%96%AF%E4%B9%98%E7%A7%AF)
3B1B:[沃利斯乘积的几何解释](https://www.bilibili.com/video/av22808876/) - -## 3.2组合三角函数 -注意:此类题一律用分部积分画出和原被积函数相关的表达式,但不一定是相等,以实现得到递推关系降阶的目的。
_**Example:**_
求 $L_n=\int_0^{\pi/2}cos^n(x)cos(nx)dx$ 的递归表达式和通项
$=\frac{1}{n}\int_0^{\pi/2}cos^n(x)dsin(nx)=\frac{1}{n}(cos^n(x)sin(nx)|_0^{\pi/2}-\frac{1}{n}\int_0^{\pi/2}nsin(nx)cos^{n-1}(x)(-sin(x))dx$
$=\int_0^{\pi/2}cos^{n-1}(x)sin(nx)sin(x)dx$
$2L_n=\int_0^{\pi/2}[cos^{n-1}(x)sin(nx)sin(x)+cos^n(x)cos(nx)]dx=\int_0^{\pi/2}cos^{n-1}(x)(cos(nx)cos(x)+sin(nx)sin(x))dx$$=\int_0^{\pi/2}cos^{n-1}(x)cos((n-1)x)dx=L_{n-1}$
所以   $L_n=\frac{1}{2}L_{n-1}$   而$L_1=\int_0^{\pi/2}cos(x)cos(x)dx=\pi/4$
所以数列的通项表达式为:$L_n=\frac{\pi}{2^{n+1}}$ - -## 3.3其他函数 -_**Example:**_
求 $I_n=\int_0^1x^m(ln(x))^ndx$ 的递推表达式和通项。 - -![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564241319233-796ecfee-2ddd-4667-80f4-b73cd125e934.png#align=left&display=inline&height=169&name=image.png&originHeight=295&originWidth=513&size=22668&status=done&style=none&width=294)
_**Exercise:**_
_**![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564241435483-8be6a610-4c85-4cf1-9462-2098bcfa62f3.png#align=left&display=inline&height=130&name=image.png&originHeight=228&originWidth=807&size=41698&status=done&style=none&width=461.14285714285717)**(3)求$a_n$的极限
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564744389393-b8440935-0e4b-4929-9051-0fdd2f777195.png#align=left&display=inline&height=202&name=image.png&originHeight=404&originWidth=715&size=151214&status=done&style=none&width=357.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564744402464-00a0d4fb-b389-4698-8ff3-10d3636ec0d9.png#align=left&display=inline&height=85&name=image.png&originHeight=169&originWidth=761&size=67350&status=done&style=none&width=380.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564744431484-9a434d95-daa6-41ae-a1e1-d0e6195c320f.png#align=left&display=inline&height=183&name=image.png&originHeight=366&originWidth=771&size=159135&status=done&style=none&width=385.5)
(3)结果为0,证法和高阶三角函数一样。 - -# 四:利用级数对定积分进行估值 - - -## 4.1常用的几种级数 -基本的思路是:把函数做泰勒展开,交换积分和求和符号,对每一项幂函数进行积分,最后合并即可。
下面给出三个重要常数: - -(a)$\sum_{n=1}^{\infty}\frac{1}{n^2}=\frac{\pi^2}{6}$    (b)$\sum_{n=1}^{\infty}\frac{(-1)^{n-1}}{n}=ln2$   (c)$\sum_{n=1}^{\infty}\frac{(-1)^{n-1}}{(2m-1)^2}\approx0.92$ - -此类级数可由初等函数泰勒展开后将x=1或x=-1代入得到。 - -这里给出简单的证明:
(a)$\sum_{n=1}^{\infty}\frac{1}{n^2}=\frac{\pi^2}{6}$
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564242905610-5bf4dd0a-0a52-4b38-8e7d-485eed0eb53d.png#align=left&display=inline&height=647&name=image.png&originHeight=1132&originWidth=1839&size=226683&status=done&style=none&width=1050.857142857143)
(b)$\sum_{n=1}^{\infty}\frac{(-1)^{n-1}}{n}=ln2$ 
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564243200904-46e01aa2-ff5f-4e91-96c6-24ffac42527b.png#align=left&display=inline&height=120&name=image.png&originHeight=254&originWidth=712&size=47782&status=done&style=none&width=337)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564243217478-d04ddecb-e9a1-4b7d-965a-e574fc3ac5d6.png#align=left&display=inline&height=155&name=image.png&originHeight=387&originWidth=658&size=51785&status=done&style=none&width=264) - -![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564243252320-7f8fe6d6-ee10-491f-903c-e88ec528e339.png#align=left&display=inline&height=58&name=image.png&originHeight=101&originWidth=821&size=16857&status=done&style=none&width=469.14285714285717)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564243274256-af7edc4a-1c6b-4dbe-ac11-9d21eeec71df.png#align=left&display=inline&height=76&name=image.png&originHeight=133&originWidth=645&size=27056&status=done&style=none&width=368.57142857142856)
(c)$\sum_{n=1}^{\infty}\frac{(-1)^{n-1}}{(2m-1)^2}\approx0.92$
$\int_0^1\frac{arctan(x)}{x}dx=\int_0^1\frac{1}{x}\sum_{n=0}^{\infty}(-1)^n\frac{1}{2n+1}x^{2n+1}dx=\int_0^1\sum_{n=0}^{\infty}(-1)^n\frac{1}{2n+1}x^{2n}dx=\sum_{n=0}^{\infty}(-1)^n\frac{1}{2n+1}\int_0^1x^{2n}dx$$\sum_{n=0}^{\infty}(-1)^n\frac{1}{(2n+1)^2}x^{2n+1}|_0^1=\sum_{n=0}^{\infty}(-1)^n\frac{1}{(2n+1)^2}=G\approx0.92$ (这可以利用计算机对此积分估值得到) - -在计算积分时,通常通过上述思路把积分化为上述重要常数,进而直接得出结果。 - - -## 4.2将定积分转换为级数 -_**Example1:重要常数(a)**_
$\int_0^1ln(x)ln(1-x)dx$
答案:
[视频链接](https://www.youtube.com/watch?v=q9jbmEGClSk&list=PLj7p5OoL6vGzJxJU1seMmj-5CBNhMYStQ&index=8)
_**Example2:重要常数(c)**_
(a) $\int_0^{\pi/4}ln(tan(x))dx$       (b)  $\int_0^{\pi/4}ln(cot(x))dx$
对于(a),令$t=tan(x)$ ,换元后可得:
$\int_0^1ln(t)d arctan(t)=[ln(t)arctan(t)]|_0^1-\int_0^1arctant\frac{dt}{t}=-\int_0^1arctant\frac{dt}{t}=-G\approx-0.92$ - - -# 五:特殊积分 - - -## 5.1伽马函数 -![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564245497241-6c16b905-d759-4bd8-af5d-db0cabfc0046.png#align=left&display=inline&height=190&name=image.png&originHeight=333&originWidth=1344&size=87735&status=done&style=none&width=768)
维基百科点击下方链接:
[WIKI百科](https://zh.wikipedia.org/wiki/%CE%93%E5%87%BD%E6%95%B0)
下面为详细的视频教程
1:定义伽马函数
[视频链接](https://www.youtube.com/watch?v=L4Trz6pFut4&t=21s)
2:$(\frac{1}{2})!$
[视频链接](https://www.youtube.com/watch?v=dBmApl6gkII&t=5s)
3:$(-1)!$
[视频链接](https://www.youtube.com/watch?v=MfP2FQPBdHI&t=294s)
4:$n!!$
[视频链接](https://www.youtube.com/watch?v=imcooZyo4vE) - -## 5.2分段函数积分 -此类题目的关键是原函数的连续性要求,通过待定系数求解,具体见不定积分中的[特殊积分部分](https://www.yuque.com/uhhida/tcgb6r/dg7du1)。 - -## 5.3变限积分 -形如$I(x)=\int_a^xf(t)dt$ 的积分叫做变限积分,他的本质是一个自变量在积分限的函数。
变限积分的求导法则尤其重要。此类题目需要扎实的数学分析思想,极其易错,具体内容见[积分证明框架](https://www.yuque.com/uhhida/tcgb6r/pcc7t2)。 - -## 5.4反常积分 -具体内容见[积分证明框架](https://www.yuque.com/uhhida/tcgb6r/pcc7t2) - -# 六:定积分的应用 -![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564724099303-6e2cfef5-7f4f-46e6-9a00-3632de75a170.png#align=left&display=inline&height=40&name=image.png&originHeight=80&originWidth=420&size=14148&status=done&style=none&width=210)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564724119486-04a2024a-c37c-4301-864a-3d9c834a9a9e.png#align=left&display=inline&height=183&name=image.png&originHeight=482&originWidth=1078&size=80537&status=done&style=none&width=410)
我们可以看到定积分的本质就是微元法取极限,所以一些几何和物理问题都可以用微元法的思想解决。
_**Example1:**_
已知一段半圆弧电荷密度为+1,计算圆心处的电场强度。
![fullsizerender.jpg](https://cdn.nlark.com/yuque/0/2019/jpeg/422826/1564726073432-5b1cdc3e-832e-4bba-a49d-9393ac0851d9.jpeg#align=left&display=inline&height=188&name=fullsizerender.jpg&originHeight=661&originWidth=668&size=149950&status=done&style=none&width=190)
注意,这类题目直接用几何解法更快,由库仑定律得,两段对称的微弧对圆心的电场作用为:
$\Delta E=2\Delta E'cos\theta=\frac{2k\Delta lcos\theta}{R^2}=\frac{2k\Delta r}{R^2}$
$\Delta r$代表上图小三角形垂直部分,$\sum \Delta r=R$ ,所以:
$E=\sum\Delta E=\frac{2k}{R^2}\sum\Delta r=\frac{2k}{R}$
_**Example2:**_
我们可以利用微元法找到极坐标的面积公式
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564728031738-6389fbcd-0f0d-4d82-b000-d792baa913a4.png#align=left&display=inline&height=492&name=image.png&originHeight=984&originWidth=1287&size=352109&status=done&style=none&width=643.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564728172614-53554ec7-2afc-4641-80f7-dfb743a52cbf.png#align=left&display=inline&height=168&name=image.png&originHeight=335&originWidth=1248&size=112129&status=done&style=none&width=624) - -## 6.1几何问题 - -#### 6.1.1向量簇 -请下载:[New horizons in geometry(几何新视野).pdf](https://www.yuque.com/attachments/yuque/0/2019/pdf/422826/1564708063142-a6a603c9-ef19-42c5-bbac-3a746583ac46.pdf?_lake_card=%7B%22uid%22%3A%22rc-upload-1564707962520-4%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2019%2Fpdf%2F422826%2F1564708063142-a6a603c9-ef19-42c5-bbac-3a746583ac46.pdf%22%2C%22name%22%3A%22New%20horizons%20in%20geometry(%E5%87%A0%E4%BD%95%E6%96%B0%E8%A7%86%E9%87%8E).pdf%22%2C%22size%22%3A9849775%2C%22type%22%3A%22application%2Fpdf%22%2C%22ext%22%3A%22pdf%22%2C%22progress%22%3A%7B%22percent%22%3A0%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%227fZdG%22%2C%22card%22%3A%22file%22%7D)阅读第一章。
这里只讲一个拓扑定理:切线向量扫过的面积等于将这些向量在不改变方向和长度的情况下,将所有的向量尾部接到一起时所组成的图形的面积相等。即切线扫过的面积等于切线簇的面积,如图所示。
![1.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564563618443-10927c87-f8b6-4721-a937-1cad65a45ffc.png#align=left&display=inline&height=270&name=1.png&originHeight=440&originWidth=591&size=68793&status=done&style=none&width=363)
想象一辆自行车,其尾部车轮始终与某一闭合轨迹相切,也就是骑了一圈,那么无论骑行轨迹如何,自行车车身划过的面积始终不变。如上图所示,将一簇切线在不改变方向和长度的情况下尾部连接在一起,他们所组成的形状面积和原来扫过的面积相同,且原来图形的形状可以任意。
和开普勒第二定律及椭圆面积的关系:[视频链接](https://www.bilibili.com/video/av28012188)
_**Example3:**_
利用该定理证明$\int_{-\infty}^{x}e^{t/b}dt=be^{x/b}$
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564723539303-473f82f6-ae9d-4349-9888-bee69fe5358e.png#align=left&display=inline&height=161&name=image.png&originHeight=322&originWidth=574&size=32121&status=done&style=none&width=287)
显然,所有切线构成的三角形底边长度都是1,把所有的切线全部放到黄色三角形内,尾部连接在一起,就得到积分的面积是两倍三角形的面积,即$be^{x/b}$。
_**Example4:**_
利用该定理求摆线下方的面积。
![](https://cdn.nlark.com/yuque/0/2019/gif/422826/1564564061025-8772fb4c-acf7-4304-941f-7978e4dc58a8.gif#align=left&display=inline&height=200&originHeight=200&originWidth=400&size=0&status=done&style=none&width=400)
摆线相关知识点击:[维基百科](https://zh.wikipedia.org/wiki/%E6%91%86%E7%BA%BF)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564746231254-8815eda2-4876-44ed-a2b6-12118a04393d.png#align=left&display=inline&height=188&name=image.png&originHeight=467&originWidth=1498&size=106153&status=done&style=none&width=604)
由于PT垂直于PC(在圆内),又因为点P在每个瞬时相对于点C做圆周运动,所以PT必然是点P的切向运动方向,所以PT也是摆线的切线,DOT的面积(及切线扫过的面积)等于右图中切线簇的面积(将所有切线平移到点T)。更具体的说,圆在运动时,点P划过了一段圆弧,在每一个中间点,都可以做线段PT,线段PT既扫过了DOT,也同时覆盖了T'P'C',故两者面积相等。
当圆旋转一周时,切线划过了整个摆线上方的面积,这面积等于切线簇的面积$\pi R^2$,而整个矩形的面积是$2\pi R\cdot 2R=4\pi R^2$,所以摆线下方的面积为$4\pi R^2-\pi R^2=3\pi R^2$。
利用参数方程的证明方法见下文。 - -#### 6.1.2体积 -这里依然是微元法,我们讲两种求旋转体体积的方法:切片法和圆柱法
**切片法:**
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564728579605-5d9263e3-5038-4290-9ba4-65a8ba5a3206.png#align=left&display=inline&height=99&name=image.png&originHeight=197&originWidth=853&size=57428&status=done&style=none&width=426.5)
A(x)就是x处物体的面积,$\Delta x$就是高度,两者相乘就是和x有关的一个体积微元,求和或积分后就得到了整个体积。
_**Example5:**_
求$y=x$和$y=x^2$中间的部分绕$y=2$旋转一周所得到的图像的体积。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564729612450-344d6106-b0c7-4671-b4f1-22c31bbc27f8.png#align=left&display=inline&height=217&name=image.png&originHeight=483&originWidth=814&size=84256&status=done&style=none&width=366)
本题的关键是千万不要把正负号弄错,x和y的正负号永远是对原始图像而言的!!!
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564729702866-652e5e74-4121-49b8-abc6-e58760549d36.png#align=left&display=inline&height=269&name=image.png&originHeight=559&originWidth=648&size=49651&status=done&style=none&width=312)
_**Example6:**_
求$y=x$和$y=x^2$中间的部分绕$x=-1$旋转一周所得到的图像的体积。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564729792065-60d72c36-c2b7-4981-8287-fb72455edf31.png#align=left&display=inline&height=396&name=image.png&originHeight=791&originWidth=865&size=110080&status=done&style=none&width=432.5) - -**圆柱法:**
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564730174773-06dc758f-1634-4e55-8972-258d1ce94fd0.png#align=left&display=inline&height=139&name=image.png&originHeight=278&originWidth=369&size=15043&status=done&style=none&width=184.5)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564730326087-04297e8d-415b-4e64-ae20-88fae0efe92a.png#align=left&display=inline&height=117&name=image.png&originHeight=321&originWidth=399&size=29497&status=done&style=none&width=145)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564730342813-d175f51d-29ff-46fb-b80c-5b9a48265fd9.png#align=left&display=inline&height=117&name=image.png&originHeight=271&originWidth=845&size=46573&status=done&style=none&width=366)
如图所示,$x_L和x_R$比较难求,当边界无法被解析式表达时,我们对垂直于旋转轴的底面做圆柱分解。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564730833273-10b089cf-73ea-4788-af98-2c99c64e4f5c.png#align=left&display=inline&height=272&name=image.png&originHeight=543&originWidth=874&size=72820&status=done&style=none&width=437)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564730917008-e54cf47b-11c7-4e53-b672-4e72a8805496.png#align=left&display=inline&height=170&name=image.png&originHeight=340&originWidth=1268&size=111792&status=done&style=none&width=634)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564730960541-957e4d6c-8c67-4679-86a4-dbb26f0ef222.png#align=left&display=inline&height=493&name=image.png&originHeight=985&originWidth=888&size=200136&status=done&style=none&width=444)
一小段圆柱的体积=底面积:$2\pi xdx$ 乘以 高:$f(x)$,之后对自变量求积分。
_**Example7:**_
_**![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564731192372-d2fe0b5f-9062-4f02-87fc-189e778c2160.png#align=left&display=inline&height=276&name=image.png&originHeight=552&originWidth=1570&size=174486&status=done&style=none&width=785)**_
_**![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564731227052-5645e468-39ff-4f4a-9605-4934891d61b3.png#align=left&display=inline&height=325&name=image.png&originHeight=650&originWidth=1130&size=201985&status=done&style=none&width=565)**_
注意:在本题中,圆柱法比切片法简单的多,由于不用求边界,对于具体的题目,根据情况选择两种方法即可。_ - -#### 6.1.3弧长和表面积 -求弧长的方法十分显然,该方法也适用于极坐标,只需用微元法得到公式。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735049026-006e6495-5137-4ced-8248-3146fff0e267.png#align=left&display=inline&height=167&name=image.png&originHeight=333&originWidth=627&size=32754&status=done&style=none&width=313.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735072848-50861c06-992b-4cbb-8e9b-1ff3015a559d.png#align=left&display=inline&height=65&name=image.png&originHeight=129&originWidth=905&size=23014&status=done&style=none&width=452.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735102285-44526d90-8906-4a4a-953a-f298ddaf8819.png#align=left&display=inline&height=552&name=image.png&originHeight=1103&originWidth=1087&size=232574&status=done&style=none&width=543.5)
求表面积的方法也是微元法,如下图所示:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735238189-80848767-e286-4b19-be8e-815ae9cf33cb.png#align=left&display=inline&height=207&name=image.png&originHeight=358&originWidth=409&size=27579&status=done&style=none&width=237)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735284859-b59fbc1c-5a32-4e8a-ab05-5fca9eb2655d.png#align=left&display=inline&height=195&name=image.png&originHeight=390&originWidth=404&size=24795&status=done&style=none&width=202)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735245227-4cfcfb5d-3690-4166-adaf-3226a848ab02.png#align=left&display=inline&height=225&name=image.png&originHeight=450&originWidth=444&size=32892&status=done&style=none&width=222)
已知圆锥表面积是$\pi rl$,现在试图求解一段圆台的表面积,它等于两个圆锥相减。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735348579-cfe256d6-bfc5-4a0d-8ae1-f813cf19f562.png#align=left&display=inline&height=168&name=image.png&originHeight=335&originWidth=862&size=39570&status=done&style=none&width=431)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735368083-a876b283-20a4-428e-9eba-594325196a95.png#align=left&display=inline&height=186&name=image.png&originHeight=372&originWidth=791&size=42136&status=done&style=none&width=395.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735424706-ad6adca0-3e29-4104-a107-7c158b1e97d1.png#align=left&display=inline&height=158&name=image.png&originHeight=315&originWidth=455&size=34365&status=done&style=none&width=227.5)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735432291-3887db4d-0c54-472e-a851-03ec6b8b60c6.png#align=left&display=inline&height=164&name=image.png&originHeight=327&originWidth=477&size=44272&status=done&style=none&width=238.5)
如上图所示,将任意旋转体分成无数小圆台,进行求和即可(这里为什么不能用圆柱做微元法?)。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735492704-501318e3-dc45-480c-848c-cf9aa58d8821.png#align=left&display=inline&height=470&name=image.png&originHeight=940&originWidth=832&size=179318&status=done&style=none&width=416)
最后我们得到了表面积的表达式:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735531566-c052e449-b816-47af-b0fb-ef7d515ece96.png#align=left&display=inline&height=543&name=image.png&originHeight=1085&originWidth=824&size=164515&status=done&style=none&width=412)
_**Example8:**_
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735620477-50414564-495c-4c2b-b224-793c8d9bb15d.png#align=left&display=inline&height=318&name=image.png&originHeight=636&originWidth=1197&size=142634&status=done&style=none&width=598.5) - -#### 6.1.4极坐标和参数方程 -**参数方程:**
参数方程本质就是把x和y想成某个变量t的函数,利用链式法则可以把微积分的计算用参数方程实现。
微分:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736398380-6429c462-a4fd-4026-82fe-5e232fe16a68.png#align=left&display=inline&height=94&name=image.png&originHeight=188&originWidth=632&size=12125&status=done&style=none&width=316)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736410417-709321c3-f481-4259-8789-427eaf274d66.png#align=left&display=inline&height=75&name=image.png&originHeight=149&originWidth=408&size=12720&status=done&style=none&width=204)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736419104-a0a2821f-8dc7-4e91-80bf-d48bfe4b8e92.png#align=left&display=inline&height=61&name=image.png&originHeight=121&originWidth=260&size=7967&status=done&style=none&width=130)
求面积:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736476918-0590bf2a-c680-4c20-8b1d-a353c97f20e3.png#align=left&display=inline&height=82&name=image.png&originHeight=186&originWidth=1048&size=31724&status=done&style=none&width=460)
求长度:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736526039-2ebd1e65-a2dd-489d-9a64-71528f31163f.png#align=left&display=inline&height=131&name=image.png&originHeight=380&originWidth=1516&size=130868&status=done&style=none&width=522)
_**Example9:**_
我们以摆线为例,将摆线方程建模为关于转动角度的函数,如下图所示。
![](https://cdn.nlark.com/yuque/0/2019/gif/422826/1564564061025-8772fb4c-acf7-4304-941f-7978e4dc58a8.gif#align=left&display=inline&height=152&originHeight=200&originWidth=400&size=0&status=done&style=none&width=303)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735810521-60b56f59-1282-4d91-a789-39b4dd04a294.png#align=left&display=inline&height=178&name=image.png&originHeight=356&originWidth=336&size=25573&status=done&style=none&width=168)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736092449-9ca73029-a1f7-4596-8e8a-561821aa44c6.png#align=left&display=inline&height=281&name=image.png&originHeight=498&originWidth=824&size=108912&status=done&style=none&width=465)
摆线的面积:方法只是简单的换元。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736174058-a5323d28-5dae-4876-8d23-91f700c0892a.png#align=left&display=inline&height=252&name=image.png&originHeight=504&originWidth=1136&size=164383&status=done&style=none&width=568)
摆线的周长:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736242267-186b3d0e-3341-4b79-b349-18bd1a5f5855.png#align=left&display=inline&height=106&name=image.png&originHeight=211&originWidth=811&size=50267&status=done&style=none&width=405.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736259329-b43d099d-580d-45d3-a1cc-5c13753f3636.png#align=left&display=inline&height=298&name=image.png&originHeight=596&originWidth=1189&size=167924&status=done&style=none&width=594.5)
摆线相关知识点击:[维基百科](https://zh.wikipedia.org/wiki/%E6%91%86%E7%BA%BF)
摆线的本质是最速降线,请看3B1B的视频:[视频链接](https://www.bilibili.com/video/av6385842)
另一个相关视频:[费马小定理](https://www.bilibili.com/video/av4283063)
**极坐标:**
极坐标求面积公式前面已给出:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564739380608-f0e0eb6d-9b48-40ef-a65d-a148d2c37c25.png#align=left&display=inline&height=40&name=image.png&originHeight=80&originWidth=397&size=8505&status=done&style=none&width=198.5)
求弧长的公式推导依然是微元法:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564739460366-b122fcba-a853-41d1-a20f-b7a96605226e.png#align=left&display=inline&height=194&name=image.png&originHeight=388&originWidth=1179&size=96692&status=done&style=none&width=589.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564739475794-c4ced533-af66-4cca-817a-ce84ce59c500.png#align=left&display=inline&height=468&name=image.png&originHeight=936&originWidth=1162&size=165419&status=done&style=none&width=581)
更直观的方法是:弧长显然等于径向速度与法向速度之和。$\Delta l=\sqrt{(dr)^2+(rd\theta)^2}$
_**Example10:**_
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564739512792-d8161131-1dea-47fd-af31-5fb8888bc10d.png#align=left&display=inline&height=238&name=image.png&originHeight=475&originWidth=1740&size=183958&status=done&style=none&width=870) - -_**Example11:**_
本题请务必自己手算一遍。
_**![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564739703550-2719ccb5-7c3a-4587-b76f-6d642c16f520.png#align=left&display=inline&height=139&name=image.png&originHeight=278&originWidth=1402&size=558840&status=done&style=none&width=701)**_
_**![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564739743058-7ede1aae-d19a-4a12-a962-768434331a7d.png#align=left&display=inline&height=566&name=image.png&originHeight=1155&originWidth=1431&size=2451173&status=done&style=none&width=701)**_ - -## 6.2物理问题 - -#### 6.2.1质心 -![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564742115000-018bb313-2aa7-416e-af90-a537fd32df00.png#align=left&display=inline&height=163&name=image.png&originHeight=325&originWidth=490&size=18641&status=done&style=none&width=245)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564742126521-978d71c8-5b50-40bf-8ac2-3e2b28bfd52f.png#align=left&display=inline&height=175&name=image.png&originHeight=405&originWidth=485&size=36089&status=done&style=none&width=209)
质心和势相关,是力学中研究旋转的概念,质心和势一般来说是对于某个转轴的定义。
质心是一个点,在这点上施加外力不会引起系统的旋转。
势是物体旋转的惯性,表示在施加外力后系统旋转的能力。
如上图所示,区域R具有恒定密度,它相对于y轴和x轴的势计算方法如下:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564742398345-dc83039e-653b-478d-8087-447a48eaf146.png#align=left&display=inline&height=60&name=image.png&originHeight=119&originWidth=630&size=18290&status=done&style=none&width=315)(相当于每个矩形到y轴距离x乘以每个矩形面积f(x)dx)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564742417600-503bf00a-7b59-4a3d-9610-062310bead42.png#align=left&display=inline&height=57&name=image.png&originHeight=113&originWidth=707&size=19660&status=done&style=none&width=353.5)(相当于每个矩形中点到x轴距离f(x)/2乘每个矩形面积f(x)dx)
上式除以总质量就得到了质心:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564742797455-a0968736-8f97-4112-8a08-a97d7034cc22.png#align=left&display=inline&height=186&name=image.png&originHeight=371&originWidth=678&size=59151&status=done&style=none&width=339)
_**Example12:**_
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564742837779-73275432-9494-42b4-b7bf-cb03b9e2952f.png#align=left&display=inline&height=478&name=image.png&originHeight=956&originWidth=1738&size=218957&status=done&style=none&width=869) - -#### 6.2.2电磁场 -_**Example13:**_
一根电荷密度为+1的,长度为L的直导体棒,求距离其中点a的一点的电场强度。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564743182639-68335172-a503-4a04-86d2-9462f3c93629.png#align=left&display=inline&height=175&name=image.png&originHeight=533&originWidth=628&size=45223&status=done&style=none&width=206)
提示:第一种做法是通过微元法转换成积分,第二种做法是找出与其等价的圆弧。
答案:[点击链接](https://www.bilibili.com/video/av55298726) - -## 6.3一题十解 -_**Example14:**_
求$Ax^2+2Bxy+Cy^2=1(A>0,AC-B^2>0)$所围图形的面积。
解1: - -![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564743549317-883a26fe-c7e1-4688-9d64-f8c39451f335.png#align=left&display=inline&height=305&name=image.png&originHeight=609&originWidth=543&size=58299&status=done&style=none&width=271.5)
另外十种解法为:参数方程,极坐标,微分,二重积分,条件极值,线性代数等,具体参见吉米多维奇。 - - - diff --git a/9.计算机网络/9.计算机网络..md b/9.计算机网络/9.计算机网络..md new file mode 100644 index 0000000..4042650 --- /dev/null +++ b/9.计算机网络/9.计算机网络..md @@ -0,0 +1,6 @@ +# 9.计算机网络 +计算机网络的定义: + + 利用通信线路和通信设备,将地理位置不同的、功能独立的多台计算机互连起来,以功能完善的网络软件来实现资源共享和信息传递,就构成了计算机网络系统。 + +而我们学习计算机网络本质上可以理解为学习这个网络系统中的各种网络协议。 \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f821bb1..7c31dd3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,7 +23,7 @@ ## 文档风格 1. 使用 Markdown 编写文档,文档格式参考 Markdown 语法。 2. 一个页面只有一个1级标题(H1,一个#),其他标题从2级开始(H2,##)。 -3. 英文与中文之间用空格分开。 +3. 本项目自动在英文与中文、数字与中文之间添加空格。 ```markdown AI 与人工智能,AGI 的发展方向。 ``` @@ -72,7 +72,7 @@ npm run docs:preview #预览线上环境 ## 如何使用 Git 和 Github -详见 [3.5 Git和Github](https://hdu-cs.wiki/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.5git%E4%B8%8Egithub.html) +详见 [3.5 Git和Github](./3.编程思维体系构建/3.5git与github.md) ## Commit Message 规范 @@ -122,3 +122,40 @@ subject为commit概述 ## Pull Request 流程与指南 Fork 本仓库,然后在你的仓库中进行修改,修改完成后在本仓库创建 NEW Pull Request ,选择 compare across forks 提交 pr 并评论上你修改的具体信息即可,我们会第一时间审阅并合并。 +## Feature + +1. Markdown 内支持Latex公式,格式为单行公式双dollar符号、单行公式单dollar符号。(单行公式需要换行才能解析)例如: + ```latex + $行内公式\arccos{a}$ + ``` + 会渲染成 $\arccos{a}$ + ```latex + $$单行公式\arcsin{b}$$ + ``` + 会渲染成 + $$\arcsin{b}$$ + ::: tip + Latex语法在线编辑器 https://www.latexlive.com + ::: + +2. 支持Mermaid流程图,格式如下 + ```txt + ```mermaid + graph TD; + A-->B; + A-->C; + B-->D; + C-->D; + ``` + ``` + 会渲染成 + ```mermaid + graph TD; + A-->B; + A-->C; + B-->D; + C-->D; + ``` + :::tip + 语法自查 https://mermaid.js.org + ::: \ No newline at end of file diff --git a/README.md b/README.md index d7e20f9..e1a5afc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ -

HDU计算机科学讲义

+
+ logo +
+

HDU计算机科学讲义

license @@ -20,10 +23,11 @@

-
喜欢本项目可以点点右上角 star 🎇
+
喜欢本项目可以点击右上角 star 收藏哦🎇

- 📚在线阅读 + 📚在线阅读(美国、AWS节点) + 🎉【推荐】📚在线阅读(中国腾讯云CDN节点)

## 序言 @@ -32,7 +36,7 @@ **我们会面临着各种各样的问题**:编程从哪里学起?如何高效利用大学时间?如何平衡绩点与项目经验?如何正确安排学习配比?有没有人带带弟弟?如何问大佬问题得到回复的概率更高? -**我们会被信息洪流所淹没**:C语言、Go、Java、Python;人工智能、机器学习、pytorch、tensorflow;数据库、操作系统、计算机网络;Linux、Git。哪个应该马上学,哪个应该多学,哪个只要会用就行? +**我们会被信息洪流所淹没**:C语言、Go、Java、Python ;人工智能、机器学习、PyTorch、TensorFlow ;数据库、操作系统、计算机网络;Linux、Git。哪个应该马上学,哪个应该多学,哪个只要会用就行? **我们面临各种各样的抉择**:搞开发还是搞科研,毕业直接工作还是考研?搞开发的话去做前端还是后端,哪里去找项目?搞研究的话怎么去联系实验室,又如何入门人工智能?要不要去参加竞赛,有哪些竞赛,如何挑选队友? @@ -40,12 +44,14 @@ **出一份计算机科学领域的讲义,一起做大家的领路人。** -这份讲义由**zzm**发起,**孵化器**,**SRT,杭电助手**与 **vidar team** 协办。参与讲义制作的有 hdu 的同学,老师,相关领域的大佬,覆盖了人工智能入门、软件开发入门,计算机学习之道与路线等内容。 -zzm花费了一年的时间动员了大伙对讲义进行修缮和完备,不得不说这确实不是一个小的工作,不过在2023年3月,在计院领导的支持下,计算机学院科协成立了。我们将在学院的支持下继续完善这个内容,同时也欢迎大伙加入我们,共同参与到讲义的学习与撰写中来! +这份讲义由**zzm**发起,**孵化器**,**SRT**, **杭电助手**与 **Vidar-Team** 协办。参与讲义制作的有 hdu 的同学,老师,相关领域的大佬,覆盖了人工智能入门、软件开发入门,计算机学习之道与路线等内容。 + + +zzm 花费了一年的时间动员了大伙对讲义进行修缮和完备,不得不说这确实不是一个小的工作,不过在2023年3月,在计院领导的支持下,计算机学院科协成立了。我们将在学院的支持下继续完善这个内容,同时也欢迎大伙加入我们,共同参与到讲义的学习与撰写中来!
- +

欢迎加群669895692

@@ -56,9 +62,9 @@ zzm花费了一年的时间动员了大伙对讲义进行修缮和完备,不 2. 切记勿要过度深度遍历知识,知识无尽的,如果深度钻研下去,可能没有尽头,最重要的是框架,以及高频次用的知识。更为准确地说,是你要建立一个自己的知识体系,尝试抓住时代发展的脉络或者某一个知识点的延伸。如果你一个知识点无限迭代下去,可能长时间没有正反馈,一瞬间就放弃了。 3. 对于学到的知识 一定要注重实践 不能只学习理论知识 -例如学习Pytorch,应该尽快理解Pytorch编程的框架,dataloder,model,train,test文件 +例如学习 Pytorch ,应该尽快理解 Pytorch 编程的框架,dataloder,model,train,test 文件 -例如学习学习过程中学习到Linux命令,不是需要把整本Liunx书籍全部看完后才可使用 +例如看书过程中学习到 Linux 命令,不需要把整本 Liunx 书籍全部看完后才可使用。(边学边试,边用边学) 4. 敢于否定,如果对于给出的学习资料看不懂,要尝试自己寻找学习资料,找到适合自己的那份学习资料。并且中文的社区包括我们,都可能会犯各种各样的错误。就连论文也不一定是对的。有写论文就是专门驳斥前人哪怕是巨佬的观点。我非常欢迎你提出异议。 @@ -74,6 +80,7 @@ zzm花费了一年的时间动员了大伙对讲义进行修缮和完备,不 ## **许可协议** -本作品采用 `知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆` 许可协议进行许可. 要查看该许可协议, 可访问 [这里](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) , 或者写信到 Creative Commons, PO Box 1866, Mountain View, CA 94042, USA +本作品采用 `知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆` 许可协议进行许可。 要查看该许可协议, 可访问[这里](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/), 或者写信到 Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. + +© 2022. 此文章采用 [**CC BY-NC-SA 3.0 CN**](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 许可授权。 -© 2022. 此文章采用 **CC BY-NC-SA 3.0 CN** 许可授权。 diff --git a/components/Bilibili.vue b/components/Bilibili.vue new file mode 100644 index 0000000..e9fa068 --- /dev/null +++ b/components/Bilibili.vue @@ -0,0 +1,25 @@ +