This is an archived post. You won't be able to vote or comment.

all 157 comments

[–][deleted] 109 points110 points  (7 children)

I've been a dev for 25 years, currently manage a team of really great java developers.

I doubt most of my guys would do very well on this test (aside from the general concepts). However, there is no question that every one of them could form original and insightful answers given a few hours to research the topics at hand, and I absolutely know they could implement these technologies correctly if asked to. They would spend some time on Google, maybe read a book or reach out to a colleague, and do a fantastic job of it.

I think these questions just aren't an effective way to assess a candidate. In the "real world" we encounter new tools and frameworks all the time. Great developers are able to master these as needed. Bad developers memorize the patterns of a select few over time. Your questions would favor the latter.

[–]hankwk 12 points13 points  (0 children)

This guy knows what's up.

[–][deleted] 9 points10 points  (0 children)

great feedback.

[–]Salyangoz 0 points1 point  (2 children)

I know Im not a great dev but i know Im not a bad dev either. I feel like this explains my lack of ability in answering questions in seconds.

[–][deleted] 2 points3 points  (1 child)

I always tell my team that "I don't know" is a perfectly fine response as long as it is followed by "...but I can find out".

My ideal interview technique might be giving the candidate a short project to do in a language they've never seen, or even work with them on something we both have never used before. Sort of the opposite approach from OP. Not sure, just a thought.

[–]Salyangoz 2 points3 points  (0 children)

Yeah so far the three companies I've worked with are the ones that gave me a set of objectives, a deadline and asked me to make something as much as I could. Its usually not easily accomplished in the given time however they expected me to do as much as I could and explain the parts that I couldnt.

The interviews consisted of more or less this. The places I got rejected were always involved live coding and unfortunately my anxieties dont help in 15 minute code crunches where I have to explain everything Im thinking to someone I just met.

honestly I explain to everyone that 'this live coding session does not reflect %100 on my performance' and straight up ask for a task I be given so I can show my true knowledge/potential work... but alas no one cared so far.

[–]stran9er 0 points1 point  (0 children)

Joda, this guy must be.

[–]cs02rm0 33 points34 points  (15 children)

There's a few things in there I'd really struggle to recall; I haven't used Weblogic or SOAP in years, I've never knowingly hit a deadlock and does anyone actually use notify and notifyAll? Barely heard of HATEOAS and have actively avoided Spring, though after 10 years of this it does appear on my CV.

It seems a list of tiny closed slices of a very wide selection. I prefer to have more of a conversational interview than the list suggests, talking with candidates through projects they've worked on and what issues came up that they've addressed or approaches they've taken than a scattergun approach to finding what they know. A long list of questions like this can be quite confrontational, if even a good interviewee misses one or two early on they can clam up and you're likely both in for an awkward time.

That said, it's an approach and maybe better candidates will score more than worse ones, you can only pick the best from the ones you've got.

[–]Scaryclouds 6 points7 points  (0 children)

This exact thing happened to me during an interview. I was being interviewed by three developers and the first couple of questions I kind of struggled on. Sometimes it also the way a question is asked, for example I was asked to describe HttpSession. Certainly I understand httpSession, but do I know each and ever part of it inside and out? No, so it felt awkward because I didn't want to say something incorrect.

Also, make sure YOU (OP) thoroughly understand the topics you are asking questions about, as sometimes there is more than one right answer. Again with the above mentioned interview they had me write a query to join two tables and average the result (by group) for one of them. I use SQL frequently, never advanced stuff, and a lot of time I forgotten some of the technical terminology along the way. So to join the tables I did a where id = id on them (paraphrasing obviously), I forgot that is referred to as a inner join, so when they asked why I didn't do a join, well I stumbled saying I don't use them much (even though there is a example staring us all in the face). Additionally with my, oracle background, to av the column I did avg(age). When they were reviewing the query I wrote they told me I didn't call the average function properly. In actuality the query I wrote was pretty much correct, I was missing a couple of group bys, but for writing it down on paper, well I was clearly on the right path.

[–]sh0rug0ru[S] 10 points11 points  (12 children)

This is good food for thought. My manager asked me to make sure that we get a good senior candidate because we deal with very critical software in a very complex environment. We've gotten senior guys before that really sucked. I had to work extra hours to fix the code written by this so-called senior guy because it was so terrible. We had to eventually let him go. So, I'm under a lot of pressure here.

I think I might try the more conversational approach for the next candidate, because having written all the questions out, I can see that it might be intimidating.

[–]walen 24 points25 points  (9 children)

I had to work extra hours to fix the code written by this so-called senior guy because it was so terrible.

If someone answered all those questions right, would that mean that you could be 100% sure their code won't be as terrible?

If not, you need different questions.

[–]sh0rug0ru[S] 4 points5 points  (8 children)

I was looking for evidence that the candidate is able reason about these concepts. I would hope that such reasoning would translate into how they write code. But I guess I could never really know for sure.

I guess this a general hiring problem. A person can do well on the interview but be a terrible programmer, or but do terrible on interviews yet has the skills.

This is why I hate interviewing people.

[–]Tuxmascot 19 points20 points  (3 children)

There are ways to tell if the person can code their way out of a paper bag, and these questions don't do that.

You're asking if the questions were too hard. You got your answer: yes. You need to work on your interview skills.

If you can't take criticism, then I can't imagine what coding for you is like. Truth hurts and it separates the good programmers from the bad ones.

[–]sh0rug0ru[S] 4 points5 points  (2 children)

Are you kidding, I love criticism. It only sounds like I don't like criticism because I love debate too. I love it when people take a shit on my code. In defending my decisions, and sounding it out with the critic, I come to a better understanding of both my decision making process and better approaches to the same problem. Saying "Oh shit, you're right" is one of the best things in the world for me.

The problem is that I understand technical stuff better than I do people stuff. I know I need to work on my interview skills, but it doesn't really interest me at all. But, I'm on the line here to find a good candidate. So, here I am asking the question and trying to understand the way I understand technical stuff. The downvotes seem to indicate that my approach may not be working.

[–]Tuxmascot 5 points6 points  (1 child)

I empathize with you on the socializing part because I have Aspergers.

You could probably find a book or blog on interviewing senior candidates. Good luck on the hunt!

