Common Misconceptions in Year 12 WJEC Computer Science and How to Fix Them | Year 12 WJEC 计算机:常见误区与纠正方法

📚 Common Misconceptions in Year 12 WJEC Computer Science and How to Fix Them | Year 12 WJEC 计算机:常见误区与纠正方法

In the first year of WJEC A‑level Computer Science, students often build on solid foundations but still fall into predictable traps. These errors are rarely due to a lack of effort; instead, they stem from oversimplified rules learned at GCSE, ambiguous terminology, or mental shortcuts that collapse under exam pressure. This article picks out ten of the most persistent misconceptions and explains not only what the correct idea is, but why the mistaken version feels so convincing in the first place. Working through these examples will help you sharpen your reasoning, improve your written answers, and avoid losing marks on topics that look easy but carry hidden depth.

在 WJEC A-level 计算机科学的第一年,学生通常已经具备一定基础,但仍会落入一些可预见的陷阱。这些错误很少是因为不够努力;更多时候,它们源于 GCSE 阶段过于简化的规则、模棱两可的术语,或是在考试压力下会崩塌的惯性思维。本文挑选了十个最顽固的误区,不仅解释正确的理解是什么,还会分析错误版本为何如此具有迷惑性。通过这些例子,你可以训练自己的推理能力,改进书面作答,避免在看似简单实则暗藏深度的题目上丢分。

1. The Sign Bit in Two’s Complement Means the Number Is Negative Only If the Leftmost Bit Is 1 | 补码中的符号位只在最左位为 1 时表示负数

Many students believe that in two’s complement representation, the leftmost bit simply acts as a flag: 1 means negative and 0 means positive. While this description works for recognising the sign of a stored value, it is the reason behind this convention that really matters. Two’s complement is designed so that the most significant bit has a negative place‑value weighting. For an 8‑bit number, the bit pattern 1101 0110 is not just “negative because it starts with 1”; it is evaluated as –128 + 64 + 16 + 4 + 2 = –42. The leftmost bit contributes –2^(n‑1) to the total, while all other bits contribute positive values.

许多学生认为在补码表示法中,最左位仅充当一个标志:1 表示负数,0 表示正数。虽然这种描述足以辨识一个存储值的符号,但真正重要的是它背后的原理。补码的设计使最高有效位具有负的位权。对于一个 8 位二进制数,位模式 1101 0110 并非“因为以 1 开头所以是负数”;它的计算方式是 –128 + 64 + 16 + 4 + 2 = –42。最左位对总数的贡献是 –2ⁿ⁻¹,而其他所有位则贡献正值。

This weighting explains why the range of an n‑bit two’s complement integer is –2^(n‑1) to 2^(n‑1)–1, not symmetric around zero. It also clarifies why you cannot simply flip the sign bit to change sign; you must invert all bits and add 1. When students forget the weighting model, they struggle to explain overflow, to carry out binary subtraction correctly, or to reason about the value of bit patterns where the sign bit and the next bit are both 1.

这种位权说明了为什么 n 位补码整数的范围是 –2ⁿ⁻¹ 到 2ⁿ⁻¹–1,而不是关于零点对称。这也解释了为什么不能简单地翻转符号位来改变符号;你必须将所有位取反并加 1。当学生忘记这种加权模型时,就很难解释溢出、正确进行二进制减法,或推理由符号位和次高位均为 1 的位模式所代表的值。

A practical exercise is to write several bit patterns and calculate their values using the weighted place‑value method, then verify by performing two’s complement negation. Recognising –128 as a legitimate 8‑bit value that has no positive counterpart in the same width is a classic exam topic that rewards deep understanding of the weighting principle.

一个实用的练习是写出几个位模式,用加权位权法计算它们的值,再通过补码取反进行验证。认识到 –128 是一个合法的 8 位数值,但在同一位宽下没有对应的正数,是经典的考试主题,只有深入理解位权原理才能答好。


2. A CPU with a Higher Clock Speed Always Executes Programs Faster | 时钟频率更高的 CPU 总是能更快执行程序

It is tempting to rank processors solely by clock speed, but this ignores how instructions are actually executed. The clock speed tells you how many cycles per second the CPU can run, yet different processors can accomplish vastly different amounts of work in one cycle. A 2.5 GHz processor with a superscalar, pipelined architecture can retire several instructions per cycle, whereas a simpler 3.2 GHz design might manage only one instruction every few cycles because of data hazards and pipeline stalls.

