Mi historial de entrevistas en IB IT (desarrollador Java, banco de inversión) en Londres con ejemplos de tareas típicas

Dio la casualidad de que quería ser programador mientras aún estudiaba en una universidad de Moscú, pero me convertí en uno que ya estaba fuera de Rusia y no de inmediato: el camino era largo y espinoso. Fui a muchas entrevistas (al principio estaba buscando, luego ya me estaban buscando), profundicé en las complejidades del trabajo y pensé en cómo convertirme en un buen programador.


Uno de los aspectos que ha sido relevante a lo largo de mi carrera es encontrar un trabajo y pasar por entrevistas. Yo mismo realicé muy pocas entrevistas (4-5), pero visité un gran número de ellas (> 100). Tuve 3-4 períodos para encontrar un trabajo durante los últimos ~ 7 años, cuando fui a una entrevista un mes o dos, a veces 1-2-3 por día.


En este artículo, me gustaría compartir la experiencia de pasar la entrevista, dar una especie de sistematización de cómo se ve y qué sucede, para qué prepararse.


¿Qué me interesaría saber en los comentarios? Como sucede con otros, especialmente en Moscú / Rusia, probablemente haya diferencias con Europa.


Basado en mi experiencia personal, hablando con colegas, leyendo foros, libros, etc. Yo diría esto: esta es mi opinión subjetiva sobre la situación en su conjunto, esta publicación pretende ser información completa y que cubre, si no todos, la mayoría de los aspectos. Donde está mi opinión, escribo en mi opinión. De lo contrario, pretendo ser objetivo.


Casi toda mi experiencia ha sido entrevistar a TI en compañías financieras europeas para el puesto de desarrollador de Java (senior), principalmente en Londres. No hay web (de ninguna forma, front / end-end-end), no hay integración, no hay trabajo para el cliente (por tipo, hay CRM y la empresa lo implementa en bancos), Amazon, Facebook, Google tampoco están representados, no sé cómo Realmente no estoy luchando allí, supongo. Mi experiencia comienza con un programador simple y termina con un desarrollador senior. Team / techlead / manager - no.


Sobre la entrevista en general


El proceso de la entrevista es estadístico, es decir. - Servimos en todas partes donde es interesante, algo no funcionará simplemente porque no tenemos suerte, ya hemos sido contratados, algunas otras consideraciones del mercado o la experiencia no son suficientes o simplemente se encontró un mejor candidato. Es decir es muy difícil pasar por una entrevista si este es solo un puesto en la empresa. En este sentido, Google me parece problemático: está tan solo. Hay muchos bancos involucrados en cosas similares, no en uno, por lo que en otro hay un proyecto interesante, el día será exitoso, etc.


Una entrevista es un juego de acuerdo con sus propias reglas, que se acostumbra a seguir, el conocimiento de estas reglas ayuda a establecer expectativas y el proceso de preparación, aprobación. Al final, muestra que puedes jugar según las reglas y aceptarlas, puedes tener en cuenta las costumbres del equipo. Nadie escribe las clasificaciones manualmente, e incluso sincronizado es poco probable que tenga que escribir, por no mencionar notificar / notificar a todos. Del mismo modo que es poco probable que se necesite un conocimiento detallado del dispositivo interno de hashmap, pero esta es una de las preguntas más populares, el 70 por ciento de las entrevistas no pueden prescindir de él, solo el contrato entre iguales y hashcode puede discutir esta pregunta. Por otro lado, esto indica la preparación general del candidato, qué tan bien se acerca a la tarea de trabajo (y la búsqueda de trabajo también es una especie de pequeño proyecto).


De cuestiones administrativas


Olvídate de esperar una respuesta. Sin respuesta, la respuesta es no.
A veces me pareció que esta es su regla del buen gusto: no responden si no están interesados. Este es un ejemplo con los reclutadores: si le respondiste que el trabajo no es necesario ahora, entonces es como un debilucho. Para ellos mismos, por supuesto, no mutilan, si no lo necesitamos, la lógica es que se debe perder el tiempo. En general, los reclutadores son personas increíbles, una vez que comencé a pensar que eran como sirenas, vale la pena responder y eso es todo, ya estás en una entrevista a la que no asistirías. La capacidad de decir claramente no o de formular lo que necesito es una buena habilidad. Creo en los agentes, pero nunca confío. Solo tomo los hechos, y los que se pueden probar, de la categoría "este es un proyecto nuevo, todo es muy bueno allí" - esto es choque aéreo. Y si "están listos para aumentar sus salarios en 10 mil", entonces esto ya es algo :-)


