Tipy a triky na zlepšení logického myšlení u pohovorů

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #15 kdy: 14. 02. 2022, 23:33:03 »
a += b
b = a - b
a  -= b

Pekne ale nepouzitelne ak hrozi pretecenie...

To neva, ono to při těch druhých dvou výpočtech zase přeteče do správného výsledku.

Horší je to s floatama, ale tam obecně neplatí spousta předpokladů (a to by byla na pohovor zajímavější otázka).

Nie ak to zdochne na chybovej hlaske, pre tento pripad by musel mat ten cielovy jazyk moznost vypnut kontrolu pretecenia.
« Poslední změna: 14. 02. 2022, 23:35:39 od Death Walker »


Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #16 kdy: 14. 02. 2022, 23:35:03 »
Ne, je to jejich "wet dream" dostat listecek. uz to mne chtely nekolikrat, ale nikdy jsem jim ho nedodal.

Tak s takymi som sa nastastie este nestretol...

RDa

  • *****
  • 1 821
    • Zobrazit profil
    • E-mail
Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #17 kdy: 15. 02. 2022, 00:51:49 »
ja bych sel na to spis jako:
Kód: [Vybrat]
mov eax, [var1]
xchg eax, [var2]
mov [var1], eax

A pokud by remcali ze "eax" je prece treti promenna, tak at me ukazou jak ten zrejme ocekavanej triradkovej xor schopen primo dvou memory operaci  :-)

Pro zvedave - dopadne priserne:
Kód: [Vybrat]
void swap(int *a, int *b ) {
    *a = *a ^ *b;
    *b = *a ^ *b;
    *a = *a ^ *b;
}

swap(int*, int*):
        mov     eax, DWORD PTR [rdi]
        xor     eax, DWORD PTR [rsi]
        mov     DWORD PTR [rdi], eax
        xor     eax, DWORD PTR [rsi]
        mov     DWORD PTR [rsi], eax
        xor     DWORD PTR [rdi], eax
        ret
( skrze https://godbolt.org/ ... x86-64 gcc-11.2 -O3 )

Jinak je zajimavy, ze clang ani gcc negeneruje xchg, a pri pouziti treti promenne z toho vznikne 2x load a 2x store, coz je asi vyhodnejsi z pohledu dekoderu a pipeline / ROB?
Kód: [Vybrat]
void swap(int *a, int *b ) {
    int c = *a;
    *a = *b;
    *b = c;
}

swap(int*, int*):
        mov     eax, dword ptr [rdi]
        mov     ecx, dword ptr [rsi]
        mov     dword ptr [rdi], ecx
        mov     dword ptr [rsi], eax
        ret


Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #18 kdy: 15. 02. 2022, 01:59:51 »


Pekna stranka, diky.

S tym xchg to bude asi takto: https://godbolt.org/z/z4zhdxo71

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #19 kdy: 15. 02. 2022, 05:12:13 »
Docela začínám propadat zoufalství protože jsem byl v jedné firmě i nařčen, že jako programátor se 4 lety zkušeností bych si s tím měl poradit hravě, že jim tam snad lžu.
Ignoruj neúspěch a pokračuj dál v hledání. Podle mě jsi měl pouze smůlu na debilní firmy kde zjevně nikoho nepotřebují a spíš tvůj pohovor posloužil jako důvod k činnosti personalistům. Neboť i oni potřebují vykazovat činnost. Oni prostě nikoho nenabírají ale inzerát mají aktivní a tak díky tomu vykazují pracovní činnost. Kdyby nic nedělali byli by prostě zbyteční.

Existují nějaké tipy / triky jak tento logický / algoritmický styl myšlení vylepšit?
Podle mě Ne i Ano. Zásadně se mozek vylepšit nějakým cvičením nedá, kdo neumí myslet, má prostě smůlu. Lze si zapamatovat(našprtat) myšlenky druhých( a možná i pochopit) a ty si uložit a pak je použít, což dělá cca 95-8% populace.


Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #20 kdy: 15. 02. 2022, 05:25:42 »
a += b
b = a - b
a  -= b

Pekne ale nepouzitelne ak hrozi pretecenie...

a to muze byt dalsi dotaz, jake to ma nevyhody :-)

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #21 kdy: 15. 02. 2022, 08:07:42 »
a += b
b = a - b
a  -= b
Pekne ale nepouzitelne ak hrozi pretecenie...
Proto se to dělá xorem.
Tady bych tě opravil - nedělá se to! Je extrémně nepravděpodobné, že by se tazatel někdy dostal do situace, kdy takovýhle swap dává smysl.

