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ěď #30 kdy: 15. 02. 2022, 13:33:08 »
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.
Hele, o počtu registrů nemá cenu ani uvažovat pokud neznáme přesně jazyk, cílovou instrukční sadu a možná i verzi překladače. A to se ten kód musí aspoň JITovat, jinak se o registrech nedá uvažovat vůbec.

Tohle je buď test, jak zareaguješ na WTF situaci, nebo prefabrikovaná otázka na kterou očekávají prefabrikovanou odpověď.


BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #31 kdy: 15. 02. 2022, 13:45:50 »
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í.
Neškodila by trochu důvěry v překladač/runtime?

Prvním řešením říkám co chci dělat. Druhým řešením dělá práci za mašinu. Je to sice optimální a správně, ale víc se ztrácí myšlenka.


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

Pekne ale nepouzitelne ak hrozi pretecenie...

v javascriptu je spravne reseni to vase, ale

v javascriptu preteceni nenastane, maximalne zaokrouhlovaci chyba

v C tohle normalne projde, podle me to funguje i s pointery

v pythonu jsou cela cisla neomezena, ale stejne jako v js jde a, b = b, a

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #33 kdy: 15. 02. 2022, 14:14:47 »
Co když hodnoty nebudou číselné nebo budou mít rozdílný datový typ?

zase typy..... minus u ne-ciselnych typu neprojde pres eslint.

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #34 kdy: 15. 02. 2022, 14:17:52 »
Kód: [Vybrat]
var c = a
a = b
b = c

ja bych tohle povazoval asi za nejhorsi moznou odpoved na otazku "jak prohodím dvě hodnoty bez použití třetí pomocné proměnné"


Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #35 kdy: 15. 02. 2022, 14:19:12 »
Tenhle kód je v JS na prohození hodnot vyloženě nefunkční a chybný.

Ano, v JS se i jednoduchý věci dělají složitě a člověk si musí pořád dávat pozor na klacky, co mu ten jazyk háže pod nohy, ale o JS autor neřekl ani slovo.

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.

Líbí se mi, jak z JS hned přeskakuješ na registry... Takže každej překladač každýho jazyka interně udělá alokaci 4 registrů? Skoro bych se vasdil, že ne...

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í.

Ano, tohle bude správný řešení otázky "jak prohodím dvě hodnoty bez použití třetí pomocné proměnné" :-)

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #36 kdy: 15. 02. 2022, 14:28:11 »
Neškodila by trochu důvěry v překladač/runtime?

Prvním řešením říkám co chci dělat. Druhým řešením dělá práci za mašinu. Je to sice optimální a správně, ale víc se ztrácí myšlenka.


Ale přece i ostatní řešení (přičítání/odečítání od A.P.Hacker nebo XOR) dělají práci za překladač a fungují jen na základě nízkoúrovňových znalostí, často jsou v tomhle typu příkladu považovány za správnou odpověď. Stejně tak použití destructuring assignment pro prohození hodnot je spíše vedlejší efekt téhle funkce. Zadání, které explicitně mluví o "bez použití proměnné" odkazuje na to, že se chci vyhnout zbytečné alokaci a v prostředí JS vlastně vyžaduje použití daleko náročnější konstrukce.

Tenhle přiklad totiž potrádá ve vysokých jazycích to kouzlo a důvod, proč původně vznikl, přetrval jen jako hořká pachuť a vede právě k absurdním řešením s hůře čitelnou syntaxí.


zase typy..... minus u ne-ciselnych typu neprojde pres eslint.

S jakým nastavením eslint? Mně to prochází. Pokud potřebuješ číslo, ok, a = 1, b = 0/0 obsahuje číselné typy a také plodí nesmyslné výsledky a nikoliv žádané prohození hodnot.

ja bych tohle povazoval asi za nejhorsi moznou odpoved na otazku "jak prohodím dvě hodnoty bez použití třetí pomocné proměnné"

Také jsem to jako řešení neprezentoval, jen jsem tenhle přímý konstrukt použil pro porovnání efektivity. Nic víc, nic míň.



Líbí se mi, jak z JS hned přeskakuješ na registry... Takže každej překladač každýho jazyka interně udělá alokaci 4 registrů? Skoro bych se vasdil, že ne...

Ne, jsem pořád v JS, myslel jsem tím Lda, tj. accumulator register jak to pojmenovává V8 interně.


Ano, tohle bude správný řešení otázky "jak prohodím dvě hodnoty bez použití třetí pomocné proměnné" :-)

