路线图 - 高级 Java 开发人员 2024
高级 Java 开发人员的角色在过去几年中发生了重大变化。随着技术以前所未有的速度发展,高级工程师的职责、技能和期望也随之演变,以适应行业需求。
对于初级或中级开发人员来说,通常很难说清楚要如何才能成为高级开发人员。我花了几天时间,学习了高级 Java 开发人员应具备的所有技能。
- 通用 IT 知识- 高级开发人员不仅必须对 Java 和 Spring 框架有深入的了解,还必须对整个 IT 领域有深入的了解:典型的设计模式、数据传输协议、数据编码格式、消息代理、监控工具等。这还包括基本算法、计算机知识甚至数学。
- 核心 Java - 你需要深入理解 Java 的所有核心特性。不仅要了解何时使用某个特性,还要了解何时不使用:)
- Java 框架和库- 有很多不同的库,但我选择了一些事实上的行业领导者:Spring Boot、Hibernate、JUnit 等
- JVM 的工作原理——对于高级开发人员来说,了解编程语言是不够的。了解程序如何转化为计算机命令的原理,可以为工程师带来丰富的机会。
- 互联网是如何运作的——我想说,99% 的 Java 后端都在互联网/内联网环境中运行。任何经验丰富的开发人员都不能忽视互联网组织的基本知识。
- 团队合作——嗯,这的确是一项“锦上添花”的技能。但坦白说,软技能往往比硬技能更重要。初级开发人员,千万不要忽视这些。
- 用户界面设计模式- 可选技能,但在与任何类型的 UI(网站、移动应用程序等)集成时,它们会变得非常方便
请给我反馈,您认为我遗漏了哪些技能?
General IT knowledge
Application maintenance
Logging
Async vs sync logging
What information must be included into logging message
ELK
Application Monitoring
Health check probes
Crash dump analysis
Tracing based on service-mesh
Application Design Patterns
Monolithic architecture
Pros and cons of monolithic architecture vs mircoservices
Event-driven Architecture
Microservices Architecture
Service mesh
Service registry
Transactional outbox
Remote procedure invocation
Messaging pattern
Circuit Breaker
Saga pattern
How OSs work in General
How random access memory works
Understanding process concept
Understanding thread concept
Understand stack memory concept
File System
Linux basic commands
Linux command: grep
Linux command: ls
Linux command: tail
Linux command: cat
Linux command: chmod
Working with data
Data Formats
Fixed-length format
Protocol Buffers
JSON
Yaml
Binary Serialization
Xml
CSV
Web Services
Authentication
OpenID
SAML
JWT
OAuth 2.0
Internet Protocols
REST
SOAP
FTP
Databases
Relational Databases
PostgreSQL
SQL migrations
MySQL
Oracle
SQL commands: INSERT, UPDATE, DELETE, SELECT
Using Inner Joins
User Left Joins
Sequence
Stored Procedure
Understanding SQL plan
Single-Column Index
Multi-column Index
Understanding index direction
Primary Index
Cluster index
Database partitioning
Auto-increment values
SQL Transactions
Transaction Isolation levels
Aggregate Functions
Database Normalization
Database replication
Database Sharding
NoSQL Databases
Column-oriented databases
Math for Programmers
Set Theory
Category theory
Algebra
Predicate
Commutativity
Distributivity
Associativity
Mathematical Logic
Geometry
Cartesian Coordinate System
Application lifecycle
Version Control Systems
Git
Git commit
Git tagging
Git stash
Git stage
Gitflow
Git Branching
Git merge
Git rebase
Git squash
Remote vs local repository
Git fetch
Git push
Git pull
.gitignore
Git limitations
Java build systems
Maven
Gradle
Package dependency
Dependency scope
Package managers
Nexus
Java application versioning
Containers
Docker
Docker Installation and Setup
Docker Images
Docker Containers
Container Networking
Docker volumes
Docker compose
Docker registry
Docker container orchestration
Docker Security
Docker Monitoring and Logging
Kubernetes
Cluster Setup and Configuration
Containerization
Pod Management
Deployment
Scaling
Service and networking
Persistent Storage
Monitoring and Logging
Security and Access Control
Troubleshooting and Debugging
Cluster Maintenance and Upgrades
OpenShift
Code Quality
SOLID
Code testing
Unit Testing
Functional Testing
Integration Testing
Performance Testing
DRY
Application maintainability principles
KISS
Algorithms
Binary Search
Depth-first search algorithm
Breadth-first algorithm
Comparison metrics
Time complexity notations
Worst time complexity
Average time complexity
Memory consumption of algorithm
Stable sorting
Quicksort
Heapsort
Counting sort
Core Java
Java syntax
Keywords
Control Flow
Arrays
Packages and Imports
Java I/O
Strings and Regular Expressions
Object-oriented programming
Interfaces vs abstract classes
Exceptions
Runtime handing of exceptions
Fatal errors
Identifiers
Literals
Operators
Types
Generic types
Type erasure
Wildcards in generics
Heap pollution
Primitive types
Boxing and unboxing
Math number vs programming numbers
Number overflow
Number precision
Decimal vs double
Errors when working with floating numbers
Rounding of floating numbers
Fair rounding problem
Primitive type memory size
Reference types
Anonymous classes
Raw types
Casting conversion
Widening primitive conversion
Widening and narrowing primitive conve
Narrowing primitive conversion
Boxing conversion
Unboxing conversion
Widening Reference Conversion
Narrowing Reference Conversion
Variables
final variables
Understanding the restrictions on using final variables in lambda expressions
Capturing final variables in lambda expressions
Optimizations achieved through final variables by the Java compiler
Using final variables in performance-critical code sections
Thread safety of final variables
Variable Naming Conventions
Variable Memory and Stack/Heap Allocation
Understanding the memory allocation for variables in the stack and heap
Knowing the difference between stack-based and heap-based variables
Managing memory usage and avoiding memory leaks
Java collections
List
ArrayList
LinkedList
Queue
BlockingQueue
PriorityQueue
ArrayDeque
Set
EnumSet
HashSet
Map
HashMap
WeakHashMap
ConcurrentHashMap
TreeMap
Array
Common pitfalls with collections
How to evade ConcurrentModificationException
Correct Equals and HashCode implementation
Adding mutable object to hash-based collection
Streams
Performance of streams vs collections
Lazy evaluation in Streams
Concurrency
Understanding what is Process
Understanding what is Thread
What happens when thread sleeps
What is thread interrup
Interrupt status flag
What is thread stack
ThreadLocal variables
Memory Model
Happens-before principle
Atomicity
Race condition
Update visibility
Operations re-ordering
volatile keyword
Immutable objects
Synchronization Patterns
Understanding the monitor locking
Synchronized keyword
Lock
ReadWriteLock
ReentrantLock
Condition interface
Reentrancy
Common multhi-thread problems
Deadlock
Livelock
Starvation
Executors
ThreadPool
ForkJoinPool
Java Frameworks and Libraries
Spring Boot
Spring Data JPA
Application properties
Application profile
Bean
Bean lifecycle
InitializingBean
Common spring annotations
@Prototype
@Configuration
@ConfigurationProperties
@Autowire
@Service
@Component
@Transaction
Apache Commons
Log4j
Mockito
JUnit
Apache Tomcat
Java ORMs
Hibernate
MyBatis
Jooq
How JVM works
Java memory organization
Heap memory
Memory Analysis and Profiling
Memory optimization technics
Memory optimization: object reuse
Memory optimization: minimize object creation
Memory optimization: usage of local variables
Memory optimization: do not concatenate strings in loops
Memory optimization: weak references
Memory optimization: proper resource disposal
JVM flags to control heap memory sizes
Structure of JVM heap memory
Eden Space
Survivor Spaces
Tenured Generation
Permanent Generation
Method Area
Stack memory
Understanding Stack pointer
Understanding Stack Frame
Understanding Stack size
Usage of stack during method invocation
Usage of stack and recursive calls
Tail chain optimization
Garbage collection
Object reference
WeakReference
Memory leak detection
Object finalization
Tuning garbage collection
GC root
Mark and sweep algorithm
Class loaders
Class Loader Hierachy
Custom Class Loading
Class Loading Policies
Class Loader Isolation
Dynamic Class Loading
Execution engine
JIT compiler
Intermediate Code Generator
Code Optimizer
Dead code elimination
Constant folding and propagation
Method inlining
Escape analysis
Target Code Generator
JIT profiler
Interpreter
Native Method Interface
Common JVM errors
ClassNotFoundExcecption
NoClassDefFoundError
OutOfMemoryError
StackOverflowError
How the Internet works
Transport protocols
TCP / IP model
IP Address
Network port
Local port
Remote port
MAC Address
Network route
Proxy mechanism
Reverse proxy
Forward proxy
DNS
DNS resolve mechanism
DNS alias
Basics of HTML
Browsers
Browser Caching
URL
Request compression
Understanding the Cookie
Application protocols
HTTP protocol
GET request
POST request
PUT request
HEAD request
DELETE request
HTTP header
Application content header
Cookie
Timeout limitation
Resource usage
Athentication mechanisms
Basic Authentication
Token Authentication
Long polling
HTTPS protocol
SSL/TLS
Digital signature
Certificate chain
mTLS
SSE
GraphQL
WebSockets
HTTP/2 protocol
Internet Security
Same-origin security policy
Cross-origin resource sharing (CORS)
Web Application Security Threats
Arbitrary file inclusion
Cross-site request forgery
Cross-site scripting
Path disclosure
SQL Injection
Denial-of-service atack
Teamwork
Collaboration
Conflict resolution
Persuading
Coordinating
Creative Thinking
Active listening
Responsibility
Communication skills
Goal Setting
Honesty
Give Feedback
Empathy
User Interface Disign Patterns
Model-View-View-Model
Model-View-Presenter
Model-View-Controller