Esta semana tivemos Ava Katushka, uma treinadora da Verbetcetera .
Verbetcetera é um bootcamp para quem quer se preparar para entrevistas nas Big Five - Google, Amazon, Facebook, Apple e Microsoft. Os mentores verbetcetera estão distribuídos em 5 países, já trabalham em empresas-alvo, sabem tudo sobre as especificidades do trabalho e os requisitos dos candidatos em diferentes mercados.
Apesar da recepção fria nos comentários ao anúncio, houve muitas perguntas para Ava durante a transmissão. Publicamos suas respostas, transcrição e gravação da entrevista (com slides de apresentação).
Meu nome é Ava Coil. Estudei no Instituto de Física e Tecnologia de Moscou, na Faculdade de Ciência da Computação, que se chama FIVT. Meu terceiro curso foi bem difícil, tive muito estresse, exames, problemas de saúde, problemas familiares.
Lembro-me de entrar em uma livraria e ver o livro What to Dream About. Eu me perguntei; Lembrei-me de que uma vez sonhei com algo, mas não lembrava com o quê. Abri este livro e ali mesmo, na Biblio-Globus, comecei a fazer os exercícios deste livro. E descobri que atendi às expectativas de todos ao meu redor - minha família, professores, qualquer um, exceto eu. Eu estava com muita raiva então. Eu me perguntei o que eu realmente quero para mim. Mais tarde, sentei-me no Parque Gorky e pensei sobre isso. Percebi que quero viajar, quero fazer amigos - tive um problema com isso - e quero escrever meu próprio site do zero. E para mim, como num passe de mágica, naquele ano tudo começou a se concretizar.
Acontece que existe uma forma de viajar onde você é pago por isso: um estágio. Então fui para o Google em Nova York, onde fiz um estágio. Em algum momento no meio do estágio, me perguntaram se eu queria ficar em tempo integral. Eu pensei - por que não tentar, embora eu não achasse que eles me levariam. Mas eles me levaram e me mudei para Munique. Trabalho como engenheiro de software há três anos e tenho experiências bastante variadas como engenheiro de software. No início, trabalhei e treinei como SRI (engenheiro de confiabilidade de site) - fiz muitas coisas interessantes, havia uma equipe irmã. Mas logo me pareceu que eu queria escrever mais código. Mudei-me para a equipe SVI, onde escrevemos um site de viagens dentro da própria empresa, para googlers. E no final, eu também aprendi que existe essa especialidade - UXE, engenheiro de UX. Comecei a aprender um pouco de UX e mudei para lá,tentando combinar meus dois interesses em desenho e programação. Eu me saí bem na média, mas isso também é experiência na área.
Agora que não trabalho no Google, meio que decidi tirar um tempo para descobrir do que gosto, para tentar todos os tipos de hipóteses. Em particular, eu queria tentar trabalhar para mim mesmo. Comecei a me lembrar do que gostava da vida e descobri que gostei muito do processo de preparação para a entrevista. Quando me inscrevi em diferentes empresas, interagi com pessoas dessas empresas, resolvi problemas. Foi um período muito brilhante da minha vida. Aí conversei com um amigo e descobri que nem todo mundo tem esse período - brilhante, as pessoas ficam estressadas nas entrevistas, e aí - “graças a Deus acabou, finalmente estou trabalhando”. Pareceu-me que posso, provavelmente, partilhar algo de positivo, tornar este processo de procura de emprego e de entrevistas algo agradável, que é bom recordar com prazer.
No começo eu queria me aconselhar, mas encontrei um conselho em um livro sobre negócios: se você quer fazer algo, primeiro encontre pessoas que já estejam fazendo algo bom e você pode aprender muito com elas. Aí encontrei a empresa Verbetcetera, onde os caras já faziam o que eu queria fazer. Já havia um círculo de mentores; A direção da engenharia de software era bastante nova, ou seja, só começou em 2020.Mas desde 2018 há uma tutoria de PMs, que avançou bastante bem. E os valores desta empresa acabaram por ser muito próximos de mim: todos os mentores passaram pelo caminho, eles próprios trabalham na área. Eram caras próximos a mim em espírito, todos eram (e são) da FAANG (Facebook, Apple, Amazon, Netflix, Google). Uma equipe muito legal se reuniu, foi interessante entrar e tentar ser um mentor.
Eu gostaria de falar sobre entrevistas de tecnologia, responder perguntas. Vou falar sobre uma determinada estrutura em uma entrevista, parar, olhar as perguntas, responder e seguir em frente. Gostaria de falar sobre a codificação das entrevistas: que perguntas são feitas, que mitos estão associados a elas, como é o processo de procura de emprego do ponto de vista da empresa e do candidato; o que é uma entrevista de design de sistema, o que ela afeta e quais mitos e equívocos populares existem.
Entrevistas de codificação - o que são?
Freqüentemente, perguntam-se quais perguntas são feitas nessas entrevistas. Digamos que uma dessas questões possa ser assim: "uma string criptografada chega na entrada, decodifique-a." A linha pode ser assim: 3 [A] 2 [BC]. Decodificado como AAABCBC. Ou seja, o que está dentro do colchete é repetido tantas vezes quanto o número antes do colchete. E durante a entrevista você precisa escrever um programa que faça a decodificação.
Esta pergunta foi feita em entrevistas com Bloomberg, Amazon, Apple, Cisco, Google, Microsoft; parece uma questão bastante direta, mesmo se você não estiver relacionado com programação. Mas pode ter um fundo duplo - por exemplo, pode haver vários níveis de aninhamento. Digamos a seguinte linha: [[[A [[C]]].
Nesse caso, você pode primeiro decifrar a camada interna: AACC e, em seguida, repeti-la três vezes - ou seja, decifrar a camada externa (AACCAACCAACC). O programa escrito deve lidar com qualquer nível de aninhamento. Se você é bom em programação, isso não deve ser um problema.
Que tópicos são perguntados nas entrevistas?
Exemplos de tópicos populares são matrizes, strings (como já cobrimos), tarefas de gráfico. Às vezes ficam muito disfarçados: por exemplo, para fazer um cronograma de cursos, visto que cada curso tem um curso preliminar (pré-requisito). Existem problemas de recursão: por exemplo, existe um problema de preço popular. Os preços são dados por ação por um certo número de dias, e você precisa criar um algoritmo de compra e venda para obter renda máxima. Às vezes, existem problemas de matemática ou geometria, mas não muitos deles; nenhum conhecimento especial nesses assuntos é necessário, os mais básicos são necessários, mas eles também são bons em resolvê-los. Em geral, é muito bom ter formação em informática, sentir-se à vontade para que a resolução de problemas em entrevistas não seja problema.
Por que essas perguntas são feitas em entrevistas se o fluxo de trabalho é muito diferente deles? Sim, muitas pessoas dizem - o desenvolvedor não precisa disso, por que essas árvores pretas e vermelhas. Essa é a crítica padrão das entrevistas, o trabalho é muito diferente, o trabalho não será como uma entrevista. Mas há muitas razões pelas quais essas perguntas são feitas. Eles querem testá-lo em um período de tempo limitado, para ver como você lida com tarefas desconhecidas e incompreensíveis. Essa habilidade é freqüentemente necessária no trabalho.
Embora a ciência da computação em sua forma mais pura não se aplique ao trabalho, o conhecimento básico ainda é bastante útil quando você trabalha com engenharia de software. Na verdade, essas tarefas são um proxy para trabalhos futuros. Em vez de perguntar se você é um bom desenvolvedor, eles fornecem tarefas e veem como você se comporta com elas. E boas respostas a perguntas estão relacionadas a ser um bom desenvolvedor.
Quais empresas fazem essas perguntas nas entrevistas?
Bastante, e não só FAANG (mas eles também). Tenho uma lista: Microsoft, Bloomberg, Uber, Adobe, Oracle, ByteDance, eBay, LinkedIn, Yahoo, VMWare, Salesforce, Cisco - na verdade, ainda não inseri muitos deles. Ou seja, essas perguntas são bastante populares. Além disso, por exemplo, no Google, os desenvolvedores júnior, médio e sênior recebem as mesmas perguntas, não há diferenças.
Existe um mito popular: é importante participar de competições algorítmicas.Isso me preocupou muito: não participei nem na escola nem no instituto. As pessoas costumam dizer que se você não participou, então seu tempo passou - você sempre se mostrará mal nas entrevistas. Mas este não é o caso. Apesar de, é claro, a participação em competições ajudar e apoiar você, as entrevistas são diferentes delas. As questões são semelhantes, você também precisa resolver um problema em um tempo limitado, mas apresenta a solução não para o sistema que deve passar nos testes, mas para a pessoa. A pessoa olha e tenta avaliar se deseja trabalhar com você resolvendo o problema. É importante não apenas que você encontre uma solução, mas também como você a encontra, como você pensou, quantas opções você considerou, se você pode transmiti-las à pessoa. Este é um aspecto muito importante.
A pessoa que o entrevista é um engenheiro, ela também não resolve esses problemas regularmente; provavelmente a última vez que ele fez isso foi durante sua própria entrevista. E ele deve encontrar a resposta para a pergunta: ele quer trabalhar com você, será bom trabalhar com você. Não tenha medo dele. Ele não quer colocá-lo sob condições de superestresse; em vez disso, ele quer dar a você uma experiência de entrevista positiva.
Uma estrutura de entrevista de codificação genérica
Como estruturar seu tempo, sua resposta para responder bem? Para começar, sempre faça perguntas esclarecedoras, dê exemplos, comunique-se com seu entrevistador. Como você entende o que é um exemplo; é muito importante.
Caso contrário, você pode interpretar mal o problema e começar a resolver o problema errado que é exigido de você (este é um grande número de bandeiras vermelhas de uma vez).
Freqüentemente, as pessoas têm medo de encontrar as soluções que apresentam; eles pensam - por que oferecer, não é ótimo, mas eles querem o ótimo de mim. Não faça assim. Comece com uma solução não ideal, conte ao entrevistador sobre ela: ele entenderá que você já alcançou algum nível de compreensão. Então, pense mais. Talvez isso o ajude de alguma forma no processo. Não há menos aqui: pelo contrário, é bom que você tenha visto imediatamente a solução.
É importante escrever um bom código estruturado - você quer se mostrar como um programador que escreve código legível. No final da entrevista, será importante testar, para isso você pode usar os exemplos que foram inventados no início. É assim que você pode detectar erros em seu código. Então - é necessário resumir muito legal. “Comecei assim, cheguei a tal e tal solução, eles têm tantas vantagens e desvantagens, esse é o tipo de teste, é assim que tudo funciona com exemplos”. Aqui está um exemplo de abordagem de entrevista.
P: qual o nível de inglês desejado?
É aconselhável falar livremente para compreender livremente o entrevistador e expressar seus pensamentos. Superavançado opcional, intermediário deve ser suficiente.
P: quais mudanças foram feitas na digitação do Google em comparação com o que é descrito na Entrevista de codificação de quebra?
Aqui você precisa entender o que exatamente comparar com o quê. Mas eu acho que os principais pensamentos de Cracking Coding Interview ainda são relevantes hoje. Não mudou muito.
P: onde posso melhorar meu inglês técnico?
Você nem precisa de inglês técnico para passar em uma entrevista; você só precisa do inglês, você precisa ser capaz de expressar seus pensamentos. Você pode treinar em entrevistas, com amigos, empresas especiais, se quiser aprender a falar em uma entrevista.
P: até que ponto as tarefas com leetcode refletem as especificações atuais das tarefas que são solicitadas no Google? As tarefas do último ano, do penúltimo ano, são relevantes?
Em primeiro lugar, é importante para você que não tenha visto o problema que encontrou na entrevista anterior. Se a tarefa for familiar e você souber de antemão como fazê-la, isso não o ajudará. Pelo contrário, fará mal: será perceptível. Você precisa ter um problema desconhecido, mas precisa resolver muitos problemas semelhantes. Leetcode funciona bem para isso; se você resolver problemas em tópicos diferentes, cubra tópicos populares da ciência da computação - em algum momento você estará pronto.
P: quais idiomas podem ser usados para resolver um problema técnico de entrevista? Atualmente estou resolvendo problemas com leetcode em JavaScript, mas ouvi dizer que preciso de Python ou C ++.
Qualquer uma dessas linguagens - JavaScript, Python ou C ++ - está bem, não importa aqui. Se você escreve em JavaScript, conhece-o bem, profundamente, esta é a sua linguagem - então vá para uma entrevista com JavaScript.
P: você tem uma abordagem para estimar corretamente o tempo de cada tarefa em uma entrevista de código automática quando há várias tarefas e um limite de tempo?
Eu não entendi muito bem essa pergunta. Bem, sim, você precisa resolver muitos problemas, se houver um limite de tempo, você precisa medir sua força com eles.
P: As tarefas que enfrentei nas entrevistas na Amazon e no Google exigiam muito da ciência da computação básica.
Bem, eu chamo de básica. Parece para mim.
P: se os candidatos juniores e seniores responderem às mesmas perguntas, como eles determinam para qual série levar um desenvolvedor?
Isso não é determinado pelos resultados da entrevista de codificação, mas pelos resultados do projeto do sistema e da entrevista comportamental.
P: como está o Google em geral?
Eu gosto disso. Tive uma experiência bastante valiosa, não trocaria por outra coisa. Empresa muito legal, muitos escritórios em diferentes cidades. Provavelmente, existem poucas empresas onde você pode trabalhar na Europa, América e Ásia. Existem muitas possibilidades.
A seguir, falarei sobre a preparação para uma entrevista: como se preparar, como as empresas contratam desenvolvedores, quanto tempo leva
No Google e em muitas empresas semelhantes, o processo é assim. Primeiro você precisa ser notado, vá até o recrutador. Em seguida, vem a triagem inicial, onde você recebe de 1 a 3 entrevistas de codificação - as mesmas perguntas que discutimos anteriormente.
Se você foi aprovado, vá para o local. Haverá um grande conjunto de entrevistas, geralmente de 2 a 4 codificação, além de design de sistema e comportamento. Se você tiver um bom desempenho no local, receberá uma oferta. O Google inclui seu salário, bônus de realocação - pagamento móvel. Freqüentemente, a oferta incluirá ações da empresa; Recebi uma oferta que os incluía - mas não imediatamente, mas depois de um ano de trabalho.
O primeiro passo é garantir que você seja notado. Aconselho-o pessoalmente a procurar alguém da empresa, para falar com as pessoas que estão na empresa. Isso dará a você um pouco de compreensão da cultura interna da empresa. Além disso, se vocês gostarem um do outro, a pessoa que está na empresa poderá recomendar você - as estatísticas mostram que as recomendações aumentam em 8 vezes a chance de passar na primeira fase ("ser notado") em relação às inscrições por meio o site. Bem, para alguns, os aplicativos por meio do site funcionam.
Aconselho você a nunca pensar em uma empresa em particular. Você nunca pode garantir que entrará em uma determinada empresa. Mas, se você tem um objetivo - ganhar experiência internacional, trabalhar em uma grande empresa, mudar-se para algum lugar, isso é definitivamente possível, e talvez não em uma empresa.
Para o processo de redação do currículo, há várias pequenas dicas sobre como deve ser a aparência e quais fatos conter.
- brevidade: caber em 1 página
- orientação para resultados: descreva suas realizações - "alcançou X fazendo Y com Z"
- Orientação de dados: descreva a escala de seus projetos - utilização, lucro, etc.
- links: fornece links para mostrar seus projetos
- avaliação: peça a alguém para avaliar seu currículo antes de enviá-lo
- menos termos especializados: você precisa ser compreendido
Mas provavelmente é muito importante dizer que é bastante difícil fazer isso sozinho. Pelo menos foi difícil para mim: você precisa se descrever, descrever suas conquistas, fazer em uma boa linguagem, compreensível para outra pessoa. É bom fazer com um amigo, um colega; você pode vir ao nosso mentor em Verbetcetera - tente fazer seu currículo de forma que fique fácil de ler e cause uma boa impressão.
A preparação adicional geralmente consiste em resolver problemas - por exemplo, no mesmo leetcode - sobre diferentes tópicos, no idioma de sua escolha. Pode ser JavaScript, Typescript, C ++, Java, Python e assim por diante. Muitos idiomas. Também é ótimo ter prática em pares - fazer entrevistas práticas para treinar o processo, isso é chamado de entrevista simulada. Você pode praticar com amigos, também existem serviços especiais; também oferecemos esse serviço - você pode vir e praticar com um mentor. Além disso, você está tentando aumentar suas chances de obter uma oferta submetendo-o a várias empresas. Faça a entrevista e, no final, você chegará a algum lugar (onde quiser, espero); claro, para que esse esquema funcione, é importante ter uma boa base de ciência da computação.
Entrevistei várias pessoas que recentemente entraram no Google e ficou assim: uma ou duas semanas não é suficiente para ninguém. Ninguém me disse que se preparou para a entrevista em duas semanas e passou. Geralmente leva de 2 a 3 meses, e a pessoa está ocupada 8 horas por dia. E isso ainda requer uma fundação - do instituto, dos cursos especiais, para que tais tarefas não sejam completamente novas. Alguém escreveu no leetcode que todo o processo demorou um ano (embora essa pessoa estivesse trabalhando ao mesmo tempo).
P: quais são os salários oferecidos?
Você pode olhar no Glassdoor para ver quais salários são oferecidos por qual empresa (em média).
P: Você tem algum mentor na pilha .NET?
É como se não nos preparássemos em uma linguagem específica, temos mentoria sobre algoritmos e design de sistemas. A linguagem específica não importa para nós, não apertamos a linguagem.
Vamos analisar a última entrevista - entrevista de design de sistema. Que tipo de entrevista é essa, que erros e mitos existem e como se preparar para isso.
Essa entrevista determina sua nota na empresa. Ele faz perguntas difíceis em aberto. Por exemplo, "como você escreveria Google Docs (ou Instagram, ou Facebook Messenger)." Naturalmente, existem expectativas diferentes para uma entrevista de design de sistema: se você for um júnior, quase nada se espera de você. Mas, se você for sênior, precisa provar que é excelente.
Conheci tal opinião que é inútil me preparar para esta entrevista: ou você já tem conhecimento e experiência, ou não. É claro que o conhecimento do design do sistema não aparece por si só com o acúmulo de experiência (embora a experiência ajude), mas eu recomendaria a todos que se preparassem para esta entrevista - incluindo os juniores.
Estruturar a experiência ajuda muito. Você começa a ver fora do seu pequeno pedaço de código, vê os componentes, vê todo o processo, como o produto se parece, em quais servidores, balanceadores de carga, caches ele consiste, onde os gargalos e vulnerabilidades neste produto podem estar, como ele pode ser estendido, o que fazer se crescer. A preparação para uma entrevista de design de sistema ajuda a crescer como desenvolvedor; isso afeta significativamente a oferta e a posição. Se você é essencialmente um sênior ou um bom intermediário, mas não está se preparando, então provavelmente será levado para a posição júnior e terá que passar pelo processo de promoção dentro da empresa - confirmação da revisão por pares e tudo o mais em ordem para chegar à posição que você já ocupou, possivelmente emprestado de outra empresa. Portanto, faz muito sentido se preparar para economizar tempo e receber uma ótima oferta imediatamente. É claro,as ofertas para cargos seniores e juniores são muito diferentes - no Google, são dezenas de milhares de euros.
Preparar-se para uma entrevista de projeto de sistema é muito mais difícil do que preparar-se para uma entrevista de codificação. Não existe um sistema de teste que diga o que está certo e o que está errado. É importante ter alguém (geralmente algum desenvolvedor sênior) para lhe dar feedback sobre como você está respondendo as perguntas de maneira adequada. É ótimo ter uma base de conhecimento estruturada e praticar muito em pares. Você pode vir para a entrevista simulada de design de sistema, que fazemos no Verbetcetera. Também estamos pensando em fazer um curso de design de sistema algum dia.
A estrutura geral de como se comportar em uma entrevista de design de sistema é muito semelhante à de uma entrevista de codificação. Não há necessidade de pressa no início, é preciso fazer perguntas esclarecedoras, tentar entender qual é a tarefa. Você nunca precisa começar a resolver imediatamente ou dar alguma resposta que você lembra de algum site; Talvez você e o entrevistador tenham tarefas completamente diferentes em sua cabeça - é importante concordar com isso inicialmente, para prestar muita atenção à comunicação e compreensão. A segunda etapa depois de concordar com a tarefa é desenhar um design de alto nível para a tarefa e, em seguida, concordar com isso também. Depois disso, você precisa discutir quais problemas podem surgir neste projeto, o que há de mais interessante nele e mergulhar no problema mais importante e interessante. No final da entrevista, você precisa repassá-la, resumir sua decisão e oferecer algumas ideias sobre comoo que mais pode ser feito e melhorado. E tudo isso precisa ser feito em 45 minutos (ainda menos, porque há todos os tipos de soluços técnicos) - isso é muito difícil de fazer em movimento, você precisa se preparar.
P: Existem perfis de todos os mentores em algum lugar?
Ainda não estamos fazendo isso abertamente. Por enquanto, posso dizer que nossos mentores trabalharam (estão trabalhando) na FAANG e não estão muito interessados em falar abertamente sobre si mesmos. Pode ser um pouco confuso, mas essa questão de anonimato.
P: em quais áreas o mentor avalia? Apenas habilidades de programação, ou então habilidades de inglês e auto-apresentação?
Você é julgado por suas habilidades de programação, sua capacidade de resolver problemas; O inglês deve ser suficiente para a comunicação (não é necessário um nível superior). A auto-apresentação provavelmente influencia também, mas não tanto. Provavelmente, o quanto você é uma pessoa adequada influencia mais? Se você vier a uma entrevista comportamental e disser que odeia clientes, provavelmente não receberá uma oferta, apesar de suas habilidades de apresentação.
P: se o sênior falhou no projeto do sistema, ele é oferecido uma posição intermediária / júnior?
Sim, geralmente eles apenas fazem downgrade. Esta é uma situação comum: o sênior simplesmente não se prepara para o projeto do sistema, falha com ele e é oferecida uma posição inicial. Mas, é claro, se uma pessoa realmente tem um nível, ela pode crescer mais rápido do que o normal dentro da empresa. Será um pouco ofensivo, é claro, que eles não tenham contratado o veterano logo após a entrevista.
P: Você tem essas entrevistas simuladas sobre design na Bielo-Rússia (não entendi o nome, onde e como são realizadas, posso ter um link mais preciso?) Em inglês ou russo? Em geral, em quais países você tem mentores?
Todas as entrevistas simuladas são em inglês, porque na realidade serão em inglês. Os mentores são distribuídos; Estou na Rússia, a maioria deles está na Europa, na Inglaterra. Uma empresa bastante dispersa em diferentes partes do mundo. O link provavelmente estará na descrição do vídeo.
P: será possível baixar a apresentação?
Acho que não, mas você pode assistir no vídeo.
P: entrevista simulada online ou offline para moscovitas?
Ainda não pensamos na opção offline, enquanto tudo está online.
Então, hoje discutimos a entrevista de codificação - que perguntas são feitas, erros e mitos populares, como se preparar, quanto tempo leva (para que você seja realista sobre o processo e não pense que leva apenas 2 semanas para todos). E o design do sistema - por que se preparar para isso e como ele o ajudará.
Eu também queria fazer um anúncio. Queremos recrutar um curso: se um dos caras quiser entender os algoritmos necessários para uma entrevista técnica, estamos recrutando grupos desde março. Os grupos são pequenos, de 3 a 5 pessoas ou menos (quase um a um), para trabalhar com mentores da FAANG. Ao longo de três meses, passaremos por todos os princípios básicos de que você precisa para se preparar para uma entrevista técnica. De modo que, se você sentir que está cedendo nesse assunto, finalmente terá uma boa base e se sentirá confiante. Isso é especialmente adequado para pessoas que não podem dedicar tempo integral à preparação para entrevistas que estão trabalhando ativamente - este formato de curso pode funcionar.
E se você tiver uma entrevista em breve - venha até nós para uma entrevista simulada. Por algoritmos, por projeto de sistema; quando o fizermos, haverá um curso de desenho de sistemas. Ficarei muito feliz se você vier.
P: haverá mais kits, por exemplo, em maio?
Pode ser. Enquanto os planos são para março, os cursos terão duração de três meses; se os resultados forem bons, se nós e você gostarmos, então talvez haja outro conjunto.
Prepare-se, invista em você e no seu conhecimento. Vocês são todos ótimos, vocês vão conseguir.