Pregătire interviu - Java Software Development - Modul Junior Developer

În vederea pregătirii interviului tehnic, necesar pentru admiterea în cadrul cursului Java Software Development - Modul Junior Developer îți recomandăm să rezolvi următoarele exerciții.

Chiar dacă ai mai lucrat anterior în Java, rezolvarea exercițiilor va contribui la reîmprospătarea unor cunoștințe esențiale la interviu și parcurse în cadrul Modulului pentru Începători, precum:

  1. Sintaxa limbajului Java.
  2. Fluxul unui program, algoritmi de bază în programare.
  3. Concepte primitive de programare orientată obiect (i.e. OOP).
Pentru fiecare exercițiu am atașat câte un model de rezolvare. Acesta nu este unic, ci reprezintă doar o soluție validă, elegantă și optimă pe care o poți folosi pentru verificarea codului scris de tine. Îți recomandăm să petreci cel puțin 30 minute - 1 oră pentru fiecare cerință și să încerci să rezolvi inițial singur exercițiile, înainte să citești soluția oficială.

1. Scrie o metodă care primește ca parametru un număr natural x și apoi afișează:

  1. cifrele numărului (în ordine inversă).
  2. suma cifrelor.
// n == 21_304
Cifrele numarului sunt: 4, 0, 3, 1, 2,
Suma cifrelor este: 10

Soluție

2. Se citește un număr natural n și apoi n numere întregi. Scrie un program care calculează și afișează:

  1. cel mai mic număr (valoarea minimă din șir).
  2. cel mai mare număr (valoarea maximă din șir).
  3. media aritmetică a numerelor (calculată ca sumă a tuturor numerelor împărțită la numărul de numere).
// n == 7
// numerele citite: 1 15 0 21 14 101 1
Numarul minim: 0
Numarul maxim: 101
Media aritmetica: 21.857142857

Soluție

3. Scrie o metodă care să determine dacă un număr dat este număr prim. Metoda va returna true dacă numărul este număr prim și false în caz contrar.

Idee de rezolvare

Soluție

3.1. Scrie un algoritm care citește de la tastatură un număr n și afișează toate numerele prime până la n (inclusiv), începând cu 2.

Tips

// INPUT -> OUTPUT
10 -> 2, 3, 5, 7, 
20 -> 2, 3, 5, 7, 11, 13, 17, 19, 
97 -> 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 

Soluție

3.2. Implementează un program care afișează toți divizorii proprii (adică toți divizorii fără 1 și numărul însuși) ai unui număr natural n citit de la tastatură. În cazul în care numărul este prim (i.e. nu are divizori proprii), programul va afișa mesajul Este numar prim. Câteva exemple sunt:

// INPUT -> OUTPUT
12 -> 2 3 4 6
15 -> 3 5
24 -> 2 3 4 6 8 12
13 -> Este numar prim

Soluție

1. Implementează o metodă (i.e. countOccurrencesIgnoreCase(String[] array, String key)) care determină numărul de elemente key din cadrul array și returnează această valoare. Metoda nu ține cont de tipul literelor (i.e. majuscule vs. minuscule). Testează metoda în main pentru cât mai multe cazuri de excepție.

// Exemplul 1:
ARGUMENTS: ["Java", "C", "Python", "JAVA", "perl", "C#", "java"], "JAVA"
RETURN: 3

// Exemplul 2:
ARGUMENTS: ["Java", "C", "Python", "JAVA", "perl", "C#", "java"], "TensorFlow"
RETURN: 0

Soluție

2. Un număr palindrom este un număr care este egal cu simetricul său (ex: 121, 10001, 22344322, 88, 7 etc.). Similar, un șir de caractere este palindrom dacă este identic cu simetricul său (ex: „abba“, „ana“, „noon“, „radar“, „madam“). Implementează o metodă (i.e. isPalindromeIgnoreCase(String)) care determină dacă un șir de caractere primit ca parametru este sau nu palindrom, fără a se ține cont de tipul literelor (i.e. majuscule vs. minuscule). Testează metoda în main pentru cât mai multe cazuri de excepție.

// Exemplul 1:
ARGUMENTS: "dog"
RETURN: false

// Exemplul 2:
ARGUMENTS: "Madam"
RETURN: true

Soluție

3. Pornind de la experiența acumulată la exercițiul anterior, implementează o metodă (i.e. isPalindromeIgnoreCasePRO(String)) care determină dacă o propoziție este palindrom, ignorând diferențele de litere mari / mici și toate caracterele care nu sunt litere. Similar exercițiului precedent, metoda va returna true dacă șirul de caractere este palindrom, sau false în caz contrar.

// Exemplul 1:
ARGUMENTS: "Red rum, sir, is murder!"
RETURN: true

// Exemplul 2:
ARGUMENTS: "Was it a cat I saw?"
RETURN: true

