O que devo esperar de uma avaliação técnica para C ++? [fechadas]


10

Me pediram para fazer um teste / avaliação técnica para um trabalho como desenvolvedor júnior, principalmente usando C ++. Este é o meu primeiro teste / avaliação e dura 2 horas.

Meu C ++ está um pouco enferrujado, pois tenho feito projetos recentemente em PHP.

Esta é uma empresa do Reino Unido, no entanto, acho que os testes técnicos dos candidatos serão praticamente os mesmos em todos os lugares.

O que devo esperar de um desses testes?


11
Esta pergunta é para PHP, mas as respostas se aplicam: programmers.stackexchange.com/questions/73654/…
— Eric Wilson

Respostas:


5

É C ++, então você pode esperar qualquer coisa, quero dizer REALMENTE qualquer coisa.

Geralmente, isso envolve perguntas complicadas e algum tipo de pergunta de polimorfismo.

Mas poderia ser algo simples também.

Esteja pronto para responder a uma pergunta sobre algo como "por que você tornaria um destruidor virtual", o que é "volátil", "projeta uma classe" para algum problema irrealista, "implementa uma lista vinculada", "inverte uma string" etc.


Eu adicionaria "Para que é mutableusada a palavra - chave?" para a categoria qualquer coisa.
— Tom

5

Se esse é um teste C ++ puro (ou seja, não é um teste Windows / MFC / C ++ gerenciado), passe algumas horas ou um dia com o Effective C ++ de Scott Meyer e você deve se sair muito bem. Ele não abrange modelos e o STL, mas se eles estivessem interessados ​​nisso, provavelmente não estariam fazendo um teste de duas horas. Já faz alguns anos, mas eu costumava entrevistar desenvolvedores de C ++ frequentemente. Embora as idéias no Effective C ++ sejam fundamentais para a programação em C ++, apenas cerca de dez por cento dos candidatos as conheciam.


11
+1 para recomendação de livros - e pule o livro C ++ mais eficaz de Scott Meyer. Quando eu costumava entrevistar programadores, eu também olhava para a honestidade intelectual (você tenta blefar ou admite que não sabe), sabe o que não sabe e sabe onde encontrar uma resposta. (Se entrevistar alguém que afirma ter trabalhado em C ++, as perguntas serão muito mais difíceis). Se não houvesse nada sugerindo habilidades de programação em outras línguas em seu currículo, eu também pediria que você escrevesse um programa simples e verifique se você cobriu os casos de canto corretamente.
— MZB

Sou formado em computação, fui ensinado a fazer programas no console em C ++, fui ensinado a implementar árvores de classificação binária e listas duplamente vinculadas etc. como implementá-los. O cargo é para um graduado, então não sei o que eles esperam de mim, porque não tenho uma experiência real de vida profissional em C ++.
— bearbread

4

Bem, depende de saber se eles vão deixar você usar o google. : P

Eu geralmente me saio muito bem em testes técnicos, desde que eu possa usar as ferramentas ao meu redor. Quando eles querem que eu codifique as cegas é quando eu tiver problemas. Portanto, o melhor conselho que posso dar é o código cego em casa ... Lembre-se de coisas triviais que tomamos como garantidas, porque podemos verificá-las facilmente se não lembrarmos.

Além disso, geralmente verifique as habilidades específicas de que precisam, portanto, se você souber no que estará trabalhando, concentre-se nisso.

(Isso é, na minha experiência geral, eu não sou do Reino Unido)


E a teoria, polimorfismo, herança. Eu só sei que a teoria de que a partir de apenas a graduação, mas eu não sei como implementá-lo em C ++
— bearbread

A implementação deles não é tão difícil, você provavelmente pode revisá-los muito rapidamente. A parte importante é saber quando é apropriado usá-los, quando você vai precisar. Eles são mais um padrão funcional do que um pré-requisito real. O que quero dizer é que você pode fugir sem usá-los, mas seria esperado que você os conhecesse, se necessário.
— AJC 02/02

@ bearbread: a teoria em si não vale muito. leia sobre padrões de design e tente implementá-los.
— Karoly Horvath

Eu sei padrões de design como MVC para PHP, é isso que você quer dizer?
— bearbread

1

Prática de kata de código Escolha um algoritmo simples (buffer de anel, torre de Hanói, pesquisa binária, qualquer que seja) e codifique-o do zero. Em seguida, faça-o novamente na próxima vez, e na próxima vez, e na próxima vez, e na próxima vez, e assim por diante. Veja como você pode aprimorá-los a cada iteração.


11
+1. Faça isso também com um amigo um pouco mais experiente. Se revezam para programar, vocês dois aprenderão algo novo.
— Tom

0

É verdade que você pode esperar qualquer coisa.

Eles disseram que o teste era C ++, mas talvez seja realmente o subconjunto C do C ++ que eles usam em seus testes (você usará matrizes de char em vez de cadeias de caracteres de biblioteca padrão). Isso será difícil de saber.

Se for realmente C ++, aconselho você a ver o básico:

  • Classes, variáveis, matrizes
  • referências, ponteiros (e por que você não os deve usar por padrão)
  • o uso da palavra-chave const
  • Conceitos de objetos orientados (herança, polimorfismo ...)
  • Modelos

