You might have some insight. Read a lot of scattered data, but it is difficult to improve. It’s all dry stuff, but it doesn’t work. It’s simply a lack of systematization. Besides, there’s so much noise and so many identical frames that I don’t have to learn them all.

Here, I generally based on the basic, Java basic, Java advanced to the next class, pick are also the most commonly used and most important tools.

This post took a lot of work from me, so if you think it’s good, please don’t hesitate to give it a thumbs up. If you agree, you can follow my wechat public account XjjDog, which is about these contents. I’m going to try to be more systematic.

The latest content will continue to be updated on Github, with new selected articles. Address:

https://github.com/sayhiai/javaok
Copy the code

Basic knowledge of

The data structure

Basic data structures are important, and they are the first to be mastered in any programming language. The concrete implementation is embodied in the Java collection classes. These data structures, the detailed primitive forms of these complex tools, should be memorized.

Training institutions generally do not have time to spread the basics, and with algorithms and data structures, it is “usually” possible to tell at a glance whether training has been done.

Commonly used algorithm

Algorithms are the threshold of some big factories. There is no doubt that some graduates who have attended ACM can kill most code farmers who have worked for many years. Algorithm can cultivate logical thinking ability and practical ability, which is a very big plus in the first few years of working. But with the increase of working years, its proportion in the capacity system, will slowly decrease.

The way algorithms learn is through practice and repetition. You should never try to solve a problem you haven’t seen before. Some problems may take a PhD’s entire life to solve, and all you need is to understand memory and draw inferences. The fastest way to advance is to use LeetCode.

For common research and development, sorting algorithm and time complexity is a must to master, is also the most commonly used in the job and interview. If you have enough time, you can also learn about higher order algorithms such as dynamic programming and knapsack, as shown in the left column below.

books

Introduction to Algorithms, The Beauty of Programming, the Beauty of Mathematics

MySQL Database Foundation

MySQL is the most widely used relational database. In addition to basic usage and modeling, some low-level knowledge is also necessary.

MySQL has a storage engine distinction. InnoDB and MyISAM are the most commonly used, and the pros and cons should be clear. ACID is a fundamental property of relational databases, and you need to understand the transaction isolation level behind it. Dirty read, unreal read the cause of the problem should also understand.

In order to speed up the query, index is a very important structure in the database, B+ tree is the most commonly used index structure. Because of the character set problem, garbled code is often mentioned.

Professional DBAs can often help you with specification and performance issues, but there are not always DBAs, and a lot of things need to be done on the back end.

books

MySQL Technology Insider — InnoDB Storage Engine “High Performance MySQL” “High Availability MySQL”

Network based

Network communication is one of the most attractive features of the Internet era. It can be said that we are dealing with it all the time in our work and life.

Connected by three handshakes and four waves, there are still a lot of people very vague. The result is a poor understanding of the state of the network connection, and the performance and robustness of the application can suffer.

HTTP is the most widely used protocol, and a deeper understanding of it is usually required. For Java, getting familiar with Netty development is a shortcut to getting started with web development.

Crawlers are another fascinating aspect of web development, but it is recommended to use Python instead of Java.

books

HTTP Authoritative Guide TCP/IP Details Volume 1

Operating System Linux

Those of you who are trained have taken the course of computer organization, which is very important, but very boring. It’s much more intuitive to understand with Linux. Given that most server environments today are Linux, early exposure can complement each other.

You need to understand the interaction and speed differences between CPU, memory, network, I/O devices. For computationally intensive applications, it is necessary to focus on the efficiency of program execution. For I/O intensive, focus on switching between processes (threads) and optimization and scheduling of I/O devices. This knowledge is the premise of developing some high performance and high reliability middleware, which cannot be bypassed.

For Linux, the first thing you should master is routine operation and maintenance, including the use of common commands and software installation and configuration. Re is also a point that must be mastered.

Scripting is a big plus on the back end. Not only does it increase development efficiency, but it also makes it easier for you to deal with unexpected problems.

books

“UNIX Environment advanced programming (3rd edition)” “Bird brother Linux private house dish” “Linux kernel design and implementation” “Linux command line daqo”

