Strona 1 z 1

Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: niedziela 04 lis 2018, 19:02
autor: StaryAnoda_NEW
Hej

Jakie mieliście pytanie kiedy staraliście się na stanowisko młodszego programisty C, czy tam młodszego programisty systemów wbudowanych?
Oraz jakie byście zadali pytania, kiedy mielibyście za zadanie przeprowadzić taką rozmowę?

Pozdrawiam
StaryAnoda_NEW

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: niedziela 04 lis 2018, 22:04
autor: dambo
Ja bym celował trochę obok - wystarczy dbać o swojego githuba itp i można uniknąć takich pytań o szczegóły, tylko rozmawiać na "wyższym poziomie abstrakcji".

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: poniedziałek 05 lis 2018, 07:55
autor: inż.wielki
Jak wyżej. Jak idziesz na rozmowę weź swoje projekty. Najlepiej laptopa + jeden albo 2 projekty fizyczne. Wtedy nie powinno być żadnych problemów. Mnie pytali ostatnio o to co się stanie kiedy w mikrokontrolerze zajedziesz sobie pamięć ram. Jak działają przerwania itd

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: poniedziałek 05 lis 2018, 11:38
autor: ZbeeGin
inż.wielki pisze:Mnie pytali ostatnio o to co się stanie kiedy w mikrokontrolerze zajedziesz sobie pamięć ram.

Pytanie bez sensu - pewnie podchwytliwe. SRAM - mało który µC ma przecież FRAM lub DRAM jako pamięć operacyjną - to tylko przerzutniki więc nie ma tam nic co by ulegało szybkiemu zużyciu.

@ StaryAnoda_NEW, proponuję nie wykuwać "na blachę" odpowiedzi na znane pytania rekruterów. Powinieneś być w stanie reagować i udzielać odpowiedzi odpowiedniej do toku rozmowy.

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: poniedziałek 05 lis 2018, 21:48
autor: piotrek
Do pytań z zakresu embedded najlepiej przygotować się z problematycznych kwestii takich jak ograniczona pamięć, przerwania, niezawodność programu. W szczególności:
- przepełnienie stosu (rekurencja, częste przerwania, zagnieżdżanie funkcji)
- slowo kluczowe volatile i różne jego postaci (const, *const, argumenty funkcji)
- makra, prekompilacja czego się da
- crashe programu i jego przyczyny (nieumiejęte operowanie wskaźnikami, mazanie po pamięci)
- rzutowanie struktur i typów na siebie wzajemnie (pola bitowe, struktury, tablice, unie, inty 16,32 bitowe, typy wskaznikowe na zwykłe)
- obsługa przerwań w maszynie stanów
- niezależność od architektury, przenaszalność kodu
- kopiowanie argumentów funkcji na stos, zmiene lokalne
- zmienne statyczne, stałe, inicjalizacja zmiennych, tablic, struktur
- zagadnienia wokół mikrokontrolerów: AD/DA, PWM

A jeśli chodzi o własne projekty na repo GITa - trzeba być pewnym co się pokazuje, bo to może być strzał w stopę :D
Podejście seniorów na rekrutacji do "młodzieży" może być bardzo surowe ponieważ obecnie, w dobie bezmyślnych "arduinowców" i powszechnych praktyk programowania ctrl+c, ctrl+v trudno zaufać kompetencji rekrutów.

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: poniedziałek 05 lis 2018, 22:38
autor: anshar
Ja na przykład, miałem za zadanie napisać krótką funkcję, która ma zliczać ilość bitów w zmiennej na przykład int (czyli ile znajduje się "jedynek" w jakiejś zmiennej, na przykład zmienna o wartości 7 to binarnie 0b00000111 czyli 3, 27 to 0b00011011 czyli 4).
Zadanie niby nie trudne, ale czy na pewno?
Zacząłem od użycia operatora przesunięcia bitowego i sprawa prosta.
Tylko, że to miało być napisane bez użycia operatorów przesunięć bitowych, mnożenia i dzielenia. :)
Na pytanie jakich operatorów mogę użyć otrzymałem odpowiedź, że do dyspozycji są tylko +, -, & oraz |.
Proste? Do dyspozycji miałem tylko mazak i białą tablicę.

Dając Ci jakieś zadanie do wykonania często chcą zobaczyć jak sobie poradzisz, jak wygląda Twoje logiczne myślenie.

Zadawałem pytania, głośno myślałem, próbowałem na różne sposoby i się udało.
Najgorsze jest gdy ktoś powie coś w stylu nie wiem, nie dam rady, to czarna magia. :)
Może to Ci pomoże. Powodzenia!

Zacząłem tak:

Kod: Zaznacz cały

#include  <stdio.h>

#define value 27

int bitCount(int val);

int main(void)
{
    printf("Ilość bitów '1' w zmiennej %d wynosi %d\n", value, bitCount(value));
    return 0;
}

int bitCount(int val) {
   
    int result = 0;
   
    while(val) {
        if(val & 1) result++;
        val >>= 1;   
    }
    return result;
}


A jak teraz pozbyć się '>>' ? ;)

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: poniedziałek 05 lis 2018, 23:05
autor: ZbeeGin
Odwrócić sytuację i użyć dodawania val+val.

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: wtorek 06 lis 2018, 13:17
autor: piotrek
Wystarczy nakladac maskę kolejnych potęg liczby 2 i sprawdzać czy val jest większa od 0. Potęgi można stablicować albo obliczać, zaczynając od n=1: n << 1 = 2 * n = n + n

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: wtorek 06 lis 2018, 16:32
autor: j23
anshar pisze:(...)A jak teraz pozbyć się '>>' ? ;)

