My story of an interview at IB IT (Java developer, investment bank) in London with examples of typical tasks

    It so happened that I wanted to become a programmer while still studying at a university in Moscow, but I already became outside of Russia and not immediately - the path was long and thorny. I went to a lot of interviews (at first I was looking, then they were already looking for me), delved into the subtleties of work and thought about the topic of how to become a good programmer.


    One of the aspects that is relevant throughout the career is job search and the passage of the interview. I myself conducted very few interviews (4-5), but visited a large number of them (> 100). I had a 3-4 job search period for the last ~ 7 years, when I went to an interview for a month or two, sometimes 1-2-3 times a day.


    In this article I would like to share the experience of the interview, give some sort of systematization, how it looks and happens, what to prepare for.


    What I would be interested to know in the comments - as is the case with others, especially in Moscow / Russia, there are certainly differences with Europe.


    Based on my personal experience, talking with colleagues, reading forums, books and so on. I would say this - this is my subjective opinion on the situation as a whole, this post claims to be complete information and that it covers most, if not all, aspects. Where my opinion, I write, in my opinion. For the rest, I claim objectivity.


    Almost all my experience is interviewing IT at European financial companies for a java (senior) developer position, mainly in London. There is no web (in any form, front / end-backend), no integration, no work for the customer (by the type - there is CRM and the company implements it in banks), Amazon, Facebook, Google are also not represented - I do not know how there and not really strive, I guess. My experience starts from a simple programmer and ends with senior developer. Team / techlead / manager - no.


    About the interview in general


    The interview process is statistical, i.e. - we are going wherever it is interesting, something will not work out simply because we are not lucky, we have already hired, some other considerations of the momentum or experience are not enough, or simply a better candidate has been found. Those. It is very difficult to pass an interview if it is only one company position. In this sense, I think Google is problematic - he is so alone. There are many banks involved in similar things, not in one, because in the other there is an interesting project, the day will be successful, etc.


    An interview is a game according to its own rules, which it is customary to observe, knowledge of these rules helps to stand out the expectations and the process of preparation and passing. In the end, it shows that you know how to play by the rules and accept them, know how to take into account the customs of the team. No one writes sorting manually, and even synchronized is unlikely to be written, let alone notify / notifyAll. No less knowledge of the internal structure of the hashmap is needed - but this is one of the most popular questions - 70 percent of interviews cannot do without this, with this question only a contract between equals and hashcode can argue. On the other hand, it speaks about the overall preparation of the candidate, how well he approaches the work task (and the search for work is also a kind of small project).


    Of administrative issues


    Forget waiting for an answer. No answer - no answer.
    Sometimes it seemed to me that it was their rule of good tone — they did not respond if they were not interested. This is an example with recruiters - if you answered him that work is not needed now, then this is a kind of weakling. For they themselves, of course, do not label, if they do not need, logic - what time to spend. In general, recruiters, these are amazing people, once it began to seem to me that they are like sirens - it’s worth answering and that’s all, you’ve already been to an interview that you wouldn’t have. The ability to clearly say no, or articulate what I need, is a good skill. I trust agents, but never trust. I take only the facts, and those that can be proved from the category “this is a new project, everything is very good there” - this is air shaking. And if "they are ready to raise the salary by 10 thousand"


    Some curious information - the agent (agency) gets a good part of the annual salary of a successful candidate (and past a probationary period). It seems that the company has a separate budget for agents, i.e. If you find the same job without an agent, then, most likely, you can hardly count on a large salary. I don’t quite understand why this may be different in small companies.


    From agents, of course, there is a sense, sometimes they are useful and good. The fact is that some very interesting vacancies came to me only through agents. But the opposite is true, in spite of popular opinion, work without an agent can and should be found. Especially if you are interested in working in a less understandable area - we take the top 20 companies around the world / country in this industry and go to their sites. So I found my first job in London, which I was very pleased with.


    It is also worth mentioning that it is necessary to prepare for the interview, the form at the beginning of the race is significantly different after a month of interviews. Questions are repeated, simple puzzles are written simply, immediately and quickly. The story of his experiences, strengths, projects and plans for the future rebounds from the teeth. At some point, I wanted to carry a poster with the architecture of our system, so that it was more convenient to tell what I was doing.


    In general, always and everywhere - the average level does not interest, it is necessary to be above the average, including, and above their abilities, in the sense that it is necessary to give everything to the fullest.
    Financial IT is a huge bureaucracy, and we must be able to exist in it, yes, resources are spent on it and everything is inefficient, but these are the rules and sometimes there is simply no better option. Of the benefits - there are interesting, very interesting projects, bureaucracy and business analysts do not really get and very good money.


    I will not consider the preparation for the interview at all. We believe that this is a past stage, the necessary knowledge is there, and there are invitations for an interview.


    Interview Stages


    The preliminary stage is a telephone interview.


    Often with an agent, they will ask basic information from a resume, whether they really work now where you work, salary expectations and current salary (this is a separate topic - I’ll tell you below), visa status and how quickly you can get to work. The agent, as a rule, will tell about the company and about the vacancy (but alas, only general information) and ask if I am interested in this and in general what I'm looking for. They ask seriously about motivation, why you are looking for, changing your job.


    If the conversation is directly with a company representative, then the first telephone conversation may be with HR or immediately with a team representative in which they hire, as a rule, a hiring manager, i.e. someone is pretty blue, who determines and filters out the right candidates, and whether it is worth spending energy on a technical interview.


    The advantage is that you can immediately find out more information about the project and refuse, because not interested, or vice versa even more interested in understanding that it is very interesting.


    There were a few cases (but they were stable) when everything starts hard already at the first interview - hello, hello, well, let's go through JVA, algorithms, and so on. Just 40-50 minutes of those questions in the spirit of the computer science exam.


    About money


    I have had a taboo on this topic for quite a while - I didn’t want to know how much my colleagues received - it would demotivate me and lower my self-esteem. Then he changed his point of view on the opposite - hiding salary is good for the employer, therefore, among colleagues, I don’t mind sharing figures, but not just acquaintances. For London - you can look at the glassdoor and multiply by 1.5. for some reason, the upper part of the salaries is not represented there, although this is the sweetest part and, importantly, is quite achievable. In any case, a programmer in London at the bank is very, very good money and the standard of living is higher than in Moscow (this is my personal opinion, based on my ideas about the standard of living and needs, as the cities themselves impose restrictions, in Moscow, I it seems, I would not have thought about a mortgage, in London, Europe, 2% per annum - norms,


    Returning to the interview, I understand that the employer wants to see a candidate with a certain amount. I would say that it is better to answer at some intervals, but we must put it reasonably so that it does not turn out later, everything is fine, but I want more money. In general, I would say that + 10-15% of the current salary is the average option. A salary increase of almost doubled is also possible and an annual increase of 10% at the current place is also, no matter what the agents say. Let me explain, on the one hand, the more expensive the agent sells, the more he will receive, but the priority is to sell you at all, and for how much, as it will, 5-10% of the difference in your salary for an agent is not such a big difference in that the agent himself will get his hands (this assumption).


    Interview Formats


    Org questions


    I had an interesting observation of how the interview itself was organized, where it was held, the office itself and the meeting room. Confirmation of the date, time, place - rarely when just by phone, but it was like that. As a rule - the letter. Often from an agent with a minimum of information. The most pleasant thing is a well-formatted letter, with names and positions, with whom the meeting is and what is interesting - with indication of the negotiation room (which means they know how to plan in advance, and not to look for a free conversation 5 minutes before the interview), agents also often send an interviewer's interview - save me time, because I always look at the profile of the person with whom I potentially have to work. If there are his articles - I read them.
    By the way, if several people are announced, it’s normal to expect that all of them will not come if the most important of them delegates this to someone. But, IMHO, it's nice when all the declared guests come.


    Then everything is standard, he came in, reported to the reception desk, followed you down or sent one to the meeting room. As a rule, an employee comes down behind you and leads you yourself. Time in the elevator and on the road can also be used for negotiations.


    And by the way - how the company is like recruiting candidates is also an indicator. An interview is a two-way process, as a company, some people approach this process, how qualitatively they will interview, this is also a characteristic of the company / team. This, of course, is subjective, it seems to me that it is not the best choice to ask all the Collections interfaces at the level, you know / do not know, it is much more interesting to choose a topic and develop it further, the very same hashMap itself - what are the differences from CHM, how can you keep map in memory, ask about the access time, what happens during rehashing, and further develop the topic of how items are stored in collision lists (list, tree, which tree, etc.))


    Also, if the interview was not successful, they refused, but it seems to you that you performed well - this is also no reason to be upset, if you don’t come up and there is no spark, then it’s better not to start. In this sense, I like the idea that if it does not work out, maybe I don’t need to go there. I also like the approach (google by the way) - it’s better not to hire a good employee than to hire a bad one. The same is true for the candidate - it is better not to get into a good company than to get into a bad one.


    I was curious about two things - the actual start time of the interview (I always came 10 minutes before the start) and what pictures weigh on the walls, the design of meeting rooms - as a rule, these are meeting rooms for bank customers and they invest a lot of money in their design.


    There is such a moment - an interview for 2 hours with 4 people is announced, and after an hour you are thanked. It is clear that you did not pass. I don’t know how to relate to this, it’s not that - I’m offended, I’ve gotten ready, let them listen (or even if I’ll get the practice of interviewing) - everything is clear and yes, tough; rather, it’s probably that it was a bad performance, and if you continue, everything will be better. But here, again, logic means that it is better not to hire the good than to hire the bad.


    Phone


    The most basic, as I described, telephone conversation. Technical questions can be, but something very difficult or complex is obviously difficult to ask. Implementation details in places quick sort are unlikely to ask, and if they do, they need to run, because, IMHO, this is inadequate.


    Online


    Further, my favorite recently (it was not 5-7 years ago or was less) - online programming like hackerrank or online tests.


    Tests with a choice of answer from the list are rarely and, in my opinion, rarely does the test adequately reflect the candidate's preparation, although I came across one, just wonderful, 12 minutes, 12 rather intelligible questions. Therefore, I think this is such a coarse filter.


    Online programming with the interviewer looks like this - go to the site, log in, and you have an online IDE in front of you, which is visible to you and the interviewer. He gives you tasks, and you immediately write code, run it, etc. Only once I met, when it was just a Google Doc, everything else is quite a simple online IDE.


    Homework


    Old and good tests, when a description of the problem is simply given, and you need to send a solution - sometimes for a while, sometimes simply, within 1-2-3-4 days.


    According to the format of tasks - homework, as a rule, very intelligible and meaningful. This is either algorithmically something (something like finding a path in a maze, or a small system according to calculations of the average value from the price stream and the storage of the most recent, there is a little need to design classes and write everything with an emphasis on low latency) or, as I I call it, on the OOP - there is a simple domain, you just need to write a program that displays the task. For example, we have a hospital, there are patients in it, each patient is given a certain list of drugs, drugs interact with each other according to certain rules causing a different effect (if you take A and B, then the patient will get sick X, if patients with D disease have not been given drug and he will die). We need to write a program which according to a given list of drugs gives the result of applying them to the list of patients (each of which has its own original disease). Another example is to write an ATM (attention to the atomic nature of transactions). Another one is to write a game of rock paper scissors.


    On-line programming for a while (without human intervention from the other side) - as a rule, this is something algorithmic from traversing a tree, working with arrays - everything that geelforgeeks has is often more subtle. Unfortunately, the solution of many problems depends on whether she met before or not, often the tasks are complex and taken (and formulated) in open sources, it seems to me that this is not a very good choice of tasks, the interviewers are unlikely to want to test the skills of using Google.


    On-line programming with the interviewer is also an interesting look, the tasks are much simpler, but the stress and unusual nature of the IDE are added, the main thing here is not to be silent, to reason and not to rush to write the solution right away. Think and estimate. An example of a task that can be - a set of values ​​is given, and each value is given a probability. It is necessary to write a program that gives these values ​​with a given probability. In my opinion difficult, but feasible.
    Another example - there is a long operation that takes one argument as input, there are many threads that call and do this operation. Write a wrapper that would optimize calls (caching should be done with emphasis on multithreading, so that if the second thread calls an operation with the same value and operation in the calculation process, then you do not need to run the calculation again, you just have to wait). The devil is known to be in the details and extreme cases.


    More about agents - sometimes it happens that agents know, as it were, that they will ask and can describe it somehow. This is a gray area, on the one hand it is good to know whether the interview will be purely technical or just talk, what is expected of you, etc. Its OK. But to say specific tasks, I think this is not very good, especially with regard to the company, also, the candidate will look very bad if he magically wrote the solution to the problem right away, but could not explain it. Therefore, I would prefer not to use such tips.


    Onsite interview


    • pair programming, essentially the same online programming, only the interviewer is not on the phone, but on a chair nearby.
    • homework - give the task, computer, an hour of time, write - call.
    • Code, design on paper \ board.

    Just a conversation.


    By the very conversation - 50/50 will be 1 / many interviewers, in general, it's not bad when there are several at once, and it is interesting when it looks like a cross-examination - everyone asks a lot.


    Example of typical tasks / questions


    Knowledge of the decision does not guarantee anything, as well as inaccuracies, incompleteness of the decision, the answer.
    The task itself, the question is the beginning of a conversation on the topic. For example, how to merge two sorted arrays. Then, if we have more arrays than 2. What is the complexity, how to optimize, and what if we change this and that. In my opinion, this is a very good approach - you are not surprised by a complex algorithm, but something simple is given, and then the conversation begins on a topic, a complication.


    Java specification


    • equals and hashcode contract, what will happen if you break
    • how hahsmap works With varying degrees of detail? starting from how hashcode is used (what happens if you break contact with equals) to - CHM, copy on write array, as arranged inside, blocking read / write, segments locks, concurrent level.
    • volatile (memory barier), happens before semantic
    • java 7 - chm, atomics, nio (?)
    • java 8 - streams, lambda
    • GC (I think I can do presentations on this topic already)
    • question about volatile array, volatile int [] arr; arr [2] = 2; int j = arr [2];
    • double checking locking (and why it should not be used)
    • I did not understand what interest was, but I saw it somewhere, as an example of an interesting question:
      Object [] o = new Object [10] (); VS Object b = new Object [10] (); (here I don’t know the answer, if someone reads - help with this question)
    • notify notify All, producer consumer and when you can \ cannot use notify instead of notifyAll

    Algorithms


    normal hard


    • checking the balance of parentheses ({[- check-for-balanced-parentheses-in-an-expression
    • calculation expression (given a string with numbers, + - * / brackets to calculate the value) - expression-evaluation
    • BFS / DFS - bfs-vs-dfs-binary-tree
    • find the path in the graph from vertex to all, the smallest between 2 vertices - find-if-there-is-a-path-between-two-vertices-in-a-given-graph
    • sort stack - sort-stack-using-temporary-stack
    • shuffle an array of numbers in random order

    complicated


    • searching for the largest identical substring in two strings - longest-common-substring-java
    • finding the smallest suffix of the word, adding it to the word will result in a palindrome - Longest palindrome prefix
    • finding connectivity components in the graph (union find)

    Challenges


    easy


    • Fibonacci numbers, (iterative, recursive, tail recursion with examples)
    • check the number for simplicity, print all prime numbers less than N
    • fuzz buzz (with 2 comparisons it's more interesting)

    the norm


    • ring buffer, thread (non) safe, (non) blocking.
    • producer consumer, different notify / notifyAll when you can replace one with another.
    • make queue -> blocking queue through wait notify
    • thread safe caching heavyweight results
    • calculate VWAP (with sliding window, global)
    • sliding mean / avg
    • find the largest triangle in the array of numbers
    • all numbers are numbers, all numbers are numbers
    • find a common ancestor in a tree (with a known-unknown depth)
    • counting bits in a number is the average number of iterations, the average answer.
    • calculate the longest sequence of the same character in a string (the string was originally given, the string as a stream).
    • Various options with an array of stock prices and buy-sell operations (buy only once, N times) - you need to maximize profits
    • find all the same rotation strings - check-for-string-rotation-in-java /

    difficult (from the category, it is not clear who made them up and for whom)


    • search for an exit in the maze - maze
    • knights on a chessboard - Knight's tour, how many moves it takes to reach the cage i, j
    • word search in the matrix of letters - leetcode-word-search-java
    • dykstra (recalculate only those who are affected, use for this the difference between the current estimates of the peaks and new).

    My favorite tasks are dynamic programming. They were asked a little, but once they asked Pts and Pts in a steep office for Pts to have a steep position and, it seems to me, they took me precisely because I solved this problem, because there was nothing else difficult there.


    • paint house colors - leetcode-paint-house-java
    • there is an array of ceiling and floor heights. At every step we can stay on the floor or ceiling, how to build a beam of maximum length.
    • write a throthler to publish the price stream; a simple option is there is a price stream, we should publish no more than once every 1 second. throttling vs conflation.
    • to design as brute to force passwords.
    • There are 2 texts (each with 1GB), one for each user. Users can exchange only <1000 bytes, how to understand whether their texts are the same in 99% of cases (it is important that this does not work on 99% of texts, but in 99% of cases comparing bast two texts). It's easy to talk, because a complete formulation of the problem - how many bits of information are needed, so that the probability of success is 1-epsilon - this is already a big task not for an interview (and not only for the programmer, but also for the mathematician).

    OOP


    • write a program that would emulate the library
    • ATM (ATM)
    • hospital - there are patients with diseases, there are medicines that cure diseases and have certain side effects, emulate example X drugs on Y many patients.
      organize a data storage system for the navigator (store a map of the roads and houses in essence). estimate the number of indices, the number of intersections.

    Some interesting math


    • max square triangle inscribed in a circle \ square.
    • what is the probability that a random triangle will be obtuse
    • average waiting time for the bus (the bus runs 3 times per hour on a schedule \ randomly)
    • trains depart from the platform to the east and west with the same frequency. A man comes to the platform and gets on the first train. The wife lives in the east, the mistress in the west - for some reason it turns out that he often goes to his wife - how is that? ..
    • for a given volume, find a cylinder of maximum / minimum area
    • there is a random number generator, it can be used only once. how to generate two random (natural) numbers.

    General design questions


    • the application is stuck - what are we going to do
    • how to profile, watch the memory
    • how do you test your app
    • Tdd
    • SOLID
    • Today's popular theme is microservices.

    Resources to prepare


    • leetcode
    • hackerrank
    • interviewbit
    • geeksforgeeks
    • and many many others like them (project Euler yet)
    • glassdoor
    • google
    • practice-practice-practice and have fun!

    Feel free to ask your colleagues to interview you, and enjoy all that you do, including interviews and job search.


    Also popular now: