Pohovor u Yahoo

Školení, která pořádám

Nick Halstead na svém blogu zveřejnil otázky, které pokládá Yahoo programátorům, kteří se u něj ucházejí o práci a já přináším jejich překlad. Nahlížení do dokumentace nebo zkoušení kódu je samozřejmě nevhodné.

  1. Co z následujících příkazů nepřidá Johna do pole uživatelů?
    <?php
    $users[] = 'john';
    array_add($users, 'john');
    array_push($users, 'john');
    $users ||= 'john';
    ?>
    
  2. Jaký je rozdíl mezi funkcemi sort, asort a ksort? Za jakých okolností použijete každou z nich?
  3. Co vypíše následující kód do prohlížeče? Proč?
    <?php
    $num = 10;
    function multiply() {
        $num = $num * 10;
    }
    multiply();
    echo $num;
    ?>
    
  4. Jaký je rozdíl mezi referencí a běžnou proměnnou? Jak předáte proměnnou referencí a proč byste to chtěli udělat?
  5. Jaké funkce můžete použít pro přidání knihovního kódu do právě spuštěného skriptu?
  6. Jaký je rozdíl mezi foo() a @foo()?
  7. Jak ladíte PHP aplikace?
  8. Co dělá ===? Jaký je příklad něčeho, co vrátí true pro == ale ne pro ===?
  9. Jak deklarujete třídu myclass bez jakýchkoliv metod a vlastností?
  10. Jak vytvoříte objekt, který je instancí třídy myclass?
  11. Jak přistupujete a nastavujete vlastnosti třídy zevnitř třídy?
  12. Jaký je rozdíl mezi include a include_once? A include a require?
  13. Jakou funkci použijete pro přesměrování prohlížeče na novou stránku?
    <?php
    redir();
    header();
    location();
    redirect();
    ?>
    
  14. Jakou funkci můžete použít k otevření souboru pro čtení a psaní?
    <?php
    fget();
    file_open();
    fopen();
    open_file();
    ?>
    
  15. Jaký je rozdíl mezi mysql_fetch_row a mysql_fetch_array?
  16. Co dělá následující kód? Vysvětlete, co se v něm děje.
    <?php
    $date = '08/26/2003';
    print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)", '\\2/\\1/\\3', $date);
    ?>
    
  17. Když dostanete řádek textu v proměnné $string, jak byste napsali regulární výraz, který z něj odstraní HTML značky?
  18. Jaký je rozdíl mezi tím, jak rozlišuje Perl a PHP pole a asociativní pole?
  19. Jak můžete obejít bezstavovost protokolu HTTP s využitím PHP?
  20. Co dělá knihovna GD?
  21. Uveďte několik způsobů, jak vypsat blok HTML kódu v PHP.
  22. Je PHP lepší než Perl? Rozeberte.

Příští týden napíšu, jak bych odpovídal já.

Jakub Vrána, Výuka, 30.5.2007, diskuse: 77 (nové: 0)

Diskuse

Bednee:

Nezakladaji pobocku u nas? Ze bych se prihlasil ;). Az na ty otazky o Perlu (s kterym jsem nedelal) to neni moc slozite.

Antema:

Asi bych neprošel i když se mi víc než půlka otázek zdá dost lehká, jsou otázky, které vůbec netuším...

Ondra:

Poměrně jednoduché otázky. Až na Perl s kterým nemám zkušenosti. Nejvíc bych se asi zapotil uregulárních výrazů, ale to asi více lidí :)

ikona tiso:

Pekný test. Vyzeralo to so mnou celkom dobre, ale mám nejaké medzery...
Jakub: teším sa na Tvoje odpovede.

halogan:

S PHP již velice dlouho nedělám, ale i tak bych čekal mírně odlišné (= těžší) otázky. Nicméně u takovýchto jednodušších zase člověk dobře vidí jejich způsob přemýšlení. A co se týká regexpů zmíněných výše - ty mi přijdou jako to nejjednodušší :)

ikona dgx:

Nejtěžší je ta poslední otázka, netroufal bych si na ni před skupinkou zarytých fanoušků Perlu vůbec odpovědět :-)

Jinak 17. taky není úplně triviální, ostatní mi tak připadají.

ikona Jakub Vrána OpenID:

V Yahoo jsou pokud vím spíše fanoušci PHP.

Co se 17 týče, tak bys je myslím jednoduchým řešením a poukázáním na jeho nedokonalost vzhledem k větší složitosti problému myslím docela uspokojil.

