konto usunięte

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Łukasz Podkalicki:

Pierwsze co mi przychodzi na myśl to trawersować listę od zadanego elementu, np. d. Zapamiętać wskazanie i porównywać podczas trawersowania z elemntowami listy aż do uzyskania efektu równości wskazań (d == g->next) lub końca listy (g->next == NULL).

jednokierunkowa: a->b->c->d->e->f->g
jednokierunkowa cykliczna: a->b->c->d->e->f->g->a

Taka była też moja odpowiedź. Powiedzieli, że może być, ale oczekiwali właśnie rozwiązania z dwoma wskaźnikami.

konto usunięte

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Pytanie z serii złośliwych, które kiedyś podsłyszałem:

Dana jest funkcja f(a, b). W jakiej kolejności zostaną przetworzone parametry funkcji? (najpierw a? b?)
L P

L P podskala.net

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

A tu małe usprawnienie (druga myśl), gdy znamy wskazenie głowy (1) lub/i ogona (2) i startujemy od jakiegoś elementu, niech nadal będzie to "d".
Cykliczna lista jest również wtedy, gdy przekroczymy podczas trawersowania ogon (ogon musi wskazywać na głowę - ogólnie ważne, żeby na coś wskazywał) lub głowę,

1) (nelem->next == a)
2) (nelem->next == g && g->next != NULL)

W listach cyklicznych raczej nie rozróżniamy głowy i ogona - cóż, późna pora.Łukasz Podkalicki edytował(a) ten post dnia 07.05.10 o godzinie 02:06

konto usunięte

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Łukasz Podkalicki:
A tu małe usprawnienie (druga myśl), gdy znamy wskazenie głowy (1) lub/i ogona (2) i startujemy od jakiegoś elementu, niech nadal będzie to "d".
Cykliczna lista jest również wtedy, gdy przekroczymy podczas trawersowania ogon (ogon musi wskazywać na głowę - ogólnie ważne, żeby na coś wskazywał) lub głowę,

1) (nelem->next == a)
2) (nelem->next == g && g->next != NULL)

Tak, ale pod warunkiem, że wiesz, gdzie jest głowa, a gdzie ogon. Mi dano do dyspozycji tylko jeden element listy nie podając, gdzie się w tej liście znajduje.

konto usunięte

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Pytanie autentyczne: Co to jest i jak działa wirtualne dziedziczenie?

konto usunięte

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Krzysztof Kondrak:
Pytanie autentyczne: Co to jest i jak działa wirtualne dziedziczenie?
Pytasz czy tylko podajesz pytanie? :) Pytanie dobre, czesto zadaje jako follow up mojej historyjki o zwierzatkach.
Krzysztof Kondrak:
Pytanie z serii złośliwych, które kiedyś podsłyszałem:
Dana jest funkcja f(a, b). W jakiej kolejności zostaną przetworzone > parametry funkcji? (najpierw a? b?)

To niezdefiniowane zachowanie, standard nie gwarantuje kolejnosci zajmowania sie argumentami.Przemysław O. edytował(a) ten post dnia 07.05.10 o godzinie 09:21
Jerzy M.

Jerzy M. C#/JavaScript
Developer

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

A jeśli chodzi o pytanie, to znalazłem kiedyś mniej więcej coś takiego:

"Czy można wywołać delete this wewnątrz funkcji klasy?"
class T {
public: void deleteThis() { delete this; }
};

coś takiego mniej więcej ;->

konto usunięte

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Przemysław O.:
Krzysztof Kondrak:
Pytanie z serii złośliwych, które kiedyś podsłyszałem:
Dana jest funkcja f(a, b). W jakiej kolejności zostaną przetworzone > parametry funkcji? (najpierw a? b?)

To niezdefiniowane zachowanie, standard nie gwarantuje kolejnosci zajmowania sie argumentami.Przemysław O. edytował(a) ten post dnia 07.05.10 o godzinie 09:21

Ano właśnie... mimo wszystko jest to w pewnym sensie podchwytliwe, bo w zależności od wiedzy i widzimisię rekrutera można odpowiedzieć na to pytanie na 3 różne sposoby.
Jakub L.

Jakub L. Programista

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Jerzy M.:
A jeśli chodzi o pytanie, to znalazłem kiedyś mniej więcej coś takiego:

"Czy można wywołać delete this wewnątrz funkcji klasy?"
class T {
public: void deleteThis() { delete this; }
};

coś takiego mniej więcej ;->

Pewnie że można.
A skoro jesteśmy przy destruktorach to fajniejsze pytanie może być czy istnieje sytuacja, kiedy destruktor woła się eksplicite z kodu.
Jerzy M.

Jerzy M. C#/JavaScript
Developer

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Zdaje się, że odpowiedź tylko jedna jest dobra. Szczerze powiedziawszy, do wczoraj uważałem, że argumenty obliczane są od końca, czyli wpierw 'b', potem 'a', ale przez forum gamedev.pl akurat przewinęło się to pytanie też.
Jerzy M.