Related articles

Parsing the Most Frequently Used Batch of Commands on Linux (10 Years of Picks)

Java based

JVM

Java programmer’s favorite and nightmare. This is based on the Oracle version and varies between JVM versions. Knowledge of the JVM is two-fold. One is storage level and one is execution level.

Storage, for example, is divided into two types of heap and heap, each has its merits. Garbage collectors are designed for in-heap memory, and CMS and G1 are the most commonly used. The JVM has a rich set of configuration parameters to control this process. At the bytecode level, there is knowledge of things like lock upgrades and memory barriers, and JIT compilation to increase execution speed.

The JVM also has an in-memory model, the JMM, to coordinate concurrent access by multiple threads. The SPEC for the JVM is huge, but it’s often mentioned in interviews.

In addition, the JDK provides a number of tools to snoopy on this information. These include jstat, jmap, jStack, JVisualVM, etc., which are the most commonly used.

books

Understanding the Java Virtual Machine

JDK

Now, finally, you’re at the heart of the Java programmer: the JDK, a set of apis implemented according to the JVM specification. And what we do is we combine these apis to control the behavior of the program.

The CODE in the JDK is huge and complex. The most important ones include: collections, multithreading, NIO, reflection, file manipulation, Lambda syntax, etc. This, plus the SSM below, is basically where most people play.

If data structures and algorithms are theories, here are the implementations that support them. Java play good, that is to say here.

books

Data Structure and Algorithm Analysis: A Description of the Java Language

SSM

You might use SSM to develop projects and think that’s all there is to programming. With design patterns in mind, IOC and AOP are easy to use. This is where most of your peers are, and some of them will probably stop there, because some of you are going to focus on project management rather than technology.

The SSM is best at Web development. The current form of expression is becoming more and more diversified, and with the prevalence of the separation of front and back ends, the pattern of Restful with clear semantics is becoming more and more popular.

books

“Head First Design Mode” “Spring Reveal” “SpringBoot reveal” “MyBatis technology Insider” “In-depth Analysis of Tomcat”

In fact, follow the document to go through the line, many books are just translation.

Concurrent programming

Now that servers are multi-core, there is more concurrent programming. Java has several ways to create multiple threads, but thread pools are used more often than not. Thread pools are based on AQS, and there are many utility extensions based on AQS.

Java has many ways to lock and synchronize threads at the same time. There are optimistic/pessimistic locks, fair/unfair locks, and it is difficult to write a piece of deadlock code.

Two problems that have been examined very frequently are ABA and pseudo-sharing. Concurrent programming is typically paired with network programming to provide a set of solutions to a problem.

This is a tough nut to crack in Java.

books

“Java Core Technology series: Java Multithreaded programming core technology” “Java Performance Authoritative Guide” “Java concurrent programming combat”

Performance optimization & troubleshooting

Some people think that this should be the category of SRE, but usually the most familiar business is development, technology does not have any clear boundaries. Mastering these things will make you stand out from the crowd.

From kernel optimization of the operating system to indexing and transaction optimization of the database, this part of the skill set is built on a solid foundation. That’s the basis of the operating system.

Every component of the operating system can have problems, and it’s very easy for a Java back end to be able to locate them. Such as the common memory overflow problem.

books

Top of the Pack: Insights into Systems, Enterprises, and Cloud Computing

Java advanced

Here are some things that are very fuzzy. They are in each other, I have you, can be said to be a whole.

Redis

Caching is arguably the most widely used technology in computer systems. For distributed caches, the most common is Redis. Because of its rich data structure, it is used in more and more scenarios.

The basic five data types are known, but naming the others will give a different impression. Redis has two Cluster modes, primary/secondary and Cluster, and different high availability configurations.

Redis can be used for almost any Internet business except search, and some regulatory restrictions are necessary for its use. Generally, the faster the system, the more likely to be dragged to death by the long tail operation. Therefore, you should also understand the contents of the info command.

There are three points of particular concern: distributed locking, flow limiting, and synchronization with source data.

books

Redis Actual Combat, Redis Development and Operation, Redis Design and Implementation