qwe:

Odpověď na otázku 17 :-)

preg_replace('/^(.*)$/e', "strip_tags('$1')", $string);

ikona Jakub Vrána OpenID:

Ha ha :-). Ale zkus dosadit $string = '"'.

ikona dgx:

:-))

ronnie:

Hm, tak to je trochu moc jednoduché, ne?:-)

Před pár týdny jsem si hledal místo jako PHP programátor. Na jednom pohovoru mi taky dávali test, měl bych ho mít někde doma, tak pokud ho o víkendu najdu, tak ho sem vložím. Byl podstatně složitější.

peCan:

Z těch 22 otázek mi přijde 17 jednoduchých a těch zbylých 5 by asi rozhodly o tom, jestli by mě vzali či nikoliv. Perl neumím a tak si rád počkám na příští týden;-)

paranoiq:

22 je celkem zapeklitá a 17 není tak jednoduchá jak se zdá. ostatní se mi zdají lehké.

ikona Ivo Toman:

S php se bavím jen pár týdnů, ale myslím si, že na spoustu otázek bych dokázal správně odpovědět. Ale rozhodně bych si na pohovor netroufl :)

zvo:

Díky za překlad, těším se na tvé odpovědi.

Tomáš Kučera:

Moje programátorské znalosti jsou sice bídné, ale leccos z toho jsem věděl :) Polovina otázek je relativně jednoduchá.

Frodik:

Předpokládám, že tento test měl jediný účel a tím vyloučit úplné amatéry a poté následoval opravdový test :-) A podle toho co vím o přijímacím procesu ve společnostech podobných Yahoo, tak správné odpovědi na "programátorské" otázky rozhodují o přijetí asi tak z jedné třetiny, či poloviny.

ikona LLook:

V původním článku vidím, že jsou to "pre-interview" otázky. Takže na odpovědích závisí jenom to, jestli vás vůbec pozvou na pohovor. Asi aby odfiltrovali ty, kteří "trochu umí PHP"...

Krom toho, zdaleka nejdůležitější podle mě budou otázky 7, 11 a 19. Možná ještě 22, když se projevíte jako nekritický fanatik (PHP rulezzzz, Perl suxxxx), tak to asi nebude to nejlepší.

lacop:

no vedel som skoro vsetko (okrem Perlu), ale uvidime ci to aj bolo dobre :)

jan vrana:

No pro mne by byla naprosto znicujici otazka cislo 2.
Priznam se ze za 8. let denniho programovani v PHP jsem funkci  sort a jeji obdoby, snad ani nepouzil. Tudiz nevidim duvod proc si je pamatovat. 

Jencek:

Děkuji, že aspoň někdo. Programuju výhradně pro DB a tam si řadím pomocí SQL. Tyto funkce jsem v životě nepoužil.

ikona Jakub Vrána OpenID:

Já je použil třeba v případě, kdy mi část dat připluje z databáze, čas z webové služby a musím je seřadit podle různých kritérií.

piler:

Ja som dostal na jednom pohovore otazku: "Aky je rozdiel medzi CHAR a VARCHAR v databaze?". :))) Viete, aky je rozdiel?

ikona Jakub Vrána OpenID:

Základní rozdíl je ten, že char(20) uloží vždy 20 znaků (doplní mezerami), kdyžto varchar(20) uloží jen tolik znaků, kolik řetězec skutečně má. Ale třeba s implementací v MySQL by to vydalo na povídání na několik minut...

piler:

V MySQL: nedal by sa nacrtnut v kratkosti problem? Celkom ma to zaujima ;)

jan vrana:

CHAR je fixni rozmer pole zabira vzdy stejny pocet bajtu.
VARCHAR zabira nejmensi mozny pocet bajtu.

CHAR(10) = "HESLO     "
VARCHAR(10) = "HESLO"

Vyhodou VARCHAR je ze setri misto na disku.

V pripade ze mate pevnou delku zaznamu u CHAR, tak u 50te polozky vyte ze lezi na 50*10 bajtu souboru. Cily zpracovani tabulek s fixnimy datovymi tipy by melo byt rychlejsi.

U mysql je nutno davat pozor na to ze pokud se v  tabulce objevi jedina polozka dinamicka prevede vsechny ostatni na dinamicke.

ikona Jakub Vrána OpenID:

