O temido teste de entrevista de programação em C # - algum conselho? [fechadas]

21

Tenho um possível trabalho de desenvolvimento em C #, mas antes que eu possa entrevistar, preciso passar em um teste com a agência de empregos.

Agora, mesmo sendo um desenvolvedor sênior com mais de 10 anos de experiência em programação e mais de 3 anos com c #, não estou realmente ansioso por este teste e acho que há uma boa chance de que eu falhe.

Na minha experiência, esses testes são imprevisíveis, pedindo coisas que você raramente usa em situações cotidianas de trabalho.

Preciso do seu melhor conselho sobre o que eu deveria revisar - um bom livro ou site, por exemplo. Tenho menos de uma semana para me preparar e é essencial que eu passe por isso.

Desde já, obrigado.

EDIT: Para justificar ainda mais minhas preocupações de escrever esses testes - considere a seguinte pergunta:

12) Um evento é:

   a) The result of a users action - correct answer
   b) The esult of a party
   c) code to force users action

A resposta correta de acordo com o teste é A, mas desde que eu estou desenvolvendo SOA (geralmente quando os eventos podem ser baseados em eventos do sistema (não em ações do usuário), tenho 100% de certeza de que um evento não precisa ser conduzido por uma ação do usuário.Esta também foi uma questão de C # (não uma questão do ASP.net) .Com base no meu entendimento, não consegui identificar a resposta correta, mas B parece o melhor de todos (se a definição de parte for: any entidade que pode desencadear um evento.Este tipo de perguntas me assusta.

JL01
fonte
4
Se você é um 'desenvolvedor sênior' e usa o C # diariamente há três anos, deve estar bem. Esses testes normalmente destinam-se a eliminar as pessoas que não conhecem o idioma ou seus usos. Se você o usa diariamente há 3 anos, deve ter encontrado quase todas as armadilhas em um determinado teste.
9137 George Stocker
11
@ GeorgeorgeStocker - na verdade, eu tive que fazer alguns desses testes (voltados mais para o framework .NET completo) e eles foram muito detalhados. Achei-os bastante difíceis, porque primeiro eles entraram em áreas da estrutura (como o WCF) onde eu simplesmente não tinha muita experiência, além de que você precisava saber coisas como qual opção de configuração usaria em um arquivo .config para ativar alguma opção obscura. Eram coisas que você raramente se incomodava em memorizar, porque provavelmente só usaria uma vez e pesquisaria no Google. Achei a experiência um pouco frustrante.
Scott Whitlock
7
Ah, e uma das perguntas que eu errei foi "no VB.NET, qual é a palavra-chave usada para declarar uma estrutura? A) struct b) Estrutura c) estrutura d) Estrutura". Eu estava pensando "o intellisense sabe disso, então não preciso!" Agora, é claro, a resposta está gravada em minha memória.
Scott Whitlock
17
@ScottWhitlock: Não há como você se preparar adequadamente para uma entrevista mal planejada. Em algum momento, você precisa confiar que eles são competentes o suficiente para perguntar e julgar, com base nas áreas nas quais você realmente afirma se especializar, bem como em algumas habilidades conceituais. Se não estiverem, você provavelmente terá um tempo miserável trabalhando para eles de qualquer maneira.
Aaronaught 3/11
2
Este é um teste de linguagem C # ou um teste do .NET Framework?
Formigas

Respostas:

24

Embora um pouco antiga, talvez esta postagem do blog seja útil para você: O que os grandes desenvolvedores .NET precisam saber (Mais perguntas sobre entrevistas com .NET)

Todo mundo que escreve código

  • Descreva a diferença entre um thread e um processo?
  • O que é um Serviço Windows e como o seu ciclo de vida difere de um EXE "padrão"?
  • Qual é a quantidade máxima de memória que qualquer processo único no Windows pode endereçar? Isso é diferente da memória virtual máxima para o sistema? Como isso afetaria um design de sistema?
  • Qual é a diferença entre um EXE e uma DLL?
  • O que é digitação forte versus digitação fraca? Qual é o preferido? Por quê?
  • O produto de Corillian é um "contêiner de componentes". Nomeie pelo menos três contêineres de componentes que são enviados agora com a Família do Windows Server.
  • O que é um PID? Como é útil na solução de problemas de um sistema?
  • Quantos processos podem escutar em uma única porta TCP / IP?
  • O que é o GAC? Qual problema isso resolve?

Desenvolvedor .NET de nível médio

  • Descreva a diferença entre programação orientada a interface, orientada a objetos e orientada a aspectos.
  • Descreva o que é uma interface e como ela é diferente de uma classe.
  • O que é reflexão?
  • Qual é a diferença entre XML Web Services usando ASMX e .NET Remoting usando SOAP?
  • O sistema de tipos é representado pelo XmlSchema e pelo CLS isomórfico?
  • Conceitualmente, qual é a diferença entre ligação inicial e ligação tardia?
  • Está usando Assembly.Load uma referência estática ou dinâmica?
  • Quando seria apropriado usar Assembly.LoadFrom ou Assembly.LoadFile?
  • O que é um Nome Qualificado de Montagem? É um nome de arquivo? Como é diferente?
  • Isso é válido? Assembly.Load ("foo.dll");
  • Como uma assemblagem com nome forte é diferente de uma assemblagem com nome não forte?
  • DateTimes pode ser nulo?
  • O que é o JIT? O que é o NGEN? Quais são as limitações e benefícios de cada um?
  • Como o coletor de lixo geracional no .NET CLR gerencia a vida útil do objeto? O que é finalização não determinística?
  • Qual é a diferença entre Finalize () e Dispose ()?
  • Como o padrão using () é útil? O que é IDisposable? Como ele suporta finalização determinística?
  • O que essa linha de comando útil faz? lista de tarefas / m "mscor *"
  • Qual é a diferença entre in-proc e out-of-proc?
  • Que tecnologia permite a comunicação fora do processo no .NET?
  • Quando você está executando um componente no ASP.NET, em que processo ele está sendo executado no Windows XP? Windows 2000? Windows 2003?

Desenvolvedores / arquitetos sênior

  • O que há de errado com uma linha como esta? DateTime.Parse (myString);
  • O que são PDBs? Onde eles devem estar localizados para que a depuração funcione?
  • O que é complexidade ciclomática e por que é importante?
  • Escreva um bloqueio padrão () mais uma “verificação dupla” para criar uma seção crítica em torno de um acesso variável.
  • O que é o FullTrust? Os assemblies do GAC têm FullTrust?
  • Qual o benefício que seu código recebe se você o decorar com atributos que exigem permissões de segurança específicas?
  • O que isso faz? gacutil / l | encontrar / i "Corillian"
  • O que isso faz? sn -t foo.dll
  • Quais portas devem estar abertas para o DCOM através de um firewall? Qual é o objetivo da porta 135?
  • Contraste OOP e SOA. Quais são os princípios de cada um?
  • Como o XmlSerializer funciona? Quais permissões ACL um processo para usá-lo exige?
  • Por que catch (Exception) quase sempre é uma má idéia?
  • Qual é a diferença entre Debug.Write e Trace.Write? Quando cada um deve ser usado?
  • Qual é a diferença entre uma compilação Debug e Release? Existe uma diferença significativa de velocidade? Por que ou por que não?
  • A JITting ocorre por montagem ou por método? Como isso afeta o conjunto de trabalho?
  • Contraste o uso de uma classe base abstrata contra uma interface?
  • Qual é a diferença entre a.Equals (b) e a == b?
  • No contexto de uma comparação, o que é identidade de objeto versus equivalência de objeto?
  • Como alguém faria uma cópia profunda no .NET?
  • Explique o pensamento atual sobre o IClonable.
  • O que é boxe?
  • String é um tipo de valor ou de referência?
  • Qual é o significado do padrão "PropertySpecified" usado pelo XmlSerializer? Que problema ele tenta resolver?
  • Por que nossos parâmetros são uma má idéia no .NET? São eles?
  • Os atributos podem ser colocados em parâmetros específicos para um método? Por que isso é útil?

Desenvolvedores de componentes C #

  • Justaponha o uso de substituição com novo. O que é sombreamento?
  • Explique o uso de virtual, lacrado, substituição e abstrato.
  • Explique a importância e o uso de cada componente dessa cadeia de caracteres: Foo.Bar, Versão = 2.0.205.0, Culture = neutral, PublicKeyToken = 593777ae2d274679d
  • Explique as diferenças entre público, protegido, privado e interno.
  • Que benefício você obtém ao usar um PIA (Primary Interop Assembly)?
  • Por qual mecanismo o NUnit sabe quais métodos testar?
  • Qual é a diferença entre: catch (Exceção e) {throw e;} e catch (Exceção e) {throw;}
  • Qual é a diferença entre typeof (foo) e myFoo.GetType ()?
  • Explique o que está acontecendo no primeiro construtor: public class c {public c (string a): this () {;}; public c () {;}} Como essa construção é útil?
  • O que é isso ? Isso pode ser usado dentro de um método estático?

Desenvolvedores ASP.NET (UI)

  • Descreva como um Form POST baseado em navegador se torna um evento do lado do servidor como Button1_OnClick ...
Konamiman
fonte
1
Todas as respostas listadas aqui foram úteis e boas, no entanto, passei por todas as perguntas da sua lista (levei 4 horas) e escrevi uma amostra de teste on-line e passei. Gostaria de encorajar qualquer desenvolvedor .net a passar por essas perguntas pelo menos uma vez e garantir que entendeu as respostas e obter 2ª e 3ª opiniões. Muitas pessoas respondem às perguntas (encontradas no Google), mas muitas das respostas não são concisas às vezes até erradas. Por isso tem cuidado. Cruze as respostas que encontrar.
JL01 04/11
2
Bom link! Estou surpreso com quantos deles eu conhecia. this.Ego ++;
Justin Auto
@justnS: O mesmo aconteceu comigo quando descobri o post. :-)
Konamiman
Fui a uma entrevista há algumas semanas e eles tinham isso impresso para eu responder. o que para mim refletiu no entrevistador.
Dbones
1
Quando você adicionará as respostas? ;)
Thijs van Dien
10

