学习路线
本教程适合所有想要入门编程或者想系统的学习编程的人, 当然也包括没有任何编程基础的纯纯纯小白, 同时也适合学过一点点, 想要系统梳理一下知识体系的人。
- 会基础的电脑操作, 比如下载安装软件
- 会使用百度、Google 等搜索引擎
这一步非常重要, 一定要先选好方向, 不要盲目开始学习, 不然你大概率会放弃, 或者学了很久都不知道自己在学什么, 不知道学了能干嘛。
还有, 不要去问别人什么方向好, 什么方向有前途, 什么方向工资高, 你应该去了解每个方向是做什么的, 然后根据自己的兴趣去选择, 兴趣是最好的老师, 如果你对一个方向没有兴趣, 那么你很难坚持下去, 也很难学的好。
当然, 如果你只是单纯的想要找一份工作, 那么你可以去了解一下各个方向的就业情况, 然后选择一个就业情况比较好的方向, 但是这也不意味着你可以不考虑自己的兴趣, 如果你对一个方向没有兴趣, 那么你很难在这个方向上有深入的发展, 也很难在这个方向上有好的职业发展。
还有不要去问别人什么语言最好, 什么语言最有前途, 什么语言工资最高, 语言只是工具, 没有最好的语言, 只有最合适的语言, 你应该根据自己的方向去选择语言, 而不是根据语言去选择方向。
举个栗子, 如果你想要做前端开发, 那么你应该选择 JavaScript, 如果你想要做 iOS 开发, 那么你应该选择 Swift, 如果你想要做 Android 开发, 那么你应该选择 Kotlin, 如果你想要做后端开发, 那么你可以选择 Java、Go、Python、PHP、Node.js 等等, 如果你想要做数据科学, 那么你应该选择 Python, 如果你想要做游戏开发, 那么你可以选择 C#、C++ 等等。
当你学好了一门语言之后, 再去学习其他语言就会非常容易了, 因为语言之间的思想是相通的, 只是语法不同而已。
- 如果你不知道自己的兴趣是什么, 那可以先从前端开始学, 因为前端的学习曲线相对来说比较平缓, 而且可以很快的看到效果, 这样可以增加你的自信心, 让你有动力继续学下去。
- 如果你对人工智能感兴趣, 那么你可以选择 Python。
- 如果你想要做移动端开发, 那么你可以选择 Flutter 或者 React Native。
- 如果你想要做游戏开发, 那么你可以选择 Unity (C#) 或者 Unreal Engine (C++)。
- 如果你想要做后端开发, 那么你可以选择 Java, Go, Node.js 等等, 这里推荐优先选择 Java 或者 Go。
这里的资源不分先后, 你可以根据自己的喜好选择适合自己的资源。
- Learn Git Branching: 一个非常好的 Git 学习游戏
- RegexOne: 一个非常好的正则表达式学习网站
- freeCodeCamp: 一个非盈利组织, 提供免费的编程学习资源
- The Odin Project: 一个免费的编程学习平台
- Open Source Society University: 一个开源的计算机科学课程
- Missing Semester: 一个关于计算机科学的课程
- Google Codelabs: 谷歌提供的免费编程教程
- 菜鸟教程: 一个国内的编程教程网站
- 中国大学 MOOC: 国内的一个 MOOC 平台
- Coursera: 一个在线教育平台
- edX: 一个在线教育平台
- 极客时间: 一个国内的技术专栏平台
- 拉勾教育: 一个国内的在线教育平台
- Coursera Plus: Coursera 的订阅服务
- Udemy: 一个在线教育平台
- Frontend Masters: 一个前端在线教育平台
选择操作系统
Section titled “选择操作系统”这里我推荐使用 Windows 或者 macOS, 不推荐使用 Linux 作为日常使用的操作系统, 当然如果你是一个有经验的 Linux 用户, 那么你可以忽略这一条。
如果你选择使用 Windows, 那么我推荐你使用 Windows 10 或者 Windows 11, 不推荐使用 Windows 7 或者更早的版本。
如果你选择使用 macOS, 那么我推荐你使用 macOS 10.15 (Catalina) 或者更高的版本。
为什么不推荐使用 Linux 作为日常使用的操作系统呢? 因为 Linux 作为桌面操作系统来说, 生态还不够完善, 很多软件都没有 Linux 版本, 而且很多硬件的驱动支持也不够好, 如果你是一个新手, 那么你可能会遇到很多问题, 这些问题可能会让你放弃学习编程。
但是如果你是一个有经验的 Linux 用户, 那么你可以忽略这一条, 因为你已经知道如何解决这些问题了。
当然, 如果你想要学习 Linux, 那么你可以在 Windows 上使用 WSL (Windows Subsystem for Linux) 或者使用虚拟机, 如果你使用的是 macOS, 那么你可以使用虚拟机。
安装 WSL2
Section titled “安装 WSL2”如果你使用的是 Windows 10 版本 2004 以及更高 (Build 19041 and higher) 或者 Windows 11, 那么你可以使用 WSL2 (Windows Subsystem for Linux 2), WSL2 是一个在 Windows 上运行 Linux 的工具, 它可以让你在 Windows 上运行 Linux 程序, 而不需要使用虚拟机。
安装 WSL2
Section titled “安装 WSL2”- 以管理员身份打开 PowerShell 或者 Windows 命令提示符, 然后输入以下命令:
wsl --install- 重启电脑
- 打开 Microsoft Store, 搜索 Ubuntu, 然后安装 (也可以安装其他的 Linux 发行版)
- 打开 Ubuntu, 然后设置用户名和密码
如果安装遇到问题, 或者想要更详细的安装步骤, 可以参考微软官方文档: https://learn.microsoft.com/zh-cn/windows/wsl/install
如果想要更改 WSL 的安装位置, 可以参考这篇文章: https://www.jianshu.com/p/507357486dbf
在 WSL2 中运行 GUI 应用
Section titled “在 WSL2 中运行 GUI 应用”如果你使用的是 Windows 11, 那么 WSL2 已经原生支持 GUI 应用了, 你可以直接在 WSL2 中安装 GUI 应用, 然后在 Windows 中运行。
如果你使用的是 Windows 10, 那么你需要升级到 Windows 10 版本 21H2 或者更高的版本, 并且安装 KB5014023 更新, 然后就可以使用 WSLg 运行 GUI 应用了。
参考微软官方文档: https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/gui-apps
安装代码编辑器
Section titled “安装代码编辑器”这里我推荐使用 VS Code (Visual Studio Code), 它是一个免费开源的代码编辑器, 支持非常多的编程语言, 而且有非常丰富的插件生态系统, 可以让你的开发效率大大提升。
当然如果你有自己喜欢的代码编辑器, 那么你也可以使用自己喜欢的代码编辑器, 比如 Atom, Sublime Text, Notepad++ 等等。
如果你使用的是 JetBrains 全家桶, 那也是非常不错的选择, 如果你是学生, 那么你可以免费使用 JetBrains 全家桶, 如果你是老师, 那么你也可以免费使用 JetBrains 全家桶。
安装 VS Code
Section titled “安装 VS Code”- 访问 VS Code 官网: https://code.visualstudio.com/
- 点击下载按钮
- 安装
安装 WSL 插件
Section titled “安装 WSL 插件”如果你使用的是 WSL2, 那么你需要安装 WSL 插件, 这样你就可以在 VS Code 中直接编辑 WSL2 中的文件了。
- 打开 VS Code
- 点击左侧的插件图标
- 搜索 WSL
- 安装 Remote - WSL 插件
这里我推荐一些常用的插件, 你可以根据自己的需要选择安装。
- Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code - 中文语言包
- GitLens - Git 增强工具
- Error Lens - 错误提示增强工具
- Codeium - 免费的代码补全工具
学习终端和命令行
Section titled “学习终端和命令行”这里说的终端和命令行, 在 Windows 上就是 PowerShell 或者 CMD, 在 macOS 上就是终端, 在 Linux 上就是终端。
为什么要学习终端和命令行呢? 因为在开发中, 你会经常使用终端和命令行, 而且很多工具都只有命令行版本, 没有图形界面版本, 所以学习终端和命令行是非常有必要的。
可能你会觉得终端和命令行很难, 但是其实只要你掌握了常用的命令, 就可以应付大部分的开发场景了。
Windows
Section titled “Windows”Windows 推荐使用 PowerShell 或者 Git Bash, 不推荐使用 CMD, 因为 CMD 的功能比较弱。
安装 PowerShell 7
Section titled “安装 PowerShell 7”PowerShell 7 是一个跨平台的命令行 shell, 它可以在 Windows, macOS, Linux 上运行, 而且功能比 Windows 自带的 PowerShell 5.1 更加强大, 所以我推荐你安装 PowerShell 7。
- 访问 PowerShell 官网: https://learn.microsoft.com/zh-cn/powershell/
- 点击安装 PowerShell
- 下载安装包
- 安装
安装 Git Bash
Section titled “安装 Git Bash”如果你使用的是 Windows, 那么我推荐你安装 Git Bash, 它是 Git for Windows 附带的一个命令行工具, 它可以让你在 Windows 上使用 Linux 命令。
- 访问 Git 官网: https://git-scm.com/
- 点击下载按钮
- 安装
安装完成之后, 你就可以在开始菜单中找到 Git Bash 了。
Windows 常用命令
Section titled “Windows 常用命令”这里只介绍一些常用的命令, 如果你想要学习更多的命令, 可以参考微软官方文档: https://learn.microsoft.com/zh-cn/powershell/scripting/getting-started/getting-started-with-windows-powershell?view=powershell-7.4
| 命令 | 描述 | 示例 |
|---|---|---|
pwd | 显示当前目录 | pwd |
ls | 列出当前目录下的文件和目录 | ls |
cd | 切换目录 | cd .. |
mkdir | 创建目录 | mkdir test |
rmdir | 删除目录 | rmdir test |
touch | 创建文件 | touch test.txt |
rm | 删除文件 | rm test.txt |
cat | 查看文件内容 | cat test.txt |
echo | 输出内容 | echo "Hello World" |
clear | 清屏 | clear |
history | 查看历史命令 | history |
cp | 复制文件 | cp test.txt test2.txt |
mv | 移动文件 | mv test.txt test2.txt |
which | 查看命令所在位置 | which node |
code | 用 VS Code 打开当前目录或文件 | code . |
注意: 上面的有些命令在 CMD 中是不能使用的, 比如
touch,cat,which等等, 所以我推荐你使用 PowerShell 7 或者 Git Bash。
macOS / Linux
Section titled “macOS / Linux”| 命令 | 描述 | 示例 |
|---|---|---|
pwd | 显示当前目录 | pwd |
ls | 列出当前目录下的文件和目录 | ls |
cd | 切换目录 | cd .. |
mkdir | 创建目录 | mkdir test |
rmdir | 删除目录 | rmdir test |
touch | 创建文件 | touch test.txt |
rm | 删除文件 | rm test.txt |
cat | 查看文件内容 | cat test.txt |
echo | 输出内容 | echo "Hello World" |
clear | 清屏 | clear |
history | 查看历史命令 | history |
cp | 复制文件 | cp test.txt test2.txt |
mv | 移动文件 | mv test.txt test2.txt |
which | 查看命令所在位置 | which node |
code | 用 VS Code 打开当前目录或文件 | code . |
man | 查看命令的帮助文档 | man ls |
chmod | 修改文件权限 | chmod 755 test.sh |
chown | 修改文件所有者 | chown user:user test.txt |
grep | 在文件中搜索内容 | grep "hello" test.txt |
find | 在目录中搜索文件 | find . -name "*.txt" |
tar | 压缩和解压缩文件 | tar -czf test.tar.gz test |
curl | 发送网络请求 | curl https://www.baidu.com |
wget | 下载文件 | wget https://www.baidu.com |
ssh | 远程登录 | ssh user@host |
scp | 远程复制文件 | scp test.txt user@host:~ |
sudo | 以管理员身份运行命令 | sudo apt-get install git |
apt-get | 包管理器 (Debian/Ubuntu) | sudo apt-get install git |
yum | 包管理器 (CentOS/Fedora) | sudo yum install git |
brew | 包管理器 (macOS) | brew install git |
终端工具推荐
Section titled “终端工具推荐”- Warp: 一个现代化的终端, AI 驱动, 支持命令补全, 智能提示等等, 非常好用, 推荐使用 (支持 macOS, Linux, 还在 Beta 测试阶段, 免费使用)
- Tabby: 一个现代化的终端, 支持 Windows, macOS, Linux, 免费使用
学习 Git
Section titled “学习 Git”Git 是一个版本控制系统, 它可以帮助你管理代码的版本, 以及多人协作开发。
为什么要学习 Git 呢? 因为在开发中, 你会经常使用 Git, 而且几乎所有的公司都在使用 Git 进行代码版本控制和协作开发, 所以学习 Git 是非常有必要的。
安装 Git
Section titled “安装 Git”- 访问 Git 官网: https://git-scm.com/
- 点击下载按钮
- 安装
配置 Git
Section titled “配置 Git”打开终端, 输入以下命令:
git config --global user.name "你的名字"git config --global user.email "你的邮箱"学习 Git
Section titled “学习 Git”这里推荐一个非常好的 Git 学习游戏: https://learngitbranching.js.org/
还有一个非常好的 Git 教程: https://www.liaoxuefeng.com/wiki/896043488029600
| 命令 | 描述 | 示例 |
|---|---|---|
git init | 初始化一个 Git 仓库 | git init |
git clone | 克隆一个远程仓库 | git clone https://github.com/username/repo.git |
git status | 查看工作区状态 | git status |
git add | 添加文件到暂存区 | git add . |
git commit | 提交暂存区到本地仓库 | git commit -m "first commit" |
git log | 查看提交历史 | git log |
git diff | 查看文件的修改内容 | git diff |
git branch | 查看分支 | git branch |
git checkout | 切换分支 | git checkout main |
git merge | 合并分支 | git merge dev |
git remote | 查看远程仓库 | git remote -v |
git push | 推送到远程仓库 | git push origin main |
git pull | 拉取远程仓库 | git pull origin main |
git fetch | 获取远程仓库的最新状态 | git fetch origin |
git reset | 重置当前分支到指定状态 | git reset --hard HEAD |
git stash | 暂存当前工作区 | git stash |
git tag | 查看标签 | git tag |
学习 GitHub
Section titled “学习 GitHub”GitHub 是一个代码托管平台, 它可以让你托管你的 Git 仓库, 以及和其他人协作开发。
为什么要学习 GitHub 呢? 因为在开发中, 你会经常使用 GitHub, 而且几乎所有的开源项目都托管在 GitHub 上, 所以学习 GitHub 是非常有必要的。
注册 GitHub 账号
Section titled “注册 GitHub 账号”- 访问 GitHub 官网: https://github.com/
- 点击 Sign up 按钮
- 填写注册信息
- 完成注册
学习 GitHub
Section titled “学习 GitHub”这里推荐 GitHub 官方的 Hello World 教程: https://docs.github.com/cn/get-started/start-your-journey/hello-world
- 创建仓库
- Fork 仓库
- 提交 Pull Request
- 创建 Issue
- 管理仓库的设置
- 管理仓库的 Collaborators
- 管理仓库的 Teams
- 管理仓库的 Webhooks
- 管理仓库的 Secrets
- 管理仓库的 Environments
- HTML: 标记语言, 用于创建网页结构
- CSS: 样式表语言, 用于美化网页
- JavaScript: 编程语言, 用于实现网页的交互效果
- Java: 一门面向对象的编程语言, 非常流行, 很多公司都在使用
- Go: 一门由 Google 开发的编程语言, 语法简单, 性能优秀, 越来越多的公司在使用
- Python: 一门简单易学的编程语言, 非常适合初学者, 同时也是人工智能领域的首选语言
- Node.js: 一个基于 Chrome V8 引擎的 JavaScript 运行时, 可以让 JavaScript 运行在服务端
- Kotlin: 一门由 JetBrains 开发的编程语言, 可以编译成 Java 字节码, 也可以编译成 JavaScript, 也可以编译成本地代码
- Rust: 一门由 Mozilla 开发的编程语言, 内存安全, 性能优秀, 但是学习曲线比较陡峭
- Flutter: 一个由 Google 开发的移动端 UI 框架, 可以使用 Dart 语言开发 iOS 和 Android 应用
- React Native: 一个由 Facebook 开发的移动端 UI 框架, 可以使用 JavaScript 开发 iOS 和 Android 应用
- Swift: 一门由 Apple 开发的编程语言, 用于开发 iOS, macOS, watchOS, tvOS 应用
- Kotlin: 一门由 JetBrains 开发的编程语言, 用于开发 Android 应用
- Unity: 一个跨平台的游戏引擎, 可以使用 C# 语言开发游戏
- Unreal Engine: 一个跨平台的游戏引擎, 可以使用 C++ 语言开发游戏
- Godot: 一个跨平台的游戏引擎, 可以使用 GDScript 语言开发游戏
- Python: 一门简单易学的编程语言, 非常适合初学者, 同时也是人工智能领域的首选语言
- R: 一门用于统计计算和统计制图的编程语言, 非常适合数据科学领域
- Julia: 一门高性能的编程语言, 非常适合科学计算领域
- MDN Web Docs: Mozilla 开发的 Web 文档, 非常详细, 非常适合学习 Web 开发
- 现代 JavaScript 教程: 一个非常好的 JavaScript 教程
- React 官方文档: React 官方文档
- Vue.js 官方文档: Vue.js 官方文档
- Java 教程: 廖雪峰的 Java 教程
- Go 语言编程之旅: 一本非常好的 Go 语言书籍
- Go 语言圣经: 一本非常好的 Go 语言书籍
- Node.js 官方文档: Node.js 官方文档
- Express 官方文档: Express 官方文档
- Spring Boot 官方文档: Spring Boot 官方文档
- Flutter 官方文档: Flutter 官方文档
- React Native 官方文档: React Native 官方文档
- Swift 官方文档: Swift 官方文档
- Kotlin 官方文档: Kotlin 官方文档
- Unity 官方文档: Unity 官方文档
- Unreal Engine 官方文档: Unreal Engine 官方文档
- Godot 官方文档: Godot 官方文档
- Python 官方文档: Python 官方文档
- Python 教程: 廖雪峰的 Python 教程
- NumPy 官方文档: NumPy 官方文档
- Pandas 官方文档: Pandas 官方文档
- Matplotlib 官方文档: Matplotlib 官方文档
- Scikit-learn 官方文档: Scikit-learn 官方文档
- TensorFlow 官方文档: TensorFlow 官方文档
- PyTorch 官方文档: PyTorch 官方文档
- 学习 HTML 和 CSS
- 学习 JavaScript
- 学习 Git 和 GitHub
- 学习一门前端框架 (React, Vue, Angular 等等)
- 学习一门前端构建工具 (Webpack, Vite 等等)
- 学习一门 CSS 预处理器 (Sass, Less, Stylus 等等)
- 学习一门 CSS 框架 (Tailwind CSS, Bootstrap, Element UI 等等)
- 学习一门前端状态管理工具 (Redux, MobX, Vuex 等等)
- 学习一门前端路由工具 (React Router, Vue Router 等等)
- 学习一门前端 UI 组件库 (Ant Design, Element UI, Vant 等等)
- 学习一门前端测试工具 (Jest, Mocha, Jasmine 等等)
- 学习一门前端性能优化工具 (Lighthouse, WebPageTest 等等)
- 学习一门前端安全工具 (OWASP ZAP, Burp Suite 等等)
- 学习一门前端部署工具 (Docker, Kubernetes 等等)
- 学习一门前端监控工具 (Sentry, LogRocket 等等)
- 学习一门编程语言 (Java, Go, Python, Node.js 等等)
- 学习 Git 和 GitHub
- 学习计算机网络
- 学习操作系统
- 学习数据库 (MySQL, PostgreSQL, MongoDB 等等)
- 学习一门后端框架 (Spring Boot, Django, Flask, Gin, Express 等等)
- 学习一门中间件 (Redis, RabbitMQ, Kafka 等等)
- 学习一门搜索引擎 (Elasticsearch, Solr 等等)
- 学习一门网关 (Nginx, Kong 等等)
- 学习一门容器技术 (Docker, Kubernetes 等等)
- 学习一门 CI/CD 工具 (Jenkins, GitLab CI, GitHub Actions 等等)
- 学习一门测试工具 (JUnit, pytest, Jest 等等)
- 学习一门性能优化工具 (JMeter, Gatling 等等)
- 学习一门安全工具 (OWASP ZAP, Burp Suite 等等)
- 学习一门监控工具 (Prometheus, Grafana 等等)
- 学习一门日志工具 (ELK, Loki 等等)
- 学习一门编程语言 (Dart, JavaScript, Swift, Kotlin 等等)
- 学习 Git 和 GitHub
- 学习一门移动端框架 (Flutter, React Native 等等)
- 学习一门移动端 UI 组件库 (Element UI, Vant 等等)
- 学习一门移动端状态管理工具 (Redux, MobX, Vuex 等等)
- 学习一门移动端路由工具 (React Router, Vue Router 等等)
- 学习一门移动端测试工具 (Jest, Mocha, Jasmine 等等)
- 学习一门移动端性能优化工具 (Lighthouse, WebPageTest 等等)
- 学习一门移动端安全工具 (OWASP ZAP, Burp Suite 等等)
- 学习一门移动端部署工具 (Docker, Kubernetes 等等)
- 学习一门移动端监控工具 (Sentry, LogRocket 等等)
- 学习一门编程语言 (C#, C++, GDScript 等等)
- 学习 Git 和 GitHub
- 学习一门游戏引擎 (Unity, Unreal Engine, Godot 等等)
- 学习一门游戏 UI 框架 (Unity UI, Unreal Motion Graphics 等等)
- 学习一门游戏物理引擎 (Unity Physics, Unreal Engine Physics 等等)
- 学习一门游戏动画系统 (Unity Animation, Unreal Engine Animation 等等)
- 学习一门游戏音频系统 (Unity Audio, Unreal Engine Audio 等等)
- 学习一门游戏 AI 系统 (Unity AI, Unreal Engine AI 等等)
- 学习一门游戏网络系统 (Unity Network, Unreal Engine Network 等等)
- 学习一门游戏测试工具 (Unity Test Framework, Unreal Engine Test Framework 等等)
- 学习一门游戏性能优化工具 (Unity Profiler, Unreal Engine Profiler 等等)
- 学习一门游戏部署工具 (Docker, Kubernetes 等等)
- 学习一门游戏监控工具 (Sentry, LogRocket 等等)
- 学习一门编程语言 (Python, R, Julia 等等)
- 学习 Git 和 GitHub
- 学习数学基础 (线性代数, 概率论, 数理统计 等等)
- 学习一门数据分析工具 (NumPy, Pandas 等等)
- 学习一门数据可视化工具 (Matplotlib, Seaborn 等等)
- 学习一门机器学习库 (Scikit-learn, TensorFlow, PyTorch 等等)
- 学习一门深度学习库 (TensorFlow, PyTorch, Keras 等等)
- 学习一门自然语言处理库 (NLTK, SpaCy, Hugging Face 等等)
- 学习一门计算机视觉库 (OpenCV, Pillow 等等)
- 学习一门数据挖掘工具 (Spark, Flink 等等)
- 学习一门数据仓库工具 (Hive, Presto 等等)
- 学习一门数据管道工具 (Airflow, Luigi 等等)
- 学习一门数据版本控制工具 (DVC, Pachyderm 等等)
- 学习一门数据建模工具 (MLflow, Kubeflow 等等)
- 学习一门数据部署工具 (Docker, Kubernetes 等等)
- 学习一门数据监控工具 (Prometheus, Grafana 等等)
计算机基础是非常重要的, 如果你想要成为一名优秀的程序员, 那么你必须要学好计算机基础。
算法与数据结构
Section titled “算法与数据结构”学习编程最好的方式就是实战, 只有通过实战, 你才能真正的掌握所学的知识。
- 个人博客
- 待办事项应用
- 天气预报应用
- 计算器
- 时钟
- 井字棋游戏
- 贪吃蛇游戏
- 俄罗斯方块游戏
- 图片轮播
- 表单验证
- 分页组件
- 模态框组件
- 下拉选择组件
- 日期选择组件
- 表格组件
- 树形组件
- 图表组件
- 地图组件
- 富文本编辑器
- Markdown 编辑器
- 个人博客系统
- 待办事项 API
- 用户管理系统
- 权限管理系统
- 文件上传下载系统
- 邮件发送系统
- 短信发送系统
- 消息推送系统
- 定时任务系统
- 分布式锁
- 分布式事务
- 分布式 ID 生成器
- 分布式缓存
- 分布式会话
- 分布式搜索
- 分布式日志
- 分布式监控
- 分布式链路追踪
- 分布式配置中心
- 分布式服务注册与发现
- 个人博客系统
- 待办事项应用
- 论坛系统
- 电商系统
- 在线教育系统
- 在线医疗系统
- 在线金融系统
- 在线旅游系统
- 在线餐饮系统
- 在线电影系统
- 在线音乐系统
- 在线阅读系统
- 在线直播系统
- 在线游戏系统
- 在线办公系统
- 在线客服系统
- 在线考试系统
- 在线问卷系统
- 在线投票系统
- 在线抽奖系统
参与开源项目
Section titled “参与开源项目”参与开源项目是提升自己的一个非常好的方式, 通过参与开源项目, 你可以学习到别人的代码风格, 以及别人的设计思想, 同时也可以提升自己的代码质量, 以及自己的沟通能力。
如何参与开源项目
Section titled “如何参与开源项目”- 找到一个自己感兴趣的开源项目
- 阅读项目的文档, 了解项目的功能
- 阅读项目的代码, 了解项目的实现
- 找到项目的 Issue 列表, 找到一个自己可以解决的 Issue
- Fork 项目
- 在自己的 Fork 中修复 Issue
- 提交 Pull Request
- 等待项目维护者的审核
- 如果有问题, 根据维护者的反馈进行修改
- 如果通过了审核, 那么你的代码就会被合并到主分支
写博客是提升自己的一个非常好的方式, 通过写博客, 你可以整理自己的知识, 同时也可以帮助别人, 让自己的知识更加深入。
- 选择一个博客平台 (WordPress, Hexo, Hugo, VuePress 等等)
- 选择一个域名 (可选)
- 选择一个托管平台 (GitHub Pages, Vercel, Netlify 等等)
- 开始写博客
- 定期更新博客
- 分享博客到社交媒体
刷算法题是提升自己的一个非常好的方式, 通过刷算法题, 你可以提升自己的逻辑思维能力, 以及自己的编码能力, 同时也可以为面试做准备。
推荐的刷题平台
Section titled “推荐的刷题平台”推荐的刷题顺序
Section titled “推荐的刷题顺序”- 数组
- 链表
- 栈
- 队列
- 哈希表
- 字符串
- 双指针
- 滑动窗口
- 位运算
- 数学
- 递归
- 分治
- 动态规划
- 贪心
- 回溯
- 图
- 树
- 堆
- 并查集
- 字典树
- 线段树
- 树状数组
- 字符串匹配
- 排序
- 搜索
看技术书籍是提升自己的一个非常好的方式, 通过看技术书籍, 你可以系统的学习一个知识, 而不是零散的学习。
推荐的技术书籍
Section titled “推荐的技术书籍”- 代码整洁之道
- 重构
- 代码大全
- 程序员修炼之道
- 人月神话
- 设计模式
- 企业应用架构模式
- 领域驱动设计
- 实现领域驱动设计
- 单元测试的艺术
- 持续交付
- 微服务设计
- 深入理解计算机系统
- 计算机网络
- 数据库系统概念
- 算法导论
- 设计模式
- 代码整洁之道
- 重构
看技术视频是提升自己的一个非常好的方式, 通过看技术视频, 你可以直观的学习一个知识, 而不是通过文字来学习。
推荐的技术视频平台
Section titled “推荐的技术视频平台”参加技术社区
Section titled “参加技术社区”参加技术社区是提升自己的一个非常好的方式, 通过参加技术社区, 你可以认识很多志同道合的人, 以及学习到别人的经验。
推荐的技术社区
Section titled “推荐的技术社区”参加技术会议
Section titled “参加技术会议”参加技术会议是提升自己的一个非常好的方式, 通过参加技术会议, 你可以认识很多志同道合的人, 以及学习到最新的技术。
推荐的技术会议
Section titled “推荐的技术会议”- Google I/O
- Apple WWDC
- Microsoft Build
- AWS re:Invent
- Facebook F8
- 阿里云栖大会
- 腾讯云+社区
- 百度 AI 开发者大会
- 开源中国开源世界
- QCon 全球软件开发大会
- ArchSummit 全球架构师峰会
- GMTC 全球大前端技术大会
- BCS 中国软件大会
参加技术比赛
Section titled “参加技术比赛”参加技术比赛是提升自己的一个非常好的方式, 通过参加技术比赛, 你可以锻炼自己的能力, 以及学习到别人的经验。
推荐的技术比赛
Section titled “推荐的技术比赛”- LeetCode 周赛
- 牛客网比赛
- Codeforces 比赛
- AtCoder 比赛
- TopCoder 比赛
- Google Code Jam
- Google Kick Start
- Facebook Hacker Cup
- Microsoft Imagine Cup
- ACM ICPC
- CCPC
- 蓝桥杯
- 天梯赛
- 华为软件精英挑战赛
- 阿里天池大赛
- 腾讯广告算法大赛
- 百度之星
- 字节跳动青训营
- 美团 CodeM
- 京东 JDATA
- 滴滴 Di-Tech
- 网易云音乐编程大赛
- 小米编程大赛
简历是面试的第一关, 你的简历必须要有吸引力, 不然你连面试的机会都没有。
- 个人信息
- 联系方式
- 教育经历
- 工作经历
- 项目经历
- 技能列表
- 获奖经历
- 开源贡献
- 博客链接
- 其他
简历的注意事项
Section titled “简历的注意事项”- 简历不要太长, 最好一页
- 简历不要有语法错误
- 简历不要有拼写错误
- 简历不要有虚假信息
- 简历不要太花哨
- 简历不要使用奇怪的字体
- 简历不要使用奇怪的颜色
- 简历不要使用奇怪的格式
- 简历不要使用奇怪的模板
- 简历不要使用奇怪的图片
面试的基础知识非常重要, 你必须要掌握好基础知识, 不然你很难通过面试。
- OSI 七层模型
- TCP/IP 四层模型
- TCP 和 UDP 的区别
- TCP 的三次握手和四次挥手
- TCP 的流量控制和拥塞控制
- HTTP 和 HTTPS 的区别
- HTTP 的方法
- HTTP 的状态码
- Cookie 和 Session 的区别
- DNS 的工作原理
- ARP 的工作原理
- ICMP 的工作原理
- DHCP 的工作原理
- NAT 的工作原理
- 正向代理和反向代理的区别
- 负载均衡的原理
- CDN 的原理
- DNS 解析的过程
- 输入 URL 到页面显示的过程
- 跨域的解决方案
- 进程和线程的区别
- 进程的状态
- 进程间通信的方式
- 线程间通信的方式
- 死锁的条件
- 死锁的预防
- 死锁的避免
- 死锁的检测
- 死锁的解除
- 内存管理的方式
- 虚拟内存的原理
- 页面置换算法
- 磁盘调度算法
- 文件系统的原理
- 硬链接和软链接的区别
- 中断的原理
- 系统调用的原理
- 上下文切换的原理
- 调度算法
- 同步和互斥的原理
- 数据库的三大范式
- 数据库的事务
- 事务的 ACID 特性
- 事务的隔离级别
- 数据库的锁
- 数据库的索引
- 索引的类型
- 索引的原理
- 索引的优化
- SQL 的优化
- 数据库的分库分表
- 数据库的主从复制
- 数据库的读写分离
- 数据库的容灾备份
- 数据库的性能优化
- NoSQL 和 SQL 的区别
- CAP 定理
- BASE 理论
- 数据库的一致性
- 数据库的分布式事务
算法与数据结构
Section titled “算法与数据结构”- 数组和链表的区别
- 栈和队列的区别
- 哈希表的原理
- 字符串匹配算法
- 排序算法
- 二分查找
- 双指针
- 滑动窗口
- 位运算
- 数学
- 递归
- 分治
- 动态规划
- 贪心
- 回溯
- 图
- 树
- 堆
- 并查集
- 字典树
- 单例模式
- 工厂模式
- 抽象工厂模式
- 建造者模式
- 原型模式
- 适配器模式
- 桥接模式
- 组合模式
- 装饰器模式
- 外观模式
- 享元模式
- 代理模式
- 策略模式
- 模板方法模式
- 观察者模式
- 迭代器模式
- 责任链模式
- 命令模式
- 备忘录模式
- 状态模式
- 访问者模式
- 中介者模式
- 解释器模式
- 空对象模式
项目经验是面试的重点, 你必须要准备好自己的项目经验, 不然你很难通过面试。
项目经验的准备
Section titled “项目经验的准备”- 准备 2-3 个自己最熟悉的项目
- 准备项目的背景
- 准备项目的功能
- 准备项目的技术栈
- 准备项目的架构
- 准备项目的难点
- 准备项目的解决方案
- 准备项目的优化
- 准备项目的成果
- 准备项目的个人贡献
项目经验的介绍
Section titled “项目经验的介绍”- 项目的背景
- 项目的功能
- 项目的技术栈
- 项目的架构
- 项目的难点
- 项目的解决方案
- 项目的优化
- 项目的成果
- 项目的个人贡献
算法题是面试的重点, 你必须要准备好算法题, 不然你很难通过面试。
算法题的准备
Section titled “算法题的准备”- 刷 LeetCode
- 刷剑指 Offer
- 刷编程之美
- 刷牛客网
- 刷左程云的算法课
- 刷极客时间的算法课
- 刷拉勾教育的算法课
- 刷 Coursera 的算法课
- 刷 edX 的算法课
- 刷 MIT 的算法课
算法题的分类
Section titled “算法题的分类”- 数组
- 链表
- 栈
- 队列
- 哈希表
- 字符串
- 双指针
- 滑动窗口
- 位运算
- 数学
- 递归
- 分治
- 动态规划
- 贪心
- 回溯
- 图
- 树
- 堆
- 并查集
- 字典树
- 线段树
- 树状数组
- 字符串匹配
- 排序
- 搜索
系统设计是面试的重点, 你必须要准备好系统设计, 不然你很难通过面试。
系统设计的准备
Section titled “系统设计的准备”- 学习系统设计的基础知识
- 学习系统设计的案例
- 练习系统设计的题目
- 看系统设计的书籍
- 看系统设计的视频
- 看系统设计的博客
- 参加系统设计的讨论
- 参加系统设计的比赛
- 参加系统设计的面试
- 总结系统设计的经验
系统设计的步骤
Section titled “系统设计的步骤”- 理解需求
- 定义系统的功能
- 定义系统的非功能需求
- 定义系统的约束
- 定义系统的假设
- 定义系统的范围
- 定义系统的架构
- 定义系统的模块
- 定义系统的接口
- 定义系统的数据模型
- 定义系统的数据流
- 定义系统的控制流
- 定义系统的错误处理
- 定义系统的性能
- 定义系统的可扩展性
- 定义系统的可用性
- 定义系统的可靠性
- 定义系统的安全性
- 定义系统的可维护性
- 定义系统的可部署性
行为面试是面试的重点, 你必须要准备好行为面试, 不然你很难通过面试。
行为面试的准备
Section titled “行为面试的准备”- 了解行为面试的原理
- 了解行为面试的常见问题
- 准备行为面试的答案
- 练习行为面试的答案
- 总结行为面试的经验
行为面试的常见问题
Section titled “行为面试的常见问题”- 介绍一下你自己
- 为什么想要来我们公司
- 为什么想要换工作
- 你对我们公司有什么了解
- 你对这个职位有什么了解
- 你的优点是什么
- 你的缺点是什么
- 你最大的成就是什么
- 你最大的失败是什么
- 你遇到的最大的困难是什么
- 你如何解决这个困难
- 你如何和团队合作
- 你如何和领导合作
- 你如何和同事合作
- 你如何处理冲突
- 你如何处理压力
- 你如何处理批评
- 你如何处理失败
- 你如何处理成功
- 你未来的职业规划是什么
薪资谈判是面试的最后一步, 你必须要准备好薪资谈判, 不然你可能会吃亏。
薪资谈判的准备
Section titled “薪资谈判的准备”- 了解市场行情
- 了解公司的薪资范围
- 了解自己的价值
- 准备好自己的期望薪资
- 准备好自己的底线薪资
- 准备好自己的谈判策略
- 练习薪资谈判
- 总结薪资谈判的经验
薪资谈判的技巧
Section titled “薪资谈判的技巧”- 不要先开口说薪资
- 不要接受第一个薪资
- 不要把薪资作为唯一的考虑因素
- 要了解公司的福利
- 要了解公司的晋升机会
- 要了解公司的培训机会
- 要了解公司的工作环境
- 要了解公司的工作时间
- 要了解公司的假期
- 要了解公司的其他福利
编程是一个需要持续学习的行业, 你必须要不断的学习新的知识, 不然你就会被淘汰。
- 掘金
- 思否
- 博客园
- CSDN
- 开源中国
- V2EX
- 知乎
- GitHub
- Stack Overflow
- Hacker News
- YouTube
- B站
- 极客时间
- 拉勾教育
- 慕课网
- Coursera
- edX
- 制定学习计划
- 每天学习一点
- 做笔记
- 写博客
- 做项目
- 参与开源项目
- 参加技术社区
- 参加技术会议
- 参加技术比赛
- 总结经验
- 保持好奇心
- 保持耐心
- 保持坚持
- 保持谦逊
- 保持开放
- 保持积极
- 保持乐观
- 保持专注
- 保持思考
- 保持实践
学习编程是一个漫长的过程, 你必须要保持耐心, 保持坚持, 保持好奇心, 保持学习的态度, 才能成为一名优秀的程序员。
如果你有任何问题, 或者想要交流, 或者想要分享你的学习经验, 欢迎在评论区留言。
如果你觉得这篇文章对你有帮助, 欢迎点赞、收藏、转发。
谢谢你的阅读。