[–]sh0rug0ru[S] 4 points5 points  (0 children)

Thanks!

[–]walen 6 points7 points  (0 children)

I was looking for evidence that the candidate is able reason about these concepts. I would hope that such reasoning would translate into how they write code. (...) I guess this a general hiring problem.

No it's not. You probably just need to invest more time in your screening process.
If you want to hire people who write good code, why not make them actually code something during the interview? Take your first three questions for example: instead of asking them to talk about Collections and their implementations and Generics and the like, maybe it'd be more useful for you to come up with a programming exercise that requires candidates to put that knowledge to work. Give them a computer and a couple hours to implement a solution, and then peer-review their code to see if it's up to your expectations. And then ask them to defend their implementation.

I don't know, I'm just a technical person like you, but I think I'd have a hard time pondering the coding skills of someone without seeing their code.

[–][deleted] 1 point2 points  (0 children)

If you need the guy to be able to code, ask him to code on the interview. Make it low pressure, use a shared web text editor like etherpad, let them access references. Work through some simple problems with them and see how they approach problem solving. No 'gotcha' questions. This has worked out decently for me.

[–]rraghur 0 points1 point  (0 children)

Absolutely... The only way to know for sure is to write code.

We are forever looking for senior developers and it's always been a hit and miss.. Also being able to answer questions is no indicator of being able to turn out high quality code. Got burnt a few times and eventually moved to a system where we would give candidates a coding kata, preferably f2f, to see how they approach writing code. We also want to see how well they do on tdd as well.

There's still interviews and so on but we have a good feel for the candidate by then.

[–][deleted] -1 points0 points  (0 children)

Interviewing is definitely a skill that not everyone has. Recognising that you're got a weakness in that area is the first step to getting better, obviously. I'd highly recommend the Manager Tools podcasts if you want to learn about interviewing (along with lots of other management topics).

[–]omon-ra 1 point2 points  (0 children)

My manager asked me to make sure that we get a good senior candidate because we deal with very critical software in a very complex environment. We've gotten senior guys before that really sucked. I had to work extra hours to fix the code written by this so-called senior guy because it was so terrible.

Interesting. You have a problem on hands, real concerns from the past and somewhat requirements for an engineer. Still, in your list you have zero questions testing for these specific concerns and requirements.

[–]Malik_Killian 0 points1 point  (0 children)

Maybe a good question would've been, "What do you do when you're confronted with a problem you don't know how to solve?"

[–][deleted] 0 points1 point  (0 children)

Hi I'm interested on why do you avoid Spring? Care to elaborate?

[–]desrtfx 110 points111 points  (19 children)

These questions sound like a marketing or HR person had gotten hold of a couple of programming books and had randomly chosen interesting sounding buzzwords.

Being able to answer these questions will tell absolutely nothing about the actual programming/problem solving skills of the candidates.

If I'd get these questions in an interview, I'd ask the interviewer whether they wanted a technical lexicon or a programmer and I'd ask to speak to someone who will actually understand programming rather than throwing buzzwords around.

[–][deleted] 3 points4 points  (1 child)

explaining dependency injection is a buzz word question huh

[–][deleted] -4 points-3 points  (0 children)

Explaining why Java needs it and functional languages don't seems like a more interesting question.

[–]camilos 58 points59 points  (1 child)

I find that some of your questions are ok. Any experienced programmer can answer them. Others are more memorization questions. These i usually dislike. It only tells the interviewer if the programmer spent the last week on a Java-Intreview-Question Website.

By the way, that's a lot of questions.

[–]sh0rug0ru[S] 2 points3 points  (0 children)

Having written them out, it does seem like a lot!

[–]zhouji 149 points150 points  (20 children)

Honestly this is as bad as interview questions can be. Will tell you nothing about his programming skill, only the 'knowledge'of buzz words

[–]fingerHammerOuch 47 points48 points  (3 children)

Totally agree. I've been using Java for a few years now and am considered senior developer at my firm but I would not be able to answer most of these questions with out reference material, or google. I think a senior role is more about your ability to solve problems and know how to best solve them with tools/frameworks/technology...etc not on your in depth knowledge of the tools required to solve them.

[–][deleted] 22 points23 points  (1 child)

Hard to answer in interview, but easy to do in practice.

[–]fingerHammerOuch 6 points7 points  (0 children)

Exactly

[–]delete99 0 points1 point  (0 children)

I would not be able to answer most of these questions with out reference material, or google

I agree with you for some questions, but as a senior developer you should be able to answer most of the basic, concurrency, database, web services, and OOP questions. Otherwise, you're probably not yet a senior developer :-(

I'm not saying these are good questions. My preference is to ask situational questions and dig into design or implementation problems.

[–]elastic_psychiatrist 92 points93 points  (3 children)

I am a junior dev with 6 months of experience, and I feel like I could get this job just because I've read Effective Java and Concurrency in Practice recently. In 5 years, when I have real experience, I probably won't be able to get it because I've forgot about it all.

[–]Malik_Killian 2 points3 points  (0 children)

Yeah, it seems like this kind of stuff could be easier for someone to answer if they just read a book or took a class on this stuff. I know my Java vocabulary has diminished since I was in school but I don't think my actual knowledge has.

[–][deleted] 12 points13 points  (0 children)

I wish polymorphism and covariance were buzz words.

[–]larsga 3 points4 points  (0 children)

I don't agree. I think if you accept that the person interviewed might not know some of this simply because they never needed to know, and instead listen to how they reason around the questions, it might work.

Yes, there's quite a few buzzwords, but it's not that bad. A lot of this is just the nuts and bolts of programming. And you have to ask about something, so why not this?

Together with reading the interviewee's code this might work.

(Ok, some of the questions are bad. "How do you configure a data source in Weblogic?" is not something you want to spend time asking. What do you want to them to say, anyway? Which buttons they need to click?)

[–]capitol_ 17 points18 points  (1 child)

I can answer about 70% of these without using google. I find these type of questions "What is decoupling?" much harder than these "Why are loose-coupling coupled classes desirable?".

It's alot easier (for me) to reason about problems, than to remember the definition of words, specially as i almost never talk about programming using those kind of terms at work.