Apenas vá embora, Renee

Fiz testes como esse algumas vezes. Agora eu apenas vou embora. Os testes medem os bits mais triviais do conhecimento de programação. Deseja trabalhar para alguém que acha que esses testes são uma boa maneira de avaliar programadores? Eu não.

Kevin Cline
fonte
1
Eles são uma boa maneira como padrão mínimo , isto é, uma condição necessária , mas não suficiente .
Sklivvz
4
@ Sklivvz: talvez, se fossem bons testes. A maioria dos testes comerciais são exercícios tolos de trivialidades: "Que classe você usaria para ler um arquivo de texto?" Um bom desenvolvedor pode falar por dez minutos sobre as diferenças entre fluxos de bytes e caracteres, e os detalhes das codificações UTF, e ainda assim perder essa pergunta. Quando a informação é facilmente acessível, não faz sentido memorizá-la.
Kevin cline
2
Eu concordo com o Kevin. Há muitas informações irrelevantes para o seu trabalho que podem estar nos testes. É por isso que eles inventaram o Google e o IntelliSense - quando precisamos de respostas, as encontramos, com base na necessidade de usá-lo
ADNow
2
Depende do teste. Existem testes dos quais eu me afastaria, mas há testes que são bons. Temos um teste simples de 3 perguntas de programação. A primeira pergunta é escrever um aplicativo C # simples. O segundo pede para escrever 5 consultas SQL simples. O thrid é uma pergunta que não pode ser respondida sem que o participante do teste peça mais informações. A primeira e a segunda questões descartam programadores completamente incompetentes. Isso economiza tempo ao entrevistar pessoas que não valem nosso tempo. A terceira pergunta nos dá uma visão de como um programador aborda a solução de problemas. Coisas muito valiosas.
Pete
8

Eu estava em uma situação como a sua no ano passado. Fazia tanto tempo que eu estive em uma entrevista que estava com medo. Fiz uma pesquisa para perguntas da entrevista em C # e encontrei vários sites (muitos deles listados pelos outros pôsteres) e os estudei. Para minha surpresa, 90% das entrevistas foram feitas exatamente no site . Acho que os entrevistadores usam o Google também para encontrar perguntas :)

Sistema caiu
fonte
6

Eu concordo totalmente com você em:

testes são imprevisíveis, perguntando-lhe coisas que você raramente usa em situações de trabalho diárias.

..mas eles fazem parte do processo, então não há nada que possamos realmente fazer sobre isso. Eu sou algo como você, com cerca de 10 anos de experiência, dos quais cerca de 5 em .NET C #. Achei esses dois livros MUITO bons:

C # em profundidade

C # em poucas palavras

deve cobrir tudo o que você precisa saber sobre C #. O resto são suas próprias habilidades e habilidades que você utiliza em tecnologias específicas baseadas em C # como ASP.NET etc.

TheBoyan
fonte
3
mas eles fazem parte do processo, então não há nada que possamos realmente fazer sobre isso. Que tal advogar não ter testes de programação tolos em seu local de trabalho como parte do processo de contratação? Os processos de contratação devem mostrar sua competência, não que você possa memorizar curiosidades obscuras.
Joshin4colours #
@ joshin4colours - é por isso que eu acredito no bom ol' longa conversa na entrevista ... eles são bons para a eliminação embora
TheBoyan
2
Na verdade, eu entrevistei o autor de um dos livros e rejeitou-o ...
Sklivvz
3

