CS course memory for it migrant male [yan yuheng's article]

Source: Internet
Author: User

Sender: kyhpudding (as long as the shirt is real ~), Email: CS
Question: CS course memory for it migrant male
Mailing site: Yat-sen channel (Sun Mar 7 16:42:31 2010), forwarding

First, introduce yourself to the 03cs undergraduate course.

I spent more than two years in a better Chinese-speaking place to build community products and then build a basic platform.

Bringing projects to the front-end of new people to the back-end applications to the bottom layer, and leaving all departments alone

It is said to be a killer, but I don't think

Recently, I 've continued to work in a company where penguin is the mascot.

This article only represents personal opinions and only contains personal experience.

We will talk about the practical engineering work of various CS courses,

More accurate, the impact on engineering work in typical Internet industries

I tried to answer: What are the functions of these courses? And why does the interview ask such BT questions?

However, if you do not want to take the technical direction, or you want to "switch to management" after a while"

Ignore this article

The first thing I regret in my four-year undergraduate course is that I didn't learn mathematics well.

Program Design, first of all, is a language problem. You may complain that the work is basically Java C #.

The university is still teaching C ++, lagging behind! Well, the most familiar language is actually c ......

Let's look at the tasks of programming. On the one hand, you must master a language to communicate with a computer. Otherwise

On the other hand, by learning program design, instead of a specific language

Basic design methods and ideas to prepare for real project development.

From the perspective of mastering computer principles and effectively using computers, we should select a relatively low-level high-level language,

This is naturally C, which has some underlying problems: hardware, data structure, underlying operating system mechanism, etc.

Provides appropriate abstraction to link our understanding of computers from the bottom to the top: You need to know when writing a compilation.

The meaning of commands on the underlying hardware. Similarly, you need to write the C loop, array addressing, and pointer on the Assembly.

What is the clear explanation? You need to know exactly what data is stored in the function call pressure stack and what is memcpy?

Copied data (Classic problem). When learning OS, if Linux (or any UNIX-like) is used as a textbook sample,

You must have a solid C language skills to perform operating system experiments, or at least understand how to use system calls.

Completion. c is the standard language at the underlying level of the system. A solid foundation of C language is to understand the underlying principles of the system.

As for the reasons for understanding the underlying layers of these computer systems, let's talk about it later.

On the other hand, the task involves the daily work of many people-programming. two branches: Data Structure and algorithm,

Software design paradigm, abstraction, modeling of real-world problems, providing computer solutions, this requires that there is a need to make the underlying details

It will not impede thinking, and it is a relatively practical language. More and more universities are using Java, and of course many people hate it.

In this case, MIT uses scheme and python. From the perspective of teaching requirements, I think there is no problem.

The premise is that you still have to have a good C language and other basic knowledge. We will discuss the data structure and algorithm below.

It will also be said that the design paradigm, abstraction, modeling, and other issues are quite difficult (the data structure is also an abstract method ).

My programming book at that time seemed to be about a bunch of C knowledge, and then I added some additional things like "Object-Oriented Design ",

In fact, I am talking about the language features of C ++, which is very difficult to understand. I think the first thing to solve is a question about "how

Abstract Problems and model creation. "Object-Oriented" is only one of the optional methods *! And how to make

Using language features to implement these abstract methods is even more detailed.

6.001 the best job in the course, gradually guided the abstract of the higher level, and taught the classic design ideas step by step,

Instead of giving you a glimpse of plausible theories and terrible language features.

Pattern --- specifically refers to gof. I think it should be self-developed with considerable development experience. It is not suitable

Lectures in class.

Back then, I think the program design course should be divided into two parts: C course for understanding the underlying principles of computer systems.

It also provides advanced language tools to learn high-level computer theoretical knowledge. scheme was used before MIT,

Now we use python. There are two course links:

6.001 SiCp



6.189. The teaching material for this course is how to think like a computer scientist.



Program Design is a * Preparation * course.

At the application layer, we use Java, PHP, Python, and so on, as well as various scripts, and even self-designed languages.

From the perspective, I don't think it will be difficult for people who have a deep understanding of C and scheme to learn any normal language.

As for the application framework/system, this is another issue. If you are interested in learning it yourself, many large companies have their own solutions,

The university is not a training institution. It will make people laugh if they talk about it in class.

Data structures and algorithms, which are used every day. The basic data structure is the general language of this line.

To check whether candidate can be mastered, the important consideration is: lack of communication, no effort

I want to explain to you how the B + tree is going on. If I say that this module maintains a B + tree and you are looking at me, then

Everyone will suffer. That's it. Of course, you have never heard of some data structures, such as inverted tables.

Normal, but I can give you a few words to understand what is going on. You can use it to solve the problem right away.


Algorithm-it is helpful to participate in ACM, but it is not very helpful to study the strange skills of algorithms. Likewise, some

Basic algorithms, such as sorting, are common languages in the industry and cannot communicate with each other.

Some algorithms, which are not subject to undergraduate computer courses and need to be taught, should have been done after work


On the other hand, we often need to design algorithms, which are often variants and combinations of some algorithms.

Analysis of algorithm complexity-this is a terrible problem. It is possible to learn some basic methods in the classroom, although

This course will seem more difficult and require better mathematical knowledge (you know why I regret it, by the way,

A Daniel's point of view is that CS mathematics should be analyzed by mathematics, and I think it is true). However, I think that people with basic knowledge can

If you do not know an algorithm, you will understand it as soon as you hear it and can use it. But for algorithm analysis, this will not take a long time to go to school.

Well, it will be difficult in the future.

For algorithm, we recommend that you take the introduction to algorithms course.



Microcomputer principle/grouping/architecture. For me, the role of these courses is to let me know that I have a hard time getting an iron

How is the box going? Consider some system performance issues. When balancing the design, I must consider the actual computing.

Machine system, performance of each part-with the foundation, we must keep following the trend of Moore's Law.

What is the read/write feature of a hard disk? How to use multi-core etc

Operating system principle. This is a core course. In my work, it has two purposes.

For highly efficient low-layer applications, I need to understand the actions of the operating system and the implementation of system calls.

Principle and efficiency. I usually use Linux on the server side, while OS is traditionally used in UNIX

For example, some even directly use the method of analyzing the Linux kernel, which is a good combination. Basically,

Solid OS knowledge, coupled with apue, Linux programming is not a problem.

OS also provides some common concepts and Abstract METHODS: such as locks, threads, and processes. you will encounter them in various places.

You need to use it. Sometimes you need to implement it yourself. Sometimes you will find the CPU consumption of a spin lock.

Instructions are the key to affecting the performance of your program ......

On the other hand, it may be overlooked that OS is a very important engineering introductory course-I think this

Is the biggest significance of OS: start to learn and design the actual system.

-Learn a real large system. Real operating systems are very complicated. You can see the real world

Module division and abstract methods, you can see the flash of design ideas-and some ugly fact, this

It's better than any so-called "Design Method" book. PS. Check out apue.

-Analyze bottlenecks and consider trade-offs: when you are facing a system rather than a single problem,

The analysis bottleneck has become an important capability. If there is no optimal algorithm, the scheduling scheme will be lost, and the scheme will be selected.

The Scheduling Algorithm for Linux must be performed on the basis of sufficient analysis. It is not important to design the cache.

The important thing is: Why is it designed like this? What problems can be solved? What are the assumptions behind this solution? Benefits

What is the disadvantage? Is it consistent with the application mode? How can we accurately measure and verify these problems?

These are very important engineering capabilities. I have met a classmate who solves the performance problems of a module.

I read a piece of code and then told me: the complexity of the function is that O (N ^ 2) can be optimized to O (nlogn,

But in fact, the data size of that function is only dozens. More importantly, at this time, the module bottleneck lies in the IO. OS course.

Teach us these important analysis methods and some very subtle design ideas-this will be applied elsewhere


Network, this course also has two meanings. On the one hand, it is common sense: we always know what it is called "four-layer equipment ",

Some network programming knowledge is also included. On the other hand, I think

The understanding of protocol design, especially the understanding of TCP design, provides the basic idea and knowledge of designing a distributed system.

Many TCP design methods are applicable in the design of high-level communication protocols. I will give two examples later.

Database, I think this course is very difficult to teach. Let's talk about theory and mathematics. Let's talk about implementation, unrealistic, and SQL?

Isn't that funny? In fact, we have to learn something about each of them. Database and OS courses are very similar: it is a lot

The concentrated embodiment of the key knowledge and problems of the subject should look at how the strange knowledge is used in reality?

Check the OS and database.

On the one hand, databases have to talk about the classical relational theory-basically, as long as they are still designing storage systems, it is very difficult

This requires a good mathematical foundation. At the same time, we have mastered the basic paradigm and basic design methods.

This is the starting point for your thinking about a storage solution with actual problems. In the past two years, anti-paradigm has been widely used in the industry, or simply

I am talking about nosql and no-RDBMS, but believe me, classic relational theory is often the starting point of your thinking.

There will always be a place for databases to talk about concurrency, acid, and transactions.

Lock knowledge? Have you prepared some common knowledge about distributed systems? If you are ready, let's jump. acid is popular in the industry.

To achieve scalability, we do not need to blindly accept these "popular" things. We have

Time in class to figure out What acid is all about? How to implement it? What's the problem? How is a deadlock?

What is the principle of database index? How to Implement storage? One Query

Statement, combined with index, what can you do?

Of course, we still need to know the SQL, which is very easy to understand and express tools, and the detail of explain is not required.

I don't know how to configure MySql in the classroom. What are the BT features of Oracle?


Compilation Principle. This course is a bit complicated in the content carried by the undergraduate course. First of all, let's talk about the foundation of the basics, the automation.

I also need to talk about the classical lexical analysis syntax analysis content. I also need to talk about how to compile it into the machine language.

From a practical point of view, on the one hand, the knowledge of Knowledge lexical syntax analysis of automated machines provides us with solutions to related problems.

These are the most basic problems of CS. On the other hand, as we said at the beginning, sometimes

I have to design the language. when designing the syntax and parser, I have to understand the basic compilation principles and skills.

Use Lex & YACC as required.

As for the code generation part, I dare not say how important it is, but at least I have used relevant knowledge.

Software Engineering, with all my words, this is not a course that should be taught in CS, at least it should not be very serious. There are many

It is a management problem, and there are new concepts, new theories. More importantly, I think it is more of art,

Instead of science, we should learn and accumulate in actual work. Isn't it good to make an elective course?

Don't worry about it. No matter whether you talk about it or not, you are definitely a project manager.

I also recommend joelonsoftware's famous article

Advice for Computer Science College Students


Finally, we provide several questions to help you check whether your undergraduate study is strong,

To support engineering needs. This is all a basic problem and the algorithm issue is not listed.

This is not an interview experience. Each company has a different interview style,

However, the ability to solve the following problems is necessary in my work.

1. Implement memcpy

2. Use PV semaphore or mutex to implement a read/write lock

3. How does fread call a disk from the very beginning?

4. Is malloc implemented by the operating system kernel? Implement a pair of malloc/free

5. What about TCP three-way handshake? Why three times? Why is the connection closed four times? How to Get SYN flodd,

How to prevent it?

6. Let's talk about the TCP Sliding Window Mechanism and implement it by yourself.

7. Design a memory garbage collection method and talk about its advantages and limitations.

8. If I already have a B + tree storage implementation, use it to implement a basic database system:

For certain types of queries, how to create an index, how to execute a query, and how to complete an update operation?

Make up an MIT engineering course. We recommend that all students who want to invest in the project study.

Computer System Engineering



I don't spend my time studying courses. learning some popular technology may make you find an enviable job, but don't blame me for it, you will soon be the one who complains that your knowledge is new, too fast, and cannot keep up with you.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.