Viime vuosina optimoitujen sovellusten ja verkkosivustojen rakentaminen on tullut kalliimmaksi, ja samaan aikaan myös laadukkaiden kehittäjien kysyntä on kasvanut.
Toisaalta kehittäjät rikastuttavat osaamistaan useammalla kuin yhdellä ohjelmointitaidolla ollakseen kilpailukykyisempiä markkinoilla, erityisesti fullstack-kehittäjät, joilla on aina suuri kysyntä.
Kysymys on edelleen: Mistä löytää loistavia fullstack-kehittäjiä ja miten palkata heidät tehokkaasti? Ensin aloitat voittavalla Fullstack Developer työpaikkailmoitus ennen mitään muuta.
Aloitetaan.
Mitä on fullstack-kehitys?
Fullstack-kehitys kattaa frontend- (asiakaspuolen) ja backend-sovelluskehityksen (palvelinpuolen). Fullstack-kehittäjät työskentelevät täydellisten verkkosovellusten, verkkosivustojen ja muiden ohjelmistojen suunnittelussa tyhjästä. He myös debuggaavat, suunnittelevat, koodaavat ja hallinnoivat kehitysprosessia. He ottavat tavallaan tiimin johtajan roolin, joka valvoo kaikkia kehityksen näkökohtia ja vaiheita.
Fullstack-verkkokehitykseen liittyy useita tekniikoita, ohjelmointikieliä ja kehyksiä, jotka jaetaan frontendiin ja backendiin.
Puretaan tämä alaspäin.
Frontend-tekniikat
Frontend viittaa sovelluksen osaan, joka on täysin näkyvissä käyttäjälle. Käyttäjä käyttää elementtejä etusivulla, ja tämä vuorovaikutus johtaa huonoon, hyvään tai erinomaiseen UX (käyttäjäkokemukseen) - riippuen sen laadusta, nopeudesta ja tehokkuudesta. Mutta suuri fullstack-kehittäjä kattaa ja optimoi kaikki kolme näkökohtaa.
Joitakin sovelluksen etusivun luomiseen käytettyjä kieliä ovat:
-
HTML + CSS: HTML tarkoittaa HyperText Markup Language ja CSS tarkoittaa Cascading Style Sheets. Ne muodostavat täydellisen yhdistelmän verkkosivustojen rakentamiseen ja saumattoman käyttäjäkokemuksen luomiseen monilla alustoilla, laitteilla ja selaimilla. HTML kertoo selaimelle, mitä näytetään, ja CSS kertoo, miten.
-
JavaScript: JavaScript on suosittu skriptikieli, jolla voidaan luoda, sijoittaa ja valvoa useita interaktiivisia elementtejä verkkosivustolla. Keskeinen JavaScript-paradigma yhdistää monia kehyksiä ja kirjastoja (Node.js, Vue.js, Next.js), joiden avulla voidaan luoda tarpeen mukaan huippuluokan sovelluksia, verkkosivustoja ja muunlaisia ohjelmistoja. Tämä kieli on laajalti sovellettavissa ja tärkeä osa sovelluskehitysprosessin sekä frontend- että backend-osiota.
-
TypeScript: Jos poistat tyypit, TypeScript muuttuu nopeasti JavaScriptiksi. Molemmilla on sama arkkitehtuuri, koska TypeScript on rakennettu JavaScriptin päälle, ja jos kehittäjä hallitsee toisen, hän hallitsee myös toisen.
Frontend-kehykset
Frontend-kielet "luottavat" kehysten ja kirjastojen tehoon parantaakseen sovelluksen toiminnallisuutta ja tehden kehittäjistä pitkällä aikavälillä tuottavampia. Joitakin merkittävimpiä frontend-kehityksen kehyksiä ovat:
-
Angular: Kaiken kaikkiaan Angularista on tullut enemmänkin alusta, jolla voidaan rakentaa laajamittaisia vankkoja, dynaamisia ja suorituskykyisiä sovelluksia, parantaa asiakaspuolen viestintää ja varmistaa päivitysten säännöllinen suorittaminen.
-
React.js: React.js on JavaScript-kehys, jota käytetään intuitiivisten käyttöliittymien rakentamiseen, ja se on yksi suosituimmista frontend-kehyksistä. Se on avoimen lähdekoodin ja tunnetaan parhaiten sovelluksen näkymäkerroksen käsittelystä tinkimättä sen laadusta, nopeudesta ja tehokkuudesta.
-
jQuery: Yksi jQueryn tärkeimmistä tehtävistä on yksinkertaistaa HTML-dokumenttien välistä tiedonvaihtoa eli DOM:n (Document Object Model) ja JavaScriptin välistä vuorovaikutusta. Tämä parantaa DOM-animaatioita ja tukee selaintenvälistä JavaScript-kehitystä.
-
Vue.js: Vue.js on JavaScript-kehys, joka on rakennettu JavaScriptin, CSS:n ja HTML:n päälle. Kehittäjät käyttävät tätä kehystä yksinkertaisten tai monimutkaisten käyttöliittymien rakentamiseen.
Backend-tekniikat
Sovelluksen tai verkkosivuston backend- tai palvelinpuoli käsittelee useita elementtejä, kuten muun muassa asianmukaista API-integraatiota, tietokannan hallintaa ja kyselyjen hallintaa. Joitakin merkittävimpiä backend-kehitykseen käytettäviä ohjelmointikieliä, kehyksiä ja kirjastoja ovat:
-
PHP: Pidetään yhtenä suosituimmista palvelinpuolen skriptikielistä, PHP on laajalti käytetty web-kehityksen backend. Kehittäjät käyttävät sitä mielellään dynaamisen sisällön rakentamiseen ja tiedostojen helppoon lukemiseen, kirjoittamiseen ja poistamiseen palvelimella, tietojen salaamiseen, käyttäjien käyttöoikeuksien hallintaan ja muuhun.
-
C++: C++ on joustava, oliopainotteinen ohjelmointikieli, joka optimoi verkkosivuston suorituskyvyn ja jättää ulkoasun ulkoasun ennalleen.
-
Python: Suosittuna ohjelmointikielenä Python on laajalti käytetty sen yksinkertaisuuden, helposti opittavan syntaksin ja useiden järjestelmien, selainten ja laitteiden saumattoman integroinnin vuoksi.
-
Java:** Kokeneella fullstack-kehittäjällä on mieluiten erinomaiset tiedot Javasta ja Java-koodin kirjoittamisesta tällä oliosuuntautuneella skaalautuvalla kielellä.
-
Node.js: On olemassa erilaisia määritelmiä siitä, mitä Node.js on, aina kehyksestä ajoympäristöön, mutta se on aina JavaScript-laajennus backend-palveluiden luomiseen, testaamiseen ja suorittamiseen.
Backend-kehykset
Backend-kehykset ovat olennainen osa fullstack-kehitystä, ja joitakin suosituimpia niistä ovat:
-
Django: Django on avoimen lähdekoodin Python-kehys erinomaisen web-suunnittelun ja -kehityksen toteuttamiseen. Se on nopea ja käyttää MTV:n arkkitehtuurimallia (model-template-view).
-
Laravel: Tämä on luotettava backend API Next.js-, mobiili- ja muille frontend-sovelluksille. Ja Laravel on PHP-kehys, joka käyttää MVC-arkkitehtuurimallia.
-
RoR: Lyhenne tulee sanoista Ruby on Rails, ja tämä on vankka backend-kehys, joka perustuu kieleen Ruby. Se perustuu JSONiin ja XML:ään tiedonsiirrossa sekä HTML:ään, CSS:ään ja JavaScriptiin UI (käyttöliittymä) vakauttamiseksi.
-
Kevät: Yhtenä Javan backend-kehyksenä Spring erottuu edukseen yksinkertaisella syntaksilla ja tehokkaalla toimintalogiikalla monimutkaisimpiinkin toimintoihin. Se auttaa kehittäjiä luomaan luotettavia ja nopeita sovelluksia POJO:iden (Java-objektien) avulla.
-
Express.js: Express.js edustaa Node.js-verkkokehityskehystä mobiili- ja verkkosovelluksia varten. Se renderöi sivuja dynaamisesti, määrittelee reititystaulukot ja suorittaa erilaisia HTTP-toimintoja.
Milloin tarvitset Fullstack-kehittäjää?
Fullstack-kehittäjille on huomattava kysyntä, koska he käyttävät useita hattuja kattaen sekä frontend- että backend-kehityksen näkökohdat. Sen myötä he tuovat erinomaiset ongelmanratkaisutaidot työhönsä.
Fullstack-kehittäjää tarvitaan kuitenkin, jos halutaan, että tuote luodaan tehokkaasti, mahdollisimman vähällä vaivalla, mutta se on erittäin toimiva - ja kehittäjät tekevät sen enimmäkseen yksin ilman merkittävää ulkopuolista tukea.
Fullstack-kehittäjä tuntee koko kehitysprosessin alkupisteestä loppupisteeseen tai alkuperäisestä ideasta toimivaan prototyyppiin. Tarvitset tällaisen teknisen asiantuntijan, koska yksi monitaitoinen henkilö on erinomainen investointi mille tahansa yritykselle. Yhden fullstack-kehittäjän palkkaaminen useiden teknisten asiantuntijoiden sijaan, jotka osaavat paljon vähemmän teknologioita, säästää aikaa ja rahaa pitkällä aikavälillä.
Lisäksi kun palkkaat laadukkaan fullstack-kehittäjän, he valvovat koko sitoumuksen työnkulkua itsenäisesti ja vähentävät väärinkäytösten todennäköisyyttä sovelluskehityssyklin tiukoissa ja ratkaisevissa vaiheissa.
Kerrataanpa vielä kerran:
- He ovat monipuolisia tekniikan asiantuntijoita taitavia frontendissä ja backendissä.
- Ne toimittavat luotettavaa ja vankkaa koodia.
- Heillä on useiden vuosien kokemus eri aloilta ja markkinarakoista.
- He voivat helposti vaihtaa rooleja lennossa (vanhempi, debuggeri, projektinjohtaja ja muut).
- He ovat kustannustehokkaita teknisiä asiantuntijoita.
- Heillä on hyvät tiedot menneisyydestä, nykyisyydestä ja mahdollisista tulevista kehityssuuntauksista.
Mistä löytää fullstack-kehittäjiä?
Voit löytää fullstack-kehittäjiä eri paikoista, kuten freelancer-alustoista, sosiaalisesta mediasta, koodivarastoista, suusanallisista suosituksista ja ohjelmointisivustoilta. Näissä vaihtoehdoissa sinun on kuitenkin tehtävä kaikki tutkimukset itse tai yrityksen sisäisten rekrytoijien kanssa.
Sen sijaan oletetaan, että haluat säästää aikaa ja välttää riskin, että palkkaaminen pitkittyy ja venyy. Siinä tapauksessa voit aina käyttää palveluita, jotka yhdistävät sinulle työvalmiita kehittäjiä vain muutamassa päivässä, kuten Proxify, jossa me myös takaamme kehittäjien taustan ja heidän teknisen tietämyksensä, joten sinun ei tarvitse tehdä kaikkea itse.
Fullstack-kehittäjien haastattelu
Tässä on tarkistuslista teknisistä taidoista, jotka Fullstack-kehittäjän on osattava, sekä joitakin haastattelukysymyksiä ja vastauksia, joita voit käyttää arvioinnissa.
Yleinen fullstack-tietämys
Kokenut fulllstack-kehittäjä tuntee tietorakenteet, algoritmit, ohjelmointikielten teorian ja verkkoaiheet, kuten OSI/RM- ja TCP/IP-protokollamallit.
Lisäksi he osaavat työskennellä vähintään kolmella eri ohjelmointikielellä ja pystyvät osoittamaan todellisia esimerkkejä aiemmin tehdyistä toimeksiannoista.
Viimeisenä mutta ei vähäisimpänä, heidän on testattava ja debugattava tehokkaasti.
Tekniset taidot
Lyhyesti sanottuna heidän on yhdistettävä joitakin (tai suurin osa) seuraavista taidoista:
- HTML, CSS
- JavaScript, TypeScript
- React.js, Angular, Vue.js, Next.js, jQuery.
- Node.js, Express.js.
- Java, Spring
- Python, Django, Flask
- C++, C#
- PHP, Laravel
- Perl
- Ruby, Ruby on Rails
Mutta niiden tulisi ennen kaikkea osoittaa poikkeuksellista osaamista:
- Miten HTML ja CSS toimivat, erikseen ja yhdessä.
- HTML-koodi pintapuolisesti
- Suurin osa JavaScript-kehyksistä ulkoa.
- Java ja useimmat sen kehykset (Spring, Spring Boot).
- Tunne Pythonin kehykset erinomaisesti (Django, Flask).
C++
- Tietokannat (kuten MongoDB, PostgreSQL, MySQL).
- Versiohallintajärjestelmät (kuten Git ja GitHub).
- Pilvipalvelualustat (kuten Heroku, AWS, Google Cloud ja Microsoft Azure).
Haastattelukysymykset ja vastaukset fullstack-kehittäjien arviointia varten
Voimme jakaa kysymykset yleisiin ja erityisiin.
Yleisiä kysymyksiä
1. Mistä ohjelmointikielistä sinulla on eniten kokemusta?
Esimerkki vastauksesta: Minulla on eniten kokemusta sovellusten rakentamisesta Pythonilla, Djangolla ja Vue.js:llä, mutta minulla on myös merkittävää kokemusta JavaScriptistä, SQL:stä ja Rustista. Pidän kuitenkin käyttöjärjestelmäriippumattomuudesta, joka liittyy tähän kokonaispakkaukseen, sillä voin aina olla varma, että sovellukseni ovat yhteensopivia nykyisin suosituimpien käyttöjärjestelmien kanssa.
2. Mikä on suosikkisi tai useimmin käyttämäsi ohjelmointikieli?
Huomautus: Haastattelijan on tässä yhteydessä suhtauduttava avoimin mielin hakijan vastauksiin. Kehittäjä voi ehdottaa eri ohjelmointikieltä kuin mitä haastattelija oli ajatellut.
Esimerkki vastauksesta: Alusta asti olen pitänyt Pythonin kanssa työskentelystä. Sen syntaksi on hyvin intuitiivinen ja sen oppimiskäyrä on loiva (helppo oppia, vaikea hallita), ja se tarjoaa erilaisia kirjastoja ja kehyksiä, jos haluat laajentaa toimintamahdollisuuksia tinkimättä lopullisen sovelluksen laadusta.
Vain yhden suositun ohjelmointikielen valitseminen fullstack-kehitykseen on vaikeaa, joten lisäisin myös Node.js:n ja C#:n. Node.js sopii erinomaisesti skaalautuvuuteen, suorituskyvyn lisäämiseen ja on kustannustehokas. Samalla C# nopeuttaa kehitysprosessia, toimii skaalautuvasti ja on helppo ylläpitää. Fullstack-kehittäjän roolissa kaikki nämä hyödyt yhdistettynä vaikuttavat pitkälle ja tekevät työstämme helpommin lähestyttävää ja tehokkaampaa erinomaisen lopputuloksen aikaansaamiseksi.
3. Millä tekniikoilla voisit rakentaa sovelluksen tyhjästä?
Esimerkki vastauksesta: Asiakaspuolen kehityksen osalta suosin perusasioita eli HTML:ää, CSS:ää, JavaScriptiä ja ehkä TypeScriptiä. Tietokantakyselyjen ratkaisemiseksi MySQL:n pitäisi hoitaa homma. Käytän mieluummin Pythonia ja Djangoa tai LAMP-pinoa monimutkaisempiin tehtäviin. Luotan myös Gitiin ja Githubiin helpottaakseni synkronointia muiden fullstack-kehittäjien kanssa.
4. Mitkä viimeaikaiset fullstack-kehitystrendit ovat yllättäneet sinut?
Vastausesimerkki: Minua kiehtoo NFT:iden (non-fungible tokens) nousu (ja mahdollinen tuho). Aikaisemmin ohjelmointia ja taidetta pidettiin yleensä kahtena erillisenä tieteenalana. Nykyään tuntuu siltä, että rajat hämärtyvät päivä päivältä. Esimerkiksi NFT-kokoelman luomiseksi sinun on oltava kunnon ohjelmoija, jolla on ainutlaatuinen taiteellinen ote. NFT-maailma (ja kryptovaluutat yleensä) voivat joko nousta lentoon tai romahtaa näyttävästi ilman varoitusta, jota ajattelen aina silloin tällöin.
Tämän lisäksi on myös mainitsemisen arvoisia asioita, kuten tekoäly, jossa esitellään monia uusia työkaluja, jotka auttavat (lähes) kaikkia tekemään työnsä paljon aiempaa tehokkaammin.
5. Tekivätkö työtoverisi koodausvirheitä? Mitä sinä teit?
Huomautus: Haastattelijan tulisi olla valmis kuulemaan kehittäjän mahdollisen vastauksen, koska tämä on jokseenkin henkilökohtainen mielipidekysymys.
Esimerkki vastauksesta: Kyllä. Kerran työskentelin kollegani kanssa JavaScript-komennuksen parissa, eikä koodi kääntynyt oikein. Kävin sen manuaalisesti läpi ja huomasin, että he käyttivät sulkuja, kun olisi pitänyt käyttää sulkeita, mutta autoin korjaamaan virheen.
6. Miten rakennat SEO-ystävällisiä verkkosovelluksia?
Esimerkkivastaus: Käytän erinomaista peruskieltä (Python) yhdistettynä nykyiseen kehykseen (Django) tehokkuuden ja nopeuden saavuttamiseksi. Verkkosovellusten rakentaminen tarkoittaa, että sinulla ei ole ylellisyyttä "hamstrata" käyttämättömiä resursseja, jotka vievät tarpeetonta tilaa ja hidastavat koko työnkulkua. SEO:ssa on kyse nopeista latausajoista (käyttäjät yleensä klikkaavat pois, jos sivusto ei lataudu noin kahdessa tai kolmessa sekunnissa), joten yritän käyttää kevyttä lähestymistapaa ja ratkaista SEO:n ennen kuin sitoutuminen alkaa.
7. Miten vianmääritys tehdään haastavissa ohjelmissa?
Esimerkki vastauksesta: Yksi menetelmä, jota käytän toistuvasti (ja joka on mielestäni tehokkaampi kuin kehittäjät yleensä antavat sille tunnustusta), on niin sanottu "kommentointi pois" -menetelmä. Kun epäilen, että virheellinen koodinpätkä häiritsee muuta työnkulkua, kommentoin kyseisen koodin pois ja käännän sitoumuksen uudelleen. Jos ongelma jatkuu, siirryn selainpohjaisiin debuggereihin web-projekteille (Firefox ja Chrome) tai työpöytäpohjaisiin debuggereihin Windows-projekteille (Visual Studio Debugger).
8. Mikä on yleinen haaste fullstack-kehityksessä ja paras tapa ratkaista se?
Esimerkki vastauksesta: Ilmeinen on tasapainon saavuttaminen frontendin ja backendin välillä ja niiden hyvä hallinta. Tämän toteuttaminen voi olla haastavaa, koska eri kehittäjät työskentelevät saman sitoumuksen muiden asioiden parissa, joten tiimin jäsenten välinen synkronointi on syynä tähän tilanteeseen.
9. Mikä on paras tapa optimoida SQL-kyselyitä?
Vastausesimerkki: Näiden kyselyjen optimoimiseksi meidän on tunnistettava parhaat tekniikat SQL-kyselyn suorituskyvyn parantamiseksi. Joitakin parhaita tekniikoita ovat:
- SELECT-kysely SELECT*:n sijasta.
- Indeksointi
- Taulukon peitenimet
- Ei paljon käytettyjä JOINeja
- Alikyselyt
- Jokerimerkit
- Tietokannan suunnittelun optimointi
10. Voitko määritellä Callback Hellin?
Esimerkki vastauksesta: Callback Hell edustaa anti-kuviota, jonka näemme asynkronisessa ohjelmointikoodissa (periaatteessa kun monta funktiota suoritetaan samanaikaisesti). Callback Hell tunnetaan myös nimellä Pyramid of Doom, ja pohjimmiltaan nämä sen nimet viittaavat moniin sisäkkäisiin "if"-funktioihin tai -lausekkeisiin. Tässä tilanteessa on kyse siitä, että monet asynkroniset funktiot ovat olemassa samanaikaisesti ja riippuvaisia toisistaan.
Tämä voi aiheuttaa sotkua, koska monet takaisinkutsufunktiot ovat kaikki kerroksittain ja sisäkkäin. Kun siis käytämme takaisinkutsufunktioita, jäljelle jää koodi, jota on lähes mahdoton ylläpitää tai lukea ja joka muistuttaa myös pyramidin muotoa. Sovelluksen kulkua ei myöskään voi helposti tunnistaa, ja kaikki tämä on virheenkorjauksen este - siksi tämän anti-kuvion helvetilliset lauseet.
Erityiskysymykset
1. Tunnetko suunnittelumallit? Miten olette käyttäneet niitä toimeksiannoissa?
Esimerkki vastauksesta: Yleisesti ottaen suunnittelumallit ovat lähestymistapoja tietyn ohjelmistotekniikan haasteen ratkaisemiseen. Olen käyttänyt luovia ja rakenteellisia suunnittelumalleja aiemmissa toimeksiannoissani suurella menestyksellä. Olen käyttänyt Singleton-, Flyweight- ja Bridge-suunnittelumalleja.
2. Mitä eroa on rajapinnan ja abstraktin luokan välillä?
Esimerkki vastauksesta: Rajapintaluokkien avulla voit vain ilmoittaa luokan toiminnallisuuden, mutta et toteuttaa sitä. Abstraktien luokkien avulla voit toteuttaa toiminnallisuuden nopeasti alaluokkien avulla.
3. Miten määrittelisit RESTful API:n?
Esimerkki vastauksesta: RESTful API on eräänlainen rajapinta, jota kaksi tietokonetta (yleensä asiakas ja palvelin) käyttävät kommunikoidakseen verkossa. RESTful API hakee tietueen GET-pyynnöllä, luo tietueen POST-pyynnöllä ja poistaa tietueen DELETE-pyynnöllä.
4. Mitä ratkaisua ehdotat estämään botteja kaapimasta julkisesti tunnettua API:ta?
Esimerkki vastauksesta: On olemassa pari tapaa tehdä tämä. Voit esimerkiksi vaatia käyttäjiltä käyttäjätunnuksen ja salasanan (tilin luomiseksi), jotta he pääsevät käsiksi sivuston sisältöön. Voit myös rajoittaa, kuinka monta kertaa yksi käyttäjä voi tehdä pyyntöjä käyttämällä samaa IP-osoitetta.
5. Mitä eroa on CSS:n normalisoinnilla ja nollaamisella?
Esimerkki vastauksesta: Normalisointi poistaa vain rajoitetun määrän muotoiluja, jotka selaimet siirtävät sivun elementteihin. Nollauksen yhteydessä kaikki oletustyylit poistetaan.
6. Mitä eroa on sinivihreällä käyttöönotolla ja rullaavalla käyttöönotolla?
Esimerkki vastauksesta: Rullaavassa käyttöönottostrategiassa ei ole useita staging-ympäristöjä. Se ottaa päivitykset käyttöön vain tarpeen mukaan. Sinivihreä käyttöönotto käyttää kahta käyttöönottostrategiaa: sinistä ja vihreää. BG-käyttöönottostrategian sinisessä vaiheessa sitoumukselle tehdään laadunvarmistus ja testaus tarpeen mukaan. Vihreä vaihe hoitaa liikennettä, kunnes kaikki sinisen vaiheen toimet on suoritettu asianmukaisesti.
7. Kuinka monta erilaista suunnittelumallia on olemassa?
Esimerkki vastauksesta: Niitä on kolme: rakenteelliset, käyttäytymiseen liittyvät ja luomisperäiset. Rakenteelliset mallit lisäävät koodissa olevien luokkien toiminnallisuutta ilman merkittäviä muutoksia koostumukseen. Käyttäytymisluokat ovat riippuvaisia luokkien välisestä kommunikaatiokyvystä. Luomismallit on tarkoitettu luokkien instantiointia varten. Ne jaetaan edelleen objekti-creational objekti-creational ja luokka-creational kuvioihin.
8. Mitä eroja on RESTin ja GraphQL:n välillä?
Esimerkki vastauksesta: GraphQL on palvelinpuolen teknologia, joka suorittaa kyselyjä tietojen saamiseksi. REST on arkkitehtuurityyli, joka rajoittaa verkkosovellusten luomista. Lisäksi GraphQL käyttää skeemaa, kun taas REST luottaa suorittamiseensa useisiin päätepisteisiin.
9. Miten lyhentäisit verkkosovelluksen latausaikaa?
Esimerkki vastauksesta: Muutamalla tavalla. Ensin voit pakata kuvat ja siirtää tyylitauluviitteet HTML-sivun alkuun. Seuraavaksi voit siirtää skriptiviittaukset HTML-sivun loppuun. Lopuksi voit erottaa JavaScript- ja CSS-koodin toisistaan ja sijoittaa ne HTML-päädokumentin ulkopuolelle.
10. Miksi CSS:ssä pitäisi poistaa kellukkeet ja miten se tehdään?
Esimerkki vastauksesta: Voimme helposti sijoittaa elementtejä (useimmiten kuvia) niin, että sisältö virtaa niiden ympärillä kauniisti floattien avulla. Mutta kun teemme näin, tuloksena voi olla myöhempiä elementtejä kelluvien kohtien ympärillä, joten asettelu rikkoutuu huonosti. Tämän estämiseksi tyhjennämme kellukkeet, ja näin voimme hallita asettelua paljon paremmin. Nämä ovat mielestäni kaksi yleisintä ja suosituinta clearing floats -menetelmää:
- Clearfix on yleisin, joten meidän on sovellettava tekniikkaa "clearfix" pseudoelementin kautta. Meidän on ensin luotava näkymätön elementti, joka tyhjenee ja kelluu nopeasti. Odottakaa tästä lisää merkintöjä myös HTML:ään:
group::after {
content:"";
display:table;
clear:both;
}
11. Miten poistaisit tehokkaimmin ES6-massojen päällekkäisyydet?
Esimerkki vastauksesta: Yleisin ja paras tapa on käyttää joukkoa - se mahdollistaa ainutlaatuisten arvojen tallentamisen. Kun muunnamme joukon joukoksi, päällekkäiset arvot poistetaan tällä tavoin. Viimeinen vaihe on tehdä toinen muunnos, tällä kertaa asetetaan lajike kuten aiemmin, yksilöllisillä arvoilla.
12. Voitko määritellä ja erottaa toisistaan async/await ja Promises JavaScriptissä?
Esimerkki vastauksesta: Async/await edustaa Promisesin päälle rakennettua "syntaktista sokeria", ja se saa asynkronisen koodin muistuttamaan synkronista asynkronisten funktioiden ja avainsanan "await" käytön avulla.
13. Miten selittäisit funktioiden debounauksen JavaScriptissä?
Esimerkki vastauksesta: Kun meidän on lykättävä funktion suoritusta, tätä kutsutaan debounceksi. Teemme lykkäyksen estääkseen aikaa vievien tehtävien liian tiheän käynnistämisen. Yksi tapa debounce JavaScript-funktio on:
function debounce(fn, delay) {
let timeoutID;
return (...args) => {
clearTimeout(timeoutID);
timeoutID = setTimeout(() => fn.apply(this, argos), delay);
};
}
14. Mikä on Node.js:n moduulien, kuten http:n tai fs:n, tapahtumaobjektien tarkoitus?
Esimerkki vastauksesta: Node.js-moduulit käyttävät Event-objekteja lähettääkseen tapahtumia, jotka ilmoittavat tilamuutoksista, virheistä tai resurssien saatavuudesta. Tapahtumapohjaisen ohjelmoinnin on luotettava tapahtumaobjektien käyttöön skaalautuvien ja tehokkaiden sovellusten aikaansaamiseksi. Näin on erityisesti silloin, kun työskentelemme I/O-sidonnaisten työmäärien kanssa.
15. Mitä voisit sanoa muistivuodoista? Miten ne havaitaan, ratkaistaan ja estetään?
Esimerkki vastauksesta: Muistivuodot (RAM) edustavat sovelluksen osaa, joka käyttää tiettyä muistia, mutta ei koskaan vapauta sitä sen jälkeen. Kun sovellus käyttää paljon muistia eikä vapauta sitä, se kuluttaa muistivaraston loppuun jonkin ajan kuluttua. Aiemmin muistivuodot olivat yleisiä, kun kehittäjät käyttivät C++ ja C. Tämän havaitseminen ei ole kovin vaikeaa, koska ilmeisin merkki on se, ettei muistia ole tarpeeksi - järjestelmä hidastuu ja sovellus alkaa kaatua. Tämänkin estäminen ei ole kovin vaikeaa, tarvitsemme vain hyvän roskienkerääjän vapauttamaan muistia.
Fullstack-kehittäjän näkökulma
Sillä välin tiedustelimme fullstack-kehityksestä suoraan lähteeltä, kahdelta Proxifyn Fullstack-kehittäjältä, Martin Luckalta ja Dmitriy Zolotukhinilta**. Kysyimme keskeisistä teknologioista, välttämättömistä edellytyksistä, keskittyvätkö fullstack-kehittäjät pääasiassa backendiin vai frontendiin ja miten heidän pitäisi yleensä suhtautua oppimiseen.
Tässä on, mitä Martin sanoi aluksi,
"Fullstack-kehittäjä on ammattilainen (samanlainen kuin yksisarvinen), joka voi kehittää sovelluksen nollasta lopulliseen käyttökokemukseen asti. Siihen sisältyy kyky rakentaa backend- (palvelimeton tai palvelin täynnä tietokantoja) ja frontend-tuotteita (web tai sovellus).".
Hän ei myöskään pidättele pakollisten tekniikoiden osalta,
"Jos valitset serverless-ratkaisun, riittää pelkän frontend-teknologian käyttö - JavaScript/TypeScript, CSS, React (älä opettele Angularia, Vue.js:ää ja muita kehyksiä, jos niitä ei tarvita)", hän sanoo. "Jos valitset palvelintäytteisen, myös backend-kielten (Node.js + TS/JS, Java, C#, PHP) ja tietokantojen (SQL) tuntemus on tärkeää."
Martin toisti, että frontendiin tai backendiin on keskityttävä ja käytettävä aikaa,
"Yleensä fullstack on vain joukko taitoja, mutta useimmissa toimeksiannoissa se on erotettu toisistaan, ja sitten kehittäjä valitsee, mitä urapolkua hän haluaa kulkea. Pienissä toimeksiannoissa saattaa olla palvelimettomia ratkaisuja, joissa sovellettaisiin molempia tietämyksen osajoukkoja (siinä tapauksessa on hyvä olla jonkin verran pilvitietämystä - GCP/Firebase, AWS, Azure, Back4app)."."
Ja kaikille uusille tulokkaille, jotka saapuvat fullstack-kehityksen maailmaan, hän antoi tämän neuvon,
"Opi React ja React Native, koska uskon edelleen, että ne ovat markkinoiden tehokkaimpia työkaluja. Älä opettele vanhalla tavalla luokkien avulla, vaan opettele funktionaalinen tapa koukkujen avulla. Opettele TypeScript, sillä se antaa vakaan perustan mille tahansa sitoutumiselle. Opi ja harjoittele; paras tapa on tehdä oma projekti. Jos huomaat, että joissakin toimeksiannoissa käytetään vain JavaScriptiä ja luokkia eikä funktionaalista ohjelmointia ja TypeScriptiä, juokse pois mahdollisimman nopeasti."
Dmitriy, jakaa ajatuksiaan siitä, miten käyttää aikaa parhaiten ja keskittyä kehittämiseen,
"Todellisessa kehityksessä kokeile luoda oma sovellus ja käyttää uusia teknologioita, kehyksiä ja kirjastoja. Lue uusista teknologioista ja kokeile niitä, älä vain katso sivusta tai lue. Asenna ja käytä niitä."
Ja hän lisää, että on elintärkeää olla lähes identtisesti taitava backendissä ja frontendissä. Silti kehittäjät voivat mukauttaa huomionsa siihen, missä sitä eniten tarvitaan.