VARCHAR místo nutně šetřit nemusí, např. hash s délkou 32 znaků je úspornější uložit do CHAR. S implementací v MySQL to je ještě trošku složitější - viz uvedené odkazy - jednak záleží na verzi MySQL, jednak konverze probíhají v závislosti na délce větší nebo menší než tři znaky na CHAR i VARCHAR a jednak je potřeba dát pozor na práci s koncovými mezerami (zase v závislosti na verzi).

Jan Vrana:

No jo jeden byte ktery urcuje delku zaznamu :)

Takze VARCHAR setri misto v pouze v pripade zaznamu jehoz delka-1byte < velikost pouziteho charu.

takze pro ulozeni polozek do jednoho sloupce ktere maji 3 nebo 4 znaky nema smysl pouzit varchar ani v pripade ze 99% polozek ma 3 znaky.

ikona Jakub Vrána OpenID:

Zase pozor na přesnost - od MySQL 5.0.3 může být délka uložena do dvou bajtů...

ikona Jakub Vrána OpenID:

Viz http://dev.mysql.com/doc/refman/5.0/en/char.html a http://dev.mysql.com/doc/refman/5.0/en/sil…-changes.html.

Zero:

Ja som presne taku istu otazku dostal na statniciach... profak co mi ju polozil, mal problem aby nevybuchol smiechom... XD

Suchý:

Tak ta otázka s Perlem je asi nejjednoduší:
Odpoved: Ne.
Rozebrat? Tak namátkou http://tnx.nl/php, nebo už jenom otázka č. 2.

Ondra:

Tak to si nejsem jisty. Ta otazka je nepochybne zamerne polozena takhle jednoduse az primitivne, protoze odpoved na ni zas tak  jednoducha neni. Vtip te otazky je prave v tom, ze se pta na neco, co nema presnou definici a na co je treba pohlizet z mnoha ruznych uhlu.
Pokud tvrdis, ze Perl je lepsi, pak lze snadno kontrovat otazkou, proc se - ve srovnani s PHP - jiz temer prestal pouzivat pro dynamicke weby. Tady se zjevne projevily urcite prednosti PHP, ktere Perl postrada.

Bilbo:

Asi tak. Jak na co. Na spoustu veci je perl lepsi (napr. zpracovani textu), na neco je zas lepsi PHP (treba ty weby ...). V obojim jde udelat vsechno, otazkou je jen jak moc slozite :)

hexx:

netrvdil by som ze sa prestal pouzivat, 20 straniek s najvyssim traffic su postavene ne perl, len tak mimochodom.

ikona Jakub Vrána OpenID:

Můžeš je vyjmenovat nebo poskytnout alespoň odkaz na zdroj této informace?

ikona MiSHAK:

Teďka uvažuji o smyslu výšky, když tohle znám nějaký ten pátek...

ikona Jakub Vrána OpenID:

Vysoká ti dá něco jiného - tedy alespoň mě dala především přehled o algoritmech, složitosti, datových strukturách, ... Praxi je lepší hledat v praxi.

Ondra:

No jestli nemas vetsi ambice nez se stat PHP programatorem, tak pro tebe VS asi opravdu smysl nema. Jestli me VS neco naucila, tak to je schopnost divat se na veci v mnohem vetsi siri nez jen pohledem bezneho programatora (podle me zkusenosti casto dost omezenym).
Praxe je to, co cloveka uci hlubokym znalostem, bez nichz by ani nemohl svou praci rozumne vykonavat, siroke znalosti je ale lepsi - a hlavne snazsi - ziskavat spise studiem.

ikona finc:

jj, je to pekne :)
Vzdycky mi prislo zbytecne se ucit nektere veci nazpamet, napr. otazka cislo 2 je vylozene zalezitost manualu. Jak casto metodu sort pouziji?
Jinak otazku cislo 8 povazuji za naprosto zasadni.
Bohuzel, tento test nijak neukaze, jak programator navrhuje kod, coz ve finale stejne byva zasadnejsi (alespon u vetsich projektu), nez zda pouzije "mysql_fetch_row ci mysql_fetch_array" :)

P.S.: Asi jsem jedinej PHP lamer, ale na spoustu otazek hned opoved proste nevim. :) Jeste, ze do Yahoo nepodavam prihlasku a mam k dispozici google a manual :)

A k te 22. Proc je PHP lepsi nez Perl? Protoze Perl je jen "sum na lince" :)

ivan_d:

