senior Java SE developer. I'm looking for a list of materials to reinforce my current knowledge and learn additional topics to prepare for a senior-level assessment. Does anyone have a list of materials or questions typically required for a senior developer?
Multithreading, JVM, GC and IO in Java. You should also have strong knowledges about how SQL dbs (for example postgresql) internally works. Architecture and microservice patterns. One of the main criteria is also the horizon of knowledge, so you may not know details how each nosql db or any other (except spring) Java framework works, but you should know superficially about a large number of technologies and in which case to choose
The "senior java se" sounds quite strange to me. Can you elaborate more about "SE" part? What kind of project or tech stack do you aim for?
I want to pass a senior-level interview for a Java stack more easily. Currently, I am trying to find a list of questions or books/materials that I need to understand. I also want to gain more knowledge to help me make better solutions in a senior position. My ask is only to obtain materials for continuous learning.
Okay, here's what makes no sense to me: > senior Java SE developer *SE* part. Why do you specifically say SE ??? What kind of projects do you want to work on? I'm asking because usually "SE" part is just one of the required fundamental knowledge basis for java developers, but it's not a major factor in most cases. For example for me specifically, all those SE topics Dmitry mentioned above - multithreading, jvm, GC, io - are not more than 10% of my job. Other ones - SQL dbs, microservices, nosql, frameworks - are specialized for classic java *microservices backend* developer. I mean, there are specializations, and ~90% of the required experience in any specialization is NOT java SE, it's something else. And that's why I'm asking to clarify. Because depending on what you want to work on, you may need different kind of knowledge. For example, if you're going to work on a bigdata project, you'll need a lot more than multithreading, jvm, gc, etc. Or, for example, if you want to work on some UI project (like plugins for intellij for example), you don't need all those microservices and databases, you'll just waste a lot of time on things that will be irrelevant for interview and your actual work. Literally half of the books Dmitry suggested (very good recommendation by the way, but it's specialized for classic backend) will be irrelevant for a java GUI app developer. Here's a real life example. My friend attended an interview for a project where they develop some product that is working either in cars or some vehicles, and it's main activity is to do something with maps (geographical I mean) and routes. Microservices, databases made no any difference for this position. What was important - a solid knowledge of graphs and algorithms. And it will be the opposite for a typical backend dev - people will care much more about your experience with databases rather than graphs and algorithms. Even "java performance" is less important for typical backend position. So that's why I'm asking more clarifications of what kind of a job you're trying to get. To be optimal about the recommendations
I have used software engineer as common name for person who deal with software design and development. Usual ot stuff. My asking about classic java developer which works with spring boot + sql, microservices (As u said before) P.S for my company software engineer title used for each developer(frontend or backend)
Also i'd like to found some open source project which implemented with best practices/clean code with gof patterns. I'd like to read how other people implement good solutions... Thanks!
- observability. You need to learn how microservices are being monitored, and what needs to be done from developer's side to make it happen. If you are not solid with k8s and helm, setting eveyrything up on your own will be hard. But it's worth it. Being able to run some test and see traces and metrics on a dashboard is a very important experience. So if you can manage the setup of monitoring tools like zipkin/jaeger, otlp, graphana, db for metrics, etc, it's worth it. But its challenging, and you may end up wasting too much time on setup. So be careful. But at least learn the theoretical part, and practical part of how to create traces and metrics in the code. And then watch *videos* (yes, specifically videos) how those metrics and traces will appear on the monitoring tools. But if you manage to set everything up, try to overload the system, or make an artificial bottleneck somewhere, and see how that will become visible on the traces and metrics. - some cloud (aws, gcp or azure). Only IF you are sure that the project+position you're targeting at deploy in the cloud. Otherwise, it will a waste of time. Learn some basics, and try it out in practice. Best option - create k8s cluster in the cloud and deploy your dummy microservices there. Try to work with two most typical cloud services for app developers - message queue and SQL db. Make two of your microservices send messages via queue, and make them connect to that cloud DB. Learn how to securely pass DB credentials down to application without hardcoding it anywhere in the committed files.
Sorry for huge delay, I was very busy last days. Got it. Then in addition to a great books suggestion that Dmitry has already recommended, I can add few more things, which I recommended many times already: - it's crucial for a backend dev to be good with databases. And I mean not tiny exotic features each db has, but rather being good with data modeling for that DB and knowing good practices. My recommendation - learn very thoroughly one classic SQL db, and one NoSQL one. My personal recommendtaion - postgres for sql, and mongodb for nosql, plus get just a little bit familiar with cassandra (just to have a grasp of what it can do and its application). With regards to importance and time allocation, I would recommend it like this 60% - postgres, 35% - mongo, 5% - cassandra (or something else that is NoSQL and NOT mongodb or couchdb, probably even something like neo4j). - caching. For weird reason, a lot of engineers don't do it properly. However, it's a N1 mechanism for huuuuge performance boost. The only caveat here is that specifically for interviews it's more important to not have some theoretical knowledge about caching, but rather have successful use-cases from your experience where you improved performance (or reduced costs) with caching. Such stories can make you "shine" on interviews and position you as a unique candidate. But even if you don't have such use cases from your practice, it's still worth to devote some time to learning theoretical part. My recommendation is to concentrate on Redis, it's the most popular choice these days. In some scenarios, redis could even be used as a primary DB for some data, so learning it will give you an advantage for interviews. I would say it's not worth to learn it in depth. I recommend to learn all data structures it has, and main operations for those data strucutres. Then learn redis patterns. ————— LESS IMPORTANT —————————— - Basics of kubernetes and helm. This may sound weird for developer at first, but having at least basic knowledge and knowing minimal opeartions is very important. Especially for senior position. If you specifically mention microservices in your desired senior position, then microservices are practically always going to be deployed to kubernetes. And these days it's usually helm. You don't have to learn the whole devops for sure, but those parts that are related to deploying, running and troubleshooting your microservices in the cluster are vital. And for this topic I highly recommend you not to just read/watch videos, but also get your hands dirty. Build few dummy microservices that talk to each other, have some configuration options, do some bogus cpu and memory work, and deploy them. And create a load-test for them too. The end goal is to not just write java code, but be able to make it run properly in the target environment. So run the load-test and play around with container cpu/mem config, heap size, make it fail with java heap OOM, configure startup and liveness probes and make sure that they work properly, make it autoscale properly when you increase load, and try to find sweet spot of cpu/mem so you minimize the costs and still your microservices are rock solid under load. All this is a daily job of a senior developer of microservices.
I can give you this project as an example, but I'm not 100% sure about best practices and gof patterns. https://github.com/speech4j This is built by people I worked with and I'm fully confident in their skills. Code quality there should be good. What I'm not sure about is the architectural decisions, and patterns. But at least, it's worth to explore it as a spring-boot microservices project with good code quality.
Thank you for the widly described answer!
Обсуждают сегодня