软件工程本科生宝典
首页/四年规划/大二上学期
第 2 学年 · 第 1 学期

大二上学期学习规划

攻克数据结构与计算机组成原理两大硬核课,掌握Java/Python并做出可展示的完整项目

本学期主题

攻克数据结构与计算机组成原理两大硬核课,掌握Java/Python并做出可展示的完整项目

🧭总览

大二上是整个本科阶段课程密度最大、含金量最高的学期之一。核心任务:一,把数据结构学透,它是所有大厂笔试面试的绝对核心,必须能徒手写出排序、查找、树、图等核心算法;二,学好计算机组成原理,理解CPU、内存、指令系统如何运转,为操作系统铺路;三,掌握一门面向对象的工业级语言(Java或Python),从「会语法」迈向「会用它做项目」;四,学好概率论与数理统计,这是机器学习的数学基础。时间分配上,课外每周30到36小时:数据结构与刷题35%、组成原理20%、Java/Python与项目25%、概率论与英语20%。目标水平:LeetCode简单题能做到150题以上、能独立实现红黑树以外的常见数据结构;能解释从代码到机器执行的全过程。常见错误:数据结构只背不写;刷题只看题解不动手;语言只学语法不做项目。

📘课程安排与学习重点

共 7 门。每门课的完整学习引导(教材、网课、实践、面试考法)可在课程库中查看。

数据结构与算法

专业核心4学分/64学时
📌 课程定位

这是软件工程最核心的专业课,没有之一。它研究数据如何组织、算法如何设计,直接决定你在大厂笔试面试中的表现。内容涵盖线性表、栈、队列、串、树、图、查找、排序。学透它,你才能理解数据库索引(B+树)、操作系统调度(优先队列)、编译器(语法树)、网络路由(图算法)。

✅ 必须掌握
  • 顺序表、链表、栈、队列的实现与应用
  • 二叉树的遍历(前中后序、层序)与二叉搜索树
  • 堆与优先队列
  • 图的存储与遍历(DFS/BFS)及最短路径
  • 八大排序算法与时间/空间复杂度分析
  • 哈希表与冲突处理
✍️ 怎么学(含目标分数与刷题量)

教材用严蔚敏《数据结构(C语言版)》或《算法(第4版)》。网课推荐陈越/王卓在中国大学MOOC的《数据结构》。关键:每学一个结构必须用C或Java手写一遍,不能只看。配套刷题:在LeetCode按照「数组—链表—栈队列—树—图—排序—动态规划」的顺序推进,本学期至少完成150道。指针、递归、复杂度分析是三大关卡。目标:期末85分以上,LeetCode简单题熟练、中等题能独立思考。

📖 推荐教材
数据结构(C语言版)(严蔚敏)
算法(第4版)(Robert Sedgewick)
大话数据结构(程杰)
🔗 在线资源
力扣 LeetCode 中国(笔试面试刷题主战场,坚持每日一题)
OI Wiki(算法知识百科,查漏补缺)
visualgo(算法动画演示,理解执行过程)

计算机组成原理

专业核心4学分/64学时
📌 课程定位

这门课讲清楚「程序到底是怎么在硬件上跑起来的」:数据的表示、运算器、存储系统、指令系统、CPU、总线与IO。它是操作系统、编译原理、体系结构的直接前置,也是很多985/大厂考研408的必考科目。学完它,你对性能优化、缓存、内存对齐会有底层直觉。

✅ 必须掌握
  • 原码/补码/反码与IEEE754浮点数
  • 定点与浮点运算
  • 存储层次结构与Cache映射
  • 指令格式与寻址方式
  • CPU数据通路与流水线基础
✍️ 怎么学(含目标分数与刷题量)

教材用唐朔飞《计算机组成原理》或《计算机组成与设计:硬件/软件接口》。重点:数制与浮点表示(IEEE754)、定点与浮点运算、存储层次(Cache、主存、虚拟存储)、指令系统与寻址方式、CPU数据通路、流水线基础。MOOC上哈工大或华科的课都可跟。要动手做实验(如用Logisim搭简单CPU)。目标80分以上,能手算Cache命中率、理解IEEE754浮点格式。

📖 推荐教材
计算机组成原理(唐朔飞)
计算机组成与设计:硬件/软件接口(Patterson, Hennessy)
🔗 在线资源
中国大学MOOC(搜索「计算机组成原理」,跟名校课学习)
CS自学指南(参考体系课学习顺序与资源)

