In addition to the programming language itself, if you still understand these 7 points, you can definitely get 15k in Beishang, Shenzhen and Hangzhou.

It may be a bit of a headline, but after reading this article, you decide that you don’t think so. Even the 15k in the headline may be changed to 20k. No nonsense, direct dry goods.

1) Algorithm

This is basically the written test of major companies. If all the questions on "Sword Finger Offer" can be memorized, LeetCode will write one hundred to three hundred questions, or those who have participated in the ACM competition.

"Sword Finger Offer" refers to the book "Sword Finger Offer: Famous Enterprise Interviewers Explaining Typical Programming Questions", which analyzes 50 typical programmer interview questions, including basic knowledge, code quality, and problem-solving ideas , Optimizing efficiency and comprehensive capabilities.

LeetCode, an online question-writing website, contains a large number of technical interview questions, including 1000+ questions on algorithms, data structures and system design. It can help you quickly improve your programming skills and easily win dream offers from world-renowned IT companies.

I would like to recommend to you a copy of Google's elders' brushing notes. This book is good. If you scan LeetCode after reading it, your scalp will no longer be numb!

GitHub is going viral, the strongest in history, and Google’s brush notes can be downloaded

LeetCode contains 75 technical interview questions on "Sword Finger Offer", including bit operations, hash tables, heaps, strings, arrays, lookups, stacks and queues, trees, recursion and loops, linked lists, and many other types of questions.

The ACM competition, organized by ACM (Association for Computing Machinery, American Computer Association), is a stage for computer programmers from all over the world to show their talents, and it is also the best window for world-class universities to show their educational achievements.

Although the algorithmic questions are dismissed by many people, just like the ancient eight-part essay, companies are all tested like this. If you don't prepare, it's hard not to hang up!

2) Data structure

The way computers store and organize data includes arrays, linked lists, stacks, binary trees, hash tables, etc. Algorithms are solutions to problems and serve data structures. Algorithms can perform various processing on the data in the data structure, such as finding the data in the array, or sorting it, and so on.

In Java, data structures can generally be divided into two categories: linear data structures and non-linear data structures. Haha, isn't this non-character very soulful?

Linear data structures include arrays. In addition to the array itself, the representative works include ArrayList; there are linked lists, representative works are LinkedList; there are also stacks, which follow the principle of last in, first out, that is, "Last In First Out" (referred to as LIFO)-the last The one that enters, goes out first; there is also a queue, which only allows data to be added at the end of the line, and data is removed from the head of the line. Queues appear very frequently in Java, and there are a variety of different classes to meet the needs of different scenarios. Like priority queue PriorityQueue, delay queue DelayQueue and so on.

The nonlinear data structure has a tree, a hierarchical collection composed of n (n>0) finite nodes. It is called a "tree" because this data structure looks like an upside-down tree, except that the root is on the top and the leaves are on the bottom; there is also a hash table, also called a hash table, which is a key code that can be passed Value (key-value) direct access data structure, its biggest feature is that it can quickly find, insert and delete; there is also a graph, which is composed of a finite non-empty set of vertices and a set of edges between vertices, usually expressed as : G(V, E), where G represents a graph, V is the set of vertices in the graph G, and E is the set of edges in the graph G.

Although you don’t need to push the time and space complexity of various data structures in front of the interviewer, you don’t need to hand-write red-black trees, B-trees, and B+ trees. At the very least, you must know the difference between ArrayList and LinkedList, and you must know the expansion of HashMap. mechanism.

3) Principles of computer composition

Computers are hardware made up of devices such as CPU, memory, and display, but after graduating from university, we often engage in software development. So how can we freely shuttle between hardware and software? The answer is to learn the principles of computer composition.

Understand the composition principle of the computer, and also have a systematic understanding of the entire software development, whether it is the hardware principle of the computer or the software architecture, it can be well controlled, and with it, our professional development There are more opportunities.

The course of Principles of Computer Organization can be summed up in one word, which is "abstraction". In my opinion, this is also the soul of the entire computer design.

Eat the book "In-depth Understanding of Computer Systems"!

4) Computer network

In this day and age, it is impossible to live without internet. Even for a minute in the elevator, I can't stand the state of the mobile phone without internet. The programming knowledge we learn will become meaningless if it is separated from the network, because no programming language is to run in a stand-alone environment.

The course of computer network is really important. It is almost the content of the interview. What is the TCP/IP three-way handshake, four waved hands, the difference between TCP and UDP, HTTP protocol and so on.

