Hello everyone, I am programmer Xiao Yue, an old programmer who has written programs for 6 years in the workplace. From the beginning of Android development in Juchang to the Java backend architecture of a game company, I still have a relatively good understanding of Java.
About half a year ago, an intimate friend of Zhihu sent me a private letter asking me about how to learn Java based on zero basis, and how to deal with some confusion in the learning process. I thought why not recombine the previous content and share it with you, which led to today’s share.
In the past more than a year, Yue Ge through this clear road map, has helped 20+ students to do a good job positioning, quickly recognize their current situation, and do the corresponding response measures, and even some students through adjustment, has got the offer.
Then immediately into the theme, the content mainly involves the following topics, the first part of the learning route, in the summary of each route, jump brother will also have a sense of accomplishment is to complete the route, and some practical books recommended oh.
Let me first show you the complete mind map, which is the main context of this article.
- Java from entry to advanced learning path
- Lead three projects and let me do it all by myself
- How do you learn to improve your abilities
- Conclusion as a whole
Java is now primarily evolving as a back-end application, especially in its microservices space. According to the ranking of programming languages, Java occupies the Top 3 position all year round, and there are too many partners to learn and use Java. There are even big Vs who believe that Java is currently king in microservices.
There are more than 12 million Java programmers, tons of devices, and an omnipotent Java ecosystem. Internet companies such as Alibaba, JD.com, Baidu, Tencent, Meituan and Qunar basically use Java as their preferred programming language. Even in the latest cloud computing world, Java is still the most used programming language on platforms like AWS and Google App Engine.
Therefore, our further goal of learning Java is to cultivate ourselves into micro service masters. The goal of finding a job is either to write Java in a large factory, or to become a master program in a small factory. Of course, although the current Android development said the use of Kotlin, the use of Java or a lot of people in, yue ge is from the Android development internal transfer to Java development, also is not to pay a very high price.
Java from entry to advanced learning path
Understanding the Java language
- Java’s past and present
- How to compile Java
- Java Environment Configuration
- The Java compiler
A lot of students like to start thinking about coding, hoping that the first page of the book will teach you how to code, but that’s not the case.
To understand a language, we need to understand the history of Java, how it came to be, how it developed, and how it was planned. Knowing where Java came from and where it was applied, we can explore more of the value of Java, right? So I would like to ask you, which version are you using now? What is the latest version? What is the latest long update?
So the first part of most textbooks will basically talk about the history of Java and how to build Java, rather than getting you started with a compiler.
Yue ge began to write Java or knock command line, with notepad to write Java code, grammar errors are compiled step by step to adjust over, although very tired, but very useful.
But we ultimately need to create productivity, and the students who come here to study are certainly knowledgeable, so in fact this first part is my nonsense. For example, how to compile Java, how to install the ring, and choose the appropriate compiler (at present, it is basically IDEA and Eclipse dualism era).
Java is a pure object-oriented programming language, so you have to understand its OOP features: encapsulation, inheritance, polymorphism.
About basic knowledge learning
The basics include (this section mainly refers to the Java Core Technology Volume) :
- Basic program structure: basic variable types, operators, strings, flow controls, arrays
- Classes and objects: definition and use of classes, static properties and methods, inheritance, package management, enumeration, reflection
- Interface and Abstract class: definition and implementation of interface, definition and implementation of abstract class
- Generics: Generic classes, generic methods
- Collections: Set, List, Map, tree, sort, and find
- Exceptions and debugging: built-in exceptions, declared exceptions, custom exceptions, catch exceptions, logging
- Multithreading: the concept of multithreading, using threads, synchronization
- New features after Java 8 :Lambda expressions, Stream (Map, filter, Reduce, collection)
- Java network programming: TCP, UDP
- Java I/O, NIO (WebSocket)
- Algorithms and data structures
Learning the basics gives you a rudimentary understanding of the Java language. Then again, the basics are a prerequisite for learning a programming language, and most of them are pretty much the same, including basic data types, program structures, and so on. If it’s Java, it’s object-oriented, it’s object-oriented, object-oriented is the most important, object-oriented is the most important, object-oriented is the most important, important things three times. Only master the knowledge of object oriented, in the subsequent development will have a better growth.
In this part, I added algorithm and data structure. In fact, I was also hesitant about which module to divide it into, because the basic algorithm will be taught in school. But the job, the interview, the algorithm will be integrated, and is not born to break off hard set can.
Now the school enrollment algorithm is a necessary module, so I still boil down to the basic knowledge. For example, when I used to interview candidates, bubbling was a common occurrence.
Sense of achievement: After learning Java’s past and present life, as well as the basic knowledge, it means that you can have fun and have fun.
After learning the above 1-6 that you can build a new project in the compiler, began to master the basic operation of Java, after learning 7-11 can try to complete a simple chat system, write a server, a client, you can chat communication, then your sense of achievement will be very sufficient oh.
Recommendation List:
- Cheng Yuege is in accordance with the “Java core technology volume 1”, “Java core technology volume 2”
- Yue elder brother just began to learn, is to see the teacher Li Gang “crazy Java handout”, in the laboratory to learn more than half a month to chew out the book
- For concurrency, check out Java Concurrent Programming in Action
- Java new features, you can consult “Java combat”, yue elder brother recently also recall consolidation, the content is very dry
- Algorithm, the introduction to recommend last year’s very hot programmer Xiao Grey “cartoon algorithm”, and recently very hot East brother wrote “Labuladong algorithm cheat sheet”
About Spring Learning (Web Framework)
The following is the knowledge you need to master about Spring.
- Maven: Maven and package management, POM files, life cycle, etc
- Unit testing: The concept of unit testing, Junit
- Spring Core: Dependency Injection and Inversion of Control, Spring Overview, XML Assembly Beans, Spring Container and lifecycle, Autowiring, Annotation Assembly, Aspect Programming (AOP)
- HTTP protocol: basic concepts, methods (GET/POST), HttpClist library
- JSON knowledge: JSON concepts, JSON and HTTP, JSON-wrapped libraries (FastJson, Jaskson libraries)
- Servlet concepts: Servlet concepts, Servlet life cycle, Filter and Listener, Tomcat and Servlet containers
- Spring MVC concepts: Configuring Spring MVC, path mapping, parameter passing, implementing REST, permission control, etc
- RPC Framework (Remote Procedure Call)
With the basics of part 1 behind us, step 2 is to get straight to the point. In the domain, Spring is a great tool to learn. I studied the client in college, so my cognition of the back end was Spring, Struts2 and Hibernate. When I wrote the back end later, I found that The Times had changed, and now I am more focused on mastering Spring, Spring MVC and Mybatis. In particular, the Spring framework.
There are many points involved in this part, but they are basically coherent when you learn them. As soon as you start writing code, this knowledge will be covered. Don’t be afraid you won’t be able to learn it.
The list of books recommended here is at the back, please wait a moment.
Learning about application services
Mainly including but not limited to
- MySQL: Relational database concept, DATABASE CRUD operations, JDBC API, database features, database connection pool
- MyBatis: OR mapping concept, configuration, mapping, basic Java libraries, and Spring integration
- Cache: Cache concepts, use of Redis, cache avalanche, cache penetration, cache breakdown
- NoSQL: NoSQL concepts, use of Mongodb
- Queue: Queue concepts, RabbitMQ, Kafka
- Search engine: Elasticsearch
- Reverse proxy: The concept of reverse proxy, Nginx configuration and use
Application services, covering a lot of areas, including persistence, cache, queue, reverse proxy, etc., these are the most important to improve a program. While the previous ones are part of the basic framework, the middleware is about filling in the framework with enhancements that make the program robust and stable. I think the projects that we usually encounter with high frequency such as practice are e-commerce projects. For example, redis cache knowledge is used in the second kill of e-commerce.
This part of the content IS very interesting to me, a function completed, only the first step, to improve it still need a variety of coordination. For example, our data storage, using SQL related knowledge, that to master, now the Internet is basically using MySQL to use; And then you need to support something like seckill, which is Redis related; Inventory updates are tricky, you may need to use message queues; Historical order query, you can choose to use mongodb, Elasticsearch; Access pressure is so high that you may need traffic distribution, or even fuses, and that requires Nginx.
You see, these applications are being applied invisibly to improve the robustness of the application. I just mentioned, if it is only a small project or practice, storage SQL is enough, do not need to use the cache and other things, but the application is large, you have to consider a variety of situations, then these artifacts will be used slowly.
You see, that’s the magic of programming. It’s all gradual.
Book list recommendation: here mentioned a lot, there have been a lot of excellent books, yue ge simply recommended a few, for everyone’s reference.
- “High Performance MySQL” (Douban score 9.3, 0.4K+ people evaluation) : a classic work in the field of MySQL, with a wide range of influence. It is not only suitable for database administrators (DBAs) to read, but also for developers to reference learning. No matter database novice or expert, I believe all can gain from this book.
- Redis In Action: This is a great book if you want to understand the concepts of Redis.
- “Redis design and Implementation” (Douban score 8.5) : Yue Ge learning Redis, in addition to the official website, holding in the hand is this book.
- RabbitMQ In Action: Distributed Messaging for Everyone. RabbitMQ in Action: Distributed Messaging for Everyone. Recently in learning, also see the teacher recommended book list, a teacher said, “XX in Action” this kind of books are classic books, very suitable for everyone to see, ha ha, this is not false, behind I will recommend a few XX in Action.
- The Definitive Guide to Kafka
- Understanding Nginx in Depth (Version 2) : Module Development and Architecture Parsing
Web framework advanced
- SpringBoot
- SpringCloud
- Service Discovery (Eureka)
- Service Gateway (Zuul)
- Load Balancing (Ribbon)
- Circuit breaker (Hystrix)
- Configuration Management (Config)
- Ali’s Dubbo
By now, many of you are familiar with the SSM framework, and you will think that frameworks are nothing more than that. Here is a brief description of a lightweight Web framework with the following features:
- User – defined configuration files can be read and used to initialize the framework;
- A Bean container that manages the object life cycle of the project’s classes;
- With dependency injection, reduce the coupling between classes;
- Have AOP function, so that the project can be horizontal programming, without changing the original code to increase the business logic;
- Have MVC framework pattern.
SSM is the first Web framework I know of. In fact, there are many Web frameworks, and the Spring family is the star of these frameworks, especially the SpringBoot and SpringCloud frameworks in their family.
SpringBoot makes up for the shortcomings of Spring configuration and no longer needs to spend more energy on complicated XML. When I touch SpringBoot, it seems to open up my world and overturn my previous cognition. SpringBoot is a good place to start if you’re just starting a project and still in the user accumulation phase, including hands-on learning projects.
SpringCloud is a microservices architecture that enables projects to be divided into microservices by business, each of which can be independently deployed and coordinated with each other. As a project becomes larger and larger, it becomes more and more difficult to maintain. In this case, splitting the project into several micro-services, maintaining and deploying them separately can also reduce the coupling degree between different services of the project.
There is also alibaba’s Dubbo, an open source distributed services framework that is widely used by Chinese Internet companies; It only needs to complete servitization through Spring configuration. There is no intrusion for applications, and the design purpose is still to serve its own business. Dubbo is a high-performance, lightweight, open source Java RPC framework that provides three core capabilities: interface-oriented remote method invocation, intelligent fault tolerance and load balancing, and automatic service registration and discovery.
Dubbo stopped updating for a while, but Ali resumed maintenance in 2017. Both Dubbo and Spring Cloud are effective tools for implementing microservices. Dubbo is a branded machine, and Spring Cloud is a modular machine.
I provide a description difference and contact information: www.cnblogs.com/aspirant/p/…
Spring, SpringBoot, and SpringCloud
What is the relationship between Spring, SpringBoot, and SpringCloud?
Yue ge here referred to the simple description of Liao Xuefeng’s official website:
Spring is a lightweight development framework of JavaEE, mainly focusing on IoC and AOP, integrating JDBC, ORM, MVC and other functions for easy development.
Spring Boot is based on Spring and provides building blocks out of the box to improve development efficiency.
So what is Spring Cloud?
As the name implies, Spring Cloud is related to Cloud. Cloud program actually refers to distributed application program, so Spring Cloud is a set of infrastructure to make distributed application programming more convenient and easier. Its core is the Spring framework, which makes use of automatic configuration of Spring Boot. Strive to achieve the most simplified distributed application development.
Spring Cloud consists of a large number of technical components, both those developed by the open source community and commercial companies, components that are constantly being updated, and components that will soon be decommissioned and no longer maintained.
Achievement: You have gone further and further from the road of basic knowledge, and completed the study of Web framework and application service class. Congratulations, you have mastered the basic composition of an application at this time.
You’re already well on your way to building projects and working efficiently with multi-threaded concurrency; Some stress relief can also be achieved through caching, and even such functions as seckilling; There is also the use of message-oriented middleware, which is also a way to improve application responsiveness and user experience. If you have access to microservices, you can learn about traffic limiting, distribution, load balancing, etc., and you won’t be able to learn about normal application features.
You can try to build an e-commerce project or an OA project to consolidate your knowledge.
With these connections and differences in mind, I’m here to present a classic tutorial for Java developers.
The book is derived from Manning’s classic “sketch book” series, known as “Three Sencers of Spring Development”, which is a classic book for Java developers to comprehensively master Spring framework and micro-service development.
-
Spring Field Edition 5 introduces the core features of Spring 5. The book is very thick, yue ge just sent one to the reader some time ago. Here we build a secure, database-backed Web application step by step. Along the way, you’ll also explore reactive programming, microservices, service discovery, RESTful apis, deployment, and master expert-level best practices, 666 really.
-
Based on the four core features of automatic configuration, startup dependence, command line interface and Actuator, Spring Boot Can be used in depth to build projects that meet your production needs.
-
Spring Microservices In Action teaches you how to build microservices-based applications using Java and the Spring platform. You’ll learn how to do microservice design as you build and deploy your first Spring Cloud application. And the book has a couple of real life examples of microservices-based models, which is great.
-
“In-depth understanding of Apache Dubbo and actual combat” about Dubbo, recommend a douban rating 7.0 book to everyone, this is currently yue Ge project in the use of technology, very welcome to communicate with you oh.
Optimize advanced classes
- In-depth understanding of the JVM virtual machine
- Java concurrency
- Java Performance Optimization
- (factory, abstract factory design pattern: create type, generators, prototype, singleton), structural (adapter, bridge, combination, decorator, appearance, the flyweight, agency), behavior type (chain of responsibility, command, interpreter, iterators, mediation, memos, observer, template method, status, strategy, visitors)
- Design principle: SOLID
- Source code analysis
These are the things you need to grow up to be a qualified Java programmer. Once you’ve learned that, you’ll be able to complete a Demo on your own and complete the development tasks assigned to you by the project team. Yes, it’s just finishing the development task, but we programmers have a similar philosophy to writing: finish first, then improve.
A requirement is thrown at you, and after you analyze it, all you have to do is write it out and complete the feature. Sometimes it is far from enough just to complete. For example, when we learn about multi-threading, we will take the example of the bank saving and depositing money to ensure that the banking system can be stable under the condition of multi-threading. So the problem comes, multithreading for a point of view, integration into your needs, you are not able to use it well? This is where Java concurrency comes in.
Also, if your project gets used by a lot of people and you suddenly find that the CPU is overloaded during peak usage; Or a request is returned very slowly, or even has a request timeout; Or maybe your Java application seems to be working fine, but the GC log shows a bunch of GCS in it, the log gets bigger and bigger, and one day the application dies…
When these problems arise, simply completing the code will not solve your confusion, it is necessary to improve your knowledge of the progression. For example, the rational use of multithreading, synchronization problem, CAP problem; If there are frequent reads and writes to the database, or even slow queries, it is necessary to master the appropriate database steps, such as index configuration, cache use; For some code optimization, see if you can reasonably use the design mode to participate, every day CRUD, can also play flowers.
To sum up, as an ambitious engineer, we should learn to view technology from a white-box perspective and ask more why questions in our daily work. As the saying goes, “Know what you are, know what you are.” You have to work hard to become a core member of the team, and being a core member means being able to take charge. The core team often has to be able to handle different technical areas and switch roles, such as architecture, core code development, urgent online problem solving, etc. (this quote from Geek Time).
I took a lot of Java-related classes during geek time, and many of the teachers emphasized one thing: there are no secrets under source code. So, when we grow to a certain level of technical ability, you need to learn the source code, not necessary, but you want to go further, this is to die knock.
The sense of accomplishment: It’s all in this part of the game. In the past, we were able to fulfill the requirements assigned by the leader without holding back the project.
When you’re done with this part, that’s cool. Performance optimization means that you can solve the problems encountered by the project team (some time ago, Yue Ge helped a friend to complete the process of reducing the CPU load from 100% to 50% on weekends, I experienced it myself, the sense of achievement may not only double, really).
If you can read source code, you can do more things and solve more problems. For example, there are many kinds of lists, such as ArrayList, LinkList and Vector, and you can figure out when to use which one.
If you can use design patterns flexibly, it is not very easy to refactor code. Isn’t it.
Challenge yourself to slowly refactor the projects you’ve written, or to get involved in higher-end projects to make the most of your value.
Book list recommendation: By this point, the list of recommended books is actually limited, I think everyone is familiar with it.
- “Java concurrent programming combat”, is a perfect Java concurrent reference manual. That’s a simple explanation, haha
- The Java Performance Guru’s Guide is a good book to learn how to write concurrent programs, but you also need to learn how to optimize Java performance. By learning, you can greatly improve performance testing. These include: Use tools in the JDK to collect performance data for Java applications, understand the pros and cons of the JIT compiler, tune the JVM garbage collector to minimize the impact on your program, learn how to manage heap memory and JVM native memory, and learn how to maximize the performance of Java threads and synchronization. And so on. (This paragraph is excerpted from Uncle Yako’s column “Wind in the Left Ear”).
- Read that book above, if still have power, so continue to go deep, “deep understanding Java virtual machine (3rd edition) : JVM advanced features and best practice” this book is Zhou Zhiming teacher wrote, has arrived at the 3rd edition, Jump elder brother had studied the 2nd edition, learned to go with the wind, read if understand, have to read several times.
- Design mode will not explain, learn Java you must learn object-oriented design mode, the classic of nature is “Design Mode”. If you find it a bit difficult, take a look at Head First Design Patterns.
- If you want to learn Java well, there’s no harm in reading Ideas for Java Programming. It’s really a book full of programming ideas. The books above give you a micro view of Java, and this book gives you a macro view of Java.
Architectural skills
- Architecture foundation: high performance, high availability, scalability, low cost, security, scale
- High-performance architecture pattern: database cluster (read/write separation, separate database and table); High-performance NoSQL, cache architecture; Single server High Performance Mode (RPC); High-performance Load Balancing
- High availability architecture: CAP theory, details; Clustering and staging; Remote live more security
- Extensible Architecture: The current focus is on microservices architecture
- Research into specific fields (e.g. Audio and video, instant messaging)
- How to do detailed design
With architecture skills, it’s about gradually moving from being the one who is directly feeding functionality to the one who is receiving requirements and analyzing, and even distributing functionality. It is responsible for the execution results of software engineering, including: iteration and release of software on time and with quality, agile response to requirements changes, prevention of software quality risks, and reduction of iteration maintenance costs. If we have a good chance, it can involve the birth of a new system; We may not have the opportunity to design a new system from zero to one, but we can refactor the architecture from 1.0 to 2.0.
Junior architects do this kind of thing, architecting based on the guidance of sound architectural design methodology, and technical specialists architecting based more on experience. You can do either, the point of participation is different, but the goal of achievement is the same.
To complete the architecture design of complex systems, including high performance, high availability, scalability, mass storage and other complex systems. For example, the second project yue Ge will talk about later, was to redevelop the chat server system of the company’s application based on Netty with the eldest brother from scratch. From use to use, the transformation and growth was super fast.
It takes more than 10 years to become a senior architect and is typically characterized by “creating new architectural patterns”. For example, the typical difference between senior architects and mid-level architects is “creativity”. Senior architects are able to create new architectural patterns and create new technology trends. (This part of Yue Ge is still working on)
Book list recommendation: this part of the yue elder brother is still exploring, if the recommendation is not good, we forgive
- Learning Architecture from Scratch: You Can Become an Architect by Doing What you Do is the first architecture book I read. It has its own methodology for business system architecture design, which is close to daily work. It is quite practical
- The Transformation of Enterprise IT Architecture: Alibaba’s Strategic Thought and Structure Combat: Alibaba’s Strategic Thought and Structure Combat
- Software Architecture Design: How to Integrate Technical Architecture and Business Architecture for Large Web Sites
- The Way to Clean Architecture
Other supplementary
- Development tools: IDEA, Eclipse, VS Code
- Version control tools: Git and SVN
- Docker, K8s
- Command Line Tools: Iterm2 (MacOS)
- Network testing tools: PostMan, PostWoman
- Network packet capture tool
- Continuous integration: Jenkins
- Linux: Common Commands for remote Connection to Linux (not required)
This part is related to non-technology, but it will definitely need to be used in the future project. It belongs to the magic weapon. For example, yue Ge said at the beginning, beginners do not start with a compiler, but the work needs, is certainly to choose their own compiler. At the beginning of learning Android, I used Eclipse to build an environment, which was very tedious. Later, Google launched Android Studio, which greatly reduced the tedious installation of the environment, allowing beginners to use it quickly and improving efficiency.
Android Studio is based on IDEA, and then I came to know IDEA, which is now indispensable in my work. IDEA mainly attracts me in several aspects, which greatly improves my efficiency. Many of you may still be comfortable with Eclipse, but it depends on your choice and habits, but for coding, it’s pretty much the same.
The compiler is just one thing, version control is a great tool for teamwork, and unless you’re working alone, it’s a must. As a back-end, yue Ge’s habit is to test their own first, and then provide front-end debugging, that needs to ensure the robustness of their code to a certain extent, the necessary unit testing, and even process testing are necessary.
If your company has an operations department, you don’t need to get your hands dirty when it comes to running servers. In fact, in the test environment you can use their own, why? Because you can quickly go to Linux to capture logs and check problems, and after solving the problem, you can also quickly update the version, saving the cost of communication with operation and maintenance. Ops is fine when he’s free, but if he’s busy, all you have left to do is wait, which is not worth the loss. You can also use automated tools, such as Jenkins, to deliver package versions.
Book list recommendation: here recommend these tools practical class, use good, development efficiency to improve several steps it.
- Git is now a must-have skill in development, whether you are working alone or in a team, you need version control to help, otherwise there will be the last version, the very last version of this kind of graduation project effect, haha.
- Bird brother belongs to the god of Linux, when it comes to Linux, no one knows bird brother?
- Watch the DevOps Practice Guide improve your operational and continuous integration capabilities
- The First Docker Book
- Docker and K8S are now more and more widely used, good use of the operation and maintenance work can also be a lot easier
Other books recommended: I did not involve in the interview part of the content, learn the above, consolidate the knowledge, the interview is basically OK, but sometimes in order to quickly master, but also have to surprise, here is a bit of interview related bar.
There are also improvements in other aspects of software programming, such as code specification, refactoring and so on.
- “Sword point Offer: Famous enterprise interviewers focus on typical programming questions (2nd edition)” Yue Ge around many partners, is to read this book knowledge consolidation, became the Offer harvester
- The Code Clean Way: A Programmer’s Career was recommended by my teachers over and over again when I was in college, and has been since I started working
- Refactoring: Improving the Design of Existing Code is a good game
- The Ariba Java Development Manual (version 2) was a hit when it came out, along with a plug-in for the compiler, did you install it?
- “Code out efficient: Java development Manual” this book from the influence of the world 2.5 million development engineers “Alibaba Java development manual”, the author settled, the Java protocol of the ins and outs of a comprehensive and thorough content sorting, with see no problem
Soft skills
- Ability to communicate
Soft skills, I’m going to separate them out.
The main reason is that programmers in many people’s minds are dull, not good at communication, and even ridiculed as having no girlfriend. However, we can not be influenced by these, and even need to work hard to break this cycle.
Yue elder brother did also see some partners tacitly, in addition to silently write code, usually rarely communicate with others, in addition to their own departments, other departments of small partners know not much, will not become one, so that their growth or will have limitations.
Yue Ge is a lively and cheerful person, is also the department and other departments of the most frequent communication that person, whether it is work or small talk. What are the benefits of this? If you are a large company, a whole system needs to involve multiple departments. If you do not know what the department next door does, you will be very passive and even keep asking the leader to coordinate, and the leader is also very busy. If it is a small company, and other departments of communication is nothing more than a few steps of things, and programmers in the group of girls, girls in other departments, in case it became (this jump brother here but have seen examples); Even if you talk to other departments, you can find out what they do, what their strengths are, what their difficulties are, what you can learn or learn from them, etc.
Yue elder brother experienced a few companies, is equipment manager all the time, this small position, let me get through a lot of boundaries, basically and the company’s people can become one, as to what harvest? In addition to the wife is already found, a lot of other things themselves or can go to contact, to learn, to obtain. For example, my database capability, in addition to writing code at ordinary times, is annoying our DBA, I empty him.
Appropriate front-end learning
- Html, CSS, JavaScript
- Front-end frameworks include Vue and React
This part is actually nothing good to talk about, we are mainly here is Java after the route of learning, the front end is a little bit.
The good thing about learning the front end, as I said earlier, is that you use tools to test your code; So with the front-end, write a test Demo, front-end request, than you use postman tools such as high efficiency, you can go through a whole process; Yue Ge knows Android. At the beginning, I wrote the front and back end of the writing, which was completed by my own Android Demo, which improved my efficiency and saved a lot of things in App development. I helped them build a framework for a lot of code.
SpringBoot + Vue combination to learn, usually their own practice hand, write a website to play, technical people happy, than this bar.
Recommended book list: This part of the recommended book list is a little too broad, haha.
- JavaScript Advanced Programming (3rd Edition) tO learn the front-end well, JavaScript is a must
- “Crazy HTML 5+CSS 3+JavaScript handout (2nd edition)” jump elder brother study is and this book, learned the basis to go further, right
- “Spring Boot+Vue full stack development actual combat” this book is written by Wang Song, I took several times to him, Vue framework is now very popular front frame, the author or our countrymen You Yuxi, proud
- React.js is also a classic framework. This is my blind spot, so I won’t recommend the list of books
Lead three projects and let me do it all by myself
This module was in the 1024 programmer festival, I recall the three most important projects I have experienced so many years, through the way of projects and talk to you about how I grew up!
In geek Time’s course “Beauty of Design Patterns”, the author Xiao Zhengge said: “There are four things that have a great influence on people’s life: opportunity, direction, ability and effort. I think they together determine whether you can” succeed “. I summed up my experience, which is very appropriate, that is, I met the opportunity, and then had the ability to improve, direction control, and continuous efforts of action.
Looking back on the three main projects I have worked on so far, I can see that they are all quite different when I categorize them carefully.
The first project I participated in (Android client development)
The first project was an Android App project that I joined the project team half a year after graduation. Before, the main business logic of the App project was written by JavaScript, which can be displayed by calling WebView on the Android side. Therefore, many processes were completed by students relying on JavaScript.
The first technology came along, and the leaders felt the need to be completely original, which allowed me to catch up with the era of refactoring. By refactoring, I mean migrating a business that had been running on JavaScript to Android native.
Fortunately, the original project do better at the beginning, also relatively complete document, do the mainstream business colleagues has been in the team, even if there is no business documents, themselves to sum up the question time to trouble him, but also want to answer, based on the business document coding is relatively easy.
Maybe god is destined to give me a chance to exercise. At the beginning of the reconstruction, my master, the head of Android terminal at that time, took a rest for more than a month due to health reasons, so he let me, as an apprentice, take over the complex and core business at that time, and got a chance to grow rapidly.
Seizing the first wave of opportunities, I completed the reconstruction of the first commercial project in my life. Because the project was huge, after months of overtime, it was a relief when it hit the shelves. The efforts of several months finally paid off, because the materials prepared in the early stage were sufficient and the obstacles in the business could be easily removed. This reconstruction greatly improved my ability as a beginner in the workplace.
Imagine how lucky it is for a student who has taught himself Android only in school to take over a project for the first time. Instead of repeatedly fixing bugs, he will be involved in major version changes. Can you believe I didn’t know anything about object orientation when I started out? The baptism of project is much more challenging than writing a Demo from a reference book in school.
A second project followed (a standalone chat server system)
The second project, after I joined the new company, was an instant messaging project.
Before I came to the company, there was an instant messenger program in use, which was written based on Flash, which did not satisfy the leaders and users in terms of response speed and stability. At that time, there was no Java colleague in the project team (a new graduate also had little contact with Java before recruitment), and the leaders wanted to find Java employees internally. I made a choice in a direction, so my second chance came at that moment.
When I joined the company, I was engaged in Android development. At that time, the project team had three Androids but no Java. The leader was asking for suggestions from everyone and asked if there was anyone who wanted to switch to Java.
We chose the Netty framework to do it, communicate with WebSocket, and work overtime for another desperate moment. (Working overtime is not terrible, meaningful overtime will not consider the matter of leaving work, only consider how much benefit can bring to themselves, how much harvest.) This time there was no documentation, just code, and fortunately, the person in charge of the framework was always on the project team.
The difficulty is that I need to understand the Flash code and then migrate it step by step. Starting from scratch this time, there is also a little regret, the whole framework is set up by the boss, my core task is within the planned time, complete migration of instant messaging function, as soon as possible to run the project, debugging online completion.
Perfect life always does not exist, so although it is a pity that I did not participate in the construction of the framework, it does not hinder my understanding of Netty. For this, I also paid for a column of Netty learning on Nuggets to deepen my understanding of Netty.
From the client to the back end, the biggest feeling for me is that I look at the project to see a wider range, before the client is only very one-sided to see the functions they are responsible for, the back end can see through the whole project, especially the business knowledge.
Of course, because the first time to participate in the backend, the first time online, to my head, the reality really put me education. There are still differences between back-end coding and client. Due to my lack of proficiency, the website was paralyzed and the business was down for an hour on the first night when the project was launched because I couldn’t bear the peak pressure. Fortunately, the boss helped me to solve the problem.
A serious online incident like this strikes me as the first step in completing the code at the back end, and the challenge of running it safely online is just beginning. This also makes me determined that while doing business, I need to continuously improve my own technology, such as frequent database reading and writing, the use of cache, cache avalanche, breakdown and so on.
An ongoing project
The third project, which went through iterative development of the first release, and refactoring of the second release (which is in progress). Received from other teams, no documentation, just rely on their own familiarity. This time, the challenge is even greater. There is no data, only App interface, reference interface to get familiar with the project one by one and reconstruct the project.
This is my 1.0 project, I spent two weeks to write 35+ interface, from development to testing, overtime to complete, I am tired. As I said before, DAILY CRUD can also play well. Under such an urgent situation, I finished the first version first, which did not drag down the project to some extent. Moreover, I recorded some points that need to be optimized and improved from the writing of the code. Because it was a pure outsourcing project that was taken over by someone else, it was much different from the later planning. Just like that, by a strange coincidence, we started the second iteration, which is the recent 1.0 to 2.0 upgrade.
The upgrade took a bloated application that had been tied together at the front and back ends and broke it down into a lightweight architecture; Some redundant databases were improved, a lot of table structure information was deleted and optimized, and some indexes were queried. The biggest change is the use of microservices for refactoring.
This whole process, in addition to the business code is ready-made, people are starting from scratch, another major opportunity in front of me, it would be a fool not to seize it. Many students in the group have no chance to participate in the project, I always meet good opportunities to improve my ability from time to time, or it is my luck.
After this experience, I’m not afraid to leave you with a bunch of code, or even no requirements documentation, to do continuous refactoring while keeping the project running. If you’re familiar with the business of refactoring and solidifying your Java programming skills during refactoring, you’ll at least be the one indispensable person on the project team who needs to be fired in a tough external environment, right?
Conclusion of project experience
As I said at the beginning, to sum up my brief project experience (and a few more trivial projects, which I will omit here), I met an opportunity. Every time an opportunity comes along, put it in front of you and it’s up to you to take it. At the beginning, I was an overlord, but after that, I kept improving my ability through my own learning and efforts. Then wait for the next wave of opportunities, or as you choose, to create another one.
These three experiences started with me seizing the opportunity, and then I made a choice. Of course, I also made efforts at ordinary times (it is necessary to read more, study more and practice more). However, yue elder brother’s personality is a little just now, and even sometimes feel that they do very well, my colleagues are not strong, I have the invincible feeling, resulting in my blinded eyes, still trying to improve.
How do you learn to improve your abilities
I have a lot of worries before I even start practicing
Java development, C language, or other language learning, is the need to practice; Well, you think of yourself as a skilled worker, and a mason has to be hammered out to build a house; Packers also experienced tens of thousands of times of packaging to do handy; Language organization is the same, the composition is accumulated word by word.
Programming is a technical job, not one that can be accomplished by physical exertion alone, so there is no other way to improve your ability than practice. Writing code is too low and far from enough. We still want to make ourselves better, so we need to do more
I often tell my friends that programming at the end of the day is not about writing code. Writing code is the easiest thing. Before writing the code, there are requirements analysis, technology selection (choose database, choose middleware, etc.), architecture design, process design, algorithm selection, these are completed, then you translate these into code is natural.
Here is just a final goal, for beginners, at the beginning can not be ambitious, also can not be intimidated by difficulties. I gave you the learning route up there. Do you understand? So, you now know, have not been scared, if not, then please carefully read “Java Core technology volume 1”, the above basic knowledge are first master, appear in the code practice on the compiler, line by line to write, understand him. If you have been knocked down, there is no matter behind, choose a better way out.
Wait until you learn the basics, then go to a small Demo, such as building a calculator, to test your work. Writing code is a step by step process. If you learn the basics first, you will gradually have a sense of accomplishment. Then the difficulties behind will be easily solved.
Active learning and passive learning
The following sections refer to geek Time’s Wind in the Left Ear column
Human learning is divided into two levels: passive learning and active learning
- Passive learning: such as listening, reading, audio-visual, presentation, the average retention rate of learning content is 5%, 10%, 20%, and 30%.
- Active learning: by discussing, practicing, and teaching others, the retention rate of passive learning increases from 5% to 50%, 75%, and 90%.
It makes sense that you can’t really learn by listening to someone else, or reading a book yourself, or having someone show you, because you’re being told, you’re listening, you’re looking at somebody else’s work.
Only when you start to think on your own, start to summarize and conclude on your own, start to talk to people, start to practice, and start to export, can you master real learning ability.
Learning is not only to know, but also to think and understand. In the process of learning, we do not want to know what something is on the surface, but to explore its inner nature and principle through the appearance. Real learning is never easy, but the more you know, the more questions you have, the more questions you have, the more you think, the more you think, the less you know, and the more you want to know. So the cycle is this kind of spiraling up and down.
In the process of learning, we have to constantly ask ourselves, what is the original intention of this technology? What kind of problem is it to solve? Why is that problem solved in this way? Why can’t we do it another way? Why can’t it be simpler? …
These questions will drive you like a detective to explore the facts and truths behind them, and to understand the inner nature, logic and principle of the whole thing bit by bit in constant thinking. Once you understand and master these essential things, you will find that the whole complex and changing world becomes simpler and simpler. It’s like you’ve got the final answer to all your questions.
Learning is about changing the way you think, the way you think, the rubbish and inefficient algorithms you were born with. In short, learning allows us to change ourselves, act and practice, reflect and improve, and thus grow.
Conclusion as a whole
Finally share with you, here I briefly summarize.
First, the question of both concerns, I chose Java, so what can I do in the future. In fact, Java can do a lot, but at the present stage, we can also see through the ranking of programming languages, Java is firmly in the top three, which means that it has a huge user group, so it represents a huge amount of Java learning materials on the network, a good community environment, excellent solutions, as well as a lot of framework learning. You don’t have to worry about finding the solution to the problem, finding the way to learn, is not finding, we still have the planet.
Second is how to learn, I listed the Java learning route is also based on the back-end learning route, after the supplement, the advanced part is also written.
Third, is the learning method, how to learn. Honestly, coding has always been a matter of learning and self-discipline. Many people work hard in school and can get a good offer when they enroll in school. Some fail to stick to it in school and may give up this road after graduation. Some are very interested in the beginning, but later found that they are not suitable for, or choose to change major in school, or out of the product, to implement, etc., is also a change of industry. So, there are two outcomes, Win or Go Home in playoff basketball terms.
To judge whether you have the willpower to learn down, you can refer to my suggestions above, of course, if friends have better suggestions, leave a message to me, let us communicate together.
Don’t worry about not being able to code without doing anything. If you don’t start practicing, how do you know if you’re going to fit in, if you like it, if you’re going to take this path, right? In fact, when I was a freshman, I thought about giving up when I got into C language, especially when it came to Pointers and linked lists. However, I finally gave up the idea. If I don’t write code, I will not take the college entrance exam for nothing. Let’s be realistic. The ones who can change majors are all girls in the class, who are so obsessed with their grades that the places are all taken. So what are you gonna do? Just go ahead.
In this way, until graduation, I looked at the book in the laboratory, knocking on the code, we have two months of summer vacation, my summer vacation will only give yourself a month, another month is spent in the school, is to let oneself can live up to their parents pay. Later, it’s just a matter of constant effort, growth, and a certain amount of opportunity.
Reference content:
- Geek Time left Ear wind, design patterns, Java topics, architecture topics and more
- Liao Xuefeng Java tutorial: www.liaoxuefeng.com/wiki/125259…
- Zhihu some information about Java