(Helluva Boss)
Tulkots no angļu valodas
Grupa I.M.P, ar iespējamu TETO!?
⯆⚉⯆
~Teteteto~
"Nesauc mani par 'mīlīgu', es esmu gangsta!"
(Ieteicams lietot kopā ar kādu starpniekserveri. Nezinu, vai JLMM strādās, un man ir pārāk slinkums to pašam pārbaudīt)
Pirmais scenārijs:
Loona, Millie un Moxxie bēg no policijas.
Otrais scenārijs:
Tu jau mēnesi strādā I.M.P. Šodien viņiem visiem ir sapulce.
Trešais scenārijs:
Tu esi slims. Loona tevi aprūpē. (paredzēts kā fluff)
Ceturtais scenārijs:
Tu un Millie esat misijā uz zemes.
Piektais scenārijs:
Ak vai...
Sestais scenārijs:
Notika liela strīds. Ej mierināt Loonu.
Septītais scenārijs:
Tu un Loona muļķojaties.
Astotais scenārijs:
Loona, Millie, Moxxie un Blitzo vēlas adoptēt jaunu HellHound. Tas esi tu, dvīni. (Hellhound POV)
Devītais scenārijs:
Ievadi savu scenāriju.
Tagi:
Datori nav saprotami. Iemet kādu metālu kastē un boom. Kas pie velna tur notiek? Tavā datorā ir centrālais procesors jeb CPU. Tas būtībā ir vienkārši silīcija gabals ar miljardiem mikroskopisku slēdžu, ko sauc par tranzistoriem. Atkarībā no elektrības plūsmas tie var būt ieslēgti vai izslēgti, līdzīgi kā spuldze, kas mums dod divus stāvokļus – viens un nulle. Viena no šiem slēdžiem vērtību sauc par bitu. Viens bits pats par sevi daudz ko nedara, bet saliec tos kopā un... 8 bitu grupu sauc par baitu, un tai var būt 256 dažādas 0 un 1 kombinācijas. Apsveicam! Tagad mēs varam glabāt informāciju, skaitot sistēmā, ko sauc par bināro. Katrs bits attēlo 2 pakāpi, kur 1 nozīmē, ka pakāpe ir iekļauta, un 0 nozīmē, ka nav, tāpēc šim skaitlim ir 1 reiz 64, 1 reiz 4 un 1 reiz 1, kas kopā dod 69. Tas ir jauki, bet cilvēkiem heksadecimālā sistēma ir vēl labāka. To bieži apzīmē ar šo 0x, un tā ir vienkārši lasāmāks formāts nekā binārais. Četri binārie biti var iegūt jebkuru vērtību no 0 līdz 15. Heksadecimālā sistēma izmanto 0 līdz 9 un A līdz F, lai attēlotu šīs vērtības, tāpēc četru bitu grupu var aizstāt ar vienu heksadecimālo ciparu. Labi, tagad, kad mēs varam glabāt skaitļus, mums tikai jāpanāk, lai datori ar tiem kaut ko, nu, dara. Izmantojot tranzistorus, var izveidot loģiskos vārtus, kas ir elektroniskas shēmas, kuras ietver loģiskus apgalvojumus. To var iedomāties kā spuldzi ar diviem slēdžiem, kur gaisma ieslēdzas tikai noteiktos apstākļos, piemēram, tikai tad, ja A un B ir ieslēgti. Gudri kombinējot loģiskos vārtus, var uzbūvēt shēmas, kas veic aprēķinus saskaņā ar Būla algebru, kas ir sistēma, kura formalizē matemātiskās darbības binārajā kodā. Bet, lai gan datori saprot nulles un vieniniekus, cilvēkiem tas nav īpaši noderīgi. Tāpēc, izmantojot rakstzīmju kodējumu, piemēram, ASCII, mēs varam katram simbolam piešķirt bināro skaitli. Kad tu ieraksti jebko uz tastatūras, tas tiek pārtulkots šajā binārajā kodā, un, tiklīdz dators to ierauga, tas saka: ā, jā, tas ir lielais A, un uzmet to uz ekrāna. Kā šīs ierīces sader kopā, pārvalda operētājsistēmas kodols, piemēram, Windows, Linux vai Mac, kas atrodas starp datora aparatūru un lietojumprogrammām un pārvalda, kā tās visas darbojas kopā, piemēram, ar ierīču draiveriem. Ievades ierīces ļauj tev dot datoram instrukcijas ar pogas nospiešanu, bet zemākajā līmenī datori saprot tikai instrukcijas mašīnkodā, kas ir binārais kods, kas CPU norāda, ko darīt un kādus datus izmantot. Runājot par šo instrukciju izpildi, CPU ir sava veida ģēnijs, tikai ar dementa zelta zivtiņas atmiņu. Tas spēj apstrādāt jebkuru instrukciju, bet nevar glabāt nekādus datus, tāpēc tas ir patiešām noderīgs tikai kopā ar brīvpiekļuves atmiņu jeb RAM. To var iedomāties kā režģi, kur katrā rūtiņā var glabāt vienu baitu informācijas, kas var būt dati vai instrukcijas, un kam ir adrese, lai CPU varētu tai piekļūt četros soļos. Ielādēt no atmiņas, atšifrēt instrukcijas un datus, un visbeidzot izpildīt un saglabāt rezultātu. Tas ir viens mašīnas cikls. Tā kā programma būtībā ir tikai instrukciju un atmiņas saraksts, lai to palaistu, CPU izpilda tās vienu pēc otras mašīnas ciklos, līdz tā ir pabeigta. Ak jā, vai es minēju, ka tas notiek, nu, tiešām ātri? Mūsdienu CPU var veikt miljardus ciklu sekundē, ko koordinē un sinhronizē pulksteņa ģenerators. Šī pulksteņa ātrumu mēra gigahercos, un cilvēki bieži pārtaktē savus CPU, lai uzlabotu veiktspēju, kas ir jauki, bet var vienkārši aizdedzināt tavu datoru. Vēl trakāk ir tas, ka CPU ir vairāki kodoli, kas visi var izpildīt dažādas instrukcijas paralēli, tātad vienlaikus. Katru kodolu var arī sadalīt vairākos pavedienos, kas ļauj katram atsevišķam kodolam apstrādāt vairākas instrukcijas vienlaikus, tātad pārslēgties starp tām ļoti ātri. Labi, tas ir forši, bet nav svarīgi, cik jaudīgs ir dators, ja tev vispār nav veida, kā tam dot instrukcijas. Mašīnkoda rakstīšana ar roku, iespējams, liktu tev sajukt prātā, bet par laimi tev tas nav jādara. Kodols ir ietīts čaulā, kas ir vienkārši programma, kas atklāj kodolu lietotājam, ļaujot vienkāršas instrukcijas komandrindas saskarnē ar teksta ievadi. Bet labākais veids, kā likt datoram darīt kaut ko noderīgu, ir programmēšanas valoda, kas izmanto abstrakciju, lai tā vietā, kā šis, tu varētu rakstīt kodu, kas izskatās šādi, un kas pēc tam tiek pārveidots mašīnkodā tevis vietā. Dažas valodas, piemēram, Python, izmanto interpretatoru, kas tieši mēģina izpildīt pirmkodu rindiņu pa rindiņai. Citas valodas, piemēram, C vai Go, izmanto kompilatoru, kas pārveido visu programmu mašīnkodā, pirms ievieto to failā, ko CPU var izpildīt. Tagad katrai programmēšanas valodai ir atšķirīga sintakse, bet ir daži pamata rīki, kas ir gandrīz visām. Vienkāršākais veids, kā izmantot datus, ir ar mainīgajiem, kas piešķir vērtību nosaukumam, ko pēc tam var atkārtoti izmantot un mainīt. Atkarībā no vērtības mainīgajiem var būt dažādi datu tipi. Tekstam tie ir atsevišķi simboli un vairāku simbolu virknes. Skaitļiem ir veseli skaitļi, kas var būt arī ar zīmi, ja tie ir negatīvi, un peldošā komata skaitļi decimālvērtībām. Tos sauc par peldošā komata skaitļiem, jo decimālzīme var peldēt, lai apmainītu precizitāti pret diapazonu. Tas ir iespējams, jo tie izmanto zinātnisko pierakstu. Tas ir kāds skaitlis reizināts ar pakāpi, kas norāda, kur likt decimālzīmi, un tieši tā tie izskatās zem pārsega. Faktiskais skaitlis tiek glabāts ar binārajām daļām. Dažas daļas, piemēram, viena trešdaļa, binārajā sistēmā var tikai tuvināt ar bezgalīgu summu. Bet, tā kā atmiņa nav bezgalīga, tā kaut kur ir jānogriež, kas noved pie noapaļošanas kļūdām, dažkārt izraisot diezgan dīvainus aprēķinus. Ja ar to nepietiek, long un double izmanto divreiz vairāk atmiņas, lai dubultotu int un float diapazonu. Dažas valodas, piemēram, Python, automātiski nosaka, kāds tips ir mainīgajam, bet tādā valodā kā C tev skaidri jādeklarē mainīgā tips. Mainīgā vērtība tiek glabāta kaut kādā atmiņas adresē. Rādītāji ir mainīgie, kuru vērtība ir cita mainīgā atmiņas adrese, ko apzīmē ar šo & zīmi. Tātad patiesībā rādītājs ir vienkārši kāds atmiņas gabals, kas norāda uz citu atmiņas gabalu. Tā kā atmiņas adrese ir vienkārši skaitlis, tu vari tam pieskaitīt un atņemt, lai pārvietotos pa atsevišķiem atmiņas baitiem. To sauc par rādītāju aritmētiku. Dažās zemā līmeņa valodās, piemēram, C, tev manuāli jāpiešķir un jāatbrīvo atmiņa, kad tā vairs netiek izmantota. Tas viss notiek kaudzē, kas ir atmiņas daļa, kas var dinamiski augt un sarukt atkarībā no programmas prasībām, kas ļauj lielāku kontroli, bet padara ārkārtīgi viegli pilnībā salauzt kodu. Tu vari pieskarties atmiņai, kurai nevajadzētu pieskarties, vai kura vienkārši neeksistē, ko sauc par segmentācijas kļūdu. Bet arī, ja ir kāds atmiņas gabals, kas vairs netiek izmantots un tu aizmirsti to atbrīvot vai tev vairs nav veida tam piekļūt, šī atmiņa vairs nav izmantojama. To sauc par atmiņas noplūdi, un tā var izraisīt programmas palēnināšanos un galu galā avāriju. Lai izvairītos no šī haosa, augsta līmeņa valodās, piemēram, Python, ir iebūvēti atkritumu savācēji, kas pārvalda atmiņu tevis vietā. Dažādi datu tipi aizņem atšķirīgu atmiņas apjomu. Veselie skaitļi visbiežāk aizņem 4 atmiņas baitus, viens simbols visbiežāk aizņem 1 atmiņas baitu, un virkne ir vienkārši vairāki simbola baiti ar nulles simbolu, kas norāda virknes beigas. Vairāku vienumu glabāšana šādā blakus atmiņas gabalā ir masīva ideja. Vispārīgāk, tas ir vienumu saraksts ar vienu un to pašu datu tipu, kur katram vienumam ir skaitlisks indekss, visbiežāk sākot no 0. Tā kā vienumi atmiņā atrodas blakus, zinot pirmā vienuma adresi, tu vari ātri piekļūt jebkuram masīva vienumam, izmantojot rādītāju aritmētiku. Masīvi ir tas, ko sauc par datu struktūru, kas ir vienkārši veids, kā organizēt datus, lai ar tiem būtu vieglāk strādāt. Vērtību iegūšana no masīva ir zibeņiem ātra, bet masīva izmērs bieži ir fiksēts, kad to izveido, tāpēc, kad tas ir pilns, tu nevari neko pievienot, un, ja tu to neizmanto pilnībā, tā ir vienkārši izniekota atmiņa, tāpēc elastīgāka iespēja ir saistītais saraksts. Tas izmanto mezglus, kas satur vērtību un rādītāju uz nākamo mezglu, kas ļauj tiem būt izkliedētiem atmiņā. Tas arī var dinamiski augt un sarukt, jo tu vari pievienot un noņemt jebkuru mezglu, un tu vari to pārkārtot, vienkārši pārkārtojot rādītājus. Tas ir lieliski, bet tie var būt nepraktiski, jo tev nav veida piekļūt pēdējam mezglam, izņemot, ja tu šķērso katru atsevišķo pirms tā. Bet tomēr gan masīvi, gan saistītie saraksti ir noderīgi, jo tie ļauj izveidot rindas un stekus. Steks ievēro pēdējais-iekšā-pirmais-ārā principu, tāpat kā paņemot pankūku no steķa. Praktiski, vienkārši iedomājies rādītāju, kas vienmēr norāda uz vienumu, kas tika pievienots pēdējais, tad tu vari izņemt jeb pop, tātad noņemt pēdējo vienumu, kas pārvieto rādītāju atpakaļ. Rinda ievēro pirmais-iekšā-pirmais-ārā principu un izmanto divus rādītājus, vienu pirmajam pievienotajam vienumam un vienu pēdējam. Jebkurš jauns vienums tiek pievienots aiz pēdējā rādītāja, kas pēc tam tiek atjaunināts, un izņemšana no rindas sākas pie pirmā rādītāja. Vēl viena noderīga datu struktūra ir jaukartēgla jeb hash map, kas ir vienkārši atslēgu-vērtību pāru kolekcija. Tā darbojas līdzīgi kā masīvs, bet izmanto jaucējfunkciju, lai paņemtu atslēgu un piešķirtu tai indeksu, kur pēc tam tiek glabāta tās vērtība. Bet dažkārt divas dažādas atslēgas var attēlot uz vienu un to pašu indeksu, ko sauc par kolīziju. Ir dažādi veidi, kā ar to tikt galā, bet viens veids ir izveidot saistīto sarakstu šajā masīva pozīcijā, kas padara šīs vērtības meklēšanu nedaudz lēnāku, bet tomēr HashMap ir neticami noderīgi, jo tu vari definēt atslēgas, kas norāda uz katru vērtību, un, tā kā tie ir balstīti uz masīviem, to iegūšana ir zibeņiem ātra. Daudzām problēmām var būt ļoti noderīgi attēlot attiecības starp dažādiem datu punktiem kā datu struktūru. Ja tu paņem saistītā saraksta mezglus, bet ļauj jebkuram mezglam norādīt uz jebkuru citu mezglu, tu iegūsti grafu, kur mezgli ir savienoti ar šķautnēm, kas var būt virzītas, nevirzītas un pat var nest svaru, kas var apzīmēt jebkuru metriku, piemēram, attālumu vai izmaksas. Grafi ir noderīgi grupu īzei tīklos vai īsākā ceļa atrašanai starp diviem punktiem, piemēram, Google Maps. Ir divi galvenie veidi, kā meklēt grafā. Meklēšana pēc platuma sākas vienā mezglā un virzās uz āru slāni pa slānim, līdz pirmo reizi atrod mērķa mezglu. Meklēšana pēc dziļuma izpēta katru atsevišķo ceļu pilnībā, līdz sasniedz strupceļu, tad atgriežas pie pēdējā mezgla ar citu ceļu un turpina tāpat, līdz atrod mērķa mezglu. Grafu, kur jebkuri divi mezgli ir savienoti ar tieši vienu ceļu, sauc par koku, un tas attēlo hierarhiju, piemēram, failu sistēmu tavā datorā. Koks sākas pie saknes un zarojas apakškokos, kas beidzas ar lapu mezgliem. Vecāku mezgliem var būt jebkurš bērnu mezglu skaits, bet bieži vien binārie koki ir visnoderīgākie. Piemēram, bināro koku, kur visas vērtības pa kreisi no jebkura mezgla ir mazākas un visas vērtības pa labi ir lielākas, sauc par bināro meklēšanas koku, kas padara konkrētu vērtību atrašanu superspējīgu. Ja tu gribi atrast mērķa vērtību, vienkārši sāc pie saknes. Ja mērķis ir mazāks par šo mezglu, ej pa kreisi, ja lielāks, ej pa labi, un atkārto to, līdz atrodi mērķi. Tas, ko mēs tikko izmantojām, ir ļoti vienkāršs algoritms, kas ir vienkārši instrukciju kopums, kas soli pa solim atrisina problēmu. Vienkāršākais veids, kā rakstīt algoritmu, ir funkcijas formā. Tā saņem ievades, ar tām kaut ko dara un atgriež izvadi. Tāpat kā mainīgos, tu vari pēc tam izsaukt funkciju pēc tās nosaukuma un nodot dažādus argumentus. Izsaucot funkciju, funkcijas izsaukums tiek ievietots izsaukumu stekā, kas ir īstermiņa atmiņa, ko izmanto koda izpildei, un, kā norāda nosaukums, tas ir balstīts uz steka datu struktūru, kas nozīmē pēdējais iekšā, pirmais ārā. Lai ieviestu algoritmus, tev bieži ir jāsalīdzina divas vērtības, ko vari darīt ar operatoriem, piemēram, lielāks par vai vienāds ar, un loģiskām izteiksmēm, piemēram, un, vai un nē. Šādas izteiksmes ir vienkāršas, tās var būt patiesas vai nepatiesas, kas ir Būla datu tipa iespējamās vērtības un ļauj rakstīt nosacījumu paziņojumus. Ja kāds nosacījums ir patiess, dari šo, citādi dari to. Būla vērtības var arī izmantot, lai atkārtotu noteiktas koda daļas. Viens veids ir ar while cilpu. Kamēr šis nosacījums ir patiess, šis kods tiks izpildīts. Vēl viens veids ir ar for cilpu, kas var iterēt pa katru elementu datu struktūrā, piemēram, masīvā, bet var arī atkārtot noteiktu iterāciju skaitu, iestatot sākuma vērtību, palielinot to pēc katras iterācijas un iestatot augšējo robežu ar nosacījumu. Funkcijas var arī izsaukt pašas sevi, ko sauc par rekursiju. Tas ir noderīgi, kad problēmu var sadalīt mazākās identiskās problēmās, piemēram, aprēķinot 5 faktoriālu, kas ir vienkārši 5 reiz 4 faktoriāls, kas ir vienkārši 4 reiz Bet pēc noklusējuma rekursīvā funkcija vienkārši turpinās izsaukt sevi bezgalīgi. Tas nozīmē, ka tā turpina ievietot arvien vairāk funkciju izsaukumu izsaukumu stekā, līdz steka atmiņa tiek pārsniegta steka pārpildē. Tas nav optimāli. Lai to apturētu, tev rekursīvajai funkcijai jāpievieno bāzes nosacījums, kas definē, kad apstāties. Tikai tad funkciju izsaukumi tiks izpildīti, nesabojājot tavu datoru. Rekursija ir forša, bet tā var būt diezgan dārga laika un telpas ziņā. Tāpēc, lai samazinātu nepieciešamo aprēķinu apjomu, iepriekšējos rezultātus var saglabāt kešatmiņā, lai, ja tie parādās vēlreiz, datoram tie nav jāpārrēķina no nulles. To sauc par memoizāciju. Runājot par veiktspēju, lai spriestu, cik labs ir algoritms, tu vari aplūkot laika un telpas sarežģītību, tātad, cik daudz laika vai telpas ir nepieciešams, lai to palaistu. To mēra Lielā O pierakstā, kas apraksta saistību starp ievades lieluma pieaugumu un nepieciešamo darbību skaitu algoritma izpildei. Piemēram, 1 pievienošana katram skaitlim masīvā ir O , jo darbību skaits palielinās lineāri, masīvam augot. Svarīgs ir nevis precīzais darbību skaits, bet gan tendence, ievades lielumam tiecoties uz bezgalību. Redzi, kaut kas līdzīgs n faktoriālam aug daudz ātrāk nekā jebkura lineāra funkcija jebkad varētu. Tāpēc, kamēr laika sarežģītība ir kaut kāda lineāra sakarība, tā tiek vienkāršota līdz O , un tas pats attiecas uz jebkuru citu grupu. Rakstot algoritmu, vienmēr ir dažādas pieejas. Brutālā spēka pieeja būtu vienkārši pārbaudīt katru vienumu, līdz atrodam mērķi sarakstā. Bet, ja tu gribi, lai tava programma darbojas ātrāk par dārza gliemi, tev ir vajadzīga sarežģītāka pieeja, piemēram, sadali un valdi. Piemēram, binārajā meklēšanā tu atkārtoti pārbaudi vidējo elementu, lai redzētu, kurā pusē ir mērķis, un turpini meklēt šajā pusē, līdz to atrodi. Ir arī dažādas pieejas koda rakstīšanai kopumā, ko sauc par programmēšanas paradigmām. Deklaratīvā programmēšana apraksta, ko kods dara, bet ne to, kā tieši datoram tas jādara, savukārt imperatīvā programmēšana skaidri apraksta, kā datoram jāsasniedz rezultāts ar detalizētām instrukcijām. Imperatīvās programmēšanas paplašinājums ir objektorientētā programmēšana, kur tu vari definēt klases kā objektu projektus, kas ir atsevišķas vienības, kuras sastāv no datiem rekvizītu formā un uzvedībām metožu formā. Lai kodētu klasi, tu sāc ar rekvizītu definēšanu kā mainīgos un metodes kā funkcijas. Pēc rekvizītu un metožu iekapsulēšanas klasē tu vari izveidot objekta instanci un izmantot punktu apzīmējumu, lai strādātu ar tā rekvizītiem un metodēm. Klases atvieglo koda organizēšanu un atkārtotu izmantošanu, jo tu vari definēt apakšklases, kas manto virsklases rekvizītus un uzvedības, bet var arī tās paplašināt un pārrakstīt. Piemēram, gumijas pīles apakšklase varētu ieviest kvakšķi ar pīkstienu. Rezultātā gumijas pīles var uzskatīt par pīļu klases objektiem, bet tās uzvedas atšķirīgi, kad tiek izsaukta kvakšķe, kas ir polimorfisma jēdziens. Bet dažām problēmām neviena no šīm tradicionālajām paradigmām nedarbosies. Pieņemsim, ka tu gribi, lai dators atpazītu, kurš no šiem attēliem ir bite. Problēma ir tāda, ka tu īsti nevari ar kodu aprakstīt, kā izskatās bite. Šeit nāk palīgā mašīnmācīšanās, jeb mācīt datoram veikt uzdevumu, tieši neprogrammējot to šim uzdevumam. Vispirms tev vajag daudz datu, ko tu vari sadalīt apmācības datos un testa datos. Pēc tam tu izvēlies algoritmu, kas laika gaitā var mainīt savus parametrus, piemēram, neironu tīklu, kur svarus var atjaunināt, lai sasniegtu citu rezultātu. Ievadot šajā algoritmā ļoti daudz apmācības datu, tu vari izveidot modeli, kura precizitāti pēc tam vari pārbaudīt ar testa datiem. Ja tas nav gluži pareizi, modelis laika gaitā var uzlaboties, salīdzinot izvadi ar to, kādai tai vajadzēja būt, tverot atšķirību kļūdas funkcijā un pielāgojot savus parametrus, lai šo atšķirību samazinātu. Bet, lai cik futūristisks, modernākais, zibeņiem ātrais un optimizētais tas būtu, ja tu gribi, lai cilvēki tiešām izmantotu tavu uzrakstīto lietojumprogrammu, tev, iespējams, vajadzētu zināt par internetu. Tas ir datoru tīkls no visas pasaules, kas savienots ar vadiem. Tā, burtiski, internets ir vienkārši ķekars biezu kabeļu, kas iet okeāna dibenā, kopā ar tādām iekārtām kā interneta pakalpojumu sniedzēji, kas tevi savieno ar galamērķi. Šie datori sazinās ar interneta protokolu komplektu. Katram datoram tīklā ir unikāla IP adrese, un divi datori pēc tam var pārsūtīt datus ar pārraides vadības protokolu. Tas sadala ziņojumus ķekarā pakešu, sūta tās pa vadu tīklu, pirms saņēmējs atkal saliek ziņojumu kopā. Ja tev ir slikts interneta savienojums, tu, iespējams, esi piedzīvojis pakešu zudumu, kas ir vienkārši tad, ja dažas no šīm paketēm pazūd pa ceļam. Ja internets ir aparatūra, tad tīmeklis ir programmatūra, ko tu vari izmantot ar pārlūku. Katrai tīmekļa lapai ir URL. Kad tu to ieraksti savā pārlūkā, tas meklē šo vietni mitināšanas servera IP adresi ar domēnu nosaukumu sistēmu, kas ir kā vārdnīca, kas kartē domēnu nosaukumus uz faktisko serveru IP adresēm. Pēc savienojuma izveides ar to, izmantojot TCP, tavs pārlūks, ko sauc par klientu, izmanto hiperteksta pārsūtīšanas protokolu, lai nosūtītu HTTP pieprasījumu serverim, kas pēc tam sniedz atbildi, ideālā gadījumā saturot tīmekļa lapas saturu. Faktiskā vietne visbiežāk sastāv no trim daļām. HTML fails satur visu vietnes saturu un būtībā ir vienkārši elementu kolekcija, kas var būt teksts, saites, pogas un tā tālāk. CSS fails kontrolē vizuālo izskatu un padara vietni skaistu. Bet vietne ir bezjēdzīga, ja skaistu pohu nospiešana neko nedara, tāpēc tāda valoda kā JavaScript pievieno funkcionalitāti. Bet dažkārt lietas var noiet greizi. Katrai HTTP atbildei nāk līdzi atbildes kods, kas satur informāciju par atbildes statusu. Piemēram, 200 nozīmē OK, un jebkas, kas sākas ar 4, ir kļūda, un slavenākā no tām ir 404, lapa nav atrasta. HTTP pieprasījumi var saturēt dažādas metodes, piemēram, get, post, put un delete, tātad iegūt, pievienot, atjaunināt un dzēst informāciju. Tos bieži izmanto lietojumprogrammu programmēšanas saskarnes, kas savieno divas lietojumprogrammas un ļauj tām savstarpēji mijiedarboties. Piemēram, glabāt un iegūt datus no datubāzes. Visizplatītākais datubāzes veids ir relāciju datubāze, kas datu glabāšanai izmanto tabulas. Tabulas kolonnas satur dažādus atribūtus, un rindas attēlo atsevišķus datu punktus. Tāpat katrai tabulai ir viens unikāls atribūts, ko sauc par primāro atslēgu. Ārējā atslēga ir citas tabulas primārā atslēga, kas nosaka saistību starp abām. Šajā gadījumā katra grāmata ir saistīta ar autoru. Ar tādu valodu kā SQL tu vari rakstīt paziņojumus, lai strādātu ar datiem no šīm tabulām. Tu varētu meklēt visu grāmatu nosaukumus un autorus, kuru nosaukums sākas ar H, bet tam mums ir jāsavieno autoru tabula ar grāmatu tabulu pēc atbilstošās atslēgas, lai apvienotu divus atribūtus no dažādām tabulām vienā, dodot mums šo izvadi. Šie paziņojumi ir noderīgi, bet tev jābūt uzmanīgam, citādi tu vari vienkārši izdzēst visu datubāzi ar vienu koda rindiņu. Bet neuztraucies, tas nekad nav noticis. Aiz katras pieteikšanās lapas ir datubāze ar lietotājvārdiem un parolēm. Kad lietotājs mēģina pieteikties, bieži tiek izmantots SQL vaicājums, lai pārbaudītu, vai lietotāja ievade atbilst kādam datubāzes ierakstam. Tas ir labi. Bet viltīgs aktieris varētu ierakstīt kaut ko šādu, kas maina vaicājumu, priekšlaicīgi pārtraucot virkni un komentējot pārējo, kas nozīmē, ka, kamēr vien šis lietotājvārds eksistē datubāzē, piekļuve tiek piešķirta. To sauc par SQL injekcijas uzbrukumu, un tas ir viens no vienkāršākajiem veidiem, kā hakeri nokļūst vietās, kur viņiem nevajadzētu būt. Dzirdēt par šiem jēdzieniem ir viena lieta, bet, lai tos patiešām apgūtu, tev tie jāredz darbībā un jāizmanto pašam, ko tieši tu vari darīt ar Brilliant, kam ir tūkstošiem interaktīvu stundu par visu, sākot no matemātikas un datu zinātnes līdz programmēšanai un AI. Viņi liek zināšanām palikt, ar vizuālām stundām un interaktīvām problēmām, kas ne tikai ir jautri un attīsta intuitīvas problēmu risināšanas prasmes, bet arī ir pierādīts, ka ir sešas reizes efektīvākas nekā vienkārši stundu garu lekciju skatīšanās. Es zinu, ka laika atrašana jaunu prasmju apguvei var būt grūta, bet Brilliant to padara tik vieglu. Tu vari veidot vērtīgas zināšanas no pamatiem tikai pāris minūtēs dienā, ar kodolīgām stundām no jebkuras ierīces, jebkur, jebkurā laikā. Tu pāriesi no datu zinātnes pamatiem līdz reālu datu kopu īzei no Spotify pilnīgi bez laika, ko tu vari papildināt ar matemātikas pamatiem un programmēšanas kursiem Python, lai veidotu vienu no pieprasītākajām prasmju kopām mūsu laikā. Labākā daļa? Tu vari izmēģināt visu, ko Brilliant piedāvā, bez maksas pilnas 30 dienas, apmeklējot brilliant.org slash wackyscience. Tu arī saņem 20% atlaidi gada premium abonementam. Paldies Brilliant par šī video sponsorēšanu.
Izveidots 30. janv.
Atjaunināts 9. aug.
Publicēts 30. janv.