Alguna información interesante: un agente (agencia) recibe una buena parte del salario anual de un candidato exitoso (y pasado el período de prueba). Parece que la compañía tiene un presupuesto separado para agentes, es decir Si encuentra el mismo trabajo sin un agente, lo más probable es que no pueda contar con un salario más alto. No entiendo bien por qué es así, tal vez en pequeñas empresas es diferente.


Por supuesto, hay un sentido de los agentes, a veces son útiles y buenos. El hecho es que algunas vacantes muy interesantes me llegaron solo a través de agentes. Pero lo contrario es cierto, a pesar de la creencia generalizada de que el trabajo sin un agente puede y debe encontrarse. Especialmente si está interesado en trabajar en un campo menos claro: tomamos las 20 principales compañías de todo el mundo / país en esta industria y vamos a sus sitios. Así que encontré mi primer trabajo en Londres, con el que estaba muy satisfecho.


También vale la pena mencionar que debe prepararse para la entrevista, el formulario al comienzo de la carrera difiere significativamente después de un mes de haber pasado la entrevista. Las preguntas se repiten, las tareas simples se escriben de manera simple, inmediata y rápida. La historia de su experiencia, fortalezas, proyectos y planes para el futuro rebota en sus dientes. En algún momento, quería llevar un póster con la arquitectura de nuestro sistema, para que fuera más conveniente contar lo que estaba haciendo.


En general, siempre y en todas partes: el nivel medio no está interesado, debes estar por encima del promedio, incluidas y por encima de tus habilidades, en el sentido de que debes dar lo mejor de ti.
La TI financiera es una gran burocracia, y debemos poder existir en ella, sí, se gastan recursos en ella y todo es ineficiente, pero estas son las reglas y, a veces, simplemente no hay una mejor opción. De las ventajas: hay proyectos interesantes, muy interesantes, la burocracia y los analistas de negocios no obtienen mucho y muy buen dinero.


No consideraré los preparativos para la entrevista en absoluto. Creemos que esta es una etapa completa, existe el conocimiento necesario y hay invitaciones para entrevistas.


Etapas de la entrevista


La etapa preliminar es una entrevista telefónica.


A menudo, con un agente: le pedirán información básica del currículum de que realmente trabaja ahora donde trabaja, las expectativas salariales y el salario actual (este es un tema separado, lo contaré a continuación), el estado de la visa y qué tan rápido puede llegar a trabajar. El agente, por regla general, informará sobre la empresa y sobre la vacante (pero, por desgracia, solo información general) y preguntará si es interesante para mí y, en general, qué estoy buscando. Preguntan seriamente sobre la motivación, por qué estás buscando, cambiando de trabajo.


Si la conversación es directamente con un representante de la compañía, entonces la primera conversación telefónica puede ser con RRHH o inmediatamente con un representante del equipo para el que son contratados, por regla general, por un gerente de contratación, es decir. alguien es bastante directo, identifica y filtra a los candidatos correctos, y vale la pena el esfuerzo de dedicarlo a una entrevista técnica.


La ventaja es que puede encontrar inmediatamente más información sobre el proyecto y rechazarlo, porque no es interesante, o viceversa, aún más interesado, al darse cuenta de que es muy interesante.


Hubo pocos casos (pero fueron estables), cuando todo comienza rígidamente en la primera entrevista: hola, hola, bueno, veamos Java, algoritmos, etc. Solo 40-50 minutos de esas preguntas en el espíritu de un examen de informática.


Sobre el dinero


Durante mucho tiempo tuve un tabú sobre este tema, no quería saber cuánto obtienen mis colegas, eso me desmotivaría y disminuiría mi autoestima. Luego cambió su punto de vista a lo opuesto, ocultando el salario en manos del empleador, por lo tanto, entre los colegas no les importa intercambiar números, sino solo entre conocidos, no. Para Londres, puede mirar glassdoor y multiplicar por 1.5. por alguna razón, la parte superior de los salarios no está representada allí, aunque esta es la parte más dulce y, lo que es importante, es bastante factible. En cualquier caso, el programador en Londres en el banco es muy, muy buen dinero y el nivel de vida es más alto que en Moscú (esta es mi opinión subjetiva, basada en mis ideas sobre el nivel de vida y las necesidades, las ciudades mismas también imponen restricciones, en Moscú, yo Creo que ni siquiera pensaría en una hipoteca, en Londres, Europa, el 2% anual es normal, el pago inicial del 20-25% ya es suficiente).


