Cool things: Automatic Online Interview Questions with Janino

Lately I wrote about interview questions, specifically about asking how to write a String reverser method. When searching for a job as a PR-consultant my girl friend was sent a PDF to answer questions - which I guess the company uses to gather fresh ideas - and she had to send the answers back written in the PDF. This got me thinking.

If you have lots of candidates for a programming job, screening them online might safe you some time. You could ask the candidates to write some code, for example "to reverse a String". How do you determine if the answer is correct? Write a unit test. How do we execute code the candidate entered into a form? Just use a compiler. Janino is a Java compiler which can compile Java source code that it reads from a String:

import org.codehaus.janino.SimpleCompiler;

public class Evaluator {
  public static void main(String[] args) {
    String source =
        "import java.util.*;\\n" +
        "public class MyReverser implements Reverser {\\n" +
        "  public String reverse(String str) {\\n" +
        "    return new StringBuilder(str).reverse().toString();\\n" +
        "  }\\n" +
    try {
      SimpleCompiler compiler = 
         new SimpleCompiler("Test", new StringReader(source));
      Reverser reverser = 
         (Reverser) compiler.getClassLoader().loadClass("MyReverser").newInstance();
    } catch (Exception e) {

You present an input form, protected with a token you've sent the candidate. Making the job easier, you can provide a syntax highlighting editor like codepress. When he enters the code, Janino compiles it, runs a JUnit or TestNG test and tells the candidate if his code is correct or not. Obviously people will cut and paste code into the box when you ask for the answer to a simple problem like string reversal (Google is just one click away). But asking the candidate a more tricky question, which he cannot google might work. Like ask them to write an elevator simulation (state machine with several elevators) and test the result with a unit test.

Even better you could also make them write code to satisfy a Fitnesse story. With fitness it's easy to add further constraints to the test and you can ask the candidate to extend the test with constraints he considers necessary. Make him write his tests too 😉

The nice thing with Java, compared to Ruby and PHP, is that Java has a fine grained security concept. With a Java security manager you can make this application safe by preventing access to file and system resoures and still execute the code the candidate entered into the form. The same goes for other languages on top of the VM. So for asking Ruby questions you can use JRuby.

Hope this gives you some ideas about asking interview questions online.

Thanks for listening.

Stephan Schmidt Administrator
CTO Coach , svese
Stephan is a CTO coach. He has been a coder since the early 80s, has founded several startups and worked in small and large companies as CTO. After he sold his latest startup he took up CTO coaching. He can be found on LinkedIn or follow him in Twitter.
follow me