【Java】We are living in a Continuous World. Continuous Integration, Continuous Deployment, Continuous Learning, and so on.
我们正生活在一个持续的世界中。持续集成、持续部署、持续学习,等等。
Machines are learning faster and they are more consistent than us. They almost never fail. But we humans cannot be as consistent as machines. We tend to be lethargic and we have hiccups at times. But that’s perfectly fine and that’s the human nature
人和机器竞争上,人往往会处于劣势。人会走神,有时候还会昏昏欲睡。
Sometimes we like to start learning new technologies but we may fail due to one of the following reasons
1. we don’t know where to start
- 不知道从哪儿开始
2. we think about too many things and make it complicated
- 想太多,做太少
3. we lack the patience in the middle of something
- 半途而废,缺乏耐心
4. we cannot balance our official work and learning
- 无法在工作和学习中找到自己的平常
This time I have spent a couple of weeks gathering the requirements for myself and then I have set clear deadlines for it.
我花了几周时间为自己收集要求,然后为它设定了明确的最后期限。
I have made a clear roadmap using the collected requirements and I am happy that I have successfully completed it hence I am writing an article on that to help my fellow peers.
我利用收集到的需求制定了一个清晰的路线图,我很高兴我已经成功地完成了它,因此我写了一篇文章来帮助我的同龄人。
Many firms are now undergoing digital transformation using leading technologies and hence it is the perfect time to update yourself.
许多公司现在正在利用领先的技术进行数字化转型,因此现在是更新自己的最佳时机。
Technology Stack
- AWS / Cloud certs
- Java8
- Spring boot-microservices
SpringBoot 微服务
- Other full-stack technologies
其他全栈技术
- Data structs and Algorithms
数据结构和算法
- Practice in Hacker Rank and Leetcode
LeetCode 上面做些有难度的练习
- Design Patterns and Design Principles
设计模式和设计原则
- System Design
系统设计
- reactjs-redux,/Angular
- Portfolios
- Methodologies
- Other Programming Languages
Now let’s go into detail one by one
1. AWS / Cloud certs
AWS认证。
Why cloud-first?
I have done 2 AWS certifications in 6 months namely
我在6个月内完成了2个AWS认证
a. AWS Certified Developer Associate
a. AWS认证开发者助理
b. AWS Certified Solutions Architect Associate
b. AWS认证解决方案架构师助理
They cover a wide range of technological components like a Load balancer, API gateway, Serverless Computing, Docker Containers and Orchestration, ElasticSearch Indexing, Asynchronous Queues and Message Streaming, Storage Models, NoSQL DB, Relational DB, Caching, and so on…
它们涵盖了广泛的技术组件,如负载平衡器、API网关、无服务器计算、Docker容器和协调、ElasticSearch索引、异步队列和消息流、存储模型、NoSQL数据库、关系型数据库、缓存等等。
Hence when you do this first, you get a grip on the full-stack technologies and everything that follows is easier
因此,当你先做这个,你就能掌握全栈技术,接下来的一切都会更容易。
2. Java 8
It is good to have a deep understanding of Java8 concepts like Functional Programming (Lambdas), Functional Interfaces, Streams API, and so on.
对Java8的概念有深刻的理解是非常重要的,比如功能编程(Lambdas)、功能接口、流API等等。
But the most important thing is to make sure our understanding of Java is 100% perfect and we must be strong in Java Collections, Concurrency, and the OOPS Concepts
但最重要的是要确保我们对Java的理解是100%完美的,我们必须在Java集合、并发和OOPS概念方面有很强的实力。
Whatever the technology stack and frameworks we use, Java is the backbone of the system
无论我们使用何种技术栈和框架,Java都是系统的核心。
3. Spring boot-microservices
Microservices architecture has gained immense popularity in the industry due to many of the following benefits
微服务架构在业界获得了巨大的人气,通常包含下面的好处
- Highly scalable
- 高度可扩展性
- Quicker Development and Deployment
- 更快的开发和部署
- Cloud Native
- 云原生
- Polyglot programming languages
- 多语种编程语言
- Every service can have different types of databases
每个服务都可以有不同类型的数据库
and so on.
Spring Boot is the framework to build microservices in Java. It is built on top of the Spring Framework and works seamlessly with Hibernate ORM framework.
Spring Boot是在Java中构建微服务的框架。它建立在Spring框架之上,与Hibernate ORM框架无缝协作。
So it is very important to learn the Spring Boot framework and understand the Microservices architecture.
因此,学习Spring Boot框架并理解微服务架构是非常重要的。
4. Docker Containers and Orchestration
Docker容器和编排
Now most organizations are using Docker Containers to deploy the Microservices into the Cloud
现在很多项目使用Docker容器部署微服务的项目,并且通常部署在云服务器。
Docker Containers provide Virtualization. They are easy to scale and are deployed to the cloud. They are cloud-native.
Docker 容器提供了虚拟化技术,它们易于扩展并被部署到云中。它们是云原生的。
So what is Container Orchestration?
那么,什么是容器编排?
When we develop microservices, we will be having a lot of services running in Docker Containers. Well, once we have so many Docker containers running in our system we need to monitor them. This is where the orchestration comes into the picture. The most popular one is Kubernetes.
当我们开发微服务时,我们将有很多服务在Docker容器中运行。
那么,一旦我们的系统中运行了这么多的Docker容器,我们就需要监控它们。这就是容器编排的作用。最流行的是Kubernetes。
So, you need to learn both Docker and Kubernetes.
所以,你需要同时学习Docker和Kubernetes。
5. Data structs and Algorithms
Once you are done with all the above things, you will have great confidence going forward. So this is the right time to start up with data structures and algorithms.
一旦你完成了上述所有事情,你将有很大的信心继续前进。因此,现在是开始学习数据结构和算法的正确时机。
Before we go in, let’s answer the below question
进入下一步之前,我们先回答下面的问题
We are not using Data Structures and Algorithms in my everyday programming. So why are interviewers asking me these and why should I learn?
在我的日常编程中,我们没有使用数据结构和算法。那么,为什么面试官要问我这些,为什么我应该学习
Well. Only when you understand how they work, you can use them efficiently in your programs. You should know when to use an ArrayList and when to use a LinkedList. You should know the time and space complexities of the commonly used data structures. Understanding these things will make you a very good programmer and also helps to crack the big interviews.
好吧。只有当你了解它们是如何工作的,你才能在你的程序中有效地使用它们。你应该知道何时使用ArrayList,何时使用LinkedList。你应该知道常用的数据结构的时间和空间的复杂性。了解这些东西将使你成为一个非常好的程序员,也有助于突破高难度面试。
We can Divide this topic further into a few sections
我们可以把这个话题进一步分为几个部分
- Linear Data Structures (Arrays, List, HashMap, Stack, and Queue)
- 线性数据结构(Arrays, List, HashMap, Stack, and Queue)。
- Non-linear Data Structures (Binary Trees, AVL Trees, Heap, Graphs, Tries, etc)
- 非线性数据结构(二进制树、AVL树、堆、图、试等)。
- From my experience, only Binary Trees and Binary Search Trees are enough to prepare. Other data structures are a little complicated and are only asked in top-notch companies like Amazon, Apple, Google, Facebook, and Microsoft
根据我的经验,只有二进制树和二进制搜索树是细心准备的。其他的数据结构比较复杂,只有像亚马逊、苹果、谷歌、Facebook和微软这样的一流公司才会问。
- Sorting Algorithms (Quick Sort, Merge Sort, Bubble Sort, Bucket Sort, Counting Sort, etc)
排序算法(快速排序、归并排序、冒泡排序、桶排序、计数排序等等) - Search Algorithms (Linear Search, Binary Search, Ternary Search, Exponential Search, etc)
搜索算法(线性搜索、二元搜索、三元搜索、指数搜索等)。 - String Manipulations (String Manipulations and String Operations)
字符串操作(字符串操作和字符串操作)。
It is very important to have a strong understanding and hands-on with this topic. So, take your own time and do this. This is the important component of any Product Company Interview.
对这一主题有强烈的理解和亲身体验是非常重要的。因此,请你自己花时间做这件事。这是任何公司面试的重要组成部分。
Arrays and Strings are the most asked and discussed data structures in Online Tests and Interviews.
数组和字符串是在线测试和面试中被问及和讨论最多的数据结构。
6. Hackerrank, LeetCode
This is the most important component of any interview. Once you are well versed with Data Structures and Algorithms, a lot of practice is required in these 2 platforms
这是任何面试中最重要的组成部分。一旦你熟练掌握了数据结构和算法,就需要在这两个平台上进行大量的练习。
Hackerank is good for beginners. On this platform, you can earn badges and also take up free certificates once you complete the timed tests. Most of the companies use hacker rank platform for testing the candidates on round 1
Hackerank适合初学者。在这个平台上,一旦你完成计时测试,你可以获得徽章,也可以获得免费证书。大多数公司使用黑客等级平台对候选人进行第一轮测试。
Leetcode is a little more advanced than Hackerrank. Leetcode provides Time and Memory consumed for our programming solution and also compares us with our peers with percentile scores.
Leetcode比Hackerrank更先进一点。Leetcode为我们的编程方案提供了时间和内存消耗,还用百分制分数将我们与同行进行了比较。
This is a very important aspect for us to get better. We can also compare our solution with others and optimize it
这些反馈对于我们的提升来说非常重要,可以让我们变得更好,我们可以对比自己的解决方案和其他人的方案,从中不断弥补自缺陷。
We always have to keep practicing these. Leetcode itself has around 2000 problems. Top companies like Facebook, Google, Microsoft, etc do ask LeetCode problems in their interviews.
我们总是要不断地练习这些。Leetcode本身有大约2000个问题。像Facebook、谷歌、微软等顶级公司在面试时都会问LeetCode问题。
7. Design patterns and Design principles
The next step must be get well-versed in all the design patterns and also the Design principles. Interviewers will definitely test your design skills based on different scenarios. Understand all the 23 design patterns and prepare an example scenario using UML diagrams.
下一步必须精通所有的设计模式和设计原则。面试官肯定会根据不同的场景来测试你的设计技能。了解所有23种设计模式,并准备一个使用UML图的例子场景。
One another important concept is the SOLID principle and Domain Driven Design (DDD)
另一个重要的概念是SOLID原则和领域驱动设计(DDD)。
8. System Design
This is not asked in most of the interviews but I strongly recommend it to understand the system better. This will be really helpful if you want to move into an architect role from being a developer.
这在大多数的面试中都没有被问到,但我强烈建议你去了解一下这个系统。如果你想从一个开发者转到一个架构师的角色,这将是非常有帮助的。
A Developer is expected to understand the System and its components. You are expected to design an overall system given a requirement. For eg: design a chat application, design a meeting room booking system, design a parking lot, etc
开发人员应该了解系统和它的组成部分。你被期望设计一个给定需求的整体系统。例如:设计一个聊天应用程序,设计一个会议室预订系统,设计一个停车场,等等。
There are a lot of videos on youtube that talk about System Design
YouTube上有很多关于系统设计的视频
9. reactjs-redux/ angular
Finally, if you want to be a full-stack developer then definitely you must learn either React or Angular. With this, you have come full circle.
最后,如果你想成为一个全栈开发者,那么你肯定要学习React或Angular。这样一来,你就走完了一圈。
Full Stack Developer role is the hottest in the market and is preferred more than backend engineers. The frontend is again a whole big area and hence being an expert in both frontend and backend is super difficult.
全栈开发人员的角色是市场上最热门的,比后端工程师更受欢迎。前端又是一个完整的大领域,因此成为前端和后端的专家是超级困难的。
Who does not want a developer who can work on both the front end and back end?
谁不想要一个能在前端和后端工作的开发人员呢?
But if you want to be a full-stack developer, you can only concentrate on reactjs/ Angular, Java8, Microservices, and Cloud. Most of the backend technologies are not expected from you as it is practically impossible.
但如果你想成为一个全栈开发者,你只能专注于reactjs/ Angular、Java8、微服务和云。大多数后端技术是不指望你的,因为这实际上是不可能的。
10. Portfolios
Another aspect for any developer is to maintain online portfolios to showcase his/her work. There are many platforms as follows
这一段的意思是尝试去各种开放平台上面尝试代码维护提出改进建议,展示自己。
1. Github
Always do hands-on when learning new things. Once done, immediately create a repository and push the code. Write a detailed read-me file for better understanding. The following is my git hub repo
在学习新事物时,一定要动手操作。一旦完成,立即创建一个仓库并推送代码。写一个详细的read-me文件,以便更好地理解。
https://github.com/dineschandgr?tab=repositories
2. Hackerrank, Leetcode
This profile shows the problems solved by us and also displays badges and certificates if any. Just keep solving problems actively
该简介显示了我们所解决的问题,如果有的话,还显示了徽章和证书。
3. Linkedin
The most important portfolio among all, is where employers search and filter candidates. Update all the skills here and add the certifications.
这是最重要的投资组合,是雇主搜索和筛选候选人的地方。在这里更新所有的技能并添加证书。
“Linkedin is the new resume”
Include links to all your portfolios on LinkedIn
在LinkedIn上包括你所有作品集的链接
11. Methodologies
Learn about the following things also and understand their concepts.
学习下面的事物并且理解概念。
- Maven build
Maven构建
- Git
- TDD (Test Driven Development)
TDD (测试驱动开发)
- BDD (Behavioral Driven Development)
BDD (行为驱动开发)
- DDD (Domain Driven Design)
DDD (领域驱动设计)
- Agile
敏捷开发
12. Other Programming Languages
Nowadays companies expect candidates to know a couple of other languages other than Java. But this is optional if you have a good experience in all the above sections
现在的公司希望应聘者懂得除Java以外的其他几门语言。但是,如果你在上述所有部分都有良好的经验,这也是可选的。
If you wish to be a polyglot programmer, then 3 important technologies to learn are
如果你想成为一个多语言程序员,那么需要学习的3项重要技术是
- Python
- Node
- Golang
Please do not get panic after reading too much information from the article. This is an overall roadmap. Start small. Just one step at a time at your own pace. It may take time but that is fine because you are getting better every day. You are your own competitor.
请不要在阅读了文章中过多的信息后感到恐慌。这只是一个总体路线图。从小事做起。按照你自己的节奏,一次只走一步。这可能需要时间,但没关系,因为你每天都在变得更好。你是你自己的竞争者。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。