// Exemplul 3:
ARGUMENTS: "Not a palindrom, I'm afraid.."
RETURN: false

// Exemplul 4:
ARGUMENTS: "Step on no pets."
RETURN: true

Soluție

Acest exercițiu exploatează noțiunile de bază de OOP, predate în cadrul Modulului pentru Începători, conform programei de studiu.

În cadrul rezolvării fiecărui subpunct, este important să ții cont de restricțiile și detaliile de implementare ale subpunctelor anterioare, astfel încât să obții o clasă funcțională, coerentă și bine structurată. Recomandarea noastră este să citești inițial toată cerința pentru a-ți forma o privire de ansamblu asupra clasei de proiectat și abia ulterior să începi rezolvarea, cu primele subpuncte.

Cerință

Implementează o clasă GenericPackage, folosită de un sistem de curierat, conform următoarelor detalii de implementare:

  1. Starea internă este reprezentată astfel:
    1. uniqueID: cod unic de identificare a pachetului, format numai din cifre, de tipul String.
    2. weight: greutatea coletului, de tipul double.
    3. packageName: numele pachetului, de tipul String.
    4. courierName: numele firmei de curierat, tipul String.
  2. Clasa GenericPackage trebuie să respecte următoarele criterii:
    1. deoarece clasa va fi folosită de un singur curier, toate obiectele clasei GenericPackage vor avea același courierName.
    2. câmpul uniqueID, unic pentru fiecare obiect GenericPackage, trebuie să nu poată fi modificat (i.e. după inițializarea acestuia).
    3. transformă câmpul courierName, același pentru toate obiectele din clasă, într-o proprietate a obiectelor, care poate fi atât citită cât și actualizată.
    4. transformă câmpul packageName într-o proprietate read-only (i.e. poate fi citită, dar nu poate fi actualizată).
    5. definește 2 constructori diferiți ai clasei, la alegere.
      • Hint: ține cont de criteriile anterioare în definirea corectă a constructorilor.
  3. Definește următoarele metode:
    1. addItem(double itemWeight): actualizează greutatea pachetului prin adăugarea greutății noului obiect (i.e. itemWeight) la greutatea actuală a coletului.
    2. checkID(): metoda verifică dacă numărul pachetului este valid. Codul unic de identificare este valid dacă sunt îndeplinite toate condițiile următoare:
      1. codul este alcătuit doar din cifre (i.e. toate caracterele sunt cifre).
      2. numărul de cifre impare este multiplu de 3.
      3. suma tuturor cifrelor formează un număr divizibil cu 4.
      4. diferența dintre oricare 2 cifre consecutive din cod este mai mică decât 5.
      5. lungimea totală a codului este cuprinsă între 10 și 12 caractere (inclusiv).
    3. computeDetails() metoda returnează un obiect String, care conține detaliile obiectului, sub următorul format:
      1. Pachetul <packageName> avand codul <uniqueID> si greutatea <weight> apartine curierului <courierName>.
      2. Exemplu: Pachetul LaptopDustPRO avand codul 213142341425 si greutatea 4.2 apartine curierului DevCarry.

Soluție

Câmp util pentru Arrays:

Câmp Descriere
length Stochează dimensiunea (i.e. numărul de elemente) al unui Array.

Metode utile ale clasei String:

Metodă Descriere
int length() Returnează lungimea șirului de caractere stocat în obiectul de tip String.
int indexOf(int ch) Returnează indexul primei, respectiv ultimei apariții din șir a caracterului ch.
int lastIndexOf(int ch)
int indexOf(int ch, int fromIndex) Similar cu funcționalitatea anterioară
- doar că în acest caz căutarea începe de la un anumit index (i.e. fromIndex).
int lastIndexOf(int ch, int fromIndex)
int indexOf(String str) Returnează indexul primei, respectiv ultimei apariții din șir a șirului str.
int lastIndexOf(String str)
int indexOf(String str, int fromIndex) Similar cu funcționalitatea anterioară
- doar că în acest caz, căutarea începe de la un anumit index (i.e. fromIndex).
int lastIndexOf(String str, int fromIndex)
boolean contains(CharSequence s) Metoda returnează true dacă a fost găsit subșirul căutat în șir, și false altfel.

Clasa wrapper Character:

Metodă Descriere
static int getNumericValue(char ch) Returnează valoarea numerică echivalentă (i.e. de tipul int a caracterului ch).
static boolean isDigit(char ch) Returnează true dacă ch este o cifră, și false altfel.
static boolean isLetter(char ch) Returnează true dacă ch este o literă, și false altfel.
static boolean isLetterOrDigit(char ch) Returnează true dacă ch este o literă sau o cifră, și false altfel.

Pentru întrebări sau orice nelămuriri folosește forum-ul de mai jos sau trimite-ne un email la office@devmind.ro.