You might get the idea. Read a lot of scattered materials, but it is difficult to improve. It’s all dry stuff, but it doesn’t work, it’s simply not systematic. In addition, there is too much noise, a lot of the same frame, I do not have to learn it all.
Here, I’ve divided the classes into basic, Java basic, and Java advanced classes, and selected the most commonly used and most important tools.
This article has taken up a lot of my energy. If you think it’s good, please give it a thumbs up.
The latest content will be continuously updated on Github with new featured articles. Address:
https://github.com/sayhiai/javaok
Copy the code
Basic knowledge of
The data structure
Basic data structures are very important, and they are the first thing to master in any programming language. The concrete implementation is embodied in the Java collection class. These data structures, the concrete primitive form of these complex tools, need to be kept in mind.
Training institutions generally don’t have time to educate themselves on the basics, and algorithms and data structures can “usually” tell at a glance if they’ve been trained.
Commonly used algorithm
Algorithms are the threshold of some big factories. There is no doubt that some of the ACM graduates can kill most of the code farmers who have worked for many years. Algorithm can cultivate logical thinking ability and practical ability, which is a big plus in the first few years of my work. But with the increase of years of work, its proportion in the proportion of the ability system, will slowly reduce.
Algorithms learn through practice and repetition. If you are not good at this, never try to solve a problem you have never seen before. The best solution to some of these problems may take a doctor’s life, but all you need is memorization and generalization. The quickest way to advance is to swipe LeetCode.
For general research, sorting algorithms and time complexity are a must to master, and are most commonly used in jobs and interviews. If you have enough time, you can also learn more advanced algorithm knowledge such as dynamic programming and knapsack, which is the left column in the figure below.
books
Introduction to Algorithms, Beauty of Programming, Beauty of Mathematics
Database Basics MySQL
MySQL is the most widely used relational database. In addition to understanding the basics of usage and modeling, some low-level knowledge is necessary.
MySQL has a storage engine distinction. InnoDB and MyISAM are the most commonly used, so the pros and cons should be clear. ACID is a fundamental property of a relational database, and you need to understand the transaction isolation level behind it. Dirty reading, magic reading problems also want to understand the cause.
In order to speed up the query, index is a very important structure in the database, and B+ tree is the most commonly used index structure. Because of the character set problem, the problem of garbled characters is also often mentioned.
Professional DBAs can usually help you solve some specification and performance problems, but there are not always DBAs and many things need to be done by the backend itself.
books
MySQL Technology Insider — InnoDB Storage Engine, High Performance MySQL, High Availability MySQL
Network based
Network communication is one of the most attractive characteristics of the Internet era, it can be said that our work and life, all the time in contact with it.
The three handshakes and four waves of the hand are still blurred by many people. The result is a poor understanding of the state of the network connection, and the performance and robustness of the program are compromised.
HTTP is the most widely used protocol, and a deep understanding of it is often required. For Java, familiarity with Netty development is a shortcut to web development.
Crawlers are another fascinating aspect of web development, but it is recommended to use Python rather than Java.
books
The Definitive HTTP Guide TCP/IP Volume 1
Operating system Linux
All of you have taken the course 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, and I/O devices. For computation-intensive applications, the efficiency of program execution needs to be concerned. For I/O intensive, focus on switching between processes (threads) and optimization and scheduling of I/O devices. This part of knowledge is the premise of developing some high performance and reliable middleware, which cannot be bypassed.
For Linux, the first thing to master is daily operation and maintenance, including the use of common commands and software installation and configuration. Regularity is also a knowledge point that must be mastered.
Scripting is a big plus for the back end. Not only does it increase development efficiency, but it also helps you deal with unexpected problems.
books
“UNIX Environment advanced Programming (version 3)” “Birdbrother’s Linux private room dishes” “Linux Kernel Design and Implementation” “Linux command Line Complete”
Java based
JVM
Java programmer’s favorite and nightmare. Depending on the Oracle version, there are differences between JVM versions. Knowledge of the JVM is twofold. One at the storage level and one at the execution level.
Storage, for example, is divided into in-heap and off-heap, each with its own strengths. Garbage collectors are designed for in-heap memory, and the most commonly used are CMS and G1. The JVM has very rich configuration parameters to control this process. At the bytecode level, there is knowledge of lock upgrades and memory barriers, and JIT compilation to increase execution speed.
The JVM also has a memory model, the JMM, to coordinate concurrent access from multiple threads. JVM specs are huge, but they come up a lot in interviews.
In addition, the JDK provides a number of tools to snoop on this information. Including jstat, JMap, JStack, JVisualVM, etc., are the most commonly used.
books
In-depth Understanding of the Java Virtual Machine
JDK
Now, finally, the heart of the Java programmer: the JDK, a set of apis implemented according to the JVM specification. What we do is we combine these apis to control the behavior of the program.
The JDK code is very large and very complex. The most important ones are: collections, multithreading, NIO, reflection, file manipulation, Lambda syntax, etc. This, along with the SSM below, is basically where most of your friends play.
If data structures and algorithms are theories, here is the implementation of the supporting theory. Is Java good? That’s right there.
books
Data Structure and Algorithm Analysis: A Description of the Java Language
SSM
You might be developing projects with SSM, thinking that’s all there is to programming. Design patterns are easy to remember, IOC and AOP. I’ve gathered most of my peers here, and some of you may be Ok with that, 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 gradually diversified, with the prevalence of the front and back end separation, Restful with explicit semantics is becoming popular.
books
Head First Design Mode, Spring Revealed, SpringBoot Revealed, MyBatis Technical Insider, In-depth Analysis of Tomcat
In fact, just follow the document once, many books are just translations.
Concurrent programming
Servers are now multi-core, and there is more concurrent programming. Java has several ways to create multiple threads, but thread pools are more commonly used today. The thread pool is based on AQS, and there are many extensions to the tool class based on AQS.
Java has many ways of locking and thread synchronization at the same time. There are optimistic/pessimistic locks and fair/unfair locks, and it is difficult to write deadlock code.
Two issues that have been looked at very frequently are ABA and pseudo-sharing. Concurrent programming is typically paired with network programming to provide a series of solutions to a problem.
This is a tough nut to crack in Java.
books
Java Core Technology Series: Java Multi-threaded Programming Core Technology authoritative Guide to Java Performance Java Concurrent Programming Actual Combat
Performance optimization & Troubleshooting
Some people think that this should be the domain of SRE, but it is usually development that is most familiar with the business, and there are no clear boundaries for technology. Mastering these things will make you stand out from the crowd.
From operating system kernel optimization to database indexing and transaction optimization, this part of the skill is built on a solid foundation. That’s the basis of the operating system.
Every component of an operating system can have problems, and for a Java back end, it is very easy to locate these problems. Such as the common memory overflow problem.
books
Top of performance: Insights into Systems, Enterprises, and Cloud Computing
Java advanced
Here are some things, the boundaries are very fuzzy. They have me in them, and you in them, as a whole.
Redis
Caching is arguably the most widely used technology in computer systems. For distributed caches, the most common is Redis. Due to its rich data structure, more and more scenarios are applied.
The basic five data types are known, but if you name the others, the impression will be different. Redis has two Cluster modes, primary/secondary and Cluster, and different high availability configurations.
Redis can accommodate almost any Internet business except search, and some regulatory restrictions are necessary for its use. Generally, the faster the system, the more likely it is to be killed by the long tail operation. Therefore, you should also be aware of the contents of the info command.
There are three points of particular concern: distributed locking, limiting traffic, and synchronization with source data.
books
Redis Combat Redis Development and Operation and Maintenance Redis Design and Implementation
Kafka
MQ is a very important component in distributed systems, and 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 ACK level configuration, reliability increases but speed slows down. For message system, monitoring alarm is a very important link, can predict the system problems in advance. Kafka’s cluster itself is highly available and relies on the Zookeeper component, so understanding some basic concepts, including ISR, can help you understand the process in more detail.
books
Inside Kafka Technology
Related articles
ShardingJDBC
As data grew, MySQL itself became a bottleneck. Sub-database sub-table is a set of solutions for relational database, which is transformed into a distributed database.
Depending on the shard level, the most plausible cuts are made at the agent and driver layers. ShardingJDBC is a component in the driver layer.
The components themselves are just a problem. Before true shards, there are vertical splits and horizontal splits. Our online business is also 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 a valuable asset. It presents many challenges not only in terms of technology but also in terms of process. You experience the technology, the process, the management, it’s not separate.
Microservices & Middleware
The most popular microservices architecture right now is SpringCloud. This is very easy for students who are familiar with SSM development. Microservices have registry, RPC, load balancing, fusing limiting, gateway and other key components, some of which have many different alternatives.
The fragmentation of microservices raises a number of issues that require additional middleware support. Such as monitoring alarm, ELKB, configuration center, scheduling center, call chain, etc. They are needed without microservices, but obviously work much better together. Various A/B tests, canary, gray scale, etc., are basically one of the ultimate goals.
Microservices are a complex whole that combines both technical and process management aspects.
books
“Scalable Service Architecture: Framework and Middleware” “Spring Cloud and Docker Micro-service Architecture Practice” “The Way of Architecture Cultivation”
distributed
As the number of servers increases, some services, including the microservices mentioned above, need to coordinate and interact. This is a distributed system.
The theoretical basis of distribution includes CAP, BASE and so on. There are a lot of algorithms out there for consistency, and Raft is an easy to understand upstart that is increasingly being used.
This section focuses on theory, but once it gets into practice, it’s all big stuff. Here is an article, though not a complete one, to show my appreciation.
books
NoSQL Essentials ZooKeeper: Distributed Process Collaboration Technology Details Distributed Consistency Principle and Practice from Paxos to ZooKeeper
Support technology
The basic operations
I prefer infrastructure and operations to be the same because there is so much overlap and similarity. When the basic operation and peacekeeping architecture work together, the typical characteristic is platformization + standardization.
Here is a place to test comprehensive quality, has breadth also has depth.
books
Ansible, Docker — Containers and Container Cloud, Kubernetes Authoritative Guide, Jenkins Authoritative Guide, Understanding Nginx
security
Safety is no small matter, construction site and system security is the same reason. Familiarity with some common attacks and encryption and decryption algorithms is necessary.
It’s like putting a lock on the door of your house: it stops most malevolent people, but not the reckless mob.
End
You may find that there are no components you care about. It is not surprising that, for example, my favorite ES cannot find a suitable place. Here is only the most important point of content, has shown multifarious, a hodgepodge is not necessarily good.
It is worth reminding that this knowledge is a branch of many development routes. Some friends may only struggle in one of them, lacking the so-called breadth; You may also have friends who have full-stack tags and are doing SSM work. Different companies require different levels of skill. A company that focuses on ERP business will pay more attention to project management. An IM team will probably know web development inside and out. Again. This technical point is personal sorting. In order to repair the cognitive bias, I will maintain a Github project, follow up the classification in real time and add new related articles (welcome to submit PR). If you have any ideas, please feedback to me as soon as possible, thank you very much. —