to finc: 'otazka cislo 2 je vylozene zalezitost manualu' - přesně to mě napadlo. Mimochodem ksort a asort jsem ještě nikdy nepotřeboval (možná jsem jen neviděl možnost výhodně využít - asociativní pole a pole vnímám odděleně a používám každé pro jiné účely - nemá někdo nějaký případ?).

Celý ten test je pro mě trochu zvláštní a zajímalo by mě, jak to hodnotí - některé by pro mě měli mnohem větší váhu (7) než jiné (15).

Pavel:

to finc: na mnoho otázek také nevím hned odpověď, ale nejsem programátor, jen si umím zbastlit nějaký ten kod. Pro skutečnou práci by to chtělo více treningu :)

ikona D1ce:

Až na pár výjimek mi otázky nepřipadají těžké. Sortovací fce jsem ve svých počinech také nikdy nepoužil. Kdybych neplodil na fórech, nikdy bych si je nevyzkoušel.

Jinak by mě zajímalo, jaké je minimum pro úspěšné splnění testu.

Já bych zkoušel zájemce z používání gůgla, manuálu, fóra a rapid-application-pasting(RAP) ;) .

ikona Jakub Vrána OpenID:

Řekl bych, že minimum pro splnění testu (tedy pro připuštění ke skutečnému pohovoru) je zodpovězení všech otázek - ony jsou skutečně dost základní. U některých (např. 2, 17) asi nebude nutná zcela přesná odpověď, ale třeba vědět, že v PHP jsou funkce na třídění pole jak podle klíče, tak podle hodnoty, tak se zachováním indexů by to vědět chtělo.

Navíc to není nějaký normovaný test, zveřejnil to kamarád jednoho uchazeče, takže otázky o Perlu tam jsou možná jen proto, že uchazeč uvedl, že dřív pracoval v Perlu.

Bilbo:

Pokud se neco taha z databaze, tak rovnou pouziju ".. order by ...", takze sort primo v PHP se asi tak moc neuzije...

ikona Jakub:

Po přečtení některých otázek jsem si uvědomil, že asi nechci pracovat v Jahů :)

ikona Jarda Jirava:

Ač v PHP téměř nedělám, otázky mě zajímaly. Přečetl jsem jich několik a věděl jsem, že tohle by pro mě skutečně nebylo. Nejspíše bych dobrovolně odešel, nikoliv však díky neznalosti odpovědí, ale spíše z důvodu formy položených otázek, které mi připadají zaměřené jen na "bušiče" kódu.
Přitom při pohovoru mě více zajímá to, jak uchazeč dokáže uvažovat, jakým způsobem se dobere cíle a řeší zadaný úkol, než to, jestli zná syntax konkrétní metody.
Je možné, že pro firmu jakou je yahoo se tento postup osvědčil, nebo jenom shánějí již vzpomínané "bušiče"(?).
Díky

ikona Jakub Vrána OpenID:

Jak je zmíněno v originálním článku a několikrát i zde v diskusi, jde pouze o předpohovorový test - síto na lidi s alespoň základními znalostmi. K Yahoo se hlásí tolik lidí, že nepotřebují na pozici PHP programátora někoho bez základních znalostí, i kdyby byl v jiných oblastech hodně dobrý. A jak jsem psal - já osobně bych nepožadoval přesnou odpověď na všechny otázky, ale alespoň základní povědomí o oblasti.

ikona Jarda Jirava:

Je celkem škoda, že není uvedeno, kolik % lidí se tímto sítem vlastně proseje. Zkusím si malinko zaspekulovat, snad mi bude odpuštěno.
Když vím, že jdu do firmy na pozici PHP programátora, nejspíše PHP budu alespoň trošku znát (no nátura každého je trošku jiná). Začátečník si navíc spíše ještě něco přečte a těch metod není zase tolik, aby si jejich význam nezapamatoval. Ti zkušení a zdatní naopak mohou mít problémy, protože používají nějakou nadstavbu, své funkce, které obalují rutinní činnosti, tudíž na takovýchto otázkách mohou propadnout.
Alespoň z mého pohledu by bylo vhodnější se ptát třeba nějak takto:
Jaké jsou začátečnické chyby v PHP. Jaké jsou nejčastější chyby a jak jste se jich vyvaroval/snažil se jim předejít. Pokud chcete udělat to a to, jaký postup použijete/se vám zdá optimální.
Jasně, není to už jenom o tom, přiřadit jednotlivým odpovědím váhu a body a ty poté sečíst a mám lidi nad a pod čarou, mohu tak však lépe prosít začátečníka od zkušeného/pokročilého.
Vše se však odvíjí od první věty, jaká je skutečná úspěšnost  a pokud to takto dělají, nejspíše bude hodně vysoká - což jim nezávidím a vycházejíc z mé spekulace, mohou přicházet o zkušené lidi.
Díky