Java程序设计

专业基础3学分/48学时
📌 课程定位

Java是企业级后端开发最主流的语言,也是国内大厂招聘需求量最大的技术栈。这门课让你从面向过程转向面向对象,理解类、对象、继承、多态、封装、集合框架、异常处理和IO。掌握它,你的就业面会显著变宽。

✅ 必须掌握
  • 类、对象、继承、多态、封装
  • 集合框架(ArrayList/HashMap/HashSet)
  • 异常处理机制
  • IO流与文件操作
  • 泛型与基本多线程
✍️ 怎么学(含目标分数与刷题量)

教材用《Java核心技术 卷I》或B站韩顺平Java。重点:面向对象三大特性、集合框架(List/Map/Set)、异常处理、IO流、多线程初步、泛型。每学完一章写一个小程序。本学期目标:能用Java重写数据结构的常见实现,并做出一个控制台小工具。期末85分以上。

📖 推荐教材
Java核心技术 卷I(Cay Horstmann)
Head First Java(Kathy Sierra)
🔗 在线资源
菜鸟教程Java(语法速查与在线练习)
JavaGuide(Java后端学习与面试中文指南)

Python程序设计

专业基础2学分/32学时
📌 课程定位

Python是数据分析、人工智能、自动化运维、后端脚本的通用语言,学习曲线平缓。对软件工程学生而言,它是快速实现想法、做机器学习、写爬虫和自动化脚本的首选工具。

✅ 必须掌握
  • Python基础语法与数据结构
  • 函数、类与模块
  • 常用标准库(os、re、requests)
  • 虚拟环境与pip包管理
✍️ 怎么学(含目标分数与刷题量)

教材用《Python编程:从入门到实践》。重点:基础语法、列表字典、函数、类、文件、常用标准库(os/re/requests)、简单爬虫与数据分析入门。动手做1到2个能展示的小脚本,如天气查询、简易爬虫。目标:能用Python独立完成一个小工具,为后续机器学习课打基础。

📖 推荐教材
Python编程:从入门到实践(Eric Matthes)
🔗 在线资源
菜鸟教程Python(Python语法速查)
Kaggle Learn(免费实战课程,为数据分析做准备)

概率论与数理统计

数学基础3学分/48学时
📌 课程定位

研究随机现象的数学规律,是机器学习、数据挖掘、自然语言处理、推荐系统的核心数学基础。极大似然、贝叶斯、正态分布、假设检验这些概念会贯穿你与AI相关的所有学习。

✅ 必须掌握
  • 概率基础与条件概率、全概率、贝叶斯公式
  • 随机变量及其分布(离散与连续)
  • 期望、方差、协方差
  • 大数定律与中心极限定理
  • 参数估计与假设检验
✍️ 怎么学(含目标分数与刷题量)

教材用浙大版《概率论与数理统计》。重点:随机变量及其分布、多维随机变量、数字特征(期望方差)、大数定律与中心极限定理、参数估计与假设检验。B站概率论课程配合。目标85分以上,重点理解期望、方差、条件概率的直觉。

📖 推荐教材
概率论与数理统计(盛骤(浙大版))
🔗 在线资源
哔哩哔哩(搜索「概率论与数理统计」跟课学习)

大学英语(三)

通识2学分/32学时
📌 课程定位

继续提升英语,为六级、技术文档阅读和未来外企/读研做准备。大学英语到高年级通常结束,要在大二把语言能力稳住。

✅ 必须掌握
  • 六级核心词汇
  • 英文技术文档阅读能力
✍️ 怎么学(含目标分数与刷题量)

保持每天背单词与阅读英文技术博客的习惯。有余力者本学期考六级。建议每天读一篇英文技术文章(如Stack Overflow博客、MDN英文文档)。课内80分以上即可。

📖 推荐教材
六级真题(星火/华研)
🔗 在线资源
MDN Web Docs(中英对照读技术文档,一举两得)

马克思主义基本原理

通识3学分/48学时
📌 课程定位

思想政治理论必修课,属于毕业硬性学分,投入产出比低,目标稳妥通过。

✅ 必须掌握
  • 课程要点(应试用)
✍️ 怎么学(含目标分数与刷题量)

