📖 Teaching
Operating Systems

Operating systems are an essential part of any computer system. Similarly, a course on operating systems is an essential part of any computer science education. The course is for introductory course in operating systems at the third-year undergraduate level. The course provides a clear description about the basic concepts that underlie operating systems (process, CPU schedule, file system, IO devices, etc).
Recommended Texts:
- Operating Systems Concepts, by ABRAHAM SILBERSCHATZ, PETER BAER GALVIN, GREG GAGNE, Tenth Edition.
- Modern Operating Systems, by ANDREW S. TANENBAUM, HERBERT BOS, Fourth Edition.
The Design and Analysis of Algorithms

The course covers advanced algorithm design strategies and analysis using formal and mathematical techniques. Topics include asymptotic analyses of complexity bounds using big-O, little-o, omega, and theta notations. The algorithmic strategies (brute-force, greedy, divide-and-conquer, recursive backtracking, dynamic programming, branch-and-bound, heuristics, and space-and-time tradeoffs) are covered.
Recommended Texts:
- Introduction to the Design and Analysis of Algorithms, by Anany Levitin, Third Edition.
- Introduction to Algorithms, by Cormen, Leiserson, et al.
- The Art of Computer Programming, by Donald E. Knuth, Third Edition.
Advanced Data Structures

This course is a professional basic required course for computer science and technology majors, emphasizing the close integration of theory and practice. Based on Data Structure 1, this course teaches the basic principles of more complex and efficient data structures and algorithms, and teaches the whole process of programming implementation based on Java language, so that students can master the ability to implement complex data structures and algorithms using Java language and cultivate their problem-solving ability.
Recommended Texts:
- Data structures: abstraction and design using Java, by Koffman, and Paul, Fourth Edition