Nick Suwyn
Technical Interview Tips: Year End Hiring Trends and White boarding

With the holidays arriving shortly, and the end of the year just around the corner, there are a couple tips to be aware of while searching for a job. First, the job market isn’t the same as the rest of the year. Just like most industries, year-end activities tend to see a drastic swing, and for a software developer searching for a job the swing is not in his/her favor. Keeping this in mind will help you pace your search and not become discouraged; there is a light at the end of the tunnel! Second, Santa is not going to put a job offer, wrapped and topped with a bow, under your tree just because you left him milk and cookies. While hiring is slow, take advantage of the time in between interviews to hit the books (and the whiteboards) hard.
A Slow-Down in Hiring
As mentioned above, end-of-the-year hiring for software developers tends to grind to a near pause. What’s the reason for this? While different contributors factor into any given scenario, two main components to this halt are that 1) people are getting ready to take longer amounts of time off work than usual and starting something new (such as hiring a new employee) doesn’t flow well with holiday plans, and even more noticeably 2) most teams are at the end of their fiscal year, which means budgets are near depleted and bringing on someone new is out of the question.
That being said, don’t let the pause in companies hiring get you down, and definitely don’t let it slow you down! We all know that what goes up must come down, and in this case, the opposite is true; what goes down will pick back up. Let’s consider the second driving factor in the pause for a minute. Managers aren’t looking to hire many new employees because the fiscal year is at an end and their budgets are rather slim. What do you think happens when the new fiscal year starts? That’s right. Budgets get replenished, new initiatives get brought into development, and job postings come back to graze. In addition, everyone is refreshed from their time off and ready to hit the ground running.
When looking for a job, a slowdown in hiring is never what we want to see. However, the best thing anyone can do in any situation is to glean every grain of positive benefit. The year-end hiring pause is no different; continue networking, applying, and searching for job opportunities, but also make use of this time to level up your technical interviewing skills and work on new projects.
Java Technical Interview Preparation
I had the opportunity to work with a student the other night and help him with some technical interview prep. For this post, let’s call the student “Bob”. In this section, I want to share with you some of the questions I asked Bob, as well as some of the answers and interviewing tips that he gained from our session. To start, I asked Bob some verbal interview questions around Java concepts. Some of the questions he couldn’t answer, some he answered correctly but they could have been better, and some he answered very well. The reason I point this out is because I want everyone to know that we all have areas we struggle in, but we also all have areas we excell in. The goal is to make better, through practice and studying, that which we struggle with, and to highlight what we are great at. Don’t ever let incorrectly answered questions get you down, grow from them!
Question: What are the JRE and JVM?
Answer: JVM stands for Java Virtual Machine and is important because it enables Java applications to be portable. Before Java was released in 1995, programs were written to run on specific operating systems. You can imagine why this is a problem; developers would have to maintain different code for each operating system they supported. With Java, code isn’t written for each specific OS, it is written once and then executed in a JVM which runs on any OS. Hence Java’s powerful catchphrase “Write once, run anywhere”. JRE stands for Java Runtime Environment and is the container in which the JVM runs, as well as other components that set up the environment for a Java application to execute.
Question: How would you go about installing MySQL on a pc?
Answer: Go to the MySQL website, find and download the installer for MySQL Server, run the installer, and then add the directory where it was installed to your PATH environment variable. Additionally, you can set MySQL to run as a service on your pc with Windows.
Question: What is a method?
Answer: A method is one or more lines of code wrapped up and given a name so that the operations can be invoked by the name of the method rather than having to rewrite the lines of code again. Methods allow us to reduce duplicate code and to make code reusable in a modular fashion. You can think of a method like a paper with a set of instructions and a title. Pretend you have a stack of these papers with instructions and titles (each represents a method). When you want someone to follow a specific set of instructions, you just have to say “please follow the [insert name of paper here] instructions”. That way, you don’t have to repeat the instructions each time you want someone to perform a particular task, you reuse them by modularizing them and giving them a name. This is exactly what a method is.
Question: What is a parameter?
Answer: A parameter is a placeholder for a value to be passed into a method. Some methods may take different values and the output of a method will differ based on the values input. For example, if I write a method called multiplyTwoNumbers that has two int parameters, num1, and num2, and returns the product of the two numbers, the return value (the output) will be different based on the numbers entered as the parameters. When I want to invoke the method, I have to supply it with values for each of the parameters. The method will then take the values I supply and perform the operations (lines of code) within the method on those values. Parameters enable methods to be dynamic (generic, flexible).
After asking Bob a few trivia questions, we moved on to the fun part: white boarding.
At first, I asked Bob to write a method that took two Strings, a first name and a last name of an individual and returned a String representing the full name. His first attempt was as follows:
String1 firstName = "Bob"; String2 lastName = "Smith"; fullName(String1, String2) { return firstName " " lastName; }
This is not bad; the desired functionality is clear and without knowing the prompt one can see what he was trying to accomplish. I then gave him the following pointers:
1. For String1 and String2 he does not need the 1 and 2, just String. This is the datatype and does not need to be unique, only the variable name/identifiers need to be unique to their scope (which he did correctly with firstName and lastName).
2. In the method signature, his parameters just have the type String and are missing the names/identifiers. Names/identifiers are important, not only because the lack of them will cause a compile error, but because that is how a method will refer to the values passed into the parameters.
3. In Java, all method signature must have a return type (void if the method does not return anything), therefore String is needed right before the method name.
4. Method names should be a verb to denote an action. This is a commonly accepted convention, not compiler enforced.
5. Because the prompt was only to write a method, the variables firstName and lastName declared above the method are not needed. Just write the method.
6. Lastly, when concatenating the Strings fistName, lastName, and ” ” he needed the + operator.
After these pointers, the correct, resulting code is:
String createFullName(String firstName, String lastName) { return firstName + " " + lastName; }
Then next whiteboard prompt was to write a method that took an array of ints and returned the sum of all the ints in the array. First attempt was again pretty good. The intent is very clear, just a few syntactical changes that were needed. Here is the first attempt:
int arraySum(int[] nums) { int sum = 0; for (i = 0; i >= .length; i++) { [i] + nums = sum; } return sum; }
1. Make the method name a verb. Something like calculateSum.
2. The variable i in the for loop declaration needs a type (int before the i).
3. We can’t just call length, or .length on nothing, what are we trying to find the length of? The array named nums. nums.length.
4. Using the greater than or equals operator (>=) in the comparison will cause the loop to never iterate, this needs to be changed to the less than operator (<).
5. Inside the for loop, we want to set the sum equal to its current value plus the value of the int in the array we are looking at for each respective iteration. That can be written as sum = sum + nums[i]; or shorthand sum += nums[i];
A correct solution:
int calculateSum(int[] nums) { int sum = 0; for (int i = 0; i < nums.length; i++) { sum += nums[i]; } return sum; }
The final whiteboard prompt was to write a method that took an array of ints and returned the sum of all ints that were even. The original solution:
int sumEvens(even[] int) { int sum = 0; for (int i = 0; i < sum.length; i++) { if (even[i] /*is even?*/) { sum += even[i]; } } return sum; }
1. Make sure the parameter type and name are in the right order and that the name of the variable encompasses everything it is, a good example could be int[] nums.
2. In the for loop, in the condition, make sure we remember what we are trying to find the length of, it is not the sum, rather the array; we want to iterate through the array, so we need the length of the array to do that.
3. To find out if a number is even, use the modulus operator, which divides the left operand by the right and returns the remainder. nums[i] % 2 == 0 would result in true if a number is even because an even number divided by 2 has no remainder.
Final results:
int sumEvens(int[] nums) { int sum = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] % 2 == 0) { sum += nums[i]; } } return sum; }
I highly recommend practicing these types of logic challenges when preparing for an interview. A good source of fun practice challenges is http://codingbat.com.
One of the most important things to remember to do while whiteboarding in an interview is to talk through your thought process! Interviewers want to see how you are thinking, how you solve problems. If you are silent, you aren’t giving them what they really want to see. Make sure to practice whiteboarding and talking through your though process out loud so that you are ready to ace it come game time.
Remember, when hiring is slow, utilize that time to improve your skills and practice whiteboarding, building new projects, and studying the technologies on your resume. While Santa may not leave a job offer under the tree for you, you are more than capable of putting it there yourself (wrapping paper, bow, and the works) with the right amount of hard work.