Intrebare de interviu MYSQL

Acum multi ani când intram la discuții cu viitorii colegi aveam o întrebare de MySQL (php related kind of):

Cum obții lista userilor născuți azi?

Cel mai funny a fost ceva de genul Select * from users where birthday=Today()

Intrebare:

Ce soluții ati folosit?

2 Likes

Select * from users where month(`date_of_birth`) = month(curdate()) and day(`date_of_birth`) = day(curdate())

1 Like

Nu e mai simplu sa faci SELECT * FROM users WHERE DATE(date_of_birth) = CURDATE() ?

2 Likes

Practic query-ul tau va cauta userii nascuti fix in ziua respectiva, nu a caror zi de nastere este serbata in ziua respectiva.

Acum vad si cum s-a exprimat autorul.

1 Like

Intr-adevar, la asta ma refeream. Sa identifici utilizatorii care isi serbeaza ziua de nastere.

Eu cred că răspunsul a oferit fix soluția la întrebare (mă rog, dacă o fi Today în mysql și nu e CURDATE).

Întrebarea corectă ar fi „Cum obții lista userilor ce-și serbează ziua de naștere azi”. Abia atunci răspunsul devine amuzant :smiley:

Într-adevăr exprimarea din post poate fi interpretată in mai multe feluri. Totuși, chiar dacă într-un interviu as avea o exprimare ambigua, ma aștept de la un programator sa observe ambiguitatea și sa ceara clarificări.

1 Like

Teoretic nu este ambigua, pentru ca nu te astepti sa ai useri abia nascuti, nu?

Corect. Dar sunt sigur ca pot exista oameni care spun ca nu este ambigua pentru ca întrebarea se referă exact la cei născuți azi si in niciun caz la cei care isi serbeaza ziua.

Comunicarea poate fi dificila!

eu de aici inteleg ca exista oameni care daca ar primi un task cu formularea respectiva nu si-ar da seama ca de fapt e vorba de aniversarea zilei de nastere.

1 Like

Depinde ce înțelegi prin user. De exemplu, bebelușii născuți într-o maternitate și înregistrați în sistem ce sunt?

4 Likes

Eu consider ca este pe dos. Avand in vedere cum e formulata intrebarea, daca sari direct la concluzia ca este vorba de aniversare inseamna ca nu esti atent la nuanţe. Ca programator nu trebuie sa presupui nimic, totul trebuie luat ad litteram. Eventual daca ti se pare dubios formulata cerinta, il intrebi daca este sigur ca aia a vrut sa spuna.

5 Likes

Absolut de acord cu ce a scris @serghei

Solutia: boss mai scrie o data specificatiile si iti fac cheriul.

Eventual daca ti se pare dubios formulata cerinta, il intrebi daca este sigur ca aia a vrut sa spuna.

In cazul de fata un programator, ar trebui sa dibuiască dubiosenia sau ar trebui sa sa faca adliteram (adica bebelusii nascuti azi)?

probail n-ar fi greu sa-ti dai seama de ce ai nevoie din context.

In cazul de faţă ar trebui sa-ti pui niste intrebari referitoare la cel care iti ia interviul :slight_smile: Daca asa se formuleaza cerintele la firma aia, s-ar putea sa ai viaţa foarte grea acolo.

1 Like

Un proiect nou presupune un set de specificatii si implicit un context - probleme de comunicare exacta vor exista intotdeauna (“ask” Wittgenstein).

Daca raspunsul nu este clar din context sau felul cum a fost formulata propozitia - este timpul sa intrebi urmatoarea persoana mai apropiata decat tine de domeniul problemei - de obicei este PM-ul (poate fi si un coleg) apoi urmand clientul insusi.

Desi este un exemplu trivial arata de ce OOP si toate practicile asociate nu sunt ceva formal/matematic, de tipul: daca urmezi tot ce zice Bob, garantat vei ajunge la rezultatul corect - bine, de aici discutia intra puternic in off-topic.

3 Likes

SELECT * FROM users WHERE MONTH(birthday) = {this.localtime(sessionid).Month} AND DAYOFMONTH(birthday) = {this.localtime(sessionid).Day}

De ce ai folosi altceva ? (eu m-am referit la pseudo js, localtime e o functie care returnează data curentă a utilizatorului în funcție de sesiune, în fine ar fi puțin diferit cu props, async și api-uri)

Dacă vrei să îl bagi pe unu în ceață de tot dă-i un exemplu să introducă în baza de date că cineva s-a născut pe 30 februarie.