Rozmowa techniczna z juniorem

Rozmowa techniczna z juniorem
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 22 godziny
  • Postów:5105
0

Obligatoryjnie pytanko z non abstract large scale system design: Zaprojektuj twittera żeby sprawdzić wiedze ogólną. hehe

edytowany 3x, ostatnio: WeiXiao
LS
Mysql + PHP + React.js i jazda!
LukeJL
do Twittera to ja bym wybrał Node.js + WebSockets + React + Bootstrap + Firebase i jazda :) w godzinę do napisania ;)
LS
@LukeJL: czemu nie postawić tego na Drupalu?
LukeJL
Na Wordpressie lepiej, pewnie już istnieje jakiś gotowy plugin do robienia klona Twittera.
W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:około godziny
  • Postów:3518
0

Spoko jest test w stylu "jakbyś wybrał najmniejszą wartość z dużej listy". Jak rzuci, że by posortował i wybrał z góry to wiadomo, że nie słucha się co się do niego mówi, ewentualnie nie mysli.

KageYoshi
można naprowadzić? ;) pod koniec dnia w pracy nie jestem w stanie wygłówkować nic
W0
No skoro jest duża to trzeba brać pod uwagę wydajność - czyli sortowanie jest słabe w tym wypadku (bo złożoność jest O(N log N) w większości przypadków). Trzeba przelecieć po liście i po prostu znaleźć wartość maksymalną (złożoność O(N))
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
1
Szkielet Sceptycznego Dino napisał(a):

No spoko Mati. Zaszpanowałeś "fachurowościom", a teraz zejdźmy na ziemię. Owszem czasem dobrze jest znać zasadty działania gc danego języka. Pozwoli zaoszczędzić czasu sobie i pieniędzy pracodawcy, które mogą zostać przeznaczone na twoją podwyżkę, oraz nerwów wam obu.

No prosze bardzo, zejdźmy na ziemie. Konkretnie to w jaki sposób mistrzuniu zaoszczędzisz ten czas i pieniądzę. Proszę o konkretny przykład.

To nie jest takie abstrakcyjne. Weźmy prawie najprostszy przykład. Java : mamy 3 obiekty - obiekt a ma referencje do b, obiekt b ma referencje do c, a ten z kolei ma znowu referencje do a. Cykl.
Szokujące jest jak wielu midów, seniorów, ludzi mających bliko 10 lat doświadczenia w Javie nie potrafi powiedzieć czy gc to usunie (jeśli nie będzie innych referencji do tego cyklu).

A to w sumie mega ważne, bo jeśli nie usunie, to musisz bardzo uważać przy projektowaniu klas :-)

Btw. nie wierzyłem, jak mi ktoś pierwszy raz powiedział, a potem zacząłem pytać o to na rozmowach, zacząłem pytać moich kolegów... dramat.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
Zobacz pozostały 1 komentarz
jarekr000000
@danek brawo. czyżby 20 lat w branży ?
danek
@jarekr000000: 4 miesiące stażu rok temu i zaczynam dopiero od lipca ;)
MA
@jarekr000000: jak czasami widzę jakie pytania padają na rozmowach to jest mi wstyd, że mam braki w wiedzy programując zawodowo od 3 lat, tzn. nie wiem czegoś, co powinienem wiedzieć będąc na poziomie stażysty/juniora
LS
Dobre, muszę popytać kolegów czy ARC (automatic reference counting) to GC czy nie i dlaczego, może być zabawnie :)
S9
@jarekr000000: jestem dumny znałem odpowiedź :D :D :D
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 22 godziny
  • Lokalizacja:Wrocław
3

@jarekr000000: przecież to jest zupełnie abstrakcyjne! Po co seniorowi więcej niż dwie klasy w projekcie? To tylko spowalnia!


Po dopracowaniu rozwiązania każdy będzie mógł założyć własny drzewiasty wątek.
Zobacz pozostałe 15 komentarzy
LS
@jarekr000000: Udzielasz się na historycy.org? Bo z punktu 1 podejrzewam że tak ;) Jednak idąc twoim skrótem to dalej była to wojna czołgów - ciężarówkami nie przełamiesz linii wroga (chyba że masz na myśli transportery opancerzone ale to już raczej druga połowa IIWŚ) a to stanowiło o głównej różnicy pomiędzy wojną manewrową IIWŚ a pozycyjną IWŚ.
somekind
Bo historii trzeba się uczyć z gier, np. RA2, a nie jakichś tam książek!
LS
Gry to przynajmniej starają się mieć atrakcyjną formę w przeciwieństwie do innych form propagandy.
jarekr000000
Nie udxielam się na historycy.org. czytam ich dość dużo jak builduje na websphere.
LS
:D Praktyczne podejście.
nalik
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 2 lata
  • Postów:1039