人们很容易仅凭时钟频率对处理器进行排名,但这忽略了指令实际执行的方式。时钟频率告诉你 CPU 每秒可以运行多少个周期,然而不同的处理器在一个周期内能完成的工作量可能差异巨大。一款 2.5 GHz 的处理器如果采用超标量流水线架构,每个周期可以完成多条指令;而一款更简单的 3.2 GHz 设计可能因为数据冒险和流水线停滞,每隔几个周期才能完成一条指令。

To compare performance accurately, WJEC students should consider the instruction set architecture, the number of cores, cache sizes and levels, and the efficiency of the microarchitecture. Two CPUs with identical clock speeds can deliver wildly different performance on the same program because one might possess a larger L1 cache, better branch prediction, or hardware support for floating‑point operations. Focusing only on gigahertz is a GCSE‑level simplification that will lose marks on an A‑level question about factors affecting processor performance.

为了准确比较性能,WJEC 学生应当考虑指令集架构、核心数量、缓存大小与层级,以及微架构的效率。两款时钟频率相同的 CPU 可能在执行同一程序时表现出巨大差异,因为其中一款可能拥有更大的 L1 缓存、更优秀的分支预测或对浮点运算的硬件支持。只关注千兆赫数字是一种 GCSE 层面的简化,在 A-level 中回答影响处理器性能的因素时将会失分。

In written answers, always mention that clock speed is one factor among many, and refer to other characteristics such as cores, cache, pipelining, and the nature of the task (e.g. whether it is CPU‑bound or I/O‑bound). This shows the examiner you understand that performance is a system‑level property, not a single number.

在书面作答中,一定要指出时钟频率只是众多因素之一,并提及其他特性,如核心数、缓存、流水线,以及任务的性质(例如它是 CPU 密集型还是 I/O 密集型)。这样能让考官看到你理解性能是一种系统级性质,而不仅仅是一个单一的数字。


3. Merging Two Boolean Expressions Is Just a Matter of Removing a Gate | 合并两个布尔表达式只是简单地去掉一个逻辑门

Many students treat Boolean algebra as a set of mysterious rules to be applied blindly. When asked to simplify (A ∧ B) ∨ (A ∧ ¬B), they may try to draw the circuit and then eliminate a gate by intuition rather than applying the distributive and complement laws. The correct simplification is A, because the expression can be factored as A ∧ (B ∨ ¬B) and B ∨ ¬B = 1, leaving A ∧ 1 = A. Relying on the visual appearance of the logic diagram often leads to errors when expressions are more complex.

许多学生把布尔代数当作一套神秘规则来盲目套用。当要求化简 (A ∧ B) ∨ (A ∧ ¬B) 时,他们可能会尝试画出电路,然后凭直觉去掉一个门,而不是应用分配律和互补律。正确的化简结果是 A,因为该表达式可以提取因子 A ∧ (B ∨ ¬B),而 B ∨ ¬B = 1,剩下 A ∧ 1 = A。在更复杂的表达式中,依赖逻辑图的视觉形态往往会导致错误。

The core misconception is confusing the physical structure of a circuit with its algebraic representation. Simplification is a mathematical process; you must be able to manipulate expressions using identities such as De Morgan’s laws, absorption, and distribution. Exam questions frequently ask for a step‑by‑step simplification, and marks are awarded for correct application of named laws, not for guessing the answer from a truth table alone.

根本的误区在于混淆了电路的物理结构和它的代数表示。简化是一个数学过程;你必须能够运用德摩根定律、吸收律、分配律等恒等式来操作表达式。考试题经常要求逐步化简,并根据正确运用已命名定律来给分,而不是仅凭真值表猜测答案。

Practise writing justifications for each line: “Apply De Morgan to the second term”, “Use A ∨ ¬A = 1”, etc. This not only secures method marks but also builds a rigorous habit that prevents errors in questions about XOR gate implementation or NAND‑only circuit conversion.

练习为每一步写出理由:“对第二项应用德摩根定律”,“使用 A ∨ ¬A = 1”,等等。这不仅确保拿到方法分,还能培养严谨的习惯,避免在异或门实现或纯 NAND 门电路转换的题目中出错。


4. An Array and a List Are the Same Data Structure in All Contexts | 在任何语境中数组和列表都是同一种数据结构

