Kakav bi trebao znati programer za izveštaj. Od fronteen-a da se pozabavi

Slobodno radno mesto:
backend Web programer

Jedan od traženih specijaliteta u oblasti web razvoja je stvaranje pozadina, odnosno poslužitelja web aplikacije. Za uspješno zapošljavanje profesionalaca, potreban je određeni prtljag znanja i vještina. Predstavnici kompanija kažu ono što bi specijalisti želeli da vide u svom timu

  1. Kakvo znanje i veštine treba da ima back-Web programer?
  2. Koji je alat za back Web programer?
  3. Koji su zahtevi kompanije za formiranje potencijalnih zaposlenih?
  4. Koji su uslovi za radno iskustvo?
  5. Postoje li posebni zahtjevi zbog specifičnosti kompanije?

Arthur Bozhenov, viši programer Odjeljenja za internu automatizaciju Pozitivne tehnologije

Timur Himullin, prirodni inženjer za testiranje automatizacije Odjel za razvojne tehnologije Pozitivne tehnologije

1. Arthur Bozhenov: Interbeni programer Backend mora imati sljedeće vještine i znanje:

  • višeslojno programiranje;
  • principi kiseline (atomičnost, dosljednost, izolacija, pouzdanost) i njihova primjena u praksi;
  • opći principi mrežne arhitekture i protokola;
  • Životni ciklus HTTP zahtjeva / odgovora, put odlomka;
  • zaštita mrežnih veza (HTTPS). Autorizacija. Postavljanje prava pristupa resursima;
  • Odmor, odata, webapi, sapun;
  • web usluge;
  • hosting web aplikacije (IIS, NGINX, Lightpd, Node.JS, Apache);
  • skalabilnost rješenja, zahtjeva za balansiranje / usmjeravanje;
  • sječa;
  • keširanje podataka;
  • pohrana podataka (adekvatan izbor metode skladištenja ovisno o zadatku);
  • radite sa velikim količinama podataka.

2. Arthur Bozhenov: Osnovni alat Backend Web programer:

  • udoban IDE (Visual Studio, Netbeans itd.);
  • usluge ili komunalije za kreiranje / pregled / modificiranje regex izraza, JSON, XML, tekst u nepravilnom kodiranju;
  • Google i Stackoverflow;
  • Mongodb / redis / memcached;
  • Elasticsearch / Kibana;
  • Rabbitmq / Zeromq / MSMQ i drugi mq.

Timur Himullin: Što se tiče IDE, to je slučaj ukusa, barem notepad (Sabloim, NPP), ali ja bih izgledao bolje u smjeru Jetbrein proizvoda, a drugi koji su jedno s drugim dobro integrirani.

3. Arthur Bozhenov: Viši (izborni) tehnički (obavezni). Iskustvo praktični rad važnije.

Timur Himullin: Što se tiče obrazovanja, to je bolje tehničko ili matematičko.

4. Arthur Bozhenov: 3-5 godina nepravednog razvoja.

Timur Himullin: Za pozadini programera ne mogu pojasniti.

5. Arthur Bozhenov: Analitički um.

Timur Himullin: Prava vještina za rad u timu i sposobnost pregovora. Programer koji ne zna kako se modelirati i nastavlja da radi odmah bez razmišljanja u ukupnoj arhitekturi i interakciji svih aplikacijskih modula, ne bih preuzeo nigde. Na outsourceuu neka sjedi!

Evgeny Kuzin, šef odjela za mrežne projekte,LLC "Doctor Web"

1. Prije svega, Backend Web programer mora imati zajednički prtljag za sve programere - inženjersko razmišljanje, mogućnost unošenja suštine zadatka, razgrađujući ga u komponente i pravilno odabrati alate za to.

Arhitektura web aplikacije značajno se razlikuje od arhitekture običnog primijenjeni softver Prije svega, desetine u isto vrijeme, a ponekad stotine korisnika mogu raditi sa web aplikacijama. Izolacija kupaca jedni od drugih, sigurnost sustava, izračunavanje povećanja produktivnosti skaliranjem sustava i pridruženih arhitektonskih i tehničkih rješenja u potpunosti su pale na ramenima web programera.

Drugo, važno je da web programer reagira osjetljiv na razvoj interneta, analiziraju tehnologije i korištene alate.

Web programer se ne smije bojati savladavanja novih tehnologija, trebala bi biti lako rasti (u odnosu na kolege - programere za prijavu) i moći brzo djelovati.

2. Ne pozivam određene programe, jer su za svaku aspekt moguće ekvivalentne opcije.

Naravno, pretraživač, sa svim proširenjima potrebnim za analizu, verifikaciju i manipulaciju sa elementima i skripti na web stranici. Zatim komunalije koje omogućuju slanje raznih prilagođenih HTTP zahtjeva (od 95% web razvoja je HTTP protokol) i analiziraju promet i razmjenu podataka i razmjenu podataka između klijenta i poslužitelja. Takođe potreban rezervni program za web programere tekst uređivačPoželjno je uz podršku programskih jezika koji se koriste, uklanjanje pogrešaka alata, profiliranja i kontrole verzija.

Odvojeno, vrijedi spomenuti alate za pisanje ili generiranje tehničke dokumentacije. Dokumentacija je dobra, dobra dokumentacija takođe nije loša.

I, naravno, glavni alati su glava i ravne ruke.

3. Apsolutno je neophodno znati Rus, moći jasno i jasno navesti svoje misli u komunikaciji sa kolegama, kako u pisanom obliku i usmeno. Za ostalo, ne zahtijevaju od podnositelja zahtjeva na obaveznom načinu većeg tehničkog obrazovanja ili dostupnosti nijednog certifikata - riješiti kvalitetu rada i praktičnog znanja.

4. Evo isti princip kao i kod obrazovanja. Iskustvo, iskustvo - bezuslovni profesionalci, ali svakog kandidata smatramo pojedinačno.

5. Ako govorimo o razvoju precizno za Internet, a sami razvoju web već predstavlja stvaranje aplikacije koja radi u javnom okruženju za korisnika, čiji su istinske namjere koje nisu poznate. Programiranje bilo koje akcije, morate sebi postaviti pitanja: Što ako korisnik (napadač) automatizira beskonačno izvršavanje ove akcije? Šta ako će ulazne podatke aplikacije proizvoljno uređivati? Da ako se veza za ovu uslugu uđe otvoreni pristupHoće li se prenositi putem IM-a drugom korisniku? Itd.

Na osnovu specifičnosti naše aktivnosti često nastavljamo put prema napadačima i podacima s kojima radimo su od velikog interesa za određene krugove, tako da neke naše web aplikacije zahtijevaju posebno temeljitu zaštitu.

Nikolai Hohherry, šef novog razvoja, Badoo

1. Backend Web Developer u Badoo-u, kao i svaki dobar inženjer, trebao bi moći razumjeti zadatak i biti u mogućnosti da ga učinkovito riješi u okviru dostupnih tehnologija i alata. Koristimo PHP + MySQL, tako da naš web programer mora prije svega besplatno posjedovati PHP i SQL. Mora biti odgovoran i trudite se da dobro obavljaju svoj rad - poštivati \u200b\u200brokove, razumjeti proizvod / tehničku vrijednost zadatka, koji odgovaraju konačnom kvalitetu.

2. Osnovni skup je PHP, MySQL, NGINX, GIT, JIRA, IDE, omiljeni pretraživač i naredbena linija. Pored toga, imamo veliki broj različitih alata, sistema, biblioteka koje programeri se koriste svuda za rješavanje određenih zadataka. Neki od ovih alata dostupni su u otvorenom kosu, na primer, PINBA je PHP nadzorni agent za praćenje, naš alat za oblikovanje koda PHPCF, Blokiranje PHP-a za biblioteku leptici.

3. Ako osoba zadovoljava naše potrebe za vještinom i znanjem, tada smo spremni ponuditi mu posao bez obzira na njegovo obrazovanje.

4. Situacija je slična obrazovnom situaciji: nema strogih i formalnih zahtjeva.

5. Naši projekti imaju veliku publiku i dovoljno opterećene php-polendu. U vrhovima se bave do 50 hiljada zahtjeva u sekundi. S tim u vezi, posebnu pažnju posvećujemo temi produktivnosti. Potrebno je razumjeti osnovne principe keširanja, replikacije, optimalnog rada s podacima, optimizirati potrošnju i distribuciju resursa. Moći vidjeti i lokalizirati problem produktivnosti na bilo kojem nivou.

Denis Street, šef odjela za tehnološkog razvoja i održavanje kompanije "NTC IT ROSA"

1. Kandidat za takav položaj u NTC IT ROSA bit će potreban sljedećim vještinama:

  • dobro poznavanje rubin na šinama 4.x;
  • poznavanje razvoja vođenog ponašanjem;
  • poznavanje principa kolektivnog razvoja - verzije kontrolnih sistema, praćenja zadataka i tako dalje;
  • iskustvo sa bazama podataka (i relacijski i nosql);
  • iskustvo s vitkom / Haml;
  • znanje i iskustvo sa JavaScript / kava;
  • znanje CSS / SCSS.

2. U NTC IT ROSA za web razvoj koji je trenutno koristio Bootstrap okvir, kao i JavaScript okvir Angularjs. PostgreSQL i Redis koriste se za pohranu podataka. Razvoj na rubini na šinama vrši se u skladu s razvojnim pristupom vođenom ponašanjem koristeći RSPEC Toolkit.