Volviendo a la entrevista, según tengo entendido, el empleador quiere ver a un candidato con una cierta cantidad. Diría que es mejor responder en algún intervalo, pero debe configurarlo razonablemente para que no resulte más tarde, todo está bien, pero quiero más dinero. En general, diría que + 10-15% al ​​salario actual es una opción promedio. También es posible un aumento casi doble en los salarios, y también es posible un aumento anual del 10% en el lugar actual, sin importar lo que digan los agentes. Explicaré, por un lado, cuanto más caro venda un agente, más recibirá, pero la prioridad es venderlo en general, y por cuánto, cómo resulta, 5-10% de la diferencia en su salario para un agente no es una gran diferencia en eso. el agente lo tendrá a mano (esto es una suposición).


Formatos de entrevista


Preguntas org


Tuve una observación interesante de cómo se organizó la entrevista en sí, dónde se realiza, la oficina en sí y la sala de reuniones. Confirmación de la fecha, hora y lugar: rara vez, solo por teléfono, pero así fue. Como regla, una carta. A menudo de un agente con un mínimo de información. Lo más agradable es una carta bien formateada, con nombres y posiciones, con quién es la reunión y lo que es interesante, indicando la sala de reuniones (lo que significa que pueden planificar con anticipación y no buscar una sala de reuniones gratuita 5 minutos antes de la entrevista), los agentes a menudo envían al entrevistador linkedin - sálveme tiempo, porque siempre miro el perfil con el que potencialmente tengo que trabajar. Si hay sus artículos, los leeré.
Por cierto, si se ha anunciado a varias personas, es normal esperar que no vendrán todas si la más importante de ellas delega esto a alguien. Pero, en mi humilde opinión, es agradable cuando vienen todos los invitados declarados.


Luego todo fue normal, vino, se reportó a la recepción, bajó por ti o envió uno a la sala de reuniones. Como regla general, un empleado viene detrás de ti y te guía solo. El tiempo en el ascensor y en el camino también se puede utilizar para las negociaciones.


Y, por cierto, cómo una empresa se asemeja a un conjunto de candidatos, esto también es un indicador. Las entrevistas son un proceso bidireccional, como empresa, las personas abordan este proceso, qué tan bien entrevistan, esto también es una característica de la empresa / equipo. Esto es, por supuesto, subjetivo, me parece que no es la mejor opción preguntar a todas las interfaces de Colecciones en el nivel, sabes / no sabes, es mucho más interesante elegir un tema y desarrollarlo más, el mismo hashMap favorito: ¿cuáles son las diferencias con CHM? ¿Cómo puedo almacenarlo? Mapu en la memoria, pregunte sobre el tiempo de acceso, qué sucede durante el nuevo almacenamiento en caché y desarrolle aún más el tema de cómo se almacenan los elementos en las listas de colisión (lista, árbol, qué árbol, etc.))


Además, si la entrevista no tuvo éxito, se negaron, y le parece que tuvo un buen desempeño; esta tampoco es una razón para estar molesto, si no se presenta y no hay chispa, entonces es mejor no comenzar. En este sentido, me gusta la idea de que si no funciona, tal vez no necesite ir allí. También me gusta el enfoque (por cierto, google): es mejor no contratar a un buen empleado que contratar a uno malo. Lo mismo para un candidato: es mejor no entrar en una buena compañía que entrar en una mala.


Tenía curiosidad por dos cosas: el momento real en que comenzó la entrevista (siempre llegaba 10 minutos antes del comienzo) y qué cuadros cuelgan en las paredes, el diseño de las salas de reuniones, por regla general, estas son salas de reuniones para clientes bancarios e invierten mucho dinero en su diseño.


Hay un momento así: se anuncia una entrevista de 2 horas con 4 personas, y después de una hora dicen gracias. Está claro que no pasaste. No sé cómo relacionarme con esto, no se trata de eso: me ofende, me estaba preparando, les dejo escuchar (bueno, o al menos me dejan practicar una entrevista), todo está claro y sí, es difícil; es más probable que haya sido un rendimiento fallido y si continúa, todo mejorará. Pero aquí, entonces la lógica es otra vez: es mejor no contratar lo bueno que contratar lo malo.


Número de teléfono