In Python, the ‘list’ type is a dynamic array under the hood, which blurs the distinction for many students. An abstract data type (ADT) list is defined by its operations – insert, delete, traverse – without specifying how the data is stored. An array is a concrete implementation where elements occupy contiguous memory locations. Confusing the two leads to incorrect reasoning about time complexity: inserting an element in the middle of an array requires shifting O(n) elements, whereas a linked list can perform the same operation in O(1) if the node pointer is already known.

在 Python 中,“列表”类型在底层是一个动态数组,这模糊了许多学生的认识。抽象数据类型(ADT)的列表由其操作定义——插入、删除、遍历——而不指定数据的存储方式。数组是一种具体实现,其元素占据连续的内存位置。将两者混淆会导致对时间复杂度的错误推理:在数组中间插入一个元素需要移动 O(n) 个元素,而链表如果已知节点指针,则可以在 O(1) 时间内完成同样的操作。

WJEC examiners often distinguish between static arrays, dynamic arrays, and linked lists. When a question asks for a data structure that can expand efficiently, a simple array is not appropriate because its size is fixed at creation, whereas a linked list can grow as long as memory allows. Students who treat all linear collections as “arrays” lose the ability to evaluate trade‑offs in memory usage and access speed.

WJEC 考官经常区分静态数组、动态数组和链表。当题目要求一种可以高效扩展的数据结构时,简单的数组并不合适,因为其大小在创建时即固定,而链表只要内存允许就可以一直增长。将所有线性集合都视为“数组”的学生,将无法评估内存使用和访问速度之间的权衡。

A safer habit is to describe any linear collection by both its logical behaviour and its storage mechanism. For instance, “a queue implemented with a circular array” says something precise about performance. Drawing labelled memory diagrams helps visualise why random access is O(1) in an array but O(n) in a singly linked list.

一个更可靠的习惯是,通过逻辑行为和存储机制两个方面来描述任何线性集合。例如,“用循环数组实现的队列”可以精确地说明性能。绘制带标注的内存示意图有助于直观理解为什么数组的随机访问是 O(1),而单向链表的随机访问是 O(n)。


5. Recursion Is Always Inefficient and Should Be Avoided | 递归总是低效的,应当避免使用

This myth arises because early exposure to recursion often involves naive Fibonacci calculations that generate an exponential tree of calls. Students then conclude that all recursive algorithms are wasteful. In fact, recursion is a natural fit for problems that have a self‑similar structure, such as traversing a binary tree, exploring a file system, or implementing divide‑and‑conquer algorithms like quicksort and mergesort. These algorithms, when written recursively, are elegant and often have O(n log n) complexity, which is highly efficient.

这个误解的起因是,初学递归时常会碰到朴素的斐波那契数列计算,它会产生指数级的调用树。学生由此得出所有递归算法都是浪费资源的结论。实际上,递归天然适用于具有自相似结构的问题,例如遍历二叉树、探索文件系统,或实现如快速排序和归并排序这样的分治算法。这些算法用递归编写时既优雅,又常常具有 O(n log n) 的高效复杂度。

Furthermore, compilers and interpreters for many languages implement tail‑call optimisation, which can turn a tail‑recursive function into a loop behind the scenes, eliminating the overhead of repeated function calls. WJEC questions may ask you to trace a recursive function and count the number of calls, but they rarely brand recursion as inherently inefficient. Instead, they expect you to compare iterative and recursive approaches for a given problem, weighing factors like readability, risk of stack overflow, and ease of implementation.

此外,许多语言的编译器或解释器实现了尾调用优化,可以将尾递归函数在幕后转换为循环,消除重复函数调用的开销。WJEC 考题可能会要求你跟踪一个递归函数并统计调用次数,但很少会把递归定性为低效。相反,考官期望你针对给定的问题比较迭代和递归方法,权衡可读性、栈溢出风险以及实现的简易程度等因素。

A good strategy is to learn to identify the base case and the recursive case clearly, and to calculate the maximum depth of recursion for a given input size. This prepares you both for dry‑run questions and for reasoned discussions about when recursion is the right tool.

一个很好的策略是学会清晰地识别基准情形和递归情形,并计算给定输入规模的最大递归深度。这既能为跟踪类题目做好准备,也能为关于何时递归是合适工具的理性讨论打下基础。


6. Virtual Memory Is Just Extra RAM on the Hard Disk | 虚拟内存只是硬盘上的额外 RAM

