Se você pudesse fazer uma pergunta a um programador de C ++ para medir suas habilidades em C ++, qual seria?
A pergunta que acho melhor é: você pode chamar "excluir isso"; dentro de uma função membro? (Coloquei isso como um link para que você possa pensar primeiro e depois vá para A Melhor Pergunta de Entrevista em C ++ - Sempre! Para ver a resposta correta.)
Não pergunto isso porque espero que a maioria das pessoas saiba a resposta. Se o fizessem, não seria uma pergunta tão útil. Peço para ver se eles conseguem encontrar a resposta correta e como o fazem.
A melhor pergunta para entrevista em C ++ seria um problema de programação, não uma pergunta de teste.
fonte
CString
,char*
,std::string
, etc .; eles retornam uma nova string ou invertem no lugar; eles fazem um loop manual sobre os caracteres ou chamam uma função de biblioteca. E, claro, se eles não podem fazer algo simples como reverter uma string, isso também diz muito sobre eles! Também há muitas perguntas de acompanhamento, como funciona com Unicode, funciona com UTF-8, etc.Gostaria de perguntar o que eles gostam sobre C ++ 0x. A partir disso, eu poderia "agrupá-los" em vários estereótipos:
Provavelmente, alguns desses baldes são perfeitos para você e alguns são "obrigado por entrar". Como uma pergunta que fornece muitas informações rapidamente, esse é o meu vencedor.
fonte
Estou um pouco confuso sobre o porquê "você pode excluir isso?" é considerado uma questão interessante. Qualquer pessoa que tenha escrito código COM em C ++ sabe que a primeira coisa que você aprendeu no primeiro dia de programação básica de COM é como usar "excluir isso" corretamente. Suponho que possa ser útil determinar se, digamos, alguém está mentindo em seu currículo sobre ter escrito programas COM, mas como uma pergunta C ++ de conhecimento geral, se alguém não puder respondê-lo imediatamente, não será um bom ajuste. para minha equipe.
De qualquer forma, se seu objetivo é apresentar uma pergunta que mede as habilidades de C ++, escolher uma pergunta é o caminho errado. Virar o jogo. A pergunta certa a fazer é:
Esta não é a pergunta que lhe dá a resposta que deseja. Todo mundo diz "oito", independentemente. A pergunta que lhe dá a resposta que você deseja é:
E bum , agora você os tem. Se o candidato acha que "algo a ver com recursão" ou "quando usar um destruidor virtual" é o tipo de coisa com a qual um sete tem dificuldade, então você sabe que ele sabe um pouco sobre recursão ou destruidores ou qualquer outra coisa e que o conhecimento deles não vai muito além disso.
Isso deve fornecer uma calibração muito melhor do que chegar a uma pergunta trivial. Se você me forçar a apresentar uma boa pergunta sobre um fato sobre C ++, provavelmente perguntarei algo como "como você projetaria o analisador semântico e o gerador de código para a parte de um compilador C ++ que lida com métodos virtuais chamado em um destruidor de classe base? " Você deve fazer perguntas relacionadas a coisas reais nas quais trabalha e em que o candidato provavelmente trabalhará. Esse é um problema no qual tive que trabalhar uma vez e acho que daria uma boa visão de como uma pessoa cria analisadores semânticos e geradores de código, bem como seu conhecimento de C ++.
fonte
Só por diversão, tive programadores de C ++ se recuperando com este bebezinho:
Por que isso é executado em um loop infinito (e sim, é digitado corretamente)?
É incrível o número de viagens. Obviamente, não posso mais usá-lo depois que apareceu no Stack Overflow . Murmurar ... murmurar ...
(Para obter a resposta correta, leia a confissão e, definitivamente, leia os comentários)
Pergunta de bônus adicionada
Existe o clássico FizzBuzz de todos os tempos (como destaque no agora famoso artigo de Horror em Codificação ). Eu nunca o usei em uma entrevista, mas depois de dar uma olhada na equipe de desenvolvimento em uma hora do almoço, os resultados foram ... um ... surpreendentemente precisos.
Confissão
Eu fui pego na resposta padrão "x ++ retorna o valor original". No entanto, a resposta correta é que o comportamento é indefinido devido a pontos de sequência. Ninguém nunca mencionou pontos de sequência em todos os momentos em que usei isso até publicá-lo aqui.
Eu fui educado e gostaria sinceramente de agradecer a todos que se dedicaram a comentar.
fonte
A primeira coisa a fazer é uma pergunta simples sobre ponteiros. Fiquei surpreso ao ver quantas pessoas que afirmam conhecer C ++ ou, pior ainda, C, são incapazes de responder. Então eu faria uma pergunta simples sobre funções virtuais. Essa combinação informa muito rapidamente se a pessoa conhece ou não C ++.
fonte
Isso depende muito do tipo de C ++ escrito em sua empresa. (Quando tive que contratar programadores C ++, nunca perguntei
delete
, porque perguntei sobre técnicas para evitar a necessidade de escreverdelete
completamente.)Idealmente, você deseja contratar pessoas que escrevem código acima do nível que sua equipe atualmente escreve, mas não muito acima dele, a menos que queira combinar isso com o treinamento da equipe para elevá-lo a um nível superior.
fonte
fonte
Acredito que lhes perguntaria o que mais eles sabem ou, mais provavelmente, lhes faria uma pergunta em algo bem diferente.
Muitos codificadores C ++ sobre quem tem pouca experiência em outras linguagens. A experiência restrita é geralmente restritiva.
fonte
A melhor pergunta para um ótimo desenvolvedor de C ++ é "Diga-me as razões pelas quais NÃO devemos usar C ++?"
fonte
Eu não acho que haja uma melhor pergunta sobre C ++. O C ++ é uma linguagem tão grande e, com o C ++ 0X, cresce, que você pode estar forte em um determinado subdomínio da linguagem e pouco sobre outra parte da linguagem. Uma pergunta 'one shot' apenas exercita o conhecimento de alguém de uma pequena parte da linguagem e corre o risco de negligenciar o conhecimento de outros aspectos da linguagem.
fonte
Há um monte no StackOverflow. Vou compartilhar alguns:
/programming/2428404/tricky-interview-question-for-c
/programming/50447/favorite-c-interview-question
/programming/4269838/interview-question
/programming/2532102/can-a-pointer-ever-point-to-itself
/programming/3055141/interview-question-about-virtual-functions-in-c
fonte
Minha pergunta favorita é simples:
a) Você começou com C e depois mudou para C ++?
b) Em caso afirmativo, quais foram as primeiras coisas que você aprendeu a fazer de maneira diferente?
Essa resposta geralmente me dá uma idéia de como o programador aborda o C ++ e sua compreensão do OOP e C ++ em geral.
não há resposta "certa" ou "errada" aqui, mas geralmente é uma ótima maneira de ter uma idéia de onde o candidato está vindo.
fonte
Na verdade, eu apresentava à pessoa um pouco de código de outra linguagem de programação orientada a objetos e, de preferência, não na lista de linguagens que ela conhece. O código deve representar uma tarefa simples feita nesse idioma.
O objetivo disso não seria determinar seu conhecimento de C ++, mas descobrir como eles entendem a programação. Quando você entende os conceitos básicos por trás da programação, pode resolver problemas.
fonte
Como você implementa funções virtuais em C ++, explique um cenário do mundo real.
fonte
No momento, eu diria: "Como você implementaria um construtor de movimentação para um contêiner?"
Minha lógica é que, como os construtores de movimentação são uma característica do próximo padrão e não do atual, a resposta do candidato indicará se o desenvolvedor em questão busca ativamente o conhecimento de seu idioma ou apenas se apega aos truques que conhece.
fonte
Acho que pediria a opinião deles sobre o design de, digamos
std::string
,. Eu também perguntar-lhes se eles usaram outros projetos (por exemplo, MFC / ATLCString
,wxString
etc.) e assumindo que eles têm, pedir-lhes para comparar e contrastar os projetos.As strings são amplamente usadas para que quase qualquer pessoa com experiência real usando C ++ deva ter usado pelo menos um ou dois dos itens acima. Quase todos os projetos incorporam alguns compromissos entre pureza teórica e uso prático. Alguns podem funcionar muito bem, mas somente se usados exatamente como pretendido, enquanto outros trocam maior versatilidade por alguma falta de jeito possível. Em suma, quase qualquer um que tenha experiência real deve ser capaz de expressar algumas opiniões significativas de seus projetos e essas opiniões deve dizer-lhe uma quantidade razoável sobre como eles pensam, como eles projetar código, o grau em que o valor pragmatismo contra pureza teórica, e assim por diante.
fonte