3. Prisutnost većeg tehničkog obrazovanja bit će plus, ali na prvom mjestu nećemo gledati diplomu, već o vještinama i iskustvu potencijalnog kandidata.

4. Iskustvo je poželjno iz godine u godinu u projektima, gdje su korišteni oni koji su spomenuti u prvom stavu tehnologije (barem rubin na šinama).

5. Backend-Web programeri u NTC IT Rosa rade uglavnom preko ABF-a razvoja i montažnog sistema koji se koristi za stvaranje naših glavnih proizvoda - linijskih distribucija Linux OS-a i proizvoda u okviru ovog OS-a. Stoga će biti velika prednost ako je kandidat za ovaj konkurs upoznat sa Linuxom i sastavljanjem paketa za ovaj sistem. Neće biti dalje poznanstvo s drugim tehnologijama koje se koriste u ABF - virtualizaciji (posebno, LXC), sistemima upravljanja konfiguracijskim upravljanjem (na primjer, avilni) i sustavi za pohranu kodova (prvenstveno git).

Sergej Kazantsev, stariji programer, "Kaspersky Lab"

1. Ponovo je programeri odgovorni za kodeks koji se obavlja na web poslužiteljima.

Dakle, Echatdnd programeri bi trebali razumjeti ne samo programiranje jezika, već i arhitekturu poslužitelja, baze podataka i protokole mrežnog interakcije.

2. Programer mora znati barem jedan programski jezik visokog nivoa, okvir za efikasan web razvoj i web server.

Popularni paketi mogu biti:

  • C # + ASP.NET + IIS;
  • Java + proljeće MVC + Apache Tomcat;
  • Ruby na šinama + nginx;
  • Python + Django + Apache;
  • PHP + Apache;
  • ... ili njihove kombinacije.

Mnoge web usluge kompanije izgrađene su na temelju Microsoftovih tehnologija i platformi .NET, ali rubin na šinama, Perl, PHP se također primjenjuju.

U arsenalu dobrog programera za izveštavanje postoje uvijek alati:

  • monitoring prometa: Fiddler, Wireshark;
  • performanse profiliranja, memorije i zahtjevi baze podataka;
  • brzi zapisnici: grep.

3. Obavezna vještina za rad sa bazama podataka, redovi poruka i velikim projektima za upotrebu distribuirane predmemorije.

4. Potrebno iskustvo može ovisiti o položaju koji podnosilac zahtjeva tvrdi:

  • 1 godina - Junior Web programer;
  • 2-5 godina - web programer;
  • 5-7 + - - - stariji / vodeći programer.

5. Specifični zahtjevi Kaspersky Lab-a mogu se pripisati znanju o kriptografiji, potencijalnim prijetnjama web aplikacijama i načinima da ih spriječi.

Ilya Kutukov, stariji programer, specijalista za web inženjerstvo paralela

1. Mi smo u paralelama sada otvoreno dva slobodna radna mjesta za takve stručnjake - vodeći programer za web backs (http://hh.ru/vacacy@12566616?query\u003dparallels) i vodeći programer web bachenda i arhitekta (Python) (http: //hh.ru/vacancy/12599030?query\u003dParlels), tako da tačno znamo šta želimo od takvih stručnjaka. Podrazumijeva se da osoba koja dolazi kod nas posjeduje potrebne programiranje jezika i tehnologije da bi dovoljno radili. Pored provjere vještina kodiranja i ukupne erudicije, dajemo test na arhitektu - tekstu koji je slobodno napisan i svjesno nepotpun TK na razvoju sistema. Nadalje, tražeći od kandidata da mu pojasni da mu nije jasno, koja dodatna pitanja ima i kako vidi glavne komponente sistema, shemu podataka, kako će se sve promijeniti sa povećanjem opterećenja, količini podataka i gde se mogu zanemariti.

2. Glavni alat - IDE (pojašnjavat ću da smo u timu preferira Pycharm), okruženje programera, odnosno skupa programa koji ga čini što više na ispunjavanju borbenih servera, ali istovremeno Vrijeme je s mogućnošću brzo razumijevanja onoga što se događa, VCS, skripte za glavu. Od zanimljivih, relativno novih alata, tehnologija i pristupa, također bih želio spomenuti "reaktivni" pristup (akka, RX. *, Apache Storm itd.) Za koje zahtijeva programer razmišljanja na nivou poruka, događaja i njihove modifikacije. Kao i mikroservisne arhitekture koje su dobro nadopunjavaju svoje sučelje opis jezika (štednjak, avro, protobufi, json shema), što omogućava stvaranje ugovora za koje se razmjenjuju podaci.

3. Obrazovanje za nas ne igra temeljnu ulogu.

5. Imamo back programere na takvoj funkcionalnosti kao paraleli MyAccount, pristupni portal, desktop portal, u rješenjima kao što su paralelni pristup (rješenje) daljinski pristup) i paralelno radnotop za Mac (lansiranje na Macks različitih operativnih sistema i njihovih aplikacija bez ponovnog pokretanja), sa različitim infrastrukturnim rješenjima. Stoga imamo takvu specifičnost kao nulta-stanka, i dobro, ako osoba ne samo ne samo da razumije koje promjene treba napraviti, ali i kako to učiniti, ne utječe na korisnike.

Konstantin Kichinsky, stručnjak za stratešku tehnologiju, Microsoft Rusija