Jerzy M. C#/JavaScript
Developer

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Jakub L.:
Jerzy M.:
A jeśli chodzi o pytanie, to znalazłem kiedyś mniej więcej coś takiego:

"Czy można wywołać delete this wewnątrz funkcji klasy?"
class T {
public: void deleteThis() { delete this; }
};

coś takiego mniej więcej ;->

Pewnie że można.
A skoro jesteśmy przy destruktorach to fajniejsze pytanie może być czy istnieje sytuacja, kiedy destruktor woła się eksplicite z kodu.

Wg. notki na blogu (bo to z blogu) 80% odpowiadało, że nie można. A z tych 20% które odpowiedziało, że można, nie wszyscy potrafili wytłumaczyć czemu - ale to już jest akurat trudniejsze pytanie.

Co do pytania, czekam na odpowiedź ;-)

konto usunięte

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Jerzy M.:

Wg. notki na blogu (bo to z blogu) 80% odpowiadało, że nie można. A z tych 20% które odpowiedziało, że można, nie wszyscy potrafili wytłumaczyć czemu - ale to już jest akurat trudniejsze pytanie.

Co do pytania, czekam na odpowiedź ;-)

Nic nie stoi na przeszkodzie, żeby destruktor wywołać samemu. To samo robi operator delete, który dodatkowo zwalnia pamięć przydzieloną uprzednio do usuwanego obiektu. Innymi słowy wywołując samemu destruktor usuwasz obiekt, ale nie zwalniasz przydzielonej do niego pamięci.

Gdzie to się może przydać? Ja bym podał jako przykład sytuację, gdy dla danej klasy chcemy użyć własnej wersji operatora new, co z reguły pociąga za sobą stworzenie własnej wersji delete (nie wiem jednak, czy to trafiony przykład, nigdy się wcześniej nie zastanawiałem nad manualnym wywoływaniem destruktora). Inna sytuacja to wtedy, gdy piszesz np własny menedżer pamięci, gdzie samemu chcesz decydować kto, kiedy i jak zwalnia pamięć.

konto usunięte

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Jerzy M.:
Zdaje się, że odpowiedź tylko jedna jest dobra. Szczerze powiedziawszy, do wczoraj uważałem, że argumenty obliczane są od końca, czyli wpierw 'b', potem 'a', ale przez forum gamedev.pl akurat przewinęło się to pytanie też.

Od końca są wkładane na stos, więc w praktyce funkcja najpierw użyje wartości a, potem b.... ale to jest odpowiedź podporządkowana pod konkretny kompilator, którego programiści przyjęli taką konwencję. "Jedyna słuszna" odpowiedź to właśnie taka, że standard nie definiuje kolejności, więc powinno się w miarę możliwości unikać wywołań funkcji typu f(a+3, b+1) (jeśli np funkcja pobiera int), bo zwrócony wynik może być diametralnie różny w zależności od używanego kompilatora.

To problem analogiczny jak do sytuacji, gdy pada pytanie: jaki będzie wyniki poniższej operacji w C++?

++i++

Na poprawną odpowiedź tutaj można (jak sądzę) łatwiej wpaść... nie mniej tego typu haki powinny się wg mnie nie powinny się pojawiać w ogóle, a jeśli już: to na bardzo wysokie stanowisko, gdzie pełna/bardzo duża znajomość standardu jest konieczna.

konto usunięte

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Przemysław O.:
Krzysztof Kondrak:
Pytanie autentyczne: Co to jest i jak działa wirtualne dziedziczenie?
Pytasz czy tylko podajesz pytanie? :) Pytanie dobre, czesto zadaje jako follow up mojej historyjki o zwierzatkach.

To było pytanie, które padło kiedyś na rozmowie na stanowisko starszego programisty. Jest o tyle fajne, bo sprawdza, czy kandydat widzi różnicę między "dziedziczeniem wirtualnym" a "dziedziczeniem po klasie z czysto wirtualnymi funkcjami".
Jerzy M.

Jerzy M. C#/JavaScript
Developer

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

To problem analogiczny jak do sytuacji, gdy pada pytanie: jaki będzie wyniki poniższej operacji w C++?

++i++

++i++ się nie skompiluje, ale jak się nie mylę to chodziło o priorytety operatorów?

i++ - jest ciut wyżej w tabeli, więc powinno być pierwsze.

coś takiego np, chociaż widziałem i inne połączenia.
int i = 5;
cout << i+++i;

albo pytanie odnośnie 'co to za konstrukcja -->' ;-)
int i = 5;
while(i-->0) {
cout << i << endl;
}

konto usunięte

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Kolejne dwa pytania, z których tylko o jednym wiem, że było użyte na rozmowie (drugie jest ode mnie w kontekscie naszej rozmowy o przydzielaniu/zwalnianiu pamięci).

1. Czy istnieje coś takiego jak wirtualny konstruktor? Jeśli nie, to czy istnieje wg Ciebie sposób na to, aby taki efekt uzyskać?

