I am developing a web application using the Java programming language over the previous 7 years. I got experience in various java frameworks specially Spring, Hibernate, ... etc. I worked also with Python/Django stack and I worked with some big data projects including Apache Kafka and Apache Spark.
But, when it comes to that old java questions I found myself either not remembering at all or not sure what is the correct answer.
The main reason is that during my development careers I did not touch much of these basics.
For example I do not remember when was the last time I used nested classes :) or needed to write multi-threaded code.
Most of my work was web development, writing business, CRUD operations,.. etc.
And when I got a change to write code for a large system we used Apache Spark where it removed much of the hassle of managing concurrency and distribution :).
Recently I tried to apply to a software developer at cross over but unfortunately, I did not pass the basic test :(
What should I do in this case?
I recently faced this problem, when I was asked to write a simple String program in a text editor like notepad. I knew the logic but the ease of using an IDE like eclipse, where you don't have to remember the imports/packages, I failed to answer the question.
The solution is practice, practice and practice. Go for good tutorial videos, blogs and try to write it down somewhere. Write a story on hashnode, which will help you out with your last minute preparations. Several sites are available for technical quizzes with different difficulty levels, you can revise with that.
I guess many will caption their books when they learned in college.
Personally I admired as developer by using video tutorials, blogs...
Still I would caption a good book "OOPS in C++" which I used in my college days.
Agree with Siddarthan. It's very easy to lose touch if you don't work with the said concepts regularly. It's normal. My advice is to go through the concepts again (probably buy an interesting book like Head First Java) and practise them. It's useful not only for interviews, but also for your day to day development tasks.
It's really really easy to lose touch with the concepts you mentioned when you are busy with work. If you ask me to write a DFS algorithm right now, I might struggle to get it right in the first go.
There are two things you can do, the first one is a solution to the question asked. The second thing is mostly my rant of how screwed up hiring is in our industry.
The problem you are facing is that you are probably quite proficient using the frameworks, however you lack the Vanilla skill. It's a similar problem in JS, where everyone uses Angular, Aurelia, React, etc. and no one wants to build stuff without those.
The remedy I see is to start thinking "is it really necessary to use a framework/library here? Can't I do it without one just as easy?" Try to build stuff without frameworks, just You and Java.
I wrote a JS-focused Hashnode Original article about your problem. If you feel like it, give it a read :)
I will give you a simple solution but it will take time.
If you plan to be a better software developer in general, always stick to basics. It doesn't matter how many frameworks you know or how many tools you can use to solve a particular problem.
There are plethora of tools out there and knowing any/all of them doesn't tell me anything about your knowledge or understanding of Computer Engineering in general.
This may be a wrong analogy, but bear with me here. There is a difference between a Automobile engineer and a mechanic. A mechanic will know in and out about the vehicle he is familiar with, but an Automobile engineer will know way more about how the internal combustion engine is working. An automobile engineer can in fact work as a mechanic if he tried with little effort, but a mechanic can't design an engine.
In your case this might not be applicable. It might be that the understanding you have about the frameworks that you have used is pretty good. It also might be that knowing these toolchains enables you to build a complex system pretty soon, but the question is can you, in-depth, explain to me how a message queue works? If I were to evaluate between kafka, rabbitmq or some other new messaging queue how would you create a comparison metric? what all points should you consider?
The point I am trying to make is toolchains keep on changing, but basics will always remain same. Focus on those. Coming to a simple solution
Please don't take this post as negative, I am not trying to point out some flaw. If we are not regularly in touch with our basics, we tend to become complacent. Whatever I just mentioned is not a quick/short term solution to some interview situation. It is a learning step that you will have to keep on repeating till you are in this industry. Computer Engineering is probably most challenging stream purely because of its rapid changing nature, maintaining a good understanding of basics is a necessity.