Rozumný překladač tenhle kód zoptimalizuje na normální swap. Respektive zoptimalizoval by, kdyby nemusel zachovat jednu hnusnou past, kdy ten kód neprohazuje, ale nuluje. Naprosto typická zkratka - je to pomalejší ale zase to nefunguje vždycky.

Idris

  • *****
  • 1 910
    • Zobrazit profil
    • E-mail
Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #22 kdy: 15. 02. 2022, 08:23:04 »
a += b
b = a - b
a  -= b
Pekne ale nepouzitelne ak hrozi pretecenie...
Proto se to dělá xorem.
Tady bych tě opravil - nedělá se to! Je extrémně nepravděpodobné, že by se tazatel někdy dostal do situace, kdy takovýhle swap dává smysl.

Rozumný překladač tenhle kód zoptimalizuje na normální swap. Respektive zoptimalizoval by, kdyby nemusel zachovat jednu hnusnou past, kdy ten kód neprohazuje, ale nuluje. Naprosto typická zkratka - je to pomalejší ale zase to nefunguje vždycky.
Pravda, nedělá, chtěl jsem prostě jen říct, že xorem to jde podobně bez ohledu na přetečení.

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #23 kdy: 15. 02. 2022, 08:53:52 »
Někdo moudrý (nepamatuji si kdo) prohlásil, že vrozený talent je (nepamatuji si kolik, ale málo) procent a zbytek je píle , pravidelnost a vytrvalost. Platí to u sportu, cizích jazyků i tréninku algoritmického myšlení. Stanovte si cíl - X minut denně -  dodržujte ho. Dejte tomu prioritu.

Jde jen o aplikaci vzorů známých řešení na podobnou úlohu. Zvládá to i umělá inteligence. Mimochodem DeepMind Alpha Code (od Alphabetu, firmy zastřešující Google) zvládá v soutěžích typu Codeforces prý porazit 54% vývojářů celého spektra (od nováčků po kované profíky) a dá se s použitím velké zkratky říct, že stroj už programuje jako průměrný programátor. Za čas si koupíte bota, který za vás bude řešit "whiteboard" problémy při pohovorech a půjde o to, kdo bude mít zaplacenou lepší A.I. - to jsme teď dost odbočili od tématu..

Úlohy na "algoritmické myšlení" nacvičíte na různých stránkách typu hackerrank, leetcode, intverview cake (dobré, ale placené a výrazně koukám podražili) nebo v knížkách typu Cracking the code interview (tu bych osobně doporučil). Je dobré se tím pravidelně zabývat dlouhodobě a pravidelně, i když zrovna interview nečekáte. Jen tak ze zábavy a z preventivních důvodů Mozek je jako sval a nepoužíváním nebo jednostrannými rutinními úlohami (stopadesátá crud servisa ve springu a JPA a JSON a REST...) může zakrnět.

Pokud jde o pohovory samotné - po nějakém tréninku zjistíte, že je omezený pool úloh, intervieweři jsou velmi často líní přijít s něčím úplně originálním a ani to skoro dobře nejde. Spíš řešíte situaci, kdy úlohu prostě znáte. "Takže chceme naimplementovat frontu pomocí dvou zásobníků (to je ale překvapení)."  nebo "n-tý prvek od konce single-link-list seznamu (neříkejte)"

Idris

  • *****
  • 1 910
    • Zobrazit profil
    • E-mail
Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #24 kdy: 15. 02. 2022, 09:04:21 »
slovní úlohy a logické uvažování
Zní to banálně a nudně, ale ty úlohy jsou v zásadě matematické (v širším smyslu, někdy jde čistě o statistiku či logiku nebo jen vhodný algoritmus v několika krocích). S trochou píle je nejefektivnější procvičovat si jednodušší matematické úlohy (začít na SŠ úrovni a přidávat), zvlášť pokud už člověk má praktické zkušenosti z práce v IT. Druhou cestou je pak to memorování, ale to asi člověka nikam neposune.

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #25 kdy: 15. 02. 2022, 09:10:59 »
...