1. Znanje i vještine potrebne za back Web programer:

  • Mrežna arhitektura, protokoli, komunikacijski kanali.
  • Tehnološki snop koji odgovara projektu (na primjer, C #, .net, asp.net ili javascript / tipka + nodejs) + kontrola osnovna operativnog sistema (na primjer, Windows / Azure + PowerShell).
  • Automatizacija implementacije i ispitivanja (uključujući opterećenje).
  • Razumevanje značajke oblaka Glavni davatelji usluga (Microsoft Azure, AWS), uključujući pružanje skalabilnosti usluga.
  • SDL i opća pitanja sigurnosti (uključujući šifriranje i provjeru autentičnosti).

2. Alati: Visual Studio, Git + ostalo ovisi o procesima i tehnološkom snopu.

3. Obrazovanje: Profil (IT) + praktično iskustvo, znanje o kvaliteti dobrodošlice u određenim područjima (također sigurnost ili osiguravanje tolerancije greške na mjestu).

4. Iskustvo: Praktično iskustvo u stvarnim projektima, uključujući učešće u OS projektima.

5. Specifični zahtjevi: Azure.

Planina Aleksandra, direktor informacione tehnologije Pošta.Ru Group.

1. Prvo, on mora znati da se pozabavi - njegov glavni programski jezik, bazu podataka, principe organiziranja aplikacija poslužitelja. Pored toga, treba mu znanje na webu: HTTP protokol uređaja, CSS mogućnosti, barem elementarno vlasništvo nad HTML i JavaScript. I na kraju, on mora da je dobar programer - da bi mogao da se obratim vlastitim i tuđim kodom, kako bi pravilno koristili klasične algoritme, odaberite relevantne strukture podataka.

2. Glavni alat je, naravno, programski jezik. Jezik definira drugi nivo alata: Standard za ovaj okvirni jezici i setovi biblioteke. Zatim idite baze podataka: najčešće MySQL ili postgresql - i nosql skladišni sadržaji, poput tarantola ili redisa.

3. Ne postoje formalni zahtjevi za diplomu tokom uređaja za rad u grupi Mail.Ru. Mnogo je važnije za stvarne vještine i projekte u kojima je učestvovao. Mail.ru Group ima dva velika obrazovna projekta: tehnoparka na osnovu MSTU-a Bauman i tehnosfelje na osnovu IMC MSU-a, čiji je cilj dati studentima u polju web razvoja.

4. Ponovno nema formalnih zahtjeva, ali općenito se može reći da programer postaje potpuno neovisan negdje nakon dvije ili tri godine iskustva "drugi broj".

5. Razvoj back-a bio je tradicionalno srce naše kompanije. Izrazitelj Back-a trebao bi biti zaista najbolji u svemu - pametnom, kreativnom, odgovorne, urednom, kao i dobrom igraču tima i po mogućnosti sa lukom oko glave. Sa tehničkog stanovišta, naša specifičnost je da se većina pozabarenja napisana na C ++, a ne skriptajućim jezicima - visoki teret koji ga forsiraju.

Alexander Nedzelsky, Hyoft Web Studio Head

1. Ako razgovaramo o određenoj kolektivnoj slici programera Bachend, zatim:

  • razumijevanje OOP-a, predložaka dizajna, poznavanje osnovnih algoritama i struktura podataka;
  • posjedovanje jednog od programskih jezika (ili nekoliko);
  • iskustvo sa DBMS-om, znanjem SQL;
  • razumijevanje principa dizajniranja relacijskih baza podataka;
  • iskustvo sa popularnim okvirima;
  • iskustvo sa verzijama upravljanja sistemima;
  • osnovno znanje HTML-a, CSS, JavaScript;
  • sposobnost postavljanja testnog okruženja.

2. "Notepad" i glava na ramenima. I ako ozbiljno, bilo koji ID / urednik i testno područje. Obično su alati odabrani ovisno o preferencijama / zadacima / mogućnostima.

3. Strogo veći tehnički.

4. Prisutnost završenih i radnih komercijalnih projekata.

5. Razvijamo web aplikacije, web stranice i usluge uglavnom na PHP / MySQL. Istovremeno koristimo Yii / Simfon i 1C-bitrix za standardna rješenja. Stoga su za nas važne relevantno iskustvo i znanje.

Eduard Gursky, tehnički vodstvo u timu za unutrašnjeg razvoja, jetbrani

1. Bazen-Web programer je u stvari osoba koja razvija logiku poslužitelja i svjesni koji će se kontekst izvršiti - u kontekstu web aplikacija. Ako se back-web aplikacije implementiraju u Javi, a u većini slučajeva je u stvari isti stručnjak primjenjuje sve iste zahtjeve za znanje i vještine kao uobičajeni Java programer: znanje o jeziku, razumijevanje rada i uređaja Glavne komponente biblioteke Java SDK itd. Međutim, iskustva se takođe dodaju u različitim web okvirima (pojednostavljuju implementaciju ubrizgavanja ovisnosti, MVC-a itd.), Sposobnost procjene i poboljšanja performansi primjene, njegovu skalabilnost. Potrebno je uzeti u obzir i razumjeti koliko brzo korisnička aplikacija dobit će rezultat poslužitelja, kao i koliko sigurno i racionalno, druga funkcionalnost poslužitelja racionalna je putem korisničkog pretraživača.

Često back Web aplikacija zahtijeva integraciju sa trećim uslugama ili izvozom njegove funkcionalnosti kao vanjski API. Programer mora razumjeti kako se provode takvi zadaci koji se za to koriste protokoli i mehanizmi.

Uprkos činjenici da se takva osoba uglavnom bavi u razvoju logike aplikacijskog poslužitelja, potrebe za uklanjanjem pogrešaka ili prototipiranja pomoću klijenta dijela aplikacije. Odavde slijedi potreba za razumijevanjem rada TCP / IP protokola, HTTP protokola, principa interakcije pregledača s web aplikacijama, osnovno znanje o rasporedu, CSS stilovima, JavaScript mogućnostima.

2. Obično ovaj IDE za razvoj. Također morate koristiti profilar za rješavanje zadataka produktivnosti, prekomjerna potrošnja resursa itd. U našem timu koristimo INTILEJ IDE IDEA.

3. Ne namećemo nikakve formalne uslove za nivo obrazovanja kandidata. Važnije iskustvo, razumijevanje i inteligencija, i, naravno, motivacija čovjeka.

4. Svako iskustvo u razvoju proizvodnih web aplikacija, naravno, plus je plus. Gore opisana znanja i vještine ne mogu biti prisutni na stručnjaku u nedostatku relevantnog iskustva. Na intervjuima, obično smo zainteresirani za detalje o sudjelovanju u različitim projektima navedenim u životopisu kako bi se procijenilo iskustvo koje kandidat može kupiti provođenjem takvih zadataka. Specijalista koji je probao različite pristupe i tehnologije za rješavanje sličnih zadataka u razvoju web aplikacija koje mogu analizirati prednosti i nedostatke svakog pristupa, vrlo je zanimljiv kandidat.

5. Dočeka se iskustvo u razvoju aplikacija pomoću Jetbrains proizvoda. Svi smo u kompaniji pokušavamo koristiti naše proizvode, jer su im ugodni i zato što ih želimo učiniti još prikladnijim!

Takođe nedavno, vežbamo razvoj web aplikacija na jeziku Kotlin. To daje niz značajnih prednosti, a također čini proces pisanja koda na njemu ugodnije. Želja kandidata je pozdravljena za proučavanje novih jezika i novih pristupa provedbi web aplikacija.

Dmitrij Ovimcinkov, web programer
Natalia Beetle, regrut u sooom "Game Stream" u centru Minsk za razvoj Wargaming

1. Povećani programer zahtijeva duboko razumijevanje weba: od formiranja HTTP zahtjeva sa strane pretraživača prije implementacije Interspesona komunikacija pomoću različitih protokola. Web u Wargamingu nije samo "lični račun" igrača, već i puno usluga koje pružaju jedinstvenu provjeru autentičnosti, registraciju, sudjelovanje u programu preporuke itd.

Također je važno imati inženjersko razmišljanje. U kombinaciji sa velikim tehničkim horizontom, to omogućava ponuditi efikasna rješenja.

I, naravno, obavezno napišite kôd kvalitete. Lice programera je njegov kod. Poznavanje velikih arhitekture i modernih programskih obrazaca često je obavezno kada rade u velikom timu u kompleksnom projektu.

2. U Wargamiranju korištenog rabljenog tehnologije je sasvim standardno: Glavni niz web projekata razvijen je na Pythonu, neke usluge su napisane u PHP, a druge, kritične za brzinu i paralelno računanje, na Erlangu. MySQL se koristi za skladištenje, za predmemoriju - memcached. Rabbitmq izabran kao guma poruka u kompaniji. Iz okvira - django i uvijena. Ako razgovaramo o frontnom dijelu, onda je to uobičajeno svetlo / podvlačenje / jQuery snop.

Što se tiče razvojnih alata, u ratu se pridržavamo položaja "Šta je bolje za programera". Netko koristi moderno IDE, neko se ugodnije osjeća sa vimom ili emacsom. Nije važno, uz pomoć čiji alati sprovodemo svoj rad, ako su rezultat prikladne i korisne usluge koje svakodnevno čine milione igrača širom svijeta.

3. Nemamo formalizirane zahteve za nivo obrazovanja. Profil (tehnički, matematički) obrazovanje bit će plus, jer ukazuje na prisustvo temeljne teorijske pripreme kandidata, ali malo je vjerovatno da će postati presudan faktor kada prijem na posao. Razumijemo da se znanje iz oblasti matematike, OOP-a, klasičnih algoritama i struktura podataka može dobiti samostalno. Prednost se daju kandidatima sa iskustvom. Također, sposobnost kandidata za rješavanje inženjerskih zadataka i napraviti inženjering rješenja, a ne samo napisati kod.

4. Zahtjevi za radno iskustvo ovise o konkursu. Ako pozovemo mladog stručnjaka, prije svega ćemo pogledati njegove "kućne projekte" i sveučilišni razvoj. Moramo biti sigurni da nam je osoba došla do nas, to je bio prilika, bio je svjestan izbor koji se može potvrditi stvarnim primjerima najmanje malih, ali završenih projekata. Kada je u pitanju iskusni stručnjak - zahtjevi su konkretniji. Važno je da iskustvomo u više oblasti: baza podataka, Linux, web server (Apache, NGINX), znanje i razumijevanje keširskih sustava (memcached), sustavi za razmjenu poruka (RabbitMQ) i iskustvo sa okvirima (Django, upleteno). Iskustvo u optimizaciji projekata visokog opterećenja bit će vrlo korisno i omogućit će vam brzo pridružiti razvojnog procesa i raditi s maksimalnom efikasnošću za sebe i tim. Za vodeće stručnjake i stručnjake, pored gore navedenog, važni su širok tehnički horizont i iskustvo s različitim tehnološkim snopom.

5. Podrška za veb infrastrukturu za ogroman broj igrača Wargaming.NET svemira podrazumijeva mogućnost rada sa visokim opterećenjima i ležalo u arhitekturi aplikacije mogućnost rada velika količina Zahtjevi.

Pored spremnosti za stručnost, važno je zapamtiti sigurnost. Stoga je web programer u Wargamingu dužan znati o mehanizmima suzbijanja velikih prijetnji i osigurati pouzdanost njenog kodeksa.

Pripremljeni Igor Stropel

Superjob.ru Research Research Center posebno za "Administrator sistema" Studirao je ponude poslodavaca. Položaj back-web programera, posebni zahtjevi još nisu definirani, uglavnom su slični činjenici da su predstavljeni programerima.

Java programer

To
Telekomunikacije
Industrija
Proizvodnja
Zgrada
Upravljanje imovinom
Usluge B2V. Prodaja B2B Prodaja B2C.
I. 65 000 – 80 000 54 000 – 71 000 50 000 – 67 000 60 000 – 75 000 50 000 – 65 000 50 000 – 64 000
50 000 – 64 000 42 000 – 57 000 40 000 – 53 000 45 000 – 60 000 40 000 – 52 000 40 000 – 51 000
II. 80 000 – 90 000 71 000 – 87 000 67 000 – 85 000 75 000 – 90 000 65 000 – 83 000 64 000 – 87 000
64 000 – 72 000 57 000 – 70 000 53 000 – 68 000 60 000 – 70 000 52 000 – 66 000 51 000 – 70 000
III 90 000 – 150 000 87 000 – 125 000 85 000 – 115 000 90 000 – 130 000 83 000 – 120 000 87 000 – 125 000
72 000 – 120 000 70 000 – 100 000 68 000 – 92 000 70 000 – 100 000 66 000 – 96 000 70 000 – 100 000
IV. 150 000 – 200 000 125 000 – 150 000 115 000 – 150 000 130 000 – 180 000 120 000 – 170 000 125 000 – 160 000
120 000 – 160 000 100 000 – 120 000 92 000 – 120 000 100 000 – 145 000 96 000 – 140 000 100 000 – 130 000
CF. 125 000 110 000 100 000 115 000 115 000 110 000
100 000 88 000 80 000 92 000 90 000 90 000

Neparne platne linije - srednje MSK, čak - u Sankt Peterburgu

Raspon plaće Zahtevi i želje za profesionalne veštine
Range I.
  • Nepotpuno visoko obrazovanje (tehnički / IT)
  • Odlično znanje HTML, CSS, Java, XML
  • Znanje o objektno orijentiranim principima programiranja
  • Poznavanje teorijskih temelja razvoja baze podataka
  • Poznavanje engleskog jezika na nivou čitanja tehničke dokumentacije
  • Java programiranje iskustva od šest mjeseci
Raspon II.
  • Iskustvo sa web poslužiteljima i poslužiteljima aplikacija
  • Java programiranje iskustva od 1 godine
Range III
  • Visoko obrazovanje (tehnički / IT)
  • Predlošci dizajna znanja Java i J2EE
  • Iskustvo korištenjem posebnih alata (hibernacije, proljeće, nosače itd.)
  • Iskustvo u razvojnom timu
  • Iskustvo sa verzijama kontrolnih sistema
  • Iskustvo sa DBMS (MS SQL server ili Oracle)
  • Java programiranje iskustva sa 2 godine
Raspon IV.
  • Prisutnost kvalificiranih certifikata
  • Dizajn iskustva informacioni sistemi i priprema projektne dokumentacije
  • Iskustvo sa integracionim rješenjima (IBM WebSphere, Oracle Fusion srednji softver)
  • Iskustvo u razvoju aplikacija na više nivoa
  • Java programiranje iskustva od 3 godine
Moguće želje:
  • poznavanje engleskog jezika na kolokvijalnom ili slobodnom nivou
  • veštine Ručna grupa za programere

Valery Chernetova pripremljena, superob analitičar


U kontaktu sa

  • Transfer

Ovaj se popis pojavio kao lični dopis o temama koje sam razgovarao s kolegama i prijateljima i u kojem sam želio razumjeti dublje ...

Ja nisam veliki ljubavnik da bih postavio tehnička pitanja na intervjuima: Za mene je bolje sjediti sa kandidatom (ili kandidatom) na tastaturi nad nekim stvarnim kodom, stvarnim problemom - i cijeli dan za uključivanje Programiranje para, poželjno je naizmjenično s ostatkom tima. Ali vjerujem da neka tehnička pitanja mogu biti dobro polazište za početak fascinantnog i ugodnog razgovora i omogućit će jedni drugima dublje.

U ovom se spremištu prikupljaju brojna pitanja koja se odnose na dio poslužitelja, koja se može koristiti prilikom provjere potencijalnih kandidata. Ni u kojem slučaju ne preporučuje se pitati sve Pitanja jednom kandidatu: Trebat će nekoliko sati i nema smisla uopće, jer pokrivaju previše širok spektar tema. Niko ne može sve znati. Odaberite najrelevantnije odjeljak i najzanimljivije pitanja za proširenje razgovora.

Upozorenje

Većina je pitanja otvorena, neki jednostavno ne pravo ili pogrešno Odgovor. Naprotiv, trebali bi biti polazište razgovora, što bi u ideji trebalo bolje pokazati ljudske sposobnosti nego jednostavan odgovor. Osobno, uglavnom preferiram pitanja, odgovore na koje ja ne znam.

Opet naglašavam da je teško da je dovoljno da postavlja pitanja. Na kraju intervjua, provedite dugu zasjedanje programiranja para: ovo je jedno od bolje opcijeDa bismo razumjeli stil i pristupite jedni drugima - i dajte da shvate kandidate, šta da očekujemo od budućeg rada.

Ovaj projekat je stvoren prema uzorku "pitanja za intervju za rad Frender-a" iz @darcyclarkea.

Gdje su odgovori?

Prije ili kasnije upotpunit ću članak s odgovarajućim odgovorima. Bila bih vam zahvalna na bilo kojoj pomoći!

Pitanja o predlošcima dizajna:

Zašto su globalni objekti i statistika zli? Možete li pokazati na primjeru koda?

Recite nam o kontrolnoj inverziji i kako poboljšava organizacijski kod.

Zakon o demerima (načelo minimalne svijesti) kaže da svaki programski modul mora imati ograničeno znanje o drugim modulima i mora komunicirati samo s direktnim "prijateljima" (ponekad se formulira kao "ne razgovaraju sa strancima"). Možete li napisati kôd koji krši ovaj princip? Zašto je njegova loša organizacija i kako to popraviti?

Active-zapis je predložak dizajna koji potiče provedbu funkcija na sebe, poput umetanja, ažuriranja i brisanja i svojstva koja odgovaraju stupovima neke osnovne tablice u bazi podataka. Mislite li i doživljavate, koja ograničenja i zamke imaju ovaj predložak?

Mapper podataka je predložak dizajna koji potiče upotrebu sloja pretvarača (mapa) premještanja podataka između objekata i baze podataka, istovremeno održavajući njihovu neovisnost međusobno i iz samog pretvarača. Za razliku od ovog predloška, \u200b\u200bu aktivnom zapisu, objekti izravno uključuju operacije kako bi se sačuvali u bazi podataka i svojstvima koji odgovaraju osnovnim tablicama u bazi podataka. Imate li mišljenje o ovim predlošcima? U kojim slučajevima preferirate jedan od njih drugom?

Zašto kada se primenjuje null često spominju "grešku milijardu dolara"? Želite razgovarati o tehnikama kako bi se to spriječilo, kao što su null predložak objekta predstavljen u knjizi GOF ili fakultativnim vrstama?

Zašto je sastav često bolji od nasljeđivanja?

Koji je nivo sigurnosti (antikorupcijski sloj)?

Sington je predložak dizajna koji stvara jednu instancu klase za jedan objekt. Napišite pravo (Sef-Signe Singleton) nije tako jednostavan. Probaj?

Sposobnost promjene implementacije bez utjecaja na dio klijenta naziva se apstraktna prezentacija podataka (apstrakcija podataka). Napišite primjer koji krši ovu nekretninu, a zatim ga ispravite.

Napišite isječak koda koji krši princip ne ponavlja se (suvo). Zatim ispravite.

Kako ćete se baviti paklenim zavisnostima (zavisnosti pakao)?

Zašto je Goto - Je li zlo?

Princip pouzdanosti je opće pravilo organizacije Kodeksa koji preporučuje "Biti konzervativac je da pošaljete i liberalite u onome što prihvatate". Često se formuliše kao "Biti tolerantni čitalac i oprezan pisac". Želite razgovarati o značenju ovog principa?

Razdvajanje diskusije - Princip dizajna za odvajanje računalni program Za pojedina područja od kojih je svaki od njih odgovoran za svoj zadatak. Postoji mnogo različitih mehanizama za odvajanje odgovornosti (upotreba objekata, funkcija, modula ili predložaka, poput MVC-a i slično). Želite razgovarati o ovoj temi?

Pitanja o organizaciji Kodeksa (Dizajn koda):

Često se kaže da je jedan od najvažnijih zadataka objektno orijentiranog dizajna (i organizacije Kodeksa u cjelini) jaka kvačilo i slabost. Šta to znači? Zašto su toliko važni i kako ih ostvariti?

Zašto na većini jezika indeks niza počinje od nule?

Kako testovi i TDD utiču na organizacioni kod?

Napišite fragment koda koji krši princip ne ponavlja se (suvo). Objasnite zašto ima lošu organizaciju i tačan.

Koja je razlika između kvačila i povezanosti?

Šta je refactoring?

Da li su komentari u kodu korisni? Netko kaže da ih treba izbjegavati ako je moguće, a u idealnom slučaju im uopće ne trebaju. Slažeš li se?

Kakva je razlika između kodeksa organizacije i arhitekture?

Zašto su TDD testovi napisani prije kod?

C ++ podržava višestruko nasljedstvo, a Java omogućava klasu da implementira više sučelja. Kakav efekat koristi ta sredstva za ortogonalnost? Postoji li razlika u efektima između upotrebe višestruke nasljeđe i više sučelja? Postoji li razlika između korištenja delegacije i nasljeđivanja? [Ovo je pitanje iz knjige "Pragmatični programer" Andrew Khanta i Defvida Thomas]

Za prednosti i konju za pohranu logike predmetnog područja u pohranjenim procedurama.

Prema vašem mišljenju, zašto se objektno orijentirana organizacija dominira toliko godina na tržištu?

Ako vaš kôd ima lošu organizaciju, kako to razumijete?

Pitanja o programiranju jezika:

Recite O. tri glavna Nedostaci vašeg omiljenog programskog jezika.

Zašto povećati kamate za funkcionalno programiranje?

Šta je zatvaranje i za šta je korisno? Šta je uobičajeno sa zatvaračima i časovima?

Kada je prikladno koristiti generiku?

Koje su funkcije visokog reda? Za šta su potrebne? Napišite takvu funkciju na bilo kojem jeziku.

Napišite ciklus, a zatim je pretvorite u rekurzivnu funkciju koristeći samo nepromjenjive konstrukcije (I.E. bez varijabli). Opišite ga.

Što znači kada jezik smatra funkcionira kao prve klase objekata?

Pokažite primjer kada anonimna funkcija može biti korisna.

Zašto vam treba prostos imena? Smisliti alternativu.

Recite nam o kompaktibilnosti Java i C # (ili odaberite dva druga proizvoljna jezika).

Zašto mnogi programeri ne vole Javu?

Šta čini dobar jezik dobar i loš jezik - loš?

Napišite dvije funkcije, jednu referentno prozirnu i drugu referentno neprozirnost. Hajde da razgovaramo o njima.

Šta je hrpa i šta je gomila? Šta se preplavi snop?

Zašto je važno da su funkcije prve klase objekti na jeziku?

Na nekim jezicima, posebno s funkcionalnim pristupom, tehnika je dozvoljena, koja se naziva usporedbom s uzorkom. Zna li te? Kako se mapiranje uzorka razlikuje od dizajna prekidača?

Zašto se u nekim programskim jezicima izuzeci ne provode? Koje su prednosti i nedostaci ovog pristupa?

Ako je mačka životinja, onda je tačno da je Takecare - Ovo je Takecare. ?

Zašto u Javi, C # i mnogi drugi dizajneri jezika nisu dio sučelja?

Posljednjih godina puno buke oko čvora.js. Kakvo je vaše mišljenje o upotrebi na jeziku za stražnji dio, koji je prvobitno zamišljen za rad u pretraživaču?

Zamislite da imate vremeplovsku mašinu i postoji prilika za povratak u određeno vrijeme u Java History (C #, Python, Idite ili nešto drugo) i razgovarajte s nekim od tvorca JDK-a. Šta biste ih pokušali uvjeriti? Izbrišite kontrolirane iznimke? Dodajte nepotpisane primitivne vrste? Višestruko nasljeđivanje?

Pitanja o web razvoju:

Zašto se izvorni kolačići i kolačići treće strane obrađuju tako različito?

Kako biste upravljali numeriranjem verzija Web Services API-ja?

Sa stanovišta pozadine, postoje li nedostaci ili prepreke za uvođenje aplikacija sa jednim stranicama?

Zašto obično toliko težimo tako da je usluga bila bez državljanstva? Šta je tako dobro u kodeksu bez aikade? Zašto i kada je skladište (utepesity) loše?

Odmor i sapun: U kojim situacijama ćete odabrati jedan od ovih pristupa, i u kojem drugom?

U razvoju web stranice, kontroler modela i model-model-View-View-View-model su u velikoj mjeri slični i u besendi i na prednjoj strani. Šta oni zamišljaju i zašto su prikladni da ih koriste?

Pitanja baze podataka:

Kako objavljujete aplikaciju iz jedne baze podataka na drugu, na primjer, iz MySQL-a u PostgreSQL-u? Ako morate upravljati takvim projektom, koji problemi očekujete?

Zašto baza podataka ne smatra nultom kao takav poseban slučaj? Na primjer, zašto u SQL-u odaberite * iz tablice na kojoj polje \u003d null ne daje snimanju null poljem?

Kisela je akronim za atomičnost, dosljednost, izolaciju, izdržljivost (atomičnost, dosljednost, izolaciju, stabilnost). Većina motora baze podataka garantira ova četiri svojstva za transakcije u bazi podataka. Šta znate o tome? Želite li vam reći više?

Kako biste se bavili prijenosom DB sheme, odnosno na automatizaciju promjena u DB shemi jer se aplikacija razvija iz verzije na verziju?

Kako implementirati lijeno opterećenje? Kada je korisno? Šta su podvodne kamenje?

Takozvani "N + 1 problem" nastaje kada se kôd mora učitati dječijim elementima iz odnosa "potomci roditelja" u Orm sa lijenim čizmom, a samim tim, pošaljite zahtjev za roditeljski zapis, a zatim jedan zahtjev za svaku podružnicu . Kako riješiti problem?

Kako možete pronaći najviše zahtjeva za troškove u aplikaciji?

Prema vašem mišljenju, da li je uvijek potrebno normalizaciju baze podataka? Kada je preporučljivo koristiti denormalizirana baza podataka?

Jedna od metoda kontinuirane integracije naziva se plavo-zeleni dug. Sastoji se u korištenju dva okruženja industrijske operacije, što je više moguće - i raspoređene u jednom od njih tokom drugog, a zatim osigurati prometni prelazak iz jednog okruženja u sekundu nakon testiranja u prikladnom okruženju. Ova metoda je komplicirana ako dug uključuje promjenu strukture ili sadržaja baze podataka. Želio bih razgovarati o ovoj temi s vama.

Pitanja o NOSQL-u:

Šta je u konačnici konzistentnost (eventualna dosljednost)?

Što je sa Theorem Cap, dajte primjere CP, AP i CA sistema.

Kako objašnjavate prskanje interesa u NOSQL-u u posljednje vrijeme?

Kako NOSQL rješava problem skalabilnosti?

U tom slučaju, preferira li se DBMS orijentiran na dokumente poput Mongodba umjesto relacijskog DBMS-a, poput MySQL ili postgresql?

Pitanja o verziji koda:

Zašto je implementacija grana u Mercurial ili Git lakše nego u svn?

Koje su prednosti i sustavi distribuiranih verzija, poput GIT-a, u odnosu na centralizirane VCS poput SVN-a?

Možete li opisati protok Githeub i gitflow?

Šta je Rebaza (potez)?

Zašto je spajanje lakše vježbati sergurno ili git nego u svn i cvs?

Pitanja o paralelizmu:

Zašto vam treba paralelizam? Objasnite.

Zašto je tako teško testirati više navoja / paralelni kod?

Kakav je status utrke? Napišite primjer na proizvoljnom jeziku.

Šta je međusobno blokiranje? Možete li napisati neki kodeks koji pati sa međusobnim bravama?

Šta je glad resursa (gladovanje procesa)? Ako je potrebno, razmotrimo njegovu definiciju.

Koji je algoritam za ne blokiranje sinhronizacije bez očekivanja (algoritam bez čekanja)?

Pitanja o distribuiranim sistemima:

Kako testirati distribuirani sistem?

U tom slučaju primjenjujete asinhronu komunikaciju između dva sistema?

Koje su glavne podvodne kamenje procedura daljinskog izazova?

Ako kreirate distribuirani sustav za skalabilnost i pouzdanost, koji se različiti problemi mogu pojaviti u zatvorenom i sigurnoj mrežnom okruženju - i u geografski raspodijeljenom i javnom sistemu?

Kako osigurati toleranciju greške web aplikaciji? Aplikacija za radnu površinu?

Kako se nositi sa neuspjehom u distribuiranim sistemima?

Razgovarajmo o različitim pristupima obnovi radne sposobnosti (pomirenja) nakon prekršaja mrežne veze.

Koje su zablude o distribuiranom računarstvu?

Kada primijenite zahtjev / odgovor i kada objavite / pretplatite?

Pretpostavimo da sistem s kojim radite ne podržava transakciju. Kako biste ga implementirali ispočetka?

Pitanja o softveru za životnog ciklusa i ručni tim:

Šta je fleksibilnost (okretnost)?

Kako ćete raditi sa nasljeđem kodom?

Recite, ja sam vaš voditelj projekta, a ne stručnjak za programiranje. Pokušajte mi objasniti šta je naslijeđeni kod i zašto trebate pobrinuti za kvalitetu koda.

Ja sam izvršni direktor vaše kompanije. Objasnite mi Kanban i uvjeriti vas da uložite u njega.

Koja je glavna razlika između fleksibilnog razvojnog metodologije i kaskadnog modela?

Budući da je vođa grupe, kako riješite problem previše sastanka?

Kako ćete se nositi sa projektom koji se izvodi s jakim kašnjenjem?

"Ljudi i interakcija važniji su od procesa i alata" i "Saradnja s kupcem važnija je od usklađivanja uvjeta ugovora" je polovina vrijednosti proglašene u agilnom manifestu. Hajde da razgovaramo o njima.

Recite nam koje biste odluke poduzeli ako bi postojali tehnički direktor vaše kompanije.

Postoje li koristi od menadžera programa?

Napravite radni raspored, koristeći fleksibilni raspored (koji je, bez instaliranog radnog vremena) i politike kamate "Uzmite kad vam treba".

Kako biste se bavili vrlo velikom nastavom i uvjerili programere da ne napuštaju tima bez povećanja plaće? Kakva kompanija kompanija da li će ih učiniti da ostanu?

Koja su tri glavna kvaliteta koju cijenite u kolegama osim programiranja?

Koje su tri glavne stvari o programiranju potrebno da znate humanističke znanosti, po vašem mišljenju?

Zamislite da vam kompanija pruža mjesec dana i budžeta za poboljšanje kvalitete svakodnevnog života vas i vaših kolega. Šta bi ti uradio?

Pitanja o logici i algoritmima:

Napišite FIFO red pomoću samo liko-hrpa. Zatim kreirajte liko za liko koristeći samo FIFO redove.

Napišite fragment koda da biste prelivili tampon.

Napišite faktorial sa krajnjim rekursijom.

Na bilo kojem jeziku napišite odgovor, koji odmah prikazuje unesene vrijednosti. Poboljšajte ga u RPN kalkulator.

Kako biste dizajnirali uslužni program za defragmentaciju?

Napišite program koji stvara nasumične lavirinte.

Napišite primjer kôd koji stvara curenje memorije.

Generiraju niz jedinstvenih slučajnih brojeva.

Napišite primjer jednostavnog sistema za prikupljanje smeća.

Na bilo kojem jeziku napišite jednostavan broker poruka.

Napišite vrlo jednostavan web server. Napraviti plan funkcija koje se moraju provoditi u budućnosti.

Kako sortirate datoteku od 10 GB? Kako dolazite u promjene u datoteku od 10 TB?

Kako možete pronaći Duplicat datoteke putem?

Pitanja o arhitekturi na:

Kad keš nije potreban, pa čak i štete?

Zašto arhitektura orijentirana na događaj poboljšava skalabilnost?

Šta čine kôd čitljiv?

Koja je razlika između dizajna razvoja (nastavak dizajna) i evolucijske arhitekture?

Horizontalno i vertikalno skaliranje: šta se razlikuju? Kada primijeniti jednu stvar, a kad je drugi?

Kako raditi sa presretanjem kontrole u neuspjehu (neuspjeha) i korisničkih sesija?

Šta je CQRS (Odgovornost naredbe)? Kako se razlikuje od starog načela odvajanja naredbenog upita?

Koja je arhitektura s tri nivoa?

Kako ćete dizajnirati softverski sistem sa skalabilnošću?

Koje strategije za rješavanje problema C10K?

Kako dizajnirate decentralizirani (I.E. bez centralnog servera) P2P sistem?

Zašto CGI ne skalira?

Kako štitite svoje sustave od vezivanja na dobavljača (ugradnja dobavljača)?

Koji su nedostaci predloška dizajna "Izdavač-pretplatnik" prilikom skaliranja?

Šta se dogodilo od 80-ih u razvoju procesora, zašto je važno za programiranje?

U kojoj fazi životnog ciklusa treba razmotriti performanse i kako?

Kako se problem zatajenja za odbijanje ne može pojaviti zbog DOS napada, već zbog lošeg dizajna ili zbog problema arhitekture?

Kakav je odnos između performansi i skalabilnosti?

Kada je prihvatljivo koristiti snažan angažman (uska spojnica)?

Koje su karakteristike trebate biti postavljeni sistem da ode u oblak?

Da li jedinstvo dizajna zemlje arhitekata? Jednostavno stavlja: Može li dobar dizajn nastati iz kolektivnih napora svih programera?

Koja je razlika između dizajna, arhitekture, funkcionalnosti i estetskih kvaliteta? Hajde da razgovaramo o tome.

Pitanja o uslužnoj arhitekturi i mikroservisu:

Zašto se u DEA duge transakcije ne potiču, a umjesto toga pozvani su da koriste Sagu?

Koja je razlika između SOA i Microservice?

Razgovarajmo o broju verzija web usluga, verzije kompatibilnosti i kritičnim promjenama koje prekidaju kompatibilnost unatrag.

Koja je razlika između transakcije i kompenzacije operacije u Sagi, u SOA?

Kada je previše mikroservice mikro?

Koji su prednosti i nedostaci mikroservisnog arhitekture?

Sigurnosna pitanja:

Kako napisati siguran kod? Prema vašem mišljenju, da li je odgovornost programera ili bi to trebao biti zaseban stručnjak u kompaniji? I zašto?

Zašto kažete da ne biste trebali pokušavati izmisliti ili dizajnirati vlastite kriptografske pravila?

Koja je dvofaktor autentifikacija? Kako to implementirate u postojećoj web aplikaciji?

Ako se ne bavite zapisnicima pažljivo, uvijek postoji rizik da će povjerljive informacije doći tamo, uključujući lozinke. Kako spriječite takav problem?

Napišite isječak koda podložan SQL ubrizgavanju i ispraviti je.

Kako mogu naći ranjivost za SQL-ubrizgavanje metodom statičkog analize koda? Ne čekam da ćete napisati gotov algoritam, jer je prevelik, ali razgovarajmo o općem pristupu.

Šta znate o skriptu unakrsnog mjesta? Ako se ne sjećate, pogledajmo njegov opis na Internetu i razgovaraj o tome.

Šta znate o prekrižnom upita lažnom? Ako se ne sjećate, pogledajmo njegov opis na Internetu i razgovaraj o tome.

Kako HTTPS radi?

Koji je napad "čovjek u sredini"? I zašto HTTPS pomaže u zaštiti protiv njega?

Kako možete spriječiti krađu korisničkog sesije? Najvjerovatnije, sjećate se šta je krađa sesija ili kolačići, u protivnom smo čitali stranicu Wikipedia zajedno na ovu temu.

Opća pitanja:

Zašto je važno funkcionirati programiranje? Kada trebam koristiti jezik funkcionalnog programiranja?

Kako se kompanije poput Microsofta, Googlea, Opera i Mozille zarađuju na njihovim preglednicima?

Zašto se otvaranje TCP utičnice ima velike nadzemni?

Šta je važno koristiti enkapsulaciju?

Koji je sistem u stvarnom vremenu i kako se razlikuje od običnog sistema?

Kolika je veza između programskih jezika u stvarnom vremenu i raspodjelu memorije u hrpi?

Nepromjena je praksa jedinstvene postavke vrijednosti u trenutku kreiranja objekta, a ove vrijednosti se tada nikada ne mijenjaju. Kako je nepromjenjiva pomoć u pisanju sigurnijeg koda?

Prednosti i nedostaci promjenjivih i nepromjenjivih vrijednosti.

Što je objektno-relacijski jaz (neusklađenost objektno-relacijskog impedancije)?

Koje principe se prijavljujete za određivanje veličine predmemorije?

Koja je razlika između TCP-a i HTTP-a?

Koji su kompromisi odabira prikazivanja na strani klijenta i na strani poslužitelja?

Kako razviti pouzdan komunikacijski protokol zasnovan na nepouzdan?

Izumi nula pokazivača Tony Hoar jednom je rekao "Mogu ga nazvati greškom milijarde dolara", jer će privući "bezbroj greške, ranjivost i sistemske propuste, što je u proteklih četrdeset godina prouzrokovalo patnju i štetu milijardu dolara u posljednjih četrdeset godina . " Pretpostavimo da želite ukloniti mogućnost korištenja nulte pokazivača u vašem programirskom jeziku: kako odlučujete takav zadatak? Koje posljedice mogu imati?

Otvorena pitanja:

Zašto se ljudi odupiruju promjenama?

Objasnite koncept niti sa svojom bakom.

Kao programer, istovremeno želite i primijenite inovacije i budite predvidljivi. Kako ta dva cilja mogu postojati zajedno u istoj drugoj u istoj strategiji?

Šta dobro čini dobar kod?

Objasnite kako se provodi emitiranje za streaming i kako ga implementirate.

Pretpostavimo da vam kompanija daje jednu sedmicu da poboljšate život za vas i vaše kolege: kako koristite ove sedmice?

Šta ste saznali za prošlu sedmicu?

U bilo kojem dizajnu postoji estetski element. Pitanje je, ova estetika je vaš prijatelj ili neprijatelj?

Navedite poslednjih pet knjiga koje čitate.

Kako implementirate kontinuirani pristup isporuci u velikom uspješnom društvu, za koji prelaz iz kaskadnog modela u kontinuirani pristup opskrbi nije trivijalan zbog svoje veličine i poslovne složenosti?

Kada ima smisla izmisliti točak?

Hajde da razgovaramo o izumu točkova iznova, sindrom odbacivanja tuđeg razvoja i prakse korištenja kompanije ili tima programera vlastitih usluga i proizvoda (jesti vlastitu hranu).

Šta prvo automatirate u trenutnom tijeku rada?

Koje su poteškoće u pisanom obliku softver? Ono što otežava podršku softvera?

Da li više volite raditi na potpuno novim projektima (greenfield) ili nastavite sa trenutnom (Brownfield)? Zašto?

Šta čini operativni sistem kada ne postoji naredba za izvršenje određenog koda i izgleda nezauzeto? Želio bih započeti razgovor o prekidima, demonima, pozadinskim uslugama, anketama, obradi događaja itd.

Objasnite unicode ili transakcije u DBMS-u petogodišnje bebe.

Daju argumente u korist monolitne arhitekture.

Šta znači biti "profesionalni programer"?

Programiranje je umjetnost, zanat ili inženjering? Vaše mišljenje.

Zašto su korporacije još gore uvođenje inovacija nego startupe?

Posljednji dostignuća na vas se ponosni?

Pitanja sa fragmentima koda:

Koji je rezultat izvršenja ove funkcije JavaScript?

Funkcija Courpevents () (za (var i \u003d 0; i< 3; i++) { document.getElementById("button" + i) .addEventListener("click", function() { alert(i); }); } }
Šta je sa brisanjem tipova, koje će dati takav Java kod i zašto?

ArrayList. Li \u003d novi arraylist (); ArrayList. Lf \u003d novi arraylist (); if (li.getclass () \u003d\u003d lf.getclass ()) // evaluira na True System.out.println ("jednak");
Možete li otkriti curenje memorije?

Javna klasa (privatni elementi objekta; privatna int veličina \u003d 0; privatni statički finalni int radujed_initial_capacity \u003d 16; javni snop (elementi \u003d novi objekt (objekt E) (eSsureCapacity (); Elementi \u003d E; Javni objekt POP () (ako (veličina \u003d\u003d 0) Bacite novim ExtestStackexception (); povratni elementi [- veličina];) / ** * Prostor za esure za barem još jedan element, otprilike * udvostručenje kapaciteta svaki put kada je potrebno rasti. * / privatno nevažeće objektKapacitet () (ako (elementi.Length \u003d\u003d Veličina) elementi \u003d array.copyof (elementi, 2 * veličina + 1);))
Možete li se riješiti prekidača i napisati više objektni orijentirani kod?

Formatter javne klase (privatna usluga; Javni rezolucija (usluga;) Javni gudački niz (string TheInput) (string reaxt \u003d servis.askForkMission (); prekidač (slučaj ": Povratak" Greška "; Case" OK "; : povratni string.format ("% s% s", theinput, theinput); zadano: povratna null;)))
Možete li se riješiti ako operateri i napišite više objektni kodeksa?

Javna klasa TheService (privatni završni FileHandler FileHandler; Javna TheService (FileHandler FileHandler) Fooreporitoryler \u003d FileHandler \u003d WOREPoritory;) Javni niz Execute (Final String RewRittenUrl \u003d Filehandler.getxmlfileFromfilename (datoteka); FinancRing Eximeed \u003d FileHandrmLedLeeeextionIdFromFilename (datoteka); ako ((exwimesid \u003d\u003d "")) (povratak ";) FOO FITNFOO \u003d FOOROPority.getFoobyxmlfilename rewritsert ); ako (PoznatiFOO \u003d\u003d NULL) (povratak "";) povratni spojFoo.dothat (datoteka);))
Kako napraviti refaktor takvog koda?

Funkcija () (HRESULT ERROR \u003d S_OK; IF (uspio (rad1 ()) (ako (rad2 () (uspjeh3 (rad3 (ERROR \u003d operacija4Fised;)) Operacija3failed;)) drugo (greška \u003d operacija2failed;)) drugo (greška \u003d operacija1failed;) povratna greška;)

Back-End Developer (sa engleskog. Povratni (obrnuti strana) programer) Ovo je specijalista koji se bavi softver-administrativnim dijelom web aplikacije, internog sadržaja sustava, tehnologije servera - bazu podataka, arhitekture, softverske logike. Profesija je pogodna za one koji su zainteresirani za računarske nauke (vidi izbor profesije za interes za školske subjekte).

Bec-End Developer je nevidljivi prednji borac.

Moderne web stranice, web aplikacije i igre postali su vrlo složeni, pa čitav tim stručnjaka radi na njima. Da biste stvorili potpunu, prekrasnu, funkcionalnu i korisničko mjesto, potreban je dosljedan rad prednjeg i pozadinskog programera. Ovo je brz posao za kreiranje web stranice ili web aplikacije i olakšava njenu uslugu.

Figurativno govoreći, povratni razvoj je stvaranje automobila automobila, dok je razvoj prednjeg kraja stvaranje dizajna i funkcija upravljačke kontrole stroja. Stražnji krajnji programer radi u bliskoj vezi s programerom za prednji devenji, primanje podataka korisnika iz IT-a i vraćajući rezultirajuće rezultate.

Osnovni alati Back End Developer - programski server Jezici: kao što su PHP, Python, Ruby, Java, Perl, čvor js (softverska platforma). Pored čvora JS, korisno je naučiti Express (biblioteka za interakciju čvora JS platforme sa serverom) i mongo db (baza podataka za dobivanje i pohranjivanje podataka).

Kao dodatna sredstva Simfony, kodozni centar, YII, ZED okvir, Kohana itd. Koriste se za pohranu podataka pomoću MySQL / SQLITE-a.

Značajke profesije

Moderni programeri ne samo napisati kod za programe. Tako su radili programeri prije 10-15 godina. Trenutno je takav izraz neprikladan, jer u radu često je moguće učiniti bez koda za pisanje, jednostavno povezivanje gotovih dijelova u jednu konfiguraciju. I programeri se sada nazivaju "programerom" ili "inženjer".

Razvoj IT-sfere projekti postaju sve složeniji i dizajner su koji se mogu prikupiti koristeći gotove rješenja (okvira) za gotovo sve zadatke.

Dakle, pro-krajnja funkcionalnost programera izgleda ovako:

  • dizajn servisne arhitekture;
  • izrada jezgre mjesta;
  • razvoj platforme i glavnog funkcionalnog;
  • rad sa arhitekturom koda;
  • razvoj aplikacija koji podržavaju korisničko sučelje i sigurnost;
  • kontrola nad državom servera (borba, test i radnika);
  • kontrola verzija, baza podataka, kontinuirana integracija.

Profesionalne profesije

Visoko plaćanje i tražena struka.

Mjesto rada

Kompanije za razvoj stranice, web aplikacije, mobilne aplikacije.

Važne kvalitete

  • analitički um
  • logično razmišljanje
  • inicijativa
  • sposobnost planiranja i praćenja planova
  • teamske vještine
  • fleksibilnost razmišljanja
  • odgovornost, upornost, svrhovitost
  • usredotočite se na rezultat i kvalitet
  • Želja da kontinuirano proučavaju novu i njegovu primjenu u svom radu

Profesionalno znanje i veštine

Poznavanje barem jednog programskog jezika: Idite, C, C ++, Perl, Python, PHP, Ruby, Java.

  • sposobnost pisanja brzog, lijepog i ispravnog koda;
  • poznavanje popularnih web frienih sredstava (Django, tikvica, proljeće);
  • baze podataka za dizajn vještina i optimiziraju zahtjeve;
  • poznavanje modernih programskih paradigmi;
  • poznavanje obrazaca dizajna;
  • razumijevanje web usluga, sučelja;
  • hrvatski za čitanje tehničke dokumentacije.

Gdje naučiti iz pozadinskog programera

Vlakovi (lično, Moskva). Međunarodna obrazovna ustanova specijalizirana za računarsko obrazovanje. Radim od 1999. 42 podružnice u 16 zemalja svijeta. Najveći ovlašteni centar za obuku Microsoft, Cisco, Autodesk. Studenti primaju međunarodne certifikate i međunarodnu diplomu. Glavni cilj je zapošljavanje svakog diplomara.

Više obrazovanje:

Da bi postali pravi profesionalac u polju razvoja unazad, potrebno je imati osnovno obrazovanje profila, što se može dobiti na sljedećim univerzitetima:

Ali važno je zapamtiti da univerzitetsko osnovno obrazovanje postavlja temelj za obrazovanje, ali nedovoljno za trenutno znanje o moderne tehnologije. Stoga je samoobrazovanje važno u ovom području kako bi se u toplo sa svim novim tehnologijama i alatima. Ali, zauzvrat, nedostatak profilnog obrazovanja utječe na tog trenutka kada nešto prestane za rad, a osoba ne razumije - iz kojeg razloga. Specijalista sa fundamentalnim obrazovanjem, naravno, ne zna sve, ali on ima veliku veštinu - gde da pronađe i kako da koristi potrebna znanja.

Moderni poslodavci u pravilu ne nameću formalne uslove za više obrazovanje kandidati za ured. Za njih najvažnije iskustvo, inteligenciju, motivaciju stručnjaka.

Warry Plaćanje (koliko zarade za povratni krajnji deverti)

Plaća 16.09.2019

Rusija 40000-100000 ₽

Moskva 80000-300000 ₽

Karijera stepenica i perspektive

Sa položaja stražnjeg programera, nakon razvoja vještina prednjeg kraja programera, direktan put do programera u punoj stadi. Za daljnji rast potrebno je stalno učiti iz novog: studije detaljno o razvojnim tehnologijama softverski proizvodi, Konfiguracija i konfiguracija servisnih sistema.

Prelazi unutar odeljenja ponekad su različite povezane. Netko je jednostavno poznat da bi bilo kakve promjene karijere unutar jedne kompanije putem prizme objavljivanja postova. Netko ne smatra da je moguće promijeniti opseg aktivnosti, čak i ako je u susjednom trenutnom. Treće, u principu smo sigurni da prelazak sa Odjela u odjelu znači da osoba zauzima položaj "ili ribe, ni meso, a malo je vjerovatno da će postići nešto značajno.



Istovremeno, neki poslodavci ovo dobro slažu i smatraju da će nešto poput osigurača iz izgaranja - osoba će promijeniti fokus pažnje, promijenit će odjel ili odjel, ali neće promijeniti samo u cjelini.


Moje ime je Kostya, a ja radim u Qiwi skoro 4 godine. Danas ću vam reći koliko se uspješno prebacio sa frontend razvoja u pozadini.

Pocrtavati

U Qiwiju sam od kraja 2014. počeo raditi kao programer IOS aplikacija, a u principu su se nekoliko godina bavilo u razvoju Qiwija novčanika. Istovremeno, ne mogu reći da je to dosadno - zadaci su bili sasvim različiti i u istoj primjeni: bili smo bavili integracijom novčanika s drugim uslugama, osvećite bube. Pored toga, bilo je naprednog iskustva na kreiranju aplikacije za Apple Watch. Zatim se malo fokusirala i radila čak i preko IOS aplikacije za "savjest".



A onda sam se onda počeo da se krećem polako u leđa. U pogledu fleksibilne metodologije, čak je i prikladno - prebacio sam, u prvom sprintu mogao bih napraviti neke vrste bachenda zadataka, a u drugom za obavljanje integracije API-ja koji sam napisao.


Ali u pozajmljivanje je u to vrijeme bilo premalo programera i previše heftty bact, tako na kraju i dalje sam se i dalje prešao na pozajmljivanje u potpunosti. Ono što sada radim su klasični zadaci Bander-a - pišem kod u našoj Microservice, Chiny Bugi, bavio sam se refactionima, razumijem Kotlin. Postoji prilika za rad na svježem proizvodu kompanije - qiwi investitor.


Usput, ne mogu reći da se za ove dvije godine pokazalo nekako, hodao sam sprijeda, jasno sam shvatio da postoji i tamo gdje se razvijati. Na primjer, vidim šta se događa u ekipi Mobile Development, a razumijem da bih ostao tamo, nastavio bih dalje rasti s momcima.


Dakle, ovdje je postojala win-win situacija - hteo sam da pomognem timu i proizvodu (prednost u razvoju bila nije vrlo prema pozadinama) i steći nova znanja. Timlidi su sve razumjeli i pustili me da ne idu bez pritužbi, kao i proizvoda.


Pored toga, znanje koje sam želio diverzificirati da se ne pričvršćujem na jednu platformu (Android Ne volim malo, ali jabuka još uvijek daje položaj). Pa, postojala je želja u slučaju šta biti u mogućnosti da se poprimi i napravi aplikaciju za sebe (i prednju i podlogu), ako se iznenada pojavi neka vrsta cool ideja. Do sada, ipak nije bilo korisno.

Pokrenite se.


Naravno, prvi problem s kojim nailazite na takvu tranziciju su praznini u meču. U mom slučaju, to su bile suptilnosti rada sa bazama podataka, ali ovdje je pomoglo i sposobnost samoobrazovanja i tima - momci reagiraju i uvijek spremni da pomažu i objasne nešto detaljno. U Qiwiju, u principu, sa učenjem u bilo kojih faza, sve je u redu, da li ste barem Junior na samom početku posla, barem je to odlučiti i premjestiti sferu nekoliko godina kasnije.


Niko se nije iznervirao da prvi put očigledno ne radim tako učinkovito, jer je u puno bilo potrebno unijeti (ali dugoročno je tim još uvijek u pobjedi).


Naravno, imao sam malo iskustva u različitim područjima - mobilne igre i weme, ali sve je to bilo, radije, pokušava osjetiti svoje, umjesto da uvode praktično ozbiljno iskustvo.

Dojmovi o pozajmicama nakon frontenda

Nema posla sa ui. Uopšte. Prije toga morao sam ubiti vrijeme za ispravljanje bubica u ui, sada nema. Protiv takvog položaja - krajnji korisnik ne vidi rezultate konkretno mog rada, kao što je to bilo sprijeda. Pokušao sam utvrditi šta je teže - podržavanje ili spriječenje i shvatio da je (lično za mene) bilo teže da uvijek radi s multithreading i mrežnom snopom. I ovdje više nije toliko važno - vi ste za prednju ili za leđa. Ispred sam se prvi put naišao na takve zadatke, bez pripreme i na pozadini, sa bilo kojim iskustvom.


Moguće je steći iskustvo i učiniti nešto cool u bilo kojem području, postojala bi želja i preduvjeta, ovdje postoje prakse - da učinim nešto (i dobro) i da se dobro radi na dobrom i lako su radili. A za bazenik nije toliko kritičan prema prisustvu ili nepostojanju iskustva na frontu. Ako razvoj uzima u obzir sve sitnice, oklijeva na uglu i u cjelini razumije kako će njegov API koristiti, tada će to učiniti sve što bi trebalo.


Lakše mi je da otkrijem mogući problemi Samo zato što znam značajke implementacije naših mobilnih aplikacija. Ali ovo nije neka vrsta superonije - ovo je skup znanja da je bilo koji drugi prikupio, koji često radi sa frontovima.

To na kraju

Bazend-razvoj je postao još jedno dobro iskustvo - naučio sam pisati kod i revw, razmisliti o arhitekturi. Zapravo je zanimljivo.


Ali istovremeno pokušavajući živjeti da je prednja strana, neću reći da bi u slučaju da bi se baza odmah izabrala na samom početku karijere. Još uvijek mi je važno vidjeti i razumjeti kako moj proizvod opaža korisnike. Sa pozadinama, sve je prilično duhovno.


Najvjerovatnije, birajući sferu, otišao bih na gamedov ili web front. Web i dalje ostaje dobra platforma za lansiranje novih proizvoda, a istovremeno prestala biti užasna i teško je razumjeti. Svi ovi udžbenici iz špagete koda i povratnog poziva-pakao ostali su daleko iza, srećom.

Frontend je razvoj korisnički interfejs i funkcionalnost koja radi na klijentu stranu web stranice ili aplikacije. Ova vrsta razvoja može se pripisati svemu što korisnik vidi, otvarajući web stranicu. Frontend Developer sarađuje sa dizajnerima, programerima i UX analitičarima za stvaranje praktičnog i traženog proizvoda.

Da biste jasno shvatili koji je front-razvoj, otvorite stranicu bilo koje web lokacije - vidjet ćete sučelje pred sobom. Desnim klikom možete vidjeti kod ove stranice u pretraživaču.

Ovaj je kôd primjer frontend programera, preuzet je na korisnički pretraživač, a možete ga vidjeti vlastitim očima. Kod stranice opisuje sve što vidite ispred sebe: boje, raspored, fontove, lokaciju grafičkih elemenata i tako dalje.

Razvoj prekrivanja uključuje:

  • HTML (Hypertext markup jezik) - Jezik obilježavanja dokumenata, s kojim se formira struktura stranice: naslovi, odlomci, liste i tako dalje;
  • CSS (kaskadni stil limova) - Jezik za opis i stil vanjski prikaz Dokument. Zahvaljujući CSS kodu, vaš preglednik razumije kako prikazati elemente. CSS određuje boje i parametre fontova, određuje kako će se naći različiti blokovi web lokacija, tako i tako dalje. Takođe vam omogućava da iznosi isti dokument u različitim stilovima, na primjer, za ispis (konvencionalni ili brajični font), izlaz na ekranu ili čitanje glasa;
  • JavaScript. - Ovo je jezik koji je stvoren u cilju oživljavanja web stranica. Njegov zadatak je odgovoriti na korisničke akcije, rukovati klike na miš, pomaknite kursor, pritisnete tipke. Takođe šalje zahtjeve poslužitelju i učitava podatke bez ponovnog pokretanja stranice, omogućuje vam unošenje poruka i još mnogo toga.

Šta je back-razvoj?

Bazen-razvoj je skup hardverskih softvera, sa kojim se provodi logika stranice. Jednostavno gledano, ovo je ono što je skriveno od oka korisnika i javlja se izvan njegovog pretraživača i računara.

Na primjer, kada unesete zahtjev na stranici pretraživanja i kliknite tipku UćiPreokren se završava i započinje back. Vaš zahtjev se šalje na server. Google ili Yandexgdje se nalaze algoritmi za pretraživanje. Tu je da se dogodi sve "magija". Čim su podaci koje ste tražili, pojavio se povratak u frontend zona na monitoru.

Po i velikim, server je isti računar, samo snažniji. Pohranjuje podatke i odgovara na zahtjeve korisnika.

Pokretanje je proces kombiniranja poslužitelja s korisnikom.

Izrazitelj back-a može primijeniti sve alate dostupne na svom poslužitelju. Ima pravo odabrati bilo koji od univerzalnih programskih jezika, na primjer, Ruby, PHP, Python, Java.

Takođe za korišteni razvoj koji se koristi različiti sistemi Upravljanje baze podataka:

  1. Mysql;
  2. Postgresql;
  3. Sqlite;
  4. Mongodb.

Ovisno o vrsti proizvoda, sigurnosni razvojni dužnosti mogu se uvelike promijeniti. Takav specijalista može kreirati i integrirati baze podataka, osigurati sigurnost, kreirati tehnologije. rezervna kopija i oporavak.

Kako su frontend i BackEnd interakcija?

Frontend i BackEnd interakcije u krugu: Frontend šalje korisničke podatke u Bagend, obrađuje se i vraća natrag, uzimajući jasan oblik.

U pravilu su različiti stručnjaci uključeni u ove vrste rada, ali poželjno je razumjeti principe za koje kolege rade. Na primjer, dizajner sučelja je važan barem općenito uvjeti da znaju šta je backet projekta na koji je angažiran. To će mu pomoći da adekvatno cijeni ono što tehničke mogućnosti mogu biti na mjestu ili aplikaciji.

Postoji nekoliko opcija za interakciju frontend i back-a:

  • HTTP zahtjev se direktno šalje na poslužitelj, poslužitelj traži informacije, ugrađuje ga u predložak i vraća se kao HTML stranica;
  • Opcija pomoću alata Ajax (asinhroni JavaScript i XML). U ovom slučaju, zahtjev pošalje JavaScript.Preuzeto na pretraživač, a odgovor dolazi u XML ili JSON formatu;
  • Aplikacije za jednu stranicu koje preuzimaju podatke bez ažuriranja stranice. To se takođe radi kada aid Ajax ili Freymvorkov Kutni i ember.;
  • Ember. ili biblioteka Reagirati Pomozite u korištenju aplikacije i na poslužitelju i u klijentu. Frontend i BackEnd Interact putem Ajax i HTML kôda koji se obrađuje na poslužitelju.

Kao što vidimo, moderni razvoj je složen i višestrukostupanjski proces, koji je podijeljen u dva dijela: klijent i server. U arsenalnim programirima i backndsnd programerima postoji puno alata, čiji izbor ovisi o zadacima i složenosti projekta. Obje vrste razvoja uključuju tehničke i kreativne komponente.

Odgovornosti programera za fronte i back-a obično su podijeljene, ali postoje slučajevi kada programer mora riješiti probleme koji nastaju i na strani poslužitelja i u dijelu klijenta. Često na tržištu možete upoznati stručnjake koji se samouvjereno osjećaju i u frendu, a u pozadinskoj i mogu kombinirati dvije vrste posla.

Možete započeti svoj put u fronte i back-razvoju iz 12-mjesečnog posteljine. Pogodan je za pridošlice i programere sa malim iskustvom. Za godinu, studenti slušatelji u praksi će istražiti glavne programiranje jezika i stvoriti vlastiti portfelj koji će pomoći u pronalaženju obećavajućeg i dobro plaćenog posla.