1

Ja podczas rozmów zadaję:

  • Pytania sprawdzające znajomość języka programowania oraz powiazanych narzędzi.
  • Pytania sprawdzające wiedzę domenową mająca znaczenie na danym stanowisku
  • Zadania w których coś trzeba zakodować na tablicy, zazwyczaj proste. Potem dopytuję jak to przetestować. Chce sprawdzić jak myśli, jak koduje, projektuje, jak rozważa przypadki brzegowe.
  • Pytania o projekty studenckie lub prywatne, zainteresowania branżowe, książki, blogi, fora.
edytowany 2x, ostatnio: nalik
1
jarekr000000 napisał(a):

To nie jest takie abstrakcyjne. Weźmy prawie najprostszy przykład. Java : mamy 3 obiekty - obiekt a ma referencje do b, obiekt b ma referencje do c, a ten z kolei ma znowu referencje do a. Cykl.
Szokujące jest jak wielu midów, seniorów, ludzi mających bliko 10 lat doświadczenia w Javie nie potrafi powiedzieć czy gc to usunie (jeśli nie będzie innych referencji do tego cyklu).

A to w sumie mega ważne, bo jeśli nie usunie, to musisz bardzo uważać przy projektowaniu klas :-)

No to jest tzw. island of isolation i jest całościowo unreachable, więc dlaczego GC miałby go nie usunąć zatem? Serio ciężko mi zrozumieć, że ktoś mógłby wpaść na pomysł, że gc tego nie usunie. Sęk w tym, że nawet jak chcesz wymusić w javie GC, to on sobie zadziała, albo i nie, bo stwierdzi, że później. Projektowanie klas i tego jaki będzie zakres życia danych obiektów a samo działanie GC i jego algorytmów to dwie różne rzeczy i serio trzeba by się nagłowić IMHO, żeby wykorzystać wiedzę nt. jak GC dokladnie działa przy projektowaniu architektury programu. Na pewno nie byloby to zagadnienie na poziomie juniora. Juniorowi powinno wystarczyć przeświadczenie, że GC działa i to niezwłocznie ;) Ale to tylko moje skromne zdanie.

NS
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:455
0

Maciej Aniserowicz w swojej książce napisał, że wymaga od Juniora:

  • gita;
  • umieć OOP;
  • znajomość wzorców projektowych;
  • umiejętność testowania jednostkowego.

I tak wobec tego co tu czytam, to bardzo rozbieżne są te wymagania.

Zobacz pozostałe 2 komentarze
Pyxis
To wszystko zależy od tego, jak na to spojrzeć. Pracownik może stawiać wymagania, bo płaci swoim czasem i umiejętnościami. Gotówka jako pieniądz to tylko umowa, co widać dobrze po kryptowalutach.
R3id4k
Pracownik co najwyżej może się zwolnić jak mu się nie podoba oraz ma prawo wymagać od pracodawcy realizacji postanowień wynikających z zawartej umowy i kodeksu pracy. Może (i powinien gdy tak uważa) wystąpić o zmianę zapisów w umowie (w tym zmiany wysokości $$$) ale nie określiłbym tego "wymaganiem" a negocjacją... Odkąd nie ma pokrycia w złocie 1 : 1 każdy środek płatniczy to tylko umowa...
LE
Wzorce projektowe wymagane od juniora? Koleo, gdzie ty zyjesz?
NS
@Lexik: no właśnie zam się ostro przygotowuję z wzorców i czekam na pierwszą rozmowę. A co wg Ciebie nie są wymagane?
LE
Wymagac mozna wszystko, ale po co? Jak bedziesz juniorem to bedziesz chcial wpakowac te wzorce do wszystkiego co piszesz. Taki overengeneering, typowa postawa juniora, to co mozna zrobic prosto bedziesz komplikowal na sile, bo chcesz uzyc tego czego sie nauczyles. Nie daj Boze jesli dodasz do tego multithreading. Pracowalem na klastrach po 30k cores i ludzie dowali NA SILE multithreading tylko dlatego, ze zeby ich kod wygladal bardziej skomplikowanie. Masakra, do tego wszystko dzialalo po 10 razy wolniej, zakleszczalo sie czesto i malo kto potrafil taki kod pozniej rozgryzc
VE
  • Rejestracja:ponad 7 lat
  • Ostatnio:dzień
  • Postów:362
3
NeutrinoSpinZero napisał(a):

Maciej Aniserowicz w swojej książce napisał, że wymaga od Juniora:

  • gita;
  • umieć OOP;
  • znajomość wzorców projektowych;
  • umiejętność testowania jednostkowego.