Skusat si algoritmicke ulohy sa da na strankach ako je https://www.hackerrank.com/ , Da sa tam vybrat mnozstvo jazykov v akom chces danu ulohu plnit. Su aj ine stranky ale nechce sa mi hladat teraz :D

Urcite by som sa len slepo neucil algoritmy z nejakej knizky, lebo to skonci ako na vyske na matematike, hafo pismenok a cudnych znakov medzi nimi, aj si celkom myslis ze vies, ale potom pridu cvika a komplikovanejsie priklady uz moc nejdu (vlastna skusenost :D). Preto treba take veci cvicit prakticky.

Ohladom spominanej ulohy na swap, jedna sa o jednu zo zakladnych uloh kde vidia ci uchadzac len vie algoritmus ako ich swapnut,
napr [a, b] = [b, a] co nie kazdy jazyk umoznuje,
alebo
a += b
b = a - b
a  -= b
co ide v kazdom jazyku. Na tom vidno ci uchadzac vie moznosti svojho jazyka (prvy uvedeny postup), alebo ho vie iba pouzivat na urovni inych jazykov. Tj vie zakladne veci ako deklarovanie premennych, podmienky, cykly, ako vyzera trieda, ako funguje dedicnost, pristupove modifikatory, atd. Ale nevie taketo ficurky ktore ma ten ktory jazyk.

Nechcem ti tym pridavat na zlej nalade, dost dokaze zavazit aj stres, cize clovek v danej chvili nevie premyslat cisto a aj primitivna uloha mu moze robit problemy.

Ono, inak sa ani neda otestovat uchadzaca ako ze mu davas algoritmicke ulohy aby si videl ako rozmysla, a ci rozmysla alebo len skopiruje prve riesenie zo stack overflow, a taktiez aj otazky primerane odpracovanym rokom s tou ktorou technologiou, aby sa videlo ci sa v nej clovek nejak posuval, alebo to bolo cely cas v podstate len nejaka entry level pozicia, kde clovek v podstate iba stagnoval.
Mozno by som sa na chvilu (na 1-3 mesiace) vykaslal na hladanie si prace inde a zapracoval na algoritmizacii, a vedomostiach o jazyku/jazykoch ktore pouzivas. Pretoze inak obehas vsetky firmy v okoli, a akurat si urobis blbe meno.

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #26 kdy: 15. 02. 2022, 10:04:08 »
Neuraž se, ale pokud tam sedíš jako bábovička rozsolu, tak co čekáš?
Musíš tam přijít slušně oblečený a usmívat se, vzhled a vystupování je 50% úspěchu.

https://worknearyou.net/interview-tips/interview-tips-2/


Převezmi iniciativu a ukazuj, co jsi naprogramoval.
Nauč se vyhnout otázkám, směrovat rozhovor směrem, kterým chceš.
Je to jako obchodní jednání.
Slusne obleceny? To jsou nejaky 80-90ta leta? A nechces aby clovek k pocitacum chodil v bilem plasti? Ja vetsinou chodim na pohovory v kapsacich mezi obedem s nejakym vtipnym trickem ktere se tyka IT. Lide to oceni. Zakos pravdepodobne ne. Nicmene na navsteve u zakosu stejne clovek nosi neco proti ESD ci nejakou mistni uniformu aby bylo videt ze je managor/visitor ci jiny odpad.

Do podminek nastupu si davam ze nechci chodit ani v kvadru ani krychli. Pokud ano tak chci okamzite nechutny plat, prispevek na obleceni a sprchy v dosahu.

Jednou jsem tedy prisel v saku coz byla nahoda neb ten den jsem sel kamaradovi za svedka a k par zakosum na jednani taky, ale dalsi dny uz jako mistni - tj. trenky,tricko,klobouk,lehke boty a spousta kremu na opalovani.

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #27 kdy: 15. 02. 2022, 11:03:00 »
Tyhle nesmysly jsou jen filtr, jak protřídit uchazeče a ušetřit zdroje právě na odbornících, kteří dělají další kolo pohovoru. Na pohovory chodí extrémně moc lidí, kteří tam prostě nemají co dělat.