Kde píšu, že to je správné řešení? Jen jsem zmiňoval, že tahle varianta je jako rychlejší než správné řešení.

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #37 kdy: 15. 02. 2022, 14:40:16 »
Varianta s a+=b, b-a,a-=b také nefunguje řetězci

S jakým nastavením eslint?

v pripade odecitani retezcu s jakymkoliv. Tazatel nikde nepsal, ze to ma byt v JS, moje reseni je funkcni v C. Ve vyssich jazycich to jde primo, jak psali jini. Resit vyuziti registru v JS je nesmysl, jak psali jini.
« Poslední změna: 15. 02. 2022, 14:43:45 od A.P.Hacker »

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #38 kdy: 15. 02. 2022, 14:50:23 »
_Tomáš_ ze ty si jeden z tich ktori davaju takeho pi.oviny na pohovoroch a vyhodis kazdeho kto sa odmieta dlubat v tom hov.e dlhsie/hlbsie akoby sa ti pacilo?

O chvilu tu budes riesit energeticku uroven a vyjde nam ze najmensiu spotrebu elektriny bude mat clovek s ceruzkou, pretoze spocita na papier to co pc ale s (nerealne) nulovou spotrebou elektriny.

Ach. Tento priklad je na 99% o integeroch. To 1percento je na pripady kedy sa ta opytaju na floaty (resp ine floating point formaty). A tam uz ide o nieco ine, tam skusaju ci vies ze tieto cisla nie su vzdy presne to co tam zapises, pretoze tam dochadza k zaokruhlovaniu. Tj napr 1.5 bude realne v pameti reprezentovane napr pomocou 1.50000000126.
« Poslední změna: 15. 02. 2022, 14:56:02 od kanoe22 »

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

v pripade odecitani retezcu s jakymkoliv. Tazatel nikde nepsal, ze to ma byt v JS, moje reseni je funkcni v C. Ve vyssich jazycich to jde primo, jak psali jini. Resit vyuziti registru v JS je nesmysl, jak psali jini.

Frontend programátor v Reactu, chce změnit to, že dělá eshopy na sto způsobů jinak. Vychází mi z toho pořád ten JS. Ok, v PHP to je v bledě modrém. Tvoje řešení v C je v pořádu, ale nijak mi tady nevyplývá, že by tazatel se hlásil na programování v C.

_Tomáš_ ze ty si jeden z tich ktori davaju takeho pi.oviny na pohovoroch a vyhodis kazdeho kto sa odmieta dlubat v tom hov.e dlhsie/hlbsie akoby sa ti pacilo?


Odpusť si prosím tenhle útočný tón.

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #40 kdy: 15. 02. 2022, 15:29:58 »
ale nijak mi tady nevyplývá, že by tazatel se hlásil na programování v C.

ve vyssich jazycich je to tak trivialni, ze nema smysl se na to ptat.

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #41 kdy: 15. 02. 2022, 16:27:20 »

No, vo svojom brainstormingu mate niekolko zasadnych nedostatkov:

  • ignorujete dolezite fakty zo zadania - dotazovatel na pohovore uvadzal 4 roky praxe ako react frontend developer
  • nedochadzaju vam suvislosti - ze tie otazky budu s ucelom overit tie 4 roky praxe v konkretnom jazyku
  • neefektivita - miesto riesenia zadania, sklzavate do role optimalizatoru jazyka, rozporujete zadanie, celkovo riesenie zbytocne komplikujete

Byt vas temleader, tak v nasledujucom kroku uz by som vas temleader nebol...

Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #42 kdy: 15. 02. 2022, 16:29:03 »
Je možné, že děláte špatně již úvodní představení? Co byste chtěl dělat?

Myslím, že by bylo lepší do průvodního dopisu přímo napsat i co chcete dělat. To by mohlo odfiltrovat dost marných pohovorů. Pokud Vám to nejde, tak zkuste využít služeb firem, které sprostředkují práci. Někteří jen nepřehazují emaily a dokázali by Vám i poradit.