正常出勤,考前一周背要点。期末60到85分都正常,别额外投入。时间留给数据结构和刷题。

📖 推荐教材
—
🔗 在线资源
—

💪本学期必须练出的技能

🎯

算法与数据结构刷题

目标:LeetCode累计完成150题以上,简单题熟练、中等题能独立解

按标签分类刷(数组/链表/树/图/DPS),每天1到2题,坚持写题解总结

🎯

面向对象编程

目标:能用Java/Python设计并实现有多个类的完整程序

用Java重写一个通讯录或图书系统,练习继承、多态、接口

🎯

计算机底层理解

目标:能说清楚一行高级语言代码如何转成机器指令并在CPU上执行

配合组成原理做Logisim实验,手算Cache命中与浮点表示

🛠️项目实战(写进简历的素材)

🛠️

个人博客/学习笔记网站(静态版)

时间:第9周到第16周

用HTML/CSS/JavaScript做一个个人博客或学习笔记网站,包含首页、文章列表页、文章详情页、关于我,支持响应式布局。数据可以先写成静态JSON文件。验收标准:页面在手机和电脑上都能正常显示,样式整洁,至少5篇文章,代码托管到GitHub Pages并生成可访问链接。这是你第一个能放进简历、面试官能点开的网页作品。

HTMLCSSJavaScript
🛠️

图书管理系统(Java面向对象版)

时间:第10周到第17周

把大一下的C语言课程设计用Java重写,加入面向对象设计:抽象图书/用户基类,用接口定义操作,用集合框架(ArrayList/HashMap)管理数据,用异常处理统一错误,数据持久化到文件或SQLite。验收标准:代码结构清晰、有继承与多态的实际应用、能演示完整业务流程,并写好README。它展示你从面向过程到面向对象的跨越。

Java

⏱️时间分配建议

数据结构与算法刷题30%
Java/Python与项目实践25%
计算机组成原理20%
概率论与数理统计12%
英语与通识课8%
运动与休息5%

每周课外投入30到36小时,是本学年最忙的学期。数据结构占约25%(每周至少3次上机手写结构+每日刷题),组成原理约20%(配合实验),Java/Python与项目约25%,概率论约10%,英语与通识约20%。建议节奏:工作日每天晚上3小时(一天刷题、一天组成原理、一天项目轮转),周末各半天做项目整合与刷题复盘。刷题要固定,用每日一题维持手感。第9周起把项目正式排进日程,第16周前完成并部署。每周日晚复盘:本周LeetCode过了几题、项目推进一步没、有没有卡在半懂的知识点。

💎本学期推荐资源

📖 书单

算法(第4版)Sedgewick

数据结构与算法的图解经典

Java核心技术 卷ICay Horstmann

Java入门与进阶

计算机组成原理唐朔飞

理解硬件与程序执行

Python编程:从入门到实践Eric Matthes

Python入门首选

🎬 视频课程

数据结构(陈越/王卓)中国大学MOOC
计算机组成原理中国大学MOOC / 哔哩哔哩
Java零基础哔哩哔哩 韩顺平

🌐 网站与文档

刷题主战场

算法百科

校招笔试面试题库与面经

体系课学习路线

🐙 GitHub 仓库

配套LeetCode刷题题解,系统性强

算法实现的Python版参考

✅学期末检查清单

✔️ 做到了就算合格
  • LeetCode累计完成150题以上并坚持每日一题
  • 能徒手用C/Java写出二叉树遍历、图遍历、八大排序
  • 能用Java或Python独立完成一个有多个类的完整项目
  • 计算机组成原理能解释Cache、IEEE754、流水线基本概念
  • 完成并部署个人博客网站,生成可访问链接
  • 概率论掌握期望方差、贝叶斯与常见分布
⚠️ 常见坑
  • {'坑': '数据结构只背概念不手写代码', '破解': '每个数据结构都必须自己从零实现一遍,面试时是写代码而不是背定义'}
  • {'坑': '刷题只看题解,不自己先想20分钟', '破解': '严格执行「先独立思考20分钟,再问题解,再默写一遍」的流程'}
  • {'坑': 'Java/Python只学语法,从不做项目', '破解': '每门语言至少产出一个能展示的项目,否则等于没学'}
  • {'坑': '组成原理觉得太硬件、和编程无关而轻视', '破解': '它是操作系统与性能优化的地基,也是考研408必考,务必要过'}