Le 8 domande e risposte importanti per l'intervista sulla codifica 2022 [per matricole ed esperti]

Pubblicato: 2021-08-25

Sono essenziali buone basi di strutture dati come array, alberi binari, tabelle hash ed elenchi collegati. Devi essere a conoscenza degli algoritmi e dei metodi essenziali e avere una buona presa sui linguaggi di programmazione come Java, specialmente se ti stai candidando per lavori di programmazione. Puoi sicuramente imparare le risposte a importanti domande del colloquio di codifica, ma è altamente raccomandato esercitarsi ampiamente con le soluzioni da solo.

Le 8 migliori domande di intervista di codifica e le loro risposte

Diamo un'occhiata ad alcune delle domande di codifica più importanti che vengono poste nelle interviste ospitate da grandi aziende come Microsoft, IBM, Google, ecc.

1. Come trovare il primo carattere non ripetuto in una parola?

Per rispondere a questa domanda, è necessario prima capire cosa si deve fare per promuovere questa funzione. È necessario scrivere una funzione che accetti stringhe e restituisca i primi caratteri non ripetuti.

Ad esempio, nella parola "passaggio", "p" è il primo carattere non ripetuto o nella parola "tartaruga", "u" è il primo carattere non ripetuto. Quindi, come risolviamo questo problema? Possiamo creare una tabella per memorizzare le ripetizioni per tutti i caratteri e quindi selezionare le prime voci che non si ripetono.

Per scrivere un codice che restituirà le prime lettere non ripetute, possiamo usare LinkedHashMap per memorizzare il conteggio dei caratteri. Questa HashMap segue l'ordine di inserimento e i caratteri vengono inizializzati nella stessa posizione della stringa. La stringa scansionata deve essere ripetuta utilizzando LinkedHashMap per scegliere la voce richiesta con il valore di 1.

Un altro modo per affrontare questo problema consiste nell'usare firstNonRepeatingChar(String word). Ciò consente di identificare il carattere non ripetuto che appare per primo in un unico passaggio. Questo approccio utilizzava due storage per sostituire un'interazione. Questo metodo memorizza i caratteri non ripetuti e ripetuti separatamente e al termine dell'iterazione, il carattere richiesto è il primo elemento nell'elenco.

2. Come rimuovere i duplicati dagli array?

Innanzitutto, è necessario utilizzare LinkedHashSet (Set Interface) per mantenere l'ordine di inserimento originale degli elementi nel set. È necessario utilizzare cicli o funzioni di ricorsione per risolvere questo tipo di domande di intervista di codifica.

Il fattore principale che dobbiamo tenere a mente quando abbiamo a che fare con gli array non sono gli elementi che hanno duplicati. Il problema principale qui è invece rimuovere i duplicati. Gli array sono strutture dati statiche di lunghezza fissa, quindi non modificabili. Quindi, per eliminare elementi dagli array, è necessario creare nuovi array e duplicare il contenuto in questi nuovi array.

Innanzitutto, devi convertire gli array in Arraylists e quindi creare LinkedHashSet da questi ArrayList. Se gli array di input contengono un numero maggiore di duplicati, può risultare in più array temporanei, aumentando così il costo dell'importazione del contenuto. Questa restrizione impone di affrontare questo problema in un modo che richiede meno memoria e potenza di elaborazione.

Dobbiamo rimuovere i duplicati ma non copiarli negli array risultanti, quindi non eliminando completamente i duplicati ma semplicemente sostituendoli con 0 come valore predefinito.

3. Come possiamo verificare se un numero è un numero primo?

Questa è una delle domande più comuni dell'intervista di codifica che implica scoprire se il numero dato è un numero primo o meno. Questi tipi di programmi sono le basi del pensiero algoritmico poiché dobbiamo trovare soluzioni basate sul fatto che i numeri primi sono tutti numeri naturali che non possono essere divisi per numeri positivi diversi da 1.

Dobbiamo scrivere il codice per creare loop che controllino ogni numero a partire da 1 fino al numero target per vedere se il numero target è divisibile per qualsiasi altro numero positivo diverso da se stesso o 1.

Questa funzione ci porterà alla soluzione. Quando controlliamo un numero particolarmente grande, possiamo semplicemente controllare fino alla radice quadrata di N, essendo N il numero target. Non è necessario controllare fino a N nel caso di una radice quadrata idonea.