Lo más básico, como lo describí, es una conversación telefónica. Puede haber preguntas técnicas, pero algo muy difícil o complejo es obviamente difícil de hacer. Es poco probable que se soliciten detalles de implementación en lugares de clasificación rápida, y si lo son, deben ejecutarse porque, en mi humilde opinión, esto es inadecuado.


En línea


Además, un favorito reciente (esto no fue hace 5-7 años o era menos): programación en línea como hackerrank o pruebas en línea.


Las pruebas con la elección de la respuesta de la lista son raras y, en mi opinión, rara vez la prueba refleja adecuadamente la preparación del candidato, aunque encontré una, simplemente maravillosa, 12 minutos, 12 preguntas bastante inteligibles. Por lo tanto, creo que este es un filtro tan áspero.


La programación en línea con un entrevistador se ve así: vaya al sitio, inicie sesión y frente a usted encontrará un IDE en línea que usted y el entrevistador pueden ver. Él te da tareas e inmediatamente escribes código, lo ejecutas, etc. Solo una vez que me conocí cuando solo era un Google Dock, todo lo demás es un IDE en línea bastante simple.


Tarea


Tareas de prueba buenas y antiguas, cuando la tarea simplemente se describe y necesita enviar una solución, a veces por un tiempo, a veces solo por 1-2-3-4 días.


Según el formato de las tareas, la tarea, por regla general, es muy inteligible y significativa. Esto es algo algorítmicamente (algo así como encontrar una ruta en el laberinto o un pequeño sistema para calcular el valor promedio del flujo de precios y almacenar el último, necesita diseñar un poco las clases y escribir todo con énfasis en la baja latencia) o, como lo expresé Llamo, en OOP: hay un área temática simple, solo necesita escribir un programa que muestre la tarea. Por ejemplo, tenemos un hospital, hay pacientes en él, cada paciente recibe una lista específica de medicamentos, los medicamentos de acuerdo con ciertas reglas interactúan entre sí causando un efecto diferente (si toma A y B, entonces el paciente se enfermará con la enfermedad X, si los pacientes con enfermedad D no recibieron droga y morirá). Debemos escribir un programa que, de acuerdo con una lista dada de medicamentos, dé el resultado de aplicarlos a la lista de pacientes (cada uno de los cuales tiene su propia enfermedad inicial). Otro ejemplo es escribir un cajero automático (atención a la atomicidad de las transacciones). Otro es escribir un juego de tijeras de piedra de papel.


Programación en línea durante un tiempo (sin intervención humana en el otro lado), como regla, esto es algo algorítmico de la categoría de recorrido de árboles, trabajo con matrices, todo lo que tiene geelforgeeks, también hay tareas más furiosas. Desafortunadamente, la solución a muchos problemas depende de si se reunió antes o no, a menudo las tareas son complejas y tomadas (y formuladas) en fuentes abiertas, me parece que esta no es una muy buena elección de tareas, es poco probable que los entrevistadores quieran probar sus habilidades de Google.


La programación en línea con un entrevistador también es una visión interesante, las tareas son mucho más simples, pero se agrega el estrés y la falta de familiaridad del IDE, lo principal aquí es no callar, razonar y no apresurarse a escribir una solución de inmediato. Piensa y piensa. Un ejemplo de una tarea que puede ser: se da un conjunto de valores, cada valor tiene una probabilidad. Es necesario escribir un programa que produzca estos valores con una probabilidad dada. En mi opinión, es complicado, pero factible.
Otro ejemplo: hay una operación larga que toma un argumento como entrada, hay muchos hilos que llaman y realizan esta operación. Escriba un contenedor que optimice las llamadas (debe realizar el almacenamiento en caché con énfasis en subprocesos múltiples, de modo que si el segundo subproceso llama a una operación con el mismo valor y la operación está en proceso de cálculo, entonces no necesita ejecutar el cálculo nuevamente, solo espere). Se sabe que el diablo está en los detalles y casos extremos.


Más acerca de los agentes: a veces sucede que los agentes parecen saber que preguntarán y de alguna manera pueden describirlo. Esta es una zona gris, por un lado, es bueno saber si la entrevista será puramente técnica o solo conversaciones que se esperan de usted, etc. Esta bien Pero hablando de tareas específicas, creo que esto no es muy bueno, especialmente con respecto a la compañía, también, el candidato se verá muy mal si mágicamente escribió la solución al problema de inmediato, pero no pudo explicarlo. Por lo tanto, preferiría no usar tales consejos.


