Timeline
When can I apply?
You can apply any time of the year. When we organize the next test (which we usually do several times a year), we will get back to you with the status of your application.
When do I get my test results?
You will be informed on your test outcome 1-2 weeks after you take the test.
Preparing for Software Engineering test
What do you expect to see in my CV?
It should be honest and up to date. Your CV represents you.
What are good learning resources to help me prepare for test and interviews?
We recommend going through TopCoder educational website. We also recommend reading some of these books, although they by far exceed the knowledge needed for passing the test:
• “Introduction to algorithms” by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein
• “Algorithms” by Robert Sedgewick and Kevin Wayne
• “Introduction to Algorithms: A creative approach” by Udi Manber
Can you give me some advice on preparing myself for the test?
Focus on concepts rather than on a form of an algorithm you learn. Try first digging into a problem and solving it by yourself before you read the entire algorithm from these books. Digging into essentials of algorithms helps you to better understand how an author originally came up with a particular algorithm and more importantly it improves your ability to come up with new algorithms, which gives you the edge over others.
What are the areas we can expect at the entrance test? Should I learn AVL trees?
Understanding and solving problems on the test requires rather elementary knowledge in algorithms/programming. However, it may still be hard to find a correct and efficient solution.
You should understand the concept of algorithm complexity and at least know about sorting, binary search, dynamic programming, recursion, and divide-and-conquer techniques.
There is no need to learn complex algorithms for the test. If you do know some of the more advanced algorithms we will definitely enjoy discussing them during interviews.

There are usually 4 programming problems on the test.

Here are some examples:

Programming problem example 01

Two strings A and B are isomorphic if there exists character mapping which replaces characters from A to get B. Rules for character mapping are:
• all occurrences of one character (e.g. ‘x’) must be replaced with the same character (e.g. ‘y’)
• no two different characters may map to the same character
• a character may map to itself
Write a function that returns true if provided strings are isomorphic, otherwise false:

bool AreStringsIsomorphic(char* a, char* b)

The strings are NULL-terminated, with characters from lower case English alphabet ‘a’ – ‘z’.

Examples:

 Input Output A = “brain”, B = “space” true A = “noon”, B = “feet” false A = “aab”, B = “ccd” true

Programming problem example 02

You are given an array of integers, denoted with a of length m, where first number in array is odd and the last number is even. You need to write a function

TreeNode generateTree(int m, int* a)

that will create a N-ary tree from this array with the following properties:
• a) Leaf nodes of the tree are even numbers and inner nodes are odd numbers
• b) Pre order traversal of the tree is equal to the original array
If there are multiple solutions (trees which satisfy above properties) return any of them. N could be any integer number. Tree node is represented as

struct TreeNode
{
int value;
TreeNode* sibling; // Pointer to the next sibling, or NULL if next sibling does not exist
TreeNode* firstChild; // Pointer to the first child, or NULL if this is leaf
};

sibling and firstChild should be set to NULL if corresponding nodes don’t exist.

Example:

 Input Output m = 9 a = 3, 1, 4, 48, 2, 5, 3, 6, 18

Given image is showing one possible solution. Gray nodes are inner nodes of a tree and they have odd values inside. Leaf nodes (the ones that don’t have child nodes) are white and they have even values. Dotted lines represent sibling pointers and children pointers are represented with full lines.

Tree pre-order: Display the data part of the root (current node). After that, recursively call traversals for root children in given order: traverse the first child subtree by recursively calling the pre-order function; traverse the second child subtree by recursively calling the pre-order function; etc.

Pre-order: F, B, A, D, C, E, G, I, H.

Programming problem example 03

You are given an array a of length n = 2m. Write a function that finds length of the minimal period T of array a.

int MinPeriod(int * a, int n)

Number T is a period of array a, if repeating first T elements of array a several times gives exactly array a, without any extra elements.

Examples:

 Input Output n = 8 a = {2, 5, 3, 4, 2, 5, 3, 4} 4 n = 8 a = {2, 5, 3, 2, 5, 3, 2, 5} 8

Programming problem example 04

Single linked lists contain nodes which have a data field as well as a 'next' field, which points to the next node in list of nodes.

Node is defined as

struct Node
{
char data;
Node* next;
};

Last node in list has next pointer equal to NULL.

Write a function

void reverseNodes(Node** head, int indexA, int indexB)

which should reverse order of nodes in list, starting from node on position indexA until node on position indexB.
Head node is on position 1.

