Hiring guide for Q Engineers

Q Developer Hiring Guide

Q is a programming language developed by Arthur Whitney, primarily for use in kdb+ database system. It is a vector-based language that allows developers to manage large amounts of data efficiently. Q is interpreted and dynamically typed, which means it can execute commands without the need for compilation. It also supports functional, procedural and query programming paradigms making it versatile for various applications. Its syntax is quite compact and expressive, allowing complex tasks to be performed with minimal lines of code. Q's primary application area includes financial industry where high-performance time-series analytics are required.

Ask the right questions secure the right Q talent among an increasingly shrinking pool of talent.

First 20 minutes

General Q app knowledge and experience

The first 20 minutes of the interview should seek to understand the candidate's general background in Q application development, including their experience with various programming languages, databases, and their approach to designing scalable and maintainable systems.

How would you define a list in Q?
In Q, a list is defined by enclosing the elements in parentheses. For example, (1,2,3) is a list of integers.
What are the basic data types in Q?
The basic data types in Q include int, float, symbol, timestamp, timespan, date, datetime, boolean, and guid.
Describe the difference between a dictionary and a table in Q.
A dictionary in Q is a mapping from a list of keys to a list of values. A table in Q, on the other hand, is a collection of named columns, which is essentially a dictionary of lists.
How would you create a table in Q?
You can create a table in Q using the table keyword. For example, `trade:flip `time`sym`price`qty!(`timestamp$();`symbol$();`float$();`int$())` creates an empty trade table.
What are the different types of joins in Q?
Q supports several types of joins including inner join (`ij`), left join (`lj`), union join (`uj`), and as-of join (`aj`).
The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

What you’re looking for early on

Does the candidate have a strong understanding of Q programming language?
Has the candidate demonstrated problem-solving skills?
Is the candidate able to work effectively in a team?
Does the candidate show a willingness to learn and adapt?

Next 20 minutes

Specific Q development questions

The next 20 minutes of the interview should focus on the candidate's expertise with specific backend frameworks, their understanding of RESTful APIs, and their experience in handling data storage and retrieval efficiently.

How would you perform a left join in Q?
You can perform a left join in Q using the `lj` function. For example, `t1 lj t2` performs a left join of tables t1 and t2.
Describe the difference between each and peach in Q.
Both `each` and `peach` are used to apply a function to a list. The difference is that `each` applies the function sequentially, while `peach` applies the function in parallel, taking advantage of multiple cores.
What are the different types of file handles in Q?
Q supports several types of file handles including file name (symbol), file descriptor (integer), and HTTP file handle.
How would you read a CSV file in Q?
You can read a CSV file in Q using the `0:` operator. For example, `table: ("SSD";enlist ",") 0: `:file.csv` reads a CSV file into a table.
Describe the difference between sync and async communication in Q.
In sync communication, the sender waits for the receiver to process the message and send a response. In async communication, the sender does not wait for a response and continues execution.
The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

The ideal back-end app developer

What you’re looking to see on the Q engineer at this point.

At this point, a skilled Q engineer should demonstrate strong problem-solving abilities, proficiency in Q programming language, and knowledge of software development methodologies. Red flags include lack of hands-on experience, inability to articulate complex concepts, or unfamiliarity with standard coding practices.

Digging deeper

Code questions

These will help you see the candidate's real-world development capabilities with Q.

What does the following simple Q code do?
sum 1+til 10
This code calculates the sum of the numbers from 1 to 10.
What will be the output of the following Q code?
This code will output a list of five 2's.
What does the following Q code do with the array?
x:1 2 3 4 5; x[2]:100; x
This code replaces the third element in the array x with the number 100.
What does the following Q code do in terms of threading?
.z.ts:{show x+1}; \t 1000
This code sets a timer that increments the value of x by 1 every second.

Wrap-up questions

Final candidate for Q Developer role questions

The final few questions should evaluate the candidate's teamwork, communication, and problem-solving skills. Additionally, assess their knowledge of microservices architecture, serverless computing, and how they handle Q application deployments. Inquire about their experience in handling system failures and their approach to debugging and troubleshooting.

How would you implement exception handling in Q?
You can implement exception handling in Q using the `@[; ;]` construct. For example, `@[{x+y}; 5; `NaN]` returns `NaN` if the function `{x+y}` throws an exception.
What are the different types of attributes in Q?
Q supports several types of attributes including sorted (`s`), unique (`u`), parted (`p`), and grouped (`g`).
How would you set an attribute on a list in Q?
`attribute`list sets an attribute on a list. For example, `g`sym sets the grouped attribute on the sym list.

Q application related

Product Perfect's Q development capabilities

Beyond hiring for your Q engineering team, you may be in the market for additional help. Product Perfect provides seasoned expertise in Q projects, and can engage in multiple capacities.