As 8 principais perguntas e respostas importantes da entrevista de codificação 2022 [para calouros e experientes]
Publicados: 2021-08-25Bons fundamentos de estruturas de dados, como arrays, árvores binárias, tabelas de hash e listas vinculadas são essenciais. Você deve estar ciente dos algoritmos e métodos essenciais e ter um bom domínio sobre linguagens de programação como Java, especialmente se estiver se candidatando a empregos de programação. Você pode definitivamente aprender as respostas para perguntas importantes da entrevista de codificação, mas praticar as soluções extensivamente por conta própria é altamente recomendado.
As 8 melhores perguntas de entrevista de codificação e suas respostas
Vejamos algumas das questões de codificação mais importantes que são feitas em entrevistas hospedadas por grandes empresas como Microsoft, IBM, Google, etc.
1. Como você pode encontrar o primeiro caractere não repetido em uma palavra?
Para responder a essa pergunta, primeiro você precisa entender o que deve ser feito para promover essa função. Uma função precisa ser escrita que aceite strings e retorne os primeiros caracteres não repetidos.
Por exemplo, na palavra 'passagem', 'p' é o primeiro caractere não repetido ou na palavra 'tartaruga', 'u' é o primeiro caractere não repetido. Então, como resolvemos esse problema? Podemos criar uma tabela para armazenar as repetições de todos os caracteres e depois selecionar as primeiras entradas que não se repetem.
Para escrever um código que retornará as primeiras letras não repetidas, podemos usar LinkedHashMap para armazenar a contagem de caracteres. Este HashMap segue a ordem de inserção e os caracteres são inicializados na mesma posição que na string. A string digitalizada deve ser iterada usando LinkedHashMap para escolher a entrada necessária com o valor de 1.
Outra maneira de abordar esse problema é usando firstNonRepeatingChar(String word). Isso permite que o caractere não repetido que aparece primeiro seja identificado em uma única passagem. Essa abordagem usou dois armazenamentos para substituir uma interação. Este método armazena caracteres não repetidos e repetidos separadamente e quando a iteração termina, o caractere necessário é o primeiro elemento da lista.
2. Como você pode remover duplicatas de arrays?
Primeiro, você deve usar o LinkedHashSet (Set Interface) para manter a ordem de inserção original dos elementos no conjunto. Você deve usar loops ou funções de recursão para resolver esses tipos de perguntas de entrevista de codificação.
O principal fator que devemos ter em mente ao lidar com arrays não são os elementos que possuem duplicatas. O principal problema aqui é remover as duplicatas. Arrays são estruturas de dados estáticas que são de comprimento fixo, portanto, não podem ser alteradas. Portanto, para excluir elementos de arrays, você precisa criar novos arrays e duplicar o conteúdo nesses novos arrays.
Primeiro, você deve converter os arrays em Arraylists e, em seguida, criar LinkedHashSets a partir desses ArrayLists. Se as matrizes de entrada contiverem um número maior de duplicatas, isso poderá resultar em várias matrizes temporárias, aumentando assim o custo de importação do conteúdo. Essa restrição impõe que abordemos esse problema de uma maneira que exija menos memória e poder de processamento.
Devemos remover as duplicatas, mas não copiá-las nas matrizes resultantes, portanto, não excluindo as duplicatas inteiramente, mas simplesmente substituindo-as por 0 como o valor padrão.
3. Como podemos verificar se um número é primo?
Esta é uma das perguntas de entrevista de codificação mais comuns que envolvem descobrir se o número fornecido é um número primo ou não. Esses tipos de programas são os fundamentos do pensamento algorítmico, pois devemos encontrar soluções baseadas no fato de que os números primos são todos números naturais que não podem ser divididos por números positivos além de 1.
Devemos escrever código para criar loops que verificam cada número começando de 1 até o número de destino para ver se o número de destino é divisível por qualquer outro número positivo que não seja ele mesmo ou 1.
Esta função nos levará à solução. Ao verificar um número especialmente grande, podemos simplesmente verificar até a raiz quadrada de N, sendo N o número de destino. Não há necessidade de verificar até N no caso de uma raiz quadrada elegível.
Se o número não for divisível por 2, não há necessidade de verificar se é divisível por outros números pares, diminuindo assim o tempo necessário para encontrar a solução. Esta é uma versão otimizada da solução em que analisar o número antes de escrever a solução é útil.
4. Como você pode verificar se as strings contêm apenas dígitos?
Se você deseja escrever expressões regulares para verificar se as strings são apenas números ou se contêm caracteres que não são dígitos, primeiro você deve se familiarizar com o uso de conjuntos de caracteres em expressões regulares Java. Linguagens de programação como Java suportam expressões regulares com a ajuda da classe java.util.regex.Matcher e java.util.regex.Pattern. Java.util.regex é um pacote dedicado para esta finalidade.
Para validar a existência de apenas números usando expressões regulares, podemos usar código para analisar se as strings contêm um inteiro bruto. Verificaremos se a string contém apenas dígitos entre 0 e 9. Mesmo que a string contenha dígitos, mas também outros caracteres, não é uma string numérica simples. As expressões regulares verificam apenas números inteiros e não consideram caracteres de ponto (.), fazendo com que números decimais e pontos flutuantes falhem no teste.
5. Como você pode reverter as palavras em uma frase-alvo sem a ajuda de métodos de biblioteca?
Essa também é uma das perguntas mais comuns da entrevista de codificação. Primeiro, devemos entender o requisito e como preencher a lacuna nesse requisito. Quando nos deparamos com perguntas como essas, devemos primeiro nos concentrar em fazer as perguntas certas. Strings nada mais são do que frases de caracteres decididos que podem conter uma única palavra ou várias palavras.
Uma frase também pode estar vazia. Por exemplo, se recebermos a frase 'Programar é divertido', devemos reverter para 'Divertido é programar'. efetivamente. Devemos usar expressões regulares em Java para dividir as strings fornecidas em espaços seguidos pela aplicação do método reverse() da classe utilitária Collections.
Assim que você conseguir dividir as strings usando regex'\\s', um array de palavras será retornado como resultado. Isso também cuida das palavras separadas usando vários espaços. Assim que a matriz é retornada, você pode optar por criar ArrayLists a partir dessas matrizes, usando o método Collections.reverse(). Isso inverte ArrayLists e cada palavra será reinicializada na ordem inversa.
Agora, tudo o que resta é usar o StringBuilder para concatenar várias strings por meio da iteração ArrayList. Deve-se ter certeza de que o tamanho é especificado, pois o redimensionamento do StringBuilder é um processo caro em termos de poder de processamento e memória. O redimensionamento acaba criando novos arrays a partir da cópia do conteúdo dos arrays mais antigos.
6. Como você pode substituir ou remover caracteres de strings?
Suponha que temos uma string, 'Woocommerce', e desejamos substituir a letra 'r' por 'n', existem vários métodos para conseguir isso. As classes de string em Java fornecem várias abordagens para substituir caracteres dentro de strings usando CharSequence e substrings.
Você pode facilmente chamar um método replace dentro da string que acabará substituindo o caractere de destino e retornando o caractere desejado como resultado. Strings são imutáveis em linguagens de programação como Java.
Assim, toda vez que essas operações como remoção ou substituição são realizadas em strings, novos objetos string são gerados por padrão. Existem 4 métodos sobrecarregados para substituir strings usando Java:
- replace(char oldChar, char newChar)
- replaceAll(String regex, substituição de string)
- replace (destino CharSequence, substituição CharSequence)
- replaceFirst(String regex, substituição de string)
CharSequence é uma das super interfaces para strings, StringBuilder e StringBuffer, permitindo-nos passar qualquer um dos objetos destes como argumentos para este método de substituição. replaceAll() acaba substituindo cada correspondência por strings de substituição, enquanto replaceFirst() substitui apenas as primeiras correspondências.
Em suma, todas essas são metodologias poderosas que aceitam expressão regular. A classe Java.lang.String permite todos esses métodos sobrecarregados que podem substituir facilmente caracteres únicos ou substrings em Java.
É altamente recomendável usar replaceAll(), pois isso substitui todas as ocorrências de caracteres correspondentes. Seguir essa abordagem nos permite esperar padrões de expressão regular, ganhando assim mais poder. Este método também pode substituir cada vírgula por pipes para converter arquivos separados por vírgula em strings delimitadas por pilha.
No entanto, se alguém deseja substituir apenas um único caractere, pode-se usar o método replace() que leva em consideração o antigo e o novo caractere fornecido.
Leia: Perguntas e respostas da entrevista sobre Java
7. Como você pode anexar textos a arquivos em linguagens de programação como Java?
Anexar é muito diferente em comparação com a criação de novos arquivos e a gravação de dados nos novos arquivos. Nos casos de anexação, os arquivos já existem e precisamos simplesmente adicionar texto no final do arquivo. Isso é semelhante aos arquivos de log, pois são constantemente atualizados com o sistema.
Os arquivos de log são o exemplo perfeito de anexação de texto, pois os aplicativos continuam anexando de forma iterativa os detalhes de log nesses arquivos. As estruturas de log não são necessárias para esse problema, mas você deve saber como anexar texto em arquivos existentes. Para resolver este problema, você deve estar ciente das classes de conveniência para escrever arquivos de caracteres.
A classe tem construtores que assumem a aceitabilidade do buffer de bytes padrão e codificação de caracteres. Se você deseja especificar os valores por conta própria, basta construir o OutputStreamWriter usando o FileOutputStream. A disponibilidade dos arquivos depende das plataformas subjacentes, que determinam se o arquivo pode ser criado ou não.
Algumas plataformas permitem que os arquivos sejam inicializados para escrever funções usando um único FileWrite ou vários objetos de gravação de arquivos. No entanto, os construtores dessa classe falharão quando o arquivo envolvido já for inicializado. FileWriter é usado para escrever fluxos de caracteres e FileOutputStream pode escrever fluxos de bytes brutos.
Aprenda cursos de desenvolvimento de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.
8. Como você pode encontrar o maior ou o menor número em uma matriz de inteiros?
Para esta solução, devemos codificar uma função ou método que possa encontrar o maior ou o menor número de arrays que são inteiros completos. Devemos primeiro criar um arquivo fonte em Java usando o nome MaximumMinimumArrayDemo.java e copiar o código escrito aqui para compilação e execução.
Podemos usar duas variáveis às quais podemos nos referir como 'maior' e 'menor' para armazenar os valores máximo e mínimo respectivamente dos arrays. O menor número pode ser inicializado usando integer.MIN_VALUE e o maior pode ser inicializado usando integer.MAX_VALUE.
Com cada iteração dos loops que você iniciou, você pode comparar os números atuais com 'maior' e 'menor' e atualizá-los de acordo. As matrizes não substituem o método toString em Java, portanto, você pode usar Arrays.toString() para imprimir o conteúdo das matrizes de destino.
Você pode usar esse método estático para chamar diretamente a função principal. Você deve então passar as matrizes aleatórias por esse método para verificar se os valores máximo e mínimo foram retornados com precisão. Você também pode optar por automatizar esse teste por meio de testes de unidade em seu IDE.
Checkout: 4 principais habilidades de informática para colocar em seu currículo
Conclusão
Os cursos focados em programação não são apenas ótimos para resolver problemas, mas também aumentam suas chances de ser selecionado ao se candidatar a empregos. Se você deseja aprender mais sobre programação Java e problemas de codificação mais avançados, você pode se inscrever em um curso abrangente, como o Master of Science in Computer Science do upGrad ou o Full Stack Development Course .