Many students describe virtual memory as “using disk space when RAM is full”, which is a description of paging to secondary storage, not of virtual memory itself. Virtual memory is an abstraction that gives each process its own isolated address space, allowing the operating system to manage physical memory transparently. The fact that pages can be moved between RAM and disk is a consequence of this system, not its definition.

许多学生将虚拟内存描述为“当 RAM 满时使用磁盘空间”,这其实描述的是将页面交换到辅助存储器,而非虚拟内存本身。虚拟内存是一种抽象机制,它为每个进程提供自己独立的地址空间,使操作系统能够透明地管理物理内存。页面可以在 RAM 和磁盘之间移动,是这一系统的结果,而不是它的定义。

When a WJEC question asks about the purpose of virtual memory, a high‑quality answer will mention that it enables programs to run even if they are larger than physical RAM, protects processes from interfering with each other, and simplifies memory allocation. The phrase “extra RAM on disk” is an oversimplification that misses the architectural significance and may cost marks in longer prose questions.

当 WJEC 题目询问虚拟内存的目的时,一个高质量的答案会提到:它使程序即使大于物理 RAM 也能运行,保护进程互不干扰,并简化内存分配。“硬盘上的额外 RAM”这种说法过于简化,忽略了它在体系结构上的重要意义,在较长的论述题中可能会失分。

Use diagrams that show the translation of virtual addresses to physical addresses via a page table, and explain the roles of the Memory Management Unit (MMU) and the page file. This level of detail signals to the examiner that you understand the mechanism rather than just the surface symptom.

使用示意图展示虚拟地址通过页表转换为物理地址的过程,并解释内存管理单元(MMU)和页面文件的作用。这样的细节水平向考官表明你理解的是机制而不仅仅是表面现象。


7. Binary Addition Is the Same as Decimal Addition, Just with 0s and 1s | 二进制加法与十进制加法完全一样,只是用了 0 和 1

While the column‑by‑column algorithm is identical, students frequently mishandle carry bits when the result exceeds the allowed bit width, or they misapply overflow rules. The mistake is not in the addition itself but in interpreting the outcome. In an 8‑bit system, adding 0110 0100 (100) and 0101 0110 (86) gives 1011 1010. If the numbers are unsigned, this is simply 186; if they are two’s complement signed, the result is –70, clearly not the arithmetic sum of 100 and 86, so overflow has occurred.

虽然逐列相加的算法是一致的,但当结果超出允许的位宽时,学生经常错误地处理进位,或者误用溢出规则。错误不在于加法本身,而在于对结果的解读。在 8 位系统中,将 0110 0100(100)与 0101 0110(86)相加,得到 1011 1010。如果这些数是无符号的,这就是 186;如果它们是有符号补码,结果却是 –70,显然不是 100 和 86 的算术和,因此发生了溢出。

WJEC marks are often lost on questions that ask students to “perform binary addition and state whether overflow occurs”. They add correctly but then declare overflow simply because there was a carry out of the most significant bit, which is incorrect for signed addition. Overflow in signed arithmetic occurs when the carry into the sign bit differs from the carry out of the sign bit. An explicit rule check must be shown in the working.

在要求学生“执行二进制加法并说明是否发生溢出”的题目中,常有 WJEC 学生失分。他们加法做得正确,却仅因为最高位产生了进位就宣称溢出,这对有符号加法是错误的。有符号运算中的溢出发生在进入符号位的进位与离开符号位的进位不同的时候。答题过程中必须展示明确的规则检查。

Practise writing a short verification step: after adding, convert the operands and the result back to decimal to confirm whether the answer is arithmetically correct. Recognising that hardware uses the V flag (overflow flag) helps connect this topic to processor architecture.

练习写出一个简短的验证步骤:加法完成后,将操作数和结果转换回十进制,以确认答案在算术上是否正确。认识到硬件使用 V 标志(溢出标志),有助于将这一主题与处理器架构联系起来。


8. More Registers Always Equals Faster Processing | 寄存器越多,处理速度就越快

Having more general‑purpose registers can reduce the need to access slower main memory, but there are diminishing returns. Each additional register makes the instruction set encoding wider (more bits needed to specify which register to use), which can increase instruction size and reduce code density. It also complicates the processor’s control logic and may lengthen critical timing paths. In modern RISC architectures, 32 general‑purpose registers are common; going beyond that typically yields little benefit for most workloads.