então:

  • Usos padrão da biblioteca (std :: string, std :: vector, containers, ...)

0

O que foi publicado tem sido ótimo até agora, mas vou acrescentar algo e uma história! Eu diria praticar aplicando o que você sabe em C ++ a problemas no domínio da empresa de software. É ótimo se você conhece todos os detalhes do C ++, mas se você não pode aplicar a um problema, é inútil para a empresa. Como essa é uma posição de desenvolvedor júnior, eu não acho que eles esperariam que você soubesse tudo sobre C ++.

Fiz meu primeiro teste técnico para meu primeiro trabalho de desenvolvedor na semana passada e fiquei surpreso com o que encontrei. Eu estava esperando algo como o FizzBuzz ou algo mais básico (isso era para Java, aliás), mas o que eu achei foi que eles me deram um arquivo e me fizeram analisá-lo em um novo formato, que é a parte do trabalho. Além disso, eles me deixaram usar o Google e suas próprias bibliotecas. Resumindo, você precisa conhecer C ++, mas se quiser saber como será o teste, dê uma olhada no domínio da posição para a qual está se candidatando e trabalhe na implementação de C ++ para algo nesse domínio.


Eu acho que <1% dos programadores de C ++ conhecem tudo da linguagem :) Basta considerar todos os casos de comportamento indefinido / não especificado / definido por implementação como um exemplo.

0

Você está:

  1. Escrevendo código
  2. tomando múltipla escolha
  3. Entrevista presencial

Ao escrever código

Eles esperam que você saiba (e use):

  • RAII
  • A regra dos três
  • Entenda os ponteiros inteligentes

Eles provavelmente testarão você em:

  • Herança
  • Funções virtuais
  • Serialização para / de um fluxo
  • sobrecarregar os operadores aritméticos (geralmente não usados ​​na vida real, mas fáceis de fazer um teste).

Se você tiver azar, eles podem pensar

  • Herança múltipla e classes base virtuais é algo que você deve saber.
    • Não é, mas algumas pessoas ficam loucas.

Ao fazer múltipla escolha

  • Compreender toda a terminologia OO
  • Conheça as maneiras C ++ de implementar o OO

Entrevista Pessoal

  • Todos acima.
  • Conhecimento de recursão
  • Como converter recursão em um loop
  • Como estimar a complexidade do Big O ()
  • Os algoritmos de classificação padrão (não apenas bolhas).

11
Sou programador C em vez de C ++, por isso não conheço a conversa ... mas nunca ouvi falar da RIAA e da regra de três. No entanto, ouvi falar do RAII (a aquisição de recursos é a inicialização, ou seja, seu destruidor deve limpar sua própria bagunça) e sei que se o seu código precisar de um ctr de cópia, operador de atribuição de sobrecarga ou destruidor, ele precisará dos três. Parece-me que uma entrevista que é uma trivialidade brega na gíria de programação, em vez de um teste de suas habilidades, diz algo ruim sobre a empresa.

11
E igualmente, se eles perguntarem sobre herança múltipla e recursão, eu assumiria que a base de código deles é uma grande bagunça. Se eles esperam que você conheça todos os algoritmos comuns de classificação do nada, como desenrolar a recursão, serialização de objetos etc., também diz algo ruim sobre a empresa. Eles não esperam que seus desenvolvedores sejam robôs? No mundo real, você procura essas coisas antes de usá-las. Mesmo que eu conheça a teoria por trás de todas essas coisas, eu ainda as procuraria, apenas para ter certeza de usar a solução ideal em vez de algo assim - então eu vim comigo mesma.

@Lundin: Você não precisa conhecer os nomes sedosos, mas precisa conhecer os princípios, ao mencioná-los aqui, fica fácil procurar. Você precisa conhecer os algoritmos de classificação porque precisa saber qual usar e quando (e mais importante por que) (coisas que os robôs não podem fazer, mas os seres humanos fazem muito bem).
— Martin York

Não há nada inerentemente errado com recursão ou herança múltipla. O problema é que os desenvolvedores estão usando demais (e fazendo incorretamente). Alguns problemas só podem ser resolvidos (facilmente) usando a recursão (analisando primeiro a profundidade da estrutura da árvore).
— Martin York


-1

Eu cheguei na minha última entrevista:

Diferença entre passar um objeto para uma função por valor / referência / ponteiro e onde e por que você faria isso.

Troque os 2 últimos 8 bits de um número inteiro, por exemplo, RGBA para RGAB.

O que é RIAA?

Defina a meta-programação de modelos: você pode fazer uma pergunta em termos de "resolver este problema com o TMP .."

O que é mutável, volátil, const etc etc etc significa? conhece todas as palavras-chave.

herança múltipla .... novamente e novamente.

Multiencadeamento: consumidor do produtor e objetos de memória compartilhada em buffer.

Mais algumas questões de periferia:

Agregação e composição UML

Padrões de design: implemente um singleton ... Quais são os componentes comuns do MVC?

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.