摘要: 前言 使用的是《算法》第四版英文版,主要是习题解答。 书中jar包的导入请戳:算法(第四版)中algs4.jar下载和使用 EXERCISES 1.1.1 1.1.2 1.1.3 import java.util.Scanner; public class Something { public st 阅读全文
posted @ 2022-10-14 19:24 astralcon 阅读(61) 评论(0) 推荐(0)
摘要: 实验楼项目:C++实现太阳系行星系统 关于详细知识跟着实验做比较好 基础知识 做这个项目需要知道一些基础知识: OpenGL GLUT 类设计 main.cpp #include<GL/glut.h> #include "solarsystem.hpp" #define WINDOW_X_POS 5 阅读全文
posted @ 2022-10-14 19:22 astralcon 阅读(324) 评论(0) 推荐(0)
摘要: 备份与恢复 概述 根据备份的方法将备份分为: Hot Backup(热备)(在线备份) Cold Backup(冷备)(离线备份) Warm Backup(温备) 热备是指数据库运行中直接备份,对正在运行的数据库操作没有任何的影响; 冷备是指备份操作是在数据库停止的情况下,一般只需要复制相关的数据库 阅读全文
posted @ 2022-10-14 19:21 astralcon 阅读(106) 评论(0) 推荐(0)
摘要: 认识事务 概述 事务:访问并更新数据库中各种数据项的一个程序执行单元。 数据库引入事务的主要目的:事务会把数据库从一种一致状态转换为另一种一致状态。在数据库提交工作时,可以确保要么所有修改都已经保存了,要么所有修改都不保存。 InnoDB存储引擎中的事务完全符合ACID的特性: 原子性(atomic 阅读全文
posted @ 2022-10-14 19:20 astralcon 阅读(68) 评论(0) 推荐(0)
摘要: 1. 数据库和实例 数据库:物理操作系统文件或其他形式文件类型的集合。 实例:MySQL数据库由后台线程以及一个共享内存区组成。(数据库实例才是真正用于操作数据库文件的) 实例与数据库的关系通常是一一对应的,但是在集群情况下可能存在一个数据库被多个数据实例使用的情况。 MySQL被设计为一个单进程多 阅读全文
posted @ 2022-10-14 19:20 astralcon 阅读(45) 评论(0) 推荐(0)
摘要: 1. InnoDB体系架构 1.1 后台线程 后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据;此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下InnoDB能够恢复到正常状态。 后台线程有三种: Master Thread(核心线程;主要负责将缓 阅读全文
posted @ 2022-10-14 19:19 astralcon 阅读(162) 评论(0) 推荐(0)
摘要: 文件 构成MySQL数据库和InnoDB存储引擎表的各种类型文件: 参数文件(告诉MySQL实例启动时在哪里可以找到数据库文件,并且指定某些初始化参数) 日志文件(用来记录MySQL实例对某种条件做出响应时写入的文件) socket文件(当用UNIX域套接字方式进行连接时需要的文件) pid文件(M 阅读全文
posted @ 2022-10-14 19:18 astralcon 阅读(133) 评论(0) 推荐(0)
摘要: InnoDB存储引擎索引概述 InnoDB支持以下几种常见的索引: B+ 树索引 (传统意义上的索引,这是目前关系型数据库系统中查找最为常用和最为有效的索引;B+ 树索引并不能找到一个给定键值的具体行,能找到的只能是被查找数据行所在的页) 全文索引 (将存储于数据库中的整本书或整篇文章中的任意内容信 阅读全文
posted @ 2022-10-14 19:18 astralcon 阅读(77) 评论(0) 推荐(0)
摘要: 什么是锁 锁是数据库系统区别于文件系统的一个关键特性。锁机制用于管理对共享资源的并发访问。 数据库使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。 InnoDB 存储引擎锁的实现和 Oracle 数据库非常类似,提供一致性的非锁定读、行级锁支持。行级锁没有相关额外的开销,并可以同时 阅读全文
posted @ 2022-10-14 19:17 astralcon 阅读(155) 评论(0) 推荐(0)
摘要: Locality and The Fast File System "old UNIX file system" looked like this: super block(S): contains information about the entire file system inode reg 阅读全文
posted @ 2022-10-14 19:13 astralcon 阅读(146) 评论(0) 推荐(0)
摘要: File System Implementation 这章会介绍一个简单的文件系统vsfs(Very Simple File System)。该系统为简化版的UNIX系统,纯软件;有现在大部分文件系统中的基本磁盘结构、访问方法和各种策略。 带着问题学习:如何实现一个简单的文件系统? 1. The W 阅读全文
posted @ 2022-10-14 19:13 astralcon 阅读(115) 评论(0) 推荐(0)
摘要: Interlude: Files and Directories 带着问题学习:操作系统应如何管理持久性设备?什么是API?实施的重要方面是什么? 1. Files And Directories 在虚拟化存储方面有两个重要的抽象: 文件(file) 目录(directory) 文件:一组字节的线性 阅读全文
posted @ 2022-10-14 19:12 astralcon 阅读(90) 评论(0) 推荐(0)
摘要: Redundant Arrays of Inexpensive Disks (RAIDs) 带着问题学习:如何制作容量大、速度快、可靠的磁盘? 解决上述问题使用了一种技术叫做Redundant Array of Inexpensive Disks(RAID):协同使用多个磁盘。 RAIDs相对于单个 阅读全文
posted @ 2022-10-14 19:11 astralcon 阅读(155) 评论(0) 推荐(0)
摘要: Hard Disk Drives 带着问题:磁盘是如何存储和获取数据的? 1. The Interface 磁盘可以看作n个扇区的数组(驱动器地址空间从0到n - 1)。 多扇区操作是可以的。许多文件系统一次将读或写很大字节的内容。但是,在更新磁盘时,驱动制造商唯一保证的就是单个512字节扇区的写入 阅读全文
posted @ 2022-10-14 19:11 astralcon 阅读(170) 评论(0) 推荐(0)
摘要: I/O Devices 带着问题学习:如何将I/O集成到系统中?一般机制是什么?如何使它们高效? 1. System Architecture 上图所示,I/O设备被分成三层。但是为什么需要将其分层? 最直接的原因:物理(physics)和成本(cost)。高性能通道没有太多空间插入设备且设计总线的 阅读全文
posted @ 2022-10-14 19:11 astralcon 阅读(129) 评论(0) 推荐(0)
摘要: Event-based Concurrency (Advanced) 我们前面讨论并发问题都是使用多线程。但是,关于并发的问题不止这一方面,还有使用基于GUI的应用程序和因特网服务器的并发,这些叫做基于事件的并发(event-based concurrency)。 要解决的基于事件的并发问题有两个: 阅读全文
posted @ 2022-10-14 19:10 astralcon 阅读(48) 评论(0) 推荐(0)
摘要: Common Concurrency Problems 带着问题:如何处理常见的并发错误问题? 1. What Types Of Bugs Exist? 主要研究4个开源应用: MYSQL Apache Mozilla OpenOffice 2. Non-Deadlock Bugs 大部分并发问题都 阅读全文
posted @ 2022-10-14 19:10 astralcon 阅读(80) 评论(0) 推荐(0)
摘要: Semaphores 带着问题学习:如何使用信号量(semaphores)? 1. Semaphores: A Definition semaphore是一个具有整数值的对象,可以使用两个例程来对其进行操作。 POSIX中两个例程为sem_wait()和sem_post()。 在使用之前必须初始化, 阅读全文
posted @ 2022-10-14 19:09 astralcon 阅读(101) 评论(0) 推荐(0)
摘要: Condition Variables 输出结果如下: 在多线程情况下我们可以尝试使用共享变量,可以但是效率非常低下: 问题来了:在多线程情况下,线程应该如何等待条件? 1. Definition and Routines condition variable有两个操作: wait() // 当一个 阅读全文
posted @ 2022-10-14 19:09 astralcon 阅读(46) 评论(0) 推荐(0)
摘要: Lock-based Concurrent Data Structures 带着问题:给定一个数据结构,如何给其添加锁使其拥有正确性和高效性? 1. Concurrent Counters 1.1 Simple But Not Scalable 上述代码满足了正确性,但是对于性能,我们一无所知。为了 阅读全文
posted @ 2022-10-14 19:09 astralcon 阅读(22) 评论(0) 推荐(0)
摘要: Locks 为了解决在执行一系列指令时中间发生中断事情,引入了lock。 1. Locks: The Basic Idea 使用lock,关键部分为balance = balance + 1。 2. Pthread Locks 传递了一个变量来锁定和解锁,因为可能使用不用的锁来保护不同的变量(提高并 阅读全文
posted @ 2022-10-14 19:08 astralcon 阅读(138) 评论(0) 推荐(0)
摘要: Interlude: Thread API 带着两个问题学习本章节: OS创造和控制线程预留了什么接口? 这些接口是如何被设计以实现易用性和实用性? 1. Thread Creation 2. Thread Completion 3. Locks 除了创建和加入线程,另一个最有用的函数集就是为了使关 阅读全文
posted @ 2022-10-14 19:08 astralcon 阅读(39) 评论(0) 推荐(0)
摘要: Concurrency: An Introduction 我们这里引入了thread(线程)的概念,与前面所说process(进程)的区别如下: 线程之间进行上下文切换地址空间保持不变。 每个线程都将有一个stack。 1. Why Use Threads? 在深入了解thread之前,首先需要知道 阅读全文
posted @ 2022-10-14 19:07 astralcon 阅读(32) 评论(0) 推荐(0)
摘要: Complete Virtual Memory Systems 通过VAX/VMS和LINUX两个系统来说明前面所说的部分在完整的VM系统中如何体现。 1. VAX/VMS Virtual Memory 1.1 Memory Management Hardware VAX-11为每个进程提供了32位 阅读全文
posted @ 2022-10-14 19:07 astralcon 阅读(73) 评论(0) 推荐(0)
摘要: Beyond Physical Memory: Policies 对于OS的replacement policy,如何决定哪个(些)page(s)应该被移出内存是非常重要的,弄不好就会严重影响性能。当然的,为了避免极端情况下的行为发生,OS还包括一些调整措施。 1. Cache Management 阅读全文
posted @ 2022-10-14 19:06 astralcon 阅读(80) 评论(0) 推荐(0)
摘要: Beyond Physical Memory: Mechanisms 效率就是金钱。为了提高效率,一台计算机肯定不能一次只运行一个程序,而是一次运行多个程序。但是这样的话,page肯定不能全部存在内存中,所以就需要将page存在磁盘中。 1. Swap Space 首先我们要做的就是在磁盘中预留出一 阅读全文
posted @ 2022-10-14 19:06 astralcon 阅读(102) 评论(0) 推荐(0)
摘要: Paging: Smaller Tables 这章解决page带来的第二个问题:page table太大,会占用太多内存。 1. Simple Solution: Bigger Pages 一种非常简单的方法就是虚拟地址位数不变的情况下,增大page的大小,这样page的数量就会减少,相应的page 阅读全文
posted @ 2022-10-14 19:06 astralcon 阅读(109) 评论(0) 推荐(0)
摘要: Paging: Faster Translations (TLBs) 使用分页(paging)可能会导致高性能开销,因为分页需要大量的映射信息。由于该映射信息存储在物理内存中,所以对其进行查找要产生额外的内存开销。 为了解决这一问题,我们就需要依赖OS的老朋友硬件,在芯片的MMU中添加TLB(tra 阅读全文
posted @ 2022-10-14 19:05 astralcon 阅读(79) 评论(0) 推荐(0)
摘要: Paging: Introduction 在解决大多数空间管理问题时,操作系统会采用两种方法中的一种。一种是前面我们所提及到的segmentation,很不幸的是这种方法实现起来很困难。另一种方法就是接下来要介绍的paging。 1. A Simple Example And Overview 下图 阅读全文
posted @ 2022-10-14 19:05 astralcon 阅读(114) 评论(0) 推荐(0)
摘要: Free-Space Management 使用segmentation实现虚拟内存时,我们可能会遇到上图所示情况,总共未使用的空间是20字节,但是被分成了2个10字节的内存段,如果有个15字节的程序请求CPU给它分配内存,CPU只能拒绝这个请求。这一章就是为了解决这个问题。 1. Low-leve 阅读全文
posted @ 2022-10-14 19:04 astralcon 阅读(113) 评论(0) 推荐(0)
摘要: Segmentation 1. Segmentation: Generalized Base/Bounds 我们可以看一下(Figure 16.1),尽管每个CPU都有一对硬件寄存器(base register和bounds register),但是还是不可避免的会产生内存浪费(阴影部分表示未被使用 阅读全文
posted @ 2022-10-14 19:04 astralcon 阅读(196) 评论(0) 推荐(0)
摘要: Mechanism: Address Translation In developing the virtualization of the CPU, we focused on a general mechanism known as limited direct execution (or LD 阅读全文
posted @ 2022-10-14 19:03 astralcon 阅读(187) 评论(0) 推荐(0)
摘要: Interlude: Memory API 1. Types of Memory 对于一个即将运行的C程序,有两种分配内存的方式。 第一种为stack memory,也叫做automatic memory。 当你调用 func(), 编译器做剩下的工作,确保在stack上给变量x分配内存地址。 vo 阅读全文
posted @ 2022-10-14 19:03 astralcon 阅读(57) 评论(0) 推荐(0)
摘要: The Abstraction: Address Spaces 1. Early Systems 在早期系统时代,操作系统和程序都存储在实际的物理地址中。 2. Multiprogramming and Time Sharing 为了提高efficiency,人们尝试用一台机器处理多个程序,进而引入 阅读全文
posted @ 2022-10-14 19:02 astralcon 阅读(40) 评论(0) 推荐(0)
摘要: Homework (Simulation) In this homework, we’ll use multi.py to simulate a multi-processor CPU scheduler, and learn about some of its details. Read the 阅读全文
posted @ 2022-10-14 19:02 astralcon 阅读(109) 评论(0) 推荐(0)
摘要: Lottery Scheduling 0. Basic Concept A : 75 tickets (0~74) B:25 tickets (75~99) A1 + A2:1000 tickets B1:10 tickets 注意:要区分一个进程和一个线程的tickets。 如下所示,A和B分别有 阅读全文
posted @ 2022-10-14 19:00 astralcon 阅读(84) 评论(0) 推荐(0)
摘要: 0. 文件地址 Homework 1. MLFQ: Basic Rules 2. Attempt #1: How To Change Priority 2.1 Example 1: A Single Long-Running Job 2.2 Example 2: Along Came A Short 阅读全文
posted @ 2022-10-14 19:00 astralcon 阅读(64) 评论(0) 推荐(0)
摘要: 0. 文件地址 Homework 1. Workload Assumptions 2. Scheduling Metrics 3. First In, First Out (FIFO) 4. Shortest Job First (SJF) 5. Shortest Time-to-Completio 阅读全文
posted @ 2022-10-14 18:59 astralcon 阅读(103) 评论(0) 推荐(0)
摘要: Homework (Simulation) This program, process-run.py, allows you to see how process states change as programs run and either use the CPU (e.g., perform 阅读全文
posted @ 2022-10-14 18:58 astralcon 阅读(277) 评论(0) 推荐(0)
摘要: 0. installing and using of Cygmin Since Cygwin was installed at the request of the teacher when taking the basic computer class, I will not introduce 阅读全文
posted @ 2022-10-14 18:58 astralcon 阅读(101) 评论(0) 推荐(0)
摘要: 本来是在CSDN上写博客的,但是CSDN上的广告实在太多了。 不如博客园干净简洁 故而搬家啦!! 原CSDN:杨林山小野猪 新博客园:astralcon 阅读全文
posted @ 2022-10-14 18:56 astralcon 阅读(36) 评论(0) 推荐(0)
摘要: 0. 实验文件地址 Wireshark Lab: DHCP v7.0 DHCP:动态主机配置协议。允许主机自动获取(被分配)一个IP地址(即插即用)。还允许一台主机得知其他信息,例如它的子网掩码、它的第一跳路由器地址(常称为默认网关)与它的本地DNS服务器的地址。 1. DHCP Experimen 阅读全文
posted @ 2022-10-14 18:52 astralcon 阅读(280) 评论(0) 推荐(0)
摘要: 0. 实验文件地址 Wireshark Lab: Ethernet and ARP v7.0 数据字段(46~1500字节):这个字段承载了IP数据报。以太网的最大传输单元(MTU)是1500字节。 目的地址(6字节):这个字段包含目的适配器的MAC地址。 源地址(6字节):这个字段包含了传输到该帧 阅读全文
posted @ 2022-10-14 18:51 astralcon 阅读(315) 评论(0) 推荐(0)
摘要: 0. 实验文件地址 Wireshark Lab: ICMP v7.0 ICMP: 被主机和路由器用来彼此沟通网络层的信息。最典型的应用是 差错报告。 1. ICMP and Ping Question & Answer 1. What is the IP address of your host? 阅读全文
posted @ 2022-10-14 18:51 astralcon 阅读(359) 评论(0) 推荐(0)
摘要: 0. 实验文件地址 Wireshark Lab: NAT v7.0 1. NAT Measurement Scenario Question & Answer 1. What is the IP address of the client? 2. The client actually commun 阅读全文
posted @ 2022-10-14 18:51 astralcon 阅读(1347) 评论(0) 推荐(0)
摘要: 实验文件地址 http://www-net.cs.umass.edu/wireshark-labs/Wireshark_IP_v7.0.pdf Question & Answer 1. Select the first ICMP Echo Request message sent by your c 阅读全文
posted @ 2022-10-14 18:50 astralcon 阅读(374) 评论(0) 推荐(0)
摘要: 0. 实验文件地址 http://www-net.cs.umass.edu/wireshark-labs/Wireshark_UDP_v7.0.pdf 为什么UDP提供了检验和 :不能保证源和目的之间的所有链路都提供差错检测(端到端原则)。 1. The Assignment I downloade 阅读全文
posted @ 2022-10-14 18:50 astralcon 阅读(179) 评论(0) 推荐(0)
摘要: 0. 实验文件地址 http://www-net.cs.umass.edu/wireshark-labs/Wireshark_TCP_v7.0.pdf 序号(seq):用来标识从TCP发送端向TCP接收端发送的数据字节流。 它表示在这个报文段中的第一个数据字节。 举个例子:以下是一个文件被分成几个报 阅读全文
posted @ 2022-10-14 18:49 astralcon 阅读(349) 评论(0) 推荐(0)
摘要: 0. 实验文件地址 http://www-net.cs.umass.edu/wireshark-labs/Wireshark_DNS_v7.0.pdf 1. nslookup 2. ipconfig 3. Tracing DNS with Wireshark 3.1 www.ietf.org 3.1 阅读全文
posted @ 2022-10-14 18:49 astralcon 阅读(75) 评论(0) 推荐(0)
摘要: 0. 实验文件地址 http://www-net.cs.umass.edu/wireshark-labs/Wireshark_HTTP_v7.0.pdf 方法字段可以取不同的值:GET、POST、HEAD、PUT和DELETE。 GET:请求服务器发送某个资源。 HEAD:与GET很相似,但是服务器 阅读全文
posted @ 2022-10-14 18:48 astralcon 阅读(257) 评论(0) 推荐(0)
摘要: Exercises Section 16.1.1 Ex16.1 编译器用推断出的模板参数生成一个特定版本的函数,这个过程就叫做实例化。 Ex16.2 #include<iostream> #include<functional> using namespace std; template <type 阅读全文
posted @ 2022-10-14 18:43 astralcon 阅读(43) 评论(0) 推荐(0)
摘要: Exercises Section 15.2.1 Ex15.1 一个类的 virtual 成员可以被其派生类重写 Ex15.2 被 protected 修饰的类成员可以被该类的派生类访问,而被 private 修饰的类成员则不行。 Ex15.3 class Quote { public: Quote 阅读全文
posted @ 2022-10-14 18:43 astralcon 阅读(52) 评论(0) 推荐(0)
摘要: Exercises Section 14.1 Ex14.1 不同点:重载操作符必须至少有一个类类型或枚举类型的操作数;重载操作符不保证操作数的求值顺序。 相同点:有相同的优先级和结合性,操作数的数目不变。 Ex14.2 class Sales_data { friend ostream &opera 阅读全文
posted @ 2022-10-14 18:42 astralcon 阅读(69) 评论(0) 推荐(0)
摘要: Exercises Section 13.1.1 Ex13.1 copy constructor:第一个参数为类类型的引用,任何其他参数都有默认值。 在如下情况下使用拷贝构造函数: 用 = 定义变量 传递一个对象作为参数给非引用类型 函数的返回对象的类型为非引用返回类型 用括号初始化数组元素或聚合类 阅读全文
posted @ 2022-10-14 18:42 astralcon 阅读(63) 评论(0) 推荐(0)
摘要: Exercises Section 12.1.1 Ex12.1 // b1 和 b2 共享数据,故而 b1 和 b2 都有 4 个元素 StrBlob b1; { Strblob b2 = {"a", "an", "the"}; b1 = b2; b2.push_back("about"); } E 阅读全文
posted @ 2022-10-14 18:42 astralcon 阅读(77) 评论(0) 推荐(0)
摘要: Exercises Section 11.1 Ex11.1 map:关联容器,元素为键值对;map没有push_back;map的元素按照关键字来保存和访问 vector:顺序容器,元素为内置类型或者自定义类型;可以对vector调用排序算法;vector是按照元素在容器的位置保存和访问 Ex11. 阅读全文
posted @ 2022-10-14 18:41 astralcon 阅读(35) 评论(0) 推荐(0)
摘要: Exercises Section 10.1 Ex10.1 #include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { int value; int number = 15; ve 阅读全文
posted @ 2022-10-14 18:41 astralcon 阅读(41) 评论(0) 推荐(0)
摘要: Exercises Section 9.1 Ex9.1 a) list 可能涉及中间插入操作 b) deque 涉及头部删除,尾部插入 c) vector 没有更好的选择 Exercises Section 9.2 Ex9.2 list<deque<int>> lqint; Exercises Se 阅读全文
posted @ 2022-10-14 18:40 astralcon 阅读(36) 评论(0) 推荐(0)
摘要: Exercises Section 8.1.2 Ex8.1 8.2 #include<iostream> #include<string> std::istream &read_Write(std::istream &is) { std::string s; while (is >> s) std: 阅读全文
posted @ 2022-10-14 18:40 astralcon 阅读(24) 评论(0) 推荐(0)
摘要: Exercises Section 7.1.1 Ex7.1 #include<iostream> #include<string> struct Sales_data { std::string bookNo; unsigned units_sold = 0; double revenue = 0. 阅读全文
posted @ 2022-10-14 18:39 astralcon 阅读(35) 评论(0) 推荐(0)
摘要: Exercises Section 6.1 Ex6.1 1. 参数是用来传递的,变量是通过定义得到的 2. 在调用过程中,有时候需要输入参数,此时参数会有值,可以直接传入;变量只有在赋值后才能使用 Ex6.2 a) // origin code 返回类型不匹配 int f() { string s; 阅读全文
posted @ 2022-10-14 18:39 astralcon 阅读(57) 评论(0) 推荐(0)
摘要: Exercises Section 5.1 Ex5.1 ; // null statement Ex5.2 // block { } Exercises Section 5.2 Ex5.4 a) while (string::iterator iter != s.end()) { /*... */ 阅读全文
posted @ 2022-10-14 18:37 astralcon 阅读(27) 评论(0) 推荐(0)
摘要: Exercises Section 4.1.2 Ex4.1 5 + 10 * 20 / 2 = 105 Ex4.2 a) *(vec.begin()) b) (*(vec.begin())) + 1 Exercises Section 4.2 Ex4.4 ((12 / 3) * 4) + (5 * 阅读全文
posted @ 2022-10-14 18:37 astralcon 阅读(27) 评论(0) 推荐(0)
摘要: Exercises Section 3.2.2 Ex3.2 // 一次读取一行 #include<iostream> #include<string> using namespace std; int main() { string line; while (getline(cin, line)) 阅读全文
posted @ 2022-10-14 18:35 astralcon 阅读(28) 评论(0) 推荐(0)
摘要: Exercise Section 2.1.1 Ex2.1 一个 long long 类型至少和 一个 long 类型一样大;一个 long 类型至少和一个 int 类型一样大;一个 int 类型至少和一个 short 类型一样大。 unsigned 类型不存在负数;signed 类型存在负数。 一个 阅读全文
posted @ 2022-10-14 18:33 astralcon 阅读(36) 评论(0) 推荐(0)
摘要: Preface 使用的书籍为《C++ Primer》第五版 英文版 Exercises Section 1.1 Ex1.2 Exercises Section 1.2 Ex1.3 Ex1.4 Ex1.5 Ex1.6 v1 后面多了一个冒号 Exercises Section 1.3 Ex1.7 Ex 阅读全文
posted @ 2022-10-14 18:31 astralcon 阅读(56) 评论(0) 推荐(0)