拥有更多的通用寄存器可以减少访问较慢的主存的需要,但其收益是递减的。每增加一个寄存器,都会使指令集编码变得更宽(需要更多位来指定使用哪个寄存器),这可能增加指令大小并降低代码密度。它还会使处理器的控制逻辑复杂化,并可能延长关键时序路径。在现代 RISC 架构中,32 个通用寄存器是常见的;超过这个数量对大多数工作负载而言通常收益甚微。

Students often treat the number of registers as an isolated performance button, but it interacts with compiler technology, instruction scheduling, and the cache hierarchy. A processor with fewer registers but a larger, smarter cache can easily outperform one with many registers and a poor memory subsystem. In essays, always discuss the trade‑off between register count and instruction encoding complexity.

学生经常将寄存器数量视为一个独立的性能旋钮,但它与编译器技术、指令调度以及缓存层次都存在交互。一个寄存器较少但拥有更大、更智能的缓存的处理器,可以轻松胜过寄存器很多但内存子系统较差的处理器。在论述题中,一定要讨论寄存器数量与指令编码复杂性之间的权衡。


9. Encryption and Hashing Are Interchangeable Ways to Protect Data | 加密和哈希是保护数据的可互换方法

Encryption is a reversible process designed to preserve confidentiality; given the correct key, ciphertext can be transformed back to plaintext. Hashing is a one‑way function that produces a fixed‑size digest, typically used for integrity verification and password storage. Confusing the two leads to serious security design flaws, such as trying to “decrypt” a stored password hash or using a hash algorithm where encryption is needed.

加密是一种可逆过程,旨在保护机密性;只要有正确的密钥,密文就可以转换回明文。哈希则是一种单向函数,产生固定大小的摘要,通常用于完整性验证和密码存储。混淆两者会导致严重的安全设计缺陷,比如试图“解密”存储的密码哈希值,或在需要加密的地方使用哈希算法。

WJEC specifications explicitly separate these concepts. Encryption algorithms (symmetric and asymmetric) are studied alongside their applications, while hashing is discussed in the context of password files, checksums, and digital signatures. A common exam pitfall is stating that “passwords are encrypted on the server” rather than “salt‑hashed”. Examiners expect precise terminology.

WJEC 大纲明确区分了这些概念。加密算法(对称和非对称)与其应用一同学习,而哈希则在密码文件、校验和与数字签名的背景下讨论。一个常见的考试陷阱是说“密码在服务器上被加密”而不是“加盐哈希”。考官期望使用精确的术语。

A useful comparative table can solidify the differences:

Property | 属性 Encryption | 加密 Hashing | 哈希
Reversible | 可逆性 Yes, with key | 是,需密钥 No | 否
Output size | 输出大小 Similar to input | 与输入相似 Fixed | 固定
Primary use | 主要用途 Confidentiality | 机密性 Integrity, authentication | 完整性、身份验证

Including such a contrast in a revision note makes the distinction stick.

在复习笔记中纳入这样的对比,有助于牢固掌握区别。


10. A Syntax Error and a Logic Error Are Essentially the Same Bug | 语法错误和逻辑错误本质上是同一种缺陷

Because both kinds of error prevent a program from producing the correct output, students sometimes lump them together as “things that go wrong”. A syntax error is a violation of the language’s grammatical rules, caught by the compiler or interpreter before execution. Example: missing a colon at the end of a for statement in Python. A logic error, by contrast, produces a program that runs without crashing but gives unintended results. Example: using < instead of <= in a loop condition, causing an off‑by‑one mistake.

由于两类错误都会导致程序无法产生正确的输出,学生有时会把它们混为一谈,都视为“出错的地方”。语法错误是对语言语法规则的违反,在程序执行前就会被编译器或解释器捕获。例如:Python 中 for 语句末尾遗漏冒号。而逻辑错误则不同,它产生的程序能运行且不崩溃,但给出非预期的结果。例如:在循环条件中使用 < 而非 <=,导致差一错误。

Exam questions often ask students to categorise a given bug and to describe the testing technique best suited to find each type. Syntax errors are uncovered by compilation and by walkthroughs; logic errors require test data with expected outputs, often using boundary values. Being precise about the difference shows a mature understanding of the software development lifecycle.