Entrevista en el lugar


  • programación de pares, esencialmente lo mismo que la programación en línea, solo el entrevistador no está en el teléfono, sino en una silla cercana.
  • tarea - dar una tarea, comp, una hora de tiempo, escribir - llamar.
  • Codificación, diseño en papel / cartón.

Solo una conversación.


Según la conversación en sí, 50/50 habrá 1 / muchos entrevistadores, en general, no está mal cuando hay varios a la vez, y es interesante cuando parece un interrogatorio, preguntan a todos y mucho.


Ejemplo de tareas / preguntas típicas


Conocer la solución no garantiza nada, así como las imprecisiones, lo incompleto de la solución, la respuesta.
La tarea en sí, la pregunta, es el comienzo de una conversación sobre el tema. Por ejemplo, cómo contener dos matrices ordenadas. Luego, si tenemos más de 2 matrices, qué complejidad, cómo optimizar y qué si cambiamos esto y aquello. En mi opinión, este es un enfoque muy bueno: no está amenazado con un algoritmo complejo, pero se da algo simple y luego comienza una conversación sobre el tema, la complicación.


Especificación de Java


  • igual y contrato de código hash, qué sucederá si rompes
  • ¿Cómo funciona hahsmap? ¿Con diversos grados de detalle? comenzando por cómo se usa el código hash (lo que sucederá si se rompe el contacto con iguales) a - CHM, copiar en la matriz de escritura, según lo dispuesto internamente, bloqueo de lectura / escritura, bloqueos de segmentos, nivel concurrente.
  • volátil (memoria más barrera), ocurre antes de la semántica
  • java 7 - chm, atomics, nio (?)
  • java 8 - arroyos, lambda
  • GC (Parece que ya puedo hacer presentaciones sobre este tema)
  • pregunta sobre matriz volátil, volátil int [] arr; arr [2] = 2; int j = arr [2];
  • doble comprobación de bloqueo (y por qué no debe usarlo)
  • No entendí lo que era de interés, pero en algún lugar lo vi como un ejemplo de una pregunta interesante:
    Objeto [] o = nuevo Objeto [10] (); VS Object b = new Object [10] (); (aquí no sé la respuesta en sí, si alguien lee - ayuda con esta pregunta)
  • notifique notifique a Todos, productor consumidor y cuando no pueda \ no pueda utilizar notificar en lugar de notificar a Todos

Algoritmos


normal duro


  • verificar el equilibrio de los padres ({[- check-for-balance-parentheses-in-an-expression)
  • cálculo de expresión (dada una cadena con números, + - * / calcular el valor entre paréntesis) - evaluación de expresión
  • BFS / DFS - bfs-vs-dfs-binary-tree
  • encontrar la ruta en el gráfico de arriba a todo, el más pequeño entre 2 vértices - find-if-there-is-a-path-between-two-vertices-in-a-given-graph
  • sort stack - sort-stack-using-temporary-stack
  • barajar una serie de números al azar

dificil


  • buscar la subcadena idéntica más grande en dos líneas - longest-common-substring-java
  • encontrar el sufijo más pequeño de una palabra, agregarlo a una palabra dará como resultado un palíndromo: el prefijo de palíndromo más largo
  • (union find)



  • , (, , tail recursion c )
  • , N
  • fuzz buzz ( 2 )


  • ring buffer, thread (non)safe, (non)blocking.
  • producer consumer, notify/notifyAll, .
  • queue -> blocking queue wait notify
  • thread safe
  • calculate VWAP (with sliding window, global)
  • sliding mean/avg
  • ,
  • ( - )
  • — , .
  • ( , ).
  • - ( 1 , N ) —
  • — check-for-string-rotation-in-java/

( , )


  • — maze
  • — Knight's tour, i,j
  • — leetcode-word-search-java
  • ( , , ).

— . , , , - , .


  • — leetcode-paint-house-java
  • . , .
  • throthler , — , , 1 . throttling vs conflation.
  • .
  • 2 ( 1GB), . <1000 , 99% ( — 99% , 99% ). , .. — , 1-epsilon — ( , ).


  • ,
  • ATM ()
  • — , , , X Y .
    ( ). , .


  • , \.
  • ,
  • ( 3 \)
  • . . , — , — ?..
  • /
  • , . () .


  • ,
  • TDD
  • SOLID
  • — .


  • leetcode
  • hackerrank
  • interviewbit
  • geeksforgeeks
  • ( )
  • glassdoor
  • google
  • practice-practice-practice and have fun!

, , , .

Source: https://habr.com/ru/post/es430788/


All Articles