Se il numero non è divisibile per 2, non è necessario verificare se è divisibile per altri numeri pari, diminuendo così il tempo necessario per trovare la soluzione. Questa è una versione ottimizzata della soluzione in cui è utile analizzare il numero prima di scrivere la soluzione.

4. Come puoi verificare se le stringhe contengono solo cifre?

Se desideri scrivere espressioni regolari per controllare se le stringhe sono solo numeri o se contengono caratteri non numerici, devi prima familiarizzare con l'uso dei set di caratteri nelle espressioni regolari Java. Linguaggi di programmazione come Java supportano le espressioni regolari con l'aiuto della classe java.util.regex.Matcher e java.util.regex.Pattern. Java.util.regex è un pacchetto dedicato per questo scopo.

Per convalidare l'esistenza di soli numeri usando espressioni regolari, possiamo usare il codice per analizzare se le stringhe contengono un intero grezzo. Verificheremo se la stringa contiene solo cifre comprese tra 0 e 9. Anche se la stringa contiene cifre ma anche altri caratteri, non è una semplice stringa numerica. Le espressioni regolari controllano solo i numeri interi e non considerano i caratteri punto (.), quindi, fare in modo che i numeri decimali e le virgole mobili non superino il test.

5. Come puoi invertire le parole in una frase di destinazione senza l'aiuto di metodi di libreria?

Questa è anche una delle domande più comuni del colloquio di codifica. In primo luogo, dobbiamo comprendere il requisito e come colmare la lacuna in questo requisito. Di fronte a domande come queste, dobbiamo prima concentrarci sul porre le domande giuste. Le stringhe non sono altro che frasi di caratteri decisi che potrebbero contenere una singola parola o più parole.

Una frase potrebbe anche essere vuota. Ad esempio, se ci viene data la frase "Programmare è divertente", dobbiamo invertirla in "Divertimento è programmare". effettivamente. Dobbiamo usare espressioni regolari in Java per dividere le stringhe date in spazi seguite dall'applicazione del metodo reverse() dalla classe di utilità Collections.

Una volta che sei in grado di dividere le stringhe usando regex'\\s', come risultato verrà restituita una matrice di parole. Questo si occupa anche delle parole separate usando più spazi. Non appena l'array viene restituito, puoi scegliere di creare ArrayList da questi array seguiti dal metodo Collections.reverse(). Questo inverte ArrayLists e ogni parola verrà reinizializzata nell'ordine inverso.

Ora, tutto ciò che resta è l'utilizzo di StringBuilder per concatenare più stringhe tramite l'iterazione di ArrayList. È necessario assicurarsi che la dimensione sia specificata poiché il ridimensionamento di StringBuilder è un processo costoso in termini di potenza di elaborazione e memoria. Il ridimensionamento finisce per creare nuovi array copiando il contenuto dagli array più vecchi.

6. Come puoi sostituire o rimuovere i caratteri dalle stringhe?

Supponiamo di avere una stringa, 'Woocommerce', e di voler sostituire la lettera 'r' con 'n', ci sono diversi metodi per ottenerlo. Le classi di stringhe in Java forniscono più approcci per sostituire i caratteri all'interno di stringhe usando CharSequence e sottostringhe.

Puoi facilmente chiamare un metodo di sostituzione all'interno della stringa che finirà per sostituire il carattere di destinazione e restituire di conseguenza il carattere desiderato. Le stringhe sono immutabili nei linguaggi di programmazione come Java.

Pertanto, ogni volta che queste operazioni come la rimozione o la sostituzione vengono eseguite sulle stringhe, per impostazione predefinita vengono generati nuovi oggetti stringa. Esistono 4 metodi sovraccaricati per sostituire le stringhe utilizzando Java:

  • sostituisci(char oldChar, char newChar)
  • replaceAll(String regex, sostituzione di stringhe)
  • sostituisci(destinazione CharSequence, sostituzione CharSequence)
  • replaceFirst(String regex, sostituzione di stringhe)

CharSequence è una delle super interfacce per stringhe, StringBuilder e StringBuffer, che ci consente di far passare uno qualsiasi degli oggetti da questi come argomenti per questo metodo di sostituzione. replaceAll() finisce per sostituire ogni singola corrispondenza con stringhe di sostituzione mentre replaceFirst() sostituisce solo le prime corrispondenze.