I tak wobec tego co tu czytam, to bardzo rozbieżne są te wymagania.

A to jakiś guru jest bo nie rozumiem?

2

Ja miałem trochę rozmów jako początkujący / junior w webie i rekrutacja techniczna przebiegała bardzo różnie, oto kilka przykładów:

  • niski budżet (< 2000 zlecenie) stanowisko dla osoby nie mającej doświadczenia / stażysty - kilkanaście ogólnych pytań ustnych gdzie była możliwość przy każdym sobie porozmawiać: OOP, co to jest programowanie funkcyjne, http vs https, po co testy, coś o gitcie, SOLID, KISS, różnice między bazami SQLi inne, z tak ogólnych pytań wywiązywała się ciekawa dyskusja, atmosfera luźna, widać że chcieli zobaczyć czy kandydat się interesuje, co ma od siebie do powiedzenia, a nie na zasadzie egzaminu abcd, następnym etapem było zrobienie aplikacji z kontami dla użytkowników na danym freamworku + bazie SQL + dowolny prosty front. Moim zdaniem dobra taka rekrutacja, ale niestety nie wiedzieć czemu "zawieszona".

  • junior frontend (kasa 2500 netto UoP plus b. dobre warunki pracy), nie wymagali doświadczenia komercyjnego, proste ogólne pytania co wiesz o scss / sass, jquery, różnice między SQL i NoSQL, a więc naprawdę łatwe pytania, potem o tym, czy śledzę nowinki w JS, jak wyszło, że tak to po dwóch dniach pozytywna odpowiedź.

  • staż / junior web developer (kasa? nie wiadomo, ale wyszło, że najlepiej z urzędu za darmo albo coś hehe), pytania z bardzo różnych technologii co mnie zdziwiło i znacznie wydłużyło rozmowę, składnia JS, składnia PHP, proste pytania o MongoDB i SQL, konkretne pytania o Wordpress (nic nie pisałem o nim), photoshopa (parę razy w życiu go tylko dotknąłem i się tym nie "chwaliłem"), inne technologię i o jakieś archaiczne technologię, których nie pamiętam i znałem tylko z nazwy, jeszcze więcej tego było, aż doszliśmy do tematu kasy, bym zakończył rozmowę.

  • junior web developer (kasa max 4000 brutto umowa o dzieło), test z pytań o PHP, JS, Git, SQL i inny standard, do tego momentu było ok, druga połowa to konkretne pytania ze szczegółów z prestashopa, w ofercie było tylko "mile widziane", więc na szybkiego w domu postawiłem kilka sklepów na xampie by zobaczyć z czym to się je, z tej części miałem nie wiele więcej jak 0, a więc w sumie trochę poniżej 50% i "odpadłem".

Tak więc były i miłe rozmowy i mniej miłe :)

1

W sumie to najważniejsze żeby był chętny i w miarę rozgarnięty, bo tego się nie da nauczyć, a całej reszty się da.

CM
Pod warunkiem, że firma ma jakąś długofalową strategię i program wdrażania świeżynek, a nie "jak nie rozumiesz to wygooglaj se tutoriala, pisz tak żeby działało".
0
Bogaty Mleczarz napisał(a):

Ja miałem trochę rozmów jako początkujący / junior w webie i rekrutacja techniczna przebiegała bardzo różnie, oto kilka przykładów:

  • niski budżet (< 2000 zlecenie) stanowisko dla osoby nie mającej doświadczenia / stażysty - kilkanaście ogólnych pytań ustnych gdzie była możliwość przy każdym sobie porozmawiać: OOP, co to jest programowanie funkcyjne, http vs https, po co testy, coś o gitcie, SOLID, KISS, różnice między bazami SQLi inne, z tak ogólnych pytań wywiązywała się ciekawa dyskusja, atmosfera luźna, widać że chcieli zobaczyć czy kandydat się interesuje, co ma od siebie do powiedzenia, a nie na zasadzie egzaminu abcd, następnym etapem było zrobienie aplikacji z kontami dla użytkowników na danym freamworku + bazie SQL + dowolny prosty front. Moim zdaniem dobra taka rekrutacja, ale niestety nie wiedzieć czemu "zawieszona".
  • staż / junior web developer (kasa? nie wiadomo, ale wyszło, że najlepiej z urzędu za darmo albo coś hehe),

Drugi przypadek wyjaśnia dlaczego w pierwszym rekrutacja "zawieszona". :)

LE
  • Rejestracja:około 7 lat
  • Ostatnio:około 6 lat
  • Postów:36
0

Hej, tu jeszcze jedno jakie mialem na rozmowie w innej firmie: oblicz pierwiastek z 2 :)

Pozdrawiam

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)