Powtórka wiadomości przed rozmową, na czym się skupić?

0

Tak jak w tytule.
Za parę dni mam rozmowę techniczną na staż, co - bazując na Waszym doświadczeniu - wypadałoby sobie powtórzyć z C++?

Znalazłem taką stronkę:
https://www.interviewbit.com/cpp-interview-questions/

plus oglądam serię C++ Cherno na Youtube, koleś ogarnięty w tym temacie się wydaje.
Coś do tego dodać?

1

weź sobie tytuły rozdziałów/podrozdziałów z książki o c++ dla początkujacych. I pobieżnie przeleć zagadnienia.

7

Jako, że cię nie kojarzę, wiec nie wiem co umiesz, a co nie, więc trudno powiedzieć.
U mnie na rekrutacji rozwiązuje się jakieś proste zadanie algorytmiczne i to jest najważniejsza część rekrutacji.
Coś w stylu zadań ze SPOJ/hackerrank/leetcode z pozimu podstawowego w porywach do średniego.

Najwięcej punktów zbiera się za styl kodowania:

  • jak nazywa symbole
  • podział na funkcje
  • ogólną czytelność kodu

W drugiej kolejności:

  • sprawdza się czy kandydat zna pojęcie złożoności czasowej pamięciowej
  • znajomość STL-a
  • co to jest Undefined Behavior

Z pytań teoretycznych:

  • polimorfizm
  • sterta
  • stos
  • RAII vs new delete

Chwalenie się "znam wielowątkowość" to wpływanie na mieliznę.

Na staż na pierwszą pracę nie trzeba wiedzieć, ale dobrze by było znać podstawy git.

Tyle przychodzi mi do głowy teraz.

I jeszcze jedno, od stażysty nie wymagałbym, ale wielkim atutem byłaby umiejętność pisania testów: gtest, catch2 lub własnym kodem.

5

bazując na Waszym doświadczeniu

Problemem przy takiej prośbie jest to, że na taki etap ludzie zazwyczaj rekrutują się tylko raz i często trochę czasu od takiej rekrutacji już minęło. Nie sądzę by przebieg mojej rekrutacji dziesięć lat temu będzie Ci specjalnie pomocny dzisiaj.

Mój pierwszy pracodawca był bardzo zainteresowany moimi amatorskimi projektami, które sobie klepałem na boku. Dzisiaj jednak widzę, że sporo miejsca zostawia się na zadania podobne do tych na leetcode i jest to prawdą przy rekrutacjach na każdy poziom od juniora do seniora. Z samego C++ to prawie na pewno będzie RAII i może, może move semantics.

2

@Cepo: ja nic nie pisałem o uczeniu się wielowątkowości. Napisałem, że stażysta nie powinien się chwalić, że się na tym zna.

  1. nikt normalny nie będzie wymagał tego od stażysty (chyba, że sam się nie zna, a wydaje mu się, że jest odwrotnie)
  2. nie ma szans by sobie to właściwie powtórzył przed rozmową
  3. Nie ufam nikomu, kto twierdzi, że wielowątkowość jest łatwa i że ktoś się zna, za takie twierdzenie kandydat miałby u mnie małego minusa (małego, bo to jest dość powszechne przekonanie)

Wielowątkowości trzeba się uczyć, ale trzeba podchodzić ostrożnie jak pies do jeża i unikać do ostatniej chwili.

Od aplikanta (dowolny level) wolałbym usłyszeć, coś w stylu: potrafię używać mutexów, atomic-ów, .... , ale zdaje sobie sprawę, że wielowątkowość nie jest łatwa i brakuje mi dosiadywania by z pewnością powiedzieć że się na tym znam.

2

Mały dowód na subtelności multithreading.
Kto widzi w tym kodzie (potencjalny) błąd wielowątkowości?

class LimitCounterObserver {
public:
     virtual ~LimitCounterObserver() {}
     virtual void limitReached() = 0;
     virtual void limitAvailable() = 0;
};

class LimitCounter
{
public:
    explicit LimitCounter(size_t start, LimitCounterObserver &o) 
        : mCounter {start}
        , mObserver{o}
    {}

    void add(szie_t x) {
        std::lock_guard lock{mMutex};
        bool wasZero = !mCounter;
        mCounter  += x;
        if (wasZero) mObserver.limitAvailable();
    }

    bool remove(size_t x) {
        std::lock_guard lock{mMutex};
        if (mCounter < x) return false;
        mCounter  -= x;
        if (!mCounter) mObserver.limitReached();
        return true;
    }

private:
     size_t mCounter = 0;
     std::mutex mMutex;
     LimitCounterObserver &mObserver;
};
2

Do postu @MarekR22 dołożyłbym jeszcze podstawową wiedzę o wyjątkach (to trochę w RAII, a w trochę move semantics się mieści), dlaczego pewne funkcje powinny być noexcept, jak łapać, jak rzucać, jak specyfikować.
EDIT: ogólnoprogramistcznych pytań też się możesz spodziewać, ale to zależnie od domeny pewnie. W sieciach np. mogą spytać o Boost ASIO. Z drugiej strony - na stażu to równie dobrze może być pytanie o różnicę między TCP a UDP ;) Mocno to pewnie zależy od domeny/firmy, bo np. znajomy jak szedł do DSP na juniora w ramach pierwszego pytania wyprowadzał wzór na jakąś modulację ;P

4

Może jednak dołożę swojego grosza.

Wymusiłem na pracodawcy że do swojej ekipy ja osobiście nabieram ludzi, zaś ja wymagam umiejętności korzystania z dokumentacji lub/oraz googla.
Jedno z zadań użyć unikatowej (specjalnie niekonwencjonalnie napisanej) biblioteki do rozwiązania prostego zadania.
Drugie coś w rodzaju getopt w bash'u patrzy wyżej w komentarzach od @alagner trzeba szybko i sprawnie znaleźć i zastosować np to:
https://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash
Nie obchodzi mnie czy obecnie zna boost asio grunt że szybko znajdzie jak użyć i zastosuje.
Nie obchodzi mnie czy obecnie zna cokolwiek, grunt że potrafi szybko wyszukać, zrozumieć i zaadoptować.

Jeszcze kilka lat temu moje wymagania byli unikatowymi, zaś ostatnio zauważyłem że to stało się trendem.

0

Dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1