ikona error414:

takze pokud jsem neznal co delaji funkce sort, ksor, asort. Jen jsem vedel ze radi pole , tak mam nedostatky v zakladech PHP?

ikona Jakub Vrána OpenID:

Vždyť to je napsané přímo v komentáři, na který reaguješ - osobně bych nepožadoval 100% správnou odpověď na všechny otázky. Kdybys mi třeba řekl, že asort by mohlo být možná k tomu, že bude pole řadit voláním uživatelsky definované funkce, tak bych tě poslal dál. Ale mít základní pojem o tom, na co všechno má PHP zabudované funkce, patří myslím k základům.

ikona mj41:

18) Jaký je rozdíl mezi tím, jak rozlišuje Perl a PHP pole a asociativní pole?

V Perlu je pole a asociativní pole (hash) něco úplně jiného. Z pohledu implementace jsou to rovněž zcela rozdílné věci. V Perlu na první pohled poznáte zda se jedná o pole nebo hash.

Perl 5:
my %veci = (
  'kolo' => 'moje nová Merida',
  'auto' => 'Honda'
);
my @veci = ( 'kolo', 'auto' );
push @veci, 'kolo';
@veci[3] = 'auto';
print $veci[2]; print $veci{'kolo'};

Perl 6:
print @veci[2]; print %veci<kolo>;

Druhý zásadní rozdíl je že hash v PHP si pamatuje pořadí vkládání prvků. Tohle je občas výhoda, protože interátory  hash defaultně prochází v tomto pořadí. U Perlu si musíte vytvořit pomocné pole. Na druhou stranu jsem zatím nepřišel na to jak toto pořadí v PHP změnit.

Něco do pranice: Předpokládám, že Perl má rychlejší implementaci jak polí tak hashů :-).

ivan_d:

Rozdíl mezi polem a asociativním polem dělá i například python: ['prvni', 'druhe']  {'prvni': 'a', 'druhe':'b'}. Bez nějakých hádek a cachrání se: už to někdo s výhodou využil?

ikona dgx:

Už několikrát se mi hodilo, že v PHP lze "pojmenovat" prvky pole (tj. zaměnit pole a hash), párkrát bych ocenil existenci funkce, která by rozhodla, zda je v proměnné klasické pole nebo hash, a párkrát jsem také narazil na případ, kdy program chyboval na tom, že pořadí prvků v poli nemusí být setříděné podle indexu.

Pokud si je toho člověk vědom, může použít funkci array_values nebo ksort a případným problémům se vyhnout. Pak už zůstavají víceméně jen výhody.

ivan_d:

něco jako $a['dulezite'] = $a[3] nebo jsem mimo? Je možný drobný příklad?

ikona dgx:

Ano, třeba:

<?php

$arr
= array(1, 8, 9, 31, 12, 'var' => 17, 64, 9);

echo
array_sum($arr);

$arr['var'] = 22; // změním konkrétní prvek

echo array_sum($arr);
?>

I když technicky je to obdoba

<?php
define
('VAR', 5);
$arr[VAR] = 22;
?>

ivan_d:

Nějak mi uniká výhoda. Někde musím rozhodnout, který prvek bude onen významný - buď při sestavování pole nebo při hledání prvku. Osobně bych se přiklonil k té variantě s kontantou (nebo něčím podobným).  Asi by to chtělo širší kontext (reálný problém) - ale už teď jsme asi offtopic...

ikona dgx:

To byla čistě odpověď na otázku "už to někdo s výhodou využil?" - ano, už jo :-)

ikona mj41:

Využil? No co takhle rychlost a paměťové nároky. Pokud tomu rozumím dobře tak PHP skutečné pole neumí. Umí jen hashe (asociativní pole, slovníky). Pak rychlost hledání podle indexu není jako u skutečného pole O(1), ale O(lg n) až O(n).

Jak se tedy pracuje s velkými poli (miliony prvnků) v PHP?

