1123活动
本文最后更新于 2024年11月24日 晚上
11.23活动
Git 工具的使用
【Git工作流和核心原理 | GitHub基本操作 | VS Code里使用Git和关联GitHub】https://www.bilibili.com/video/BV1r3411F7kn?vd_source=6ad092c4c097102be92aa2d50a2c519e
为什么需要用 Git?
版本控制:
Git 是一种分布式版本控制工具,可以记录代码的历史修改,方便回溯到任意历史版本。
支持分支与合并,便于多人协作和功能开发。
协作开发:
通过 Git 和远程仓库(如 GitHub、GitLab),团队成员可以共享代码。
提供强大的冲突解决机制,避免覆盖他人代码。
代码备份:
- 通过远程仓库,代码有了可靠的备份,减少因硬盘损坏或意外删除造成的损失。
怎么用?
- 基础命令:
- 初始化项目:
git init
- 克隆远程仓库:
git clone <仓库地址>
- 添加修改到暂存区:
git add <文件>
或git add .
- 提交更改:
git commit -m "提交信息"
- 查看历史记录:
git log
- 创建分支:
git branch <分支名>
- 切换分支:
git checkout <分支名>
- 合并分支:
git merge <分支名>
- 初始化项目:
- 工作流:
- Feature 分支开发:
- 从主分支创建功能分支:
git checkout -b feature-xxx
- 在分支上开发功能并提交更改。
- 合并分支到主分支:
git checkout main
,然后git merge feature-xxx
。
- 从主分支创建功能分支:
- 多人协作:
- 每个开发者拉取最新代码:
git pull origin main
- 提交自己的改动到远程:
git push origin feature-xxx
- 使用 Pull Request 或 Merge Request 进行代码审查。
- 每个开发者拉取最新代码:
- Feature 分支开发:
怎么和远程仓库协作?
- SSH 配置:
- 生成 SSH 密钥:
ssh-keygen -t rsa -C "你的邮箱"
- 添加公钥到远程仓库账户设置中。
- 验证连接:
ssh -T git@github.com
。
- 生成 SSH 密钥:
- Git 设置代理:
- 设置 HTTP 代理:
git config --global http.proxy http://<代理地址>:<端口>
- 设置 Socks 代理:
git config --global http.proxy socks5://<代理地址>:<端口>
- 设置 HTTP 代理:
- 同步操作:
- 拉取代码:
git pull
- 推送代码:
git push
- 查看远程仓库:
git remote -v
- 拉取代码:
开源社区的参与方式
一个可以上手的Demo
- 寻找感兴趣的项目:
- 在 GitHub 或 GitLab 上搜索感兴趣的开源项目。
- 查看
README.md
和CONTRIBUTING.md
了解项目的目标和贡献方式。
- 贡献代码:
- Fork 仓库:创建项目的个人副本。
- 修改代码:在本地完成修改并提交。
- 提交 PR:将修改提交到原始仓库,等待项目维护者审核。
- 其他贡献形式:
- 提交 issue 反馈问题。
- 编写或优化文档。
- 提供测试案例。
留一个作业
- 创建 GitHub 账号,在群里/私信你的id/个人主页地址(我需要拉你进俱乐部仓库)
- 为https://github.com/IppClub/legend-of-ipp这个库中的
/practice/practice24
路径下贡献一个任意的文件(体积不要太大)- fork
- new branch
- pull request
C++速通
略
各种语言的区别
特性 | C | C++ | Java | Python | JavaScript | Go | Rust | Ruby | PHP | Swift | Kotlin | R | MATLAB |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
语言类型 | 编译型 | 编译型 | 编译型 + 虚拟机 | 解释型 | 解释型 | 编译型 | 编译型 | 解释型 | 解释型 | 编译型 + 解释型 | 编译型 + 解释型 | 解释型 | 解释型 |
用途 | 系统编程 | 系统编程、高性能开发 | 企业级开发 | 脚本语言、AI、数据分析 | Web 前端开发 | 后端服务开发 | 系统编程、安全开发 | 脚本语言、Web 开发 | Web 后端开发 | iOS 开发 | Android、多平台开发 | 数据分析、统计 | 科学计算、工程建模 |
运行性能 | 高 | 高 | 较高 | 较低 | 较低 | 高 | 高 | 较低 | 较低 | 较高 | 较高 | 较低 | 较低 |
学习曲线 | 陡峭 | 陡峭 | 平缓 | 平缓 | 平缓 | 平缓 | 陡峭 | 平缓 | 平缓 | 中等 | 中等 | 平缓 | 中等 |
静/动态类型 | 静态 | 静态 | 静态 | 动态 | 动态 | 静态 | 静态 | 动态 | 动态 | 静态 | 静态 | 动态 | 动态 |
垃圾回收机制 | 无 | 有(可选智能指针) | 有 | 有 | 有 | 有 | 无 | 有 | 有 | 有 | 有 | 有 | 有 |
跨平台性 | 高(依赖编译器) | 高(依赖编译器) | 高 | 高 | 高 | 高 | 高 | 高 | 高 | 高 | 高 | 高 | 中等 |
并发支持 | 低(通过库支持) | 高 | 中 | 中 | 中 | 高 | 高 | 中 | 低 | 中 | 中 | 低 | 低 |
典型应用场景 | 嵌入式、操作系统开发 | 游戏开发、图形渲染 | Web 服务、企业级开发 | AI、自动化脚本、科学计算 | Web 前端交互 | 微服务、云计算 | 高性能计算、安全开发 | Web 开发、自动化脚本 | Web 后端服务 | iOS 应用开发 | Android 应用开发 | 数据统计、可视化 | 工程仿真与建模 |
扩展语言补充
特性 | HTML | CSS | SQL | Perl | Lua | Shell | Haskell | Scala | Dart | TypeScript | C# | Assembly | Elixir |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
语言类型 | 标记语言 | 样式语言 | 描述语言 | 脚本语言 | 脚本语言 | 脚本语言 | 函数式编程 | 编译型 + JVM | 编译型 + 解释型 | 编译型 + 解释型 | 编译型 + 解释型 | 汇编语言 | 编译型 + BEAM VM |
用途 | Web 页面结构 | Web 页面样式 | 数据库查询 | 数据处理、文本操作 | 游戏嵌入脚本 | 自动化脚本 | 高阶数学与函数式开发 | 大数据、分布式计算 | Web 前端、移动开发 | 强类型 Web 开发 | 企业级开发 | 系统级编程 | 并发应用开发 |
运行性能 | N/A | N/A | 高 | 较低 | 较低 | 较低 | 较高 | 较高 | 较高 | 中 | 较高 | 极高(接近机器码) | 高 |
学习曲线 | 平缓 | 平缓 | 平缓 | 中等 | 中等 | 平缓 | 陡峭 | 中等 | 平缓 | 中等 | 中等 | 陡峭 | 中等 |
静/动态类型 | 无 | 无 | 无 | 动态 | 动态 | 动态 | 静态 | 静态 | 静态 | 静态 | 静态 | N/A | 静态 |
垃圾回收机制 | 无 | 无 | 无 | 有 | 有 | 无 | 有 | 有 | 有 | 有 | 有 | 无 | 有 |
跨平台性 | 高 | 高 | 高 | 高 | 高 | 高 | 高 | 高 | 高 | 高 | 高 | 低 | 高 |
并发支持 | N/A | N/A | 无 | 中 | 中 | 无 | 高 | 高 | 高 | 中 | 中 | 低 | 高 |
典型应用场景 | Web 页面结构定义 | Web 页面样式设计 | 数据库操作 | 文本处理、快速脚本 | 游戏逻辑嵌入 | 系统运维、脚本编写 | 数学模型、高阶函数式 | 数据流处理、Web 开发 | Web、Flutter 开发 | Web 全栈开发 | 游戏、桌面开发 | 内核开发 | 分布式与高并发服务 |
一些举例
1. C/C++: 静态类型语言
C 和 C++ 是静态类型语言,变量的类型在编译时确定,且需要显式声明。
特点:
- 强类型检查:类型必须严格匹配,否则会导致编译错误。
- 高性能:由于类型在编译时固定,运行时没有额外的类型检查开销。
示例代码:
1 |
|
2. Java/Python: 强类型语言,但类型系统不同
- Java: 静态强类型语言,变量类型在编译时确定。
- Python: 动态强类型语言,变量类型在运行时确定,但不同类型间的操作依然有严格的限制。
Java 示例代码:
1 |
|
Python 示例代码:
1 |
|
区别:
- Java 需要在代码中明确指定类型,类型错误在编译阶段发现。
- Python 的类型是动态的,可以在运行时绑定不同类型的值,但不允许不合法的操作(如整型和字符串相加)。
插入
- Java 的编译机制
- 源代码 (.java) 会被编译器(
javac
)编译成字节码(.class
文件),这种字节码是与平台无关的。 - 字节码通过 Java 虚拟机(JVM) 在运行时解释执行,或者由 JVM 的 即时编译器(JIT Compiler) 转换为机器码运行。
- 因此,Java 是一种 编译型 + 解释型 的混合语言。
Java 编译与运行流程:
1 |
|
编译过程:
1 |
|
Python 的编译机制
- Python 不需要显式编译,但实际上也会经历一个编译步骤。
- Python 源代码 (.py) 会在运行时由 解释器 编译为字节码(
.pyc
文件),这种字节码是解释器能直接执行的中间代码。 - Python 的字节码由 Python 虚拟机(PVM) 执行,完成实际的程序运行。
- 这种编译过程是透明的,用户不需要手动执行,因此 Python 通常被称为 解释型语言。
Python 运行示例:
1 |
|
运行过程:
1 |
|
3. JSON: 数据交换格式,弱类型
JSON 是一种轻量级的数据交换格式,用于存储和传输键值对数据。它不支持复杂的类型系统,通常被视为弱类型语言。
特点:
- 支持基本类型:数字、字符串、布尔值、数组、对象和
null
。 - 没有严格的类型约束,常用于数据序列化和传输。
示例 JSON 数据:
1 |
|
使用 JSON 的代码(Python):
1 |
|
4. HTML: 标记语言,无类型系统
HTML 是一种标记语言,用于定义 Web 页面结构。它不支持编程语言的类型系统,所有数据内容均以字符串形式存储。
特点:
- 定义页面的内容和结构。
- 数据类型在解析时由其他技术(如 JavaScript)或用户代理决定。
示例 HTML 代码:
1 |
|
使用 HTML 的数据(JavaScript):
1 |
|
1123活动
http://ippclub.github.io/1123活动/