As perguntas básicas incluem:
Acho que geralmente ajuda pedir aos candidatos que concluam um exercício de codificação simples, como:
- Escreva sua própria classe de lista vinculada sem usar as classes internas.
- Escreva sua própria classe de hashtable sem usar as classes internas.
- Escreva uma classe que represente uma árvore binária. Escreva um método que atravesse todos os nós da árvore.
- Escreva um método para executar uma pesquisa binária em uma matriz sem usar métodos internos.
- Desenhe um esquema de banco de dados para um blog. Cada usuário possui apenas um blog, cada blog possui muitas categorias, cada categoria possui muitas postagens e cada postagem pode pertencer a mais de uma categoria. Peça ao seu candidato que faça consultas para obter informações específicas.
Em seguida, procure conhecimento técnico específico:
- (Manipuladores de eventos) Crie uma classe com um manipulador de eventos personalizado, crie outra classe que se conecte ao manipulador de eventos personalizado.
- (XML) Carregue um documento XML e selecione todos os nós com as propriedades x, ye z.
- (Programação funcional) Crie uma função que aceite outra função como parâmetro. Uma função Mapa ou Dobra funciona muito bem para isso.
- (Reflexão) Escreva uma função que determine se uma classe tem um atributo específico.
- (Regex) Escreva uma expressão regular que remova todas as tags de um bloco de HTML.
Nenhuma dessas perguntas é particularmente difícil para um programador de C # proficiente responder, e elas devem fornecer uma boa idéia dos pontos fortes específicos de seus candidatos. Você também pode trabalhar em algumas perguntas / amostra de código que fazem uso de padrões de design específicos.
[Editar para esclarecimentos] :
Parece que muitas pessoas não entendem por que eu faria esses tipos de perguntas. Deixe-me tocar em alguns comentários das pessoas (não estou citando diretamente, mas parafraseando):
P: Quando foi a última vez que alguém usou referências voláteis ou fracas?
R: Quando dou entrevistas técnicas, procuro verificar se uma pessoa entende os recursos de alto e baixo nível do .NET. Voláteis e referências fracas são dois recursos de baixo nível fornecidos pelo .NET - mesmo que esses recursos não sejam usados com frequência na prática, as respostas a essas perguntas são extremamente reveladoras:
Um bom entendimento dos voláteis demonstra que uma pessoa entende como as otimizações do compilador alteram a correção do código, como os threads mantêm cópias locais do estado compartilhado que podem estar fora de sincronia a qualquer momento e tem um conhecimento mínimo de algumas das complexidades do código multithread .
Um bom entendimento de referências fracas demonstra que uma pessoa conhece os detalhes íntimos do coletor de lixo e como ele decide quando liberar memória. Claro, você pode perguntar aos candidatos "como funciona um coletor de lixo", mas perguntar sobre referências fracas obtém uma resposta muito melhor e mais ponderada.
O .NET é uma linguagem bastante abstrata, mas os desenvolvedores famosos quase sempre têm um profundo entendimento do CLR e dos detalhes de baixo nível do tempo de execução do .NET.
P: Por que alguém precisaria implementar sua própria lista hashtable ou vinculada?
R: Não estou sugerindo que a classe Dictionary seja inferior ou que as pessoas devam usar sua própria hashtable. Essa é uma pergunta básica que testa se uma pessoa tem um entendimento mínimo das estruturas de dados. É para isso que essas perguntas testam: entendimento mínimo.
Você aprende sobre essas hashtables e listas vinculadas no primeiro dia do Data Structures 101. Se alguém não puder escrever uma hashtable ou uma lista vinculada do zero, haverá uma enorme lacuna no conhecimento técnico.
P: Por que essas perguntas são tão cruas?
R: Como o título deste segmento é "perguntas que todo desenvolvedor .NET bom deve saber". Todo desenvolvedor .NET inicia sua carreira escrevendo aplicativos rudimentares, e 90% de todo o pessoal de desenvolvimento de aplicativos vive da vida com aplicativos de linha de negócios.
Acho que as perguntas que testam o conhecimento das pessoas sobre aplicativos de linha de negócios são apropriadas na maioria dos casos, a menos que você esteja procurando desenvolvedores em nichos muito específicos, como desenvolvimento de compiladores, desenvolvimento de mecanismos de jogos, provas de teoremas, processamento de imagens etc. .