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 [Dit is CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Welkom iedereen. Dit is beoordeling voor quiz 1. 5 00:00:11,610 --> 00:00:15,040 Net zoals een disclaimer, deze is - ik bedoel, we gaan proberen te dekken 6 00:00:15,040 --> 00:00:17,770 zoveel mogelijk materiaal, maar dat betekent niet dat 7 00:00:17,770 --> 00:00:20,780 we gaan alles van de dingen die kunnen worden in quiz 1 dekken. 8 00:00:20,780 --> 00:00:25,270 Dus zorg ervoor dat u ook een kijkje nemen op college, secties, alles wat je kunt nemen. 9 00:00:25,270 --> 00:00:28,240 Quiz 1 gaat worden op woensdag, volgende week woensdag. 10 00:00:28,240 --> 00:00:33,800 Dus zorg ervoor om te studeren. Het zal zijn, vrij veel, net als de eerste quiz 11 00:00:33,800 --> 00:00:36,390 met betrekking tot het formaat, maar het gaat waarschijnlijk veel moeilijker zijn. 12 00:00:36,390 --> 00:00:39,600 Tenminste, vorig jaar toen ik 50, ik dacht dat het veel moeilijker. 13 00:00:39,600 --> 00:00:42,410 Dus bestuderen veel. 14 00:00:42,410 --> 00:00:45,190 >> Ik ga datastructuren dekken en Huffman codering. 15 00:00:45,190 --> 00:00:47,910 Dit is iets dat veel mensen denken is complex, 16 00:00:47,910 --> 00:00:51,930 maar ik ga proberen om het zo makkelijk mogelijk te maken. 17 00:00:51,930 --> 00:00:56,330 Allereerst, wat we willen dat jullie weten quiz 1 is 18 00:00:56,330 --> 00:01:00,970 inzicht in de conceptuele beschrijvingen van elk van de data structuren die ik ga presenteren. 19 00:01:00,970 --> 00:01:03,960 Dat betekent dat je niet hoeft om daadwerkelijk 20 00:01:03,960 --> 00:01:07,020 implementeren van een hash-tabel in uw quiz 1. 21 00:01:07,020 --> 00:01:10,250 We willen niet dat je een hele hash table voeren; misschien zullen we proberen 22 00:01:10,250 --> 00:01:13,090 te zorgen dat u bepaalde functies uit te voeren, 23 00:01:13,090 --> 00:01:16,940 de meest voorkomende operaties, maar we gaan niet om je alles uit te voeren. 24 00:01:16,940 --> 00:01:21,010 Dus het is belangrijk dat je het concept achter elke datastructuur begrijpen 25 00:01:21,010 --> 00:01:23,510 en ook dat u in staat om code in C zijn, 26 00:01:23,510 --> 00:01:27,880 alleen de meest voorkomende activiteiten die zij hebben voor elke datastructuur. 27 00:01:27,880 --> 00:01:30,090 En ook in staat om pointers en structs beoordelen, 28 00:01:30,090 --> 00:01:33,470 omdat ze blijkbaar veel in deze datastructuren. 29 00:01:33,470 --> 00:01:37,380 >> Eerste gekoppelde lijsten. Geschakelde lijsten zijn eigenlijk zeer vergelijkbaar met arrays 30 00:01:37,380 --> 00:01:39,930 maar het verschil tussen een gekoppelde lijst en een array, 31 00:01:39,930 --> 00:01:45,160 allereerst dat een gekoppelde lijst een flexibel formaat, 32 00:01:45,160 --> 00:01:50,060 terwijl in arrays moet je kiezen voor een zeer grote omvang van de array, 33 00:01:50,060 --> 00:01:53,710 zodat je weet dat je gaat om te kunnen al uw gegevens in die array op te slaan, 34 00:01:53,710 --> 00:01:59,370 of je moet malloc gebruiken om een ​​flexibele lengte van de array. 35 00:01:59,370 --> 00:02:03,680 In gelinkte lijsten het is heel makkelijk om gewoon meer elementen, 36 00:02:03,680 --> 00:02:07,210 zet meer elementen in de gelinkte lijst of elementen te verwijderen. 37 00:02:07,210 --> 00:02:09,370 En eigenlijk, als je niet wilt dat de gelinkte lijst te sorteren, 38 00:02:09,370 --> 00:02:13,950 U kunt zoeken en elementen in constante tijd te verwijderen, 39 00:02:13,950 --> 00:02:16,800 dus O (1) tijd, dus het is erg handig. 40 00:02:16,800 --> 00:02:20,660 Je moet gewoon voorzichtig zijn om altijd onthouden om malloc en gratis de knooppunten, 41 00:02:20,660 --> 00:02:25,510 gewoon omdat als je dat niet, dan moet je memory leaks. 42 00:02:25,510 --> 00:02:31,480 Dus gelinkte lijsten - de definitie van een knooppunt is net als wat we hebben daar. 43 00:02:31,480 --> 00:02:35,110 Ik zet int n, maar u kunt alle gegevens die u wilt opslaan. 44 00:02:35,110 --> 00:02:37,280 Dus als je wilt een string op te slaan, het is prima. 45 00:02:37,280 --> 00:02:41,690 Wilt u een structuur op te slaan, het is prima, een dubbele, wat je wilt. 46 00:02:41,690 --> 00:02:44,630 Ik heb net int n voor de voorbeelden hier. 47 00:02:44,630 --> 00:02:46,800 En je moet een pointer naar het volgende knooppunt. 48 00:02:46,800 --> 00:02:51,940 Dus, in principe, een gekoppelde lijst heeft een aantal data, en dan wijst naar de volgende node. 49 00:02:51,940 --> 00:02:56,710 Als het het laatste element in de gelinkte lijst, gaat het te wijzen op NULL. 50 00:02:56,710 --> 00:02:59,060 Dit is dus een voorbeeld van een gekoppelde lijst. 51 00:02:59,250 --> 00:03:05,960 >> Oke, dus nu laten we zien wat we moeten doen als ik een element in een gelinkte lijst invoegen. 52 00:03:05,960 --> 00:03:08,810 Ten eerste zal een functie insert van het type ongeldig 53 00:03:08,810 --> 00:03:11,350 want ik wil niet terugkeert niets. 54 00:03:11,350 --> 00:03:14,200 En ik ga naar een int nemen als argument, 55 00:03:14,200 --> 00:03:17,090 omdat ik wil weten wat ik wil invoegen. 56 00:03:17,090 --> 00:03:21,840 Dus wat is het eerste wat ik moet doen? Nou, ik moet malloc op newnode, 57 00:03:21,840 --> 00:03:24,240 dus dat is de eerste regel. 58 00:03:24,240 --> 00:03:27,580 Ik ben gewoon het creëren van een nieuw knooppunt in een gelinkte lijst te zetten. 59 00:03:27,580 --> 00:03:32,360 Dus wat kan ik doen? Nou, we weten dat in onze implementaties van gelinkte lijsten 60 00:03:32,360 --> 00:03:38,180 in de klas, we altijd op het hoofd als een globale variabele. 61 00:03:38,180 --> 00:03:41,800 Dus wat we kunnen doen is de kop. 62 00:03:41,800 --> 00:03:44,300 Ik kan deze nieuwe node het nieuwe hoofd, 63 00:03:44,300 --> 00:03:46,670 en het gaat om te wijzen op het vorige hoofd. 64 00:03:46,670 --> 00:03:50,390 Hoe kunnen we dat doen? Het eerste wat ik moet doen 65 00:03:50,390 --> 00:03:54,770 is verandering de 'n' in het nieuwe knooppunt naar waarde, 66 00:03:54,770 --> 00:03:57,530 die werd doorgegeven aan de functie. 67 00:03:57,530 --> 00:04:01,050 Dan is newnode naast gaat het hoofd zijn. 68 00:04:01,050 --> 00:04:05,800 Het hoofd zal worden newnode. Dus het is vrij simpel. 69 00:04:05,800 --> 00:04:10,090 Voor het verwijderen van een knooppunt, kunnen we het doen zoals - 70 00:04:10,090 --> 00:04:14,790 Enkel we dat konden doen wil zeggen, 71 00:04:14,790 --> 00:04:18,160 oke, als ik wilde verwijderen, bijvoorbeeld, 3, 72 00:04:18,160 --> 00:04:24,850 wat ik kon doen is gewoon wijzen de vorige knooppunt 73 00:04:24,850 --> 00:04:27,580 naar de volgende knoop van 3. 74 00:04:27,580 --> 00:04:29,400 Dus ik zou net zoiets doen. 75 00:04:29,400 --> 00:04:33,400 Maar wat is het probleem met dat te doen? 76 00:04:33,400 --> 00:04:37,400 Ik heb een geheugen lek, dus ik heb geen toegang tot de nummer 3 niet meer. 77 00:04:37,400 --> 00:04:42,480 Het probleem met dat is dat ik niet van plan om te kunnen bevrijden dat knooppunt. 78 00:04:42,480 --> 00:04:45,360 Ik ga moeten geheugenlek en (onverstaanbaar) gaat me haten. 79 00:04:45,360 --> 00:04:49,370 Dus in plaats van dat te doen, zou ik waarschijnlijk een tijdelijke pointer. 80 00:04:49,370 --> 00:04:53,210 Dus ik zet temp. Het zal wijzen op het knooppunt dat ik wil verwijderen. 81 00:04:53,210 --> 00:04:58,170 En dan kan ik de vorige nodes verplaatsen naar punt naar het volgende knooppunt 82 00:04:58,170 --> 00:05:00,390 van de knoop die ik wil verwijderen. 83 00:05:00,390 --> 00:05:02,730 En tot slot, kan ik gratis de aanwijzer. 84 00:05:02,730 --> 00:05:07,480 Moet ik de pointer die ik heb gemaakt daar te bevrijden? 85 00:05:07,480 --> 00:05:09,560 Ik hoef niet naar, gewoon omdat - 86 00:05:09,560 --> 00:05:13,430 het verschil is dat deze node is gemaakt met behulp van malloc, 87 00:05:13,430 --> 00:05:17,280 dus het is in de hoop, terwijl deze net werd verklaard als een NULL schakelaar in de stapel. 88 00:05:17,280 --> 00:05:20,000 Dus ik hoef het niet te bevrijden. 89 00:05:20,000 --> 00:05:22,030 >> Oke. Dus nu laten we praten over stacks. 90 00:05:22,030 --> 00:05:24,680 Stapels zijn vrij eenvoudig. 91 00:05:24,680 --> 00:05:29,540 We hebben stapels en rijen in de klas alleen met behulp van arrays, 92 00:05:29,540 --> 00:05:32,820 maar je moet vertrouwd zijn - net bewust 93 00:05:32,820 --> 00:05:40,740 dat u ook stapels kunt doen in de rij met behulp van gelinkte lijsten ook. 94 00:05:40,740 --> 00:05:44,460 Dus als je een array, wat zou een stapel zijn? 95 00:05:44,460 --> 00:05:46,810 Een stapel, eerste, zal een grootte hebben. 96 00:05:46,810 --> 00:05:49,950 Je moet slaan wat is de grootte van de stack die je nu hebt. 97 00:05:49,950 --> 00:05:52,980 En ook zou u een array, in dit geval getallen, 98 00:05:52,980 --> 00:05:55,120 maar als je wilt, kan het een array zijn 99 00:05:55,120 --> 00:06:00,380 snaren, een array van structuur, iets dat u wilt opslaan. 100 00:06:00,380 --> 00:06:03,240 Over de stapel: Het verschil tussen een stapel en een gekoppelde lijst 101 00:06:03,240 --> 00:06:08,590 is dat de stapel u toegang tot het laatste element dat in de stapel is gebracht alleen. 102 00:06:08,590 --> 00:06:11,770 Het laatste heet, first out. 103 00:06:11,770 --> 00:06:15,090 Net alsof je een stapel trays, 104 00:06:15,090 --> 00:06:17,670 als je een dienblad op de bovenkant van de stapel, 105 00:06:17,670 --> 00:06:22,670 moet je die lade eerst verwijderen om toegang tot de andere laden hebben. 106 00:06:22,670 --> 00:06:26,310 Het is hetzelfde met stapels. 107 00:06:26,310 --> 00:06:31,220 Dus als ik wil, bijvoorbeeld, voegen een element aan een stapel, wat moet ik doen? 108 00:06:31,220 --> 00:06:34,070 Het heet push, en het is vrij eenvoudig. 109 00:06:34,070 --> 00:06:37,130 Het eerste wat je hoeft te doen is controleren of de grootte van de stack 110 00:06:37,130 --> 00:06:40,150 niet groter of gelijk aan de capaciteit van de stapel. 111 00:06:40,150 --> 00:06:45,810 Want als je al op volle capaciteit, kun je niets anders toevoegen. 112 00:06:45,810 --> 00:06:51,140 En als niet, je hoeft alleen het element toe te voegen aan de stapel. 113 00:06:51,140 --> 00:06:54,530 En tenslotte, verhoog de grootte. Dus het is vrij eenvoudig. 114 00:06:54,530 --> 00:06:57,140 Dus ik voeg gewoon de nummer 2. 115 00:06:57,140 --> 00:07:00,350 En als ik wil knallen, wat betekent dat ik wil verwijderen 116 00:07:00,350 --> 00:07:03,870 de laatste element dat toegevoegd en terugkeer de waarde van het element, 117 00:07:03,870 --> 00:07:09,180 het eerste wat ik heb om te controleren is dat de stack niet leeg is. 118 00:07:09,180 --> 00:07:11,510 Want als het leeg is, kan ik niets terug. 119 00:07:11,510 --> 00:07:14,820 In dat geval ben ik terug -1. 120 00:07:14,820 --> 00:07:18,960 Anders ga ik de grootte van de spec verlagen, 121 00:07:18,960 --> 00:07:22,510 en terug te keren nummers (s.size). 122 00:07:22,510 --> 00:07:27,230 Waarom heb ik verlagen van de grootte en dan terug s.size? 123 00:07:27,230 --> 00:07:30,930 Het is omdat, in dit geval, de spec heeft maat 4, 124 00:07:30,930 --> 00:07:33,810 en ik wil het vierde element terug, toch? 125 00:07:33,810 --> 00:07:36,030 Maar wat is de index van het vierde element? Drie. 126 00:07:36,030 --> 00:07:44,510 Omdat ik de grootte - gaat worden 3, kan ik gewoon s.numbers terug (s.size) 127 00:07:44,510 --> 00:07:48,410 omdat het 3. Dus het is gewoon de index. 128 00:07:48,410 --> 00:07:50,380 >> Nu wachtrijen. Wachtrijen zijn vrijwel hetzelfde. 129 00:07:50,380 --> 00:07:54,950 Het enige verschil is dat in plaats van last in, first out, 130 00:07:54,950 --> 00:07:57,480 je eerst in, first out. 131 00:07:57,480 --> 00:07:59,460 Waarschijnlijk als je zit te wachten om naar een concert, 132 00:07:59,460 --> 00:08:04,260 je zou niet blij zijn als je een stapel in plaats van een wachtrij gehad. 133 00:08:04,260 --> 00:08:07,730 Omdat dit de laatste persoon te komen zou de eerste persoon om het concert te betreden. 134 00:08:07,730 --> 00:08:09,760 Je zou waarschijnlijk niet gelukkig zijn. 135 00:08:09,760 --> 00:08:15,020 In de rij, de eerste persoon in te krijgen is ook de eerste persoon om eruit te komen. 136 00:08:15,020 --> 00:08:18,720 Dus in de definitie van een rij, naast het hebben van de grootte van de array 137 00:08:18,720 --> 00:08:23,360 heb je ook aan het hoofd, die de index aan het hoofd van de stapel hebben. 138 00:08:23,360 --> 00:08:29,000 Dus het eerste element op dit moment. 139 00:08:29,000 --> 00:08:32,710 Enqueue is hetzelfde als push voor stacks. 140 00:08:32,710 --> 00:08:34,980 Als je erg naïef, zou je gewoon zeggen, 141 00:08:34,980 --> 00:08:39,289 goed, ik kan het gewoon doen precies hetzelfde als ik deed voor push. 142 00:08:39,289 --> 00:08:44,030 Ik kan alleen maar controleren of het niet verder dan de capaciteit. 143 00:08:44,030 --> 00:08:48,760 Als het is, ik return false, anders kan ik gewoon exporteren de nieuwe waarde 144 00:08:48,760 --> 00:08:50,630 en dan verhoog de grootte. 145 00:08:50,630 --> 00:08:52,750 Maar waarom is dit verkeerd? 146 00:08:52,750 --> 00:08:55,010 Laten we eens kijken dit voorbeeld. 147 00:08:55,010 --> 00:08:57,020 Ik ben op zoek naar een heleboel dingen enqueue, 148 00:08:57,020 --> 00:08:58,390 en dan ga ik dequeue en enqueue. 149 00:08:58,390 --> 00:09:00,550 Er is een hoop commando's, maar het is heel simpel. 150 00:09:00,550 --> 00:09:04,790 Ik ga enqueue 5, dus het is aan 5, en dan op 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, en dan wil ik iets dequeue, 152 00:09:09,310 --> 00:09:12,000 wat betekent dat ik ga naar het eerste element te verwijderen. 153 00:09:12,000 --> 00:09:14,640 Dus ik ga naar het nummer 3 te verwijderen, toch? 154 00:09:14,640 --> 00:09:17,320 Het eerste element. Oke. 155 00:09:17,320 --> 00:09:21,450 Nu als ik probeer om iets anders enqueue, wat er gaat gebeuren? 156 00:09:21,450 --> 00:09:24,290 Volgens mijn implementatie, 157 00:09:24,290 --> 00:09:31,040 Ik was van plan om het volgende nummer in de index q.size zetten. 158 00:09:31,040 --> 00:09:35,140 In dit geval is de grootte 8, 159 00:09:35,140 --> 00:09:38,640 dus de index 8 zal hier in de laatste positie. 160 00:09:38,640 --> 00:09:43,900 Als ik probeer om hier enqueue 1, zou ik de laatste positie worden overschreven 161 00:09:43,900 --> 00:09:45,870 om het nummer 1, dat is het helemaal mis. 162 00:09:45,870 --> 00:09:49,870 Wat ik wil doen is wikkel rond en ga naar de eerste positie. 163 00:09:49,870 --> 00:09:52,870 Misschien wil je gewoon zeggen, nou, ik moet enkel vertrekken 164 00:09:52,870 --> 00:09:55,600 als ik daadwerkelijk iets daar zetten. 165 00:09:55,600 --> 00:09:58,560 Zo niet, zeg ik gewoon, oh, de nieuwe volledige capaciteit 166 00:09:58,560 --> 00:10:02,010 is eigenlijk capaciteit - 1, en je niet kunt een element daar. 167 00:10:02,010 --> 00:10:06,150 Maar wat is het probleem? Het probleem is dat als ik alles dequeue precies goed hier 168 00:10:06,150 --> 00:10:08,240 en dan probeer ik iets anders toe te voegen, zou het gewoon zeggen, 169 00:10:08,240 --> 00:10:11,210 goed, je was op volle capaciteit, dat is 0. 170 00:10:11,210 --> 00:10:13,620 Dus je wachtrij is verdwenen. 171 00:10:13,620 --> 00:10:16,990 Je moet wikkelen, en een manier van wikkelen rond 172 00:10:16,990 --> 00:10:22,040 dat jullie geleerd in visionaire en andere psets werd met behulp van mod. 173 00:10:22,040 --> 00:10:29,090 U kunt proberen thuis te begrijpen waarom je q.size + q.head zou doen 174 00:10:29,090 --> 00:10:31,080 mod capaciteit, maar als je hier direct bekijken, 175 00:10:31,080 --> 00:10:34,760 kunnen we zien dat het werkt. 176 00:10:34,760 --> 00:10:37,760 Dus in het laatste voorbeeld, was q.size 8 177 00:10:37,760 --> 00:10:47,590 en het hoofd was 1, want het was deze positie hier van de array. 178 00:10:47,590 --> 00:10:51,970 Zo zal 8 + 1, 9. Mod capaciteit 9 zou zijn 0. 179 00:10:51,970 --> 00:10:56,640 Het zou gaan om de index 0. We zullen in de juiste positie. 180 00:10:56,640 --> 00:10:59,750 En dan proberen de wachtrij thuis. 181 00:10:59,750 --> 00:11:04,950 Enkele belangrijke dingen: proberen om het verschil tussen een stapel en een wachtrij te begrijpen. 182 00:11:04,950 --> 00:11:11,620 Thuis, proberen om zeer vertrouwd met de uitvoering enqueue, dequeue, push en pop te krijgen. 183 00:11:11,620 --> 00:11:16,560 En ook begrijpen als je elk van hen zou gebruiken. 184 00:11:16,560 --> 00:11:22,830 >> Dus laten we ontspannen gedurende 10 seconden met een bos van Pokemons. 185 00:11:22,830 --> 00:11:26,080 En nu laten we terugkeren naar datastructuren gaan. 186 00:11:26,080 --> 00:11:29,770 Hash tabellen. Veel mensen waren bang van hash tables. 187 00:11:29,770 --> 00:11:33,650 in probleem set 6, Spell Checker. 188 00:11:33,650 --> 00:11:35,980 Hash tabellen en probeert, veel mensen bang van hen. 189 00:11:35,980 --> 00:11:38,540 Ze denken dat ze zo moeilijk te begrijpen. Yeah? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Probleem set 5. >> Probleem set 5, ja. Bedankt Rob. 191 00:11:41,490 --> 00:11:43,370 Yeah. Zes was Huff n 'Puff, ja. 192 00:11:43,370 --> 00:11:49,340 Probleem set 5 werd Spell Checker, en je moest ofwel een hash table of proberen te gebruiken. 193 00:11:49,340 --> 00:11:55,360 Veel mensen dachten dat ze waren super moeilijk te begrijpen, maar ze zijn eigenlijk vrij eenvoudig. 194 00:11:55,360 --> 00:12:01,290 Wat is een hash table, eigenlijk? Een hash table is een array van gelinkte lijsten. 195 00:12:01,290 --> 00:12:06,730 Het enige verschil tussen een array en een hash tabel 196 00:12:06,730 --> 00:12:09,730 is dat in de hash tabel je zoiets als een hash-functie hebben. 197 00:12:09,730 --> 00:12:12,080 Wat is een hash-functie? 198 00:12:12,080 --> 00:12:13,970 Ik weet niet of jullie hier kunt lezen. 199 00:12:13,970 --> 00:12:16,090 Dit is een voorbeeld van een hash-tabel. 200 00:12:16,090 --> 00:12:19,220 Zodat je kunt zien dat je een array met 31 elementen. 201 00:12:19,220 --> 00:12:22,440 En wat we doen in een hash tabel wordt een hash-functie 202 00:12:22,440 --> 00:12:26,660 dat gaat om een ​​sleutel te vertalen, elk int aan een index. 203 00:12:26,660 --> 00:12:31,740 Als, bijvoorbeeld, als ik wil kiezen voor B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Ik zou B. Harrison in mijn hash functies, 205 00:12:34,190 --> 00:12:36,960 en de hash-functie zou 24 terugkeren. 206 00:12:36,960 --> 00:12:40,930 Dus ik weet dat ik wil B. Harrison op te slaan in 24. 207 00:12:40,930 --> 00:12:46,580 Dus dat is het verschil tussen gewoon een array en een hash table. 208 00:12:46,580 --> 00:12:48,740 In de hash tabel vindt u een functie die zal u vertellen 209 00:12:48,740 --> 00:12:54,740 waar de gegevens die u wilt opslaan op te slaan. 210 00:12:54,740 --> 00:12:57,040 Voor de hash-functie, u wilt op zoek naar een hash-functie 211 00:12:57,040 --> 00:13:00,600 dat is deterministische en goed gespreid. 212 00:13:00,600 --> 00:13:07,810 Zoals je hier kunt zien, zie je dat een groot deel van de gegevens die ik wilde winkel was eigenlijk 19 213 00:13:07,810 --> 00:13:12,470 in plaats van 31 en 30 en 29, die allemaal vrij waren. 214 00:13:12,470 --> 00:13:16,920 Dus de hash-functie die ik gebruikte was niet erg goed gespreid. 215 00:13:16,920 --> 00:13:20,710 Wanneer we zeggen dat goed gespreid, het betekent dat we willen hebben, 216 00:13:20,710 --> 00:13:26,520 ongeveer ten minste 1 of 2 voor elk van de - 217 00:13:26,520 --> 00:13:32,190 als een verschil van 1 of 2 voor elk van de indexen van de matrices. 218 00:13:32,190 --> 00:13:43,950 Je wilt hebben, ruwweg, hetzelfde aantal elementen in elke gelinkte lijst in de array. 219 00:13:43,950 --> 00:13:48,600 En het is gemakkelijk om te controleren of deze geldig is in de hash tabel, zien als hash tables. 220 00:13:48,600 --> 00:13:51,770 >> Dan bomen. Dit is een boom. 221 00:13:51,770 --> 00:13:56,400 Bomen in de informatica zijn kop voor een of andere reden. 222 00:13:56,400 --> 00:14:00,150 Dus hier heb je de wortel van de boom en vervolgens de bladeren. 223 00:14:00,150 --> 00:14:05,630 Je moet gewoon weten de nomenclatuur voor ouders en kind. 224 00:14:05,630 --> 00:14:12,880 Elk knooppunt heeft een kind, waarbij de knooppunten die onder de moederverbinding. 225 00:14:12,880 --> 00:14:19,660 Dus, bijvoorbeeld, 2 zal de ouder 3 en het andere kind daar, 226 00:14:19,660 --> 00:14:25,290 terwijl 3 gaat de ouder 1 en de andere kinderen die er zijn. 227 00:14:25,290 --> 00:14:29,990 En 1 zal 3 kind zijn, enzovoort. 228 00:14:29,990 --> 00:14:34,610 Wij hebben iets veel interessanter, een zogenaamde binaire zoekboom, 229 00:14:34,610 --> 00:14:39,040 waarbij alle waarden rechts van een knooppunt 230 00:14:39,040 --> 00:14:41,660 zullen worden aan de rechterkant, hier - aan de rechterkant, 231 00:14:41,660 --> 00:14:46,780 zullen groter dan het element in de root. 232 00:14:46,780 --> 00:14:49,780 Dus als ik het nummer 5 hier, alle elementen op de juiste 233 00:14:49,780 --> 00:14:51,940 zullen groter dan 5, en aan de linkerkant 234 00:14:51,940 --> 00:14:56,770 alle elementen zullen minder dan 5 is. 235 00:14:56,770 --> 00:14:58,780 Waarom is dit nuttig? 236 00:14:58,780 --> 00:15:01,660 Nou, als ik wil controleren of het getal 7 is hier, bijvoorbeeld, 237 00:15:01,660 --> 00:15:05,960 Ik ga gewoon naar 5 eerste en ik ga kijken, is 7 meer of minder dan 5? 238 00:15:05,960 --> 00:15:09,540 Het is groter, dus ik weet dat het zal moeten worden aan de rechterkant van de boom. 239 00:15:09,540 --> 00:15:13,980 Dus ik heb veel minder dingen te kijken. 240 00:15:13,980 --> 00:15:19,520 Ter uitvoering van een binaire zoekboom, de knoop, ik gewoon te hebben tot de gegevens, 241 00:15:19,520 --> 00:15:21,750 dus int n, je kon ook een string 242 00:15:21,750 --> 00:15:23,630 of alles wat je wilde. 243 00:15:23,630 --> 00:15:28,100 Je moet gewoon voorzichtig zijn op het definiëren van wat groter is om, wat minder is. 244 00:15:28,100 --> 00:15:30,390 Dus als je snaren had, bijvoorbeeld, kun je definiëren 245 00:15:30,390 --> 00:15:34,690 dat al die dingen op de juiste zullen grotere lengte hebben, 246 00:15:34,690 --> 00:15:40,940 links zullen lagere lengtes hebben, dus het is echt aan jou. 247 00:15:40,940 --> 00:15:44,930 >> Hoe implementeer ik vind voor BST? 248 00:15:44,930 --> 00:15:47,840 Het eerste wat we moeten doen, is controleren of de wortel is NULL. 249 00:15:47,840 --> 00:15:50,920 Als het NULL, betekent dit dat de zaak er niet 250 00:15:50,920 --> 00:15:53,330 want je hoeft niet eens een boom, toch? 251 00:15:53,330 --> 00:15:55,790 Dus ik return false. 252 00:15:55,790 --> 00:15:58,740 Anders, ik ga om te controleren of het getal groter 253 00:15:58,740 --> 00:16:01,720 dan de bij de wortel. 254 00:16:01,720 --> 00:16:04,250 Ik ga proberen om het element aan de rechterzijde 255 00:16:04,250 --> 00:16:08,590 van de boom. 256 00:16:08,590 --> 00:16:11,310 Je ziet dat ik gebruik recursie hier. 257 00:16:11,310 --> 00:16:14,150 En als het dan minder, ga ik naar links kijkt. 258 00:16:14,150 --> 00:16:18,330 En tot slot, anders, als het niet minder of niet meer, 259 00:16:18,330 --> 00:16:20,660 betekent dat het de waarde zelf. 260 00:16:20,660 --> 00:16:23,010 Dus ik return true. 261 00:16:23,010 --> 00:16:26,360 U kunt hier zien dat ik gebruikte als, als, als. 262 00:16:26,360 --> 00:16:30,820 En vergeet niet, in quiz 0, hadden we een probleem dat had als, als, als, 263 00:16:30,820 --> 00:16:32,780 en je moest de inefficiëntie te vinden, 264 00:16:32,780 --> 00:16:35,180 en de inefficiëntie was dat je gebruikt wanneer. 265 00:16:35,180 --> 00:16:39,060 U zou hebben gebruikt indien, anders als, anders als, en anders. 266 00:16:39,060 --> 00:16:44,240 Dus, moet ik gebruiken else if en else if en anders hier? 267 00:16:44,240 --> 00:16:46,200 Heeft iemand - ja? 268 00:16:46,200 --> 00:16:51,140 [Student spreken, onhoorbaar] 269 00:16:51,140 --> 00:16:53,480 Dat is perfect. Dus ze zegt dat het niet uitmaakt, 270 00:16:53,480 --> 00:16:55,930 alleen omdat de inefficiëntie die we eerder hadden 271 00:16:55,930 --> 00:16:59,550 was dat, omdat, misschien als enige voorwaarde werd voldaan, 272 00:16:59,550 --> 00:17:03,570 zodat u een actie hebt uitgevoerd, maar dan ging je alle andere voorwaarden te controleren. 273 00:17:03,570 --> 00:17:06,319 Maar in dit geval is het terug meteen, dus het maakt niet uit. 274 00:17:06,319 --> 00:17:09,220 Dus je hoeft niet anders te gebruiken als. 275 00:17:09,220 --> 00:17:11,740 >> En tot slot, laten we praten over pogingen, 276 00:17:11,740 --> 00:17:13,800 dat is ieders favoriet. 277 00:17:13,800 --> 00:17:15,980 Een try is een boom van arrays. 278 00:17:15,980 --> 00:17:20,369 Het is zeer snel op te zoeken waarden, maar het maakt gebruik van een veel geheugen. 279 00:17:20,369 --> 00:17:22,530 En het is meestal om woorden te filteren, dus als je 280 00:17:22,530 --> 00:17:27,920 wilt implementeren, bijvoorbeeld, weet ik niet, als een telefoonboek in uw telefoon 281 00:17:27,920 --> 00:17:30,440 en u wilt kunnen typen B 282 00:17:30,440 --> 00:17:32,510 en gewoon namen van mensen die hebben B. 283 00:17:32,510 --> 00:17:37,960 Het is zeer eenvoudig te implementeren dat het gebruik van een proberen, bijvoorbeeld. 284 00:17:37,960 --> 00:17:39,820 Hoe maak je een knoop definiëren in een keer te proberen? 285 00:17:39,820 --> 00:17:43,910 Je hoeft alleen een bool dat gaat worden is_word hebben. 286 00:17:43,910 --> 00:17:48,660 Dat betekent dat het gebruik van alle personages voor dat knooppunt, 287 00:17:48,660 --> 00:17:51,920 je was in staat om een ​​woord te vormen, 288 00:17:51,920 --> 00:17:57,230 en dan zul je een array van pointers naar knooppunten. 289 00:17:57,230 --> 00:18:03,120 Kun je zien dat we een array van ouder knooppunten, dus knoop * array? Yeah? 290 00:18:03,120 --> 00:18:06,050 Dus laten we zien hoe dat zal werken. Voor de spellingcontrole, 291 00:18:06,050 --> 00:18:08,230 We hebben een reeks elementen 27, 292 00:18:08,230 --> 00:18:12,150 want we hebben alle letters plus de apostrof. 293 00:18:12,150 --> 00:18:17,800 Voordat hier Ik ben gewoon gaan gebruiken 2 want ik wil in staat zijn om te schrijven op het bord. 294 00:18:17,800 --> 00:18:20,230 Oke. Dus dit is een voorbeeld van een try. 295 00:18:20,230 --> 00:18:25,600 Als ik alleen het eerste knooppunt definiëren, zal ik een serie van 2 elementen 296 00:18:25,600 --> 00:18:29,290 dat zijn 2 verwijzingen naar NULL, dus ik zet 'a' en 'b'. 297 00:18:29,290 --> 00:18:32,430 En ik ga een bool dat is_word zegt te hebben. 298 00:18:32,430 --> 00:18:34,420 Het gaat vals voor de eerste te zijn, 299 00:18:34,420 --> 00:18:37,370 alleen maar omdat, voordat dat je geen karakters. 300 00:18:37,370 --> 00:18:40,900 Dus een leeg woord is niet een woord. Dus het is vals. 301 00:18:40,900 --> 00:18:46,320 Als ik wil 'een' toe te voegen aan dit woordenboek, wat zou ik moeten doen? 302 00:18:46,320 --> 00:18:49,760 Ik zou gewoon een nieuw knooppunt voor 'a' malloc, 303 00:18:49,760 --> 00:18:54,630 en voeg dan het woord om waar. 304 00:18:54,630 --> 00:19:00,180 Zodat het net vertegenwoordigt dat het hebben van 'een' gaat om waar te zijn. Zinvol? 305 00:19:00,180 --> 00:19:04,120 Dan als ik wil 'ba' toe te voegen, zal ik moeten malloc 1 voor 'b', 306 00:19:04,120 --> 00:19:07,550 en dan ga ik het opzetten van de boolean op false, 307 00:19:07,550 --> 00:19:10,160 want 'b' op zichzelf is niet een woord. 308 00:19:10,160 --> 00:19:13,010 Dan ga ik naar een ander voor 'a', dus 'ba' malloc, 309 00:19:13,010 --> 00:19:16,290 en dan ga ik voor het opzetten van het is een woord op true. 310 00:19:16,290 --> 00:19:18,950 Omdat 'ba' is een woord. 311 00:19:18,950 --> 00:19:21,910 En dan als ik wil zien of 'b' is in dit woordenboek, 312 00:19:21,910 --> 00:19:26,730 Ik kan gewoon naar de eerste, 'b'. Ik ga naar beneden, en ik kijk naar is woord, en het valse zegt. 313 00:19:26,730 --> 00:19:30,110 Dus het is niet een woord. Als ik wil 'ba' check, 314 00:19:30,110 --> 00:19:38,010 Ik ga naar de eerste, 'b', en ga dan naar 'een', en ik zie waar, dus het is een woord. Zinvol? 315 00:19:38,010 --> 00:19:41,950 Veel mensen raken in de war door pogingen. Nee? 316 00:19:41,950 --> 00:19:44,740 >> Tenslotte Huffman codering. Huffman codering is zeer nuttig 317 00:19:44,740 --> 00:19:47,550 om geheugen te besparen en comprimeren van tekstbestanden, 318 00:19:47,550 --> 00:19:52,270 alleen maar omdat een heleboel keer je 'a' en 'e' te gebruiken, bijvoorbeeld, 319 00:19:52,270 --> 00:19:57,710 in uw documenten, maar ik weet niet of jullie gebruiken 'q' of 'z' zo veel. 320 00:19:57,710 --> 00:20:02,040 Na slechts 1 byte voor elk karakter, 321 00:20:02,040 --> 00:20:08,520 elk - de 256 tekens die we hebben in de ASCII-tabel is niet erg optimaal, 322 00:20:08,520 --> 00:20:11,410 alleen maar omdat er een aantal tekens dat je veel meer gebruiken, 323 00:20:11,410 --> 00:20:15,180 dus moet je waarschijnlijk minder geheugen gebruiken voor die. 324 00:20:15,180 --> 00:20:17,560 Hoe gebruik ik Huffman codering? 325 00:20:17,560 --> 00:20:20,010 We moeten een Huffman boom doen. 326 00:20:20,010 --> 00:20:23,370  Een Huffman boom heeft knooppunten 327 00:20:23,370 --> 00:20:27,760 dat een symbool dat zal zijn als, 'a', 'b', 'c', de brief hebben, 328 00:20:27,760 --> 00:20:32,990 welke letter je hebt, een frequentie die de frequentie dat het woord in de tekst voorkomt, 329 00:20:32,990 --> 00:20:36,280 dat je het maken van de Huffman boom voor, 330 00:20:36,280 --> 00:20:41,800 en een knooppunt dat gaat naar links wijzen van de Huffman boom 331 00:20:41,800 --> 00:20:47,210 en een ander knooppunt dat gaat naar rechts wijzen. Dus net als een boom. 332 00:20:47,210 --> 00:20:49,440 Hoe maak je een Huffman boom te bouwen? 333 00:20:49,440 --> 00:20:54,020 Je gaat naar de 2 knooppunten die de laagste frequenties halen. 334 00:20:54,020 --> 00:20:56,490 Als u een stropdas moet je naar de 2 knopen halen 335 00:20:56,490 --> 00:20:59,870 dat de laagste ASCII-waarden hebben. 336 00:20:59,870 --> 00:21:02,420 Dan zul je een nieuwe boom te maken uit deze 2 knopen 337 00:21:02,420 --> 00:21:08,030 dat gaat de gecombineerde frequentie in het bovenliggende node hebben. 338 00:21:08,030 --> 00:21:13,240 En dan ga je naar de 2 kinderen uit het bos te verwijderen 339 00:21:13,240 --> 00:21:15,570 en ze te vervangen door de ouder. 340 00:21:15,570 --> 00:21:18,930 En je gaat herhalen totdat u slechts 1 boom in het bos. 341 00:21:18,930 --> 00:21:23,840 Dus laten we zien hoe je een Huffman boom zou doen voor ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 U kunt hier zien dat alle letters hebben frequentie 1, behalve voor 'A', die frequentie 2 heeft. 343 00:21:29,220 --> 00:21:34,090 Dus heb ik knooppunten voor alle brieven die ik op basis van hun ASCII-waarde en frequentie. 344 00:21:34,090 --> 00:21:40,090 Dus als ik wil de eerste boom te maken, zal het met 'L' en 'M'. 345 00:21:40,090 --> 00:21:43,100 Dus het is hier. De frequentie van het paar zal 2 346 00:21:43,100 --> 00:21:49,470 want het is 1 + 1, dan is de volgende 2 met de laagste frequenties zijn 'Y' en 'Z'. 347 00:21:49,470 --> 00:21:53,180 En dan heb ik ze allemaal zijn - hebben een frequentie van 2. 348 00:21:53,180 --> 00:22:00,470 Ja welke degenen die de laagste ASCII-waarde voor de volgende kunnen hebben? 349 00:22:00,470 --> 00:22:04,830 'A' en 'L'. Dus ik maak het nieuwe knooppunt, 350 00:22:04,830 --> 00:22:09,930 en tot slot, het is 4 en 2, dus 2 gaat worden aan de linkerkant. 351 00:22:09,930 --> 00:22:12,430 En dit is de Huffman boom. 352 00:22:12,430 --> 00:22:16,060 Dan als ik wat tekst wilt schrijven, 353 00:22:16,060 --> 00:22:24,440 zoals in binair om te zetten naar tekst met de Huffman boom is zeer eenvoudig. 354 00:22:24,440 --> 00:22:30,220 Bijvoorbeeld, als ik zeg dat u naar links is een 0 en verhuizen naar de rechterkant is een 1, 355 00:22:30,220 --> 00:22:32,410 Wat gaat dat voor? 356 00:22:32,410 --> 00:22:35,530 Dus als 1, 1, dus rechts, rechts, 357 00:22:35,530 --> 00:22:40,370 en dan 0, dus links zou L zijn, en dan 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Dus 1, 0, dus gewoon 1, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 En dan 0, 1, dus 'Z'. 360 00:22:47,540 --> 00:22:52,170 En dan 1, 0, 0 - geen. 361 00:22:52,170 --> 00:22:56,780 0, 0 zal zijn 'Y', zo lui. 362 00:22:56,780 --> 00:23:06,060 Dus dat is allemaal voor mij, Rob's gaan over te nemen. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Dus, week 7 spul. 364 00:23:08,400 --> 00:23:11,390 We hebben veel werd erg snel over te gaan. 365 00:23:11,390 --> 00:23:13,430 Logische operatoren op, buffer overflow, 366 00:23:13,430 --> 00:23:16,760 CS50 bibliotheek, dan HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Alle in zoals 15 tot 20 minuten. 368 00:23:20,990 --> 00:23:24,330 Logische operatoren op. Er zijn 6 van hen die je moet weten. 369 00:23:24,330 --> 00:23:31,200 Bitwise en bitwise of, XOR, left shift, rechter shift, en niet. 370 00:23:31,200 --> 00:23:35,420 Rechts verschuiven en niet je nauwelijks zag in collegezaal helemaal. 371 00:23:35,420 --> 00:23:40,480 Gaan we over het snel hier, maar het is goed om te weten dat dit de 6 die er bestaan. 372 00:23:40,480 --> 00:23:45,070 Vergeet niet dat bitwise operators zijn net als je 3 + 4. 373 00:23:45,070 --> 00:23:49,420 U bent niet te maken met de binaire van 3 en 4. 374 00:23:49,420 --> 00:23:56,550 Met logische operatoren op u eigenlijk te maken met de individuele bits van de nummers 3 en 4. 375 00:23:56,550 --> 00:23:59,120 >> Dus het eerste dat we zullen zeggen is bitwise niet, 376 00:23:59,120 --> 00:24:02,340 en alles wat het doet is flip alle bits. 377 00:24:02,340 --> 00:24:05,500 Dus hier, als je het schrijven dit in C, zou je niet schrijven 378 00:24:05,500 --> 00:24:09,380 als ~ 11011 of wat dan ook, zou je schrijft het leuk ~ 4, 379 00:24:09,380 --> 00:24:12,970 en dan zou het de binaire representatie van 4 flip. 380 00:24:12,970 --> 00:24:24,800 Dus hier, ~ van een aantal binaire getal 1101101 gaat precies flip alle 1 tot 0 en alle 0 tot 1's. 381 00:24:24,800 --> 00:24:27,600 Zoals ik daar zeg, het veelvuldig gebruik van deze, 382 00:24:27,600 --> 00:24:30,830 en we zullen het zien in een beetje, is als we willen komen met een aantal nummer 383 00:24:30,830 --> 00:24:35,460 waarbij alle bits 1, behalve een van hen. 384 00:24:35,460 --> 00:24:38,560 Dus het is meestal makkelijker om het aantal te drukken 385 00:24:38,560 --> 00:24:40,630 waar net dat ene bit is ingesteld, 386 00:24:40,630 --> 00:24:44,650 en neem dan de ~ van het, dus elke andere bit is ingesteld, behalve voor die ene. 387 00:24:44,650 --> 00:24:50,300 Dus dat is wat we gaan meer gebruiken in een beetje. 388 00:24:50,300 --> 00:24:58,220 >> Bitsgewijze of. Hier zijn 2 binaire getallen, en deze 2 nummers 389 00:24:58,220 --> 00:25:00,780 zijn vrij representatief, aangezien ze alle mogelijke vormen 390 00:25:00,780 --> 00:25:07,290 combinatie van bits die je nodig zou kunnen hebben om te werken op. 391 00:25:07,290 --> 00:25:13,540 Hier, toen ik or'd elke bit, we gaan gewoon recht naar beneden te vergelijken. 392 00:25:13,540 --> 00:25:15,410 Dus aan de linkerkant hebben we een 1 en een 1. 393 00:25:15,410 --> 00:25:20,510 Toen ik bitsgewijs | die, wat ga ik krijgen? One. 394 00:25:20,510 --> 00:25:25,320 Dan bitsgewijs | 0 en 1 gaat me geven? One. 395 00:25:25,320 --> 00:25:27,840 Bitwise 1 en 0 gaat hetzelfde, een zijn. 396 00:25:27,840 --> 00:25:31,880 Bitsgewijze 0 | 0 gaat me geven 0. 397 00:25:31,880 --> 00:25:37,300 Dus het enige geval waarin ik 0 is in de 0 | 0 geval. 398 00:25:37,300 --> 00:25:40,020 En je kunt bedenken dat net als je logisch ors. 399 00:25:40,020 --> 00:25:44,830 Dus als je denkt van 1 als waar en 0 als valse, hetzelfde geldt hier. 400 00:25:44,830 --> 00:25:50,040 Zo waar of waar is waar, waar of onwaar is waar. 401 00:25:50,040 --> 00:25:57,150 Vals of waar is waar, vals of onwaar is het enige dat is eigenlijk vals. 402 00:25:57,150 --> 00:26:00,100 Hier is het voorbeeld dat je moet weten 403 00:26:00,100 --> 00:26:05,160 als een vrij goed voorbeeld van wanneer bitsgewijs operatoren worden gebruikt. 404 00:26:05,160 --> 00:26:08,660 Hier zouden wij of hoofdletter 'A' met OX20, 405 00:26:08,660 --> 00:26:11,830 en we zullen kijken naar deze in een tweede, we iets krijgen. 406 00:26:11,830 --> 00:26:16,020 En als we of kleine letters 'a' met OX20, iets krijgen we. 407 00:26:16,020 --> 00:26:26,750 Dus laten we trekken ASCII-tabel. 408 00:26:26,750 --> 00:26:34,000 Oke. Hier zien we dat 'A' is - 409 00:26:34,000 --> 00:26:36,920 hier hebben we 'A' is decimaal 65. 410 00:26:36,920 --> 00:26:45,120 Maar ik ga met hexadecimale, dat is Ox41. 411 00:26:45,120 --> 00:26:48,280 Vrij zeker dat we zagen in de klas. Ik denk dat wij het zagen in de klas 412 00:26:48,280 --> 00:26:52,730 dat het is erg makkelijk om te zetten van hexadecimaal naar binair. 413 00:26:52,730 --> 00:26:55,280 Dus hier, als ik wil 4 zetten in binaire, 414 00:26:55,280 --> 00:26:59,550 dat gaat gewoon te zijn 0100. 415 00:26:59,550 --> 00:27:03,620 Dit is 1 van de plaats, 2 de plaats, 4 de plaats, dus dit is 4. 416 00:27:03,620 --> 00:27:08,550 Dan kan ik splitsen 1 in binaire, die zal worden 0001. 417 00:27:08,550 --> 00:27:14,280 En dus dit gaat om de vertegenwoordiging van de 'A' in binaire zijn. 418 00:27:14,280 --> 00:27:22,720 Het nemen van kleine letters 'a', het is nu van plan om Ox61 zijn, 419 00:27:22,720 --> 00:27:27,050 waar, splitsen deze op in haar binaire, dus een 6 - 420 00:27:27,050 --> 00:27:37,830 Laten we het eigenlijk doen - is er geen gum? Gum. 421 00:27:37,830 --> 00:27:48,220 Ox61. Dus splitsen 6 in binaire gaat worden 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 En splitsen 1 gaat worden 0001. 423 00:27:54,610 --> 00:27:56,520 Kijkend naar het verschil tussen deze 2, 424 00:27:56,520 --> 00:28:04,250 zien we dat het enige verschil tussen een kleine en een hoofdletter 'A' is deze enkele bit. 425 00:28:04,250 --> 00:28:11,810 Dus terug te komen naar hier - oke. 426 00:28:11,810 --> 00:28:15,920 Komen hier terug om, als we kijken naar wat de bit OX20 is, 427 00:28:15,920 --> 00:28:22,210 dus het splitsen van OX20 in zijn binaire, 428 00:28:22,210 --> 00:28:27,310 is 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 OX20, het enige stukje dat is ingesteld is dit beetje dat we zijn bezig met, 430 00:28:33,470 --> 00:28:38,210 met het schakelen tussen hoofdletters en kleine 'a'. 431 00:28:38,210 --> 00:28:47,610 Als I of A, dat deze, A, 432 00:28:47,610 --> 00:28:50,580 als ik of 'A' met OX20, 433 00:28:50,580 --> 00:28:53,490 wat ga ik krijgen? 434 00:28:53,490 --> 00:28:58,960 [Student, onhoorbaar] >> Kleine letters 'a', omdat het gaat om dit stukje spiegelen aan een 1. 435 00:28:58,960 --> 00:29:04,170 En als ik of 'een' met OX20, wat ga ik krijgen? 436 00:29:04,170 --> 00:29:08,780 Kleine letters a, want net oring 'een' met OX20, 437 00:29:08,780 --> 00:29:14,580 Ik ga gewoon worden oring deze enkele bit van een 1, het is al een 1, dus het maakt niet uit. 438 00:29:14,580 --> 00:29:17,960 Dus krijgen we 'a' en 'a'. 439 00:29:17,960 --> 00:29:24,820 >> Bitwise en. Ook hier kunnen we denken aan dit als onze logische en tegenhanger. 440 00:29:24,820 --> 00:29:28,180 Aan de linkerkant hebben we true & waar. 441 00:29:28,180 --> 00:29:31,160 Het gaat om waar te zijn, en voor al de gevallen, 442 00:29:31,160 --> 00:29:36,270 valse en echte of ware en valse, of valse en valse, 443 00:29:36,270 --> 00:29:38,550 geen van deze dingen waar zijn. 444 00:29:38,550 --> 00:29:44,170 Dus wat we uiteindelijk krijgt is 1000. 445 00:29:44,170 --> 00:29:48,830 Dus nu, hier, hier is waar ik de trouwe bitgewijze hebt gebruikt niet, 446 00:29:48,830 --> 00:29:52,230 waar we OX20. 447 00:29:52,230 --> 00:29:54,350 Dus dit is OX20. 448 00:29:54,350 --> 00:29:59,570 Nu, wat ik wil doen, bitwise ~ van OX20. 449 00:29:59,570 --> 00:30:03,600 Dat wordt alle bits omdraaien. 450 00:30:03,600 --> 00:30:09,330 Dus ik heb 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 En dus 'A' ge-AND met ~ OX20 gaat me wat? 452 00:30:18,940 --> 00:30:22,430 Het enige beetje we echt nodig hebben om te denken is dit een, 453 00:30:22,430 --> 00:30:26,020 want als al deze bits zijn ingesteld op 1, 454 00:30:26,020 --> 00:30:29,000 dan gaan we precies wat 'A' was, 455 00:30:29,000 --> 00:30:31,260 behalve eventueel wat dit bit. 456 00:30:31,260 --> 00:30:34,460 Want als het een 1, nu het gaat worden ingesteld op een 0, 457 00:30:34,460 --> 00:30:39,810 want wat is dit, ge-AND met dit gaat worden 0. 458 00:30:39,810 --> 00:30:43,280 Dus wat is 'A' & ~ OX20 me gaat geven? 459 00:30:43,280 --> 00:30:48,200 [Leerlingen beantwoorden, onhoorbaar] >> En wat is 'a' en - het is 'A'. 460 00:30:48,200 --> 00:30:52,170 En wat is 'een' & ~ OX20 me gaat geven? 461 00:30:52,170 --> 00:30:56,720 'A.' Want dit is momenteel een 1. 462 00:30:56,720 --> 00:30:59,570 Anding met deze 0 gaat om het een 0, 463 00:30:59,570 --> 00:31:02,530 en nu gaan we een 'A' te krijgen. 464 00:31:02,530 --> 00:31:06,600 >> Beide zijn 'A', en last but not least van dit type, 465 00:31:06,600 --> 00:31:10,830 we XOR. Het is heel erg als of, 466 00:31:10,830 --> 00:31:14,400 behalve dat het uitsluitend betekent of. 467 00:31:14,400 --> 00:31:18,420 Dit is hetzelfde als wat je meestal denken als of in de echte wereld. 468 00:31:18,420 --> 00:31:23,190 Zodat je ofwel 'x' of 'y', maar niet beide. 469 00:31:23,190 --> 00:31:28,700 Hier 1 ^ 1 gaat worden 0. 470 00:31:28,700 --> 00:31:33,650 Omdat de ware, dit is - het maakt niet zo goed werkt met de logische ware en valse 471 00:31:33,650 --> 00:31:37,150 als bitwise & en of doen, 472 00:31:37,150 --> 00:31:40,100 maar waar ^ waar is onwaar. 473 00:31:40,100 --> 00:31:44,810 Omdat we willen alleen echte terugkeren als slechts een van hen is waar. 474 00:31:44,810 --> 00:31:50,950 So 1 ^ 1 is 0. Hoe zit het met 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 Is 1. 1 ^ 0 = 1, 0 ^ 0 is 0. 476 00:31:56,010 --> 00:32:03,890 Dus onder alle omstandigheden, 0 bitwise iets 0 gaat worden 0. 477 00:32:03,890 --> 00:32:10,270 1 bitwise iets 0 of 0 bitwise 1, 478 00:32:10,270 --> 00:32:14,660 als het | of ^, zal het een 1 zijn, en als het is en het zal zijn 0. 479 00:32:14,660 --> 00:32:20,850 En het enige geval waarin 1 bitwise 1 is niet 1 is met exclusieve of. 480 00:32:20,850 --> 00:32:24,580 Dat is 0110. 481 00:32:24,580 --> 00:32:36,520 Dus hier nu, met behulp van XOR - dus we zijn terug op 20. 482 00:32:36,520 --> 00:32:43,480 'A' ^ OX20 is deze 2 bits we vergelijken. 483 00:32:43,480 --> 00:32:50,020 Dus een 1 ^ 0 gaat me een wat? Een een. 484 00:32:50,020 --> 00:32:58,430 'A' ^ OX20 gaat me geven? Kleine letters een. 485 00:32:58,430 --> 00:33:04,010 'A' ^ OX20 gaat me geven? Kapitaal A. 486 00:33:04,010 --> 00:33:09,310 Want wat deze doet, dit XORing met OX20 487 00:33:09,310 --> 00:33:15,380 effectief flippen wat dit bit. 488 00:33:15,380 --> 00:33:21,240 Als dit een 0, is het nu gaat een 1 te worden. 489 00:33:21,240 --> 00:33:26,160 Aangezien dit een 1, 1 ^ 1 is 0. 490 00:33:26,160 --> 00:33:33,280 Dus onze 'a' is geworden 'A' en onze 'A' is 'a'. 491 00:33:33,280 --> 00:33:36,910 Dus XOR is echt een handige manier van alleen het wegknippen van de zaak. 492 00:33:36,910 --> 00:33:39,960 Je wil gewoon itereren over een reeks letters 493 00:33:39,960 --> 00:33:44,330 en wisselen het geval van elk karakter, 494 00:33:44,330 --> 00:33:50,680 je gewoon XOR alles met OX20. 495 00:33:50,680 --> 00:33:55,220 >> Nu we shift hebben verlaten. Verschuiving naar links is gewoon om, in principe, 496 00:33:55,220 --> 00:34:01,250 Duw alle nummers in, of naar links en steek 0's achter hen. 497 00:34:01,250 --> 00:34:05,550 Hier hebben we dus 00.001.101. 498 00:34:05,550 --> 00:34:08,560 We gaan 3 0 in te duwen vanaf de rechterkant, 499 00:34:08,560 --> 00:34:13,580 en we krijgen 01101000. 500 00:34:13,580 --> 00:34:16,380 In nonbinary termen, 501 00:34:16,380 --> 00:34:24,699 zien we dat dat werkelijk voor zich 13 links verschoven met 3, die ons 104 geeft. 502 00:34:24,699 --> 00:34:32,530 Dus links verschuiven, zien we hier, x << y is eigenlijk x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 8 is, dus 13 * 8 104. 504 00:34:40,139 --> 00:34:45,679 Als je gewoon denkt over binaire in het algemeen, hoe elk cijfer, 505 00:34:45,679 --> 00:34:49,530 Als we uitgaan van het recht, het is de 1 plaats, dan is de 2 de plaats, dan is de 4 de plaats. 506 00:34:49,530 --> 00:34:51,330 Dus door te duwen in 0's van rechts, 507 00:34:51,330 --> 00:34:55,080 we zijn gewoon duwen dingen die waren in de 4 de plaats van de 8 de plaats, 508 00:34:55,080 --> 00:34:57,920 en dingen die waren in de 8 de plaats op de 16 de plaats. 509 00:34:57,920 --> 00:35:01,280 Elke shift gewoon vermenigvuldigt met 2. Yeah? 510 00:35:01,280 --> 00:35:05,210 [Student] Wat gebeurt er als je verschoven door 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Als je verschoven met 5 zou je gewoon verliezen cijfers. 512 00:35:10,790 --> 00:35:15,410 Onvermijdelijk, het is hetzelfde. Zoals, gehele getallen zijn slechts 32 bits, 513 00:35:15,410 --> 00:35:20,750 dus als je 2 echt grote getallen toe te voegen, het is gewoon niet past in een geheel getal. 514 00:35:20,750 --> 00:35:23,660 Dus het is hier hetzelfde. Als u verschoven 5, 515 00:35:23,660 --> 00:35:25,650 we zouden alleen verliezen die ene. 516 00:35:25,650 --> 00:35:28,820 En dat is een beetje wat ik bedoel met "ongeveer" 517 00:35:28,820 --> 00:35:37,470 waar als je te ver verschuiven, verlies je bits. 518 00:35:37,470 --> 00:35:39,830 >> Rechts verschuiving gaat het tegenovergestelde, 519 00:35:39,830 --> 00:35:43,090 waar gaan we naar 0's opduwen het einde, 520 00:35:43,090 --> 00:35:48,400 en voor onze doeleinden, vul 0 vanaf links. 521 00:35:48,400 --> 00:35:52,910 Dus dit te doen, we eigenlijk omkeren wat we al hadden gedaan. 522 00:35:52,910 --> 00:35:57,780 En we zien dat de drie 0's aan de rechterkant net afgevallen, 523 00:35:57,780 --> 00:36:02,020 en we hebben de 1101 helemaal naar rechts geduwd. 524 00:36:02,020 --> 00:36:08,380 Dit doet 104 >> 3, en dat is effectief, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Dus nu, hier, het is een soortgelijk idee. 526 00:36:11,200 --> 00:36:18,720 Waarom is het slechts ongeveer x / 2 ^ y, en niet daadwerkelijk x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Want als ik had verschoven door 4, zou ik verloren heb een 1. 528 00:36:22,240 --> 00:36:25,950 Kortom, wat je denkt van, denk maar aan integer deling in het algemeen. 529 00:36:25,950 --> 00:36:31,070 Dus, zoals 5/2 2. Het is niet 2.5. 530 00:36:31,070 --> 00:36:35,000 Het is hetzelfde idee hier. Als we delen door 2, 531 00:36:35,000 --> 00:36:39,910 kunnen we vreemde stukjes verliezen langs de weg. 532 00:36:39,910 --> 00:36:43,870 Dus nu - dat is het voor bitwise. Dat is alles wat je moet weten. 533 00:36:43,870 --> 00:36:46,340 De use cases die we zagen in de klas herinneren, 534 00:36:46,340 --> 00:36:49,340 als een beetje masker is handig voor bitwise operators, 535 00:36:49,340 --> 00:36:53,220 of je ze kunt gebruiken voor bit maskers. 536 00:36:53,220 --> 00:36:58,620 Hoofdletters en kleine letters, conversies is een vrij prototypisch voorbeeld. 537 00:36:58,620 --> 00:37:01,640 >> Oke, dus buffer overflow aanvallen. 538 00:37:01,640 --> 00:37:05,110 Iedereen weet wat er mis met deze functie was? 539 00:37:05,110 --> 00:37:10,140 Merken we verklaarde een array van 12 bytes, 12 tekens, 540 00:37:10,140 --> 00:37:18,510 en dan kopiëren we in onze buffer van 12 tekens de hele reeks bar. 541 00:37:18,510 --> 00:37:25,080 Dus wat is het probleem hier? 542 00:37:25,080 --> 00:37:32,270 Het magische getal 12 moet vrijwel onmiddellijk pop uit als - waarom 12? 543 00:37:32,270 --> 00:37:35,050 Wat als bar gebeurt te zijn meer dan 12 tekens? 544 00:37:35,050 --> 00:37:41,200 Wat als bar is miljoenen tekens? 545 00:37:41,200 --> 00:37:46,010 Hier is de kwestie memcpy. Als bar is lang genoeg, 546 00:37:46,010 --> 00:37:50,330 het zal gewoon helemaal - 'c', 'c' niet schelen dat het was slechts 12 tekens; 547 00:37:50,330 --> 00:37:53,280 "C" geeft niet dat het niet past dat veel bytes. 548 00:37:53,280 --> 00:37:58,250 Het zal gewoon helemaal overschrijven char, de 12 bytes die we voor hem hebt toegewezen, 549 00:37:58,250 --> 00:38:01,830 en alles verleden in het geheugen dat niet daadwerkelijk tot die buffer 550 00:38:01,830 --> 00:38:06,520 met wat de string bar is. 551 00:38:06,520 --> 00:38:09,780 Dus dit was het beeld zagen we in de klas 552 00:38:09,780 --> 00:38:12,220 waar we onze stack opgroeien. 553 00:38:12,220 --> 00:38:16,040 U moet worden gebruikt om deze foto's of vertrouwd te raken met hen opnieuw. 554 00:38:16,040 --> 00:38:21,260 We hebben onze stack opgroeien, geheugenadressen bij 0 beginnen aan de top 555 00:38:21,260 --> 00:38:26,270 en groeien naar zijn 4 miljard onderaan. 556 00:38:26,270 --> 00:38:28,820 We hebben ons aanbod 'c' ergens in het geheugen, 557 00:38:28,820 --> 00:38:32,260 dan hebben we onze pointer naar bar rechts eronder, 558 00:38:32,260 --> 00:38:38,720 en dan hebben we het gered framepointer in ons retouradres en stapel onze moedermaatschappij routine. 559 00:38:38,720 --> 00:38:40,800 Herinneren wat het retouradres is? 560 00:38:40,800 --> 00:38:45,360 Het is als belangrijkste noemt een functie foo, roept een functie bar, 561 00:38:45,360 --> 00:38:48,100 onvermijdelijk, bar rendement. 562 00:38:48,100 --> 00:38:52,610 Dus als bar terugkeert, moeten ze weten dat het gaat terug naar foo dat het genoemd. 563 00:38:52,610 --> 00:39:01,360 Dus het retouradres is het adres van de functie die het heeft om terug te keren wanneer de functie terugkeert. 564 00:39:01,360 --> 00:39:05,830 De reden dat is belangrijk voor buffer overflow-aanvallen is omdat, gunstig, 565 00:39:05,830 --> 00:39:09,580 hackers willen dat retouradres veranderen. 566 00:39:09,580 --> 00:39:14,950 In plaats van terug naar foo gaan, ga ik terug naar waar de hacker wil dat ik om terug te gaan te gaan. 567 00:39:14,950 --> 00:39:17,760 En, heel handig, waar de hacker vaak wil terug naar 568 00:39:17,760 --> 00:39:22,400 is het begin van de buffer die we oorspronkelijk hadden. 569 00:39:22,400 --> 00:39:26,170 Zo merkt, weer, Little Indian. 570 00:39:26,170 --> 00:39:28,490 Het apparaat is een voorbeeld van een Little Indian systeem, 571 00:39:28,490 --> 00:39:34,140 dus een geheel getal of een pointer wordt opgeslagen met de bytes omgekeerd. 572 00:39:34,140 --> 00:39:38,980 Dus hier zien we - is dit? Yeah. 573 00:39:38,980 --> 00:39:45,660 We zien Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Denk aan de hexadecimale cijfers? 575 00:39:48,250 --> 00:39:50,640 Wij niet afdoen aan het hexadecimale cijfers in Little Indian, 576 00:39:50,640 --> 00:39:56,110 omdat 2 hexadecimale cijfers vormen een byte, en we keren de bytes. 577 00:39:56,110 --> 00:40:00,300 Dat is waarom we niet op te slaan, zoals, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Wij slaan, in plaats daarvan, elk paar van 2 cijfers, te beginnen van rechts. 579 00:40:07,520 --> 00:40:10,880 Dat adres betreft het adres van de start 580 00:40:10,880 --> 00:40:15,190 van onze buffer die we eigenlijk wilden kopiëren naar in de eerste plaats. 581 00:40:15,190 --> 00:40:19,230 De reden dat het nuttig is, want wat als de aanvaller 582 00:40:19,230 --> 00:40:24,100 overkomen, in plaats van een string die net was 583 00:40:24,100 --> 00:40:27,060 een onschuldig reeks zoals hun naam of iets, 584 00:40:27,060 --> 00:40:33,900 wat als, in plaats daarvan, die string waren slechts enkele willekeurige code 585 00:40:33,900 --> 00:40:38,610 die deden wat ze wilde doen? 586 00:40:38,610 --> 00:40:45,630 Zodat ze konden - Ik kan niet denken van een koele code. 587 00:40:45,630 --> 00:40:47,780 Het kan van alles zijn, dat wel. Elke rampzalige code. 588 00:40:47,780 --> 00:40:51,440 Als ze wilden, konden ze gewoon iets bij seg fouten doen, maar dat zou zinloos zijn. 589 00:40:51,440 --> 00:40:54,950 Ze doen het meestal om uw systeem te hacken. 590 00:40:54,950 --> 00:40:59,930 >> Oke. CS50 bibliotheek. 591 00:40:59,930 --> 00:41:04,800 Dit is, in principe, getInt, getString, al die functies die we voorzien voor u. 592 00:41:04,800 --> 00:41:10,630 Dus we hebben char * string en dat is de abstractie die we blies weg 593 00:41:10,630 --> 00:41:12,450 op een gegeven moment tijdens het semester. 594 00:41:12,450 --> 00:41:18,220 Vergeet niet dat een string is gewoon een array van karakters. 595 00:41:18,220 --> 00:41:23,240 Dus hier zien we een verkorte versie van getString. 596 00:41:23,240 --> 00:41:25,920 Je moet kijken terug op het te herinneren hoe het eigenlijk is geïmplementeerd. 597 00:41:25,920 --> 00:41:30,950 Belangrijke details zijn, merken we krijgen in een karakter per keer 598 00:41:30,950 --> 00:41:34,570 van standaard, die net als wij het typen op het toetsenbord. 599 00:41:34,570 --> 00:41:37,890 Dus een karakter per keer, en als we te veel tekens, 600 00:41:37,890 --> 00:41:40,580 dus als n + 1 groter is dan de capaciteit, 601 00:41:40,580 --> 00:41:44,140 dan moeten we de capaciteit van onze buffer vergroten. 602 00:41:44,140 --> 00:41:47,780 Dus hier zijn we een verdubbeling van de omvang van onze buffer. 603 00:41:47,780 --> 00:41:51,840 En dat blijft gaan, voegen we het personage in onze buffer 604 00:41:51,840 --> 00:41:56,220 totdat we een nieuwe lijn of het einde van het bestand of wat dan ook te ontvangen, 605 00:41:56,220 --> 00:41:59,380 in welk geval, we zijn klaar met de string en daarna de echte getString 606 00:41:59,380 --> 00:42:05,120 krimpt het geheugen, net als we toegewezen te veel geheugen het zal terug te gaan en krimpt een beetje. 607 00:42:05,120 --> 00:42:08,830 Dus we zien dat niet, maar het belangrijkste idee is 608 00:42:08,830 --> 00:42:11,960 het moet lezen in een karakter per keer. 609 00:42:11,960 --> 00:42:17,140 Het kan niet alleen lezen in een alles in een keer, 610 00:42:17,140 --> 00:42:19,550 omdat de buffer slechts een bepaalde grootte. 611 00:42:19,550 --> 00:42:26,590 Dus als de string die het probeert in te voegen in de buffer te groot is, dan zou overstromen. 612 00:42:26,590 --> 00:42:28,940 Dus hier voorkomen we dat door alleen het lezen in een enkel karakter 613 00:42:28,940 --> 00:42:33,750 tegelijkertijd en groeiende wanneer we moeten. 614 00:42:33,750 --> 00:42:40,270 Dus getInt en de andere CS50 bibliotheek functies de neiging om getString gebruiken 615 00:42:40,270 --> 00:42:42,310 in hun implementaties. 616 00:42:42,310 --> 00:42:45,370 Dus heb ik gewezen op de belangrijke dingen hier. 617 00:42:45,370 --> 00:42:49,460 Het roept getString om een ​​string te krijgen. 618 00:42:49,460 --> 00:42:51,710 Als getString niet geheugen terug te keren, 619 00:42:51,710 --> 00:42:54,270 vergeet niet dat getString mallocs iets, dus wanneer u getString bellen 620 00:42:54,270 --> 00:42:57,820 moet je niet (onverstaanbaar) bevrijden die string die je hebt. 621 00:42:57,820 --> 00:43:02,870 Dus hier, als het niet iets malloc, keren we terug INT_MAX als gewoon een vlag die, 622 00:43:02,870 --> 00:43:05,650 hey, waren we niet echt in staat om een ​​geheel getal te krijgen. 623 00:43:05,650 --> 00:43:10,830 Je moet negeren wat ik bij u terug, of 624 00:43:10,830 --> 00:43:15,540 je moet dit niet behandelen als een geldige invoer. 625 00:43:15,540 --> 00:43:21,360 Tot slot, in de veronderstelling dat lukte, we gebruiken sscanf met die speciale vlag, 626 00:43:21,360 --> 00:43:23,820 waardoor enerzijds overeenkomen een integer, 627 00:43:23,820 --> 00:43:26,770 vervolgens passende tekens na die integer. 628 00:43:26,770 --> 00:43:29,070 Zo merken we willen dat het gelijk 1. 629 00:43:29,070 --> 00:43:32,940 Dus sscanf rendementen hoeveel wedstrijden als succes gemaakt? 630 00:43:32,940 --> 00:43:37,010 Het zal 1 als het met succes voldoen een integer terug, 631 00:43:37,010 --> 00:43:40,890 het zal terugkeren 0 als het niet overeenkomt met een integer, en het zal 2 terug 632 00:43:40,890 --> 00:43:45,920 als het paste een geheel getal gevolgd door een wat karakter. 633 00:43:45,920 --> 00:43:49,780 Zo merken we opnieuw proberen als we iets maar 1 wedstrijd. 634 00:43:49,780 --> 00:43:55,230 Als we binnenkwamen 1, 2, 3, C, of ​​1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 vervolgens 1, 2, 3 zou opgeslagen in de integer, 636 00:43:57,400 --> 00:43:59,620 X zou krijgen opgeslagen in het karakter, 637 00:43:59,620 --> 00:44:06,410 sscanf zou 2 terugkeren, en we zouden het opnieuw te proberen, omdat we alleen een integer willen. 638 00:44:06,410 --> 00:44:09,810 >> Snel waait door HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 HyperText Markup Language is de structuur en semantiek van het web. 640 00:44:15,340 --> 00:44:19,960 Hier is het voorbeeld van lezing waar we HTML-tags. 641 00:44:19,960 --> 00:44:22,110 We hebben hoofd-tags, body-tags, 642 00:44:22,110 --> 00:44:27,770 we hebben voorbeelden van lege tags waar we eigenlijk niet een start-en nauwe tag hebben, 643 00:44:27,770 --> 00:44:30,820 we moeten gewoon koppeling en imago. 644 00:44:30,820 --> 00:44:38,480 Er is geen sluiting image tag, er is slechts een label dat alles de tag moet doen volbrengt. 645 00:44:38,480 --> 00:44:41,950 De link is een voorbeeld, we zullen zien hoe u een koppeling naar CSS, 646 00:44:41,950 --> 00:44:45,910 het script is een voorbeeld van hoe u een koppeling naar een externe webbrowser. 647 00:44:45,910 --> 00:44:53,100 Het is vrij eenvoudig, en vergeet niet, HTML is geen programmeertaal. 648 00:44:53,100 --> 00:44:58,250 Hier herinneren hoe u een formulier zou bepalen of tenminste wat dit zou doen? 649 00:44:58,250 --> 00:45:01,740 Een dergelijke vorm heeft een actie en een methode. 650 00:45:01,740 --> 00:45:06,210 De methoden die u zult alleen maar ziet zijn GET en POST. 651 00:45:06,210 --> 00:45:09,040 Dus GET is de versie waar de zaak wordt gezet in de URL. 652 00:45:09,040 --> 00:45:11,680 POST is waar het niet is gesteld in de URL. 653 00:45:11,680 --> 00:45:18,520 In plaats daarvan, gegevens uit het formulier is verborgen in de HTTP verzoek ingevoegd. 654 00:45:18,520 --> 00:45:22,390 Dus hier, actie bepaalt waar het HTTP-verzoek gaat. 655 00:45:22,390 --> 00:45:27,490 Waar het heen gaat is google.com / search. 656 00:45:27,490 --> 00:45:32,890 Methode. Denk aan de verschillen tussen GET en POST, 657 00:45:32,890 --> 00:45:37,200 en, gewoon zeggen als voorbeeld, als u een bladwijzer wilt iets. 658 00:45:37,200 --> 00:45:40,660 Je zult nooit in staat zijn om een ​​POST URL bladwijzer 659 00:45:40,660 --> 00:45:44,970 omdat de gegevens niet is opgenomen in de URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, nu, is HyperText Transfer Protocol. 661 00:45:49,790 --> 00:45:54,080 Het HyperText Transfer Protocol, zou je verwachten dat het overdragen 662 00:45:54,080 --> 00:45:57,710 HyperText Markup Language, en het doet. 663 00:45:57,710 --> 00:46:00,170 Maar maakt zij ook alle beelden die je vindt op het web, 664 00:46:00,170 --> 00:46:05,400 welke downloads u beginnen als een HTTP-verzoek. 665 00:46:05,400 --> 00:46:10,350 Dus HTTP is alleen de taal van het World Wide Web. 666 00:46:10,350 --> 00:46:15,610 En hier moet je dit soort van een HTTP-verzoek te herkennen. 667 00:46:15,610 --> 00:46:19,300 Hier HTTP/1.1 aan de kant zegt alleen dat is de versie 668 00:46:19,300 --> 00:46:21,570 van het protocol ik gebruik. 669 00:46:21,570 --> 00:46:25,770 Het is vrijwel altijd gaat om HTTP/1.1 zijn, zoals u zult zien. 670 00:46:25,770 --> 00:46:30,110 Dan zien we dat dit GET, het alternatief dat POST, dat je zou kunnen zien. 671 00:46:30,110 --> 00:46:40,790 En de URL die ik probeerde te bezoeken was www.google.com/search?q = blah, blah, blah. 672 00:46:40,790 --> 00:46:44,240 Dus denk dat dit, het vraagteken q = blah blah blah, 673 00:46:44,240 --> 00:46:49,040 is het soort spul dat wordt ingediend door een formulier. 674 00:46:49,040 --> 00:46:51,830 De respons is het misschien terug naar mij zou er ongeveer zo uitzien. 675 00:46:51,830 --> 00:46:54,050 Weer, te beginnen met het protocol, dat gaat worden dat, 676 00:46:54,050 --> 00:46:59,190 gevolgd door de status code. Hier is het 200 OK. 677 00:46:59,190 --> 00:47:05,060 En tenslotte, de webpagina die ik eigenlijk gevraagd zal worden gevolgd. 678 00:47:05,060 --> 00:47:08,210 De mogelijke statuscode je zou kunnen zien, en je moet een aantal van hen weten. 679 00:47:08,210 --> 00:47:12,770 200 OK heb je waarschijnlijk eerder gezien. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 Not Found, 500 Internal Server Error 681 00:47:17,830 --> 00:47:22,140 is meestal als je naar een website en er iets gebroken of hun PHP code crashes, 682 00:47:22,140 --> 00:47:24,930 terwijl we in het toestel hebben dat grote oranje doos 683 00:47:24,930 --> 00:47:27,830 die komt op en zegt, als er iets mis is, is deze code niet werkt 684 00:47:27,830 --> 00:47:30,380 of is slecht deze functie. 685 00:47:30,380 --> 00:47:33,230 Meestal websites wil niet dat je te weten wat de functies zijn eigenlijk slecht, 686 00:47:33,230 --> 00:47:37,880 dus in plaats daarvan zullen ze geven je gewoon 500 Internal Server Errors. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP = 1 laag onder HTTP. 688 00:47:43,050 --> 00:47:47,550 Vergeet niet dat er internet buiten het World Wide Web. 689 00:47:47,550 --> 00:47:52,270 Net als je een online spel dat niet via HTTP af te spelen, 690 00:47:52,270 --> 00:47:55,740 het gaat via een ander - het is nog steeds met behulp van het internet, 691 00:47:55,740 --> 00:47:58,900 maar het maakt geen gebruik van HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP is slechts een voorbeeld van de ingebouwde protocol op TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP betekent letterlijk Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Elke computer heeft een IP-adres, het zijn die 4-cijferige dingen 695 00:48:11,500 --> 00:48:16,510 zoals 192.168.2.1, of wat, dat vaak een lokaal. 696 00:48:16,510 --> 00:48:23,390 Maar dat is het patroon van een IP-adres. 697 00:48:23,390 --> 00:48:29,060 Dus de DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 dat is wat dingen zoals google.com vertaalt zich tot een werkelijke IP-adres. 699 00:48:33,410 --> 00:48:37,700 Dus als je dat IP-adres typt in een URL, 700 00:48:37,700 --> 00:48:40,850 dat zou je naar Google, maar je de neiging niet om die dingen te onthouden. 701 00:48:40,850 --> 00:48:45,470 Je hebt de neiging om google.com plaats herinneren. 702 00:48:45,470 --> 00:48:51,560 Het laatste wat we hebben is de havens, waar dit het TCP onderdeel van IP. 703 00:48:51,560 --> 00:48:54,880 TCP doet meer. Denk er eens over, als, u hebt uw webbrowser draait. 704 00:48:54,880 --> 00:48:58,670 Misschien heb je een aantal e-mail-toepassing actief is; 705 00:48:58,670 --> 00:49:02,150 misschien heb je een ander programma dat het internet draait gebruikt. 706 00:49:02,150 --> 00:49:05,090 Ze hebben allemaal toegang tot het internet nodig hebben, 707 00:49:05,090 --> 00:49:08,100 maar uw computer slechts 1 WiFi-kaart of wat dan ook. 708 00:49:08,100 --> 00:49:10,780 Dus poorten zijn de manier waarop we in staat zijn op te splitsen 709 00:49:10,780 --> 00:49:13,550 hoe deze toepassingen zijn in staat om het internet te gebruiken. 710 00:49:13,550 --> 00:49:17,230 Elke aanvraag krijgt 1 specifieke poort die kan luisteren, 711 00:49:17,230 --> 00:49:19,670 en standaard HTTP poort 80. 712 00:49:19,670 --> 00:49:22,410 Sommige e-maildiensten gebruiken 25. 713 00:49:22,410 --> 00:49:24,490 De lage-getelden neiging te worden gereserveerd. 714 00:49:24,490 --> 00:49:29,270 Je bent meestal in staat om hoger genummerde tanden te krijgen voor jezelf. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheets. 716 00:49:32,010 --> 00:49:36,030 We stijl webpagina's met CSS, niet met HTML. 717 00:49:36,030 --> 00:49:38,440 Er zijn 3 plaatsen kun je je CSS zetten. 718 00:49:38,440 --> 00:49:46,300 Het kan inline worden, tussen stijl-tags, of in een volledig apart bestand en vervolgens gekoppeld inch 719 00:49:46,300 --> 00:49:48,470 En hier is slechts een voorbeeld van CSS. 720 00:49:48,470 --> 00:49:50,450 U moet dit patroon herkent, 721 00:49:50,450 --> 00:49:54,310 waar het eerste voorbeeld is dat we het afstemmen van de body-tag, 722 00:49:54,310 --> 00:49:56,680 en hier zijn we het centreren van de body-tag. 723 00:49:56,680 --> 00:50:00,420 Het tweede voorbeeld, zijn we het afstemmen van de zaak 724 00:50:00,420 --> 00:50:04,740 met ID-footer, en we zijn het toepassen van een aantal stijlen die. 725 00:50:04,740 --> 00:50:07,310 Merk op dat ID footer tekst uitgelijnd naar links, 726 00:50:07,310 --> 00:50:09,840 terwijl hoofdtekst-uitgelijnd centrum. 727 00:50:09,840 --> 00:50:13,180 Voettekst is in het lichaam. 728 00:50:13,180 --> 00:50:16,470 Het zal, in plaats daarvan, text-align gelaten, hoewel lichaam zegt text-align center. 729 00:50:16,470 --> 00:50:18,880 Dit is geheel trapsgewijze deel ervan. 730 00:50:18,880 --> 00:50:22,110 Je kunt hebben - u kunt stijlen opgeven voor het lichaam, 731 00:50:22,110 --> 00:50:25,320 en dan dingen in het lichaam kun je meer specifieke stijlen te geven, 732 00:50:25,320 --> 00:50:28,160 en de dingen werken zoals je zou verwachten. 733 00:50:28,160 --> 00:50:34,420 Meer specifieke CSS bestekschrijvers voorrang. 734 00:50:34,420 --> 00:50:46,140 Ik denk dat is het. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Hallo iedereen. Als ik kon gewoon je aandacht. 736 00:50:49,260 --> 00:50:53,990 Ik ben Ali en ik ga om te gaan door middel van PHP en SQL echt snel. 737 00:50:53,990 --> 00:51:00,310 Dus we kunnen beginnen. PHP staat voor PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 En zoals jullie allemaal zou moeten weten, het is een server-side scripting taal, 739 00:51:03,730 --> 00:51:06,800 en we gebruiken het voor de back-end van websites, 740 00:51:06,800 --> 00:51:12,540 en hoe het doet veel van de berekeningen, de achter-schermen deel. 741 00:51:12,540 --> 00:51:17,510 Syntax. Het is niet zoals C, wat een verrassing. 742 00:51:17,510 --> 00:51:22,060 Het heeft altijd te beginnen met de, als je kunt zien, de - ik kan niet vooruit te komen. 743 00:51:22,060 --> 00:51:31,340 U kunt zien dat u de nieuwe soorten beugels nodig hebt en dan moet u ook de php?. 744 00:51:31,340 --> 00:51:35,780 Dat is altijd hoe je je PHP tekst, PHP-code te kaderen. 745 00:51:35,780 --> 00:51:39,180 Dus het kan niet gewoon zoals C, waar je soort zet het op eerste. 746 00:51:39,180 --> 00:51:42,290 U moet altijd omringen. 747 00:51:42,290 --> 00:51:47,610 En nu, de belangrijkste syntax is dat alle variabelen moeten beginnen met het $ teken. 748 00:51:47,610 --> 00:51:49,490 Je moet het doen als je ze te definiëren, je moet om het te doen 749 00:51:49,490 --> 00:51:51,860 als je bedoelt om ze later op. 750 00:51:51,860 --> 00:51:56,510 Je moet altijd dat $. Het is je nieuwe beste vriend, vrij veel. 751 00:51:56,510 --> 00:52:01,690 Je hoeft niet - in tegenstelling tot C, je hoeft niet te brengen wat voor soort variabele type het is. 752 00:52:01,690 --> 00:52:04,940 Dus terwijl u hoeft de $, hoeft u niet om te zetten, zoals, 753 00:52:04,940 --> 00:52:09,470 int x of y touw, enzovoort, enzovoort. 754 00:52:09,470 --> 00:52:11,490 Zodat een klein verschil. 755 00:52:11,490 --> 00:52:15,590 Als gevolg hiervan betekent dat PHP is een zwak soort. 756 00:52:15,590 --> 00:52:19,310 PHP is een zwak soort taal, en het zwak heeft getypt variabelen. 757 00:52:19,310 --> 00:52:24,020 Met andere woorden, dat betekent dat je kunt schakelen tussen verschillende soorten variabele types. 758 00:52:24,020 --> 00:52:27,230 U kunt uw nummer 1 op te slaan als een int, 759 00:52:27,230 --> 00:52:29,650 u kunt de gegevens opslaan als een string, en je kunt het opslaan als een float, 760 00:52:29,650 --> 00:52:33,550 en het zal allemaal dat nummer 1. 761 00:52:33,550 --> 00:52:36,080 Ook al ben je het opslaan in verschillende vormen, 762 00:52:36,080 --> 00:52:39,120 het is nog steeds - de variabele types zijn nog steeds vast in het einde. 763 00:52:39,120 --> 00:52:41,540 Dus als je hier kijkt, als je nog uit PSET 7, 764 00:52:41,540 --> 00:52:43,500 velen van u waarschijnlijk had problemen met deze. 765 00:52:43,500 --> 00:52:47,280 Twee gelijke tekens, 3 gelijke tekens, 4 gelijke borden. 766 00:52:47,280 --> 00:52:49,990 Ok, er geen 4 gelijkheidstekens, maar er zijn 2 en 3. 767 00:52:49,990 --> 00:52:53,320 U gebruikt 2 gelijk borden naar de waarden te controleren. 768 00:52:53,320 --> 00:52:55,830 Het kan over typen controleren. 769 00:52:55,830 --> 00:52:58,770 Dus als je bij het eerste voorbeeld kan zien, 770 00:52:58,770 --> 00:53:02,210 Ik heb num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Dus je int en uw snaar zijn beide, technisch, 1, 772 00:53:06,710 --> 00:53:10,790 maar ze zijn verschillende types. Maar voor de dubbel is, zal het nog passeren. 773 00:53:10,790 --> 00:53:15,510 Voor de drievoudige gelijken, controleert waarde en de verschillende types. 774 00:53:15,510 --> 00:53:18,760 Dat betekent dat het niet gaat hier in dat tweede geval door te geven, 775 00:53:18,760 --> 00:53:22,350 waar je met behulp van 3 gelijkheidstekens plaats. 776 00:53:22,350 --> 00:53:26,590 Dus dat is een belangrijk verschil dat je moet alles nu hebben laten zien. 777 00:53:26,590 --> 00:53:31,570 >> String aaneenschakeling is een ander krachtig ding dat je kunt gebruiken in PHP. 778 00:53:31,570 --> 00:53:34,080 Het is eigenlijk gewoon deze handige puntnotatie, 779 00:53:34,080 --> 00:53:36,230 en dat is hoe je snaren samen kunnen binden. 780 00:53:36,230 --> 00:53:40,800 Dus als je kat en je hebt Hond, en u wilt de 2 strings samen te stellen, 781 00:53:40,800 --> 00:53:44,080 kunt u de periode te gebruiken, en dat is een soort van hoe het werkt. 782 00:53:44,080 --> 00:53:46,660 Je kunt ook gewoon leg ze naast elkaar, 783 00:53:46,660 --> 00:53:49,030 zoals je hier kunt zien in de onderste voorbeeld, 784 00:53:49,030 --> 00:53:51,610 waar ik echo snaar 1, ruimte touwtje 2. 785 00:53:51,610 --> 00:53:56,930 PHP zal weten om ze als zodanig te vervangen. 786 00:53:56,930 --> 00:53:59,780 Arrays. Nu, in PHP zijn er 2 verschillende matrices. 787 00:53:59,780 --> 00:54:03,180 U kunt regelmatig arrays, en u kunt ook associatieve arrays, 788 00:54:03,180 --> 00:54:06,040 en we gaan om te gaan door hen nu. 789 00:54:06,040 --> 00:54:08,280 Regelmatige arrays zijn en dit in C, 790 00:54:08,280 --> 00:54:11,240 en dus je hebt indices die zijn genummerd. 791 00:54:11,240 --> 00:54:13,160 Op dit moment zijn we gewoon gaan er een te maken en zet - 792 00:54:13,160 --> 00:54:15,500 dus dit is hoe creëren we een lege array, dan gaan we naar 793 00:54:15,500 --> 00:54:17,310 steken in de index nummer 0. 794 00:54:17,310 --> 00:54:19,200 We gaan om het nummer 6, de waarde 6 zetten. 795 00:54:19,200 --> 00:54:21,500 U kunt het hier zien aan de onderkant. 796 00:54:21,500 --> 00:54:24,240 Where's - op index nummer 1 gaan we waarde nummer 4 gezet, 797 00:54:24,240 --> 00:54:26,720 en zo kun je zien dat er een 6, is er een 4, 798 00:54:26,720 --> 00:54:29,160 en vervolgens als we afdrukt dingen, 799 00:54:29,160 --> 00:54:33,550 als we proberen en print de waarde opgeslagen bij indexnummer 0, 800 00:54:33,550 --> 00:54:36,900 dan zullen we zien de waarde 6 wordt afgedrukt. Cool? 801 00:54:36,900 --> 00:54:40,160 Dus dat is regelmatige arrays voor u. 802 00:54:40,160 --> 00:54:42,750 Een andere manier kun je ook dingen toevoegen aan regelmatige arrays nu 803 00:54:42,750 --> 00:54:44,780 is dat je ze gewoon toevoegen aan het eind. 804 00:54:44,780 --> 00:54:47,240 Dat betekent dat je niet hoeft om de specifieke index opgeven. 805 00:54:47,240 --> 00:54:51,000 U kunt zien nummer, en vervolgens in de vierkante haken is er geen index opgegeven. 806 00:54:51,000 --> 00:54:56,270 En het zal weten - PHP zal weten om gewoon toe te voegen aan het einde van de lijst, de volgende vrije plek. 807 00:54:56,270 --> 00:54:59,190 Zo kunt u de 1 daar zie op dat 0 spot, 808 00:54:59,190 --> 00:55:02,690 de 2 ging daar op de eerste plek. 809 00:55:02,690 --> 00:55:04,690 De 3 gaat - is daar ook toegevoegd. 810 00:55:04,690 --> 00:55:06,720 Dus dat soort zinvol. Je bent gewoon constant toe te voegen, 811 00:55:06,720 --> 00:55:09,360 en toen we in navolging van de index van de nummer 1, 812 00:55:09,360 --> 00:55:13,080 zal het printen van de waarde 2. 813 00:55:13,080 --> 00:55:16,800 >> Dan hebben we arrays die associatieve arrays zijn. 814 00:55:16,800 --> 00:55:19,370 Associatieve arrays, in plaats van numerieke waarden, 815 00:55:19,370 --> 00:55:23,630 wat ze doen is, ze hebben indices die door string. 816 00:55:23,630 --> 00:55:25,670 U kunt zien, in plaats van - ik verlost van al die numerieke indices, 817 00:55:25,670 --> 00:55:32,140 en nu is het key1, key2, KEY3, en ze zijn tussen dubbele aanhalingstekens om aan te geven dat ze allemaal strings. 818 00:55:32,140 --> 00:55:34,470 Dus we kunnen hier een voorbeeld van te hebben. 819 00:55:34,470 --> 00:55:38,790 Het voorbeeld hiervan is dat we de tf, en dat is de index naam. 820 00:55:38,790 --> 00:55:42,030 We gaan, zet "Ali", zoals de naam van de index, calorieën gegeten, 821 00:55:42,030 --> 00:55:47,640 kunnen we een int zet dit keer in plaats van een string, 822 00:55:47,640 --> 00:55:52,240 en vervolgens op de index voor leuk, we kunnen een hele array zet erin. 823 00:55:52,240 --> 00:55:55,490 Dus dit is een soort van - het is een vergelijkbaar concept met hoe we hadden 824 00:55:55,490 --> 00:55:58,930 indices met cijfers, maar nu kunnen we de indices rond veranderen 825 00:55:58,930 --> 00:56:03,890 om hen als strings plaats. 826 00:56:03,890 --> 00:56:06,070 U kunt dit ook doen, naast gewoon doen individueel, 827 00:56:06,070 --> 00:56:09,400 je kunt het allemaal in een brok. Dus je kunt dat tf van die array te zien, 828 00:56:09,400 --> 00:56:13,350 en dan zetten we ze allemaal in een gigantische vierkante haken set. 829 00:56:13,350 --> 00:56:15,220 Zodat dingen te versnellen. 830 00:56:15,220 --> 00:56:19,730 Het is meer een stilistische keuze dan niet. 831 00:56:19,730 --> 00:56:21,550 We hebben ook loops. 832 00:56:21,550 --> 00:56:26,020 In C hebben we lussen die werken als volgt. 833 00:56:26,020 --> 00:56:29,690 We hadden ons aanbod, en we gingen uit de index 0 tot het einde van de lijst, 834 00:56:29,690 --> 00:56:31,740 en wij drukken het allemaal, toch? 835 00:56:31,740 --> 00:56:33,880 Behalve het probleem is, voor associatieve arrays, 836 00:56:33,880 --> 00:56:36,610 we niet per se te kennen die numerieke indices 837 00:56:36,610 --> 00:56:39,610 want nu hebben we de string indices. 838 00:56:39,610 --> 00:56:44,800 Nu gebruiken we foreach loops, die, nogmaals, u hopelijk gebruikt in PSET 7. 839 00:56:44,800 --> 00:56:48,930 Foreach loops weet gewoon elk onderdeel van de lijst. 840 00:56:48,930 --> 00:56:52,450 En het hoeft niet precies de numerieke index die je hebt leren kennen. 841 00:56:52,450 --> 00:56:56,490 Dus je hebt de foreach syntax, dus het is foreach, je zet de array. 842 00:56:56,490 --> 00:57:00,430 Dus mijn array wordt genoemd PSET, en vervolgens als het woord als, 843 00:57:00,430 --> 00:57:04,530 en dan zet je deze lokale tijdelijke variabele die je gaat gebruiken 844 00:57:04,530 --> 00:57:10,690 alleen voor de specifieke ding dat gaat om de specifieke te houden - 845 00:57:10,690 --> 00:57:14,770 een exemplaar of een gedeelte van de array. 846 00:57:14,770 --> 00:57:18,350 Pset num zal houden 1, en dan misschien zal het nummer 6 te houden, 847 00:57:18,350 --> 00:57:20,410 en dan zal het de nummer 2 te houden. 848 00:57:20,410 --> 00:57:26,630 Maar het is gegarandeerd om te gaan door elke waarde die in de array. 849 00:57:26,630 --> 00:57:30,530 Handige functies die u moet weten in PHP zijn de eisen, 850 00:57:30,530 --> 00:57:35,880 dus dat zorgt ervoor dat je met inbegrip van bepaalde bestanden, echo, afrit, leeg. 851 00:57:35,880 --> 00:57:40,490 Ik beveel je kijkt naar pset 7 en kijk naar deze functies. 852 00:57:40,490 --> 00:57:42,810 Je zou kunnen hebben om die kennen, 853 00:57:42,810 --> 00:57:47,060 dus ik zou zeker weten wat precies, die doen allemaal. 854 00:57:47,060 --> 00:57:50,080 >> En nu gaan we om te gaan door ruimte heel snel. 855 00:57:50,080 --> 00:57:53,490 Van toepassing, PHP is een soort van een funky ding, in tegenstelling tot C, 856 00:57:53,490 --> 00:57:56,170 en dus zijn we gewoon gaan snel doorheen. 857 00:57:56,170 --> 00:57:58,930 Dus laten we zeggen beginnen we op dat de pijl die we daar hebben. 858 00:57:58,930 --> 00:58:02,900 En we gaan beginnen met $ i. Dus de variabele 'i' gaat worden 0, 859 00:58:02,900 --> 00:58:06,730 en we gaan gewoon houden afgedrukt in dat grote witte doos daar. 860 00:58:06,730 --> 00:58:09,220 We gaan beginnen met i0, en dan gaan we het echo. 861 00:58:09,220 --> 00:58:12,670 Dus er is het 0. 862 00:58:12,670 --> 00:58:15,210 En dan gaan we het verhogen van de for-lus, 863 00:58:15,210 --> 00:58:17,810 en dan gaat het om de waarde van 1 zijn. 864 00:58:17,810 --> 00:58:20,070 Een kleiner is dan 3, dus het gaat door dat te kunnen slagen voor lus, 865 00:58:20,070 --> 00:58:23,230 en dan gaan we zien het weer gedrukt. 866 00:58:23,230 --> 00:58:25,520 We gaan het weer verhogen naar 2, 867 00:58:25,520 --> 00:58:29,860 en 2 minder dan 3, dus het zal passeren de lus, en het zal de 2 drukken. 868 00:58:29,860 --> 00:58:35,100 Dan zul je merken dat 3 is niet minder dan 3, dus we zullen uit de pauze voor lus. 869 00:58:35,100 --> 00:58:40,050 Dus nu hebben we verlaten, en dan gaan we naar aFunction te gaan. 870 00:58:40,050 --> 00:58:45,010 Oke. Dus je moet er rekening mee dat deze variabele die we hebben gecreëerd, 871 00:58:45,010 --> 00:58:48,270 de 'i' variabele, niet lokaal bereik. 872 00:58:48,270 --> 00:58:50,280 Dat betekent dat het niet lokaal op de loop, 873 00:58:50,280 --> 00:58:58,060 en die variabele we kunnen nog steeds toegang en veranderen daarna, en het zal nog steeds effectief zijn. 874 00:58:58,060 --> 00:59:02,160 Dus als je in de functie nu, zult u zien dat wij de 'i' variabele te gebruiken ook, 875 00:59:02,160 --> 00:59:05,320 en we gaan op te hogen 'i' + +. 876 00:59:05,320 --> 00:59:09,410 Je zou denken, in eerste instantie, op basis van C, dat is een kopie van de 'i' variabele. 877 00:59:09,410 --> 00:59:12,830 Het is een heel ander ding, dat is correct. 878 00:59:12,830 --> 00:59:16,560 Dus toen we afdrukken, we gaan drukken 'i' + +, die gaat om uit te printen dat 4, 879 00:59:16,560 --> 00:59:19,640 en dan gaan we - sorry. 880 00:59:19,640 --> 00:59:22,030 Dan gaan we naar het einde van die functie, 881 00:59:22,030 --> 00:59:24,820 en we gaan zijn waar die pijl op dit moment is. 882 00:59:24,820 --> 00:59:29,190 Dat betekent dat dan echter, hoewel de functie verandert de waarde van 'i' 883 00:59:29,190 --> 00:59:32,620 het niet buiten de functie te veranderen, 884 00:59:32,620 --> 00:59:35,060 omdat de functie een aparte ruimte. 885 00:59:35,060 --> 00:59:38,960 Dit betekent dat wanneer we echo 'i' is niet veranderd in de scope van de functie 886 00:59:38,960 --> 00:59:43,660 en dus dan gaan we opnieuw af te drukken 3. 887 00:59:43,660 --> 00:59:47,520 Verschillende dingen over reikwijdte in PHP dan in C. 888 00:59:47,520 --> 00:59:51,130 >> Nu in PHP en HTML. 889 00:59:51,130 --> 00:59:53,510 PHP wordt gebruikt om webpagina's dynamisch te maken. 890 00:59:53,510 --> 00:59:58,660 Het maakt soort dingen anders. 891 00:59:58,660 --> 01:00:02,090 We hebben het anders dan HTML. 892 01:00:02,090 --> 01:00:05,230 Met HTML, we altijd gewoon hetzelfde statisch ding, zoals hoe Rob toonde, 893 01:00:05,230 --> 01:00:09,370 terwijl PHP, kun je dingen veranderen op basis van wie de gebruiker is. 894 01:00:09,370 --> 01:00:11,830 Dus als ik dit, ik heb, "U bent ingelogd als -" en vervolgens de naam, 895 01:00:11,830 --> 01:00:14,420 en ik kan de naam veranderen. Dus nu de naam is Joseph, 896 01:00:14,420 --> 01:00:18,880 en het heeft de "over mij", maar dan kan ik ook de naam te veranderen in Tommy hebben. 897 01:00:18,880 --> 01:00:21,700 En dat zou een andere zaak zijn. 898 01:00:21,700 --> 01:00:23,840 Dus dan kunnen we ook verschillende dingen over hem te veranderen, 899 01:00:23,840 --> 01:00:27,070 en het zal verschillende inhoud tonen op basis van de naam. 900 01:00:27,070 --> 01:00:31,430 Dus PHP kan soort veranderen wat er gaande is in uw website. 901 01:00:31,430 --> 01:00:33,540 Same here. Toch merken dat ze verschillende inhoud, 902 01:00:33,540 --> 01:00:38,870 ook al ben je technisch gesproken nog steeds toegang tot dezelfde webpagina op het oppervlak. 903 01:00:38,870 --> 01:00:43,450 HTML genereren. Er zijn 2 verschillende manieren waarop u dit kunt doen. 904 01:00:43,450 --> 01:00:48,980 Dus gaan we door dat moment. De eerste manier is, je hebt - ja, sorry. 905 01:00:48,980 --> 01:00:51,150 Dus je hoeft alleen uw gewone lus in PHP, 906 01:00:51,150 --> 01:00:56,270 en dan echo je in PHP en je echo uit HTML. 907 01:00:56,270 --> 01:00:58,720 Met behulp van wat Rob liet je van HTML script 908 01:00:58,720 --> 01:01:04,030 en vervolgens met behulp van de PHP druk om gewoon print het uit op de webpagina. 909 01:01:04,030 --> 01:01:09,520 De alternatieve manier is om het te doen alsof je scheiden van de PHP en HTML. 910 01:01:09,520 --> 01:01:11,940 Zo kunt u een lijn van PHP die begint de lus hebben, 911 01:01:11,940 --> 01:01:16,020 dan kunt u de lijn van de HTML hebben in een apart ding, 912 01:01:16,020 --> 01:01:19,700 en dan kom je de lus, wederom, met een PHP. 913 01:01:19,700 --> 01:01:21,800 Dus het is een soort van het scheiden van het uit. 914 01:01:21,800 --> 01:01:24,020 Aan de linkerkant, kunt u dat u alle - 915 01:01:24,020 --> 01:01:26,360 het is gewoon 1 brok van PHP. 916 01:01:26,360 --> 01:01:28,510 Aan de rechterkant kunt u zien dat u een lijn van PHP, 917 01:01:28,510 --> 01:01:32,540 heb je een regel HTML, en je weer een lijn van PHP. 918 01:01:32,540 --> 01:01:36,870 Dus scheiden het uit in wat ze doen. 919 01:01:36,870 --> 01:01:39,330 En je zult merken dat hoe dan ook, voor een van hen, 920 01:01:39,330 --> 01:01:41,980 ze nog steeds een afdruk van de afbeelding, de afbeelding, de afbeelding, 921 01:01:41,980 --> 01:01:44,540 zodat HTML steeds wordt afgedrukt op dezelfde manier. 922 01:01:44,540 --> 01:01:49,870 En dan zul je nog steeds de 3 beelden weergegeven op uw website. 923 01:01:49,870 --> 01:01:52,820 Dus het is 2 verschillende manieren om hetzelfde te doen. 924 01:01:52,820 --> 01:01:55,060 >> Nu hebben we formulieren en aanvragen. Zoals Rob liet zien, 925 01:01:55,060 --> 01:01:59,400 Er zijn vormen van HTML, en we zullen alleen wind door dit. 926 01:01:59,400 --> 01:02:02,040 U heeft een actie en je hebt een methode, en uw actie 927 01:02:02,040 --> 01:02:04,350 soort laat u zien waar je naartoe gaat om het te verzenden, en de methode is of 928 01:02:04,350 --> 01:02:06,960 het gaat om een ​​GET of POST zijn. 929 01:02:06,960 --> 01:02:11,220 En een GET-verzoek, zoals Rob zegt, betekent dat je gaat om het in een vorm te gieten 930 01:02:11,220 --> 01:02:15,760 en je zult het zien als een URL, terwijl een POST-aanvraag zal je niet zien in een URL. 931 01:02:15,760 --> 01:02:17,840 Zodat een klein verschil. 932 01:02:17,840 --> 01:02:19,950 Echter, een ding dat is een soortgelijk ding 933 01:02:19,950 --> 01:02:22,560 is dat POST en GET zijn even onzeker. 934 01:02:22,560 --> 01:02:26,430 Dus je zou kunnen denken dat alleen maar omdat je het niet zien in de URL, 935 01:02:26,430 --> 01:02:28,790 dat betekent dat de POST is veiliger, 936 01:02:28,790 --> 01:02:34,420 maar je kunt het nog steeds zien in uw cookies in de informatie die u verzendt. 937 01:02:34,420 --> 01:02:38,260 Dus denk niet dat over een of het ander. 938 01:02:38,260 --> 01:02:42,160 Een ander ding om op te merken is dat je ook paragraaf variabelen. 939 01:02:42,160 --> 01:02:45,850 Jullie gebruikten deze in pset 7 om uw gebruikers-ID informatie te krijgen. 940 01:02:45,850 --> 01:02:48,550 Wat er gebeurde was dat u deze associatieve array kan gebruiken, 941 01:02:48,550 --> 01:02:53,310 de $ _SESSION, en dan ben je in staat om toegang te krijgen tot verschillende dingen bent 942 01:02:53,310 --> 01:02:57,720 en opslaan verschillende dingen over de pagina's. 943 01:02:57,720 --> 01:03:00,750 >> Laatste ding is dat we SQL, Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 en dit is een programmeertaal om databases te beheren. 945 01:03:04,360 --> 01:03:08,220 Wat precies, zijn databases? Het zijn verzamelingen van tafels, 946 01:03:08,220 --> 01:03:10,630 en elke tabel kunnen vergelijkbare soorten objecten hebben. 947 01:03:10,630 --> 01:03:14,990 Dus we hadden een tafel van gebruikers in uw financiën PSET. 948 01:03:14,990 --> 01:03:20,610 En waarom zijn ze nuttig? Omdat het een manier om permanent informatie opslaan. 949 01:03:20,610 --> 01:03:22,840 Het is een manier van het bijhouden van dingen en het beheer van de dingen 950 01:03:22,840 --> 01:03:25,890 en eigenlijk zien van het op verschillende pagina's en het bijhouden. 951 01:03:25,890 --> 01:03:29,930 Terwijl als je gewoon op te slaan op dat een onmiddellijke ogenblik 952 01:03:29,930 --> 01:03:33,720 en gebruik het dan later, zult u niet in staat zijn om toegang te krijgen tot alles wat je hebt bespaard. 953 01:03:33,720 --> 01:03:37,660 We hebben 4 belangrijkste dingen die we gebruiken voor SQL-opdrachten. 954 01:03:37,660 --> 01:03:40,190 We hebben selecteren, invoegen, verwijderen en bijwerken. 955 01:03:40,190 --> 01:03:42,880 Die zijn echt belangrijk voor jullie om te weten voor uw quiz. 956 01:03:42,880 --> 01:03:45,990 >> We zullen snel gaan dan selecteert nu. 957 01:03:45,990 --> 01:03:48,540 Kortom, je bent het selecteren van rijen uit een database. 958 01:03:48,540 --> 01:03:52,400 Dus als je, hier - 959 01:03:52,400 --> 01:03:56,740 we hebben deze 2 verschillende dingen, en we willen selecteren uit de tabel klassen 960 01:03:56,740 --> 01:04:01,480 waar awesome - waar in de ontzagwekkende kolom de waarde is 1. 961 01:04:01,480 --> 01:04:04,460 Zodat je hier kunt zien, hebben we deze 2 dingen van naam van de klasse, 962 01:04:04,460 --> 01:04:08,490 CS50 en Stat110, en hebben we de klasse-identificaties en de slogan. 963 01:04:08,490 --> 01:04:13,150 Dus we willen al die informatie te selecteren. 964 01:04:13,150 --> 01:04:17,480 Dan kunt u hier zien dat het soort van plukken uit die geweldige column, 965 01:04:17,480 --> 01:04:25,170 waar alle dingen zijn 1, en dan heeft de klasse-id, class naam en slogan die het kan uitzoeken. 966 01:04:25,170 --> 01:04:28,100 Hoe precies doe je dit in de code? Je moet PHP gebruiken. 967 01:04:28,100 --> 01:04:33,830 Dat is een soort van hoe PHP en SQL zijn aan elkaar. 968 01:04:33,830 --> 01:04:38,130 Nu hebben we onze code, en we gaan onze vraag functie te gebruiken 969 01:04:38,130 --> 01:04:41,370 zoals we in PSET 7, en we gaan naar de SQL-query uit te voeren. 970 01:04:41,370 --> 01:04:43,870 Dan gaan we hebben - 971 01:04:43,870 --> 01:04:46,280 we hebben altijd te controleren of de rij van triple gelijk als vals. 972 01:04:46,280 --> 01:04:49,010 Dus nogmaals, wil je het type en de waarde te controleren, 973 01:04:49,010 --> 01:04:53,880 en dan, als het niet werkt, dan wil je verontschuldigen, zoals gewoonlijk, zoals wij deden in PSET 7. 974 01:04:53,880 --> 01:04:55,870 Anders, je wilt lus door alles met die handige 975 01:04:55,870 --> 01:04:59,410 foreach loops dat we gingen net over. 976 01:04:59,410 --> 01:05:01,280 Nu we doorlussen en we hebben het verleden gemaakt, 977 01:05:01,280 --> 01:05:05,080 laten we aannemen dat onze vraag voorbij, nu hebben we onze foreach lus. 978 01:05:05,080 --> 01:05:11,050 En de eerste rij heeft, dus hier is de rij hier, het is verpakt. 979 01:05:11,050 --> 01:05:14,010 Het gaat om uit te printen alle informatie die het is geworden. 980 01:05:14,010 --> 01:05:18,070 Dus het gaat om uit te drukken aan de onderkant "Wil leren HTML?" 981 01:05:18,070 --> 01:05:23,370 Dan is het gaan naar de volgende rij, omdat het voltooide de eerste lus, 982 01:05:23,370 --> 01:05:26,510 en dus dan gaat het printen van de tweede regel van het, 983 01:05:26,510 --> 01:05:32,120 die gaat STAT110 zijn, Vind alle Moments. 984 01:05:32,120 --> 01:05:34,290 >> Een laatste ding is op SQL beveiligingslekken. 985 01:05:34,290 --> 01:05:37,300 Ik weet dat David raakte op deze een beetje in collegezaal. 986 01:05:37,300 --> 01:05:40,730 Je kunt dit later lezen. Het is echt grappig. 987 01:05:40,730 --> 01:05:45,320 SQL Injection is een soort van lastig ding. 988 01:05:45,320 --> 01:05:49,890 Laten we zeggen dat je gewoon vasthouden die variabelen direct in uw query, 989 01:05:49,890 --> 01:05:52,290 zoals je kunt zien in die eerste lijn. 990 01:05:52,290 --> 01:05:54,520 Het lijkt zo fijn, toch? Je bent gewoon de invoering van de gebruikersnaam 991 01:05:54,520 --> 01:05:58,820 en wachtwoord om uw SQL-query, en je wil het schip uit en krijgen wat er in uw gegevens tafel. 992 01:05:58,820 --> 01:06:01,450 Dat lijkt vrij eenvoudig. Dus laten we zeggen iemand zet in, 993 01:06:01,450 --> 01:06:04,910 voor het wachtwoord, dit OR hier tekst - 994 01:06:04,910 --> 01:06:06,780 eigenlijk zou moeten zijn in het rode vak. 995 01:06:06,780 --> 01:06:11,920 Dus laten we zeggen dat ze zetten dat wachtwoord in - dat is wat ze in te voeren. 996 01:06:11,920 --> 01:06:16,520 Dus ze zetten of "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Soort van een domme wachtwoord te hebben. 998 01:06:20,880 --> 01:06:25,070 Laten we nu gewoon vervangen in, en je zult merken dat in dat SQL-query nu, 999 01:06:25,070 --> 01:06:29,090 evalueert om altijd waar, want je zult merken dat 1000 01:06:29,090 --> 01:06:32,240 U kunt SQL-query selecteren al deze informatie 1001 01:06:32,240 --> 01:06:35,420 of je kan gewoon 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Dus dat gaat altijd om te evalueren op true. 1003 01:06:41,030 --> 01:06:46,610 Dat gaat niet echt werken, want dat betekent dat de hacker kan breken in uw systeem. 1004 01:06:46,610 --> 01:06:49,300 De oplossing hiervoor is dat je de BOB-systeem te gebruiken, 1005 01:06:49,300 --> 01:06:51,360 wat betekent dat je vraagtekens gebruiken, 1006 01:06:51,360 --> 01:06:53,350 dat is wat jullie gebruikt in PSET 7, 1007 01:06:53,350 --> 01:06:57,620 waar je naartoe gaat om een ​​vraagteken te gebruiken in plaats van waar je iets wilt zetten, 1008 01:06:57,620 --> 01:07:01,430 en dan zul je een komma, en dan zul je daarna hebt, 1009 01:07:01,430 --> 01:07:07,610 na uw snaar, de verschillende variabelen die u wilt vervangen in uw vraagteken. 1010 01:07:07,610 --> 01:07:10,330 Dus je zult merken dat ik nu deze rode vraagtekens. 1011 01:07:10,330 --> 01:07:15,420 Dan zet ik de variabelen na mijn snaren, dus ik weet dat ze achteraf te vervangen in die volgorde. 1012 01:07:15,420 --> 01:07:18,470 Dat zal ervoor zorgen dat als iemand het doet als dit, 1013 01:07:18,470 --> 01:07:24,050 en ze hebben de or 1 = 1 situatie, die zal ervoor zorgen dat, 1014 01:07:24,050 --> 01:07:30,490 in de back-end, zorg ervoor dat het eigenlijk niet zal breken de SQL-query. 1015 01:07:30,490 --> 01:07:33,660 Oke, dus dat is het zowat, een wervelwind van PHP en SQL. 1016 01:07:33,660 --> 01:07:41,520 Veel succes voor jullie allemaal, en nu aan Oregon 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Oke iedereen. Tijd om te gaan over een aantal JavaScript 1018 01:07:44,270 --> 01:07:48,840 en een aantal andere dingen heel snel, zodat we je niet houden vanavond. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Ja. JavaScript is een soort van een cool ding, ogenschijnlijk. 1020 01:07:56,930 --> 01:07:59,090 De dingen die je echt moet weten over JavaScript, het is een beetje als 1021 01:07:59,090 --> 01:08:03,810 de client-side einde van wat uw web app gaat doen. 1022 01:08:03,810 --> 01:08:08,280 Er zijn een paar dingen die je gewoon niet willen om te zorgen voor de hele tijd op de server kant. 1023 01:08:08,280 --> 01:08:12,880 Alle kleine interacties, aandacht voor een ding, iets laten verdwijnen. 1024 01:08:12,880 --> 01:08:15,340 Je echt niet willen hebben om uw server te praten de hele tijd voor dat. 1025 01:08:15,340 --> 01:08:18,069 En sommige van die zelfs niet mogelijk is te doen op de server kant. 1026 01:08:18,069 --> 01:08:21,899 Dit is waarom we iets als JavaScript nodig. 1027 01:08:21,899 --> 01:08:24,359 Coole dingen over JavaScript: Het is dynamisch getypeerde. 1028 01:08:24,359 --> 01:08:27,149 Wat dit betekent is dat je programma niet hoeft te weten 1029 01:08:27,149 --> 01:08:30,970 wat precies, de variabelen zijn als je het opschrijven. 1030 01:08:30,970 --> 01:08:34,510 Het zal gewoon soort van het uit als het draait. 1031 01:08:34,510 --> 01:08:37,520 Andere dingen die zijn cool aan is: Het is een accolade taal, 1032 01:08:37,520 --> 01:08:41,359 waardoor de syntax is vergelijkbaar met C en PHP. 1033 01:08:41,359 --> 01:08:47,050 Je hoeft niet te veel rework doen als je het leren JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Hier hebben we een beetje van JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Interessante ding hier is dat, als je er naar kijkt, 1036 01:08:52,560 --> 01:08:56,330 we hebben een beetje van JavaScript daar in het hoofd-tag. 1037 01:08:56,330 --> 01:08:59,479 Wat is doet is eigenlijk gewoon onder een JavaScript-bestand. 1038 01:08:59,479 --> 01:09:02,260 Dit is een manier kun je onder andere JavaScript in uw programma. 1039 01:09:02,260 --> 01:09:06,910 Dan is de tweede beetje eigenlijk een aantal inline JavaScript, 1040 01:09:06,910 --> 01:09:10,790 zeer vergelijkbaar met een inline stijl met CSS, 1041 01:09:10,790 --> 01:09:16,180 en je bent gewoon schrijven wat code zeer snel er. 1042 01:09:16,180 --> 01:09:18,120 JavaScript heeft arrays. 1043 01:09:18,120 --> 01:09:20,850 Gewoon een andere manier om data te houden rond, zeer nuttig. 1044 01:09:20,850 --> 01:09:25,180 Zeer mooie en gemakkelijke syntaxis. 1045 01:09:25,180 --> 01:09:29,870 U gebruikt vierkante haken om alles bij elkaar te houden en alles. 1046 01:09:29,870 --> 01:09:35,020 Niets te complex. 1047 01:09:35,020 --> 01:09:38,630 Het koele ding over JavaScript en scripting talen in het algemeen 1048 01:09:38,630 --> 01:09:40,920 is dat je niet hoeft te maken over matrix maten. 1049 01:09:40,920 --> 01:09:43,880 U kunt gewoon gebruik maken van Array.length en bijhouden van het, 1050 01:09:43,880 --> 01:09:46,960 en ook de array kan groeien of krimpen als je het nodig hebt. 1051 01:09:46,960 --> 01:09:49,279 Dus je hoeft niet eens zorgen te maken over een soort van, 1052 01:09:49,279 --> 01:09:57,050 oh nee, ik moet meer dingen, of iets dergelijks toe te wijzen. 1053 01:09:57,050 --> 01:10:00,090 >> Het leuke hier is dat JavaScript heeft iets genaamd objecten. 1054 01:10:00,090 --> 01:10:04,800 Het is een objectgeoriënteerde taal, dus wat het is in wezen, 1055 01:10:04,800 --> 01:10:10,100 een manier voor u om gegevens te groeperen samen, enigszins vergelijkbaar met een structuur, 1056 01:10:10,100 --> 01:10:17,280 maar je kunt openen als een struct of in een associatieve array syntax. 1057 01:10:17,280 --> 01:10:22,520 Het is vrij simpel en wat u kunt doen met dit is groep gegevens samen 1058 01:10:22,520 --> 01:10:24,810 als je een heleboel gegevens die zijn gerelateerd. 1059 01:10:24,810 --> 01:10:26,850 Want het is alles wat je nodig hebt om een ​​auto te beschrijven, 1060 01:10:26,850 --> 01:10:29,050 je hoeft niet om het in een heleboel verschillende plaatsen hebben. 1061 01:10:29,050 --> 01:10:35,300 Je kunt gewoon plak het in 1 object in JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Zoals u waarschijnlijk weet, iteratie is een van die vervelende taken. 1063 01:10:39,090 --> 01:10:43,810 Je doet het net iets meer dan een weer. Je nodig hebt om alle objecten te praten in de auto, 1064 01:10:43,810 --> 01:10:47,340 of je moet gaan door elke item in een lijst of iets dergelijks. 1065 01:10:47,340 --> 01:10:51,770 JavaScript heeft dus, vergelijkbaar met PHP, een foreach syntax. 1066 01:10:51,770 --> 01:10:54,590 In dit geval is een in lus. 1067 01:10:54,590 --> 01:10:57,300 Wil je dit alleen gebruiken op objecten. 1068 01:10:57,300 --> 01:11:01,030 Er zijn een aantal problemen die zich voordoen als u dit gebruiken op arrays. 1069 01:11:01,030 --> 01:11:03,750 Het is over het algemeen een van die dingen, hoewel, dat is erg handig, 1070 01:11:03,750 --> 01:11:06,590 omdat je veel overhead elimineren 1071 01:11:06,590 --> 01:11:10,270 omdat je niet hoeft te trekken alles in je object zelf. 1072 01:11:10,270 --> 01:11:12,300 Je hoeft niet alle belangrijke namen te onthouden. 1073 01:11:12,300 --> 01:11:18,270 Je gewoon soort van krijgen ze terug in dit syntax. 1074 01:11:18,270 --> 01:11:21,500 In deze, voor, je wilt onthouden 1075 01:11:21,500 --> 01:11:27,180 dat je krijgt terug alle sleutels, in een zeer gelijkaardige manier om hash table. 1076 01:11:27,180 --> 01:11:30,880 Als je nog van dat, wanneer je in een string zou zetten kon je iets uit te krijgen 1077 01:11:30,880 --> 01:11:33,840 dat zou een bijbehorende waarde mee. 1078 01:11:33,840 --> 01:11:36,360 Wat u kunt doen met dit is dat je kan zeggen, oke, 1079 01:11:36,360 --> 01:11:42,120 Ik zet in een auto, en ik noemde het een Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Zo kunt u in de string Ferrari weer later te zetten, en je kunt krijgen dat uit. 1081 01:11:45,290 --> 01:11:50,000 En kun je dat doen in een lus, met de in lus. 1082 01:11:50,000 --> 01:11:53,320 Dus gewoon meer over objecten. Het belangrijkste van deze je moet onthouden 1083 01:11:53,320 --> 01:12:00,340 is dat je het object struct kan gebruiken, zoals syntax wanneer u maar wilt met deze, 1084 01:12:00,340 --> 01:12:04,590 behalve als wat je gaat gebruiken als een string is geen geldige variabelenaam. 1085 01:12:04,590 --> 01:12:07,650 Dus als je kijkt naar dat er, we hebben sleutel met spaties. 1086 01:12:07,650 --> 01:12:12,500 Nou, als je naar object.key zetten, ruimte, met, ruimte, ruimten, 1087 01:12:12,500 --> 01:12:15,320 dat zou gewoon niet logisch syntactisch maken. 1088 01:12:15,320 --> 01:12:22,730 Dus alleen kun je dat doen met dit soort beugel syntaxis. 1089 01:12:22,730 --> 01:12:26,520 >> Ook JavaScript is zeer ruimte-verstandig om PHP. 1090 01:12:26,520 --> 01:12:29,050 Je hebt 2 manieren van aanpakken scope. 1091 01:12:29,050 --> 01:12:31,960 Je kunt niet de var voor een variabele, 1092 01:12:31,960 --> 01:12:34,060 en dat betekent gewoon dat dit is wereldwijd. 1093 01:12:34,060 --> 01:12:37,050 Je ziet het overal. Zelfs als je om dit in een if-statement te zetten, 1094 01:12:37,050 --> 01:12:42,430 ergens anders in de code na dat punt kon je die variabele zien. 1095 01:12:42,430 --> 01:12:46,730 Een ander ding is echter met de var, het is beperkt tot wat de functie waar je in bent 1096 01:12:46,730 --> 01:12:48,870 Als je niet in een functie, goed, het is mondiaal. 1097 01:12:48,870 --> 01:12:53,900 Maar als je in een functie is het alleen toegankelijk binnen die functie. 1098 01:12:53,900 --> 01:12:56,420 Ik heb geen voorbeeld hebben, maar ja. Het is een van die dingen waar 1099 01:12:56,420 --> 01:12:59,900 u kunt beheren welke variabelen je wilt globaal te zijn, 1100 01:12:59,900 --> 01:13:03,810 wat variabelen die je wilt lokaal te zijn, maar je moet voorzichtig zijn over dit, 1101 01:13:03,810 --> 01:13:06,890 omdat u niet beschikt over het soort fijne korrel controle die je doen in C, 1102 01:13:06,890 --> 01:13:15,820 waar als er iets wordt verklaard in een lus, het gaat om te verblijven in die lus. 1103 01:13:15,820 --> 01:13:18,790 Het ding dat we echt zorgen over het gebruik van JavaScript voor manipuleert webpagina's, toch? 1104 01:13:18,790 --> 01:13:21,800 Ik bedoel, dat is waarom we dit doen. 1105 01:13:21,800 --> 01:13:23,840 >> Om dat te doen, gebruiken we iets genaamd de DOM. 1106 01:13:23,840 --> 01:13:25,850 Het Document Object Model. 1107 01:13:25,850 --> 01:13:29,430 Kortom, wat het doet is het neemt al je HTML 1108 01:13:29,430 --> 01:13:34,110 en modellen het uit in een bos van objecten die zijn genest in elkaar. 1109 01:13:34,110 --> 01:13:37,080 Je begint met iets als dit. 1110 01:13:37,080 --> 01:13:44,770 Je hebt, op de juiste voor mij, een bos van code die er zijn dat is een soort - 1111 01:13:44,770 --> 01:13:46,640 Je zou denken dat zeer moeilijk te manipuleren zou zijn, 1112 01:13:46,640 --> 01:13:48,700 want je zou parsen door een bos van tekst 1113 01:13:48,700 --> 01:13:52,080 en hoeven stuk uit elkaar dingen. En wat als het was niet goed geformatteerd? 1114 01:13:52,080 --> 01:13:54,880 Slechte dingen zouden gebeuren. 1115 01:13:54,880 --> 01:13:58,140 JavaScript duurt zo verzorgen dit voor u, en u hebt een mooie datastructuur te krijgen, 1116 01:13:58,140 --> 01:14:01,390 zoals die links van mij, waar je gewoon een document, 1117 01:14:01,390 --> 01:14:03,530 en binnen dat je iets genaamd HTML hebben, 1118 01:14:03,530 --> 01:14:05,600 en binnen dat u een hoofd en een lichaam, 1119 01:14:05,600 --> 01:14:08,420 en binnen dat hoofd je hebt een titel, etcetera, etcetera, etcetera. 1120 01:14:08,420 --> 01:14:11,810 Dit vereenvoudigt het manipuleren van een webpagina, zodat het is gewoon, 1121 01:14:11,810 --> 01:14:14,190 oh, ik wil gewoon dit object te praten. 1122 01:14:14,190 --> 01:14:21,340 Soort van een zeer gelijkaardige manier om een ​​ander object dat u zelf gemaakt zou praten. 1123 01:14:21,340 --> 01:14:25,980 Zoals ik al zei, alle DOM is in het document object. 1124 01:14:25,980 --> 01:14:29,290 Ofwel het is gewoon een plek en dan kun je naar binnen te gaan om dingen te vinden, 1125 01:14:29,290 --> 01:14:33,880 en je kunt het doen - dit is de oude stijl van doen, daar, 1126 01:14:33,880 --> 01:14:38,130 waar je dat doet document.getElementById, en vervolgens de naam, 1127 01:14:38,130 --> 01:14:42,420 en zoals u waarschijnlijk kunt vertellen, dit wordt erg onhandig na een tijdje. 1128 01:14:42,420 --> 01:14:44,480 Dus u wilt waarschijnlijk niet om dat te doen. Daarom hebben wij 1129 01:14:44,480 --> 01:14:48,760 het volgende wat we gaan over praten na deze. 1130 01:14:48,760 --> 01:14:52,510 De sleutel hier is dat, oke, je hebt al deze elementen, toch? 1131 01:14:52,510 --> 01:14:56,400 Dus misschien kan ik de kleur van iets wanneer de pagina geladen wijzigen. 1132 01:14:56,400 --> 01:14:58,380 So what? Wat als mijn gebruiker iets klikt? 1133 01:14:58,380 --> 01:15:00,540 Ik wil dat het iets interessants doen wanneer ze op iets. 1134 01:15:00,540 --> 01:15:02,600 Daarom hebben we evenementen. 1135 01:15:02,600 --> 01:15:05,330 U kunt, in principe, vinden elk element in je DOM, 1136 01:15:05,330 --> 01:15:08,560 en dan zeggen, he. Wanneer deze laadt of iemand het klikt, 1137 01:15:08,560 --> 01:15:11,410 of wanneer ze de muis over het, doe er iets mee. 1138 01:15:11,410 --> 01:15:15,330 En wat je hebt is, heb je functies die dit voor u te behandelen. 1139 01:15:15,330 --> 01:15:17,980 Deze functies zijn event handlers. 1140 01:15:17,980 --> 01:15:20,440 Wat Ze zijn - het is gewoon een mooie manier om te zeggen, 1141 01:15:20,440 --> 01:15:23,500 Deze functie wordt alleen uitgevoerd wanneer dit evenement gebeurt. 1142 01:15:23,500 --> 01:15:28,070 Zo behandelt het geval voordoet. 1143 01:15:28,070 --> 01:15:30,810 Dit is hoe je zou lay-out een event handler. 1144 01:15:30,810 --> 01:15:34,750 Ik heb enkele knop, en wanneer u erop klikt, hij ontploft. 1145 01:15:34,750 --> 01:15:40,560 Dus niet op de knop. 1146 01:15:40,560 --> 01:15:42,910 Dit is een manier van benaderen, toch? 1147 01:15:42,910 --> 01:15:46,430 Je hebt een knop tag, en klik je een string die zegt, 1148 01:15:46,430 --> 01:15:50,460 oh, door de manier, ik doe dit exploderende ding voor mij. 1149 01:15:50,460 --> 01:15:53,990 Anders, het is net als een gewone toets die u net gemaakt. 1150 01:15:53,990 --> 01:15:56,550 U kunt dit ook doen op een andere manier, 1151 01:15:56,550 --> 01:16:02,770 door grijpen de DOM-element, maar dat bewaren we nadat we praten over jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Het is een bibliotheek die is cross-browser. 1153 01:16:07,580 --> 01:16:09,580 Je kunt het gebruiken in vrijwel alles. 1154 01:16:09,580 --> 01:16:12,090 En het geeft je gewoon een hoop tools om mee te werken. 1155 01:16:12,090 --> 01:16:15,850 Omdat JavaScript, terwijl krachtige, niet alle tools die u nodig hebt 1156 01:16:15,850 --> 01:16:20,550 uit de doos om echt aan te pakken een web app die u zou willen doen. 1157 01:16:20,550 --> 01:16:24,650 Dus het vereenvoudigt een heleboel dingen, geeft je een heleboel functies 1158 01:16:24,650 --> 01:16:28,760 uit de doos die je normaal zou moeten schrijven zelf, over en over en weer. 1159 01:16:28,760 --> 01:16:31,600 En net maakt de dingen heel simpel. 1160 01:16:31,600 --> 01:16:35,780 Je hebt ook selectors, die laat je uit al die elementen 1161 01:16:35,780 --> 01:16:42,800 van uw DOM veel eenvoudiger, in plaats van om deze zeer lange functie-aanroepen gebruiken. 1162 01:16:42,800 --> 01:16:46,630 Meer informatie over deze selectors. Je hebt, daar heb je, laten we zeggen 1163 01:16:46,630 --> 01:16:49,800 Ik wil een element te krijgen met het ID "rock." 1164 01:16:49,800 --> 01:16:56,450 Nou, in jQuery, het is gewoon $ en dan een string die een pond heeft, en dan "rock." 1165 01:16:56,450 --> 01:17:01,960 Het is heel simpel en een stuk sneller dan de traditionele JavaScript manier om dit probleem aan te pakken. 1166 01:17:01,960 --> 01:17:06,120 En u soortgelijke dingen voor klassen en soorten element. 1167 01:17:06,120 --> 01:17:08,140 jQuery is - een van de coole features is dat je kunt een soort van comprimeren 1168 01:17:08,140 --> 01:17:14,350 uw vragen over uw DOM heel, heel snel. 1169 01:17:14,350 --> 01:17:18,980 Nu zijn we terug naar event handling, en dit is hoe je een evenement in jQuery zou behandelen. 1170 01:17:18,980 --> 01:17:23,090 Dus wat we hier gaan is dat we zeggen, oke. Ik heb een script-tag, toch? 1171 01:17:23,090 --> 01:17:25,400 Dus ik heb dit inline JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Wat we gaan doen is dat we gaan zeggen, oke. 1173 01:17:27,750 --> 01:17:30,860 Wanneer het document gereed is, wat betekent dat het document is geladen, 1174 01:17:30,860 --> 01:17:34,660 we gaan naar binnen te gaan naar die functie, en we gaan zeggen, oke, 1175 01:17:34,660 --> 01:17:37,060 Deze functie is eigenlijk iets anders te doen. 1176 01:17:37,060 --> 01:17:42,320 Het is eigenlijk te zeggen, oke, geef me het element met het ID "myid." 1177 01:17:42,320 --> 01:17:47,960 En dan geven deze een functie handler die wordt uitgevoerd wanneer u erop klikt. 1178 01:17:47,960 --> 01:17:49,820 Eigenlijk wat dit doet is, het zegt, oke. 1179 01:17:49,820 --> 01:17:52,630 De pagina wordt geladen, dus ik ga in, vinden dit element, 1180 01:17:52,630 --> 01:17:56,420 geef het dit event handler, en het zet in principe op uw pagina voor u. 1181 01:17:56,420 --> 01:18:00,520 En dit is hoe je wilt denken event handling. 1182 01:18:00,520 --> 01:18:06,310 Wil je gewoon denken, oke, als er iets gebeurt, wat wil ik er gebeuren? 1183 01:18:06,310 --> 01:18:10,520 Je wilt niet te denken, oke, ik moet zorgen dat dit ding gesprekken maken om dit ding, 1184 01:18:10,520 --> 01:18:14,660 dit ding blah blah blah, omdat je gewoon wilt ding spreken in termen van de gebeurtenissen. 1185 01:18:14,660 --> 01:18:17,650 Wanneer dit gebeurt, gebeurt. Wanneer dit gebeurt, dat gebeurt. 1186 01:18:17,650 --> 01:18:20,240 En als de dingen teweegbrengen andere dingen, dat is geweldig. 1187 01:18:20,240 --> 01:18:22,150 Maar je hoeft niet te proberen en te doen ingewikkelde code 1188 01:18:22,150 --> 01:18:24,130 waar je triggeren meerdere dingen tegelijk, 1189 01:18:24,130 --> 01:18:28,860 want je gaat gewoon om jezelf een hoofdpijn. 1190 01:18:28,860 --> 01:18:32,340 >> Oke. Nu kunnen we onze pagina om gebeurtenissen af ​​te handelen, 1191 01:18:32,340 --> 01:18:35,640 maar laten we zeggen dat mijn gebruiker op een knop klikt. 1192 01:18:35,640 --> 01:18:38,040 Wat als ik wil dat verzoek terug naar de server te sturen, 1193 01:18:38,040 --> 01:18:41,100 maar ik wil niet naar de pagina opnieuw te laden, omdat het hebben van een nieuwe pagina te herladen 1194 01:18:41,100 --> 01:18:44,390 elke keer wordt een beetje vervelend, en waarom moet ik 1195 01:18:44,390 --> 01:18:47,430 weer naar beneden trekken van de header, en opnieuw de voettekst, 1196 01:18:47,430 --> 01:18:49,670 en alle elementen van de pagina weer 1197 01:18:49,670 --> 01:18:53,180 alleen maar om de begroeting of de tijd te vernieuwen? 1198 01:18:53,180 --> 01:18:55,290 Dus dat is de reden waarom we iets als Ajax. 1199 01:18:55,290 --> 01:18:59,150 Wat kunnen we hier doen met Ajax is dat we kunnen zeggen, oke, 1200 01:18:59,150 --> 01:19:01,290 Ik wil een aantal gegevens naar de server, 1201 01:19:01,290 --> 01:19:04,010 en ik wil een reactie terug te krijgen zodat ik mijn pagina bij te werken, 1202 01:19:04,010 --> 01:19:12,120 of misschien gewoon doen wat algoritmische berekening die niet per se iets te laten zien aan de gebruiker. 1203 01:19:12,120 --> 01:19:15,500 Wat heb je nodig om dit te doen? Nou, je een URL die je nodig hebt om mee te praten. 1204 01:19:15,500 --> 01:19:18,650 Uw server kan niet gewoon magisch luisteren uit het niets. 1205 01:19:18,650 --> 01:19:21,960 U moet een specifieke plaats je deze gegevens naar hebben. 1206 01:19:21,960 --> 01:19:26,240 En je moet ook een aantal gegevens te sturen, of misschien is het een datalozen query. 1207 01:19:26,240 --> 01:19:31,380 Je wil gewoon terug naar de server pingen en zeggen: hey, ik leef, of iets dergelijks. 1208 01:19:31,380 --> 01:19:35,150 En dan een functie die in principe handgrepen met succes wil je. 1209 01:19:35,150 --> 01:19:38,250 Laten we zeggen dat je krijgt terug wat informatie van uw server, 1210 01:19:38,250 --> 01:19:42,960 en je wilt de titel van de gebruiker op hun pagina te veranderen. 1211 01:19:42,960 --> 01:19:44,930 Dus zou je de informatie terug te krijgen, 1212 01:19:44,930 --> 01:19:48,860 en je zou duwen die aan het scherm. 1213 01:19:48,860 --> 01:19:51,170 Wat er gebeurt is, wanneer de pagina klaar is, 1214 01:19:51,170 --> 01:19:56,500 u een op Click-functie te creëren voor deze knop genaamd Greeter. 1215 01:19:56,500 --> 01:19:58,810 Wat dit doet dan is, wanneer deze wordt ingedrukt, 1216 01:19:58,810 --> 01:20:03,700 je praat met greetings.php, u een POST-aanvraag te maken, 1217 01:20:03,700 --> 01:20:07,290 en je zegt, he, iets van uw pagina me. 1218 01:20:07,290 --> 01:20:09,890 We niet echt nodig om te beschrijven dat, maar greetings.php, 1219 01:20:09,890 --> 01:20:12,480 laten we maar zeggen, geeft terug "hallo wereld". 1220 01:20:12,480 --> 01:20:15,650 Dus krijgen we weer deze "hallo wereld" en op het succes van deze, 1221 01:20:15,650 --> 01:20:20,730 veronderstelling niets mis gaat, dan gaan we gewoon naar deze doelgroep plaats 1222 01:20:20,730 --> 01:20:25,720 dat we opgegeven en we gewoon vasthouden de reactie daar. 1223 01:20:25,720 --> 01:20:31,560 En dit is een zeer eenvoudige manier van het opzetten van een Ajax-query. 1224 01:20:31,560 --> 01:20:34,340 >> Zeer snel, Rob soort noemde dit al, 1225 01:20:34,340 --> 01:20:37,170 dingen mis kan gaan, kan slechte dingen gebeuren, 1226 01:20:37,170 --> 01:20:42,660 dus je wilt om vertrouwd te raken met deze HTTP response codes. 1227 01:20:42,660 --> 01:20:46,030 Wat deze zijn, zijn enkel, als, 200, ging alles goed. 1228 01:20:46,030 --> 01:20:48,670 Iets anders, slechte dingen gebeurd. 1229 01:20:48,670 --> 01:20:50,790 Het is over het algemeen de wat je wilt onthouden. 1230 01:20:50,790 --> 01:20:53,440 Maar het is leuk om al deze weten. 1231 01:20:53,440 --> 01:20:55,970 En tenslotte, als we eenmaal hebt meegemaakt dat alles, 1232 01:20:55,970 --> 01:20:58,680 We moeten heel snel praten over design, 1233 01:20:58,680 --> 01:21:00,620 en dan kunnen we laten jullie allemaal vertrekken. 1234 01:21:00,620 --> 01:21:03,410 Design. Dingen die je wilt onthouden. 1235 01:21:03,410 --> 01:21:06,950 Stel jezelf de volgende vragen: Wie zal met behulp van deze? 1236 01:21:06,950 --> 01:21:09,580 Wat zullen ze gebruiken voor? Wat doen mijn gebruikers schelen? 1237 01:21:09,580 --> 01:21:11,750 Wat doen ze niet schelen? 1238 01:21:11,750 --> 01:21:14,500 Je wil gewoon niet om een ​​app te maken en laat het gewoon groeien 1239 01:21:14,500 --> 01:21:18,270 en word deze reus, alles verterende ding dat je niet eens kan afmaken. 1240 01:21:18,270 --> 01:21:23,900 U wilt discrete doelen en plannen en dingen die je wilt pakken hebben. 1241 01:21:23,900 --> 01:21:29,000 Maak het moeiteloos. Dit alles zegt, in principe, 1242 01:21:29,000 --> 01:21:34,950 maken het gemakkelijk voor de gebruiker om het te gebruiken, maak het niet een gigantische klodder tekst zoals deze dia is, eigenlijk. 1243 01:21:34,950 --> 01:21:38,020 Je wil gewoon dat het iets waar het is heel makkelijk voor iemand om in te gaan 1244 01:21:38,020 --> 01:21:40,800 en doen wat ze willen doen. 1245 01:21:40,800 --> 01:21:42,920 Je wilt niet dat ze moeten 5 pagina's navigeren 1246 01:21:42,920 --> 01:21:45,460 om uw primaire functie van uw site te krijgen. 1247 01:21:45,460 --> 01:21:49,290 Als Google had 5 pagina's voor dat je kon zelfs iets zoeken, 1248 01:21:49,290 --> 01:21:53,080 zou niemand het gebruiken. 1249 01:21:53,080 --> 01:21:55,890 En tot slot, papieren prototype, focusgroep. 1250 01:21:55,890 --> 01:21:59,220 Heb goede ontwerpen en testen praktijken. 1251 01:21:59,220 --> 01:22:00,730 Gewoon omdat je denkt dat het voor u werkt, 1252 01:22:00,730 --> 01:22:04,860 betekent niet dat iemand anders denkt dat het werkt. 1253 01:22:04,860 --> 01:22:14,490 Maar ja, dat is het. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]