2. (ode mnie) W jaki sposób przydzielić pamięć za pomocą operatora new do konkretnego miejsca (bufora) w pamięci?

konto usunięte

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Jerzy M.:
To problem analogiczny jak do sytuacji, gdy pada pytanie: jaki będzie wyniki poniższej operacji w C++?

++i++

++i++ się nie skompiluje, ale jak się nie mylę to chodziło o priorytety operatorów?

Nie skompiluje się (przynajmniej na porządnym kompilatorze). ++i++ to kolejne niezdefiniowane zachowanie.

konto usunięte

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Jerzy M.:
++i++ się nie skompiluje, ale jak się nie mylę to chodziło o priorytety operatorów?

i++ - jest ciut wyżej w tabeli, więc powinno być pierwsze.

coś takiego np, chociaż widziałem i inne połączenia.
int i = 5;
cout << i+++i;
>

albo pytanie odnośnie 'co to za konstrukcja -->' ;-)
int i = 5;
while(i-->0) {
cout << i << endl;
> }

Ja bym tutaj odpowiedział: "A u was w firmie tak się pisze kod? To ja dziękuję, do widzenia."

;)
Jakub L.

Jakub L. Programista

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Krzysztof Kondrak:

przyjęli taką konwencję. "Jedyna słuszna" odpowiedź to właśnie taka, że standard nie definiuje kolejności, więc powinno się w miarę możliwości unikać wywołań funkcji typu f(a+3, b+1) (jeśli np funkcja pobiera int), bo zwrócony wynik

Akurat to powinno się wykonać normalnie, bo a i b są niezależne od siebie, więc kolejność policzania argumentów nie ma znaczenia.
Z kolei f(f1(x), f2(x)) gdzie f1 i f2 biorą referencje i każda może zmodyfikować x jest nieokreślona.
To problem analogiczny jak do sytuacji, gdy pada pytanie: jaki będzie wyniki poniższej operacji w C++?

++i++

Na poprawną odpowiedź tutaj można (jak sądzę) łatwiej wpaść... nie mniej tego typu haki powinny się wg mnie nie powinny się pojawiać w ogóle, a jeśli już: to na bardzo wysokie stanowisko, gdzie pełna/bardzo duża znajomość standardu jest konieczna.

Aż musiałem sprawdzić, na dwoje babka wróżyła ale oba kierunki wiązań przewidziałem poprawnie, nie wiedziałem tylko który jest obowiązujący w kompilatorze.

Słyszałem też o teście Voida-Kampfa: czy skompiluje się
void a;

Uzasadnienie nazwy było miłe: bo void jest w teście, a dla niektórych jest to straszny der Kampf.

A tutaj jest ostateczne pogrzebanie idei trudnych pytań: http://www.codinghorror.com/blog/2007/02/why-cant-prog...

konto usunięte

Temat: Przykładowe pytania na rozmowie kwalifikacyjnej

Jakub L.:
Krzysztof Kondrak:

przyjęli taką konwencję. "Jedyna słuszna" odpowiedź to właśnie taka, że standard nie definiuje kolejności, więc powinno się w miarę możliwości unikać wywołań funkcji typu f(a+3, b+1) (jeśli np funkcja pobiera int), bo zwrócony wynik

Akurat to powinno się wykonać normalnie, bo a i b są niezależne od siebie, więc kolejność policzania argumentów nie ma znaczenia.
Z kolei f(f1(x), f2(x)) gdzie f1 i f2 biorą referencje i każda może zmodyfikować x jest nieokreślona.

Zgoda, tu podrzuciłem trochę zły przykład, który gdzieś mi tam świtał... dzieki za uzupełnienie.
To problem analogiczny jak do sytuacji, gdy pada pytanie: jaki będzie wyniki poniższej operacji w C++?

++i++

Na poprawną odpowiedź tutaj można (jak sądzę) łatwiej wpaść... nie mniej tego typu haki powinny się wg mnie nie powinny się pojawiać w ogóle, a jeśli już: to na bardzo wysokie stanowisko, gdzie pełna/bardzo duża znajomość standardu jest konieczna.

Aż musiałem sprawdzić, na dwoje babka wróżyła ale oba kierunki wiązań przewidziałem poprawnie, nie wiedziałem tylko który jest obowiązujący w kompilatorze.

No i co Ci wyszło? Bo VC++ się tutaj buntuje (choć komunikat błędu o wymaganym l-value wynika mimo wszystko z innego problemu, który ten zapis wprowadza). Ja generalnie tego typu pytania bym był skłonny zostawić na jakąś przyjazną pogawędkę z kandydatem, ale już PO procesie rekrutacji. Nikt, kto profesjonalnie zajmuje się programowaniem (przynajmniej zespołowym) nie będzie przecież używał tego typu niuansów w zapisie... a popisówka ze znajomości kruczków wcale nie ułatwia innym osobom analizy tak napisanego kodu.

Następna dyskusja:

dr Bjarne Stroustrup odpowi...




Wyślij zaproszenie do