Ještě připojím
http://spyced.blogspot.com/2005/06/why-php-sucks.html

ikona Jakub Vrána OpenID:

Rychlost vyhledávání v hash tabulce je v průměrném případě O(1), pouze v nejhorším případě to je O(n) a ten může nastat jen při použití špatné hashovací funkce nebo záměrném hledání kolizních indexů.

Co se odkazovaného článku týče, jeho autorovi bohužel chybí informace o tom, jak PHP vevnitř funguje. Např. kopírování i velkých struktur je v PHP velice rychlá operace (když už jsme u té složitosti, tak je to O(1)) - viz např. http://www.dgx.cz/trine/item/php-puvab-optimalizace-rychlosti. V některých věcech má nicméně pravdu.

ikona mj41:

Tohle jsem opravdu napsal špatně :-(. Viz.
http://en.wikipedia.org/wiki/Balanced_tree
, pokud PHP používá opravdu Self-balancing binary search tree.

Já myslel, že ten případ nastane vždy pro velký počet záznamů, protože zde vždy vznikají kolizní indexy.

Každopádně je hash vždy pomalejší než klasické pole, ale možná mě zase jen klame intuice :-).

ikona Jakub Vrána OpenID:

PHP používá hash tabulky: http://en.wikipedia.org/wiki/Hash_table, http://cvs.php.net/ZendEngine2/zend_hash.c?view=markup

Pomalejší to je vždy minimálně o to, že se u každého prvku musí spočítat jeho hash.

Kyosuke:

Když chci seřazené mapování, použiju strom, ne?

ikona mj41:

22) Je PHP lepší než Perl? Rozeberte.

PHP je neskutečný bastl. Nikdy jsem nepochopil jak se mu mohlo povést takhle se rozšířit. Ale v Perlu už dělám hrozně dlouho, takže nedokážu posoudit jeho nevýhody. Možná práce s referencemi, ta mi dala občas zabrat a v některých případech defaultní chování (nutnost použít dereference, správný kontext). Asi to bylo, ale hlavně jednoduchostí použití na webu, když Perl zaspal a mod_perl byl v plenkách. Fakt už něvjym.

PHP mě živí nějaký ten pátek a občas se z toho probouzím zpocený nebo v záchvatu vzteku buším hlavou do zdi :-).

Teď vážně. Co vám při přechodu z Perlu bude vadit dnes a denně?
* nemožnost "definovat" proměnné (use strict; my $moje_p;)
* jeden velký jmenný prostor
* static (lexical) scoping
* občas další skřeky a seky aneb mé staré poznámky (tuším php 4.3)
<?php

$record_set
->MoveNext;
# takhle to nepůjde, chybí ()

$str = 0;
if (
$str == "a" ) echo "rovnaji se\n";
# zlaté == a eq v Perlu

if ( !rs ) echo 'aaa';
# php neřve

# existují fukce uc a ucfirst, ale jen lc, lcfirst hledáte zbytečně

# Tohle taky ujde. K čemu je operátor % dobrý?
$rodne_cislo_base = '8010163810';

$rodne_cislo = $rodne_cislo_base;
t( "%:" . ($rodne_cislo % 11) ); # %:1
t( 'fmod:' . fmod($rodno_cislo, 11) ); # fmod:0

$rodne_cislo = (float)$rodne_cislo_base;
t( "%:" . ($rodne_cislo % 11) ); # %:-8
t( "fmod:" . fmod($rodne_cislo, 11) ); # % fmod:0

?>
* nic neříkajíci error hlášky
* cpan.org
* http://tnx.nl/php
* kvalita kódu, nejen toto: http://www.internetnews.com/stats/article.php/3589361

ikona finc:

Kazdy, kdo zacne porovnavat dva jazyky mezi sebou, nalezne mezery mezi jednotlivymi jazyky. Me treba vadila absence typove kontroly, tak jsem utekl k Jave. A ejhle objevil jsem nove moznosti a nove prekazky, ktere by me v PHP nepotkali.
Pritom porovnani je to vzdy, az prilis, subjektivni nazor a pak z toho vznikaji flamewary :)