考试题目经常要求学生将给定的缺陷分类,并描述最适合发现每类错误的测试技术。语法错误通过编译和桌面走查即可发现;逻辑错误则需要带有预期输出的测试数据,通常要使用边界值。对两者差异的精确描述展示了对软件开发生命周期的成熟理解。


11. All Protocols Operate at the Application Layer of the TCP/IP Model | 所有协议都工作在 TCP/IP 模型的应用层

When students first meet protocols such as HTTP, FTP, SMTP, they can wrongly assume that all protocols govern applications and therefore sit at the top of the stack. In reality, TCP and UDP are transport‑layer protocols responsible for port‑based delivery and reliability; IP is a network‑layer protocol handling logical addressing; Ethernet and Wi‑Fi operate at the link layer. Each layer has its own set of protocols that encapsulate data from the layer above.

当学生初次接触 HTTP、FTP、SMTP 等协议时,可能会错误地认为所有协议都管理应用程序,因此都位于协议栈的顶层。实际上,TCP 和 UDP 是传输层协议,负责基于端口的交付和可靠性;IP 是网络层协议,处理逻辑寻址;以太网和 Wi‑Fi 工作在链路层。每一层都有自己的一套协议,对来自上层的数据进行封装。

WJEC expects you to map common protocols to the correct layers and to explain the concept of encapsulation. A classic exam trap is to say “TCP provides end‑to‑end encryption” – that is actually the role of TLS, which sits between the application and transport layers. Assigning a protocol to the wrong layer leads to a cascade of incorrect reasoning about reliability, addressing, and data flow.

WJEC 期望你将常见协议映射到正确的层次,并解释封装的概念。一个典型的考试陷阱是说“TCP 提供端到端加密”——这实际上是 TLS 的角色,TLS 位于应用层和传输层之间。将协议错误地归属到某个层次,会导致对可靠性、寻址和数据流的一系列错误推理。

Constructing a layer diagram for a simple web request (HTTP over TCP over IP over Ethernet) and annotating each protocol’s responsibilities builds a mental model that is robust enough for both short‑answer and extended‑response questions.

为一个简单的 Web 请求(HTTP 基于 TCP 基于 IP 基于以太网)构建层次图,并标注每个协议的职责,可以建立一个足够稳固的心智模型,以应对简答题和论述题。


12. Normalisation of Floating Point Numbers Always Produces a Unique Representation | 浮点数规格化总能产生唯一表示

Normalisation aims to maximise precision by ensuring that the most significant bit of the mantissa is a 1. However, students sometimes believe that this guarantees a single unambiguous representation for every real number, which is not true. Zero cannot be normalised in the usual way, and numbers that are extremely close to zero (denormalised numbers) are deliberately left unnormalised to represent the gap around zero more finely. Furthermore, rounding errors during calculation can produce different bit patterns that normalise to slightly different values.

规格化旨在通过确保尾数最高有效位为 1 来最大化精度。然而,学生有时会认为这能保证每个实数都有唯一明确的表示,事实并非如此。零无法按常规方式规格化,而极其接近零的数(非规格化数)则被有意保留为非规格化形式,以更精细地表示零附近的空隙。此外,计算过程中的舍入误差可能产生不同的位模式,它们规格化后的值也略有不同。

WJEC past papers show questions that ask students to normalise a given binary floating point pair and then comment on the limitations of the representation. A nuanced answer acknowledges that normalisation improves range and precision but does not solve the fundamental problem of representing continuous values with a finite number of bits. Bringing in terms such as ‘overflow’, ‘underflow’, and ‘denormalisation’ lifts the response to the top band.

WJEC 的历年试卷中有题目要求学生将给定的二进制浮点数对规格化,然后对表示的局限性进行评论。一个细致的答案会承认规格化能改善范围和精度,但并不能解决用有限位数表示连续值这一根本问题。引入“溢出”、“下溢”和“非规格化”等术语,将使答案提升到最高评分等级。

Published by TutorHao | Computer Science Revision Series | aleveler.com

更多咨询请联系16621398022(同微信)

Comments

屏轩国际教育cambridge primary/secondary checkpoint, cat4, ukiset,ukcat,igcse,alevel,PAT,STEP,MAT, ibdp,ap,ssat,sat,sat2课程辅导,国外大学本科硕士研究生博士课程论文辅导

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Discover more from aleveler.com

Subscribe now to keep reading and get access to the full archive.

Continue reading