Pracuji už pár let v menší firmičce jako frontend programátor - (převážně React). Práce mě přestává bavit a rád bych zkusil i něco jiného než eshop na 100 způsobů a tak jsem začal chodit po pohovorech. Bohužel jsem tvrdě narazil, zatím ve všech firmách po mě chtěli nějaké skoro slovní úlohy a logické uvažování na kterém jsem shořel jako papír. Já nemám problém si se zákazníkem sednout, navrhnout řešení eshopu, to poté naprogramovat i s administrací. Takových projektů mám za sebou několik. Všechno to byly jen CRUD aplikace. Ale mám obrovský problém, když na mě začnou házet otázky typu jak prohodím dvě hodnoty bez použití třetí pomocné proměnné nebo jak zjistím zda se dva obdélníky překrývají. Otázky tohoto typu se pořád opakují. Když se jich slušně zeptám k čemu jim moje odpověď bude tak z nich jen vypadne že to je pouze test logického a algoritmického myšlení. Zatím jsem takto vyletěl od tří pohovorů, mě to touhle logickou nebo jak říkají algoritmickou cestou nikdy moc nemyslelo. Pokud jsem se v práci kdy s takovým problémem setkal, tak mi stačil strejda Google a na zkopírovaný kód si napsat testy. 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. Existují nějaké tipy / triky jak tento logický / algoritmický styl myšlení vylepšit?

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


  • ignorujete dolezite fakty zo zadania - dotazovatel na pohovore uvadzal 4 roky praxe ako react frontend developer
  • nedochadzaju vam suvislosti - ze tie otazky budu s ucelom overit tie 4 roky praxe v konkretnom jazyku
  • neefektivita - miesto riesenia zadania, sklzavate do role optimalizatoru jazyka, rozporujete zadanie, celkovo riesenie zbytocne komplikujete

Byt vas temleader, tak v nasledujucom kroku uz by som vas temleader nebol...

V čem ignoruji fakta ze zadání? Frontend a React je dominanout JS a případně TS, právě na to jsem se zaměřil.

A myslíš, že 4 roky praxe v Reactu se prověřují akademickým příkladem na prohození hodnot dvou proměnných? To je konstrukce, kterou najít na frontendu je hodně raritní.

Nepřišel jsem řešit zadání, to ať si řeší, ten kdo ho dostal. Uvedl jsem jen kuriozitu a rozpory těhle "správných" řešení, které se tady objevily, v jazyku jako je JS a že vlastně se tím nic moc neověřuje, jen se papouškuje desítky let stejná úloha (tady si třeba vzpomínám na zajímavost, že swapování přes XOR fungovalo dobře na Z80, ale na 68x již nikoliv, tam se to musel řešit špešl instrukcí). Tohle patří k základním technikám při optimalizaci a i dnes se to použije pro stále rostoucí trh jednočipů a IoT. Ale dávat to jako úlohu pro programátora na frontendu, když v těch jazykách to nemá žádný smysl?

Naštěstí žádného team leadera nemám, takže děkuji, ale tvoji nabídku, abys mi ho dělal nevyužiji.

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Tipy a triky na zlepšení logického myšlení u pohovorů
« Odpověď #44 kdy: 15. 02. 2022, 17:35:28 »
Neškodila by trochu důvěry v překladač/runtime?

Prvním řešením říkám co chci dělat. Druhým řešením dělá práci za mašinu. Je to sice optimální a správně, ale víc se ztrácí myšlenka.


Ale přece i ostatní řešení (přičítání/odečítání od A.P.Hacker nebo XOR) dělají práci za překladač a fungují jen na základě nízkoúrovňových znalostí, často jsou v tomhle typu příkladu považovány za správnou odpověď.
Nevím, zda jsou považovány, ale já je ani nezahrnul do reakce.

Stejně tak použití destructuring assignment pro prohození hodnot je spíše vedlejší efekt téhle funkce.
Já bych to tak neviděl.


Pokud budeme předpokládat, že se opravdu nejedná o nějaký IQ test na papírku, ale že ti co to zadání pokládají opravdu chtějí o uchazečovi něco zjisit, tak bych odpovídal takto:

"Ekonomicky je to úloha, která nestojí za námahu." - schopnost rozlišit užitečné, od zajímavého.

"Jo, někde jsem četl takovej vtipnej postup to nejdřív odečíst, a pak přičíst. Samozřejmě to funguje jen u čísel, i u reálných blbě. Taky je to dost matoucí. Nedělal bych to." - Obecný přehled, znalost limit, vědomí si psychologie programování.

"V modernějších jazycích se na to dá skvěle použít destructuring assignment. To je asi nejblíž zadání, řekl bych." - znalost jazyků a jejich možností.

"Hodilo se vám to někdy? Jak byste to dělai vy?" - sociální skill.