.net Job Interview




Mám pohovor zítra obchodě .NET. Za posledních několik let jsem se vyvíjí v jiných než .NET jazyky a přijít na to je asi dobrý nápad oprášit, co je v pohodě a nové ve světě .NET. Četl jsem o LINQ a WPF ale ty jsou více technologií než trendů. Co jiného bych měl podívat na?


Četl věci jako:


* <http://msdn.microsoft.com/en-us/library/bb332048.aspx>
* <http://msdn.microsoft.com/en-us/library/ms754130.aspx>


**Upravit**


Jak se ukázalo tento rozhovor byl na vysoké úrovni a my jsme se opravdu dostat se do mnohem což bylo více než .NET specifické generik.
Vem si to s zrnko soli, ale podle mé zkušenosti, LINQ a WPF jsou stále v říši „Jo, chtěli bychom se dostat do toho jednoho dne“.


Většina obchodů jsou stále na VS2005 a .NET 2.0, takže bych chtěl, aby se ujistil jsem byl až do rychlosti na základní vybavení:


* generik
* ADO.NET
* WinForms / WebForms závislosti


A tak dále.
V současné době jsou v kurzu SQL dartabáze. Takže pokud se chceš uplatnit, tak MS-SQL, Interbase, ORACLE, popř. nějaké ty internetové jako např. MySQL, PostgreeSQL apod. Každá databáze má vlastní programovací jazyk pro uložené procedury, vlastní datové typy apod.Program, ve kterém budeš vyvíjet soft je opět něco jiného. Ten většinou je univerzální a umí přistupovat k jakékoliv databázi.V současné době, pokud bych začínal, tak bych se orientoval směrem .NET a C#. <p>nedávno jsem byl ve vaší přesné situaci. moje společnost chtěla najmout jiného programátora a konkrétně jsem chtěla někoho, kdo má více zkušeností než já, abych se mohl dál učit a růst.</p><p>z rozhovorů jsem byl nejvíc nervózní, a tak jsem se zeptal <a href="https://softwareengineering.stackexchange.com/q/18371/1130">otázka zde</a> .</p><p>abychom to shrnuli, položte otázky, na které znáte odpověď, souvisejí s problémy, které máte, nebo s problémy, které jste v minulosti vyřešili. nesnažte se klást otázky, které jsou mimo vaši hloubku. buďte upřímní, pokud dotazovaný začne mluvit v termínech, kterým nerozumíte, a požádejte ho, aby vám je vysvětlil. poté, co najmete, s vámi bude spolupracovat a budete chtít někoho, kdo vás může mentorovat.</p><p>ukázalo se to skvěle. najali jsme někoho, kdo má mnohem více zkušeností a znalostí než já, a cítím, že se toho hodně učím.</p><p>řekl bych, že je to pro vás oboustranně výhodná situace. nejhorším scénářem je, že si najmete osobu, kterou najmete, a vy jste získali cenné znalosti, které s ní pracujete.</p> <p>už nemůžu najít ten pravý příspěvek, ale eric lippert (a možná i několik dalších softies) se při několika příležitostech opíral o to, jak je linq <strong>deklarativní</strong>, což je pro několik tříd problémů mnohem intuitivnější než <strong>imperativní</strong> syntaxe.</p><p>linq umožňuje psát kód, který vyjadřuje <em> záměr </em>, nikoli mechanismus <em> </em> .</p><p>řekni mi, co je lépe čitelné. tento:</p><pre class="lang-cs prettyprint-override"><code>ienumerable&lt;customer&gt; getvipcustomers(ienumerable&lt;customer&gt; source) { list&lt;customer&gt; results = new list&lt;customer&gt;(); foreach (customer c in source) { if (c.firstname == "aaron") { results.add(c); } } results.sort(new lastnamecomparer()); return results; } class lastnamecomparer : icomparer&lt;customer&gt; { public int compare(customer a, customer b) { return x.lastname.compareto(b.lastname); } } </code></pre><p>nebo toto?</p><pre class="lang-cs prettyprint-override"><code>ienumerable&lt;customer&gt; getvipcustomers(ienumerable&lt;customer&gt; source) { return from c in source where c.firstname == "aaron" orderby c.lastname select c; } </code></pre><p>nebo dokonce tohle?</p><pre class="lang-cs prettyprint-override"><code>ienumerable&lt;customer&gt; getvipcustomers(ienumerable&lt;customer&gt; source) { return source.where(c =&gt; c.firstname == "aaron").orderby(c =&gt; c.lastname); } </code></pre><p>prvním příkladem je jen svazek zbytečných kotlových desek, aby bylo dosaženo co nejjednodušších výsledků. každý, kdo si myslí, že je <em> více </em> čitelnější než verze linq, musí nechat vyšetřit hlavu. nejen to, ale první ztrácí paměť. nemůžete to ani napsat pomocí <code>yield return</code> kvůli třídění.</p><p>váš spolupracovník může říct, co chce; osobně si myslím, že linq nezměřitelně zlepšil <em> můj </em> kód čitelnosti.</p><p>ani o linqovi není nic „relačního“. může mít některé povrchové podobnosti s sql, ale nepokouší se v jakémkoli tvaru nebo formě implementovat relační počet. je to jen banda rozšíření, která usnadňují vyhledávání a projektování sekvencí. „dotaz“ neznamená „relační“ a ve skutečnosti existuje několik nerelačních databází, které používají syntaxi podobnou sql. linq je <em> čistě </em> objektově orientovaný, prostě se stává, že pracuje s relačními databázemi prostřednictvím frameworků jako linq do sql kvůli nějakému výrazu voodoo stromů a chytrému designu od tým c #, čímž se anonymní funkce implicitně převádějí na stromy výrazů.</p> <p>vyvinul jsem skutečné aplikace s oběma rails a asp.net mvc), ale tato odpověď přichází se značnou výzvou: naučil jsem se a vyvíjel se s předběžnou verzí 2 rails, takže je zcela možné, že jsem jsem nesmírně zastaralý díky mým znalostem rails).</p><p>jak už bylo řečeno, nemyslím si, že existuje <em> cokoli </em>, které lze s jedním, ale ne s druhým. vzhledem k jakémukoli souboru požadavků na webovou aplikaci byste měli být schopni sestavit tuto aplikaci - pravděpodobně stejně efektivně - pomocí rails nebo asp.net mvc).</p><p>existuje několik úhledných věcí, které - podle mého nejlepšího vědomí - jsou k dispozici v asp.net mvc hlavně kvůli aspektům c # /. net. například: když mám stránku, která obsahuje odeslaný formulář, mám akci, která zkontroluje, zda se jedná o get, nebo post), abych rozhodla, co dělat:</p><pre><code>def edit @item = item.find(params[:id]) if request.post? @item.update\_attributes(params[:item]) redirect\_to :action =&gt; 'edit', :id =&gt; @item.id end end </code></pre><p>toto je triviální příklad, ale <code>if request.post?</code> vzor je v rails velmi běžný. v netriviálních případech může být kód akce velký a chaotický a často bych si přál, abych ho mohl čistě promítnout do samostatných metod. v asp.net mvc to mohu udělat:</p><pre><code>public actionresult edit() { // render my page that has the edit form ... } [httppost] public actionresult edit(foothing foo) { // save my foothing data ... } </code></pre><p>myslím, že schopnost čistě oddělit vyřizování žádostí get a post žádostí) je elegantní. váš počet najetých kilometrů se může lišit.</p><p>další věc, kterou asp.net mvc dělá, že je super v pohodě (opět podle mého názoru), souvisí také s manipulací s posts. v rails musím dotazovat <code>params</code> hash pro všechny mé proměnné formuláře. řekněme, že mám formulář s poli „status“, „gonkulated“, „invert“ a „dispozice“:</p><pre><code>def edit @item = item.find(params[:id]) if params[:status] == "new" ... else ... end if params[:gonkulated] == "true" ... else ... end if params[:invert] == "true" ... else ... end # rest ommited for brevity end </code></pre><p>ale asp.net mvc úhledně mi umožňuje získat všechny hodnoty formuláře jako parametry mé metody akce:</p><pre><code>[httppost] public actionresult edit(int id, string status, bool gonkulated, bool invert, int disposition) { ... } </code></pre><p>to jsou dvě věci, které se mi na asp.net mvc nebo rails opravdu líbily. <strong><em> nestačí, aby si nějaký rozumný nebo kompetentní vývojář vybral jeden rámec nad druhým. </em></strong></p> Já jsem svého času šel cestou Cisco academy (<https://netacad.cz/>), nezažil jsem jiný způsob (krom hodně letmého vhledu na škole), ale jako detailní úvod o tom jak sítě fungují a pak samozřejmě trénink CISCO řešení super.Nicméně než začneš vyřeš si svou podmínku o českém jazyce, bez toho nemá smysl v IT dělat cokoli... zkus třeba cnet.com <p>psaní plynulého rozhraní (s ním jsem <a href="http://www.google.ca/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0cbuqfjaa&amp;url=http%3a%2f%2fsoapboxautomation.com%2fproducts%2ffluentdwelling%2f&amp;ei=ao6ttcuck8sdgqesvpsqda&amp;usg=afqjcngcf99lzbzlrfvnrtst7qsww3kxwg">dabbled</a> ) vyžaduje více úsilí, ale má to výplaty, protože pokud to uděláte správně, je výsledný uživatelský kód jasnější. je to v zásadě forma specifického jazykového jazyka.</p><p>jinými slovy, pokud je váš kód načten mnohem více, než je napsán (a jaký kód není?), měli byste zvážit vytvoření plynulého rozhraní.</p><p>plynulá rozhraní jsou více o kontextu a jsou mnohem víc než jen způsoby konfigurace objektů. jak vidíte ve výše uvedeném odkazu, k dosažení:</p><ol> <li>kontext (takže když obvykle provádíte mnoho akcí ve stejném pořadí, můžete je zřetězit, aniž byste museli znovu a znovu prohlašovat svůj kontext).</li> <li>viditelnost (když jdete na <code>objecta.</code> pak vám inteligence dává spoustu rad. v mém případě výše, <code>plm.led.</code> vám poskytuje všechny možnosti pro ovládání vestavěné led a <code>plm.network.</code> vám poskytuje věci, které můžete dělat se síťovým rozhraním. <code>plm.network.x10.</code> vám dává podmnožinu síťových akcí pro zařízení x10. u inicializátorů konstruktoru to nedostanete (pokud si nepřejete, aby byl objekt konstruován pro každý jiný typ akce, který není idiomatický).</li> <li>reflexe (nepoužívá se ve výše uvedeném příkladu) - schopnost převzít výraz linq a manipulovat s ním je velmi výkonný nástroj, zejména v některých pomocných api, které jsem vytvořil pro testy jednotek. dokážu předat výraz getter get, sestavit spoustu užitečných výrazů, zkompilovat a spustit je, nebo dokonce použít getter k nastavení mého kontextu.</li> </ol><p>jedna věc, kterou obvykle dělám, je:</p><pre><code>test.property(t =&gt; t.someproperty) .initializedto(string.empty) .cantbenull() // tries to set to null and asserts argumentnullexception .yaddayadda(); </code></pre><p>nechápu, jak můžete něco takového udělat i bez plynulého rozhraní.</p><p><strong> edit 2 </strong>: můžete také udělat opravdu zajímavá vylepšení čitelnosti, jako například:</p><pre><code>test.listproperty(t =&gt; t.mylist) .shouldhave(18).items() .andthenafter(t =&gt; testaddingitemtolist(t)) .shouldhave(19).items(); </code></pre> <p>databázi na straně serveru a programovací jazyk, který vyberete, je zcela na vás, protože zákazník nebude vědět, ani se nestará o to, v jakém jazyce je napsán, dokud bude fungovat. a protože ovládáte prostředí serveru, můžete použít cokoli, co chcete. vyberte si programovací jazyk a databázi, se kterou váš tým bude snadno pracovat a bude nejznámější.</p><p>pokud jde o stranu klienta, nemusíte si vybírat mezi flashem nebo javascriptem. můžete použít oba, pokud slouží určitému účelu. pokud je něco jednoduše animací kvůli animaci, flash je dobrá volba, protože je snadné vytvářet animace. a pokud někdo nemá přístup k blesku, například na mobilním zařízení, nebude mu chybět žádná funkčnost. pokud jsou animované bity funkční částí webové stránky, javí se javascript jako dobrý nástroj k použití.</p><p>fyi, ve webdesignu a programování není nic takového jako „příliš starý“. k dispozici je pouze ten správný nástroj a ne.</p> Těžko říci, který bude lepší.....v určitém programu nebo hře může být lepší ten, nebo zase ten druhý.Ale osobně bych šel spíše do Intelu. <p>to záleží na tom, zda máte obavy z odsouzení, nebo vyřizování pravděpodobné příčiny (v usa).</p><p>předpokládejme, že jste doma. spustíte vpn a připojíte se k poskytovateli vpn mimo lokalitu. pokud sleduji odchozí provoz (z vašeho domu), vím, že jste se právě připojili k určité ip adrese a že ip adresa je poskytovatel vpn. všechno uvnitř užitečného zatížení paketu je šifrováno.</p><p>poté se rozhodnete, když budete doma, zkontrolovat svůj e-mail. stává se, že sleduji odchozí provoz od poskytovatele vpn (který není šifrovaný). zaznamenávám to vše pomocí odfrknutí a spustím wireshark proti výstupu. vidím spojení s vaší e-mailovou adresou a napsaný e-mail. to může být chráněno ssl, pokud je to webmail. pokud se jedná o běžný e-mail, je to pravděpodobně prostý text. pokud to není prostý text, mohu se pokusit zachytit ho v přijímači. e-mail nemá žádný právní význam (tj. nepoužíváte jej k plánování něčeho nezákonného). všiml jsem si však skutečnosti, že zaměňujete použití jejich, tam a tam jsou. všimnu si také několika idiomů, které chcete použít.</p><p>během sledování odchozího provozu vidím, že váš účet psal několik e-mailů. zaznamenávám vzory překlepů a další postavy řeči. sbírám je po dobu jednoho měsíce nebo dvou.</p><p>potom jsem vložil položky, které si všimnu, do wireshark. přidávám několik věcí, o kterých je vám známo. pokaždé, když dojde k překlepu nebo použití idiomu (který používáte) najdete v obsahu jakéhokoli paketu, který vychází z vpn služby, kterou používáte, vidím to.</p><p>za další měsíc nebo dva mám spoustu datových bodů. některé jsou weby, na které jste šli, jiné ne. první věc, kterou udělám, je odstranění všech datových bodů, které opustily poskytovatele služeb vpn, když jste nebyli online (tj. neviděl jsem vás online z domova, nezapomeňte, že jsem začal sledováním tohoto připojení).</p><p>pak se podívám na zbývající provoz a uvidím, jestli mám nějaké body clusteru. spousta opakujících se témat. stejný předmět přes over. porovnávám to s vaším nešifrovaným provozem a vaším e-mailem.</p><p>neaplikoval jsem dostatek filtrů, abych tě izoloval od hluku (lidé, kteří používají stejné idiomy/pravopisné chyby jako ty), ale měl bych dobrý důvod pro pravděpodobnou příčinu. pokud mám dostatek referenčních bodů, je to jako otisk prstu.</p><p>v podstatě aplikuji bayesovskou analýzu na korpus práce, abych uvedl něco o pravděpodobnosti, že věřím, že příkladem bude člen souboru vytvořeného mým podezřelým. sbírka děl, která bych srovnávala, pochází z jakékoli práce, za kterou podezřelý veřejně uznal, že za ni odpovídá. tato analýza je dobře známa (a existuje i celá statistika stackexchange webu).</p><p>nechám tě odpovědět, s čím bych v tuto chvíli přišel?</p>