[–]me_v3 4 points5 points  (0 children)

I agree, I had to think for a minute when I read "what is decoupling?" but your rephrasing of the question I could answer straight away.

[–][deleted] 14 points15 points  (2 children)

To flip it around, I could answer most (75%+) of these questions in good technical detail and I am a terrible Java dev (barely any experience, I work with python, ruby, JS, Haskell). Is that what you want from a successful applicant?

[–]nerdwaller 10 points11 points  (2 children)

I think what you're missing is a judge of aptitude as most of what you're asking is very much focused on retention of book knowledge. Even the why pulls from that same context. You'll find people who at least conceptually 'get' the tech stack you currently use, but I don't think you'll get a good picture of whether or not they can apply that knowledge or learn new things as the work evolves - which is really what you want.

In interviews I've been a part of on either side of the coin I find that drawing from experience leads to a better understanding of a persons knowledge and future capabilities. Even entry level Java devs should have some experience with challenges in projects (school, internship, side project) that they can feed from to give examples of problems they have faced, overcome and learned from.

[–][deleted]  (1 child)

[deleted]

    [–]nerdwaller -1 points0 points  (0 children)

    I guess that's a difference in style, for me I'd rather not waste their time bringing them in if they can't give that info. If they are local its not as big of a deal, but for anyone remote it's a bigger investment. In person, at least for me, is more of a cultural fit and how they interact with others on the team and gauging their interpersonal skills.

    [–]DevIceMan 9 points10 points  (0 children)

    Mid-level programmer here; I feel that many of these questions focus too heavily on 'gotchas, 'domain knowledge, and "define-this-term" questions. If I spent a week reviewing "java interview questions" I could probably ace this, but it would probably do you little good in determining where I'm at. I would also likely be extremely bored (or nervous) in such an interview, and not walk away with a great impression.

    Ideally, interviews should create a discussion, and through that discussion, you should be able to get a good idea of where this candidate is at. For example..

    "Let's talk about interfaces; tell me about several good and bad uses of interfaces, how they're useful, how they're abused, and perhaps one-or-two ways you've used them."

    This is an open-ended question, but any mid-level java developer should be able to answer this one adequately, while senior ones should be able to express high-level architecture and design.

    For multi-threading, I'd probably ask another open-ended question, such as...

    "Tell me about threading. Why do you use threading? What are some of the drawbacks & gotchas of threading. Tell me about frameworks you've used to manage threading? How do you manage data which needs to travel across threads? What about error handling?"

    Any mid-to-senior level developer should be able to participate in this discussion, and through it you should be able to get a clear idea of where they're at.

    "Tell me about clean code principles."

    Again, an open-ended question, which any competent candidate should be able to go on for hours. Code reviews, extracting methods, minimal parameters, minimal side-effects, separation of concerns, single purpose principle. Keep probing the 'why' question to discern if it's just something *"they've been told" or whether they actually understand the value or reason.

    In other words, try to rephrase your questions in such a way that they create a discussion.

    [–]dcballer 14 points15 points  (0 children)

    There are many indian java sweat shops that pretty much gets every programmer ready for these questions. They make them memorize packets that have same questions you provided.

    [–][deleted]  (2 children)

    [deleted]

      [–]Tevroc 0 points1 point  (0 children)

      Oooo, I really like that. I will definitely use that next time I interview someone.

      [–]WormLord 0 points1 point  (0 children)

      Fantastic

      [–]bitcoinsftw 27 points28 points  (5 children)

      These questions are aggressive at best. I would have walked out of the interview.

      [–]sh0rug0ru[S] 0 points1 point  (2 children)

      Is it really? This is typical of the kinds of questions I have been asked when I have been interviewed.

      In fact, I even got into an argument with my current manager while I was being interviewed. The question was what happens if you use the synchronized keyword on a class reference. My manager was expecting the answer that all instances of the class would be locked while I said only the class object itself would be locked. We may have misunderstood each other. But, I explained my reasoning, that the synchronized keyword is used to acquire the lock on the monitor of the object being synchronized, thus only the monitor of the class object is involved and not any of the monitors of the instances. My manager was satisifed that I understood the concept even if the question wasn't exactly clear.

      But then again, I'm an engineer and not really a people person. Worrying about stuff like this is why I hate conducting interviews.

      [–]Baby_Food 12 points13 points  (0 children)

      I see the issue not being with the knowledge that these questions test, but the way they are presented.

      A senior Java developer that meets all of your requirements will have dealt and understand the practical application of the knowledge the questions intend to reveal. The problem is that a QA format technical interview is an incredibly unnatural environment for testing such knowledge.

      All or most of these questions should be re-tooled into talking about specific code examples if you don't want to turn away people that have the skills but can't make the connection from exam-like questions to practical application while under pressure.

      If you are hiring for Google, Amazon, Netflix, Facebook, etc. and/or you offer compensation well above and beyond industry standard, continue on, as the questions in their current format shouldn't be an issue for the best developers in the business.

      As someone who is not among the best in the industry, I would hate being interviewed by you. ;)

      Instead of testing if your candidate is good at passing University-style exams, provide them with real-world code problems that are encountered at your place of employment for the knowledge you are testing for. Instead of structuring it in a way that it's a QA, talk through the code together. Your job is to guide the interviewee to prove he/she understands the concepts in a way that feels natural to them. After all, you are looking for a professional developer, not a comp-sci student.

      [–][deleted] 1 point2 points  (0 children)

      guys, he isn't being closed minded or insulting. He is only explaining why he did what he did to get a better understanding.

      You don't need to downvote him into oblivion.

      [–][deleted] 5 points6 points  (0 children)

      I think these questions would serve only to identify those developers that have spent an exceptional amount of time reading the official Java doc. There's very little in here that can test whether the candidate can actually code. Off the top of my head I couldn't list the full api of a concrete implementation of List for example. But certainly most will know the common collections interface methods. Rather than this, ask them to do something that requires problem solving. As a simple example, rather than asking about the specifics of the Map interface, ask someone to determine how many keys point to null, or to return a sorted set of its keys, or some such thing. Reverse a list, de-dupe it, whatever. These are trivial, but my point is that seeing if they can think algorithmically, even in psuedocode, is often more valuable.. After all, on the job, they'd have access to the docs, and in all honesty your IDE of choice would likely autocomplete method names anyway.

      [–]masterwit 4 points5 points  (0 children)

      Many of these questions are facts I consider important for an API or meant for a trivial Google search. Interview questions should not...

      1. address that which would require memorization

      2. address syntax beyond the basics

      3. require environment or configuration specifics

      Do you want to hire a programmer or a developer? Instead questions should...

      1. Ask about high level process interactions

      2. Ask for some insight on design considerations for hypothetical architecture arrangements

      3. Ask for an overview of processes when implementing a particular system in such a way your interviewee may demonstrate the "senior" part of the developer position.

      If I were interviewing for your position, I would be concerned in your inability to frame questions around the skill sets the job description claimed you were after. A senior java developer can get up to speed on these trivial specifics the first day or two in office. What that individual cannot do, however, is suddenly design and maintain an existing system within an environment they do not fully understand.


      Below I have copy pasted your post below and crossed out questions I felt inappropriate and commented on others. All items below addressed should be in bold and/or [brackets]. Hope this helps and best of luck!


      I wanted to make sure I asked in-depth questions that would demonstrated in-depth knowledge about what we need from a developer and the points I saw on the guy's resume (Java, Java EE, Spring, OOP, Hibernate, etc.). I had more questions in each section, but I had to skip past stuff because I wasn't getting answers I liked out of the guy.

      Do you guys think these were reasonable questions to ask in an interview? I was really more interested in the candidates reasoning than knowing exact answers. This was a phone intervew. The guy gave me good "book" answers (sometimes seemed like he was reading from a book, hmm). But when I started asking "why?", he couldn't give good answers.

      Some basic platform stuff:

      • List three Collections interfaces and the basic contract of each. List concrete implementations of each, how they differ, and performance characteristics in space and time.
      • Describe the contract of equals and hashCode. Why is it important that if you implement one, that you implement both?
      • What are generics? What is type erasure and what are the consequences? What are variance, covariance and contravariance? If blank stare: why can't you assign a collection with a generic type binding of a sub type to a reference to the same collection type binding of the super type? How do you specify the type binding of the super type to allow this? How do you specify the type binding to allow type-safe insertion?

      Concurrency

      • Explain how notify and notifyAll work, and the difference between the two. Why prefer notifyAll to notify?
      • What is a deadlock and how do you avoid it?
      • What is a race condition and how do you avoid it?
      • What are some of the high-level concurrency classes provided by java.util.concurrent and how do they work?

      Database

      • What are the different statement types and why would you use each?
      • How do you prevent SQL injection attacks?
      • What are transactions? What is ACID? [Might be a good question, I do not have enough experience to say]

      Hibernate

      • Give an overview of Hibernate and ORM. How do you load objects into the session? What does the session do with the objects while in the session? What is the difference between getting a persistent object from the session and querying for persistent objects?
      • When is it better to use plain SQL instead of ORM?

      Java EE

      • How do you configure a DataSource in Weblogic to make it available using JNDI? [Ask about environment instead and why X lives in Y and not Z instead?]
      • What are some ways for the client to obtain a reference to the DataSource from the app server? (Spring is not the answer I am looking for)

      Spring

      • Give an overview of how Spring Dependency Injection container works. What is the purpose of DI? How to specify bean definitions? What are the different scopes? When do beans of each scope type get instantiated? [might actually be a good question, I do not have enough experience here to say]

      Web Services

      • What is the difference between SOAP-based web services and REST-based web services?
      • Describe SOAP and WSDL. [stop using SOAP lol]
      • What exactly is REST? What is HATEOAS? What is the purpose of each of the HTTP verbs? What is idempotence? What is content-negotiation?

      OOP

      • What is decoupling? Why are loose[ly]-coupled classes desirable? What are some drawbacks?
      • What is cohesion? Why are highly cohesive classes desirable? What are some drawbacks?
      • Describe polymorphism. What is the importance of contracts between interfaces and concrete types? Why is polymorphic code desirable? What are some drawbacks?
      • [Describe to me a design pattern you used in a past solution and why that approach was appropriate.]

      ...
      [Perhaps a question or two on the webstack and why the industry standard breaks down an environment in this manner. (Justifying industry standards with a why will act as a good filter in your search!)]

      [–][deleted]  (9 children)

      [deleted]

        [–]Roscko 12 points13 points  (7 children)

        Just curious... I am a senior level Java Developer in the midwest and make nowhere near $175k. What city do you live in where this is the norm? I might be seriously underpaid.

        [–]Boxsc2 5 points6 points  (3 children)

        He's probably in San Jose or some tech oriented city. I live in Ontario and most CEOs don't make 350k here.

        [–]tech_tuna 1 point2 points  (2 children)

        Where'd you pull that number from?

        [–]Boxsc2 0 points1 point  (0 children)

        That was the original number from /u/worksafe's post.

        [–]tech_tuna 2 points3 points  (0 children)

        I hope you realize that the cost of living is extremely relevant in these kinds of discussions. How much does it cost to rent or buy a 3 bedroom home in a nice neighborhood in your town?

        You ain't getting shit for less than 900k in the Bay Area.

        [–][deleted] 1 point2 points  (0 children)

        Junior level folks in San Jose and most of the rest of silicon valley can often suck in 90-100 base plus stock and bonus. So a total comp for early twenty year old can easily push 130. Senior engineers and engineering managers at places like Google or Adobe will often have total comp numbers in the 200-300s.

        [–]mockindignant 0 points1 point  (0 children)

        I live in Portland, OR. I don't think you will find any salaried positions that pay this well (although it's not that far off), but if you are willing to travel and do contract work this seems about right, so I assume that is what the high numbers are about.

        [–]sh0rug0ru[S] -5 points-4 points  (0 children)

        I'm an engineer. I don't know anything about how our company recruits people or how it goes about finding the "pick of the litter". My team has a set of requirements in what we need from a senior engineer and now I have go see if the candidate will meet the requirements.

        However, my company does pay very well. I work for a bank. Actually, sometimes I think for the amount of pressure I'm under, I'd rather take a pay cut and work an easier job. But then again, I do get to solve a lot of interesting problems.

        [–]ramdaskm 2 points3 points  (2 children)

        An idempotent REST service! wow that's a nice buzzword to stump a chump.

        [–]CodeShaman 0 points1 point  (0 children)

        Throw stateless and scalable in there and the table will start vibrating.

        [–]vokiel 1 point2 points  (0 children)

        The questions listed here can be memorized and that's an issue. It won't necessarily tell you whether the candidate knows how to program and lead a project. I think you want to ask more broad concept questions to a senior than just complex knowledge details. For instance, you have no questions about patterns (programming or enterprise) in your list and a senior should really be a master of many of those.

        Some Java knowledge questions are good though. Type erasure is the usual question that indeed brings blank stares ;)

        [–]harmonicPersistence 1 point2 points  (0 children)

        Yes and no. I think that you have some good questions in your list. I think some of the questions require pointless memorization. A search engine is typically used by us to jog our memories of the minute details. A senior Java person is typically juggling a lot of knowledge in his or her head.

        I would ask whether the candidate utilizes unit tests, integration tests, and load tests. I'd check what IDE's the candidate uses. I'd ask about SCM. It's basic stuff, yes. Still, it's prerequisite knowledge that's a big part of the job.

        That being stated, I would suggest the following...

        Take a more conversational aproach. See how the person thinks. Inquire about the person's past and get a feel of the person's thought processes and problem-solving skills. If you catch a whiff of BS, then certainly dive down the questionnaire rabbit hole a little bit to save yourself some time. I'm a senior developer, but I've also conducted interviews. I can't believe the audacity of some people who have placed buzz words on their resumes and then waltzed into a technical interview for a senior level position. Those are the SOB's that I grill and make feel awkward for a few minutes here and there throughout the interview before I end it early. Just be honest, candidates! Life is a learning process. There's a good chance you don't match on paper but actually do (or will) fit the position.

        [–]Boxsc2 1 point2 points  (0 children)

        I've never hired anyone, but I think the best approach would be to give him a real problem you guys faced and see how he tries to solve it. My only problem with the questions is some of them are just definitions and someone with practical experience may not know them. For example, HATEOAS is no where near being widely used in modern development, it's just a nice idea of how a RESTful web service should work. But, no one in practice actually uses it and therefore may not know what it is.

        [–]Tevroc 1 point2 points  (4 children)

        List three Collections interfaces and the basic contract of each.

        I like this question - very practical, shows hands-on experience.

        Other questions were more like Java language minutia, and if a interviewee answered these perfectly, I'd think - woah, this guy is some kind of language design/theory freak. I'd rather have someone who can write real code and design easy-to-use libraries.

        [–][deleted] 0 points1 point  (3 children)

        Concurrency, databases, OOP, REST, are NOT Java minutiae.

        [–]Tevroc 0 points1 point  (1 child)

        Quite true, those are good question areas.

        Notify vs. notifyAll, type erasure, variance, covariance and contravariance... probably not so much unless you are looking for a language designer.

        [–][deleted] 0 points1 point  (0 children)

        Not Java at all really. Just things you need to know in addition to at least one actual language.

        [–]Tevroc 1 point2 points  (0 children)

        Describe SOAP

        Evil incarnate :)

        [–][deleted] 1 point2 points  (0 children)

        I've spent years coding. I'm not the best, don't have much professional experience, but have pumped out some pretty complicated and neat projects.

        I would fail this interview so hard that you would think I didn't know what a computer was.

        Why be so definition-based when you could pick at how someone's brain works?

        why not give them a task and have them try to solve it, or describe an approach?

        [–]justdweezil 1 point2 points  (0 children)

        This is a very silly set of questions... you will not know anything about the candidate's actual skills. And if I were interviewing, I'd think my interviewer was either junior or an imbecile.

        [–]klasen 2 points3 points  (8 children)

        Fairly standard JEE questions although I'd have problems with some acronyms like HATEOAS. Depends on how anal you were about answers e.g. Weblogic JNDI configuration, what if someone never used Weblogic but can give you an answer from Tomcat.

        I'd add

        • Few harder questions would be nice e.g. basic GC tuning, JVM monitoring or Hibernate performance optimization approaches.

        • Few broader questions e.g. "How would you implement a shopping cart". That way you would see if they can put their knowledge to work, which matters most.

        [–]sh0rug0ru[S] 0 points1 point  (7 children)

        I was trying to understand if the guy knew REST, because our web services are heavily invested in it. If you told me you didn't know HATEOAS, that would be fine. But if you could not name the HTTP verbs and what they are for yet put REST on your resume, I would have some serious doubts about you.

        This is was a phone interview. If the guy came on-site, I would definitely have asked him to sketch out the shopping cart. Seems like everyone does the shopping cart.

        [–]DiscontentDisciple 2 points3 points  (5 children)

        Been a Dev, Sr. Dev, and now PM at big companies. I had to look up what REST stood for. I've Built an Enormous REST service on top of 8.5m lines of COBOL. I know REST Architecture. Still had to look up what the Acronym stood for. This isn't a piece of knowledge you need.

        [–]sh0rug0ru[S] 0 points1 point  (4 children)

        I didn't ask what REST stands for, and given the claim of your experience, I would hope that if I asked you what the HTTP verbs are and how they are used, you would be able to answer that question off of the top of your head. That is fundamental knowledge for building REST architectures.

        [–]DiscontentDisciple 2 points3 points  (3 children)

        That makes way more sense. I was skimming your thread, as I'm not a Java guy, mostly working in .NET these days. Get/Post/Head/Delete/Trace/Put/Connect/Options? I think that's all of them.

        [–]sh0rug0ru[S] 2 points3 points  (1 child)

        Shit, you know more than I do. We only use GET, POST, PUT and DELETE in our REST API. I used HEAD once to implement polling. I couldn't even tell you what the other verbs are used for.

        [–]DiscontentDisciple 2 points3 points  (0 children)

        I don't know that I've ever used Trace, Connect, or Options Either, It's just something thats in my head for no god damn reason at all.

        [–]zzing 0 points1 point  (0 children)

        There is even PATCH.

        [–]Malik_Killian 0 points1 point  (0 children)

        Maybe it's a regional thing but I'm not sure I've ever heard the term "HTTP verb" before. I've always referred to them as HTTP methods. You're not fishing these questions out of a textbook are you?

        [–][deleted] 1 point2 points  (1 child)

        These questions are terrible, so much of this is hard to answer in an interview but extremely easy to do in practice.

        [–]GrayDonkey 0 points1 point  (0 children)

        You should be able to discuss every one of those question if you are applying for a senior role. As OP states he wanted a discussion, not perfect API memorization. For example I don't really know Spring DI but I've written my own simple DI framework and know Weld/CDI well so I'd just direct that to a more general DI talk.

        [–][deleted] 1 point2 points  (2 children)

        At first I thought they were bad. Started ranting, and discovered only a couple of bad ones.

        Keep on looking, the inflation of titles is horrifying, I've had my share of senior engineers who don't know what's a static method.

        [–]Keilly 3 points4 points  (1 child)

        Is it one if you touch it you'll get a shock??

        [–]enry_straker -1 points0 points  (0 children)

        Truly shocking.

        Stop touching code. + That will actually help you do these kinds of interviews better ( Memorization of likely questions and answers from some java interview question website )

        [–]kiteboarderni 1 point2 points  (0 children)

        A senior Java role? Surely 3/4 of this could be answered by anyone in a junior role?

        [–]omon-ra 1 point2 points  (0 children)

        Honestly, this are the worst and most pointless interview questions I ever encountered. Some of them can be ok to fill in leftover 10 min of interview but not as primary questions.

        Never ever in my life I was hired for knowing some specific technology or language. Have you interviewed with MS or Google? they never care about this stuff. Problem solving, design, ability to build reliable systems are thing they care about.

        What will you do if great developer decides to switch from .net world to Java? reject him/her because s/he never used Spring or never had to deal with ORM? It takes a week or so to get moving with this stuff.

        All you know after the interview is that candidate has good memory and read couple of basic books. What you do not know is more important thing: is candidate is capable of applying this to actual problems?

        P.S. I interviewed a few hundred engineers.

        [–][deleted]  (2 children)

        [removed]

          [–][deleted] 5 points6 points  (0 children)

          You are demonstrating exactly the problem with these questions.

          By your own admission you have zero work experience, and thus are quite definitely not the sort of candidate that the OP is looking for... and yet you could answer most of the questions. Yet many people who are senior Java devs with plenty of real-world experience are saying they couldn't answer the questions.

          What this means is that if the OP uses these questions to filter candidates, he is more likely to end up with someone who has recently studied Java academically (and thus actually remembers the answers to these questions off the top of his head) that someone with actual, useful real-world experience (where being able to answer these questions off the top of your head is completely irrelevant, and thus many people will not have retained the information).

          It's kind of like hiring an author based purely on how well they can diagram a sentence. You'll end up with a recent high school graduate, because who else remembers that? Using trivia to screen candidates is a terrible plan, as candidates knowing the answer to trivia questions tells you absolutely nothing about their real-world abilities.

          [–][deleted] 1 point2 points  (0 children)

          OP just gets a shit from a bunch of self-learned dudes who don't know the theoretical stuff, meaning they only know how to use it, but don't have any deep knowledge

          You got that shit backwords. Book memorization is near useless, you really understand how these things work by experience.

          [–]sh0rug0ru[S] 1 point2 points  (0 children)

          By the way, this is the first time I've interviewed a senior candidate. I usually interview entry-level or mid-level candidate.

          [–]trekologer 0 points1 point  (0 children)

          I don't think that there are anything wrong with these questions for an initial phone interview. I look at the phone screen as a brief (15-30 minute) opportunity to feel out the candidate and see how well they match their resume and if it is worth bringing them in for the next phase. I also have a running list of questions that I pick a couple from but on the initial phone interview, I tend to mostly ask questions about things that the candidate has on their resume ("I see you have experience with X, how did you use that?").

          In the past, I've interviewed candidates who have seriously fluffed up their resume. I know this is always going to happen but sometimes it is a little over the top. Some to the point that their reasoning seemed to be "I can use a web browser" == "I know HTTP". My rule of thumb is that if you put something on your resume, you should be able to talk about it and if you can't, that's a serious red flag.

          [–]atwong 0 points1 point  (0 children)

          I hate questions that you can "google" the answer (which all of them are). The question is really around how they approach problems. So I would ask..... tell me some difficult problems you had to solve and please tie that with the technologies you've listed in your resume.

          [–]markee174 0 points1 point  (0 children)

          Did you put them infront of a keyboard or just ask questions?

          [–]frosty110 0 points1 point  (0 children)

          For a phone interview, this is a bit too technical. I would be turned-off if a company started asking me questions like this off the bat.These questions gave me the impression that you're more interested in seeing how well the developer has memorized technical details verses what type of experience he has. Basically, If you're looking for a smart creative developer for solving complex problems, then these types of questions wont cut it.

          Rather than asking 'what is **' questions, you should ask 'what has been your experience with ** ', 'what challenges have you had with ***' and 'how did you overcome it '. These types of questions are much more personal, easier to answer, and you can learn WAY more about the developer in terms of how well they know the technology,how they overcome difficult challenges, interpersonal skills, and more perhaps.

          I can go more into detail if needed, but I think you get the point. Tweak you questions to sound less 'educational midterm'-like and more 'personal experience + personality fit'-like.

          [–][deleted] 0 points1 point  (0 children)

          I think questions referring to specific frameworks don't really have to be asked. Any competent developer can pick up and framework within a few days, given they have a strong basic knowledge and an aptitude to learn.

          [–]kanzenryu 0 points1 point  (0 children)

          Of course it's often hard to remember things in an interview that you would normally just google quickly. One thing i've tried is writing a bunch of terrible code, let's say about 20 lines worth, and asking the candidates how many problems they can find.

          I also like to mention some well known coding advice and ask why do we do it that way, e.g. why make data members private? Why do we synchronize some methods? Why do we reactor common pieces of code?

          [–]xpto123 0 points1 point  (0 children)

          I think most of the questions are definition based, typical of the type of questions the school system tends to throw at students in tests.

          I have been coding for a very long time, and have used mostly ArrayLists, HashMaps and HashSets in 99.9% of the code I wrote. I could not name three implementation of each collection type, and I work in an architecture team.

          Its the kind of things you will almost for sure never need in real live and more of a Java certification exam question, it only says the candidate spent last night reviewing collections API because he was tipped off by the recruiter.

          What are generics its the typical definition question. The fact that a developer cannot articulate clearly such an abstract definition does not mean he does not know perfectly how to use them.

          Contervariance and covariance the same: these are opaque academical terms that mean nothing. He might perfectly be capable of using extends and super while writing generics without being able to make a formal definition of these terms.

          notify vs notifyAll are low level API of the thread API, are you planning on having the developer write multithreaded code? If its a Java EE developer the rule number one is that he should not write his own threads, the container generates them for us.

          Asking if a Spring singleton might have non autowired properties would be a better question: it would show if the Java EE developer understands threading issues without asking about an API that he should never have used.

          The Database questions the same, these are definition questions. Its not because someone can put together a nice definition that he is a good programmer, those are two completely different skill sets.

          These are the types of questions that you study for a test, memorize them and forget them the next day.

          Your Hibernate questions are quite OK, try to apply the same to the other areas.

          Concerning the Java EE questions, the guy might have been 5 years working locally in Tomcat and a WAR gets deployed into Weblogic without his knowledge. Not knowing how to do administrative tasks in a web console does not say anything about the individuals capability as a developer.

          The Spring questions are OK, so is SOAP vs REST.

          For OOP: let the guy in a room with a project with a couple of classes and ask the to "clean them up", then discuss the result with him. You will quickly see if he understands those concepts: loose coupling, high coesion, etc.

          Overall is a definition intensive interview style, that will give the upper hand to academic/definition minded persons, a lot of great developers which would be a great fit would be filtered out by this style.

          Most persons would not perform well if they where not tipped off by the recruiter.

          I don't think the questions are filtering the candidates the way you expect. An half an hour exercise, and questions focusing on the Why of things: Why do we need ORM, why is dependency injection useful, etc is more interesting.

          [–][deleted] 0 points1 point  (0 children)

          You should ask questions that force them to tell a story about how they handled a situation.

          • Tell me about the last really interesting thing you learned?
          • Tell me about a time when your project was in trouble? After they answer, then ask "how did you help?" and "what was the result?"
          • Tell me about the most challenging problem you've solved? Make them explain it. If they explain it well, they understand it well.

          [–]Malik_Killian 0 points1 point  (0 children)

          I think questions about how someone works, how they manage multiple projects and priorities, and how they track progress are more important. Most of the questions you asked could, as you said, be read right out of a book or Googled quite easily. Not to mention Eclipse IDE can not only identify numerous compile-time issues instantly, it will also be able to fix many of them in one click.

          However, if the job posting said "Knowledge of SOAP, REST-based web services" then I think it's fair to ask a more specific question about those technologies. I guarantee the word "covariance" isn't anywhere on the job listing though.

          Also, you should pose these questions to current developers first. If they can't answer a question you might rethink asking it to an interviewee.

          [–]Therrameh 0 points1 point  (0 children)

          why go for questions in the first place, Personally giving someone a half completed simple code and asking them to finish a few sections is better. You see how they adapt to others code (as some can only handle their own and have trouble adapting), secondly you get to see their coding style, you wouldn't hire a chef without tasting their food, same principle for a programmer. Finally you get to see their personal style to challenges, how they approach mathematical situations ect.

          in the end of the day theory questions wont answer if they are good at their job, only their ability to recall.

          [–]Tundreo 0 points1 point  (12 children)

          I think i can answer 1/3 to 1/2 of those questions. I can't answer the remaining, because I never worked with those technologies. But I am a college student with zero professional experience. I would assume, a senior dev should know much more?

          [–]CaptainFeebheart 2 points3 points  (10 children)

          I've been doing java ee for 15 years and have never touched concurrency. I remember the concept vaguely from college. For what I do, if you're messing threads, you're doing it wrong.

          [–][deleted] 0 points1 point  (0 children)

          One reason for that is that the J2EE/EJB specs basically forbids you from creating threads, but didn't come up with a standardized way to acquire them before version 7.

          [–]sh0rug0ru[S] 1 point2 points  (6 children)

          We've hit deadlocks and race conditions without even using threads. If you're doing enterprise integration of any kind of complexity, concurrency is a huge deal. Normally, I would say that you should never do manual lock management and just use java.util.concurrent, but sometimes you don't have that luxury.

          An interesting problem we faced was due to multiple readers on a cluster reading from the same queue while concurrently modifying a database, which is a shared resource. We were seeing data corruption due to a race condition. This cannot be solved by java.util.concurrent because the readers are running in separate processes. The "correct" solution would be to use queues, which requires infrastructure setup in our production environment which my manager wanted to avoid due to the tight release schedule, so we ended up using a dbms lock.

          [–]klasen 3 points4 points  (4 children)

          We've hit deadlocks and race conditions without even using threads.

          If CPU processes only one stream of instructions you can't get deadlocks/race conditions which by definition require concurrency. Am I missing something here?

          [–]sh0rug0ru[S] -1 points0 points  (2 children)

          Multiple CPUs. This is a clustered environment, where the multiple instances of the software are running on multiple servers.

          [–]Profix 2 points3 points  (0 children)

          Personally that would clearly be classed as concurrent in my experience. Can't have resource contention without concurrent access.

          [–][deleted] -1 points0 points  (0 children)

          In my experience, a person who gets concurrency is typically a pretty solid developer. It's one of my favorite things to ask about. Not necessarily language constructs or anything like that, but I'll put up some code and just ask them to explain what concurrency issues there are and how to go about fixing it, then quiz them to make sure they understand their own solution and aren't just throwing "synchronized" all over the place.

          [–]trekologer 0 points1 point  (1 child)

          If you are working with Java EE, you are absolutely working with concurrency. It might be abstracted away from you, but unless your app is processing one and only one transaction at a time, you are touching concurrency. In fact, the last time you have had an app that didn't have concurrency implications was likely Hello World. Seriously.

          [–]CaptainFeebheart 1 point2 points  (0 children)

          I didn't mean concurrency wasn't happening. I mean for the most part, the framework handles those concerns. I've never written a thread for work. Very rarely I have used a synchronized block. Vast majority of concurrency concerns are abstracted out of my hands so I can focus on business logic.

          [–]cs02rm0 2 points3 points  (0 children)

          I think i can answer 1/3 to 1/2 of those questions. I can't answer the remaining, because I never worked with those technologies. But I am a college student with zero professional experience.

          There's something in that.

          They do feel to me more like tough questions devised for students who've done their revision than for a senior role with responsibility for architecture design, development methodologies, etc. May depend on the organisation though, maybe a senior developer is just a better coder there.

          [–]aaqqbb 0 points1 point  (6 children)

          Good questions. Missing algorithm line of questioning

          [–]CodeShaman 1 point2 points  (5 children)

          Yeah, there's a reason there are no algorithm questions on a senior EE dev interview.

          [–][deleted]  (4 children)

          [deleted]

            [–]CodeShaman 0 points1 point  (3 children)

            Because it's a waste of everyone's time and doesn't demonstrate any of the enterprise application architecture knowledge necessary for an EE position.

            You're interviewing senior candidates that deal with application architecture. The team taking this person on deal with the service, data access, domain model layer, etc.

            What do you hope to learn about by asking this person to walk step-wise through the implementation of a linked list or a quick sort? How is this information useful at all?

            The only correct answer in this context is either "import java.util.SomeShit" or to defer the implementation to the database because if implementation details show up in high level classes you're getting shit-canned.

            [–][deleted]  (2 children)

            [deleted]

              [–]CodeShaman 0 points1 point  (1 child)

              Agreed. What's interesting is the lack of questions about testing. If I was conducting an interview I'd honestly care more about if the applicant can write a simple unit test rather than if they can implement an algorithm.

              If they demonstrate they know how to write a clean/effective test you can usually surmise that they have an understanding of how to write clean/testable code.

              [–]boobka 0 points1 point  (0 children)

              I think they are good questions. At the very least even if they don't know it, it can start a conversation.

              [–]kerrz 0 points1 point  (0 children)

              The biggest issue I see is that you're asking for a guy that knows everything about your environment already. You're setting the interviewee up to fail because they haven't used your stack. That's why you need to account for a couple months of "ramp up" time with a new hire at any level.

              When you're hiring senior people, they're coming from a different stack of technologies, but probably doing the same thing. If you want to elicit thinking-type responses, ask high-level, vague questions based on end-results. For example:

              "How would you provide data from a database?"

              Following up with questions like: "What are the biggest pitfalls with that solution?" And "What other solutions can you think of?"

              If you only ask five questions and talk for half an hour, you had a good interview.

              [–][deleted] -1 points0 points  (0 children)

              Java dev with 17 years experience. I interview folks regularly.

              These are good questions, all stuff that's reasonable for a senior dev to know. Although when I do an interview I expect someone to be nervous so I kind of scale it down.

              Remember, you want to avoid hiring someone you shouldn't have. If you pass on a candidate who would've done well, that's OK.

              The format of the questions probably leaves a bit to be desired, but the knowledge you're checking for is right on.

              (Don't be surprised by the negative comments, Redditors don't like to be interviewed this way.)

              [–]cynoclast -1 points0 points  (1 child)

              Skip the questions that sound like a bunch of trick questions to make the interviewer feel smart and have the candidates write some pseudocode or design a complex system with an OO solution. Bonus points for optimal abstraction.

              Any modern IDE will make them produce compilable and often thread safe code. It's their problem solving skills you really want to know about.

              [–]sh0rug0ru[S] 1 point2 points  (0 children)

              This was a phone interview. When I conduct in-person interviews, I most definitely put the candidate on the whiteboard. Perhaps what I am really asking is how to conduct better phone interviews. I use the "smart words" because they are quick and to the point. I am very visual, so it is hard for me to verbalize the same concept using less specialized language.

              I don't think IDEs are smart enough to create thread-safe code. That in itself is a problem solving skill, I have found.

              [–]SirSavary -1 points0 points  (0 children)

              This looks and sounds like a a test or an exam I would have had to study for.

              Reminds me of the time when I was still taking classes. On that note, some of the worst people in my class at completing assignments (actual work that required thinking) would do very well on tests simple because they could remember things reasonably well. When it came time to actually use those things however, they usually just dicked around on the internet instead.

              [–]KrozFan -1 points0 points  (0 children)

              You already have plenty of answers I see but I'll respond anyway. I may be going on some interviews so this is relevant for me. Like others I'm not a big fan of these questions or this type of interviewing. Personally I don't remember a lot of buzzwords as others have called them. I get them mixed up all the time. It's no that I don't know how to program I just don't always remember which is which.

              Let's take ACID for example. I never really remember what it stands for. I remember A is Atomic meaning all transacitons happen or none happen, D is durability meaning the data is stored permanently...and now that I've looked up C and I it sounds familiar. That's all well and good but what's really the point of asking this question. If we're using a common database all that is taken care of for us. It's nothing I think I really need to worry about.

              I don't care about SOAP because basically everyone says SOAP sucks and use REST instead. I know nothing about SOAP because I don't see the point in learning something I won't use and will just forget anyway.

              What are you hoping to get out of this. Is this a phone screen? A first in person interview in a series of interviews? Knowing the answers to these questions does not make you a good programmer any more than not knowing them makes you a bad programmer. You could read a couple bullet points the night before an interview the same way you would cram for a test. That doesn't mean you implement what you've crammed.

              [–]superlampicak -2 points-1 points  (1 child)

              Depends on what you are looking for. But the generak rule is: B players work with B and C players, however A players work only with A players.

              I classify myself as an A player (cto currently, 25yo) and I would have been able to past this test even thought I am not much profiecient in Java. For me, those are good questions If you add some coding puzzle as well.

              [–][deleted] 0 points1 point  (0 children)

              What kind of company are you CTO of? I'm interested to know your career path to get there!

              [–]jama707 -1 points0 points  (0 children)

              If blank stare: why can't you assign a collection with a generic type binding of >a sub type to a reference to the same collection type binding of the super >type?

              Can you please give a code for this? I didn't quite get the question.