Aconteceu que eu queria me tornar um programador enquanto ainda estudava em uma universidade em Moscou, mas me tornei um já fora da Rússia e não imediatamente - o caminho era longo e espinhoso. Eu fui a muitas entrevistas (no começo eu estava procurando, então elas já estavam me procurando), investiguei os meandros do trabalho e pensei em como me tornar um bom programador.
Um dos aspectos relevantes ao longo da minha carreira é encontrar um emprego e passar por entrevistas. Eu mesmo realizei muito poucas entrevistas (4-5), mas visitei um grande número delas (> 100). Eu tive 3-4 períodos para encontrar um emprego nos últimos 7 anos, quando fui a uma entrevista por um mês ou dois, às vezes 1-2-3 por dia.
Neste artigo, gostaria de compartilhar a experiência de passar na entrevista, para fornecer algum tipo de sistematização de como ela parece e acontece, para o que se preparar.
O que eu gostaria de saber nos comentários - como acontece com outros, especialmente em Moscou / Rússia, provavelmente há diferenças com a Europa.
Com base na minha experiência pessoal, conversando com colegas, lendo fóruns, livros e assim por diante. Eu diria isso - esta é minha opinião subjetiva sobre a situação como um todo, este post afirma ser uma informação completa e que abrange, se não todos, a maioria dos aspectos. Onde está minha opinião, escrevo na minha opinião. Caso contrário, finjo ser objetivo.
Quase toda a minha experiência foi entrevistar TI em empresas financeiras europeias para o cargo de desenvolvedor java (sênior), principalmente em Londres. Não há web (de qualquer forma, front-end / back-end), nenhuma integração, nenhum trabalho para o cliente (por tipo - existe CRM e a empresa o implementa nos bancos), Amazon, Facebook, Google também não estão representados - não sei como Eu realmente não estou lutando lá, eu acho. Minha experiência começa com um programador simples e termina com um desenvolvedor sênior. Equipe / técnico / gerente - não.
Sobre a entrevista em geral
O processo de entrevista é estatístico, ou seja, - servimos onde quer que seja interessante, algo não vai dar certo simplesmente porque não temos sorte, já o contratamos, não há outras considerações ou experiências de mercado suficientes ou apenas um candidato melhor foi encontrado. I.e. é muito difícil passar por uma entrevista se essa for apenas uma posição da empresa. Nesse sentido, o Google me parece problemático - é tão sozinho. Existem muitos bancos envolvidos em coisas semelhantes, não em um; portanto, em outro, há um projeto interessante, o dia será bem-sucedido etc.
Uma entrevista é um jogo de acordo com suas próprias regras, que costumam ser seguidas, o conhecimento dessas regras ajuda a definir expectativas e o processo de preparação, passando. No final, mostra que você é capaz de cumprir as regras e aceitá-las, é capaz de levar em conta os costumes da equipe. Ninguém escreve as ordenações manualmente, e mesmo sincronizado é improvável que tenha que escrever, para não mencionar notify / notifyAll. Assim como é improvável que seja necessário um conhecimento detalhado do dispositivo interno do hashmap - mas essa é uma das perguntas mais populares - 70% das entrevistas não podem ficar sem ele, apenas o contrato entre iguais e hashcode pode argumentar com essa pergunta. Por outro lado, isso indica a preparação geral do candidato, o quão bem ele aborda a tarefa de trabalho (e a busca de emprego também é uma espécie de pequeno projeto).
De questões administrativas
Esqueça de esperar por uma resposta. Sem resposta - a resposta é não.
Às vezes me pareceu que essa é a regra de bom gosto deles - eles não respondem se não estão interessados. Este é um exemplo para os recrutadores - se você respondeu que não é necessário trabalho agora, então isso é como um covarde. Pois eles próprios, é claro, não se mutilam; se não precisamos, a lógica é que o tempo deve ser desperdiçado. Em geral, os recrutadores são pessoas incríveis, quando comecei a pensar que eram como sirenes - vale a pena responder e é isso, você já está em uma entrevista para a qual não gostaria de ir. A capacidade de dizer claramente não ou de formular o que eu preciso é uma boa habilidade. Acredito em agentes, mas nunca confio. Pego apenas os fatos, e aqueles que podem ser provados, da categoria "este é um projeto novo, tudo é muito bom lá" - isso é choque aéreo. E se "eles estão prontos para aumentar seus salários em 10 mil" - então isso já é algo :-)
Algumas informações interessantes - um agente (agência) recebe uma boa parte do salário anual de um candidato selecionado (e após o período de estágio). Parece que a empresa possui um orçamento separado para agentes, ou seja, se você encontrar o mesmo emprego sem um agente, provavelmente não poderá contar com um salário mais alto. Não entendo muito bem por que isso acontece, talvez em pequenas empresas seja diferente.
Claro, há um senso dos agentes, às vezes eles são úteis e bons. O fato é que algumas vagas muito interessantes vieram a mim apenas através de agentes. Mas o oposto é verdadeiro, apesar da crença generalizada de que o trabalho sem um agente pode e deve ser encontrado. Especialmente se você estiver interessado em trabalhar em um campo menos claro - pegamos as 20 principais empresas do mundo / país desse setor e acessamos seus sites. Então, encontrei meu primeiro emprego em Londres, com o qual fiquei muito satisfeito.
Também vale ressaltar que você precisa se preparar para a entrevista, o formulário no início da corrida difere significativamente após um mês após a entrevista. As perguntas são repetidas, tarefas simples são escritas de maneira simples, imediata e rápida. A história de sua experiência, pontos fortes, projetos e planos para o futuro ricocheteia em seus dentes. Em algum momento, eu queria levar um pôster com a arquitetura do nosso sistema, para que fosse mais conveniente contar o que eu estava fazendo.
Em geral, sempre e em qualquer lugar - o nível intermediário não está interessado, você deve estar ACIMA da média, incluindo e acima de suas habilidades, no sentido de precisar dar o melhor de si.
A TI financeira é uma enorme burocracia, e devemos ser capazes de existir nela; sim, os recursos são gastos nela e tudo é ineficiente, mas essas são as regras e, às vezes, simplesmente não há opção melhor. Das vantagens - existem projetos interessantes, muito interessantes, a burocracia e os analistas de negócios não recebem muito e muito bom dinheiro.
Não vou considerar os preparativos para a entrevista. Acreditamos que esta é uma etapa concluída, existe o conhecimento necessário e há convites para entrevistas.
Etapas da entrevista
A fase preliminar é uma entrevista por telefone.
Muitas vezes, com um agente - eles solicitam informações básicas do currículo que você realmente trabalha agora, onde trabalha, expectativas salariais e salário atual (este é um tópico separado - vou contar abaixo), status do visto e a rapidez com que você pode trabalhar. O agente, em regra, falará sobre a empresa e sobre a vaga (mas, infelizmente, apenas informações gerais) e perguntará se é interessante para mim e, em geral, o que estou procurando. Eles perguntam seriamente sobre motivação, por que você está procurando, mudando de emprego.
Se a conversa for diretamente com um representante da empresa, a primeira conversa telefônica pode ser com o RH ou imediatamente com um representante da equipe para a qual eles são contratados, em regra, por um gerente de contratação, ou seja, alguém é bastante franco, que identifica e filtra os candidatos certos, e vale a pena o esforço para gastar em uma entrevista técnica.
A vantagem é que você pode descobrir imediatamente mais informações sobre o projeto e recusar, porque não é interessante, ou vice-versa, ainda mais interessado, percebendo que é muito interessante.
Houve poucos casos (mas eles eram estáveis), quando tudo começa rigidamente já na primeira entrevista - olá, olá, bem, vamos analisar java, algoritmos etc. Apenas 40 a 50 minutos dessas perguntas, no espírito de um exame de ciência da computação.
Sobre dinheiro
Por um longo tempo, tive um tabu sobre esse assunto - não queria saber quanto meus colegas recebem - isso me desmotivaria e diminuiria minha auto-estima. Então ele mudou seu ponto de vista para o contrário - escondendo o salário nas mãos do empregador; portanto, entre os colegas não se importam em trocar números, mas entre apenas conhecidos - não. Para Londres - você pode olhar para o glassdoor e multiplicar por 1,5. por alguma razão, a parte superior dos salários não está representada lá, embora essa seja a parte mais doce e, o que é importante, seja bastante atingível. De qualquer forma, o programador em Londres no banco é muito, muito bom dinheiro e o padrão de vida é mais alto do que em Moscou (esta é minha opinião subjetiva, com base em minhas idéias sobre o padrão de vida e as necessidades, as próprias cidades também impõem restrições, em Moscou, eu Eu acho que nem pensaria em uma hipoteca, em Londres, Europa, 2% ao ano é normal, 20 a 25% no pagamento já é suficiente).
De volta à entrevista, como eu a entendo, o empregador quer ver um candidato com uma certa quantia. Eu diria que é melhor responder em algum intervalo, mas você precisa configurá-lo razoavelmente para que não aconteça mais tarde, está tudo bem, mas eu quero mais dinheiro. Em geral, eu diria que + 10-15% do salário atual é uma opção média. Também é possível um aumento quase dobro dos salários e também um aumento anual de 10% no local atual, independentemente do que os agentes digam. Eu explicarei, por um lado, quanto mais caro um agente vender, mais ele receberá, mas a prioridade é vender você em geral, e quanto, como acontece, 5 a 10% da diferença no seu salário para um agente não é uma diferença tão grande nisso o agente a colocará à mão (isso é uma suposição).
Questões de organização
Eu tive uma observação interessante de como a entrevista em si foi organizada, onde é realizada, o próprio escritório e a sala de reuniões. Confirmação da data, hora, local - raramente, quando apenas por telefone, mas era. Como regra, uma carta. Geralmente, de um agente com um mínimo de informações. A melhor parte é uma carta bem formatada, com nomes e posições, com quem a reunião é e o que é interessante - indicando a sala de reuniões (o que significa que eles podem planejar com antecedência e não procurar uma sala de reuniões gratuita 5 minutos antes da entrevista), os agentes costumam enviar o entrevistador linkedin - me salve tempo, porque eu sempre olho para o perfil de quem potencialmente tenho que trabalhar. Se houver seus artigos, eu os lerei.
A propósito, se várias pessoas foram anunciadas, é normal esperar que todas elas não venham se o mais importante delas delegar isso a alguém. Mas, IMHO, é bom quando todos os convidados declarados vêm.
Então tudo foi normal, ele veio, informou a recepção, foi até você ou mandou um para a sala de reuniões. Como regra, um funcionário fica atrás de você e o leva por conta própria. O tempo no elevador e na estrada também pode ser usado para negociações.
E, a propósito - como uma empresa se parece com um conjunto de candidatos, isso também é um indicador. As entrevistas são um processo de mão dupla, enquanto empresa, os indivíduos abordam esse processo, quão bem eles entrevistam, isso também é uma característica da empresa / equipe. Isso é, é claro, subjetivo, parece-me que não é a melhor opção para perguntar a todas as interfaces de coleções em um nível, você sabe / não sabe, é muito mais interessante escolher um tópico e desenvolvê-lo ainda mais, o mesmo hashMap favorito - quais são as diferenças do CHM, como posso armazená-lo? Mapu na memória, pergunte sobre o tempo de acesso, o que acontece durante o re-armazenamento em cache e desenvolva ainda o tópico de como os elementos são armazenados em listas de colisão (lista, árvore, qual árvore, etc.)
Além disso, se a entrevista foi malsucedida, eles recusaram e parece-lhe que você teve um bom desempenho - esse também não é um motivo para ficar chateado, se você não aparecer e não houver faísca, é melhor não começar. Nesse sentido, gosto da ideia de que, se não der certo, talvez não precise ir até lá. Também gosto da abordagem (a propósito, o Google) - é melhor não contratar um bom funcionário do que contratar um mau. A mesma coisa para um candidato - é melhor não entrar em uma boa empresa do que entrar em uma má.
Fiquei curioso sobre duas coisas - o momento real em que a entrevista começou (eu sempre chegava 10 minutos antes do início) e quais pinturas estão penduradas nas paredes, o design das salas de reunião - como regra, essas são salas de reuniões para clientes bancários e investem muito dinheiro em seu design.
Existe um momento - uma entrevista é anunciada por 2 horas com 4 pessoas e, após uma hora, eles agradecem. É claro que você não passou. Eu não sei como me relacionar com isso, não é sobre isso - me ofende, eu estava me preparando, deixei eles ouvirem (bem, ou deixe-me pelo menos fazer uma entrevista) - tudo é claro e sim, difícil; é mais provável que tenha sido um desempenho sem êxito e, se você continuar, tudo ficará melhor. Mas aqui, então a lógica é outra vez: é melhor não contratar os bons do que contratar os maus.
Número de telefone
O mais básico, como descrevi, é uma conversa por telefone. Pode haver perguntas técnicas, mas algo muito difícil ou complexo é obviamente difícil de perguntar. É improvável que sejam solicitados detalhes de implementação em locais de classificação rápida e, se forem, devem ser executados porque, IMHO, isso é inadequado.
Em linha
Além disso, um favorito recente (isso não aconteceu há cinco ou sete anos ou menos) - programação on-line, como hackerrank ou testes on-line.
Os testes com a escolha da resposta da lista são raros e, na minha opinião, raramente refletem adequadamente a preparação do candidato, embora me deparei com uma, maravilhosa, 12 minutos, 12 perguntas bastante inteligíveis. Portanto, acho que esse é um filtro tão difícil.
A programação online com um entrevistador se parece com isso - acesse o site, faça o login e, à sua frente, existe um IDE online visível para você e o entrevistador. Ele fornece tarefas e você imediatamente escreve o código, executa-o etc. Somente quando conheci quando era apenas um Google Dock, todo o resto é um IDE online simples.
Lição de casa
Tarefas de teste boas e antigas, quando a tarefa é simplesmente descrita, e você precisa enviar uma solução - algumas vezes por um tempo, outras apenas por 1-2-3-4 dias.
De acordo com o formato das tarefas - a lição de casa, por via de regra, é muito inteligível e significativa. Isso é algo algoritmicamente (algo como encontrar um caminho no labirinto ou um pequeno sistema para calcular o valor médio do fluxo de preços e armazenar o último, é necessário projetar um pouco as classes e escrever tudo com ênfase na baixa latência) ou, como eu disse Eu chamo, no OOP - há uma área de assunto simples, você só precisa escrever um programa que exiba a tarefa. Por exemplo, temos um hospital, existem pacientes, cada paciente recebe uma lista específica de medicamentos, os medicamentos de acordo com certas regras interagem entre si, causando um efeito diferente (se você tomar A e B, o paciente ficará doente com a doença X, se os pacientes com a doença D não receberem droga e ele vai morrer). Devemos escrever um programa que, de acordo com uma determinada lista de medicamentos, dê o resultado de aplicá-los à lista de pacientes (cada um com sua própria doença inicial). Outro exemplo é escrever um caixa eletrônico (atenção à atomicidade das transações). Outra é escrever um jogo de tesoura de pedra de papel.
Programação on-line por um tempo (sem intervenção humana do outro lado) - como regra, isso é algo algorítmico da categoria de passagem em árvore, trabalho com matrizes - tudo o que existe em geelforgeeks, e tarefas mais furiosas não são incomuns. Infelizmente, a solução para muitos problemas depende de ela ter se encontrado antes ou não, geralmente as tarefas são complexas e executadas (e formuladas) em código aberto; parece-me que essa não é uma escolha muito boa de tarefas, é improvável que os entrevistadores desejem testar suas habilidades no Google.
A programação on-line com um entrevistador também é uma visão interessante, as tarefas são muito mais simples, mas o estresse e o desconhecimento do IDE são adicionados, a principal coisa aqui é não ficar em silêncio, raciocinar e não se apressar em escrever uma solução imediatamente. Pense e pense. Um exemplo de uma tarefa que pode ser - um conjunto de valores é fornecido, cada valor recebe uma probabilidade. É necessário escrever um programa que produz esses valores com uma determinada probabilidade. Na minha opinião, é complicado, mas viável.
Outro exemplo - há uma operação longa que recebe um argumento como entrada, há muitos threads que chamam e fazem essa operação. Escreva um wrapper que otimize as chamadas (você precisa fazer o cache com ênfase no multithreading, para que, se o segundo encadeamento chamar uma operação com o mesmo valor e a operação estiver em processo de cálculo, não será necessário executar o cálculo novamente, apenas aguarde). Sabe-se que o diabo está nos detalhes e nos casos extremos.
Mais sobre agentes - às vezes acontece que os agentes parecem saber que vão perguntar e de alguma forma podem descrevê-lo. Esta é uma zona cinzenta, por um lado, é bom saber se a entrevista será puramente técnica ou apenas conversas esperadas de você etc. Está tudo bem Mas, por falar em tarefas específicas, acho que isso não é muito bom, especialmente no que diz respeito à empresa, também, o candidato ficará muito ruim se ele magicamente escreveu a solução para o problema imediatamente, mas não conseguiu explicar. Portanto, eu preferiria não usar essas dicas.
Entrevista no local
- programação em pares, essencialmente a mesma que a programação on-line, apenas o entrevistador não está ao telefone, mas em uma cadeira próxima.
- lição de casa - dê uma tarefa, comp, uma hora de tempo, escreva - ligue.
- Codificação, design em papel / cartão.
Apenas uma conversa.
De acordo com a própria conversa - 50/50, haverá 1 / muitos entrevistadores, em geral, não é ruim quando há vários de uma vez e é interessante quando parece um interrogatório, eles perguntam a todos e muito.
Exemplo de tarefas / perguntas típicas
Conhecer a solução não garante nada, além de imprecisões, incompletude da solução, resposta.
A tarefa em si, a pergunta, é o começo de uma conversa sobre o assunto. Por exemplo, como conter duas matrizes classificadas. Então, se tivermos mais de 2. matrizes, que complexidade, como otimizar e se mudarmos isso e aquilo. Na minha opinião, essa é uma abordagem muito boa - você não é ameaçado por um algoritmo complexo, mas algo simples é dado e, em seguida, uma conversa começa sobre o assunto complicação.
Especificação Java
- igual e contrato de código de hash, o que acontecerá se você quebrar
- como o hahsmap funciona. Com vários graus de detalhes? começando de como o hashcode é usado (o que acontecerá se você quebrar o contato com iguais) a - CHM, copie no array de gravação, conforme organizado internamente, bloqueando a leitura / gravação, bloqueios de segmentos, nível simultâneo.
- volátil (memória barier), acontece antes da semântica
- java 7 - chm, atômica, nio (?)
- java 8 - córregos, lambda
- GC (parece que já consigo fazer apresentações sobre esse assunto)
- pergunta sobre array volátil, volátil int [] arr; arr [2] = 2; int j = arr [2];
- bloqueio de verificação dupla (e por que você não deve usá-lo)
- Não entendi o que era de interesse, mas em algum lugar o vi como um exemplo de uma pergunta interessante:
Objeto [] o = novo Objeto [10] (); Objeto VS b = novo Objeto [10] (); (aqui eu não sei a resposta em si, se alguém ler - ajude com esta pergunta) - notificar notificar Todos, consumidor produtor e quando você não puder usar \ Notificar em vez de notifyAll
Algoritmos
duro normal
- verificação do saldo dos pais ({[- verifique os parênteses balanceados em uma expressão
- cálculo de expressão (dada uma sequência com números, + - * / calcula o valor entre colchetes) - avaliação de expressão
- BFS / DFS - bfs-vs-dfs-binary-tree
- encontrar o caminho no gráfico de cima para todos, o menor entre 2 vértices - encontre se existe um caminho entre dois vértices em um dado gráfico
- pilha de classificação - pilha de classificação usando pilha temporária
- embaralhar uma matriz de números aleatoriamente
difícil
- procure a maior substring idêntica em duas linhas - longest-common-substring-java
- encontrar o menor sufixo de uma palavra e adicioná-lo a uma palavra resultará em um palíndromo - prefixo do palíndromo mais longo
- (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 \)
- . . , — , — ?..
- /
- , . () .
- leetcode
- hackerrank
- interviewbit
- geeksforgeeks
- ( )
- glassdoor
- google
- practice-practice-practice and have fun!
, , , .