Jinak jeste k tomu testu. Asi bych vazne u tohoto pohorel. Nektere veci jsou az prilis trivialni, nektere prilis vazane na PHP. To si myslim, ze je ta nejvetsi chyba. Pokud najmu programatora, najmu cloveka, ktery se bude schopen naucit programovat i v jinych jazycich a proto by me spise zajimala jeho analyticka schopnost, to jak by resil dane problemy.
U yahoo je to asi jedno, skutecne jim nejspise jde jen o PHP programatora, ktereho, pokud prejdou na jinou technologii nejspise propusti :)
Navic v dobe, kdy je tolik v mode pouziti frameworku a predpokladam, ze i yahoo nejaky ten svuj ma, tak je vetsina otazek naprosto k nicemu :) Vubec nevim, jestli ten clovek vi, co je OOP, coz je pro vetsi projekt mnohem dulezitejsi. Mozna pri tom prvnim vyberu vyhodi schopne a nadejne programatory a necha si bandu lameru, co se uci PHP manual po nocich :)

ikona Jakub Vrána OpenID:

Ještě jednou napíšu, že se jedná pouze o test pro připuštění ke skutečnému pohovoru, kde se těm tématům, o kterých píšeš, jistě věnují. Řeknu to takhle: proč by Yahoo mělo na projekt v PHP brát někoho bez základních znalostí PHP, když i mezi tím zbytkem je dost vhodných uchazečů? A ještě jednou napíšu, že "základní znalost PHP" nemusí znamenat splnění testu na 100 %.

ikona D1ce:

Jen doplnění pro ty, které výsledky operátoru % také zmátly. Přestože jsem žádnou podobnou zmínku přímo v manuálu nenašel, komentátoři chování % přisuzují tomu, že správně pracuje jen s datovým typem int .

Ondra:

Jo, hochu, to ze PHP dela jakesi implicitni konverze mezi typy, mozna oceni zacatecnik, ale pri poradnem programovani je to cesta do pekel. Pouzivat napr. aritmeticke operatory na retezec proste nedava viditelne zrejmy vysledek, takze je v kazdem pripade vhodnejsi se tomu vyhnout a provadet explicitni pretypovani.
V PHP se da psat i dobry kod, ale musi se to umet. Spatny kod se da napsat v libovolnem jazyce, a svalovat to na ten jazyk samotny neni uplne fer - byt v pripade PHP uznavam, ze to nekterymi svymi vlastnostmi az nezdrave usnadnuje :-)

ikona Jakub Vrána OpenID:

Dynamické typování v PHP v podstatě musí být proto, že všechna data od uživatele přijdou jako řetězce. V tomto kontextu se automatické přetypování dá také smysluplně využít ($_GET["vek"] < 18).

SendiMyrkr:

A opravdu to přetypuje tak, ze lze pak použít následující?:

if($_GET["vek"] === 18){
        //neco...
}

Já osobně používám u všeho u čeho vyžaduji číslo zápis:
$vek=(int)$_GET["vek"];

ikona Jakub Vrána OpenID:

Porovnání přetypuje hodnotu jen pro tu konkrétní operaci, proměnná zůstane samozřejmě nedotčena.

ikona mj41:

možná ještě toto:
http://shootout.alioth.debian.org/debian/…&lang=php

Llaik:

Obávám se, že tento test je úplně naprd :)

Ne opravdu, je to na základní přehled, ale po vyhodnocení vůbec nepoznáte, zda má uchazeč v hlavě mozek, nebo knížku o PHP.

ikona Jakub Vrána OpenID:

Přítomnost mozku v hlavě se zjistí na pohovoru, ke kterému je splnění tohoto testu teprve vstupenkou. Zaznělo to tu už několikrát.

ikona Ondra:

Bože muj. To je jak na písemce ve škole.

K čemu mám vědět rozdíly mezi sort, asort a ksort, když je to napsané v dokumentaci? Stejně ve výsledku mám úlohu a hledám řešení, a i kdyby do PHP nacpali třeba bflmsort_cities_by_weather(), tak nepokryje všechny problémy.

Reference - snad už tenhle paskvil konečně PHP někdy opustí a spolehne se na reference na objekty jako Java, kterou PHP beztak kopíruje.

17 - tak to je konec :) Pokud bych chtěl z HTML dostat značky, tak bych asi nešel do PCRE, ale do HMTL parseru.

ikona Ondra:

Osobně bych na základě tohoto testu Nicka Halsteada nepřijal :-) Určitě ne jako personalistu.

Koho bych přijal, je Bruce Eckel:
http://www.artima.com/weblogs/viewpost.jsp?thread=228097

David:

Nabízím práci prom PHP programátora?
Někdo zájem?
david@ksearch.cz

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.