Je pak na firmě, jestli fitrovací test zvolí dobře nebo špatně. Osobně jsem zkoušel řadu různých testů a způsobů, jak udělat filtr automatický, aby ho HR mohlo samo vyhodnotit. Těmito testy nejvíce prochází lidé s VŠ, kteří jsou na podobné úlohy zvyklí, přitom to jsou často lidé bez praxe a je nutné je zaučit.

Paradoxní je, že většinu těhle úloh nedají ani senioři, ti se zase snaží být příliš přesní a pak se netrefí do primitivní odpovědi, kterou mají HR jako vzorovou.

Můžeš si načíst spoustu podobných testů a úloh, naučit se jejich řešení a doufat, že to chytneš a projdeš nebo hledat dál až narazíš na společnost, která nedělá tyhle divné filtry. 3 pohovory je málo, navštiv 20 pohovorů a pak udělej závěr. Za mě to zkoušej dál a nenech se odradit.

Kód: [Vybrat]
a += b
b = a - b
a  -= b

Tenhle kód je v JS na prohození hodnot vyloženě nefunkční a chybný. Co když hodnoty nebudou číselné nebo budou mít rozdílný datový typ?

Kód: [Vybrat]
[a,b]=[b,a]

Kód je často očekáván jako správné řešení, ale opět je nesprávné. Interně totiž proběhne alokace hned 4 registrů, počet instrukcí ani nezmiňuji.

Kód: [Vybrat]
var c = a
a = b
b = c

Naopak přímým prohozením dojde k použití pouze 3 registrů, kód na procesoru má mnohem méně instrukcí a objektivně poběžní daleko rychleji než předchozí fancy příklad, který je předkládán jako správné řešení.

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #28 kdy: 15. 02. 2022, 11:56:48 »
...

Zasa teoretizovat o tom ze co ak su premenne rozne datove typy je zcestne, lebo vacsina (normalnych) jazykov nepovoli zavolat metodu ktorej na vstup tlacim blbosti ktore tam nepatria. Automaticky sa ocakava ze bud vymienam rovnake datove typy, alebo nieco kompatibilne, tj do 32bit intu nevlozim 64bit int, inak pridem o hodnotu a este ju zo zmrsi.

To uz potom neni test logiky, ale test vychcanosti o tom ako nieco umyselne bugnut, a nieco take by som ocakaval skor na poziciu (pen)testera, kde ide o to odhalit chyby, kam patria aj neosetrene vstupy a nejak toho zneuzit.

« Poslední změna: 15. 02. 2022, 12:00:02 od kanoe22 »

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #29 kdy: 15. 02. 2022, 12:12:39 »
Zasa teoretizovat o tom ze co ak su premenne rozne datove typy je zcestne, lebo vacsina (normalnych) jazykov nepovoli zavolat metodu ktorej na vstup tlacim blbosti ktore tam nepatria. Automaticky sa ocakava ze bud vymienam rovnake datove typy, alebo nieco kompatibilne, tj do 32bit intu nevlozim 64bit int, inak pridem o hodnotu a este ju zo zmrsi.

To uz potom neni test logiky, ale test vychcanosti o tom ako nieco umyselne bugnut, a nieco take by som ocakaval skor na poziciu (pen)testera, kde ide o to odhalit chyby, kam patria aj neosetrene vstupy a nejak toho zneuzit.

Vlákno je o Reactu, tedy JS. Ani nemusí jít o jiný datový typ, ale třeba i klasický NaN, Infinity nebo null, které se může objevovat místo číselných hodnot. Varianta s a+=b, b-a,a-=b také nefunguje řetězci, resp. funguje pouze s čísly a ideálně celočíselnými čísly.

Nevzniká právě většina chyb tím, že máš nějaké automatické očekávání a v programu si je nezkontrololuješ? Vždy u řešení můžeš předložit i definiční podmínky, za kterých funguje. Tady bylo v zadání "jak prohodím dvě hodnoty bez použití třetí pomocné proměnné", o vstupních datových typech se nemluví, takže si je buď jako omezení stanovím nebo musím počítat s čímkoliv.