If you start learning Java, you may feel that computer networks are useless. When you start to get in touch with Tomcat, Nginx, and network programming, such as BIO and NIO, and the network programming framework Netty, you will feel that if labor and management had used computers in the first place. How good is the knowledge of the Internet?

The introductory books include "Illustrated HTTP", "Illustrated TCP/IP", and "How the Network is Linked". If you go deeper, I recommend "Computer Networks: Top Down".

5) Operating system

Why should I learn an operating system?

First, the interview is required;

Second, no matter which programming language you learn, such as Java and C/C++, you need to deal with the operating system. Like the multi-threading technology in Java, the operating system is actually responsible for process and thread management;

Third, learning the operating system can also learn the knowledge of memory allocation.

You can take a look at "Modern Operating System" to know the outline of the OS; then read "Operating System-Essence and Design Principles" and "Linux Kernel Design and Implementation" to reach such a level:

  • Know the four major modules of OS: process and thread, memory management, IO and file system, device management
  • Understand part of the implementation of the Linux kernel, such as the virtual file system.
  • Understand what constitutes an operating system
  • Communication between processes
  • Mutual exclusion and synchronization
  • Why do we need virtual memory
  • How the file system is organized
  • and so on

For Linux, I recommend "Bird Brother's Linux Private Kitchen".

6) Database

Learning a programming language, if you don’t manipulate the data, you feel that this programming language has nothing but a soul, right? If you want to learn data well, you must first learn SQL, recommend "SQL Must Know and Know", then MySQL, recommend "High Performance MySQL".

If you want to expand, there is Redis, the most widely used storage middleware in the field of Internet technology, and I recommend "Redis In-Depth Adventure: Core Principles and Application Practical Combat."

There is also MongoDB, a non-relational database, and the "MongoDB Authoritative Guide" is recommended.

7) Design pattern

I think design patterns are the only way for junior and intermediate programmers to move towards advanced programmers. There are many programmers who are full of enthusiasm in the early stage, but are weak in the follow-up, and they all suffer from the loss of design patterns. In the first few years of work, most programmers are at the stage of being familiar with programming languages, that is, at the stage of "technical", and then they will enter the stage of "technical". In the field of programming, the typical representative of "technique" is "design mode".

Everyone has heard that learning design patterns is very important, so why is it so important? What are design patterns? Using a metaphor to learn programming is like learning martial arts.

There are two things you can't lose in martial arts. The first is internal strength; the second is martial arts secrets. Corresponding to programming is our basic programming ability, and the design pattern of programming can be imagined as the martial arts secrets in martial arts.

I recommend "The Zen of Design Patterns". I think it is one of the 3 classic books in the field of design patterns. It is also a book written by our domestic programmers. It is very interesting and easy to understand.

In addition to this paper book, I recommend a PDF by my good friend Xiao Fu, which has been downloaded madly over 30,000 times across the Internet. I have a detailed introduction in another article:

Design mode, awesome! Design mode, awesome! Design mode, awesome!

Finally, please allow me a few more BB words

Many of my friends once wrote me privately that it was the second half of the junior semester and found that many of my classmates had got internship offers, and suddenly realized that I had to find a job. Then I was a little confused and didn't know how to study. Therefore, I would like to make some suggestions to all of you.

1) Look at materials with high information density and high quality

Like the two materials I mentioned in the article, it can be said that they are all recognized as the highest quality materials in the industry. If you can earnestly learn 70% from them, you can be said to be ahead of most people.

Especially the books I mentioned, although it takes a lot of time to read, the knowledge will be more comprehensive and systematic after learning.

2) Be aware of crisis

The computer industry is already very busy, right? But every year there is still an influx of newcomers. If you don't brush up the questions, if you don't lose your energy, someone will naturally leave you behind.

To get a satisfactory offer, it is best to follow what I said! It's time to hit the foundation hard!

3) Always stupid persistence before the great Niubi

You may see some big cows talking in many places, it seems they are bragging. But we must see the hard work behind them, the hard work behind them.

Knocking on the code is a handicraft. If you don’t believe me, look at the ctrl+c and ctrl+v on your keyboard, hahaha, naughty~~~~ The code that should be knocked must be knocked, just like the story of selling oil, you are only familiar with it. Yeah!

I wish you all a happy learning, a happy learning, and a satisfactory offer. Let’s start with one click and three consecutive times!

Guess you like

Origin blog.csdn.net/qing_gee/article/details/115282904