Tutto sommato, tutte queste sono metodologie potenti che accettano l'espressione regolare. La classe Java.lang.String consente tutti questi metodi sovraccaricati che possono facilmente sostituire singoli caratteri o sottostringhe in Java.

Si consiglia vivamente di utilizzare replaceAll() poiché sostituisce ogni occorrenza di caratteri corrispondenti. Seguire questo approccio ci consente di aspettarci modelli di espressione regolare, guadagnando così più potenza. Questo metodo può anche sostituire ogni virgola con pipe per convertire file separati da virgole in stringhe delimitate da pile.

Tuttavia, se si desidera sostituire solo un singolo carattere, si può semplicemente utilizzare il metodo replace() che prende in considerazione il vecchio e il nuovo carattere dato.

Leggi: Domande e risposte per l'intervista Java

7. Come si possono aggiungere testi ai file in linguaggi di programmazione come Java?

L'aggiunta è molto diversa rispetto alla creazione di nuovi file e alla scrittura di dati nei nuovi file. In caso di aggiunta, i file esistono già e dobbiamo semplicemente aggiungere del testo alla fine del file. Questo è simile ai file di registro poiché vengono costantemente aggiornati con il sistema.

I file di registro sono l'esempio perfetto di aggiunta di testo poiché le applicazioni continuano ad aggiungere i dettagli di registro in modo iterativo a questi file. I framework di registrazione non sono necessari per questo problema, ma devi sapere come aggiungere del testo ai file esistenti. Per risolvere questo problema, devi essere a conoscenza delle classi di convenienza per scrivere file di caratteri.

La classe ha costruttori che presuppongono l'accettabilità del buffer di byte predefinito e della codifica dei caratteri. Se desideri specificare i valori da solo, puoi semplicemente costruire OutputStreamWriter usando FileOutputStream. La disponibilità dei file dipende dalle piattaforme sottostanti, che determinano se il file potrebbe essere creato o meno.

Alcune piattaforme consentono di inizializzare i file per le funzioni di scrittura utilizzando un singolo FileWrite o più oggetti di scrittura di file. Tuttavia, i costruttori di questa classe non riusciranno una volta che il file coinvolto è già inizializzato. FileWriter viene utilizzato per scrivere flussi di caratteri e FileOutputStream può scrivere flussi di byte grezzi.

Impara i corsi di sviluppo software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

8. Come puoi trovare il numero più grande o più piccolo in una matrice di numeri interi?

Per questa soluzione, dobbiamo codificare una funzione o un metodo in grado di trovare il numero più grande o più piccolo da array che sono interi a tutti gli effetti. Dobbiamo prima creare un file sorgente in Java usando il nome MaximumMinimumArrayDemo.java e copiare qui il codice scritto per la compilazione e l'esecuzione.

Possiamo usare due variabili che possiamo chiamare "più grande" e "più piccola" per memorizzare rispettivamente i valori massimo e minimo dagli array. Il numero più piccolo può essere inizializzato usando integer.MIN_VALUE e il più grande può essere inizializzato usando integer.MAX_VALUE.

Con ogni iterazione dei cicli che hai avviato, puoi confrontare i numeri correnti con "più grande" e "più piccolo" e aggiornarli di conseguenza. Gli array non sovrascrivono il metodo toString in Java, quindi è possibile utilizzare Arrays.toString() per stampare il contenuto degli array di destinazione.

È possibile utilizzare questo metodo statico per chiamare direttamente la funzione principale. È quindi necessario passare gli array casuali tramite questo metodo per verificare se i valori massimo e minimo sono stati restituiti in modo accurato. Puoi anche scegliere di automatizzare questo test tramite Unit test nel tuo IDE.

Checkout: le 4 migliori competenze informatiche da inserire nel tuo curriculum

Conclusione

I corsi incentrati sulla programmazione non sono solo ottimi per risolvere i problemi, ma aumentano anche le tue possibilità di essere selezionato quando fai domanda per un lavoro. Se desideri saperne di più sulla programmazione Java e problemi di codifica più avanzati, puoi iscriverti a un corso completo come il Master of Science in Computer Science di upGrad o il corso Full Stack Development .

Diventa uno sviluppatore full stack

Richiedi la certificazione PG collegata al lavoro di upGrad in ingegneria del software