Example:

 Input Output ‘a’ -> ‘c’ -> ‘x’ -> ‘q’ -> ‘e’ -> ‘2’ indexA = 2 indxeB = 4 ‘a’ -> ‘q’ -> ‘x’ -> ‘c’ -> ‘e’ -> ‘2’

Am I supposed to bring anything to the test?
No, you don’t have to bring anything. The test is in pen and paper format. There are also refreshments which you may enjoy during the test.
Be relaxed and patient. Listen carefully to the interviewer and follow their instructions. Don’t rush. We encourage you to ask questions.
Do you ask riddles on interviews?
We don’t ask riddles on interviews. The problems on the interviews are pretty similar to the ones on the test. The interviews themselves are interactive and require more versatility and adaptability.
What if…
If I fail a test or an interview, can I apply again?
Yes, we encourage all candidates that did not get an offer to apply again. Some very valuable members of our team didn’t make it at first.
I am a super star in my current environment. Look at my CV! Do I really need to go through the same process as fresh college graduates?
We shall listen to your specific needs while going through the hiring process, and try to meet your expectations as much as we can. However, we need all our candidates to go through essentially the same process of test and interviews, to be able to assess and verify a wide spectrum of their qualities.
Preparing for Data Science test
What are good learning resources to help me prepare for test and interviews?
Besides what can be taught during the studies, good resources, among many others, are:
When it comes to programming/technical languages needed, there are many tools which would enable you to finish the test successfully, most obvious ones being Python, R, MATLAB, SQL, etc. There is an extraordinary amount of good literature and courses for each of these at the market, we wouldn’t favor any of them here.
Can you give me some advice on preparing myself for the test?
Be curious. Download datasets interesting to you (there are many good resources for these, e.g. kaggle.com), ask questions and try to draw some conclusions. Focus on answering the question you asked rather than doing some complex analysis (if there is a trade-off between these). In order to do this, it is important to pick a question which generally interests you – the problem is much harder if you’re not having fun in the process.
What are the areas we can expect at the test?
There are two parts of the test – eliminatory and exploratory. Exploratory part is completely up to you – you have the freedom to implement any techniques you are comfortable with. For the eliminatory part, it consists of a set of specific questions for which you need basic statistical skills in order to solve them.
Would I fit?
I have just finished college, how can I keep up with all those experienced folks?
In our team we have various people, from fresh graduates up to very experienced. Some of our best folks joined as fresh graduates.
I heard that you're only hiring "kids" with no experience.
Knowledge and skills to contribute to the team are highly valued. Age doesn’t matter. We are able to recognize qualities of experienced folks. We recruit experienced people as well as the others.
Is there any age limit for applying?
No, there isn’t any age limit for applying. For internship, you need to have passed almost all exams at the first year of CS or equivalent university degree (e.g. EE, math…).
I'm no expert in computer science/computer engineering. Do I stand any chance?
Yes, you have a chance. Some of our best folks have non-CS/CE backgrounds. If you show skills and potential you’ll have an opportunity to grow and learn when you join the team. However test/interviews may require learning some of the stuff that you’ve missed. Take a look at answers to the following questions to see what you need to learn. Also, you could apply for one of our non-SE positions, such as Data Scientist, where the skillset asked is skewed towards statistics/numerics (though you still need to know how to code).
I don’t have any particular experience about the domains you listed and technologies used. Should I apply?
Experience is welcome, although not required. If you feel that you have some relevant qualities (skills, capacity, willingness), you should apply.
Internship specific
Am I going to be assigned a mentor during my internship?
What about the salary? Am I going to be able to rent an apartment and to afford to live in Belgrade for the duration of my internship term?
You will be able to afford an apartment during your internship. We will do our best to assist you in finding your accommodation.
Hiring process (format)
How long does the test take?
The test for software engineering lasts for 3 hours. For Data Science related positions, the test is sent over e-mail and candidates are given two days to finish it.
Is it true that I have to have a score over 50% to pass the test?
More than 50% is usually considered a decent result, but does not guarantee that you will pass the test.
Why is the entrance test so difficult?
It is difficult on purpose, to enable variety of candidates to scale on the test.
The test is the same for all candidates, for experienced industry folks and fresh university graduates. The test has to distinguish good candidates from very good ones.
I heard you ask some pretty tough questions on interviews, like “the structure of windows registry” or “partial differential equations of higher order”. Why do you need this?
We may ask such questions only if you claim some expertise in the area.

MDCS Team