Desenvolvedor C++
Crie um aplicativo que possa ser usado para buscar uma string em arquivos.
Input:
O aplicativo receberá dois parâmetros na linha de comando. O primeiro parâmetro é um caminho para um arquivo ou pasta, enquanto o segundo parâmetro é a string a ser buscada (com comprimento máximo de 128 caracteres).
Output:
Imprima a saída no stdout com linhas no formato ;<file>(<position>): <prefix>…<suffix>”.
<file>: Nome do arquivo que contém a string
<position>: Posição no arquivo onde a string começou (base zero)
<prefix>: Três caracteres antes da correspondência
<suffix>: Três caracteres após a correspondência
Quando não houver caracteres suficientes para todo o prefixo ou sufixo (no início ou fim do arquivo), use o máximo disponível. No prefixo e sufixo, tabulações devem ser impressas como “\t” e quebras de linha como “\n”.
Assuma que o caminho pode apontar tanto para um único arquivo de texto quanto para um diretório contendo arquivos e/ou mais pastas (o aplicativo deve ser capaz de percorrer recursivamente e processar todos os arquivos em subdiretórios). O aplicativo deve considerar que os arquivos podem ser muito grandes (possíveis limitações de memória). Ele não deve falhar por nenhum motivo (garantir tratamento adequado de exceções, erros de funções da API, etc.) e deve imprimir mensagens de erro significativas quando ocorrer um problema (informando quando argumentos insuficientes foram fornecidos, o caminho de entrada é inválido, etc.).
Observação! A solução deve fazer uso de multi-threading no processamento dos dados (pelo menos teoricamente). No entanto, uma solução single-threaded pode ser mais rápida nesta varredura sequencial, especialmente em discos mais lentos. Tente maximizar a velocidade e comparar os resultados com uma solução single-threaded.
O que será avaliado
Como você constrói sua solução é decisão sua. Leve o tempo necessário para desenvolver uma solução excelente, pois isso é preferível a entregar algo mediano rapidamente. Sua solução será usada para estimar seu nível de experiência em engenharia de software. Uma solução bem feita garantirá uma entrevista, um nível de cargo mais alto e uma oferta salarial mais atraente. Sua solução será discutida em detalhes durante a entrevista.
Seu código-fonte deve demonstrar:
- seu estilo de programação,
- uso de princípios de programação orientada a objetos,
- melhores práticas de programação em C++,
- uso sistemático de convenções de nomenclatura,
- uso adequado de comentários nos locais corretos,
- boa estrutura do código,
- tratamento de erros e exceções,
- evitação de construções perigosas ou propensas a erros,
- seu entendimento sobre o funcionamento interno do C++ e funções padrão (evitando desperdício de memória ou cópias desnecessárias de strings/memória).
Evite vazamentos de memória, especialmente devido a exceções não tratadas. Preferimos ver o uso de bibliotecas padrão do C++14, mas o uso do Boost também é aceitável.
Uma citação que resume bem: "Sempre codifique como se a pessoa que for manter seu código fosse um psicopata violento que sabe onde você mora. :-)
Envie seu desafio para: challenge@joineset.com
Ao aceitar este desafio, você concorda com os Termos e Condições da ESET e reconhece a Política de Privacidade da ESET