Related articles

“This is probably the most pertinent Redis specification.”

Kafka

MQ is a very important component of distributed systems, and by far the most widely used one is Kafka. In addition to being used in big data scenarios, Kafka can also be used in business systems.

Kafka is very fast, and depending on the level of ACK configuration, reliability increases but speed slows. For the message system, the monitoring alarm is very important, can predict the problem of the system in advance. The Kafka cluster itself is highly available and relies on the Zookeeper component. Understanding some basic concepts, including ISR, will enable you to understand the process in more detail.

books

Introduction and Practice of Kafka

Related articles

Kafka Basics Index

Database table ShardingJDBC

As the data grows, MySQL itself becomes a bottleneck. Sub-database sub-table is a set of solution for relational database, which is transformed into a distributed database.

According to the sharding level, the most important thing is to cut in at the agent and driver layers. ShardingJDBC is a component in the driver layer.

The component itself is only a problem. Before the actual splitting, there would be vertical splitting and horizontal splitting. Our online business can also be split and switched without downtime, and a full and incremental synchronization tool is needed.

Those who have the conditions to go through this process are valuable assets. It has many challenges not only in technology but also in process. You will experience that the technology, the process, the management, are not separated.

Related articles

Selection and process should be careful, or it will get out of control.

Microservices & middleware

The most popular microservice architecture is SpringCloud. This is familiar with the SSM development of students, it is very easy to get started. Microservices have key components such as registries, RPCS, load balancing, fuses, gateways, and many different alternatives for some components.

The split of the microservices leads to a series of problems that require additional middleware support. Such as monitoring alarm, ELKB, configuration center, dispatch center, call chain, etc. They are needed without microservices, but they are clearly much more effective together. Various A/B tests, canaries, grayscales, etc., are basically one of the ultimate goals. Microservices are a complex whole that incorporates both technical and process management aspects.

books

“Scalable Service Architecture: Framework and Middleware”, “Spring Cloud and Docker Microservice Architecture Practice”, “Architecture Training”

distributed

As the number of servers increases, some services, including the microservices mentioned above, need to be coordinated and interacted with. This is a distributed system.

The distributed theoretical basis includes CAP, BASE and so on. There are a number of algorithms in particular for consistency, with Raft being an easy-to-understand upstart and becoming more widely used.

This section focuses on the theory, but once it gets into practice, it’s all about the big stuff. Here is an article, although not very complete, to express my heart.

Related articles

“Also talk about distributed storage essentials”

books

“NoSQL”, “ZooKeeper: A Detailed Analysis of Distributed Process Collaboration technology”, “Principles and Practices of Distributed Consistency from Paxos to ZooKeeper”

Support technology

The basic operations

I prefer that infrastructure and operations stay the same because there is so much overlap and similarity. The typical feature of the basic operation and peacekeeping architecture is platformization + standardization.

This is where comprehensive quality is tested, both in breadth and depth.

Related articles

Of all the monitoring components, there’s always one for you.

books

Running Ansible, Docker — Containers and The Container Cloud, Kubernetes’ Authoritative Guide, Jenkins’ Authoritative Guide, And Understanding Nginx

security

Safety is no small matter, construction site as well as system safety. Familiarity with common attacks and encryption and decryption algorithms is essential.

It’s like locking the door of your home: it can stop most people with bad intentions, but it can’t stop the unscrupulous mob.

End

You may find that there are no components you care about. It’s not surprising, for example, that my favorite, ES, couldn’t find a suitable place. Here is only the most important point of the content, it is complicated, a hodgepodge is not necessarily good.

This knowledge, it is worth reminding, is a branch of many lines of development. Some friends may struggle only at one point, lacking the so-called breadth; You may also have friends who have full-stack labels, but do SSM work. Different companies need different levels of technology. A company focusing on ERP business will have more articles on project management; An IM team probably knows a lot about web development.

Again. This technical point is personal. To fix the cognitive bias, I maintain a Github project that keeps track of the categories in real time and adds new related articles (PR submissions are welcome). If you have any ideas, please let me know as soon as possible. Thank you very much.