W sumie ciekawe zadanie na rekurencję, a dalej wstęp do pytań o stos i jego przepełnienie i jak se z tym poradzić...

W każdym razie ja bym zrobił to tak:

Kod: Zaznacz cały

#include  <stdio.h>
#define value 27
int bitCount(int val);
int main(void)
{
    printf("Ilość bitów '1' w zmiennej %d wynosi %d\n", value, bitCount(value));
    return 0;
}

int result=0;
int bitCount(int val) {
   if (val==0) return result;
   if (val==1) return result++;
   if (val>=2)
      {
      val=val-2;
      return result++;
      }   
   bitCount(val);
}

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: wtorek 06 lis 2018, 20:30
autor: anshar
Fajny pomysł z rekurencją. ;)
Super! A da się bez rekurencji?

Tak na szybko wkleiłem tutaj: https://rextester.com/l/c_online_compiler_gcc
Niestety nie działa. :roll:

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: wtorek 06 lis 2018, 21:16
autor: xor
W tej funkcji nigdy nie dojdzie do rekurencji.

No to ja podam kolejny przykład, ale nie mój bo hakier ze mnie marny, ale z książki pt. "Hacker's Delight" (gdzie nb. algorytmów na to jest chyba ze 20):

Kod: Zaznacz cały

#include  <stdio.h>
#define value 27

int bitCount(int val);


int main(void)
{
    printf("Ilość bitów '1' w zmiennej %d wynosi %d\n", value, bitCount(value));
    return 0;
}


int bitCount(int x) {
   int n;
   n = 0;

   while (x != 0) {
      n = n+ 1;
      x = x & (x - 1);
   }
   return n;
}

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: wtorek 06 lis 2018, 23:32
autor: piotrek
A tutaj przykład jak przetestować na wszystkich wartościach typu danych (typ countedInteger, tutaj jest 16 bitowy uint). Testowanie odbywa się poprzez porównanie wyników dwóch funkcji - pewnej z operatorem >> i testowanej z ograniczonymi operatorami + &

Kod: Zaznacz cały

#include <stdio.h>
#include <assert.h>
#include <stdint.h>
#define MAX(t) (((0x1ULL << ((sizeof(t) * 8ULL) - 1ULL)) - 1ULL) | (0xFULL << ((sizeof(t) * 8ULL) - 4ULL)))
typedef uint16_t countedInteger;
const int BIT_SIZE = sizeof(countedInteger) * 8;
int countBit(countedInteger v);
int countBitLimitedOperators(countedInteger v);
int countFunctTest();
int main() {
   countFunctTest();
   return 0;
}
int countFunctTest() {
   uint64_t i;
   uint64_t max = (uint64_t)MAX(countedInteger);
   for(i = 0; i < max; ++i) {
      assert(countBit(i) == countBitLimitedOperators(i));
   }
}
int countBit(countedInteger v) {
   int count = 0;
   while(v > 0) {
      count += v & 1;
      v >>= 1;
   }
   return count;
}
int countBitLimitedOperators(countedInteger v) {
   int count = 0;
   int bitSize = BIT_SIZE;
   int pow2 = 1;
   while(bitSize-- > 0) {
      count += (v & pow2) > 0 ? 1 : 0;
      pow2 = pow2 + pow2;
   }
   return count;
}

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: środa 07 lis 2018, 00:30
autor: anshar
No i pięknie panowie!
Na rozmowie o pracę doszedłem do takiej postaci:

Kod: Zaznacz cały

int bitCount(int value) { 
    int result=0;
    while(value) {
            value &= value--;
            result++;
    }
    return result;
}


Muszę zerknąć do tej książki pt. "Hacker's Delight" (gdzie nb. algorytmów na to jest chyba ze 20):i! ;)

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: środa 07 lis 2018, 09:54
autor: piotrek
Kilka przykładów starej dobrej szkoły można znaleźć tutaj: https://graphics.stanford.edu/~seander/bithacks.html

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: środa 07 lis 2018, 12:22
autor: xor

Kod: Zaznacz cały

...
            value &= value--;
...


Mam poważne wątpliwości co do tego wyrażenia. IMO punkt sekwencyjny jest za średnikiem, a więc wynik wyrażenia jest zależny od kompilatora.

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: środa 07 lis 2018, 12:40
autor: ZbeeGin
Zaczyna się robić mocny off-topic...

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: środa 07 lis 2018, 20:53
autor: mokrowski
Ja zaczynam od bardzo prostego pytania lub polecenia.

Proszę określi czy i jak podany program się kompiluje, jakie ma błędy i w jaki sposób należy go poprawić.

Kod: Zaznacz cały

main() {
    char * msg = "Hello C!\n";
    printf(msg);
}


Po tym jak ktoś odpowiada, ile znajdzie błędów, czy odróżnia ostrzeżenia od błędu, określa czy coś jest w standardzie a co nie jest... będę od razu wiedział z kim mam do czynienia :)

Na drugi ogień idzie pytanie:
Czy to jest poprawne i jak będzie działało a jeśli nie jest poprawne to jak poprawić by działało?

Kod: Zaznacz cały

#include <stdio.h>

int main(void) {
    char * msg = "babol";
    msg[0] = 'r';
    msg[1] = 'o';
    puts(msg);
    return 0;
}


Po tych dwóch pytaniach 50-70% odpada i nie tracę czasu.

Re: Język C - zbiór zadań, pytań na rozmowę kwalifikacyjną

: czwartek 21 sty 2021, 16:22
autor: Senku
Ja polecam też przeczytać artykuł jak ten https://cvwork.pl/pytania-na-rozmowie-kwalifikacyjnej/ w którym są zagadnienia dość proste, ale też kilka skomplikowanych i podchwytliwych pytań na rozmowy kwalifikacyjne.