W tym wpisie podzielę się zbiorem pytań, które często powtarzają się na różnych rozmowach wstępnych na stanowisko programisty C/C++. Są to pytania techniczne - nie opisałem tu żadnych pytań miękkich (HR'owych). Spotkałem się z nimi sam (już prawie 10 lat pracy, jak ten czas leci..), a niektóre zadawałem osobiście, gdy byłem po drugiej stronie stołu. Mam nadzieję, że taka lista okaże się pomocna podczas przygotowań do rozmowy.
Na początek pytania związane stricte z C/C++. Kolejność losowa.
- Czym jest język obiektowy? Czy C++ jest językiem obiektowym (odpowiedź na to, czy jest może się różnić w zależności od tego, jak definiujemy język obiektowy)?
- Napisz program, który jest poprawny składniowo w C, a nie jest w C++.
- Czym są słowa kluczowe (w kontekście zmiennej, w kontekście metody) static i const? Co oznacza słowo kluczowe volatile?
- Czym różni się alokacja pamięci na stosie od alokacji pamięci na stercie? Jak zmienną na oba sposoby? Kiedy stosować jedno, a kiedy drugie?
- Czym jest smart pointer? Kiedy go stosować? Jakie są rodzaje?
- Co wypisze poniższy program? Dlaczego?
#include <iostream> #define multiply(a, b) a*b int main() { std::cout << multiply(1, 2+2) << std::endl; return 0; }
- Co dodać do istniejącego kodu (można tylko w zaznaczonych miejscach), by program wypisywał:
foo() main()
#include <iostream> static int foo(); /* Tu można dopisywać swój kod */ /* Koniec miejsca na dopisywanie */ static int foo() { std::cout << "foo()" << std::endl; return 0; } int main() { std::cout << "main()" << std::endl; /* Tu można dopisywać swój kod */ /* Koniec miejsca na dopisywanie */ return 0; }
- Napisać metodę, która przyjmuje numer elementu ciągu Fibonacciego i zwraca wartość tego elementu. Jak przetestować taką metodę (przykład testu jednostkowego (unit test))?
- Jak sprawić, by ten program nic nie wypisał na wyjściu?
- Czym różni się przekazywanie zmiennej przez wartość, przez referencję i przez wskaźnik (pass by value, by reference, by pointer)?
- Jaka jest różnica między wskaźnikiem, a referencją?
- Dana jest funkcja foo(), która ma tylko jeden argument, który zawsze powinien być liczbą całkowitą nie mniejszą, niż zero. Jak sprawić, by poniższy kod nie skompilował się:
foo(-1);
Pytania niezwiązane bezpośrednio z C/C++
- Czym jest wyciek pamięci? Czym jest wyścig wątków? Czym jest zakleszczenie (deadlock)? Jak wykrywać te problemy w już istniejącym kodzie?
- Czym się różni wątek od procesu? Jakie są wady i zalety jednego i drugiego?
- Jakie są mechanizmy synchronizacji wątków i procesów?
- Czym jest tablica asocjacyjna (hash table)? Podać przykład jej użycia (jest dostępna w std). Czym jest kolizja w tablicy asocjacyjnej? Jak taka tablica jest zaimplementowana? Czym jest funkcja skrótu (hash table)? Podać przykład swojej implementacji takiej tablicy i omówić jest odporność na kolizję?
- Czym są wzorce projektowe i dlaczego są stosowane? Podaj przykład wzorca projektowego (innego, niż singleton)?
- Czym jest UML? Dlaczego go stosujemy? Napisać diagram klas dla wybranego przez siebie problemu.
Kolejne pytania w kolejnych wpisach.
Super! Bardzo przydatny spis.
ReplyDeleteDE13F73BA2
ReplyDeleteAnadoluslot
Anadoluslot Giriş
Anadoluslot Güncel Adres
Anadoluslot Giriş
Trwin Giriş Adresi
Trwin
Trwin
Trwin
Trwin Giriş