Esses testes tornaram-se cada vez mais parte dos candidatos à pré-triagem por empresas de recrutamento profissional e algumas empresas. Eles foram projetados para oferecer aos entrevistadores não técnicos uma maneira de avaliar as habilidades técnicas de alguém. No entanto, são essencialmente apenas testes triviais que não dizem nada significativo sobre as habilidades de um programador, a não ser eliminar aqueles que realmente não sabem de nada. Infelizmente, algumas empresas / recrutadores colocam muito peso nesses resultados.

A maneira de estudar para eles é encontrar sites de perguntas para entrevistas, sites legítimos e não aqueles que tentam vender as respostas, repletos de anúncios pop-up ou outras bobagens desse tipo, e apinhados nas respostas. Dessa forma, você obterá uma pontuação decente e ultrapassará os obstáculos. Se a empresa está colocando muito peso nesses resultados, provavelmente não é a melhor empresa para se trabalhar.

jfrankcarr
fonte
2

Se é um teste de agência de emprego, não deve ser tão difícil. Não é que eles tenham especialistas em idiomas para desenvolver o teste. Provavelmente, tudo o que eles farão é copiar / colar perguntas de um site.

Desde que você saiba como a estrutura funciona em geral e os espaços para nome / bibliotecas mais comuns para tarefas, quais itens você deve usar para determinadas tarefas, você deve ser bom.

silverCORE
fonte
2

Com os testes de entrevista, muito depende da cultura corporativa e do criador do teste. Se eles pretendem fazer perguntas obscuras e tentar enganá-lo, eu passaria para outra empresa ou agência que esteja mais interessada em indivíduos de alta qualidade, inteligentes e capazes de fazer o trabalho.

Dito isto, ao usar o c # em seu trabalho diário, eu concentraria seus esforços de resolução de problemas e lógica e menos no lado de aprendizado das coisas.

O Project Euler é um ótimo lugar para praticar e aprimorar habilidades que provavelmente se tornaram um pouco enferrujadas.

SetiSeeker
fonte