1 00:00:00,000 --> 00:00:02,270 >> [Review: Quiz 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard University] 3 00:00:04,620 --> 00:00:07,660 [See on CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Tere kõigile. See on ülevaade viktoriin 1. 5 00:00:11,610 --> 00:00:15,040 Just nagu disclaimer, see on - ma mõtlen, me püüame katta 6 00:00:15,040 --> 00:00:17,770 nii palju materjali kui võimalik, kuid see ei tähenda, et 7 00:00:17,770 --> 00:00:20,780 me katma kõik asjad, mis võivad olla viktoriin 1. 8 00:00:20,780 --> 00:00:25,270 Nii et kindlasti on teil ka heita pilk loeng, lõigud, kõik, mis sa suudad. 9 00:00:25,270 --> 00:00:28,240 Quiz 1 läheb kolmapäeval, järgmisel kolmapäeval. 10 00:00:28,240 --> 00:00:33,800 Nii et kindlasti õppida. See saab olema päris palju, nagu esimesele viktoriin 11 00:00:33,800 --> 00:00:36,390 seoses selle formaat, aga see on ilmselt saab olema palju raskem. 12 00:00:36,390 --> 00:00:39,600 Vähemalt eelmisel aastal, kui ma võtsin 50, ma arvasin, et see oli palju raskem. 13 00:00:39,600 --> 00:00:42,410 Nii õpivad palju. 14 00:00:42,410 --> 00:00:45,190 >> Ma lähen katta andmestruktuurid ja Huffman kodeerimine. 15 00:00:45,190 --> 00:00:47,910 See on midagi, mida paljud inimesed arvavad, on keeruline, 16 00:00:47,910 --> 00:00:51,930 kuid ma üritan teha nii lihtsaks kui võimalik. 17 00:00:51,930 --> 00:00:56,330 Esiteks, mida me tahame, et te teada viktoriin 1 on 18 00:00:56,330 --> 00:01:00,970 mõista kontseptuaalne kirjeldused iga andmestruktuurid, et ma lähen esitada. 19 00:01:00,970 --> 00:01:03,960 See tähendab, et sa ei pea tegelikult 20 00:01:03,960 --> 00:01:07,020 rakendada hash tabelis oma viktoriin 1. 21 00:01:07,020 --> 00:01:10,250 Me ei taha, et sa ellu terve hash tabel võibolla me proovime 22 00:01:10,250 --> 00:01:13,090 sind rakendada mõned funktsioonid, 23 00:01:13,090 --> 00:01:16,940 levinumaid toiminguid, kuid me ei hakka sind rakendada kõike. 24 00:01:16,940 --> 00:01:21,010 Seega on oluline, et sa mõistad mõiste taga on andmestruktuur 25 00:01:21,010 --> 00:01:23,510 ja samuti, et te olete võimeline koodi C, 26 00:01:23,510 --> 00:01:27,880 lihtsalt levinumaid operatsioone nad on iga andmete struktuuri. 27 00:01:27,880 --> 00:01:30,090 Ja ka võimalik vaadata vihjeid ja structs, 28 00:01:30,090 --> 00:01:33,470 sest nad tunduvad palju need andmestruktuurid. 29 00:01:33,470 --> 00:01:37,380 >> Esiteks ahelloendid. Seotud nimekirjad on tegelikult väga sarnane massiivid 30 00:01:37,380 --> 00:01:39,930 kuid vahe on seotud nimekirja ja array, 31 00:01:39,930 --> 00:01:45,160 Kõigepealt on see seotud nimekirja on väga paindlik suurus 32 00:01:45,160 --> 00:01:50,060 samas massiivid teil on valida väga suured massiivi, 33 00:01:50,060 --> 00:01:53,710 et sa tead, et sa lähed, et oleks võimalik salvestada kõik oma andmed, et massiivi 34 00:01:53,710 --> 00:01:59,370 või sa pead kasutama malloc olema paindlik pikkus massiivi. 35 00:01:59,370 --> 00:02:03,680 In ahelloendid see on väga lihtne lihtsalt saada rohkem elemente, 36 00:02:03,680 --> 00:02:07,210 panna rohkem elemente seotud nimekirja või eemaldada elemente. 37 00:02:07,210 --> 00:02:09,370 Ja tegelikult, kui te ei taha seotud nimekirja sorteerida, 38 00:02:09,370 --> 00:02:13,950 saate otsida ja eemaldada elemente pidevalt aega, 39 00:02:13,950 --> 00:02:16,800 nii O (1) aeg, nii et see on väga mugav. 40 00:02:16,800 --> 00:02:20,660 Sa pead olema ettevaatlik, et alati meeles, et malloc ja vaba sõlmede 41 00:02:20,660 --> 00:02:25,510 lihtsalt sellepärast, et kui sa seda ei tee, siis on teil mälu lekkeid. 42 00:02:25,510 --> 00:02:31,480 Nii ahelloendid - mõiste sõlm on just nagu meil siin. 43 00:02:31,480 --> 00:02:35,110 Panin int n, kuid võite salvestada kõik andmed, mida soovite. 44 00:02:35,110 --> 00:02:37,280 Nii et kui soovite salvestada jada, kõik on korras. 45 00:02:37,280 --> 00:02:41,690 Kui soovite salvestada struktuure, pole hullu, topelt, mida iganes sa tahad. 46 00:02:41,690 --> 00:02:44,630 Ma lihtsalt panna int n näited siin. 47 00:02:44,630 --> 00:02:46,800 Ja sul on kursor järgmisele sõlme. 48 00:02:46,800 --> 00:02:51,940 Seega, põhimõtteliselt ahelloendi on mõned andmed, ja siis see viitab Järgmine sõlme. 49 00:02:51,940 --> 00:02:56,710 Kui see on viimane osa, mis on seotud nimekirja, et see saab osutada null. 50 00:02:56,710 --> 00:02:59,060 Nii on see näiteks ahelloendi. 51 00:02:59,250 --> 00:03:05,960 >> Olgu, nüüd vaatame, mida me peaksime tegema, kui ma tahan, et lisada element seotud nimekirja. 52 00:03:05,960 --> 00:03:08,810 Esiteks funktsioon lisada on tüüpi void 53 00:03:08,810 --> 00:03:11,350 sest ma ei taha, et naasta midagi. 54 00:03:11,350 --> 00:03:14,200 Ja ma lähen int argumendina, 55 00:03:14,200 --> 00:03:17,090 sest ma tahan teada, mida ma tahan lisada. 56 00:03:17,090 --> 00:03:21,840 Mis on esimene asi, mida ma peaks tegema? Noh, ma malloc on newnode, 57 00:03:21,840 --> 00:03:24,240 nii et see on esimene rida. 58 00:03:24,240 --> 00:03:27,580 Ma lihtsalt luua uus sõlm panna seotud nimekirja. 59 00:03:27,580 --> 00:03:32,360 Niisiis, mida ma teha saan? Noh, me teame, et meie rakenduste ahelloendid 60 00:03:32,360 --> 00:03:38,180 klassis, oleme alati panna pea nagu globaalne muutuja. 61 00:03:38,180 --> 00:03:41,800 Niisiis, mida me saame teha, on muuta peas. 62 00:03:41,800 --> 00:03:44,300 Võin teha see uus sõlm uue juhi, 63 00:03:44,300 --> 00:03:46,670 ja see läheb juhtida eelmise peas. 64 00:03:46,670 --> 00:03:50,390 Kuidas me saame seda teha? Esimene asi, mida ma pean tegema 65 00:03:50,390 --> 00:03:54,770 on muuta 'n' uue tipu väärtus, 66 00:03:54,770 --> 00:03:57,530 mis edastatakse funktsioonile. 67 00:03:57,530 --> 00:04:01,050 Siis newnode järgmiseks saab olema head. 68 00:04:01,050 --> 00:04:05,800 Pea läheb newnode. Nii et see on üsna lihtne. 69 00:04:05,800 --> 00:04:10,090 Kustutamise sõlme, me ei saa seda teha, nagu - 70 00:04:10,090 --> 00:04:14,790 Üks viis, kuidas me saame teha, et see tähendab, 71 00:04:14,790 --> 00:04:18,160 okei, kui ma tahtsin, et kustutada näiteks 3, 72 00:04:18,160 --> 00:04:24,850 mida ma võiks teha, on lihtsalt juhtida eelmise sõlme 73 00:04:24,850 --> 00:04:27,580 Järgmise sõlme 3. 74 00:04:27,580 --> 00:04:29,400 Nii et ma lihtsalt teha midagi sellist. 75 00:04:29,400 --> 00:04:33,400 Aga milline on probleem teeb? 76 00:04:33,400 --> 00:04:37,400 Mul on mälu leke, nii et ma ei ole juurdepääsu number 3 enam. 77 00:04:37,400 --> 00:04:42,480 Probleem see, et ma ei kavatse olla võimeline vabastama et sõlme. 78 00:04:42,480 --> 00:04:45,360 Ma lähen on mälu leke ja (arusaamatu) läheb vihkavad mind. 79 00:04:45,360 --> 00:04:49,370 Selle asemel, et seda tehes, ma peaks ilmselt ajutine pointer. 80 00:04:49,370 --> 00:04:53,210 Nii panin temp. See saab viidata sõlme, et ma tahan, et kustutada. 81 00:04:53,210 --> 00:04:58,170 Ja siis ma saan liikuda eelmise sõlmede punkt järgmisesse sõlme 82 00:04:58,170 --> 00:05:00,390 sõlme, et ma tahan, et kustutada. 83 00:05:00,390 --> 00:05:02,730 Ja lõpuks, ma ei saa vabalt kursorit. 84 00:05:02,730 --> 00:05:07,480 Kas mul on vaba pointer et lõin seal? 85 00:05:07,480 --> 00:05:09,560 Ma ei pea, lihtsalt sellepärast, et - 86 00:05:09,560 --> 00:05:13,430 Erinevus on, et see keskus on loodud, kasutades malloc, 87 00:05:13,430 --> 00:05:17,280 nii et see on hunnik, kuid see oli lihtsalt deklareeritud NULL lüliti korstnat. 88 00:05:17,280 --> 00:05:20,000 Nii et ma ei ole vaba ta. 89 00:05:20,000 --> 00:05:22,030 >> Ok. Nüüd räägime korstnad. 90 00:05:22,030 --> 00:05:24,680 Hoidla on üsna lihtne. 91 00:05:24,680 --> 00:05:29,540 Tegime korstnad ja järjekorrad klassis lihtsalt kasutades massiivid 92 00:05:29,540 --> 00:05:32,820 aga sa peaksid olema kursis - lihtsalt olema teadlik 93 00:05:32,820 --> 00:05:40,740 et võite teha korstnad järjekorrad kasutades ahelloendid samuti. 94 00:05:40,740 --> 00:05:44,460 Nii et kui teil on massiiv, mis oleks virnas? 95 00:05:44,460 --> 00:05:46,810 Stack kõigepealt pead olema suurus. 96 00:05:46,810 --> 00:05:49,950 Teil salvestada, mis on suuruse virna, et sul on õigus nüüd. 97 00:05:49,950 --> 00:05:52,980 Ja ka siis oleks massiivi, sel juhul numbrid, 98 00:05:52,980 --> 00:05:55,120 aga kui sa tahad, see võib olla massiivi 99 00:05:55,120 --> 00:06:00,380 stringid, array struct, midagi, mida soovite salvestada. 100 00:06:00,380 --> 00:06:03,240 Umbes stack: vahe korstna ja seotud nimekirja 101 00:06:03,240 --> 00:06:08,590 on see, et stack sa oleks juurdepääs ainult viimase osa, mis pandi virna. 102 00:06:08,590 --> 00:06:11,770 Seda nimetatakse viimane esimene välja. 103 00:06:11,770 --> 00:06:15,090 Just nagu oleks sul virna, 104 00:06:15,090 --> 00:06:17,670 kui paned plaadi peal virnas, 105 00:06:17,670 --> 00:06:22,670 teil on kõrvaldada, et salve esimene omada juurdepääsu teiste plaate. 106 00:06:22,670 --> 00:06:26,310 See on sama asi, korstnad. 107 00:06:26,310 --> 00:06:31,220 Nii et kui ma tahan näiteks lisada element pinu, mida ma peaksin tegema? 108 00:06:31,220 --> 00:06:34,070 Seda kutsutakse push, ja see on üsna lihtne. 109 00:06:34,070 --> 00:06:37,130 Esimene asi, mida pead tegema, on vaadata, kas suurus korstnat 110 00:06:37,130 --> 00:06:40,150 ei ole suurem või võrdne võimsus pinu. 111 00:06:40,150 --> 00:06:45,810 Sest kui sa juba on täisvõimsusel, siis ei saa midagi lisada. 112 00:06:45,810 --> 00:06:51,140 Ja siis, kui ei ole, siis tuleb lihtsalt lisada element pinu. 113 00:06:51,140 --> 00:06:54,530 Ja lõpuks, juurdekasvu suurust. Nii et see on üsna lihtne. 114 00:06:54,530 --> 00:06:57,140 Nii et ma lihtsalt lisada number 2. 115 00:06:57,140 --> 00:07:00,350 Ja kui ma tahan pop, mis tähendab, et ma tahan, et eemaldada 116 00:07:00,350 --> 00:07:03,870 viimane element, mis lisati ja tagastab väärtuse element 117 00:07:03,870 --> 00:07:09,180 Esimene asi, mida ma pean kontrollima, et korstnat ei ole tühi. 118 00:07:09,180 --> 00:07:11,510 Sest kui see on tühi, ma ei saa tagasi midagi. 119 00:07:11,510 --> 00:07:14,820 Sellisel juhul, ma teen sulle tagasi -1. 120 00:07:14,820 --> 00:07:18,960 Muidu ma lähen kahandab suurus spec, 121 00:07:18,960 --> 00:07:22,510 ja naasta numbrid (s.size). 122 00:07:22,510 --> 00:07:27,230 Miks ma kahandab suurus ja siis tagasi s.size? 123 00:07:27,230 --> 00:07:30,930 See on sellepärast, käesoleval juhul spec on suurusega 4, 124 00:07:30,930 --> 00:07:33,810 ja ma tahan tagasi neljas element, eks? 125 00:07:33,810 --> 00:07:36,030 Aga mis on indeksi neljas element? Kolm. 126 00:07:36,030 --> 00:07:44,510 Kuna ma suurus - saab olema 3, ma ei saa lihtsalt tagasi s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 sest see on 3. Nii et see on lihtsalt indeks. 128 00:07:48,410 --> 00:07:50,380 >> Nüüd järjekorrad. Järjekorrad on päris palju sama asja. 129 00:07:50,380 --> 00:07:54,950 Ainus erinevus on see, et selle asemel, et viimane, esimene välja, 130 00:07:54,950 --> 00:07:57,480 pead kõigepealt sisse, esimesena välja. 131 00:07:57,480 --> 00:07:59,460 Tõenäoliselt kui sa ootad minna kontserdile, 132 00:07:59,460 --> 00:08:04,260 te ei oleks rahul, kui teil oleks virna asemel järjekorda. 133 00:08:04,260 --> 00:08:07,730 Olles viimane inimene tulema oleks esimene inimene, sisestage kontsert. 134 00:08:07,730 --> 00:08:09,760 Sa ilmselt ei oleks rahul. 135 00:08:09,760 --> 00:08:15,020 Järjekorras esimene inimene saada on ka esimene inimene välja tulla. 136 00:08:15,020 --> 00:08:18,720 Nii mõiste järjekorras on lisaks suurusele massiivi, 137 00:08:18,720 --> 00:08:23,360 teil ka on head, mis on indeks pea pinu. 138 00:08:23,360 --> 00:08:29,000 Nii et esimene element kohe. 139 00:08:29,000 --> 00:08:32,710 Lisa järjekorda on sama asi nagu push korstnad. 140 00:08:32,710 --> 00:08:34,980 Kui sa olid väga naiivne, siis oleks lihtsalt öelda, 141 00:08:34,980 --> 00:08:39,289 Noh, ma ei saa lihtsalt teha täpselt sama asja nagu ma tegin push. 142 00:08:39,289 --> 00:08:44,030 Võin lihtsalt vaadata, kas see ei ole rohkem, kui suudavad. 143 00:08:44,030 --> 00:08:48,760 Kui nii, siis ma tagasi vale, muidu ma ei saa lihtsalt eksportida uus väärtus 144 00:08:48,760 --> 00:08:50,630 ja siis juurdekasvu suurust. 145 00:08:50,630 --> 00:08:52,750 Aga miks on see vale? 146 00:08:52,750 --> 00:08:55,010 Vaatame näiteks. 147 00:08:55,010 --> 00:08:57,020 Püüan Lisa järjekorda hunnik asju, 148 00:08:57,020 --> 00:08:58,390 ja siis ma lähen dequeue ja Lisa järjekorda. 149 00:08:58,390 --> 00:09:00,550 Seal on palju käske, kuid see on väga lihtne. 150 00:09:00,550 --> 00:09:04,790 Ma lähen Lisa järjekorda 5, nii et lisada 5, ja siis 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, ja siis ma tahan dequeue midagi, 152 00:09:09,310 --> 00:09:12,000 mis tähendab, et ma lähen eemaldage esimene element. 153 00:09:12,000 --> 00:09:14,640 Ma lähen, et eemaldada number 3, eks? 154 00:09:14,640 --> 00:09:17,320 Esimene element. Okei. 155 00:09:17,320 --> 00:09:21,450 Nüüd, kui ma püüan Lisa järjekorda midagi muud, mis juhtub? 156 00:09:21,450 --> 00:09:24,290 Vastavalt minu rakendamist, 157 00:09:24,290 --> 00:09:31,040 Ma tahtsin panna järgmise number indeksis q.size. 158 00:09:31,040 --> 00:09:35,140 Sel juhul suurus on 8, 159 00:09:35,140 --> 00:09:38,640 nii index 8 on siin viimasel positsioonil. 160 00:09:38,640 --> 00:09:43,900 Kui ma püüan Lisa järjekorda 1 siin, oleksin kirjutades viimane positsioon 161 00:09:43,900 --> 00:09:45,870 number 1, mis on täiesti vale. 162 00:09:45,870 --> 00:09:49,870 Mida ma tahan teha, on ümbritsev ja minna esimesel kohal. 163 00:09:49,870 --> 00:09:52,870 Äkki oleks lihtsalt öelda, ma lihtsalt pean kontrollima 164 00:09:52,870 --> 00:09:55,600 kui ma ei saa tegelikult panna midagi seal. 165 00:09:55,600 --> 00:09:58,560 Kui ei, siis ma lihtsalt öelda, oh, uus täisvõimsusel 166 00:09:58,560 --> 00:10:02,010 tegelikult võimsus - 1, ja sa ei saa panna element seal. 167 00:10:02,010 --> 00:10:06,150 Aga mis on probleem? Probleem on selles, et kui ma lihtsalt dequeue kõik siin 168 00:10:06,150 --> 00:10:08,240 ja siis ma üritan veel midagi lisada, siis oleks lihtsalt öelda, 169 00:10:08,240 --> 00:10:11,210 Noh, sa olid täisvõimsusel, mis on 0. 170 00:10:11,210 --> 00:10:13,620 Nii oma järjekord on läinud. 171 00:10:13,620 --> 00:10:16,990 Sa pead murdma, ning viis, kuidas murda ümber 172 00:10:16,990 --> 00:10:22,040 mis te õppinud visionäär ja muu psets kasutas mod. 173 00:10:22,040 --> 00:10:29,090 Võid proovida seda kodus mõista, miks sa teeks q.size + q.head 174 00:10:29,090 --> 00:10:31,080 mod võimsus, kuid kui vaadata siin, 175 00:10:31,080 --> 00:10:34,760 me näeme, et see toimib. 176 00:10:34,760 --> 00:10:37,760 Nii et viimane näiteks q.size oli 8 177 00:10:37,760 --> 00:10:47,590 ja pea oli 1, sest see oli see seisukoht siin massiivi. 178 00:10:47,590 --> 00:10:51,970 Seega on 8 + 1, 9. Mod mahutavus 9 oleks 0. 179 00:10:51,970 --> 00:10:56,640 See läheks indeks 0. Tuleme õiges asendis. 180 00:10:56,640 --> 00:10:59,750 Ja proovige siis järjekorda kodus. 181 00:10:59,750 --> 00:11:04,950 Mõned olulised asjad: püüame mõista vahe korstna ja järjekorda. 182 00:11:04,950 --> 00:11:11,620 Kodus, üritavad väga tuttav rakendamise Lisa järjekorda, dequeue, push ja pop. 183 00:11:11,620 --> 00:11:16,560 Ja ka aru, kui sa oleks kasutada igaüks. 184 00:11:16,560 --> 00:11:22,830 >> Teeme lõdvestuge 10 sekundit kamp Pokemons. 185 00:11:22,830 --> 00:11:26,080 Ja nüüd lähme tagasi andmestruktuurid. 186 00:11:26,080 --> 00:11:29,770 Räsitabeli. Paljud inimesed olid hirmul hash tabeleid. 187 00:11:29,770 --> 00:11:33,650 Probleemse seatud 6, õigekirjakontrolli. 188 00:11:33,650 --> 00:11:35,980 Hash tabelid ja proovib, palju inimesed kardavad neid. 189 00:11:35,980 --> 00:11:38,540 Nad arvavad, et nad on nii raske aru saada. Jah? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Ülesanded 5. >> Ülesanded 5, jah. Tänu Rob. 191 00:11:41,490 --> 00:11:43,370 Jah. Kuus oli Huff n "Puff, jah. 192 00:11:43,370 --> 00:11:49,340 Ülesanded 5 oli õigekirjakontrolli ning pidid kasutama kas hash tabel või proovida. 193 00:11:49,340 --> 00:11:55,360 Paljud inimesed arvasid, et nad olid super raske mõista, aga nad on tegelikult üsna lihtne. 194 00:11:55,360 --> 00:12:01,290 Mis on hash tabel, põhiliselt? Hash tabel on massiiv seotud nimekirju. 195 00:12:01,290 --> 00:12:06,730 Ainus erinevus massiivi ja hash tabel 196 00:12:06,730 --> 00:12:09,730 on see, et hash tabel sul on midagi, mida nimetatakse hash funktsiooni. 197 00:12:09,730 --> 00:12:12,080 Mis on hash funktsiooni? 198 00:12:12,080 --> 00:12:13,970 Ma ei tea, kas te saate lugeda siit. 199 00:12:13,970 --> 00:12:16,090 See on näide hash tabelis. 200 00:12:16,090 --> 00:12:19,220 Nii et näete, et teil on massiiv 31 elementi. 201 00:12:19,220 --> 00:12:22,440 Ja mida me teeme hash tabel on räsifunktsiooni 202 00:12:22,440 --> 00:12:26,660 et läheb tõlkida võti iga int indeksile. 203 00:12:26,660 --> 00:12:31,740 Kui näiteks, kui ma tahan valida B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Ma paneks B. Harrison minu hash funktsioonid, 205 00:12:34,190 --> 00:12:36,960 ja räsifunktsiooni Jõutakse 24. 206 00:12:36,960 --> 00:12:40,930 Nii et ma tean, et ma tahan salvestada B. Harrison 24. 207 00:12:40,930 --> 00:12:46,580 Nii et vahe on lihtsalt võttes massiivi ja võttes hash tabel. 208 00:12:46,580 --> 00:12:48,740 In hash tabel teil on funktsioon, mida sulle öelda 209 00:12:48,740 --> 00:12:54,740 kus andmete salvestamiseks, mida soovite salvestada. 210 00:12:54,740 --> 00:12:57,040 Räsifunktsiooni tarvis, mida soovite otsida räsifunktsiooni 211 00:12:57,040 --> 00:13:00,600 mis on determineeritud ja hästi laiali. 212 00:13:00,600 --> 00:13:07,810 Nagu näete siin, siis näeme, et palju andmeid, et ma tahtsin poodi oli tegelikult 19 213 00:13:07,810 --> 00:13:12,470 asemel 31 ja 30 ja 29, mis olid kõik vabad. 214 00:13:12,470 --> 00:13:16,920 Nii räsifunktsiooni, et ma kasutasin ei olnud väga hästi hajutatud. 215 00:13:16,920 --> 00:13:20,710 Kui me ütleme, hästi hajutatud, see tähendab, et me tahame, 216 00:13:20,710 --> 00:13:26,520 jämedalt vähemalt 1 või 2 iga - 217 00:13:26,520 --> 00:13:32,190 jms, vahe on 1 või 2 iga indeksid massiive. 218 00:13:32,190 --> 00:13:43,950 Sa tahad olla umbkaudu sama elementide arvu iga seotud nimekirja massiiv. 219 00:13:43,950 --> 00:13:48,600 Ja see on lihtne kontrollida, kas see on kehtiv hash tabelit vaadata kui hash tabeleid. 220 00:13:48,600 --> 00:13:51,770 >> Siis puud. See on puu. 221 00:13:51,770 --> 00:13:56,400 Puud arvutiteadus on tagurpidi mingil põhjusel. 222 00:13:56,400 --> 00:14:00,150 Nii et just siin on just puu ja siis lehed. 223 00:14:00,150 --> 00:14:05,630 Sa peaksid lihtsalt tean nomenklatuuri vanemad ja laps. 224 00:14:05,630 --> 00:14:12,880 Iga sõlm on oma lapsed, kes on sõlmed, mis on madalam kui lapsevanem. 225 00:14:12,880 --> 00:14:19,660 Nii näiteks 2 saab olema vanem 3 ja teisele lapsele seal, 226 00:14:19,660 --> 00:14:25,290 samas 3 saab olema vanem 1 ja teised lapsed, et on olemas. 227 00:14:25,290 --> 00:14:29,990 Ja 1 saab olema 3 lapse, ja nii edasi. 228 00:14:29,990 --> 00:14:34,610 Meil on midagi palju huvitavam ehk Kahendotsingupuu, 229 00:14:34,610 --> 00:14:39,040 milles kõik väärtused on õigus sõlme 230 00:14:39,040 --> 00:14:41,660 saab olema paremal, siin - paremale, 231 00:14:41,660 --> 00:14:46,780 ei kavatse olla suurem kui element root. 232 00:14:46,780 --> 00:14:49,780 Nii et kui mul on number 5 siinsamas, kõik elemendid paremal 233 00:14:49,780 --> 00:14:51,940 ei kavatse olla suurem kui 5, ja vasakul 234 00:14:51,940 --> 00:14:56,770 kõik elemendid hakkavad olema vähemalt 5. 235 00:14:56,770 --> 00:14:58,780 Miks on see kasulik? 236 00:14:58,780 --> 00:15:01,660 Noh, kui ma tahan, et kontrollida, kas number 7 on siin näiteks 237 00:15:01,660 --> 00:15:05,960 Ma lihtsalt minema 5 esimene ja ma lähen, et näha, on 7 suurem või väiksem kui 5? 238 00:15:05,960 --> 00:15:09,540 See on suurem, nii et ma tean, et see saab olema paremal pool puud. 239 00:15:09,540 --> 00:15:13,980 Nii et mul on palju vähem asju vaadata. 240 00:15:13,980 --> 00:15:19,520 Rakendamiseks Kahendotsingupuu, sõlm, ma lihtsalt läheb on saada andmeid, 241 00:15:19,520 --> 00:15:21,750 nii int n; võid ka string 242 00:15:21,750 --> 00:15:23,630 või midagi, mida tahtsid. 243 00:15:23,630 --> 00:15:28,100 Sa pead olema ettevaatlik, millega määratletakse, mis on suurem, mis on vähem. 244 00:15:28,100 --> 00:15:30,390 Nii et kui sa olid stringid, näiteks, siis võiks määratleda 245 00:15:30,390 --> 00:15:34,690 et kõik need asjad on parem ei kavatse on suurem pikkus, 246 00:15:34,690 --> 00:15:40,940 vasakul ei kavatse on madalam pikkusega, nii et see on tõesti sinust. 247 00:15:40,940 --> 00:15:44,930 >> Kuidas rakendada leida BST? 248 00:15:44,930 --> 00:15:47,840 Esimene asi, mida me peame tegema, on vaadata, kas juured on NULL. 249 00:15:47,840 --> 00:15:50,920 Kui see on NULL, siis tähendab see, et asi ei ole seal 250 00:15:50,920 --> 00:15:53,330 sest sa ei pea isegi puu, eks? 251 00:15:53,330 --> 00:15:55,790 Nii et ma tagasi false. 252 00:15:55,790 --> 00:15:58,740 Muidu, ma lähen, et kontrollida, kas number on suurem 253 00:15:58,740 --> 00:16:01,720 kui väärtus root. 254 00:16:01,720 --> 00:16:04,250 Ma lähen, et proovida leida element paremal 255 00:16:04,250 --> 00:16:08,590 puu. 256 00:16:08,590 --> 00:16:11,310 Sa näed, et ma kasutan rekursioon siin. 257 00:16:11,310 --> 00:16:14,150 Ja siis, kui see on väiksem, ma lähen vaatama vasakule. 258 00:16:14,150 --> 00:16:18,330 Ja lõpuks, kui aga see ei ole väiksem või suurem, 259 00:16:18,330 --> 00:16:20,660 see tähendab, et see on väärtus omaette. 260 00:16:20,660 --> 00:16:23,010 Nii et ma lihtsalt tagasi tõsi. 261 00:16:23,010 --> 00:16:26,360 Näete siin, et ma kasutasin kui siis, kui. 262 00:16:26,360 --> 00:16:30,820 Ja pidage meeles, viktoriin 0, meil oli probleem, mis oli siis, kui, kui, 263 00:16:30,820 --> 00:16:32,780 ja sa pidid leidma ebaefektiivsus, 264 00:16:32,780 --> 00:16:35,180 ja ebatõhusust, et sa kasutasid kui. 265 00:16:35,180 --> 00:16:39,060 Sa oleks pidanud kasutama, kui teine, kui teine, kas ja mujal. 266 00:16:39,060 --> 00:16:44,240 Niisiis, ma peaksin kasutama muud kui ja teine ​​siis ja veel siin? 267 00:16:44,240 --> 00:16:46,200 Kas keegi - jah? 268 00:16:46,200 --> 00:16:51,140 [Student keelt, kuuldamatu] 269 00:16:51,140 --> 00:16:53,480 See on suurepärane. Nii ta ütleb, et see ei ole oluline, 270 00:16:53,480 --> 00:16:55,930 lihtsalt sellepärast, et ebaefektiivsus, et meil oli enne 271 00:16:55,930 --> 00:16:59,550 oli see, et kuna, äkki kui mõned tingimus oli täidetud, 272 00:16:59,550 --> 00:17:03,570 Nii et teil on läbi tegevuse, kuid siis te ei kavatse vaadata kõik muud tingimused. 273 00:17:03,570 --> 00:17:06,319 Aga sel juhul, see tagastatakse kohe, et see ei ole oluline. 274 00:17:06,319 --> 00:17:09,220 Nii et sa ei pea kasutama muud kui. 275 00:17:09,220 --> 00:17:11,740 >> Ja lõpuks räägime katseid 276 00:17:11,740 --> 00:17:13,800 mis on igaühe lemmik. 277 00:17:13,800 --> 00:17:15,980 Proovida on puu massiive. 278 00:17:15,980 --> 00:17:20,369 See on väga kiire otsida väärtusi, kuid ta kasutab palju mälu. 279 00:17:20,369 --> 00:17:22,530 Ja see on tavaliselt filtreerida sõnad, nii et kui sa 280 00:17:22,530 --> 00:17:27,920 soovivad rakendada, näiteks, ma ei tea, nagu telefoniraamat telefonis 281 00:17:27,920 --> 00:17:30,440 ja sa tahad, et oleks võimalik B-tüüpi 282 00:17:30,440 --> 00:17:32,510 ja lihtsalt inimeste nimed, kes on B. 283 00:17:32,510 --> 00:17:37,960 See on väga lihtne rakendada, et kasutades proovida, näiteks. 284 00:17:37,960 --> 00:17:39,820 Kuidas sa defineerid sõlme proovida? 285 00:17:39,820 --> 00:17:43,910 Sa pead lihtsalt olema bool et läheb is_word. 286 00:17:43,910 --> 00:17:48,660 See tähendab seda, et kasutades kõik märgid enne seda sõlme, 287 00:17:48,660 --> 00:17:51,920 sa suutsid sõna moodustamiseks, 288 00:17:51,920 --> 00:17:57,230 ja siis pead massiivi osuti sõlmedele. 289 00:17:57,230 --> 00:18:03,120 Kas te näete, et meil on hulgaliselt vanem sõlmede nii sõlme * array? Jah? 290 00:18:03,120 --> 00:18:06,050 Vaatame, kuidas see töötab. Sest õigekirja kontroll, 291 00:18:06,050 --> 00:18:08,230 meil massiivi 27 elementi, 292 00:18:08,230 --> 00:18:12,150 sest meil on kõik tähed pluss ülakoma. 293 00:18:12,150 --> 00:18:17,800 Enne siin ma olen lihtsalt kavatse kasutada 2, sest ma tahan, et oleks võimalik kirjutada laual. 294 00:18:17,800 --> 00:18:20,230 Okei. Nii et see on näide proovida. 295 00:18:20,230 --> 00:18:25,600 Kui ma lihtsalt määratleda esimese sõlme Võtan massiivi 2 elementi 296 00:18:25,600 --> 00:18:29,290 mis on 2 vihjeid NULL, nii et ma lihtsalt panna "a" ja "b". 297 00:18:29,290 --> 00:18:32,430 Ja ma lähen on tõeväärtus, mis ütleb is_word. 298 00:18:32,430 --> 00:18:34,420 See saab olla vale, et esimene, 299 00:18:34,420 --> 00:18:37,370 lihtsalt sellepärast, et enne, et teil ei ole mingit märki. 300 00:18:37,370 --> 00:18:40,900 Nii tühi sõna ei ole sõna. Nii et see on vale. 301 00:18:40,900 --> 00:18:46,320 Kui ma tahan lisada "" sellele sõnastik, mida ma pean tegema? 302 00:18:46,320 --> 00:18:49,760 Ma lihtsalt pean malloc uus sõlm "" 303 00:18:49,760 --> 00:18:54,630 ja seejärel lisage oma sõna tõsi. 304 00:18:54,630 --> 00:19:00,180 Nii see lihtsalt on, et olles "" läheb, et olla tõsi. Mõtet? 305 00:19:00,180 --> 00:19:04,120 Siis kui ma tahan lisada "ba" Ma pean malloc 1 "b", 306 00:19:04,120 --> 00:19:07,550 ja siis ma lähen luua boolean false, 307 00:19:07,550 --> 00:19:10,160 sest "b" iseenesest ei ole sõna. 308 00:19:10,160 --> 00:19:13,010 Siis ma lähen malloc veel üks "a", seega "ba" 309 00:19:13,010 --> 00:19:16,290 ja siis ma lähen loodud see on sõna tõsi. 310 00:19:16,290 --> 00:19:18,950 Sest "ba" on sõna. 311 00:19:18,950 --> 00:19:21,910 Ja siis, kui ma tahan näha, kui "b" on see sõnastik 312 00:19:21,910 --> 00:19:26,730 Ma võin lihtsalt minema esimene, "b". Ma lähen alla ja vaatan on sõna, ja see ütleb vale. 313 00:19:26,730 --> 00:19:30,110 Nii et see ei ole sõna. Kui ma tahan vaadata "ba" 314 00:19:30,110 --> 00:19:38,010 Lähen esimene, "b", ja seejärel minna "", ja ma näen tõsi, et see on sõna. Mõtet? 315 00:19:38,010 --> 00:19:41,950 Paljud inimesed segadusse üritab. Ei? 316 00:19:41,950 --> 00:19:44,740 >> Lõpuks Huffman kodeerimine. Huffman kodeerimine on väga kasulik 317 00:19:44,740 --> 00:19:47,550 et säästa mälu ja suruma tekstifaile 318 00:19:47,550 --> 00:19:52,270 lihtsalt sellepärast, et palju kordi te kasutate "a" ja "e", näiteks 319 00:19:52,270 --> 00:19:57,710 oma dokumente, kuid ma ei tea, kas te kasutate "Q" või "Z" nii palju. 320 00:19:57,710 --> 00:20:02,040 Võttes ainult 1 baidi jaoks iga märk, 321 00:20:02,040 --> 00:20:08,520 iga - 256 tähemärki, mis meil on ASCII tabel ei ole väga optimaalne, 322 00:20:08,520 --> 00:20:11,410 lihtsalt sellepärast, et seal on mõned märgid, et te kasutate palju rohkem, 323 00:20:11,410 --> 00:20:15,180 nii peaksid sa kasutama vähem mälu neile. 324 00:20:15,180 --> 00:20:17,560 Kuidas kasutada Huffman kodeerimine? 325 00:20:17,560 --> 00:20:20,010 Peame tegema Huffman puu. 326 00:20:20,010 --> 00:20:23,370  Huffman puul on sõlmed 327 00:20:23,370 --> 00:20:27,760 mis on sümbol, mis saab olema nagu, "a", "b", "c" täht, 328 00:20:27,760 --> 00:20:32,990 olenemata kirja teil on sagedus, mis on sagedus, et sõna on tekstis, 329 00:20:32,990 --> 00:20:36,280 et sa olid luua Huffman puu, 330 00:20:36,280 --> 00:20:41,800 ja siis sõlm, mis läheb juhtida vasakule Huffman puu 331 00:20:41,800 --> 00:20:47,210 ja teine ​​lümfisõlm, mis läheb juhtida paremale. Nii lihtsalt nagu puu. 332 00:20:47,210 --> 00:20:49,440 Kuidas ehitada Huffman puu? 333 00:20:49,440 --> 00:20:54,020 Sa lähed, et valida 2 sõlmed, mis on madalaim sagedustel. 334 00:20:54,020 --> 00:20:56,490 Kui teil tie sa lähed valima 2 sõlmede 335 00:20:56,490 --> 00:20:59,870 millel madalaim ASCII väärtused samuti. 336 00:20:59,870 --> 00:21:02,420 Siis sa lähed, et luua uus puu välja need 2 sõlmede 337 00:21:02,420 --> 00:21:08,030 et läheb on ühendatud sagedus vanem sõlme. 338 00:21:08,030 --> 00:21:13,240 Ja siis sa lähed eemaldada 2 last metsas 339 00:21:13,240 --> 00:21:15,570 ja asendada need vanem. 340 00:21:15,570 --> 00:21:18,930 Ja sa lähed korrata, et kuni sul on ainult 1 puu metsas. 341 00:21:18,930 --> 00:21:23,840 Vaatame, kuidas sa teeks Huffman puu ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Näete siin, et kõik tähed on sagedus 1, välja arvatud "", mis on sagedus 2. 343 00:21:29,220 --> 00:21:34,090 Nii et ma loodud sõlmpunktid kõik tähed panin järjekorras ASCII väärtus ja sagedus. 344 00:21:34,090 --> 00:21:40,090 Nii et kui ma tahan, et luua esimene puu, siis on see koos "L" ja "M". 345 00:21:40,090 --> 00:21:43,100 Nii et see on siin. Sagedus paari saab 2 346 00:21:43,100 --> 00:21:49,470 sest see on 1 + 1, siis järgmisel 2 koos madalaima sagedused on "Y" ja "Z". 347 00:21:49,470 --> 00:21:53,180 Ja siis on mul kõik need on - on sagedusega 2. 348 00:21:53,180 --> 00:22:00,470 Niisiis, millised on need, mis on madalaim ASCII raha kõrval üks? 349 00:22:00,470 --> 00:22:04,830 "A" ja "L". Nii et ma luua uus sõlm, 350 00:22:04,830 --> 00:22:09,930 ja lõpuks, see on 4 ja 2, nii et 2 saab olema vasakul. 351 00:22:09,930 --> 00:22:12,430 Ja see on Huffman puu. 352 00:22:12,430 --> 00:22:16,060 Siis kui ma tahan kirjutada mingi tekst, 353 00:22:16,060 --> 00:22:24,440 nagu binaarsed teisendada tekst, kasutades Huffman puu on väga lihtne. 354 00:22:24,440 --> 00:22:30,220 Näiteks, kui ma ütlen, et liigub vasakule on 0 ja liigub paremale on 1, 355 00:22:30,220 --> 00:22:32,410 Mis on see, et läheb esindama? 356 00:22:32,410 --> 00:22:35,530 Nii nagu 1, 1, nii paremale, paremale, 357 00:22:35,530 --> 00:22:40,370 ja siis 0, nii vasak oleks L ja seejärel 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Nii 1, 0, lihtsalt 1, 0, "". 359 00:22:43,950 --> 00:22:47,540 Ja siis 0, 1, nii et "Z". 360 00:22:47,540 --> 00:22:52,170 Ja siis 1, 0, 0 - ei. 361 00:22:52,170 --> 00:22:56,780 0, 0 on "Jah", nii laisk. 362 00:22:56,780 --> 00:23:06,060 Nii et see kõik on minu jaoks, Rob kavatse üle võtta. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Nii, nädal 7 kraam. 364 00:23:08,400 --> 00:23:11,390 Meil on palju minna üle tõeliselt kiire. 365 00:23:11,390 --> 00:23:13,430 Bitwise ettevõtjad, buffer overflow, 366 00:23:13,430 --> 00:23:16,760 CS50 raamatukogu, siis HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Kokkuvõttes, nagu 15-20 minutit. 368 00:23:20,990 --> 00:23:24,330 Bitwise ettevõtjad. Seal on 6 neist, et sa pead teadma. 369 00:23:24,330 --> 00:23:31,200 BitWise ja BitWise või XOR, vasakule nihe, paremale nihe, ja ei. 370 00:23:31,200 --> 00:23:35,420 Paremalenihe ja sa ei vaevu nägin loeng üldse. 371 00:23:35,420 --> 00:23:40,480 Me läheme üle kiiresti siin, aga see on hea teada, et need on 6, mis on olemas. 372 00:23:40,480 --> 00:23:45,070 Pea meeles, et bitwise ettevõtjad on nagu siis, kui sa seda 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Sa ei tegele binaarne 3 ja 4. 374 00:23:49,420 --> 00:23:56,550 Mis bitwise ettevõtjatele te tegelikult tegelevad üksikute bittide arvuga 3 ja 4. 375 00:23:56,550 --> 00:23:59,120 >> Nii esimene, mis me ütleme on bitwise mitte, 376 00:23:59,120 --> 00:24:02,340 ja kõik see on flip kõik bitid. 377 00:24:02,340 --> 00:24:05,500 Nii siin, kui sa oled kirjutamise C, siis ei kirjuta seda 378 00:24:05,500 --> 00:24:09,380 kui ~ 11011 või mis iganes, siis oleks kirjutada see meeldib ~ 4, 379 00:24:09,380 --> 00:24:12,970 ja siis oleks klapp binaarkujul 4. 380 00:24:12,970 --> 00:24:24,800 Nii et siin, ~ mõned binaarne number 1101101 läheb täpselt flip kõik 1 on 0, maailm ja kõik 0-1 oma. 381 00:24:24,800 --> 00:24:27,600 Nagu ma ütlesin seal, et sageli kasutavad seda, 382 00:24:27,600 --> 00:24:30,830 ja me näeme seda veidi, on nagu me tahame tulla mõned number 383 00:24:30,830 --> 00:24:35,460 kus kõik bitid on 1, välja arvatud üks neist. 384 00:24:35,460 --> 00:24:38,560 Nii et see on tavaliselt lihtsam väljendada number 385 00:24:38,560 --> 00:24:40,630 kui lihtsalt ühe natuke on seatud, 386 00:24:40,630 --> 00:24:44,650 ja siis võta ~ see, et iga teine ​​bitt on arvatud, et üks. 387 00:24:44,650 --> 00:24:50,300 Nii see on, mida me ei kavatse kasutada rohkem natuke. 388 00:24:50,300 --> 00:24:58,220 >> BitWise või. Siin on 2 kahendsüsteemile ja need 2 numbrit 389 00:24:58,220 --> 00:25:00,780 on üsna tüüpiline, sest nad esindavad kõikvõimalikke 390 00:25:00,780 --> 00:25:07,290 kombinatsioon bitti, mida võiks vaja tegutseda. 391 00:25:07,290 --> 00:25:13,540 Siin, kui ma or'd iga bit, me lihtsalt võrrelda otse alla. 392 00:25:13,540 --> 00:25:15,410 Nii vasakul meil 1 ja 1. 393 00:25:15,410 --> 00:25:20,510 Kui ma bitwise | need, mida ma nüüd saan? One. 394 00:25:20,510 --> 00:25:25,320 Siis bitwise | 0 ja 1 läheb mulle anda? One. 395 00:25:25,320 --> 00:25:27,840 BitWise 1 ja 0 saab olema sama, mis on üks. 396 00:25:27,840 --> 00:25:31,880 BitWise 0 | 0 läheb mulle 0. 397 00:25:31,880 --> 00:25:37,300 Nii ainult juhul, kui ma saan 0 on 0 | 0 korral. 398 00:25:37,300 --> 00:25:40,020 Ja te võite mõelda, et just nagu teie loogiline ors. 399 00:25:40,020 --> 00:25:44,830 Nii et kui sa arvad, et 1 tõsi ja 0, kui vale, sama asi kehtib ka siin. 400 00:25:44,830 --> 00:25:50,040 Nii tõsi või õige õige, õige või vale on tõsi. 401 00:25:50,040 --> 00:25:57,150 Vale või õige on õige, vale või vale on ainus asi, mis on tegelikult vale. 402 00:25:57,150 --> 00:26:00,100 Siin on näide sellest, et sa peaksid teadma 403 00:26:00,100 --> 00:26:05,160 nagu päris hea näide, kui bitwise ettevõtjad kasutavad. 404 00:26:05,160 --> 00:26:08,660 Siin, kui me või kapitali "koos Ox20, 405 00:26:08,660 --> 00:26:11,830 ja me vaatame neid teise, saame midagi. 406 00:26:11,830 --> 00:26:16,020 Ja kui me või väiketähti "" koos Ox20 me midagi. 407 00:26:16,020 --> 00:26:26,750 Teeme tõmba ASCII tabelis. 408 00:26:26,750 --> 00:26:34,000 Okei. Siin näeme, et A on - 409 00:26:34,000 --> 00:26:36,920 siin me oleme "" on pärast 65. 410 00:26:36,920 --> 00:26:45,120 Aga ma tulen kuueteistkümnendsüsteemis, mis on Ox41. 411 00:26:45,120 --> 00:26:48,280 Päris kindel, et me nägime seda klassis. Ma arvan, et me nägime seda klassi 412 00:26:48,280 --> 00:26:52,730 et see on üsna lihtne teisendada kuueteistkümnendsüsteemis kahekomponentsete. 413 00:26:52,730 --> 00:26:55,280 Nii siin, kui ma tahan panna 4 binaarne, 414 00:26:55,280 --> 00:26:59,550 see on lihtsalt saab olema 0100. 415 00:26:59,550 --> 00:27:03,620 See on 1 koht, 2 koht, 4 koht, nii et see on 4. 416 00:27:03,620 --> 00:27:08,550 Siis ma saan osa 1 binaarne, mis saab olema 0001. 417 00:27:08,550 --> 00:27:14,280 Ja nii see saab olema esindatus "" kahendsüsteemis. 418 00:27:14,280 --> 00:27:22,720 Võttes väiketähti "" see on nüüd läheb Ox61, 419 00:27:22,720 --> 00:27:27,050 kus, jagades need üles oma binaarne, nii 6 - 420 00:27:27,050 --> 00:27:37,830 Olgem tegelikult seda teha - ei puudu kustutuskumm? Eraser. 421 00:27:37,830 --> 00:27:48,220 Ox61. Nii jagada 6 binaarne saab olema 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 Ja jagamine 1 saab olema 0001. 423 00:27:54,610 --> 00:27:56,520 Vaadates Erinevus nende 2, 424 00:27:56,520 --> 00:28:04,250 me näeme, et ainus erinevus väiketähed ja kapitali "on selle ühe natuke. 425 00:28:04,250 --> 00:28:11,810 Nii tulevad tagasi siia - okay. 426 00:28:11,810 --> 00:28:15,920 Tulles tagasi siin, kui me vaatame, mida natuke Ox20 on 427 00:28:15,920 --> 00:28:22,210 nii lõikamise Ox20 sisse oma binaarne, 428 00:28:22,210 --> 00:28:27,310 on 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 Ox20, ainult natuke, et on määratud see natuke, et oleme mures, 430 00:28:33,470 --> 00:28:38,210 koos vaheldumisi suuri kui ka väikesi "". 431 00:28:38,210 --> 00:28:47,610 Kui ma või "A", mis on see, "", 432 00:28:47,610 --> 00:28:50,580 kui ma või "A"-ga Ox20, 433 00:28:50,580 --> 00:28:53,490 mida ma nüüd saan? 434 00:28:53,490 --> 00:28:58,960 [Student, kuuldamatu] >> Väiketähed "a", kuna see läheb klapp see natuke 1. 435 00:28:58,960 --> 00:29:04,170 Ja kui ma või "a"-ga Ox20, mida ma nüüd saan? 436 00:29:04,170 --> 00:29:08,780 Väiketähed, sest lihtsalt Öring "" koos Ox20, 437 00:29:08,780 --> 00:29:14,580 Ma lihtsalt tuleb Öring selle ühe natuke 1, see on juba 1, nii et see ei loe. 438 00:29:14,580 --> 00:29:17,960 Nii saame "" ja "". 439 00:29:17,960 --> 00:29:24,820 >> BitWise ja. Jällegi, me ei mõtle seda kui meie loogiline ja vastutasu. 440 00:29:24,820 --> 00:29:28,180 Vasakul pool on meil tõeline ja õige. 441 00:29:28,180 --> 00:29:31,160 See saab olla tõsi, ja kõigil juhtudel, 442 00:29:31,160 --> 00:29:36,270 vale ja õige või tõene ja vale või väär ja vale, 443 00:29:36,270 --> 00:29:38,550 mitte ükski neist asjadest on tõsi. 444 00:29:38,550 --> 00:29:44,170 Niisiis, mida me lõpuks saada 1000. 445 00:29:44,170 --> 00:29:48,830 Nüüd, siin, siin, kus ma olen kasutanud ustav bitwise mitte, 446 00:29:48,830 --> 00:29:52,230 kus meil oli Ox20. 447 00:29:52,230 --> 00:29:54,350 Nii et see on Ox20. 448 00:29:54,350 --> 00:29:59,570 Nüüd, mida ma tahan teha, bitwise ~ of Ox20. 449 00:29:59,570 --> 00:30:03,600 See läheb klapp kõik bitid. 450 00:30:03,600 --> 00:30:09,330 Nii et mul on 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 Ja nii "" anded on ~ Ox20 läheb mulle mida? 452 00:30:18,940 --> 00:30:22,430 Ainult natuke meil on tõesti vaja mõelda on see, 453 00:30:22,430 --> 00:30:26,020 sest kui kõik need bitid 1, 454 00:30:26,020 --> 00:30:29,000 siis me ei kavatse saada täpselt mida "" oli, 455 00:30:29,000 --> 00:30:31,260 välja arvatud, võib-olla, mis see natuke on. 456 00:30:31,260 --> 00:30:34,460 Sest kui ta oli 1, nüüd läheb seada 0, 457 00:30:34,460 --> 00:30:39,810 sest mis iganes see on, anded selle saab olema 0. 458 00:30:39,810 --> 00:30:43,280 Mis on A & ~ Ox20 annan mina? 459 00:30:43,280 --> 00:30:48,200 [Õpilased vastata, kuuldamatu] >> Ja mis on "a" ja - see on "". 460 00:30:48,200 --> 00:30:52,170 Ja mis on "a" ja ~ Ox20 annan mina? 461 00:30:52,170 --> 00:30:56,720 "A." Kuna see on praegu 1. 462 00:30:56,720 --> 00:30:59,570 Anding käesoleva 0 kavatseb teha see 0, 463 00:30:59,570 --> 00:31:02,530 ja nüüd me ei kavatse saada ". 464 00:31:02,530 --> 00:31:06,600 >> Mõlemad on ", ja last but not least seda tüüpi, 465 00:31:06,600 --> 00:31:10,830 meil XOR. See on väga sarnane või 466 00:31:10,830 --> 00:31:14,400 välja arvatud see tähendab ainult või. 467 00:31:14,400 --> 00:31:18,420 See on nagu see, mida sa tavaliselt mõtlema nagu või reaalses maailmas. 468 00:31:18,420 --> 00:31:23,190 Nii et sa ei kas "x" või "Y", aga mitte mõlemad. 469 00:31:23,190 --> 00:31:28,700 Siin 1 ^ 1 saab olema 0. 470 00:31:28,700 --> 00:31:33,650 Sest tõsi, see on - see ei toimi nii hästi loogiline õige ja vale 471 00:31:33,650 --> 00:31:37,150 kui bitwise & ja või teed, 472 00:31:37,150 --> 00:31:40,100 kuid tõsi ^ tõsi on vale. 473 00:31:40,100 --> 00:31:44,810 Kuna me ainult tahame naasta tõsi, kui ainult üks neist on õige. 474 00:31:44,810 --> 00:31:50,950 Nii 1 ^ 1 on 0. Aga 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 Kas 1. 1 ^ 0 on 1, 0 ^ 0 on 0.. 476 00:31:56,010 --> 00:32:03,890 Nii igasugustes tingimustes, 0 bitwise midagi 0 saab olema 0. 477 00:32:03,890 --> 00:32:10,270 1 bitwise midagi 0 või 0 bitwise 1, 478 00:32:10,270 --> 00:32:14,660 kas see on | või ^, see saab olema 1, ja kui see on ja see saab olema 0. 479 00:32:14,660 --> 00:32:20,850 Ja ainult juhul, kui 1 bitwise 1 ei ole 1 on ainu-või. 480 00:32:20,850 --> 00:32:24,580 See on 0110. 481 00:32:24,580 --> 00:32:36,520 Nii et siin nüüd, kasutades XOR - nii oleme tagasi 20. 482 00:32:36,520 --> 00:32:43,480 "" ^ Ox20 on need 2 bitti me võrrelda. 483 00:32:43,480 --> 00:32:50,020 Nii 1 ^ 0 läheb mulle mida? Üks. 484 00:32:50,020 --> 00:32:58,430 "" ^ Ox20 läheb mulle anda? Väiketähed. 485 00:32:58,430 --> 00:33:04,010 "" ^ Ox20 läheb mulle anda? Capital A. 486 00:33:04,010 --> 00:33:09,310 Sest mis iganes see teeb, see XORing koos Ox20 487 00:33:09,310 --> 00:33:15,380 tegelikult flipping iganes see natuke on. 488 00:33:15,380 --> 00:33:21,240 Kui see on 0, see on nüüd hakkab muutuma 1. 489 00:33:21,240 --> 00:33:26,160 Kuna see on 1, 1 ^ 1 on 0. 490 00:33:26,160 --> 00:33:33,280 Nii et meie "" muutunud "" ja meie "" muutunud ". 491 00:33:33,280 --> 00:33:36,910 Nii XOR on tõesti mugav viis lihtsalt flipping puhul. 492 00:33:36,910 --> 00:33:39,960 Sa tahad Käi tähtede 493 00:33:39,960 --> 00:33:44,330 ja asendusliikmete puhul iga märk, 494 00:33:44,330 --> 00:33:50,680 sa lihtsalt XOR kõike Ox20. 495 00:33:50,680 --> 00:33:55,220 >> Nüüd oleme vasakule nihe. Vasakulenihe lihtsalt läheb, põhimõtteliselt 496 00:33:55,220 --> 00:34:01,250 push kõik numbrid või vasakule, ja sisestada 0 on nende taga. 497 00:34:01,250 --> 00:34:05,550 Nii et siin me oleme 00001101. 498 00:34:05,550 --> 00:34:08,560 Me push 3 0 on paremalt, 499 00:34:08,560 --> 00:34:13,580 ja saame 01101000. 500 00:34:13,580 --> 00:34:16,380 In kahendkujul mõttes 501 00:34:16,380 --> 00:34:24,699 me näeme, et see on tõesti tegemist 13 vasakule nihutatud 3, mis annab meile 104. 502 00:34:24,699 --> 00:34:32,530 Nii vasakule minnes näeme siin, x << y on põhimõtteliselt x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 on 8, nii et 13 * 8 on 104. 504 00:34:40,139 --> 00:34:45,679 Kui sa arvad binaarne üldiselt kui iga number, 505 00:34:45,679 --> 00:34:49,530 kui hakkame õige, see on 1 koht, siis 2 koha, siis 4 koht. 506 00:34:49,530 --> 00:34:51,330 Niisiis, surudes 0-st paremale, 507 00:34:51,330 --> 00:34:55,080 me lihtsalt surudes asju, mis olid 4 koht kuni 8 koht, 508 00:34:55,080 --> 00:34:57,920 ja asjad, mis olid 8. koht kuni 16 koht. 509 00:34:57,920 --> 00:35:01,280 Iga vahetuse lihtsalt korrutab 2. Jah? 510 00:35:01,280 --> 00:35:05,210 [Student] Mis juhtub, kui sa nihutatakse 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Kui nihutatakse 5 siis oleks lihtsalt kaotad numbrit. 512 00:35:10,790 --> 00:35:15,410 Paratamatult on see sama asi. Like, täisarvud on ainult 32 bitti, 513 00:35:15,410 --> 00:35:20,750 Nii et kui teil lisada 2 tõesti suur täisarvud, see lihtsalt ei mahu täisarv. 514 00:35:20,750 --> 00:35:23,660 Nii et see on sama asi siin. Kui te nihutatakse 5, 515 00:35:23,660 --> 00:35:25,650 me lihtsalt kaotame selle. 516 00:35:25,650 --> 00:35:28,820 Ja see on selline, mida ma mõtlen "jämedalt" 517 00:35:28,820 --> 00:35:37,470 kus, kui sa minema liiga kaugele, sa kaotad bitti. 518 00:35:37,470 --> 00:35:39,830 >> Paremalenihe saab olema vastupidine, 519 00:35:39,830 --> 00:35:43,090 kuhu me läheme pista 0 keeras end, 520 00:35:43,090 --> 00:35:48,400 ja meie eesmärkidel, täitke 0-vasakult. 521 00:35:48,400 --> 00:35:52,910 Nii teeme seda, me põhiliselt tagurdamine, mida me juba teinud. 522 00:35:52,910 --> 00:35:57,780 Ja me näeme, et kolm 0-paremale on lihtsalt ära kukkunud, 523 00:35:57,780 --> 00:36:02,020 ja oleme surunud 1101 kogu tee paremale. 524 00:36:02,020 --> 00:36:08,380 See teeb 104 >> 3, mis on tõhus, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Nüüd, siin, see on sarnane idee. 526 00:36:11,200 --> 00:36:18,720 Miks on see lihtsalt umbes x / 2 ^ y, ja tegelikult ei x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Sest kui mul oli nihutatakse 4, oleksin kaotanud 1. 528 00:36:22,240 --> 00:36:25,950 Põhimõtteliselt, mida sa arvad, lihtsalt arvan, et täisarv jaotus üldiselt. 529 00:36:25,950 --> 00:36:31,070 Niisiis, nagu 5/2 on 2. See ei ole 2.5. 530 00:36:31,070 --> 00:36:35,000 See on sama mõte siin. Kui me jagame 2, 531 00:36:35,000 --> 00:36:39,910 saame kaotada veider bitti mööda teed. 532 00:36:39,910 --> 00:36:43,870 Nüüd - Ongi bitwise. See on kõik, mida vaja teada. 533 00:36:43,870 --> 00:36:46,340 Mäleta kasutamise juhtudel nägime klassis, 534 00:36:46,340 --> 00:36:49,340 nagu natuke mask on kasulik bitwise ettevõtjad, 535 00:36:49,340 --> 00:36:53,220 või kasutate neid natuke maskid. 536 00:36:53,220 --> 00:36:58,620 Trükitähtedega ja väiketähti, ümberehitused on päris prototüüpsed näiteks. 537 00:36:58,620 --> 00:37:01,640 >> Ok, buffer overflow rünnakuid. 538 00:37:01,640 --> 00:37:05,110 Keegi mäletab, mis viga oli see funktsioon? 539 00:37:05,110 --> 00:37:10,140 Teadaanne kuulutasime massiivi 12 baiti, 12 tähemärki, 540 00:37:10,140 --> 00:37:18,510 ja siis me koopia meie puhver 12 tähemärki kogu string bar. 541 00:37:18,510 --> 00:37:25,080 Mis on probleem? 542 00:37:25,080 --> 00:37:32,270 Maagiline number 12 peaks päris palju kohe pop välja nagu - miks 12? 543 00:37:32,270 --> 00:37:35,050 Mida teha, kui bar juhtub olema rohkem kui 12 tähemärki? 544 00:37:35,050 --> 00:37:41,200 Mis siis, kui riba on miljoneid tegelased? 545 00:37:41,200 --> 00:37:46,010 Siin on küsimus selles, memcpy. Kui riba on piisavalt pikk, 546 00:37:46,010 --> 00:37:50,330 see lihtsalt täiesti - "c", "c" ei ​​huvita, et see oli ainult 12 tähemärki; 547 00:37:50,330 --> 00:37:53,280 "C" ei hooli, et see ei sobi, et paljud baiti. 548 00:37:53,280 --> 00:37:58,250 See lihtsalt täiesti kirjutatakse char, 12 bytes oleme eraldatud see, 549 00:37:58,250 --> 00:38:01,830 ja kõik varem seda mälu, mis tegelikult ei kuulu, et puhver 550 00:38:01,830 --> 00:38:06,520 kõikvõimaliku string riba. 551 00:38:06,520 --> 00:38:09,780 Nii et see oli pilt nägime klassis 552 00:38:09,780 --> 00:38:12,220 kus oleme meie stack kasvab. 553 00:38:12,220 --> 00:38:16,040 Sul tuleks kasutada neid pilte või tutvuda nendega uuesti. 554 00:38:16,040 --> 00:38:21,260 Oleme meie stack kasvab, mälu aadressid algavad 0 tipus 555 00:38:21,260 --> 00:38:26,270 ja kasvab kuni meeldi 4000000000 allosas. 556 00:38:26,270 --> 00:38:28,820 Meil on massiiv "c" kuskil mälus 557 00:38:28,820 --> 00:38:32,260 siis oleme meie kursor riba paremal all see, 558 00:38:32,260 --> 00:38:38,720 ja siis meil on see salvestatud kaader pointer meie saatja aadress ning meie vanem rutiin pinu. 559 00:38:38,720 --> 00:38:40,800 Pea meeles, mida saatja aadress on? 560 00:38:40,800 --> 00:38:45,360 See on kui peamine nõuab funktsiooni foo kutsub funktsioon bar, 561 00:38:45,360 --> 00:38:48,100 paratamatult, baar tulu. 562 00:38:48,100 --> 00:38:52,610 Nii et kui bar tulu, mida nad peavad teadma, et see läheb tagasi suva, mis nõudis ta. 563 00:38:52,610 --> 00:39:01,360 Nii saatja aadress on aadress funktsiooni, et ta peab tagasi, kui tagastab funktsioon. 564 00:39:01,360 --> 00:39:05,830 Põhjusel, et on oluline, et buffer overflow rünnakute tõttu, mugavalt, 565 00:39:05,830 --> 00:39:09,580 Häkkerid soovite muuta, et saatja aadress. 566 00:39:09,580 --> 00:39:14,950 Selle asemel, et läheb tagasi suva, ma lähen tagasi sinna, kus häkker tahab tagasi minna. 567 00:39:14,950 --> 00:39:17,760 Ja mugavalt kus häkker sageli tahab minna tagasi 568 00:39:17,760 --> 00:39:22,400 on algusest puhvris et me algselt oli. 569 00:39:22,400 --> 00:39:26,170 Nii teate, jälle, Little India. 570 00:39:26,170 --> 00:39:28,490 Seade on näide Little India süsteem, 571 00:39:28,490 --> 00:39:34,140 nii täisarv või osuti on salvestatud bytes vastupidine. 572 00:39:34,140 --> 00:39:38,980 Nii et siin me näeme - see on? Jah. 573 00:39:38,980 --> 00:39:45,660 Näeme Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Mäleta kuueteistkümnendarvudega? 575 00:39:48,250 --> 00:39:50,640 Me ei muuda kuueteistkümnendarve Little India, 576 00:39:50,640 --> 00:39:56,110 sest 2 kuueteistkümnendarvudega moodustavad ühe baidi ja me vastupidine baiti. 577 00:39:56,110 --> 00:40:00,300 Sellepärast me ei salvesta, nagu 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Me säilitada hoopis iga paari 2 numbrit, alustades paremalt. 579 00:40:07,520 --> 00:40:10,880 See aadress viitab aadress algust 580 00:40:10,880 --> 00:40:15,190 meie puhver, et me tegelikult tahtsime kopeeritav esimese koha. 581 00:40:15,190 --> 00:40:19,230 Põhjusel, et see kasulik on, sest mis siis, kui ründaja 582 00:40:19,230 --> 00:40:24,100 juhtus, selle asemel string, mis oli lihtsalt 583 00:40:24,100 --> 00:40:27,060 kahjutu string nagu oma nime või midagi, 584 00:40:27,060 --> 00:40:33,900 Mis siis, kui selle asemel, et string oli lihtsalt mingi suvaline kood 585 00:40:33,900 --> 00:40:38,610 et tegin mida iganes nad tahtsid seda teha? 586 00:40:38,610 --> 00:40:45,630 Nii võivad nad - ma ei mõtle iga cool kood. 587 00:40:45,630 --> 00:40:47,780 See võiks olla midagi, kuigi. Kõik katastroofiline kood. 588 00:40:47,780 --> 00:40:51,440 Kui nad tahavad, võivad nad lihtsalt midagi at seg vead, kuid see oleks mõttetu. 589 00:40:51,440 --> 00:40:54,950 Tavaliselt seda häkkida oma süsteemi. 590 00:40:54,950 --> 00:40:59,930 >> Ok. CS50 raamatukogu. 591 00:40:59,930 --> 00:41:04,800 See on põhiliselt getInt, getString, kõik need funktsioonid andsime teile. 592 00:41:04,800 --> 00:41:10,630 Nii et meil on char * string, ja see on abstraktsioon, mis me puhus ära 593 00:41:10,630 --> 00:41:12,450 mingil hetkel poolaastal. 594 00:41:12,450 --> 00:41:18,220 Pea meeles, et string on lihtsalt massiivi tähemärki. 595 00:41:18,220 --> 00:41:23,240 Nii et siin me näeme lühendatud versioon getString. 596 00:41:23,240 --> 00:41:25,920 Sa peaksid tagasi vaadata seda meeles, kuidas see tegelikult ellu viia. 597 00:41:25,920 --> 00:41:30,950 Võtme andmed on märgata, saame ühe märgi korraga 598 00:41:30,950 --> 00:41:34,570 alates standard, mis on just nagu meie kirjutades klaviatuuri. 599 00:41:34,570 --> 00:41:37,890 Nii ühe märgi korraga, ja kui me liiga palju märke, 600 00:41:37,890 --> 00:41:40,580 nii et kui n + 1 on suurem kui võimsuse 601 00:41:40,580 --> 00:41:44,140 siis meil on vaja suurendada suutlikkust meie puhver. 602 00:41:44,140 --> 00:41:47,780 Nii et siin me kahekordistades meie puhver. 603 00:41:47,780 --> 00:41:51,840 Ja see peab minema, me lisada iseloomu meie puhver 604 00:41:51,840 --> 00:41:56,220 kuni me saame uue rea või faili lõppu või mis iganes, 605 00:41:56,220 --> 00:41:59,380 sel juhul, et me oleme valmis koos string ja siis reaalne getString 606 00:41:59,380 --> 00:42:05,120 kahaneb mälu, nagu siis, kui me eraldatakse liiga palju mälu siis lähen tagasi ja kahaneb veidi. 607 00:42:05,120 --> 00:42:08,830 Nii et me ei näita, kuid peamine idee on 608 00:42:08,830 --> 00:42:11,960 see on lugeda ühe märgi korraga. 609 00:42:11,960 --> 00:42:17,140 Ta ei saa lihtsalt lugeda kogu asi korraga, 610 00:42:17,140 --> 00:42:19,550 sest nende puhver vaid teatud suurusega. 611 00:42:19,550 --> 00:42:26,590 Nii et kui string et ta püüab lisada puhver on liiga suur, siis oleks voolata. 612 00:42:26,590 --> 00:42:28,940 Nii et siin me vältida, et ainult lugedes ühe märgi 613 00:42:28,940 --> 00:42:33,750 korraga ja kasvab iga kord, kui meil on vaja. 614 00:42:33,750 --> 00:42:40,270 Nii getInt ja muu CS50 raamatukogu funktsioonid kalduvad kasutama getString 615 00:42:40,270 --> 00:42:42,310 nende rakendamist. 616 00:42:42,310 --> 00:42:45,370 Nii et ma esile olulisemad asjad siin. 617 00:42:45,370 --> 00:42:49,460 Ta kutsub getString saada string. 618 00:42:49,460 --> 00:42:51,710 Kui getString suutnud tagasi mälu 619 00:42:51,710 --> 00:42:54,270 mäletan, et getString mallocs midagi, nii et kui te helistate getString 620 00:42:54,270 --> 00:42:57,820 sa ei tohiks (arusaamatu) tasuta, et string mis sul on. 621 00:42:57,820 --> 00:43:02,870 Nii siin, kui ta ei malloc midagi, me tagasi INT_MAX lihtsalt lipu, et 622 00:43:02,870 --> 00:43:05,650 hei, me ei olnud tegelikult võimalik saada täisarv. 623 00:43:05,650 --> 00:43:10,830 Sa peaksid ignoreerida mida ma su juurde tagasi, või 624 00:43:10,830 --> 00:43:15,540 sa ei tohiks käsitleda seda kehtiv sisend. 625 00:43:15,540 --> 00:43:21,360 Lõpuks eeldatakse, et õnnestuks, me kasutame sscanf selle eriline lipp, 626 00:43:21,360 --> 00:43:23,820 mis tähendab, esimene matš täisarv, 627 00:43:23,820 --> 00:43:26,770 siis suvalise märgi pärast, et täisarv. 628 00:43:26,770 --> 00:43:29,070 Nii teate soovime, et see on võrdne 1. 629 00:43:29,070 --> 00:43:32,940 Nii sscanf naaseb kuidas palju vasteid kui edukalt tehtud? 630 00:43:32,940 --> 00:43:37,010 Ta tagastab 1, kui see sobis täisarv, 631 00:43:37,010 --> 00:43:40,890 ta naaseb 0, kui ta ei vasta täisarv, ja ta naaseb 2 632 00:43:40,890 --> 00:43:45,920 kui see sobitada täisarv järgnevad mõned iseloomu. 633 00:43:45,920 --> 00:43:49,780 Nii märkate me uuesti, kui me sobib kõik, kuid 1. 634 00:43:49,780 --> 00:43:55,230 Niisiis, kui me kanda 1, 2, 3, C või 1, 2, 3, X 635 00:43:55,230 --> 00:43:57,400 seejärel 1, 2, 3 oleks saada talletatud täisarv 636 00:43:57,400 --> 00:43:59,620 X saaksid säilitatakse iseloomu, 637 00:43:59,620 --> 00:44:06,410 sscanf Jõutakse 2 ja me uuesti, sest me tahame ainult täisarv. 638 00:44:06,410 --> 00:44:09,810 >> Kiiresti puhub läbi HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 Hypertext Markup Language on struktuur ja semantika veebis. 640 00:44:15,340 --> 00:44:19,960 Siin on näiteks loeng, kus meil on HTML teeke. 641 00:44:19,960 --> 00:44:22,110 Meil on head märksõnad, keha silte 642 00:44:22,110 --> 00:44:27,770 meil on näiteid tühi sildid, kus me tegelikult ei ole algust ja tihedas tag, 643 00:44:27,770 --> 00:44:30,820 me lihtsalt link ja pilt. 644 00:44:30,820 --> 00:44:38,480 Sulgemishind ei ole pilt tag, seal on ainult üks silt, et saavutatakse kõik tag peaks tegema. 645 00:44:38,480 --> 00:44:41,950 Link on näide, me näeme, kui sa lingi CSS, 646 00:44:41,950 --> 00:44:45,910 script on näide sellest, kuidas sa link välise JavaScript. 647 00:44:45,910 --> 00:44:53,100 See on päris lihtne, ja pidage meeles, HTML ei ole programmeerimise keel. 648 00:44:53,100 --> 00:44:58,250 Siin, mäletan, kuidas sa määratleda vorm või vähemalt see, mida see teeb? 649 00:44:58,250 --> 00:45:01,740 Sellisel kujul on tegevus ja meetod. 650 00:45:01,740 --> 00:45:06,210 Meetodeid, mida saab ainult kunagi näha on GET ja POST. 651 00:45:06,210 --> 00:45:09,040 Nii et on variant, kus asi saab panna URL. 652 00:45:09,040 --> 00:45:11,680 Postitus on, kui seda ei pane URL. 653 00:45:11,680 --> 00:45:18,520 Selle asemel, et kõiki andmeid vormi sisestatud rohkem varjatud HTTP taotluse. 654 00:45:18,520 --> 00:45:22,390 Nii et siin, toiming määratleb kui HTTP taotlus läheb. 655 00:45:22,390 --> 00:45:27,490 Kui see läheb on google.com / search. 656 00:45:27,490 --> 00:45:32,890 Meetod. Mäleta erinevused GET ja POST, 657 00:45:32,890 --> 00:45:37,200 ja öelda näiteks, kui soovite järjehoidja midagi. 658 00:45:37,200 --> 00:45:40,660 Sa ei suuda kunagi järjehoidja POST URL 659 00:45:40,660 --> 00:45:44,970 sest andmed ei sisaldu URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, nüüd on Hypertext Transfer Protocol. 661 00:45:49,790 --> 00:45:54,080 Hypertext Transfer Protocol, siis ootaks ta kanda 662 00:45:54,080 --> 00:45:57,710 Hypertext Markup Language, ja mida ta teeb. 663 00:45:57,710 --> 00:46:00,170 Aga see üle ka pilte leiate veebis 664 00:46:00,170 --> 00:46:05,400 allalaadimist teete alustada HTTP taotluse. 665 00:46:05,400 --> 00:46:10,350 Nii HTTP on lihtsalt keeles World Wide Web. 666 00:46:10,350 --> 00:46:15,610 Ja siin sa pead tunnistama, see omamoodi HTTP taotluse. 667 00:46:15,610 --> 00:46:19,300 Siin HTTP/1.1 küljel lihtsalt ütleb, et see versioon 668 00:46:19,300 --> 00:46:21,570 protokolli ma kasutan. 669 00:46:21,570 --> 00:46:25,770 See on päris palju alati saab olema HTTP/1.1, kui te näete seda. 670 00:46:25,770 --> 00:46:30,110 Siis me näeme, et see oli GET, alternatiiv on POST, et võite näha. 671 00:46:30,110 --> 00:46:40,790 Ja URL, mis ma üritasin külastasid www.google.com/search?q = blah, blah, blah. 672 00:46:40,790 --> 00:46:44,240 Seega pidage meeles, et see küsimärk q = blah blah blah, 673 00:46:44,240 --> 00:46:49,040 on selline värk, mis on esitatud kujul. 674 00:46:49,040 --> 00:46:51,830 Vastuseks võib naasta mind näeks välja midagi sellist. 675 00:46:51,830 --> 00:46:54,050 Jällegi, alates protokolli, mis saab olema, et 676 00:46:54,050 --> 00:46:59,190 järgneb seisundi kood. Siin on 200 OK. 677 00:46:59,190 --> 00:47:05,060 Ja lõpuks, veebileht, et ma tegelikult palus järgneb. 678 00:47:05,060 --> 00:47:08,210 Võimalik staatus kood võite näha, ja sa peaksid teadma mitu neist. 679 00:47:08,210 --> 00:47:12,770 200 OK olete ilmselt näinud. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 ei leitud, 500 Internal Server Error 681 00:47:17,830 --> 00:47:22,140 Tavaliselt, kui te lähete veebilehel ja midagi on katki või oma PHP kood jookseb, 682 00:47:22,140 --> 00:47:24,930 arvestades, et aparaat on meil nii suur oranž kast 683 00:47:24,930 --> 00:47:27,830 mis kerkib ja ütleb, nagu midagi on valesti, on see kood ei tööta 684 00:47:27,830 --> 00:47:30,380 või see funktsioon on halb. 685 00:47:30,380 --> 00:47:33,230 Tavaliselt veebilehed ei taha teada, mis funktsioonid on tegelikult halb, 686 00:47:33,230 --> 00:47:37,880 Nii et selle asemel nad lihtsalt teile 500 Internal Server vead. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP on 1 kiht all HTTP. 688 00:47:43,050 --> 00:47:47,550 Pea meeles, et seal on Internet väljaspool World Wide Web. 689 00:47:47,550 --> 00:47:52,270 Nagu siis, kui sa mängid online mäng see ei lähe läbi HTTP, 690 00:47:52,270 --> 00:47:55,740 see läheb läbi erinevad - see on endiselt kasutades Internet, 691 00:47:55,740 --> 00:47:58,900 kuid ta ei kasuta HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP on vaid üks näide sellest, protokoll ehitatud TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP-sõnalt tähendab Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Igal arvutil on IP aadressi, sest nad on need 4-kohaline asjad 695 00:48:11,500 --> 00:48:16,510 nagu 192.168.2.1, või mis iganes, see kipub olema kohaliku üks. 696 00:48:16,510 --> 00:48:23,390 Aga see muster IP aadress. 697 00:48:23,390 --> 00:48:29,060 Nii DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 see on, mida tähendab asju nagu google.com, et tegelik IP aadress. 699 00:48:33,410 --> 00:48:37,700 Nii et kui sa kirjutad, et IP-aadressi URL, 700 00:48:37,700 --> 00:48:40,850 mis viib teid Google, kuid sa ei kipu mäletan neid asju. 701 00:48:40,850 --> 00:48:45,470 Sa kipuvad mäleta google.com asemel. 702 00:48:45,470 --> 00:48:51,560 Viimane asi, mis meil on, sadamad, kus see on TCP osa IP. 703 00:48:51,560 --> 00:48:54,880 TCP ei rohkem. Mõtle, nagu teil on veebibrauser töötab. 704 00:48:54,880 --> 00:48:58,670 Võib-olla teil on e-posti rakendus; 705 00:48:58,670 --> 00:49:02,150 on sul äkki mõni muu programm, mis kasutab Internet töötab. 706 00:49:02,150 --> 00:49:05,090 Nad kõik vajavad juurdepääsu internetile, 707 00:49:05,090 --> 00:49:08,100 aga arvuti on ainult 1 WiFi kaardi või mis iganes. 708 00:49:08,100 --> 00:49:10,780 Nii sadamad on nii, et meil on võimalik jagada 709 00:49:10,780 --> 00:49:13,550 kuidas neist rakendustest on võimalik kasutada internetti. 710 00:49:13,550 --> 00:49:17,230 Iga taotlus saab 1 konkreetsesse sadamasse, et seda saab kuulata, 711 00:49:17,230 --> 00:49:19,670 ja vaikimisi HTTP kasutab port 80. 712 00:49:19,670 --> 00:49:22,410 Mõned e-posti teenuseid kasutama 25. 713 00:49:22,410 --> 00:49:24,490 Madala nummerdatud need kipuvad olema kaitstud. 714 00:49:24,490 --> 00:49:29,270 Sul on tavaliselt võimalik saada kõrgema numbriga need ise. 715 00:49:29,270 --> 00:49:32,010 >> CSS, kaskaadlaadistik. 716 00:49:32,010 --> 00:49:36,030 Me stiilis veebilehti CSS, mitte HTML. 717 00:49:36,030 --> 00:49:38,440 Seal on 3 kohtades võite panna CSS. 718 00:49:38,440 --> 00:49:46,300 See võib olla inline vahel style tags, või täiesti eraldi faili ja siis seotud sisse 719 00:49:46,300 --> 00:49:48,470 Ja siin on lihtsalt näide CSS. 720 00:49:48,470 --> 00:49:50,450 Sa peaksid mõistma seda mudelit, 721 00:49:50,450 --> 00:49:54,310 kus esimene näide on meil sobitamine body, 722 00:49:54,310 --> 00:49:56,680 ja siin me keskele body. 723 00:49:56,680 --> 00:50:00,420 Teine näide on meil sobitamine asi 724 00:50:00,420 --> 00:50:04,740 ID jalus, ja me rakendades mõningaid stiile seda. 725 00:50:04,740 --> 00:50:07,310 Pange tähele, et ID jaluse teksti-joondamine vasakule, 726 00:50:07,310 --> 00:50:09,840 samas keha teksti joondamine keskele. 727 00:50:09,840 --> 00:50:13,180 Footer on keha sees. 728 00:50:13,180 --> 00:50:16,470 See, selle asemel, text-align vasakule, kuigi keha ütleb text-align center. 729 00:50:16,470 --> 00:50:18,880 See on kogu kuhjuvate osa. 730 00:50:18,880 --> 00:50:22,110 Sul võib olla - saate määrata stiile keha 731 00:50:22,110 --> 00:50:25,320 ja siis asjad organismis saab määrata täpsema stiile, 732 00:50:25,320 --> 00:50:28,160 ja asjad töötavad nagu te ootate. 733 00:50:28,160 --> 00:50:34,420 Konkreetsemad CSS projekteerijad ülimuslikud. 734 00:50:34,420 --> 00:50:46,140 Ma arvan, et see on. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Tere kõigile. Kui ma vaid saaksin teie tähelepanu. 736 00:50:49,260 --> 00:50:53,990 Olen Ali ja ma lähen läbi PHP ja SQL tõesti kiire. 737 00:50:53,990 --> 00:51:00,310 Nii saame alustada. PHP on lühike PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 Ja nagu te kõik peaksid teadma, et see on server-side scripting keeles 739 00:51:03,730 --> 00:51:06,800 ja me kasutame seda tagasi lõpuks veebilehed 740 00:51:06,800 --> 00:51:12,540 ja kuidas ta teeb palju arvutusi, behind-scenes osa. 741 00:51:12,540 --> 00:51:17,510 Süntaks. See ei ole nagu C, üllatus, üllatus. 742 00:51:17,510 --> 00:51:22,060 See on alati alustada, kui näete, - Ma ei saa liikuda. 743 00:51:22,060 --> 00:51:31,340 Näete te vajate uut tüüpi traksid ja siis pead ka? Php. 744 00:51:31,340 --> 00:51:35,780 See on alati, kuidas sa pead kaadrisse PHP teksti, teie PHP koodi. 745 00:51:35,780 --> 00:51:39,180 Nii et see ei saa olla nagu C, kus sa sellist panna see esimene. 746 00:51:39,180 --> 00:51:42,290 Sa pead alati selle ümber. 747 00:51:42,290 --> 00:51:47,610 Ja nüüd peamine süntaks on see, et kõik muutujad peavad algama $ märk. 748 00:51:47,610 --> 00:51:49,490 Sa pead tegema seda, kui sa oled alati määratletud, sa pead tegema seda 749 00:51:49,490 --> 00:51:51,860 kui te viitate, et neid hiljem. 750 00:51:51,860 --> 00:51:56,510 Sa alati vaja, et $. See on sinu uus parim sõber, päris palju. 751 00:51:56,510 --> 00:52:01,690 Te ei - erinevalt C, siis ei ole vaja panna, millist muutuja tüüp on. 752 00:52:01,690 --> 00:52:04,940 Niisiis, kui sa ei pea $, sa ei pea tegema, nagu, 753 00:52:04,940 --> 00:52:09,470 int x või string y, ja nii edasi, ja nii edasi. 754 00:52:09,470 --> 00:52:11,490 Nii väike erinevus. 755 00:52:11,490 --> 00:52:15,590 Nagu tulemusena, siis tähendab see, et PHP on nõrgalt tüüp. 756 00:52:15,590 --> 00:52:19,310 PHP on nõrgalt tüüp keel, ja see on nõrgalt kirjutatud muutujad. 757 00:52:19,310 --> 00:52:24,020 Teisisõnu tähendab see, et sa saad vahetada erinevaid muutuja tüüpi. 758 00:52:24,020 --> 00:52:27,230 Te saate salvestada oma number 1 kui int, 759 00:52:27,230 --> 00:52:29,650 saate salvestada see string, ja saate hoida seda float, 760 00:52:29,650 --> 00:52:33,550 ja see on kõik, et number 1. 761 00:52:33,550 --> 00:52:36,080 Isegi kui sa oled ladustamiseks see erinevaid vorme, 762 00:52:36,080 --> 00:52:39,120 see on ikka - muutuja tüüpe ikka ettevõttest lõpuks. 763 00:52:39,120 --> 00:52:41,540 Nii et kui sa vaatad siia, kui sa mäletad pset 7, 764 00:52:41,540 --> 00:52:43,500 Paljud teist ilmselt olnud probleeme sellega. 765 00:52:43,500 --> 00:52:47,280 Kaks võrdusmärki, 3 võrdusmärki, 4 võrdusmärki. 766 00:52:47,280 --> 00:52:49,990 Okei, ei ole 4 võrdusmärki, kuid seal on 2 ja 3. 767 00:52:49,990 --> 00:52:53,320 Sa kasutad 2 võrdusmärki kontrollida väärtused. 768 00:52:53,320 --> 00:52:55,830 Seda saab kontrollida mitut tüüpi. 769 00:52:55,830 --> 00:52:58,770 Nii et kui näete esimesel näiteks 770 00:52:58,770 --> 00:53:02,210 Mul on num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Nii et teie int ja teie string on nii tehniliselt, 1, 772 00:53:06,710 --> 00:53:10,790 aga nad on erinevad. Aga topelt võrdne, see ikka edasi. 773 00:53:10,790 --> 00:53:15,510 Kuid kolmekordsed võrdsete kontrollib see väärtus kui ka erinevat tüüpi. 774 00:53:15,510 --> 00:53:18,760 See tähendab, et ta ei kavatse edasi selles teises asjas, 775 00:53:18,760 --> 00:53:22,350 kus te kasutate 3 võrdusmärki asemel. 776 00:53:22,350 --> 00:53:26,590 Nii et on suur vahe, et sa peaksid kõik on näidanud nüüd. 777 00:53:26,590 --> 00:53:31,570 >> String ahel on samuti võimas asi, mida saab kasutada PHP. 778 00:53:31,570 --> 00:53:34,080 See on põhimõtteliselt lihtsalt see mugav dot märke, 779 00:53:34,080 --> 00:53:36,230 ja see on, kuidas saab siduda strings koos. 780 00:53:36,230 --> 00:53:40,800 Nii et kui teil on kass ja teil on koer, ja sa tahad panna 2 strings koos 781 00:53:40,800 --> 00:53:44,080 saate jooksul ja see on selline, kuidas see toimib. 782 00:53:44,080 --> 00:53:46,660 Võite ka lihtsalt panna need üksteise kõrval, 783 00:53:46,660 --> 00:53:49,030 nagu näete siin põhjas näiteks 784 00:53:49,030 --> 00:53:51,610 kus ma olen kaja string 1 stringi 2. 785 00:53:51,610 --> 00:53:56,930 PHP teavad nende asemele kui sellist. 786 00:53:56,930 --> 00:53:59,780 Massiivid. Nüüd PHP on 2 erinevat liiki massiive. 787 00:53:59,780 --> 00:54:03,180 Sul võib olla regulaarne massiivid ja saab ka assotsiatiivne massiivid 788 00:54:03,180 --> 00:54:06,040 ja me lähme praegu nendega. 789 00:54:06,040 --> 00:54:08,280 Regulaarne massiivid on vaid seda C, 790 00:54:08,280 --> 00:54:11,240 ja et teil on indeksid, mis on nummerdatud. 791 00:54:11,240 --> 00:54:13,160 Praegu me lihtsalt luua üks ja panna - 792 00:54:13,160 --> 00:54:15,500 nii see on, kuidas me loome tühja massiivi, siis me läheme 793 00:54:15,500 --> 00:54:17,310 pannakse indeks number 0. 794 00:54:17,310 --> 00:54:19,200 Me panna number 6, väärtus 6. 795 00:54:19,200 --> 00:54:21,500 Sina näed seda allosas siin. 796 00:54:21,500 --> 00:54:24,240 Where's - indeksiga number 1, et me paneme väärtus number 4, 797 00:54:24,240 --> 00:54:26,720 ja nii näed seal on 6, seal on 4, 798 00:54:26,720 --> 00:54:29,160 ja siis kui me trükkimine asju, 799 00:54:29,160 --> 00:54:33,550 kui me püüame ja printida salvestatud väärtuse juures index number 0, 800 00:54:33,550 --> 00:54:36,900 siis me näeme väärtus 6 prinditakse välja. Cool? 801 00:54:36,900 --> 00:54:40,160 Nii et regulaarne massiivid teile. 802 00:54:40,160 --> 00:54:42,750 Teine viis, kuidas saate lisada ka asju regulaarselt massiivid nüüd 803 00:54:42,750 --> 00:54:44,780 on saate lihtsalt lisab neile lõpus. 804 00:54:44,780 --> 00:54:47,240 See tähendab, et sa ei pea täpsustama konkreetsed indeks. 805 00:54:47,240 --> 00:54:51,000 Näete number ja seejärel nurksulgudes pole indeksile. 806 00:54:51,000 --> 00:54:56,270 Ja teate - PHP teavad lihtsalt lisada see nimekirja lõppu, järgmine vaba kohapeal. 807 00:54:56,270 --> 00:54:59,190 Nii et näete, 1 seal tol 0 spot, 808 00:54:59,190 --> 00:55:02,690 2 läks seal esimese koha. 809 00:55:02,690 --> 00:55:04,690 3 läheb - on lisatud ka seal. 810 00:55:04,690 --> 00:55:06,720 Nii et sellist mõtet. Sa lihtsalt pidevalt täiendatakse seda, 811 00:55:06,720 --> 00:55:09,360 ja siis kui me kajastas indeksi number 1, 812 00:55:09,360 --> 00:55:13,080 siis välja printida väärtus 2. 813 00:55:13,080 --> 00:55:16,800 >> Siis on meil massiivid, mis on assotsiatiivne massiivid. 814 00:55:16,800 --> 00:55:19,370 Assotsiatiivne massiivid asemel arvulised näitajad, 815 00:55:19,370 --> 00:55:23,630 Mida nad teevad, on neil indeksid, mis on nööri. 816 00:55:23,630 --> 00:55:25,670 Näete, selle asemel - ma lahti kõik need number indeksid, 817 00:55:25,670 --> 00:55:32,140 ja nüüd on see key1, key2, key3 ja nad jutumärkidega tähendama, et nad on kõik stringid. 818 00:55:32,140 --> 00:55:34,470 Nii et meil on üks näide sellest. 819 00:55:34,470 --> 00:55:38,790 Näide selle kohta on, et meil on TF ja see indeks nimi. 820 00:55:38,790 --> 00:55:42,030 Me panna "Ali", nagu nimi, on indeks, kaloreid söömiseks, 821 00:55:42,030 --> 00:55:47,640 saame panna int seekord asemel string, 822 00:55:47,640 --> 00:55:52,240 ja siis indeks meeldib, me ei pane kogu massiivi sees on. 823 00:55:52,240 --> 00:55:55,490 Nii et see on omamoodi - see on sarnane kontseptsioon, kuidas meil oli 824 00:55:55,490 --> 00:55:58,930 indeksite numbritega, kuid nüüd saame muuta indeksid ümber 825 00:55:58,930 --> 00:56:03,890 on need stringid asemel. 826 00:56:03,890 --> 00:56:06,070 Võite seda teha, peale lihtsalt tee seda eraldi, 827 00:56:06,070 --> 00:56:09,400 sa saad teha seda kõike ühe tüki. Nii et näete, et tf selle massiivi 828 00:56:09,400 --> 00:56:13,350 ja siis me need kõik üks suur kandiline sulg komplekt. 829 00:56:13,350 --> 00:56:15,220 Nii et saab asja kiirendada. 830 00:56:15,220 --> 00:56:19,730 See on rohkem stilistilist valikut kui mitte. 831 00:56:19,730 --> 00:56:21,550 Meil on ka silmad. 832 00:56:21,550 --> 00:56:26,020 In C meil silmad, et niimoodi töötada. 833 00:56:26,020 --> 00:56:29,690 Meil oli massiiv, ja me läksime indeks 0 kuni nimekirja lõppu, 834 00:56:29,690 --> 00:56:31,740 ja me printida kõik, eks? 835 00:56:31,740 --> 00:56:33,880 Välja on probleem selles, assotsiatiivne massiivid 836 00:56:33,880 --> 00:56:36,610 me ei pruugi teada, need arvulised näitajad 837 00:56:36,610 --> 00:56:39,610 sest nüüd on meil string indeksid. 838 00:56:39,610 --> 00:56:44,800 Nüüd me kasutame foreach ahelat, mis jällegi sa loodetavasti kasutatakse pset 7. 839 00:56:44,800 --> 00:56:48,930 Foreach silmad lihtsalt teadma iga osa nimekirja. 840 00:56:48,930 --> 00:56:52,450 Ja see ei ole täpselt teada, numbriline indeks, mis sul on. 841 00:56:52,450 --> 00:56:56,490 Nii et teil on foreach süntaks, nii et see on foreach, paned massiivi. 842 00:56:56,490 --> 00:57:00,430 Nii et minu massiivi nimetatakse pset ja siis kui sõna kui, 843 00:57:00,430 --> 00:57:04,530 ja siis paned selle kohaliku ajutise muutuja, et sa ei kavatse kasutada 844 00:57:04,530 --> 00:57:10,690 ainult konkreetne asi, mis toimub hoida konkreetset - 845 00:57:10,690 --> 00:57:14,770 ühel juhul või ühe osa massiivist. 846 00:57:14,770 --> 00:57:18,350 Erksa num korraldab 1 ja siis võib-olla siis hoidke number 6, 847 00:57:18,350 --> 00:57:20,410 ja siis hoidke number 2. 848 00:57:20,410 --> 00:57:26,630 Aga see on garanteeritud, et läbida iga väärtus, mis on massiiv. 849 00:57:26,630 --> 00:57:30,530 Kasulikke funktsioone, et sa peaksid teadma, PHP on vaja, 850 00:57:30,530 --> 00:57:35,880 nii et on tagatud, et sa oled ka teatud faile, kaja, väljumise, tühi. 851 00:57:35,880 --> 00:57:40,490 Ma väga soovitame vaadata pset 7 ja vaadata neid funktsioone. 852 00:57:40,490 --> 00:57:42,810 Te võib-olla teavad need, 853 00:57:42,810 --> 00:57:47,060 nii et ma oleks kindlasti teadma, mida täpselt, need on kõik teed. 854 00:57:47,060 --> 00:57:50,080 >> Ja nüüd me läheme läbi ulatus tõesti kiiresti. 855 00:57:50,080 --> 00:57:53,490 Ulatusega, PHP on selline funky asi, erinevalt C, 856 00:57:53,490 --> 00:57:56,170 ja nii me lihtsalt läbida see kiiresti. 857 00:57:56,170 --> 00:57:58,930 Ütleme hakkame seda noolt, et meil on olemas. 858 00:57:58,930 --> 00:58:02,900 Ja me ei kavatse alustada $ i. Nii muutuja "i" saab olema 0, 859 00:58:02,900 --> 00:58:06,730 ja me lihtsalt hoida trükkimine seda, et suur valge kast seal. 860 00:58:06,730 --> 00:58:09,220 Me alustame I0, ja siis me korrata seda. 861 00:58:09,220 --> 00:58:12,670 Nii et seal on 0. 862 00:58:12,670 --> 00:58:15,210 Ja siis me lähme juurdekasvu seda silmus, 863 00:58:15,210 --> 00:58:17,810 ja siis see saab olema väärtus 1. 864 00:58:17,810 --> 00:58:20,070 Üks on alla 3, nii et see läheb läbi, et loop, 865 00:58:20,070 --> 00:58:23,230 ja siis me näeme seda trükitakse uuesti. 866 00:58:23,230 --> 00:58:25,520 Me läheme juurdekasvu seda uuesti 2, 867 00:58:25,520 --> 00:58:29,860 ja 2 on väiksem kui 3, seega annan jaoks loop, ja see saab printida 2. 868 00:58:29,860 --> 00:58:35,100 Siis sa tähele, et 3 ei ole väiksem kui 3, siis me välja murda silmus. 869 00:58:35,100 --> 00:58:40,050 Nüüd oleme väljunud, ja siis me lähme minema aFunction. 870 00:58:40,050 --> 00:58:45,010 Okei. Nii et teil on meeles, et see muutuja, mida me oleme loonud, 871 00:58:45,010 --> 00:58:48,270 "i" muutuv, ei ole kohapeal scoped. 872 00:58:48,270 --> 00:58:50,280 See tähendab, et see ei ole kohalik silmuse, 873 00:58:50,280 --> 00:58:58,060 ja et muutuv saame veel kasutada ja muuta hiljem, ja see ikkagi tõhus. 874 00:58:58,060 --> 00:59:02,160 Nii et kui te lähete funktsioon nüüd, näete, et meil kasutada ka "i" muutuja, 875 00:59:02,160 --> 00:59:05,320 ja me juurdekasvu "i" + +. 876 00:59:05,320 --> 00:59:09,410 Sa arvad, esimesel, mis põhineb C, et see on koopia "i" muutuja. 877 00:59:09,410 --> 00:59:12,830 See on täiesti teine ​​asi, mis on õige. 878 00:59:12,830 --> 00:59:16,560 Nii et kui me printida, me trükkida "i" + +, mis läheb välja trükkida, et 4, 879 00:59:16,560 --> 00:59:19,640 ja siis me läheme - sorry. 880 00:59:19,640 --> 00:59:22,030 Siis me end läbi selle funktsiooni, 881 00:59:22,030 --> 00:59:24,820 ja me ei kavatse olla seal, kus see nool on just nüüd. 882 00:59:24,820 --> 00:59:29,190 See tähendab, et siis, aga isegi funktsiooni muudetud väärtus "i", 883 00:59:29,190 --> 00:59:32,620 see ei muuda väljaspool funktsiooni 884 00:59:32,620 --> 00:59:35,060 sest funktsioon on eraldi ulatus. 885 00:59:35,060 --> 00:59:38,960 See tähendab, et kui me kaja "i", see ei ole muutunud ulatust funktsiooni 886 00:59:38,960 --> 00:59:43,660 ja nii siis me printida 3 uuesti. 887 00:59:43,660 --> 00:59:47,520 Erinevaid asju ulatus PHP kui C. 888 00:59:47,520 --> 00:59:51,130 >> Nüüd PHP ja HTML. 889 00:59:51,130 --> 00:59:53,510 PHP saab teha veebilehti dünaamilisemaks. 890 00:59:53,510 --> 00:59:58,660 See ajab asju teistmoodi. 891 00:59:58,660 --> 01:00:02,090 Meil on see erinev HTML. 892 01:00:02,090 --> 01:00:05,230 HTML, me alati ainult sama staatiline asi, nagu kuidas Rob näitas, 893 01:00:05,230 --> 01:00:09,370 arvestades, PHP, saate muuta asju, mis põhineb kes on kasutaja. 894 01:00:09,370 --> 01:00:11,830 Nii et kui mul on see, mul on, "Sa oled sisse loginud nimega -" ja siis nimi, 895 01:00:11,830 --> 01:00:14,420 ja ma ei saa nime muuta. Nii et just nüüd on nimi Joosep 896 01:00:14,420 --> 01:00:18,880 ja see on "minust", aga siis ma saan muuta ka nimi on Tommy. 897 01:00:18,880 --> 01:00:21,700 Ja see oleks teine ​​asi. 898 01:00:21,700 --> 01:00:23,840 Siis saame ka muuta erinevaid asju temast, 899 01:00:23,840 --> 01:00:27,070 ja see näitab erinevat sisu põhineb nimi. 900 01:00:27,070 --> 01:00:31,430 Nii PHP saab selline muutus, mis toimub teie veebilehel. 901 01:00:31,430 --> 01:00:33,540 Sama siin. Still, pange tähele, et neil on erinev sisu, 902 01:00:33,540 --> 01:00:38,870 kuigi te tehniliselt ikka tutvumise sama veebilehe pinnal. 903 01:00:38,870 --> 01:00:43,450 Genereerimine HTML. Seal on 2 erinevat võimalust, et võite seda teha. 904 01:00:43,450 --> 01:00:48,980 Nii et me läheme läbi, et kohe. Esimene võimalus on, siis on - jah, vabandust. 905 01:00:48,980 --> 01:00:51,150 Nii et sa lihtsalt oma tavalise silmus PHP, 906 01:00:51,150 --> 01:00:56,270 ja siis kajavad PHP ja sa kaja läbi HTML. 907 01:00:56,270 --> 01:00:58,720 Kasutades mida Rob näitasin HTML script 908 01:00:58,720 --> 01:01:04,030 ja siis kasutades PHP print lihtsalt välja trükkida veebilehele. 909 01:01:04,030 --> 01:01:09,520 Teine võimalus on seda teha, kui sa eraldada PHP ja HTML. 910 01:01:09,520 --> 01:01:11,940 Nii saab olema rida PHP, mis algab silmus, 911 01:01:11,940 --> 01:01:16,020 siis võib olla rida HTML eraldi asi, 912 01:01:16,020 --> 01:01:19,700 ja siis lõpuks loop, jälle koos PHP. 913 01:01:19,700 --> 01:01:21,800 Nii et see on omamoodi eraldab seda. 914 01:01:21,800 --> 01:01:24,020 Vasakul pool saate, et teil on kõik - 915 01:01:24,020 --> 01:01:26,360 see on lihtsalt 1 tüki PHP. 916 01:01:26,360 --> 01:01:28,510 Paremal näete, et teil on rida PHP, 917 01:01:28,510 --> 01:01:32,540 sul on rida HTML ja sul on rida PHP uuesti. 918 01:01:32,540 --> 01:01:36,870 Seega eraldavad seda arvesse, mida nad teevad. 919 01:01:36,870 --> 01:01:39,330 Ja sa tähele, et kas nii, sest kumbki neist 920 01:01:39,330 --> 01:01:41,980 nad ikka välja printida, kuid kujutise, pildi, 921 01:01:41,980 --> 01:01:44,540 et HTML on endiselt trükitud samamoodi. 922 01:01:44,540 --> 01:01:49,870 Ja siis näete ikka 3 pilti näidata üles oma veebilehel. 923 01:01:49,870 --> 01:01:52,820 Nii et see on 2 eri viise sama asi. 924 01:01:52,820 --> 01:01:55,060 >> Nüüd on vormid ja taotlusi. Kuna Rob näitasin, 925 01:01:55,060 --> 01:01:59,400 on vormid HTML ja me lihtsalt ehmatada see. 926 01:01:59,400 --> 01:02:02,040 Sul on tegevus ja sul on meetod, ja oma tegevust 927 01:02:02,040 --> 01:02:04,350 objekti näitab, kus sa lähed, et saada see, ja meetod on kas 928 01:02:04,350 --> 01:02:06,960 see saab olema GET või POST. 929 01:02:06,960 --> 01:02:11,220 Ja GET taotluse, kui Rob ütles, tähendab, et sa lähed pane see vorm 930 01:02:11,220 --> 01:02:15,760 ja te näete, et see on link, et POST taotluse te ei näe URL. 931 01:02:15,760 --> 01:02:17,840 Nii väike erinevus. 932 01:02:17,840 --> 01:02:19,950 Kuid üks asi, mis on sarnane asi 933 01:02:19,950 --> 01:02:22,560 on see, et POST ja GET on võrdselt ebakindlad. 934 01:02:22,560 --> 01:02:26,430 Nii et te võite arvata, et lihtsalt sellepärast, et sa ei näe seda URL, 935 01:02:26,430 --> 01:02:28,790 see tähendab, et post on turvaline, 936 01:02:28,790 --> 01:02:34,420 kuid võite veel näha seda oma küpsiseid teave, mida te saadate. 937 01:02:34,420 --> 01:02:38,260 Seega ei usu, et umbes üks või teine. 938 01:02:38,260 --> 01:02:42,160 Teine asi on tähele panna, et teil on ka lõik muutujaid. 939 01:02:42,160 --> 01:02:45,850 Te kasutada seda pset 7, et saada oma kasutajatunnus teavet. 940 01:02:45,850 --> 01:02:48,550 Mis juhtus oli see, et saate kasutada seda assotsiatiivne massiiv, 941 01:02:48,550 --> 01:02:53,310 $ _SESSION, ja siis sa oled võimeline juurdepääsu erinevaid asju 942 01:02:53,310 --> 01:02:57,720 ja salvestada erinevaid asju kogu lehekülge. 943 01:02:57,720 --> 01:03:00,750 >> Viimane asi on see, et meil on SQL, Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 ja see on programmeerimiskeel hallata andmebaase. 945 01:03:04,360 --> 01:03:08,220 Mida täpselt, on andmebaasides? Nad kogusid lauad, 946 01:03:08,220 --> 01:03:10,630 ja iga tabeli võib olla sarnane tüüpi objekt. 947 01:03:10,630 --> 01:03:14,990 Seega oli meil laua kasutajaid oma rahastada pset. 948 01:03:14,990 --> 01:03:20,610 Ja miks nad on kasulikud? Sest see on nii püsivalt teabe säilitamiseks. 949 01:03:20,610 --> 01:03:22,840 See on viis jälgida asju ja hallata asjad 950 01:03:22,840 --> 01:03:25,890 ja tegelikult näeme seda erinevatel lehekülgedel ja jälgimine. 951 01:03:25,890 --> 01:03:29,930 Arvestades, et kui sa lihtsalt hoida seda, et üks vahetus hetk 952 01:03:29,930 --> 01:03:33,720 ja siis kasuta seda hiljem, siis ei pääse midagi, mis te olete salvestanud. 953 01:03:33,720 --> 01:03:37,660 Meil on 4 suurt asja, et me kasutame SQL käske. 954 01:03:37,660 --> 01:03:40,190 Meil on valida, sisestada, kustutada ja uuendada. 955 01:03:40,190 --> 01:03:42,880 Need on tõesti oluline, et te teada oma viktoriini. 956 01:03:42,880 --> 01:03:45,990 >> Me kiiresti üle minema valige kohe. 957 01:03:45,990 --> 01:03:48,540 Põhimõtteliselt te valite rida andmebaasist. 958 01:03:48,540 --> 01:03:52,400 Nii et kui teil on siin - 959 01:03:52,400 --> 01:03:56,740 meil on need 2 erinevat asja, ja me tahame, et valida tunnid tabel 960 01:03:56,740 --> 01:04:01,480 kus awesome - kui awesome veerg väärtus on 1. 961 01:04:01,480 --> 01:04:04,460 Nii et näete, siin on meil need 2 asja on klassi nimi, 962 01:04:04,460 --> 01:04:08,490 CS50 ja Stat110 ja meil on klass ID ja loosung. 963 01:04:08,490 --> 01:04:13,150 Nii et me tahame, et valida kõik, et teavet. 964 01:04:13,150 --> 01:04:17,480 Siis näete siin, et see on selline korjamine läbi selle awesome veeru 965 01:04:17,480 --> 01:04:25,170 kus kõik asjad on 1, ja siis see on klass ID, klassi nimi ja slogan, et see võib noppida. 966 01:04:25,170 --> 01:04:28,100 Kuidas täpselt sa seda koodi? Teil on kasutada PHP. 967 01:04:28,100 --> 01:04:33,830 Nii et omamoodi kuidas PHP ja SQL on omavahel seotud. 968 01:04:33,830 --> 01:04:38,130 Nüüd on meie koodi, ja me ei kavatse kasutada meie päringu funktsiooni 969 01:04:38,130 --> 01:04:41,370 nagu me tegime pset 7, ja me ei kavatse joosta SQL päring. 970 01:04:41,370 --> 01:04:43,870 Siis lähed on - 971 01:04:43,870 --> 01:04:46,280 meil on alati vaadata, kas rida kolmekordse võrdne kui vale. 972 01:04:46,280 --> 01:04:49,010 Nii et taas, mida soovite kontrollida tüüp ja väärtus, 973 01:04:49,010 --> 01:04:53,880 ja siis, kui see ei tööta, siis tahan vabandada, nagu tavaliselt, kui me tegime pset 7. 974 01:04:53,880 --> 01:04:55,870 Muidu sa tahad silmus läbi kõik nende käepärane 975 01:04:55,870 --> 01:04:59,410 foreach ring, et me lihtsalt läks üle. 976 01:04:59,410 --> 01:05:01,280 Nüüd, kui me silmusega läbi ja oleme teinud seda varem, 977 01:05:01,280 --> 01:05:05,080 Oletame, et meie päringule möödas, nüüd oleme meie foreach silmus. 978 01:05:05,080 --> 01:05:11,050 Ja esimene rida see on, et siin on rida, siin, see pakendada. 979 01:05:11,050 --> 01:05:14,010 See saab printida välja kõik andmed, mida ta on saanud. 980 01:05:14,010 --> 01:05:18,070 Nii see läheb välja trükkida allosas "Soovivad õppida HTML?" 981 01:05:18,070 --> 01:05:23,370 Siis ta läheb minna järgmisele reale, sest see on läbinud esimese silmus, 982 01:05:23,370 --> 01:05:26,510 ja nii siis see läheb välja trükkida teisel real see, 983 01:05:26,510 --> 01:05:32,120 mis saab olema STAT110, Leia kõik hetked. 984 01:05:32,120 --> 01:05:34,290 >> Üks viimane asi on SQL kohti. 985 01:05:34,290 --> 01:05:37,300 Ma tean, et David puudutas see natuke loeng. 986 01:05:37,300 --> 01:05:40,730 Te saate lugeda hiljem. See on tõesti naljakas. 987 01:05:40,730 --> 01:05:45,320 SQL Injection on omamoodi keeruline asi. 988 01:05:45,320 --> 01:05:49,890 Oletame, et sa lihtsalt kinni need muutujad õigus oma päring, 989 01:05:49,890 --> 01:05:52,290 nagu näete, et esimene rida. 990 01:05:52,290 --> 01:05:54,520 Seega tundub hea, eks? Sa lihtsalt panna oma kasutajanimi 991 01:05:54,520 --> 01:05:58,820 ja parool oma päringuid ja soovite saata see ära ja saada kõik, mis on oma andmed tabelisse. 992 01:05:58,820 --> 01:06:01,450 See tundub üsna lihtne. Nii saab öelda, et keegi paneb, 993 01:06:01,450 --> 01:06:04,910 parool, see või teksti siin - 994 01:06:04,910 --> 01:06:06,780 peaks tegelikult olema punane kast. 995 01:06:06,780 --> 01:06:11,920 Ütleme, et nad panna, et parool - see on, mida nad sisenevad. 996 01:06:11,920 --> 01:06:16,520 Nii et nad panevad või "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Objekti rumal parool on. 998 01:06:20,880 --> 01:06:25,070 Nüüd lihtsalt asendada see, ja sa pead meeles, et selle SQL päringu nüüd, 999 01:06:25,070 --> 01:06:29,090 hindab ta alati tõsi, sest sa oled tähele, et 1000 01:06:29,090 --> 01:06:32,240 võite SQL päringu valida kõik andmed 1001 01:06:32,240 --> 01:06:35,420 või saate lihtsalt on 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Nii et alati saab hinnata tõeseks. 1003 01:06:41,030 --> 01:06:46,610 See ei kavatse tõesti töö, sest see tähendab, et häkker saab tungida oma süsteem. 1004 01:06:46,610 --> 01:06:49,300 Lahendus on see, et sa pead kasutama KPN süsteem, 1005 01:06:49,300 --> 01:06:51,360 mis tähendab, et sa pead kasutama küsimärke, 1006 01:06:51,360 --> 01:06:53,350 mis on see, mida te kasutada pset 7, 1007 01:06:53,350 --> 01:06:57,620 kus sa lähed kasutada küsimärk asemel, kus sa tahad panna midagi, 1008 01:06:57,620 --> 01:07:01,430 ja siis sa lähed on koma, ja siis pead hiljem 1009 01:07:01,430 --> 01:07:07,610 pärast oma string, erinevaid muutujaid, mida soovite asendada oma küsimärk. 1010 01:07:07,610 --> 01:07:10,330 Nii et sa tähele siin, et nüüd on mul need punased küsimärgid. 1011 01:07:10,330 --> 01:07:15,420 Siis panin muutujad pärast mu stringid, et ma tean, et asendada neid selles järjekorras pärast. 1012 01:07:15,420 --> 01:07:18,470 See tagab, et kui keegi teeb seda nii, 1013 01:07:18,470 --> 01:07:24,050 ja neil või 1 = 1 olukord, et veenduge, 1014 01:07:24,050 --> 01:07:30,490 taga lõpus, veenduge, et see ei ole tegelikult murda SQL päring. 1015 01:07:30,490 --> 01:07:33,660 Okei, nii et see on päris palju seda, keeristorm PHP ja SQL. 1016 01:07:33,660 --> 01:07:41,520 Palju õnne teile kõigile, ja nüüd Ore 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Olgu kõigile. On aeg minna üle mõned JavaScript 1018 01:07:44,270 --> 01:07:48,840 ja mõned muud asjad väga kiiresti, et me ei hoia sind täna. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Jah. JavaScript on selline lahe asi, väidetavalt. 1020 01:07:56,930 --> 01:07:59,090 Asjad, mida sa tõesti vaja teada JavaScript, see on omamoodi nagu 1021 01:07:59,090 --> 01:08:03,810 kliendipoolse lõpuks, mida teie web app läheb tegema. 1022 01:08:03,810 --> 01:08:08,280 Seal on mõned asjad, mida sa ei taha, et hoolitseda kogu aeg serveripoolne. 1023 01:08:08,280 --> 01:08:12,880 Kõik vähe koostoimeid, rõhutades üks asi, mis teeb midagi kaduma. 1024 01:08:12,880 --> 01:08:15,340 Sa tõesti ei taha olla rääkida oma server kõik aega. 1025 01:08:15,340 --> 01:08:18,069 Ja mõned, et ei ole isegi võimalik teha serveripoolne. 1026 01:08:18,069 --> 01:08:21,899 See on põhjus, miks meil on vaja midagi JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Cool asju JavaScript: On dünaamiliselt trükitud. 1028 01:08:24,359 --> 01:08:27,149 See tähendab, et teie programm ei ole vaja teada, 1029 01:08:27,149 --> 01:08:30,970 Mis täpselt, muutujad, kui sa kirjutad seda. 1030 01:08:30,970 --> 01:08:34,510 See lihtsalt omamoodi aru kui see töötab. 1031 01:08:34,510 --> 01:08:37,520 Muud asjad, mis on lahe rääkida: see on lokkis traksidega keeles 1032 01:08:37,520 --> 01:08:41,359 mis tähendab süntaks on sarnane C ja PHP. 1033 01:08:41,359 --> 01:08:47,050 Sa ei pea tegema palju ümber tegema, kui sa õpid JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Siin on natuke JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Huvitav asi siin on see, et kui te vaatate seda, 1036 01:08:52,560 --> 01:08:56,330 meil on natuke JavaScript seal pea tag. 1037 01:08:56,330 --> 01:08:59,479 Mis on see on põhimõtteliselt lihtsalt sisaldama JavaScript fail. 1038 01:08:59,479 --> 01:09:02,260 See on üks viis, kuidas saate hulka JavaScript oma programmi. 1039 01:09:02,260 --> 01:09:06,910 Siis teine ​​natuke on tegelikult mõned inline JavaScript, 1040 01:09:06,910 --> 01:09:10,790 väga sarnane inline stiili CSS, 1041 01:09:10,790 --> 01:09:16,180 ja sa oled lihtsalt kirjalikult mõned kood väga kiiresti seal. 1042 01:09:16,180 --> 01:09:18,120 JavaScript on massiivid. 1043 01:09:18,120 --> 01:09:20,850 Lihtsalt üks viis hoida andmeid ümber, väga kasulik. 1044 01:09:20,850 --> 01:09:25,180 Väga kena ja lihtne süntaks. 1045 01:09:25,180 --> 01:09:29,870 Sa kasutad nurksulgudes juurdepääsu kõike ja hoida kõike koos. 1046 01:09:29,870 --> 01:09:35,020 Midagi liiga keeruline. 1047 01:09:35,020 --> 01:09:38,630 Lahe asi JavaScript ja skriptikeeled üldiselt 1048 01:09:38,630 --> 01:09:40,920 on see, et sa ei pea muretsema, array suurused. 1049 01:09:40,920 --> 01:09:43,880 Sa võid kasutada array.length ja jälgida seda, 1050 01:09:43,880 --> 01:09:46,960 ja ka massiivi võib kasvada või väheneda, kui te vajate seda. 1051 01:09:46,960 --> 01:09:49,279 Nii et sa ei pea isegi muretsema mingit, 1052 01:09:49,279 --> 01:09:57,050 oh ei, mul on vaja eraldada rohkem asju, või midagi sellist. 1053 01:09:57,050 --> 01:10:00,090 >> Lahe asi on selles, et JavaScript on midagi, mida nimetatakse objektide kohta. 1054 01:10:00,090 --> 01:10:04,800 See on objektorienteeritud keel, nii et mida ta on sisuliselt 1055 01:10:04,800 --> 01:10:10,100 teed sa grupp andmed kokku, mõnevõrra sarnane struktuure, 1056 01:10:10,100 --> 01:10:17,280 kuid võite seda kasutada nagu struct või assotsiatiivne massiiv süntaks. 1057 01:10:17,280 --> 01:10:22,520 See on päris lihtne ja mida saate teha, on see, grupp andmed kokku 1058 01:10:22,520 --> 01:10:24,810 kui sul on hunnik andmeid, mis on omavahel seotud. 1059 01:10:24,810 --> 01:10:26,850 Sest see on kõik, mida sa vajad, et kirjeldada auto, 1060 01:10:26,850 --> 01:10:29,050 sa ei pea olema see hunnik erinevates kohtades. 1061 01:10:29,050 --> 01:10:35,300 Võite lihtsalt kinni see 1 objekti JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Nagu te ilmselt teate, iterating on üks neist tüütu ülesandeid. 1063 01:10:39,090 --> 01:10:43,810 Sa lihtsalt tee seda enam uuesti. Sa pead rääkima iga objekti autosse 1064 01:10:43,810 --> 01:10:47,340 või sa pead minema läbi iga kirje loetelus või midagi sellist. 1065 01:10:47,340 --> 01:10:51,770 Nii JavaScript on sarnane PHP, foreach süntaks. 1066 01:10:51,770 --> 01:10:54,590 Sel juhul on see eest mitu korda. 1067 01:10:54,590 --> 01:10:57,300 Mida soovite kasutada seda ainult objektid. 1068 01:10:57,300 --> 01:11:01,030 Seal on mõningaid probleeme, mis tekivad, kui te kasutate seda massiivid. 1069 01:11:01,030 --> 01:11:03,750 Üldiselt on see on üks nendest asjadest, kuigi see on väga kasulik, 1070 01:11:03,750 --> 01:11:06,590 sest sa kaotada palju õhuliini 1071 01:11:06,590 --> 01:11:10,270 sest sa ei pea tõmba kõik oma objekti ise. 1072 01:11:10,270 --> 01:11:12,300 Sul ei ole vaja meeles pidada kõiki olulisemaid nimesid. 1073 01:11:12,300 --> 01:11:18,270 Sa justkui nad tagasi selle süntaks. 1074 01:11:18,270 --> 01:11:21,500 Selle jaoks, kus tahad lihtsalt meeles 1075 01:11:21,500 --> 01:11:27,180 et te saate tagasi kõik võtmed, väga sarnaselt hash tabelit. 1076 01:11:27,180 --> 01:11:30,880 Kui te mäletate, et kui sa paneks string võid saada midagi välja 1077 01:11:30,880 --> 01:11:33,840 mis oleks seotud raha sellega. 1078 01:11:33,840 --> 01:11:36,360 Mida saab teha, on see, te ei saa öelda, eks, 1079 01:11:36,360 --> 01:11:42,120 Panin auto, ja ma kutsusin ta Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Nii saab luua string Ferrari hiljem uuesti ja saad selle välja. 1081 01:11:45,290 --> 01:11:50,000 Ja te võite seda teha silmus, mille jaoks silmus. 1082 01:11:50,000 --> 01:11:53,320 Nii lihtsalt rohkem objekte. Peamine asi, mida selle tuleb meeles pidada, 1083 01:11:53,320 --> 01:12:00,340 on, et saate kasutada objekti struktuure nagu süntaks, kui soovite neid, 1084 01:12:00,340 --> 01:12:04,590 välja arvatud juhul, kui see, mida teie kavatsete kasutada string ei ole kehtiv muutuja nimi. 1085 01:12:04,590 --> 01:12:07,650 Nii et kui te vaatate, et meil on võti koos tühikutega. 1086 01:12:07,650 --> 01:12:12,500 Noh, kui sa olid panna object.key, ruumi, kus, ruumi, ruumi, 1087 01:12:12,500 --> 01:12:15,320 et lihtsalt ei ole mõtet süntaktiliselt. 1088 01:12:15,320 --> 01:12:22,730 Nii et sa ainult ei saa teha, et selline bracket süntaks. 1089 01:12:22,730 --> 01:12:26,520 >> Ka JavaScript on väga ulatus-mõistlik PHP. 1090 01:12:26,520 --> 01:12:29,050 Sul on 2 võimalust tegeleda ulatus. 1091 01:12:29,050 --> 01:12:31,960 Sul ei saa olla var ees muutuja, 1092 01:12:31,960 --> 01:12:34,060 ja see tähendab lihtsalt seda on globaalne. 1093 01:12:34,060 --> 01:12:37,050 Sina näed seda kõikjal. Isegi kui sa olid panna see, kui avaldus 1094 01:12:37,050 --> 01:12:42,430 kusagil mujal oma koodi peale, et hetkel sa ei näe, et muutuja. 1095 01:12:42,430 --> 01:12:46,730 Teine asi on aga, koos var, see on piiratud iganes funktsiooni sa sisse 1096 01:12:46,730 --> 01:12:48,870 Kui sa ei ole funktsioon, noh, see on ülemaailmne. 1097 01:12:48,870 --> 01:12:53,900 Aga kui sul on ülesanne see on ainult nähtav, et funktsioon. 1098 01:12:53,900 --> 01:12:56,420 Mul ei ole näiteks, kuid jah. See on üks nendest asjadest, kus 1099 01:12:56,420 --> 01:12:59,900 saate hallata millised muutujad tahad olla globaalne, 1100 01:12:59,900 --> 01:13:03,810 mida muutujad tahad olla kohalik, aga sa pead olema ettevaatlik, sellest, 1101 01:13:03,810 --> 01:13:06,890 sest sa ei pea tüüp peenfraktsioonide kontrolli te teete C, 1102 01:13:06,890 --> 01:13:15,820 kui siis, kui midagi on välja kuulutatud jaoks loop, see läheb jääda, et loop. 1103 01:13:15,820 --> 01:13:18,790 Asi, mida me tegelikult hooli kasutades JavaScript manipuleerib veebilehti, eks? 1104 01:13:18,790 --> 01:13:21,800 Ma mõtlen, et miks me seda teeme. 1105 01:13:21,800 --> 01:13:23,840 >> Selleks, et me kasutame midagi, mida nimetatakse DOM. 1106 01:13:23,840 --> 01:13:25,850 Document Object Model. 1107 01:13:25,850 --> 01:13:29,430 Põhimõtteliselt, mida ta teeb, on see võtab kõik oma HTML 1108 01:13:29,430 --> 01:13:34,110 ja mudelites viidud hunnik esemeid, mis on pesastatud üksteist. 1109 01:13:34,110 --> 01:13:37,080 Hakkate läbi midagi sellist. 1110 01:13:37,080 --> 01:13:44,770 Sul on, on minu jaoks õige, hunnik koodi seal, et on omamoodi - 1111 01:13:44,770 --> 01:13:46,640 Sa arvad, et oleksin väga raske manipuleerida, 1112 01:13:46,640 --> 01:13:48,700 sest siis oleksin parsing läbi hunnik teksti 1113 01:13:48,700 --> 01:13:52,080 ja millel on tükk peale asju. Ja mis siis, kui see ei olnud nõuetekohaselt vormistatud? 1114 01:13:52,080 --> 01:13:54,880 Halbu asju juhtub. 1115 01:13:54,880 --> 01:13:58,140 Nii JavaScript hoolitseb selle eest, ja sa saad kena andmestruktuur, 1116 01:13:58,140 --> 01:14:01,390 nagu üks mu vasakule, kus sa lihtsalt dokument, 1117 01:14:01,390 --> 01:14:03,530 ja sees, et teil on midagi, mida nimetatakse HTML, 1118 01:14:03,530 --> 01:14:05,600 ja sees, et teil on head ja keha 1119 01:14:05,600 --> 01:14:08,420 ja sees, et pea te olema pealkiri, ja nii edasi, ja nii edasi, ja nii edasi. 1120 01:14:08,420 --> 01:14:11,810 See lihtsustab manipuleerides veebilehe nii, et see on lihtsalt, 1121 01:14:11,810 --> 01:14:14,190 oh, ma tahan rääkida seda objekti. 1122 01:14:14,190 --> 01:14:21,340 Omamoodi väga sarnaselt sa räägiks teise objekti, mida teha ise. 1123 01:14:21,340 --> 01:14:25,980 Nagu ma ütlesin, kõik DOM on dokumendi eesmärk. 1124 01:14:25,980 --> 01:14:29,290 Kas see on lihtsalt üks koht ja siis võid minna sees leida asju, 1125 01:14:29,290 --> 01:14:33,880 ja te ei saa seda teha - see on vana stiili teeb seda, seal, 1126 01:14:33,880 --> 01:14:38,130 kus sa document.getElementById ja siis nime, 1127 01:14:38,130 --> 01:14:42,420 ja kui saab ilmselt öelda, see muutub väga kohmakas mõne aja pärast. 1128 01:14:42,420 --> 01:14:44,480 Nii et sa ilmselt ei taha seda teha. Sellepärast on meil 1129 01:14:44,480 --> 01:14:48,760 Järgmine asi, mida me ei kavatse rääkida pärast seda. 1130 01:14:48,760 --> 01:14:52,510 Oluline on siin see, et kõik on korras, siis on kõik need elemendid, eks? 1131 01:14:52,510 --> 01:14:56,400 Nii et äkki ma saan muuta värvi midagi, kui leht laeb. 1132 01:14:56,400 --> 01:14:58,380 Mis siis? Mis siis, kui mu kasutaja klõpsab midagi? 1133 01:14:58,380 --> 01:15:00,540 Ma tahan seda teha midagi huvitavat, kui nad klõpsavad midagi. 1134 01:15:00,540 --> 01:15:02,600 Sellepärast on meil üritustel. 1135 01:15:02,600 --> 01:15:05,330 Võite põhimõtteliselt leida mingit osa oma DOM, 1136 01:15:05,330 --> 01:15:08,560 ja siis öelda, hei. Kui see laeb või keegi klikib ta, 1137 01:15:08,560 --> 01:15:11,410 või kui need hiirega üle see, midagi teha. 1138 01:15:11,410 --> 01:15:15,330 Ja mis sul on, siis on funktsioonid, mis sellega hakkama teile. 1139 01:15:15,330 --> 01:15:17,980 Need funktsioonid on sündmuseohjurite. 1140 01:15:17,980 --> 01:15:20,440 Mida Nad - see on lihtsalt fancy viis öelda, 1141 01:15:20,440 --> 01:15:23,500 seda funktsiooni täidetakse ainult siis, kui see sündmus juhtub. 1142 01:15:23,500 --> 01:15:28,070 Nii tegeleb see sündmus, mis toimub. 1143 01:15:28,070 --> 01:15:30,810 See, kuidas te paneks välja sündmus. 1144 01:15:30,810 --> 01:15:34,750 Mul on nupp, ja kui sellel klõpsata, siis see plahvatab. 1145 01:15:34,750 --> 01:15:40,560 Nii et ärge klõpsake nuppu. 1146 01:15:40,560 --> 01:15:42,910 See on üks viis, kuidas sellele läheneda, eks? 1147 01:15:42,910 --> 01:15:46,430 Sul on nupp tag, ja kliki teil on string, mis ütleb: 1148 01:15:46,430 --> 01:15:50,460 oh, muide, ma seda plahvatav asi minu jaoks. 1149 01:15:50,460 --> 01:15:53,990 Muidu on see lihtsalt nagu tavaline nupp just tehtud. 1150 01:15:53,990 --> 01:15:56,550 Võite teha ka muul viisil, 1151 01:15:56,550 --> 01:16:02,770 haarates DOM element, kuid me salvestada et pärast räägime jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: See on raamatukogu, mis on piiriülese brauser. 1153 01:16:07,580 --> 01:16:09,580 Võite kasutada seda päris palju midagi. 1154 01:16:09,580 --> 01:16:12,090 Ja see annab sulle palju vahendeid, et töötada. 1155 01:16:12,090 --> 01:16:15,850 Kuna JavaScript, kui võimas, ei ole kõik vajalikud tööriistad 1156 01:16:15,850 --> 01:16:20,550 karbist tõesti tegeleda web app võiksite teha. 1157 01:16:20,550 --> 01:16:24,650 Seega lihtsustab palju asju, annab teile palju funktsioone 1158 01:16:24,650 --> 01:16:28,760 karbist välja, et sa tavaliselt on kirjutada ise, ikka ja jälle ja jälle. 1159 01:16:28,760 --> 01:16:31,600 Ja lihtsalt teeb asju väga lihtne. 1160 01:16:31,600 --> 01:16:35,780 Sul on ka valijad, mis võimaldab teil võtta kõik need elemendid, 1161 01:16:35,780 --> 01:16:42,800 oma DOM palju lihtsalt, selle asemel et kasutada neid väga pikk funktsioon nõuab. 1162 01:16:42,800 --> 01:16:46,630 Rohkem nende valijad. Sul on, seal olete, ütleme 1163 01:16:46,630 --> 01:16:49,800 Ma tahan saada elemendi ID "kivi". 1164 01:16:49,800 --> 01:16:56,450 Noh, jQuery, see on lihtsalt $ ja siis string, mis on nael, ja siis "kivi". 1165 01:16:56,450 --> 01:17:01,960 See on väga lihtne ja palju kiiremini kui traditsiooniliste JavaScript viis probleemi lahendamiseks. 1166 01:17:01,960 --> 01:17:06,120 Ja sul on sarnaseid asju klasside ja element tüübid. 1167 01:17:06,120 --> 01:17:08,140 jQuery on - üks suurepäraseid omadusi on saate omamoodi suruma 1168 01:17:08,140 --> 01:17:14,350 maha oma päringuid oma DOM väga kiire. 1169 01:17:14,350 --> 01:17:18,980 Nüüd oleme tagasi juhul käitlemiseks, ja see on, kuidas sa hakkama üks sündmus jQuery. 1170 01:17:18,980 --> 01:17:23,090 Niisiis, mida me siin me ütleme, okei. Mul on script tag, eks? 1171 01:17:23,090 --> 01:17:25,400 Nii et ma pean seda inline JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Mida me teeme, on me öelda, eks. 1173 01:17:27,750 --> 01:17:30,860 Kui dokument on valmis, mis tähendab, et dokument on laaditud, 1174 01:17:30,860 --> 01:17:34,660 me läheme sisse, et funktsioon ja me öelda, eks, 1175 01:17:34,660 --> 01:17:37,060 See funktsioon on tegelikult midagi muud. 1176 01:17:37,060 --> 01:17:42,320 See on põhimõtteliselt öelda, olgu, mind elemendi ID "myid." 1177 01:17:42,320 --> 01:17:47,960 Ja siis annab see funktsioon handler et hukatakse, kui klõpsate seda. 1178 01:17:47,960 --> 01:17:49,820 Põhimõtteliselt, mida see teeb, on, ta ütleb, on kõik korras. 1179 01:17:49,820 --> 01:17:52,630 Leht on laetud, nii et ma lähen sisse, leida see element, 1180 01:17:52,630 --> 01:17:56,420 anna see sündmus ja seda põhiliselt loob oma lehe jaoks. 1181 01:17:56,420 --> 01:18:00,520 Ja see on, kuidas sa tahad mõelda sündmus käitlemise kohta. 1182 01:18:00,520 --> 01:18:06,310 Sa tahad mõelda, eks, kui midagi juhtub, mida ma tahan, et juhtub? 1183 01:18:06,310 --> 01:18:10,520 Sa ei taha mõelda, okei, mul on vaja teha kindel, et see asi räägib see asi, 1184 01:18:10,520 --> 01:18:14,660 see asi blah blah blah, sest tahad lihtsalt rääkida asi nii üritusi. 1185 01:18:14,660 --> 01:18:17,650 Kui see juhtub, see juhtub. Kui see juhtub, mis juhtub. 1186 01:18:17,650 --> 01:18:20,240 Ja kui asjad käivitab muid asju, mis on hea. 1187 01:18:20,240 --> 01:18:22,150 Aga sa ei taha, et proovida ja teha keeruline kood 1188 01:18:22,150 --> 01:18:24,130 kuhu vallandada mitu asja korraga, 1189 01:18:24,130 --> 01:18:28,860 sest sa oled lihtsalt annan endale peavalu. 1190 01:18:28,860 --> 01:18:32,340 >> Olgu. Nüüd saame meie leht sündmuste käsitlemiseks, 1191 01:18:32,340 --> 01:18:35,640 aga oletame, et mu kasutaja klõpsab nuppu. 1192 01:18:35,640 --> 01:18:38,040 Mis siis, kui ma tahan saata selle taotluse tagasi serverisse 1193 01:18:38,040 --> 01:18:41,100 aga ma ei taha asendusostu lehekülge, sest võttes uuesti laadida uue lehekülje 1194 01:18:41,100 --> 01:18:44,390 iga kord, kui muutub omamoodi tüütu, ja miks ma pean 1195 01:18:44,390 --> 01:18:47,430 lammutama uuesti päist ja jalust jälle 1196 01:18:47,430 --> 01:18:49,670 ja kõik elemendid lehel uuesti 1197 01:18:49,670 --> 01:18:53,180 lihtsalt värskendada tervitus või aeg? 1198 01:18:53,180 --> 01:18:55,290 Nii et miks me peame midagi Ajax. 1199 01:18:55,290 --> 01:18:59,150 Mida me saame teha koos Ajax on võime öelda, eks, 1200 01:18:59,150 --> 01:19:01,290 Ma tahan saata mõned andmed serverisse, 1201 01:19:01,290 --> 01:19:04,010 ja ma tahan saada vastus tagasi, et ma ei uuenda oma lehele 1202 01:19:04,010 --> 01:19:12,120 või äkki lihtsalt teha mõned algoritmilise arvutamise, mis ei pruugi näidata midagi kasutaja. 1203 01:19:12,120 --> 01:19:15,500 Mida sa pead seda tegema? Noh, sa pead URL sa pead rääkima. 1204 01:19:15,500 --> 01:19:18,650 Teie server ei saa lihtsalt võluväel kuulata eikusagilt. 1205 01:19:18,650 --> 01:19:21,960 Sa pead olema konkreetse koha saadate andmed. 1206 01:19:21,960 --> 01:19:26,240 Ja siis tuleb ka mõned andmed saata, või võibolla see dataless päring. 1207 01:19:26,240 --> 01:19:31,380 Sa tahad lihtsalt ping serverile tagasi ja öelda, hei, ma olen elus, või midagi sellist. 1208 01:19:31,380 --> 01:19:35,150 Ja siis sa tahad funktsioon, mis põhiliselt tegeleb edukalt. 1209 01:19:35,150 --> 01:19:38,250 Oletame, et sa saad tagasi mõned andmed oma server, 1210 01:19:38,250 --> 01:19:42,960 ja sa soovid muuta kasutaja pealkiri oma lehele. 1211 01:19:42,960 --> 01:19:44,930 Nii et teil oleks saada infot juurde, 1212 01:19:44,930 --> 01:19:48,860 ja sa suruksid et ekraanile. 1213 01:19:48,860 --> 01:19:51,170 Mis juhtub on see, kui leht on valmis, 1214 01:19:51,170 --> 01:19:56,500 loote click funktsiooni see nupp nimega greeter. 1215 01:19:56,500 --> 01:19:58,810 Mis see siis teeb, kui see nupp on alla vajutatud, 1216 01:19:58,810 --> 01:20:03,700 räägi greetings.php, teete ametikohale taotluse 1217 01:20:03,700 --> 01:20:07,290 ja te ütlete, hei, anna mulle midagi oma lehel. 1218 01:20:07,290 --> 01:20:09,890 Meil ei ole tegelikult vaja, et kirjeldada seda, kuid greetings.php, 1219 01:20:09,890 --> 01:20:12,480 ütleme lihtsalt, annab tagasi "tere". 1220 01:20:12,480 --> 01:20:15,650 Nii saame tagasi selle "tere" ja edu, 1221 01:20:15,650 --> 01:20:20,730 eeldades midagi läheb valesti, siis minge selle eesmärgi koht 1222 01:20:20,730 --> 01:20:25,720 et me määratud ja me lihtsalt kinni vastus olemas. 1223 01:20:25,720 --> 01:20:31,560 Ja see on väga lihtne viis luua Ajax päringut. 1224 01:20:31,560 --> 01:20:34,340 >> Väga kiiresti, Rob omamoodi mainis seda juba, 1225 01:20:34,340 --> 01:20:37,170 asju saab valesti minna, halbu asju võib juhtuda, 1226 01:20:37,170 --> 01:20:42,660 nii et sa tahad end kurssi viia need HTTP vastus koodid. 1227 01:20:42,660 --> 01:20:46,030 Mis need on lihtsalt, nagu, 200, kõik läks hästi. 1228 01:20:46,030 --> 01:20:48,670 Midagi muud, halbu asju juhtunud. 1229 01:20:48,670 --> 01:20:50,790 See on üldiselt asi, mida tahate mäletada. 1230 01:20:50,790 --> 01:20:53,440 Aga see on tore teada kõiki neid. 1231 01:20:53,440 --> 01:20:55,970 Ja lõpuks, kui oleme läbi käinud kõik, et 1232 01:20:55,970 --> 01:20:58,680 me peame rääkima väga kiiresti umbes disain, 1233 01:20:58,680 --> 01:21:00,620 ja siis me ei saa teile kõigile lahkuda. 1234 01:21:00,620 --> 01:21:03,410 Design. Asjad, mida tahate mäletada. 1235 01:21:03,410 --> 01:21:06,950 Küsige endalt need küsimused: Kes sa kasutad seda? 1236 01:21:06,950 --> 01:21:09,580 Mida nad seda kasutada? Mida mu kasutajad hoolivad? 1237 01:21:09,580 --> 01:21:11,750 Mida nad ei hooli? 1238 01:21:11,750 --> 01:21:14,500 Sa lihtsalt ei taha teha app ja lase tal lihtsalt kasvada 1239 01:21:14,500 --> 01:21:18,270 ja saada see hiiglane, kõik tarbivad asi, mida sa ei suuda isegi lõpuni. 1240 01:21:18,270 --> 01:21:23,900 Sa tahad olla diskreetne eesmärgid ja plaanid ja asjad, mida soovite lahendada. 1241 01:21:23,900 --> 01:21:29,000 Tee pingutusteta. Kõik see ütleb, põhimõtteliselt 1242 01:21:29,000 --> 01:21:34,950 oleks lihtne kasutaja seda kasutada; ei tee see hiiglane kämp teksti nagu see slaid on tegelikult. 1243 01:21:34,950 --> 01:21:38,020 Sa tahad, et see oleks midagi, kui see on väga lihtne, et keegi minna 1244 01:21:38,020 --> 01:21:40,800 ja teha seda, mida nad tahavad teha. 1245 01:21:40,800 --> 01:21:42,920 Sa ei taha, et neil navigeerida 5 lehekülge 1246 01:21:42,920 --> 01:21:45,460 saada oma esmane funktsioon saidile. 1247 01:21:45,460 --> 01:21:49,290 Kui Google oli 5 lehekülge enne võid isegi otsida midagi, 1248 01:21:49,290 --> 01:21:53,080 keegi ei kasuta seda. 1249 01:21:53,080 --> 01:21:55,890 Ja lõpuks, paber prototüüp, fookusgrupi. 1250 01:21:55,890 --> 01:21:59,220 Kas hea disaini ja testimise tavasid. 1251 01:21:59,220 --> 01:22:00,730 Lihtsalt, sest sa arvad, et see toimib teie jaoks, 1252 01:22:00,730 --> 01:22:04,860 ei tähenda, et keegi teine ​​arvab, et see toimib. 1253 01:22:04,860 --> 01:22:14,490 Aga jah, nii see on. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]