1 00:00:00,000 --> 00:00:02,964 2 00:00:02,964 --> 00:00:05,434 >> [Musik spiller] 3 00:00:05,434 --> 00:00:11,825 4 00:00:11,825 --> 00:00:12,700 HANNAH: Hej, alle. 5 00:00:12,700 --> 00:00:15,866 Tak fyrene så meget for at komme ud i den modbydelige vejr til quiz én 6 00:00:15,866 --> 00:00:16,910 gennemgå session. 7 00:00:16,910 --> 00:00:20,020 Som du fyre ved, quiz den ene er denne onsdag. 8 00:00:20,020 --> 00:00:22,209 Så vi kommer til at gå gennem en flok emner. 9 00:00:22,209 --> 00:00:24,000 Davin: Hey, kan jeg sige noget virkelig hurtig? 10 00:00:24,000 --> 00:00:25,215 HANNAH: Ja, Davin s går at sige noget virkelig hurtig. 11 00:00:25,215 --> 00:00:25,780 Davin: Undskyld. 12 00:00:25,780 --> 00:00:29,490 Bare virkelig hurtig, hvis du har spørgsmål om quiz, kan du gå online. 13 00:00:29,490 --> 00:00:32,420 Gå til 2014 quiz én, om quizzen. 14 00:00:32,420 --> 00:00:34,680 Det har fået logistik omkring hvor de skal gå, når de skal gå. 15 00:00:34,680 --> 00:00:38,100 Hvis du samtidig er tilmeldt, er vi vil have en makeup quiz på 5:30. 16 00:00:38,100 --> 00:00:40,350 Eller hvis du har sendt mig et problem, du har nogle andre spørgsmål. 17 00:00:40,350 --> 00:00:42,640 Men 05:30 er make-up tid på onsdag. 18 00:00:42,640 --> 00:00:44,540 Men hvis du har spørgsmål, generelle spørgsmål, 19 00:00:44,540 --> 00:00:45,748 online har alle de logistik. 20 00:00:45,748 --> 00:00:47,690 Så tjek der først. 21 00:00:47,690 --> 00:00:49,070 >> HANNAH: Awesome. 22 00:00:49,070 --> 00:00:53,030 Så her er den store liste af emner at vi kommer til at gå gennem i dag. 23 00:00:53,030 --> 00:00:57,390 Jeg har tænkt mig at dække alle de C ting, som er den første kolonne. 24 00:00:57,390 --> 00:01:00,710 Så C ting, vi dækket efter quiz nul. 25 00:01:00,710 --> 00:01:05,459 Startende med en linket liste, som omfatter pointere. 26 00:01:05,459 --> 00:01:07,668 >> Okay, så vi så dette i den sidste revision session, 27 00:01:07,668 --> 00:01:10,000 så jeg har tænkt mig at gå igennem dette er en lille smule hurtigere. 28 00:01:10,000 --> 00:01:13,500 Bare hæve din side, hvis du vil have mig til bremse eller behandle noget yderligere. 29 00:01:13,500 --> 00:01:17,150 Men vi bruge linkede lister, fordi vi startede i C med arrays. 30 00:01:17,150 --> 00:01:20,920 Og arrays er stor, men Problemet er, at de har en fast størrelse. 31 00:01:20,920 --> 00:01:24,925 Linkede lister giver os mulighed for at oprette dynamisk størrelse datastrukturer. 32 00:01:24,925 --> 00:01:28,520 33 00:01:28,520 --> 00:01:32,320 >> Og vi har vores grundlæggende funktioner, indsætte, slette og søge. 34 00:01:32,320 --> 00:01:36,780 Og vi kan gøre indsatsen i værste fald konstant tid 35 00:01:36,780 --> 00:01:39,140 hvis vi bare sætte det i begyndelsen. 36 00:01:39,140 --> 00:01:45,220 Slette og søge, værste tilfælde store oh n tid. 37 00:01:45,220 --> 00:01:47,140 Så igen, bare for at vende gennem disse billeder, 38 00:01:47,140 --> 00:01:50,860 Jeg ved, vi oplevede disse sidste gang, men vi ønsker at holde styr på vores linkede liste 39 00:01:50,860 --> 00:01:53,440 ved at holde styr på leder af vores linkede liste. 40 00:01:53,440 --> 00:01:55,580 Fordi vi ved, at Hver enkelt af vores knudepunkter 41 00:01:55,580 --> 00:01:58,610 er bare at pege på den næste knudepunkt i vores linkede liste. 42 00:01:58,610 --> 00:02:00,460 >> Så det er, hvordan vi holder styr. 43 00:02:00,460 --> 00:02:02,910 Selvom disse ikke er kontinuerlige stykker af hukommelse, 44 00:02:02,910 --> 00:02:07,410 vi kan finde dem ved blot efter de forskellige pile. 45 00:02:07,410 --> 00:02:09,800 Her er vores struktur en sammenkædet liste node. 46 00:02:09,800 --> 00:02:11,440 Vi så denne sidste gang. 47 00:02:11,440 --> 00:02:13,080 Vi har vores struct node. 48 00:02:13,080 --> 00:02:14,340 Og det har to egenskaber. 49 00:02:14,340 --> 00:02:17,020 Nummer et, den faktiske værdi, vi ønsker at gemme. 50 00:02:17,020 --> 00:02:18,290 I dette tilfælde er det et heltal. 51 00:02:18,290 --> 00:02:21,100 Det kunne være en streng, det kunne være en char, hvad du vil. 52 00:02:21,100 --> 00:02:24,710 Og så er vi nødt til at holde styr på den næste node i vores linkede liste. 53 00:02:24,710 --> 00:02:29,797 Så det kommer til at være en Markøren til det næste knudepunkt. 54 00:02:29,797 --> 00:02:31,880 Hvis du var bare gør søg, som jeg sagde før, 55 00:02:31,880 --> 00:02:34,900 du er nødt til at følge dine pile ned. 56 00:02:34,900 --> 00:02:40,720 Indsættelse, ville du holde styr af, hvor resten af ​​din liste er. 57 00:02:40,720 --> 00:02:44,150 Og du ønsker at omdirigere hovedet til at pege på vores nye element, som 58 00:02:44,150 --> 00:02:46,640 i dette tilfælde er en, og derefter vil man pege 59 00:02:46,640 --> 00:02:49,480 til resten af ​​den linkede liste. 60 00:02:49,480 --> 00:02:52,996 Så igen, jeg ved, det er lidt lidt af en gentagelse fra quiz nul. 61 00:02:52,996 --> 00:02:55,370 Så vi er nødt til at være meget forsigtige om den rækkefølge, som vi 62 00:02:55,370 --> 00:03:00,390 gør disse pointings så vi ikke mister overblikket over bagsiden af ​​listen. 63 00:03:00,390 --> 00:03:04,122 OK, nogen spørgsmål med bare enkeltvis hægtede lister? 64 00:03:04,122 --> 00:03:06,060 Awesome, OK, cool. 65 00:03:06,060 --> 00:03:09,410 >> Så nu, vi kommer til at gå ind på noget bare lidt mere kompliceret, 66 00:03:09,410 --> 00:03:10,920 dobbelt hægtede lister. 67 00:03:10,920 --> 00:03:13,680 Så ud over at holde spor af den næste node, 68 00:03:13,680 --> 00:03:16,220 Vi ønsker også at holde styr af den foregående knude. 69 00:03:16,220 --> 00:03:19,580 Og det giver os mulighed for, hvis vi er på et tidspunkt i vores linkede liste, 70 00:03:19,580 --> 00:03:23,110 ikke kun gå fremad, men også gentage bagud. 71 00:03:23,110 --> 00:03:25,220 For som vi så i en enkeltvis forbundet liste, 72 00:03:25,220 --> 00:03:27,980 hvis vi var på et knudepunkt, og pludselig, besluttede vi, 73 00:03:27,980 --> 00:03:30,160 faktisk, jeg ønsker at gå til node lige før mig, 74 00:03:30,160 --> 00:03:32,034 du er nødt til at gå hele vejen tilbage til hovedet 75 00:03:32,034 --> 00:03:35,710 og gentage gennem indtil du har fundet node, du søgte. 76 00:03:35,710 --> 00:03:37,680 >> Så det gør tingene lidt lettere, som vi er 77 00:03:37,680 --> 00:03:39,670 forsøger at gentage gennem vores forbundet liste. 78 00:03:39,670 --> 00:03:47,870 Men det kræver, at vi holde styr på en mere pointer, så endnu en node stjerne. 79 00:03:47,870 --> 00:03:50,830 Okay, så her kommer den sjove del. 80 00:03:50,830 --> 00:03:55,600 Vi kommer til at øve gennemføre fjerne for dobbelt hægtede lister. 81 00:03:55,600 --> 00:03:58,660 Så det er noget, der er helt fair spil for quizzen. 82 00:03:58,660 --> 00:04:00,750 Det dukkede op på tidligere quizzer. 83 00:04:00,750 --> 00:04:04,220 Så absolut være forberedt at kode en lille smule i C. 84 00:04:04,220 --> 00:04:07,900 Glem ikke, at alle denne sjove PHP og JavaScript, 85 00:04:07,900 --> 00:04:10,560 vi stadig nødt til at huske at gøre C. Så børste op på det 86 00:04:10,560 --> 00:04:12,146 hvis du føler rusten. 87 00:04:12,146 --> 00:04:14,580 >> Okay, lad os se om vi kan gøre det. 88 00:04:14,580 --> 00:04:16,312 OK, cool. 89 00:04:16,312 --> 00:04:18,600 Så vi kommer til at prøve at redigere lige her, 90 00:04:18,600 --> 00:04:20,707 og forhåbentlig går som planlagt. 91 00:04:20,707 --> 00:04:23,915 Okay, er der nogen ønsker at give mig et bud på, hvordan jeg skal starte? 92 00:04:23,915 --> 00:04:27,030 Den eneste forudsætning er jeg beslutningstagning er, at jeg allerede 93 00:04:27,030 --> 00:04:30,180 har en struktur defineret, jeg viste på sidste side, 94 00:04:30,180 --> 00:04:31,420 på det sidste dias. 95 00:04:31,420 --> 00:04:39,250 Og jeg opbevare lederen af ​​min tilknytning liste i nogle pointer kaldet listen. 96 00:04:39,250 --> 00:04:42,190 Er der nogen der ønsker at få mig i gang? 97 00:04:42,190 --> 00:04:45,410 >> PUBLIKUM: kan du oprette en ny node til at ringe gennem listen? 98 00:04:45,410 --> 00:04:46,410 >> HANNAH: Awesome, så vi kommer til at skabe 99 00:04:46,410 --> 00:04:47,951 en ny node til at kravle gennem listen. 100 00:04:47,951 --> 00:04:48,570 Jeg kan godt lide det. 101 00:04:48,570 --> 00:04:50,799 Jeg vil bare kalde det pointer, hvis det er OK. 102 00:04:50,799 --> 00:04:52,340 Og hvor skulle det oprindeligt starte? 103 00:04:52,340 --> 00:04:57,280 104 00:04:57,280 --> 00:04:59,840 >> PUBLIKUM: Sandsynligvis på lederen af ​​listen. 105 00:04:59,840 --> 00:05:00,590 HANNAH: Beautiful. 106 00:05:00,590 --> 00:05:03,670 Vi ønsker at starte i spidsen, som Jeg sagde vil blive gemt i listen. 107 00:05:03,670 --> 00:05:04,170 Awesome. 108 00:05:04,170 --> 00:05:05,220 Så vidt, så godt. 109 00:05:05,220 --> 00:05:08,260 Og nu, vores mål er at gentage gennem listen 110 00:05:08,260 --> 00:05:12,870 indtil vi finder noden med værdien n, som vi ønsker at slette. 111 00:05:12,870 --> 00:05:13,540 OK? 112 00:05:13,540 --> 00:05:15,910 >> Så nu er den del, hvor vi ønsker at gentage gennem. 113 00:05:15,910 --> 00:05:19,488 Kan nogen foreslå en måde at gentage gennem? 114 00:05:19,488 --> 00:05:20,979 >> PUBLIKUM: en løkke. 115 00:05:20,979 --> 00:05:21,840 >> HANNAH: en løkke. 116 00:05:21,840 --> 00:05:22,620 Jeg elsker det. 117 00:05:22,620 --> 00:05:25,550 Konkret kan vi prøve en while-løkke. 118 00:05:25,550 --> 00:05:30,919 OK, og vi ved, at vi har nået i slutningen af ​​vores liste, når hvad? 119 00:05:30,919 --> 00:05:32,210 PUBLIKUM: Når markøren er null. 120 00:05:32,210 --> 00:05:33,418 HANNAH: Når markøren er null. 121 00:05:33,418 --> 00:05:34,320 Smukke, jeg elsker det. 122 00:05:34,320 --> 00:05:35,110 OK, cool. 123 00:05:35,110 --> 00:05:39,300 124 00:05:39,300 --> 00:05:43,190 Så beklager, hvis mit omgivende tandbøjle er slags falde ud af skærmen. 125 00:05:43,190 --> 00:05:44,090 Vi bragte det tilbage. 126 00:05:44,090 --> 00:05:46,610 OK, cool. 127 00:05:46,610 --> 00:05:48,690 Hvad bliver det næste? 128 00:05:48,690 --> 00:05:51,950 >> Så vi ved, at vi ønsker at slette den knude, der har værdi n. 129 00:05:51,950 --> 00:05:56,340 Så lad os finde det tilfælde, hvor vi faktisk finde vores node. 130 00:05:56,340 --> 00:05:57,840 Så hvordan ville jeg tjekke det? 131 00:05:57,840 --> 00:06:02,210 Jeg ville bare sige, hvis pointer, og derefter, hvis jeg ønsker at få værdien af ​​pointer, 132 00:06:02,210 --> 00:06:08,940 Jeg kan bare pil n, lig n, parameteren 133 00:06:08,940 --> 00:06:14,490 at vi gav til denne funktion, node, som vi ønsker at rent faktisk slettes. 134 00:06:14,490 --> 00:06:17,090 Eventuelle spørgsmål op indtil her? 135 00:06:17,090 --> 00:06:18,360 Ok. 136 00:06:18,360 --> 00:06:24,140 OK, så lad os nu tegne et hurtigt billede i bestyrelsen for at visualisere det. 137 00:06:24,140 --> 00:06:30,710 >> Så lad os sige at der er vores dejlige node. 138 00:06:30,710 --> 00:06:34,480 Og det har en værdi, vil jeg bare sige fire. 139 00:06:34,480 --> 00:06:40,340 Og den peger på den næste knude i vores linkede liste. 140 00:06:40,340 --> 00:06:42,220 Og der er ikke noget, før det. 141 00:06:42,220 --> 00:06:45,800 Så vi har vores tidligere peger på ingenting. 142 00:06:45,800 --> 00:06:48,110 I dette tilfælde vi peger bagud. 143 00:06:48,110 --> 00:06:50,960 OK, bare oprette min linket liste over her. 144 00:06:50,960 --> 00:06:53,630 Og vi har en liste, der peger denne struktur til at begynde med. 145 00:06:53,630 --> 00:06:57,220 146 00:06:57,220 --> 00:07:00,485 Jeg vil trække en mere for For fuldstændighedens skyld. 147 00:07:00,485 --> 00:07:04,209 148 00:07:04,209 --> 00:07:06,117 OK. 149 00:07:06,117 --> 00:07:07,480 Jeg vil påpege dette fremad. 150 00:07:07,480 --> 00:07:09,550 Og jeg vil pege at én tilbage. 151 00:07:09,550 --> 00:07:10,360 Ups, undskyld. 152 00:07:10,360 --> 00:07:12,710 Ja, fik dette tilbageskridt. 153 00:07:12,710 --> 00:07:15,548 154 00:07:15,548 --> 00:07:16,967 Gøre det igen. 155 00:07:16,967 --> 00:07:18,330 OK, der vi gå. 156 00:07:18,330 --> 00:07:19,910 Okay, fik det. 157 00:07:19,910 --> 00:07:21,780 OK, her er vores billede. 158 00:07:21,780 --> 00:07:24,860 >> OK, så vi ønsker at overveje to sager. 159 00:07:24,860 --> 00:07:27,330 Det første tilfælde er, hvis knude, vi ønsker at slette 160 00:07:27,330 --> 00:07:29,420 er selve starten på vores liste. 161 00:07:29,420 --> 00:07:34,070 Og så det andet tilfælde, at vi ønsker at overveje, er, om det er andre steder. 162 00:07:34,070 --> 00:07:37,660 Jeg forstår, at dette en helt rodet tegning med alle mine sletning, 163 00:07:37,660 --> 00:07:40,400 men forhåbentlig vi vil prøve at gøre dette klart med noget kode. 164 00:07:40,400 --> 00:07:45,450 >> OK, så lad os dække sagen hvor vi fandt vores knude, 165 00:07:45,450 --> 00:07:48,900 og det er i det start af vores linkede liste. 166 00:07:48,900 --> 00:07:50,810 Nogen give mig en forslag her, hvad 167 00:07:50,810 --> 00:07:54,684 Jeg skal gøre rent faktisk at fjerne vores knude? 168 00:07:54,684 --> 00:07:55,970 Det er lidt tricky. 169 00:07:55,970 --> 00:07:56,470 OK? 170 00:07:56,470 --> 00:07:59,628 >> PUBLIKUM: Du skal tage den node, der ville være, før det 171 00:07:59,628 --> 00:08:01,794 og gøre det peger på en, der ville være efter den, 172 00:08:01,794 --> 00:08:03,004 og tage den node, ville være efter det og gøre 173 00:08:03,004 --> 00:08:04,554 det peger på den node, før det. 174 00:08:04,554 --> 00:08:05,220 HANNAH: Præcis. 175 00:08:05,220 --> 00:08:10,640 OK, så dette er tilfældet where-- vi har to sager. 176 00:08:10,640 --> 00:08:14,100 Vi har det tilfælde, hvor node, som vi leder efter 177 00:08:14,100 --> 00:08:18,270 er den forreste af listen. 178 00:08:18,270 --> 00:08:23,110 OK, og derefter sådan, at du beskrevne er ellers, ikke? 179 00:08:23,110 --> 00:08:24,500 Det er et andet sted på listen. 180 00:08:24,500 --> 00:08:27,460 181 00:08:27,460 --> 00:08:32,840 Så du siger, skal vi se på node tidligere, 182 00:08:32,840 --> 00:08:36,500 og gøre forudgående knudepunkt punkt til det næste knudepunkt. 183 00:08:36,500 --> 00:08:40,510 Så lad os sige vi er forsøger at tage ud fem 184 00:08:40,510 --> 00:08:43,059 i min meget rodet tegning herovre. 185 00:08:43,059 --> 00:08:47,530 Vi ønsker at sikre, at fire nu peger på seks. 186 00:08:47,530 --> 00:08:49,590 Fire næste peger på seks. 187 00:08:49,590 --> 00:08:52,150 Og seks tidligere peger på fire. 188 00:08:52,150 --> 00:08:53,960 Det er vores mål her, ikke? 189 00:08:53,960 --> 00:08:56,150 Dette er, hvad jeg tror du sagde bare derovre. 190 00:08:56,150 --> 00:08:58,450 >> OK, så lad os få det første stykke. 191 00:08:58,450 --> 00:09:02,300 Lad os gøre det har den tidligere pointer tidligere. 192 00:09:02,300 --> 00:09:06,550 193 00:09:06,550 --> 00:09:09,690 Så fire næste skal pege på hvad? 194 00:09:09,690 --> 00:09:13,210 195 00:09:13,210 --> 00:09:14,900 Præcis, i dette tilfælde, seks. 196 00:09:14,900 --> 00:09:18,470 Så vi bør sige pointer, næste. 197 00:09:18,470 --> 00:09:20,600 OK? 198 00:09:20,600 --> 00:09:21,150 Ok. 199 00:09:21,150 --> 00:09:24,870 Så lad os slippe af med denne grimme billede og forsøge at tegne et lidt pænere. 200 00:09:24,870 --> 00:09:29,040 201 00:09:29,040 --> 00:09:31,172 Vi har vores liste hoved her. 202 00:09:31,172 --> 00:09:36,440 203 00:09:36,440 --> 00:09:42,740 Og der peger på det første knudepunkt i vores linkede liste, som vi sagde, er fire. 204 00:09:42,740 --> 00:09:45,620 Her er vores anden node, fem. 205 00:09:45,620 --> 00:09:47,307 Og vores tredje node, seks. 206 00:09:47,307 --> 00:09:50,265 Prøver bare at trække præcis de samme billede, bare lidt mere rent. 207 00:09:50,265 --> 00:09:52,780 208 00:09:52,780 --> 00:09:56,280 OK, så fire næste oprindeligt peger på fem. 209 00:09:56,280 --> 00:09:58,620 Fem næste peger på seks. 210 00:09:58,620 --> 00:10:00,170 Seks tidligere punkter til fem. 211 00:10:00,170 --> 00:10:02,470 Og fem tidligere peger på fire. 212 00:10:02,470 --> 00:10:03,360 Så meget pænere! 213 00:10:03,360 --> 00:10:04,530 OK, cool. 214 00:10:04,530 --> 00:10:07,770 >> Så nu, hvad vi gjorde bare her, denne linje kode, 215 00:10:07,770 --> 00:10:12,680 som siger pointer tidligere næste, så hvad betyder det? 216 00:10:12,680 --> 00:10:17,540 Det betyder, hvis vi kigger på fem, gå til forrige node, 217 00:10:17,540 --> 00:10:21,970 og det er ud bør nu punkt til fem næste. 218 00:10:21,970 --> 00:10:27,840 Så det væsentlige, hvad det er at gøre er, der er slette denne pil 219 00:10:27,840 --> 00:10:29,640 og gøre det springe lige over fem. 220 00:10:29,640 --> 00:10:31,360 Er det klart? 221 00:10:31,360 --> 00:10:33,200 Jeg ved, det kan være en lille smule mangelfulde. 222 00:10:33,200 --> 00:10:34,480 Jeg ser nogle hoved nikker. 223 00:10:34,480 --> 00:10:35,390 Det er godt. 224 00:10:35,390 --> 00:10:36,670 OK, cool. 225 00:10:36,670 --> 00:10:39,590 Nu, hvad er næste skridt? 226 00:10:39,590 --> 00:10:42,060 >> Jeg har nulstillet den næste. 227 00:10:42,060 --> 00:10:45,297 Nu som andre pil skal jeg ændre? 228 00:10:45,297 --> 00:10:46,130 Denne ene lige her. 229 00:10:46,130 --> 00:10:47,560 Seks tidligere. 230 00:10:47,560 --> 00:10:50,620 Vi ønsker ikke seks tidligere at pege på fem længere. 231 00:10:50,620 --> 00:10:54,580 Vi vil have den til at pege på fire. 232 00:10:54,580 --> 00:10:56,190 Er det billede giver mening? 233 00:10:56,190 --> 00:10:58,370 Så nu kan vi faktisk tage fem ud. 234 00:10:58,370 --> 00:10:59,370 Så lad os få det stykke. 235 00:10:59,370 --> 00:11:03,390 236 00:11:03,390 --> 00:11:11,180 Hvad skal jeg gøre, før jeg nulstille seks tidligere til fire? 237 00:11:11,180 --> 00:11:14,360 Nogen ideer der? 238 00:11:14,360 --> 00:11:17,369 >> PUBLIKUM: Frigør noden mellem dem ved at sætte det til null? 239 00:11:17,369 --> 00:11:17,910 HANNAH: Cool. 240 00:11:17,910 --> 00:11:21,100 Definitely, vores endelige mål er vil være at befri node. 241 00:11:21,100 --> 00:11:22,490 Så vi kan gøre det lige her. 242 00:11:22,490 --> 00:11:23,540 Gratis pointer. 243 00:11:23,540 --> 00:11:24,810 Absolut. 244 00:11:24,810 --> 00:11:29,160 Men selv inden da, lad os bare-- vores mål ret 245 00:11:29,160 --> 00:11:38,730 her er at sætte pointer næste tidligere lig pointer tidligere. 246 00:11:38,730 --> 00:11:40,760 Jeg ved, det er at få dækket op. 247 00:11:40,760 --> 00:11:45,440 OK, lad os take-- cool. 248 00:11:45,440 --> 00:11:46,990 Kan alle se denne bundlinjen? 249 00:11:46,990 --> 00:11:47,840 Eller er det super lille? 250 00:11:47,840 --> 00:11:50,430 251 00:11:50,430 --> 00:11:54,300 >> Så før vi udfører denne linje her, vi ønsker 252 00:11:54,300 --> 00:11:58,375 at sikre, at pointer næste er ikke null. 253 00:11:58,375 --> 00:12:00,500 For hvis pointer næste er null, hvilken slags fejl 254 00:12:00,500 --> 00:12:02,727 vil jeg får, når jeg forsøger at referere til en null-pointer? 255 00:12:02,727 --> 00:12:03,560 PUBLIKUM: Seg skyld. 256 00:12:03,560 --> 00:12:05,660 HANNAH: En seg fejl, smukke. 257 00:12:05,660 --> 00:12:09,690 OK, så hvis det ikke er null, så vi kan nulstille. 258 00:12:09,690 --> 00:12:14,420 Og vi har seks point igen til fire. 259 00:12:14,420 --> 00:12:17,440 Spørgsmål indtil dette punkt? 260 00:12:17,440 --> 00:12:17,940 Ja? 261 00:12:17,940 --> 00:12:19,814 >> Publikum: I dit første hvis erklæring, vel 262 00:12:19,814 --> 00:12:23,817 betyder at have pilen næste, eller [uhørligt]? 263 00:12:23,817 --> 00:12:25,150 HANNAH: Jeg mente pointer pil n. 264 00:12:25,150 --> 00:12:30,270 Så dybest set, hvad jeg prøver at gøre er sige, den aktuelle node, at jeg er 265 00:12:30,270 --> 00:12:34,100 iteration i den nuværende node, Jeg kigger på, jeg lagring i markøren. 266 00:12:34,100 --> 00:12:37,630 Og jeg vil gerne vide pointer er værdi, som i dette tilfælde er n. 267 00:12:37,630 --> 00:12:39,500 Og jeg ønsker at se, er knudepunktet Jeg søger 268 00:12:39,500 --> 00:12:42,790 for knuden jeg sigter at slette? 269 00:12:42,790 --> 00:12:47,657 Så det er derfor, vi har her pointer n. 270 00:12:47,657 --> 00:12:49,857 >> PUBLIKUM: Så pilen går til n, du angive værdien 271 00:12:49,857 --> 00:12:52,058 og opbevar det i en knude kaldet n? 272 00:12:52,058 --> 00:12:55,410 273 00:12:55,410 --> 00:12:58,820 >> HANNAH: Så det er ligesom om jeg er gå gennem denne linkede liste 274 00:12:58,820 --> 00:13:00,310 og peger på fem. 275 00:13:00,310 --> 00:13:03,600 Hvis jeg ønsker at få denne værdi, hvis Jeg ønsker at få dette nummer, 5, 276 00:13:03,600 --> 00:13:06,400 Jeg skal gøre pointer pil n. 277 00:13:06,400 --> 00:13:06,900 Cool? 278 00:13:06,900 --> 00:13:07,900 Ja. 279 00:13:07,900 --> 00:13:11,200 >> PUBLIKUM: er N navnet på variablen? 280 00:13:11,200 --> 00:13:11,700 HANNAH: Ja. 281 00:13:11,700 --> 00:13:14,870 Så hvis vi vende tilbage en slide, n er navnet 282 00:13:14,870 --> 00:13:18,660 af værdien indersiden af knude i vores linkede liste. 283 00:13:18,660 --> 00:13:21,510 Og jeg ved, det kan få lidt smule forvirrende, fordi vi også 284 00:13:21,510 --> 00:13:24,680 ringer de ting at vi ønsker at slette n. 285 00:13:24,680 --> 00:13:26,717 Så det er her, at en linje kommer fra. 286 00:13:26,717 --> 00:13:27,671 Ja? 287 00:13:27,671 --> 00:13:31,010 >> Publikum: Hvad har du [Uhørligt] hvordan de virker? 288 00:13:31,010 --> 00:13:33,872 289 00:13:33,872 --> 00:13:35,780 En pointer [uhørligt]? 290 00:13:35,780 --> 00:13:37,520 >> HANNAH: Sure. 291 00:13:37,520 --> 00:13:40,027 Taler du om-- hvilken linje? 292 00:13:40,027 --> 00:13:41,526 PUBLIKUM: Den sidste linje [uhørligt]. 293 00:13:41,526 --> 00:13:44,280 294 00:13:44,280 --> 00:13:45,250 >> HANNAH: Sure, OK. 295 00:13:45,250 --> 00:13:48,540 Så lad os se på billedet i For at forsøge at forklare dette. 296 00:13:48,540 --> 00:13:51,030 Jeg er ked af, for den kamera, var spørgsmålet 297 00:13:51,030 --> 00:13:54,580 kan vi forklare pointer arrow næste pointer forrige. 298 00:13:54,580 --> 00:14:01,510 OK, så lad os sige, at vi er på fem og vores mål er at slette fem. 299 00:14:01,510 --> 00:14:07,240 Så pointer næste, hvilke af disse tre knudepunkter betyder det giver os? 300 00:14:07,240 --> 00:14:10,840 Det bringer os til den sjette node, ikke? 301 00:14:10,840 --> 00:14:16,490 >> OK, så nu vi beder for de seks tidligere. 302 00:14:16,490 --> 00:14:17,060 OK? 303 00:14:17,060 --> 00:14:20,210 Og vi nulstille dette at være lig med fire, 304 00:14:20,210 --> 00:14:23,214 som tilfældigvis fem tidligere. 305 00:14:23,214 --> 00:14:25,180 Jeg ved, det er super svært at holde styr på. 306 00:14:25,180 --> 00:14:29,286 Jeg virkelig anbefale dig tegne billeder hvis du får et spørgsmål som dette. 307 00:14:29,286 --> 00:14:30,242 Ja? 308 00:14:30,242 --> 00:14:32,617 >> PUBLIKUM: Er grunden til, at vi ikke har en [uhørligt]? 309 00:14:32,617 --> 00:14:37,430 310 00:14:37,430 --> 00:14:38,570 >> HANNAH: Præcis. 311 00:14:38,570 --> 00:14:44,800 Så spørgsmålet var, hvorfor vi ikke nødt til at tjekke her? 312 00:14:44,800 --> 00:14:48,160 Hvorfor har vi ikke brug for at kontrollere, at pointer tidligere er ikke lig med null? 313 00:14:48,160 --> 00:14:50,070 Og det er fordi vi har allerede udskilt 314 00:14:50,070 --> 00:14:52,490 tilfældet, hvis markørens i begyndelsen. 315 00:14:52,490 --> 00:14:54,060 Meget godt spørgsmål. 316 00:14:54,060 --> 00:14:56,880 Alt andet om dette? 317 00:14:56,880 --> 00:14:57,380 OK, cool. 318 00:14:57,380 --> 00:14:58,360 Så lad os afslutte den op. 319 00:14:58,360 --> 00:14:59,890 Vi er der næsten. 320 00:14:59,890 --> 00:15:01,310 >> Så hvad nu hvis det er i spidsen? 321 00:15:01,310 --> 00:15:03,360 Hvad hvis i stedet for forsøger at slette fem, 322 00:15:03,360 --> 00:15:06,240 vi faktisk ønskede at slette fire? 323 00:15:06,240 --> 00:15:07,270 Hvad ville jeg gøre? 324 00:15:07,270 --> 00:15:09,610 Nå, jeg ønsker at nulstille mit hoved til hvad? 325 00:15:09,610 --> 00:15:14,288 326 00:15:14,288 --> 00:15:15,585 Råbe det ud? 327 00:15:15,585 --> 00:15:16,710 PUBLIKUM: Den ene efter den. 328 00:15:16,710 --> 00:15:17,460 HANNAH: Beautiful. 329 00:15:17,460 --> 00:15:26,430 OK, så vi ønsker liste, der skal pege til uanset vores pointer næste node er. 330 00:15:26,430 --> 00:15:29,040 Godt. 331 00:15:29,040 --> 00:15:30,810 Og bare for fuldstændighedens s skyld, vi ville 332 00:15:30,810 --> 00:15:35,590 vil kontrollere, at så længe vores liste ikke er nul, så længe vores liste er ikke 333 00:15:35,590 --> 00:15:42,730 tom, så vi vil sætte vores tidligere lig med nul. 334 00:15:42,730 --> 00:15:46,960 335 00:15:46,960 --> 00:15:50,230 Spørgsmål hidtil? 336 00:15:50,230 --> 00:15:53,205 Et skridt væk from--? 337 00:15:53,205 --> 00:15:55,530 >> PUBLIKUM: Ville det være, hvis Listen er ikke lig med null? 338 00:15:55,530 --> 00:15:56,950 >> HANNAH: Ja, du er helt rigtigt. 339 00:15:56,950 --> 00:15:58,130 Jeg er så ked af det. 340 00:15:58,130 --> 00:16:00,040 Er liste er ikke lig med null. 341 00:16:00,040 --> 00:16:01,915 Awesome. 342 00:16:01,915 --> 00:16:04,245 Forsøger at bringe alt dette på skærmen. 343 00:16:04,245 --> 00:16:06,870 Det er lidt afsporet. 344 00:16:06,870 --> 00:16:07,730 Beklager, gutter. 345 00:16:07,730 --> 00:16:11,874 Og sidst men ikke mindst, alle vi skal gøre, er tilbage. 346 00:16:11,874 --> 00:16:12,840 OK. 347 00:16:12,840 --> 00:16:15,400 Det var meget proppet i virkelig hurtigt. 348 00:16:15,400 --> 00:16:16,800 Tag en anden til at se dette over. 349 00:16:16,800 --> 00:16:18,216 Fortæl mig, hvis du har spørgsmål. 350 00:16:18,216 --> 00:16:20,232 351 00:16:20,232 --> 00:16:20,732 Ja? 352 00:16:20,732 --> 00:16:26,940 >> PUBLIKUM: Hvis listen er på hoved, then-- vente, nevermind. 353 00:16:26,940 --> 00:16:27,700 >> HANNAH: OK, godt. 354 00:16:27,700 --> 00:16:30,987 Så dette er, hvis liste er i spidsen, vi fjerner det til hvad vi indsat. 355 00:16:30,987 --> 00:16:31,486 Ja? 356 00:16:31,486 --> 00:16:33,777 >> PUBLIKUM: Kan du forklare det først, hvis sætningen igen? 357 00:16:33,777 --> 00:16:36,149 Hvis markøren til n er lig med n? 358 00:16:36,149 --> 00:16:36,690 HANNAH: Sure. 359 00:16:36,690 --> 00:16:42,780 Så vores mål om hele denne funktion er at slette den node, har værdien n. 360 00:16:42,780 --> 00:16:47,460 Så hvis vi finder, som vi er iteration gennem vores liste, 361 00:16:47,460 --> 00:16:51,770 node med værdien n, det er den, vi ønsker at slette. 362 00:16:51,770 --> 00:16:57,286 Så alle de sletning sker inde i det store, hvis erklæring. 363 00:16:57,286 --> 00:16:58,593 Giver det mening? 364 00:16:58,593 --> 00:16:59,480 Cool. 365 00:16:59,480 --> 00:16:59,990 Ja? 366 00:16:59,990 --> 00:17:02,864 >> PUBLIKUM: Måske du bare ikke kan se det, men ikke du også brug for en linje 367 00:17:02,864 --> 00:17:06,024 til at rulle gennem listen? 368 00:17:06,024 --> 00:17:06,690 HANNAH: Awesome. 369 00:17:06,690 --> 00:17:10,896 Lad os bringe dette en lille smule op, og vi smider denne ret i bunden. 370 00:17:10,896 --> 00:17:13,282 371 00:17:13,282 --> 00:17:15,490 Måske bestyrelsen ville har været en lidt bedre idé. 372 00:17:15,490 --> 00:17:17,829 Så hvordan ville jeg flytte pointer fremad? 373 00:17:17,829 --> 00:17:20,184 >> PUBLIKUM: Pointer lig pointer plus en. 374 00:17:20,184 --> 00:17:21,599 >> HANNAH: Beautiful. 375 00:17:21,599 --> 00:17:25,050 Så det giver os mulighed for fortsætte iteration igennem. 376 00:17:25,050 --> 00:17:26,251 OK. 377 00:17:26,251 --> 00:17:27,750 PUBLIKUM: Ville der være et andet? 378 00:17:27,750 --> 00:17:29,028 HANNAH: En mere tid? 379 00:17:29,028 --> 00:17:32,444 PUBLIKUM: Ville der være en anden efter den store gamle hvis 380 00:17:32,444 --> 00:17:35,519 erklæring [uhørligt]? 381 00:17:35,519 --> 00:17:36,310 HANNAH: Hvilken del? 382 00:17:36,310 --> 00:17:38,350 Jeg er ked af. 383 00:17:38,350 --> 00:17:41,800 >> PUBLIKUM: The traversal, bør der ikke være en anden? 384 00:17:41,800 --> 00:17:43,550 HANNAH: du absolut kunne have en anden. 385 00:17:43,550 --> 00:17:46,930 Fordi jeg har en tilbagevenden ret der, behøver du ikke en anden. 386 00:17:46,930 --> 00:17:48,760 Men ja, godt spørgsmål. 387 00:17:48,760 --> 00:17:50,170 OK, ja? 388 00:17:50,170 --> 00:17:52,878 PUBLIKUM: Kan vi tænker på pointer der bevæger sig gennem listen 389 00:17:52,878 --> 00:17:56,610 som at tage på værdien af hvert knudepunkt på listen? 390 00:17:56,610 --> 00:18:00,650 Eller skal vi tænke på det som slags ekstern til listen? 391 00:18:00,650 --> 00:18:02,350 >> HANNAH: Enten er fint, synes jeg. 392 00:18:02,350 --> 00:18:05,880 Den måde jeg forestiller mig det er Jeg siger, OK, jeg er markøren. 393 00:18:05,880 --> 00:18:06,520 Og det er mig. 394 00:18:06,520 --> 00:18:07,150 Dette er min hånd. 395 00:18:07,150 --> 00:18:09,960 Jeg har tænkt mig at pege på de forskellige ting, som jeg gerne vil gentage gennem. 396 00:18:09,960 --> 00:18:12,270 Først vil jeg pege i hovedet på listen. 397 00:18:12,270 --> 00:18:14,144 Og det fortæller mig jeg er kommer til at pege på fire. 398 00:18:14,144 --> 00:18:18,060 Og så mig, at være uden for listen, Jeg kan pege på hvert af disse elementer. 399 00:18:18,060 --> 00:18:19,520 Så jeg tror på mig selv som pointer. 400 00:18:19,520 --> 00:18:21,645 PUBLIKUM: Så når du sletter et af de elementer, 401 00:18:21,645 --> 00:18:23,404 du sletter dig selv, så at sige. 402 00:18:23,404 --> 00:18:24,070 HANNAH: Præcis. 403 00:18:24,070 --> 00:18:25,920 Så du sletter ting du peger på. 404 00:18:25,920 --> 00:18:28,340 Så i det eksempel, vi så, hvor vi er 405 00:18:28,340 --> 00:18:31,670 forsøger at slette fem, når jeg peger på fem, 406 00:18:31,670 --> 00:18:34,200 Jeg ønsker at slette den ting jeg peger på. 407 00:18:34,200 --> 00:18:35,870 Helt rigtigt. 408 00:18:35,870 --> 00:18:36,577 Ja? 409 00:18:36,577 --> 00:18:39,410 PUBLIKUM: Har vi taget hånd om den tilfælde, hvor n ikke er på listen? 410 00:18:39,410 --> 00:18:40,460 HANNAH: Hvis n ikke er på listen? 411 00:18:40,460 --> 00:18:43,501 Alle, der kommer til at ske, er at du er vil gentage gennem og ITERATE- 412 00:18:43,501 --> 00:18:47,616 igennem, og så er du nødt at komme til at pointer at være null, 413 00:18:47,616 --> 00:18:48,990 og derefter vil I blive gjort. 414 00:18:48,990 --> 00:18:50,812 >> PUBLIKUM: Så gør vi at returnere noget? 415 00:18:50,812 --> 00:18:51,520 HANNAH: vi kunne. 416 00:18:51,520 --> 00:18:54,500 Den måde, at hvis defineret dette funktion, jeg bare sige, at det vender tilbage 417 00:18:54,500 --> 00:18:55,770 ugyldig uanset. 418 00:18:55,770 --> 00:18:58,360 Men du kunne have noget ligesom vender tilbage et heltal, 419 00:18:58,360 --> 00:19:00,920 og har det tilbage negativ 1, hvis det mislykkes. 420 00:19:00,920 --> 00:19:03,070 Noget i den retning. 421 00:19:03,070 --> 00:19:04,494 Spørgsmål med-- ja? 422 00:19:04,494 --> 00:19:05,410 Publikum: [uhørligt]? 423 00:19:05,410 --> 00:19:05,993 HANNAH: Beklager? 424 00:19:05,993 --> 00:19:07,419 Publikum: [uhørligt]? 425 00:19:07,419 --> 00:19:07,960 HANNAH: Sure. 426 00:19:07,960 --> 00:19:11,730 Så det er actual-- når vi har gjort alt dette arbejde for at flytte 427 00:19:11,730 --> 00:19:16,530 alle disse pile rundt, hele vores Målet var at slippe af med knude 428 00:19:16,530 --> 00:19:18,230 at vi leder efter. 429 00:19:18,230 --> 00:19:21,610 Så i dette tilfælde, hvilket frigør pointer, hvis jeg peger på fem, 430 00:19:21,610 --> 00:19:24,670 det er ligesom at slette denne midterste knude. 431 00:19:24,670 --> 00:19:27,250 Det er den frie pointer del. 432 00:19:27,250 --> 00:19:29,090 Det mening? 433 00:19:29,090 --> 00:19:31,390 >> PUBLIKUM: Så selv troede du gjorde ikke [uhørligt]? 434 00:19:31,390 --> 00:19:36,060 >> HANNAH: Så vi overtog i begyndelsen vi havde nogle liste, der var already-- 435 00:19:36,060 --> 00:19:37,220 de havde sat det sammen. 436 00:19:37,220 --> 00:19:39,761 Så for at konstruere dette liste, mĺ have de [uhørligt]. 437 00:19:39,761 --> 00:19:42,190 438 00:19:42,190 --> 00:19:42,750 Cool. 439 00:19:42,750 --> 00:19:44,490 Noget andet med dette? 440 00:19:44,490 --> 00:19:46,386 Ja? 441 00:19:46,386 --> 00:19:49,204 >> Publikum: Hvad hvis listen ikke lig med nul linje? 442 00:19:49,204 --> 00:19:49,704 [Uhørligt]? 443 00:19:49,704 --> 00:19:52,289 444 00:19:52,289 --> 00:19:53,080 HANNAH: Lige her? 445 00:19:53,080 --> 00:19:53,840 PUBLIKUM: Ja. 446 00:19:53,840 --> 00:19:57,370 HANNAH: OK, er alt jeg gør er jeg bare at sørge for 447 00:19:57,370 --> 00:20:03,250 at før jeg forsøger at dereference liste, før jeg forsøger at få adgang til tidligere, 448 00:20:03,250 --> 00:20:07,210 Jeg vil være sikker på, at det ikke er null, så jeg ikke får en seg fejl. 449 00:20:07,210 --> 00:20:08,400 Cool. 450 00:20:08,400 --> 00:20:10,820 >> OK, jeg ved det var helt en masse at komme igennem. 451 00:20:10,820 --> 00:20:14,950 Så dette dias vil være stilles til rådighed for dig. 452 00:20:14,950 --> 00:20:17,341 Så du kan gå igennem det nærmere. 453 00:20:17,341 --> 00:20:17,841 Ja? 454 00:20:17,841 --> 00:20:19,749 >> PUBLIKUM: Hvorfor listen [uhørligt]? 455 00:20:19,749 --> 00:20:24,129 456 00:20:24,129 --> 00:20:24,670 HANNAH: Sure. 457 00:20:24,670 --> 00:20:27,390 Så liste virkelig peger på dette element lige her, 458 00:20:27,390 --> 00:20:29,200 det første element på listen. 459 00:20:29,200 --> 00:20:30,748 Så det kan ikke have en tidligere. 460 00:20:30,748 --> 00:20:31,736 Ja? 461 00:20:31,736 --> 00:20:35,194 >> PUBLIKUM: Er markøren point til den samme adresse i hukommelsen? 462 00:20:35,194 --> 00:20:38,404 Er det peger på den samme adresse i hukommelsen som knudepunktet 463 00:20:38,404 --> 00:20:40,640 at det er peger på? 464 00:20:40,640 --> 00:20:43,865 >> HANNAH: Ja, den peger til dette knudepunkt i hukommelsen. 465 00:20:43,865 --> 00:20:47,190 >> PUBLIKUM: Højre, så når du [uhørligt]? 466 00:20:47,190 --> 00:20:50,580 >> HANNAH: På en måde ja. 467 00:20:50,580 --> 00:20:51,280 OK. 468 00:20:51,280 --> 00:20:52,997 Okay, lad os gå sammen med dette. 469 00:20:52,997 --> 00:20:55,330 Og hvis du har flere spørgsmål, holde sig omkring i slutningen, 470 00:20:55,330 --> 00:20:57,130 og vi kan gå igennem det igen. 471 00:20:57,130 --> 00:20:58,120 OK, cool. 472 00:20:58,120 --> 00:21:00,490 Nu får vi at komme videre at hash tabeller, forsøger, 473 00:21:00,490 --> 00:21:04,940 og træer, som du fik super kender i p-sæt fem, speller. 474 00:21:04,940 --> 00:21:11,020 >> Så hash tabel er blot en array med enkeltvis hægtede lister 475 00:21:11,020 --> 00:21:14,050 eller dobbelt hægtede lister kommer ud af det. 476 00:21:14,050 --> 00:21:16,380 Så vi har en form af associative array. 477 00:21:16,380 --> 00:21:21,280 Og hvordan ved vi, hvilke af disse arrays spande at komme ind, 478 00:21:21,280 --> 00:21:24,137 vi bruger en hash-funktion. 479 00:21:24,137 --> 00:21:26,470 Så i dette tilfælde, kan alle gætte, hvad hashfunktionen 480 00:21:26,470 --> 00:21:28,636 ville være lige baseret på nogle af input og output? 481 00:21:28,636 --> 00:21:31,392 482 00:21:31,392 --> 00:21:33,194 >> PUBLIKUM: Brev nummer i alfabetet. 483 00:21:33,194 --> 00:21:33,860 HANNAH: Præcis. 484 00:21:33,860 --> 00:21:36,160 Det bare sætter dem i alfabetisk rækkefølge. 485 00:21:36,160 --> 00:21:39,280 Alt, hvad der starter med en A sættes i den første spand. 486 00:21:39,280 --> 00:21:43,340 Alt med en B sættes i anden spand, så videre, og så videre. 487 00:21:43,340 --> 00:21:45,620 Awesome, OK. 488 00:21:45,620 --> 00:21:48,980 Og en hash-funktion er nogen funktion, der tager i et ord 489 00:21:48,980 --> 00:21:51,910 og vil fortælle dig, hvad spand det hører hjemme i. 490 00:21:51,910 --> 00:21:55,150 Så hvilken post i vores matrix det hører hjemme i. 491 00:21:55,150 --> 00:21:58,080 >> Så hver gang jeg giver min hash fungere et ord, 492 00:21:58,080 --> 00:22:00,660 Det skal fortælle mig det samme placere hver eneste gang. 493 00:22:00,660 --> 00:22:03,270 Så hvis vi bruger hash-funktionen fra forrige dias 494 00:22:03,270 --> 00:22:05,950 hvor vi sortering af første bogstav i alfabetet, 495 00:22:05,950 --> 00:22:08,230 hver gang jeg giver min hash-funktion "æble" 496 00:22:08,230 --> 00:22:10,180 Det skal altid give mig tilbage 0. 497 00:22:10,180 --> 00:22:12,890 Så hvis jeg har et æble at sætte i min hash tabel, 498 00:22:12,890 --> 00:22:17,700 hvis jeg giver "æble" til min hash-funktionen, det skal sige, gå sætte det i spand 0. 499 00:22:17,700 --> 00:22:19,980 Hvis jeg leder efter en æble i min hash tabel 500 00:22:19,980 --> 00:22:24,340 og jeg siger, hvor der kan æble levende, du spørger din hash-funktionen. 501 00:22:24,340 --> 00:22:26,900 Og det siger, gå til PDF Bucket 0. 502 00:22:26,900 --> 00:22:29,150 Okay? 503 00:22:29,150 --> 00:22:32,660 Spørgsmål med hash-funktioner? 504 00:22:32,660 --> 00:22:34,570 Awesome. 505 00:22:34,570 --> 00:22:37,320 >> Her er en lidt mere detaljeret forklaring 506 00:22:37,320 --> 00:22:39,570 af, hvad et hash-funktion kunne se ud. 507 00:22:39,570 --> 00:22:42,230 508 00:22:42,230 --> 00:22:42,960 Ok. 509 00:22:42,960 --> 00:22:45,960 Nu er problemet med hash funktioner er i en ideel verden, 510 00:22:45,960 --> 00:22:48,870 ville vi kun have én ting i hver spand. 511 00:22:48,870 --> 00:22:50,900 Men i virkeligheden, er der ikke kun ét ord 512 00:22:50,900 --> 00:22:54,280 der starter med A. Der er ikke kun et ord, der starter med B. So 513 00:22:54,280 --> 00:22:56,960 i dette tilfælde, hvis vi pludselig får "bær" 514 00:22:56,960 --> 00:22:58,710 og vi ønsker at sætte det ind i vores hash tabel, 515 00:22:58,710 --> 00:23:03,640 og vi ser, åh, nej, banan er der allerede, Hvad skal vi gøre? 516 00:23:03,640 --> 00:23:05,900 >> Nå, har vi to muligheder. 517 00:23:05,900 --> 00:23:07,990 Den første mulighed er lineær probing, som 518 00:23:07,990 --> 00:23:11,100 betyder bare gå finde den næste tomme spand. 519 00:23:11,100 --> 00:23:14,100 Gå finde den næste tomme række post. 520 00:23:14,100 --> 00:23:15,750 Og bare sætte "bær" der. 521 00:23:15,750 --> 00:23:18,880 Så jeg ved, det er meningen at gå med banan i spand én. 522 00:23:18,880 --> 00:23:22,155 Men bare sætte det i spand tre, fordi skovlen tre er tom. 523 00:23:22,155 --> 00:23:24,806 524 00:23:24,806 --> 00:23:26,680 En anden mulighed er sandsynligvis hvad du implementerer 525 00:23:26,680 --> 00:23:29,220 i din p-sæt, hvor du havde separat kæde. 526 00:23:29,220 --> 00:23:33,990 Så hver af dine spande, hver af dine array elementer, 527 00:23:33,990 --> 00:23:38,410 ikke kun holder én ord, men faktisk besidder en pointer til en liste med ord. 528 00:23:38,410 --> 00:23:41,880 Så hvis du havde banan i din hashtabel 529 00:23:41,880 --> 00:23:44,740 og du pludselig ville at tilføje bær, ikke noget problem. 530 00:23:44,740 --> 00:23:51,110 Blot tilføje bær på til slutningen, eller til begyndelsen af ​​din linkede liste. 531 00:23:51,110 --> 00:23:54,040 OK, awesome. 532 00:23:54,040 --> 00:23:58,490 Spørgsmål med hash tabeller før vi går på? 533 00:23:58,490 --> 00:23:59,850 >> Ok. 534 00:23:59,850 --> 00:24:01,070 Træer og forsøger. 535 00:24:01,070 --> 00:24:07,980 OK, så det var en anden mulighed til gennemførelse af ordbog. 536 00:24:07,980 --> 00:24:09,100 Du kunne have gjort en chance. 537 00:24:09,100 --> 00:24:13,420 Så det er en særlig form for træ, opfører sig som en multi-niveau hash tabellen. 538 00:24:13,420 --> 00:24:16,862 Så vil du se billedet hvor du har en array, 539 00:24:16,862 --> 00:24:19,320 peger på en flok arrays dette punkt til en flok arrays 540 00:24:19,320 --> 00:24:20,390 dette punkt til en flok arrays. 541 00:24:20,390 --> 00:24:23,140 Og vi vil se nøjagtigt, hvad der ville se ud på en kommende dias. 542 00:24:23,140 --> 00:24:26,070 Og mere generelt, et træ er bare en datastruktur 543 00:24:26,070 --> 00:24:29,710 hvor dataene er organiseret i nogle hierarki. 544 00:24:29,710 --> 00:24:32,610 Så hvor vi så vi har en slags forståelse 545 00:24:32,610 --> 00:24:36,130 af et øverste niveau, et næste niveau, et næste niveau, et næste niveau. 546 00:24:36,130 --> 00:24:39,690 Så det er nok mest tydelig med nogle konkrete eksempler. 547 00:24:39,690 --> 00:24:40,880 Så her er vores træ. 548 00:24:40,880 --> 00:24:42,970 Du kan se, at det har særlige niveauer 549 00:24:42,970 --> 00:24:45,480 at vi starter med at root node, en. 550 00:24:45,480 --> 00:24:47,640 Og vi kan gå ned gennem vores træ. 551 00:24:47,640 --> 00:24:50,730 552 00:24:50,730 --> 00:24:53,910 >> Et binært træ er en bestemt type træ. 553 00:24:53,910 --> 00:24:56,770 Og den eneste specifikation et binært træ 554 00:24:56,770 --> 00:25:01,130 er, at hvert knudepunkt har højst to blade. 555 00:25:01,130 --> 00:25:03,960 Så du kommer ikke til at se nogen af disse knudepunkter har tre eller fire 556 00:25:03,960 --> 00:25:06,880 eller en anden antal blade. 557 00:25:06,880 --> 00:25:11,310 Og selv da mere specifik er en binær søgning træ 558 00:25:11,310 --> 00:25:18,010 hvor hver knude til venstre for node vil have en værdi mindre. 559 00:25:18,010 --> 00:25:21,180 Og hver værdi til den ret vil være større. 560 00:25:21,180 --> 00:25:26,900 Så hvis du ser 44 er på vores rod, til venstre, 11, 22 og 33 561 00:25:26,900 --> 00:25:28,940 er alle mindre end vores rod. 562 00:25:28,940 --> 00:25:33,890 Og til højre er alle numre bigger-- 66, 55, og 77. 563 00:25:33,890 --> 00:25:37,380 Og denne egenskab gælder på alle niveauer i træet. 564 00:25:37,380 --> 00:25:42,690 >> Så når vi går ned til 22, 11 og 33, stadig 11 565 00:25:42,690 --> 00:25:46,950 er mindre end 22 og 33 er større end 22. 566 00:25:46,950 --> 00:25:50,160 Og dette gør det nemmere at søge for hvis vi leder efter et nummer, 567 00:25:50,160 --> 00:25:53,877 Vi ved præcis, hvilken gren at følge ned. 568 00:25:53,877 --> 00:25:56,210 Så dette skal minde dig lille smule af binær søgning. 569 00:25:56,210 --> 00:25:56,967 Ja? 570 00:25:56,967 --> 00:25:58,835 >> PUBLIKUM: Så når du er beskriver binære, 571 00:25:58,835 --> 00:26:00,587 De sagde, at det har højst to blade? 572 00:26:00,587 --> 00:26:01,170 HANNAH: Mm-hm. 573 00:26:01,170 --> 00:26:02,580 PUBLIKUM: Kunne det have mindre? 574 00:26:02,580 --> 00:26:03,121 HANNAH: Ja. 575 00:26:03,121 --> 00:26:06,720 Så lad os sige, for eksempel, du havde ikke et lige antal ting 576 00:26:06,720 --> 00:26:11,791 og du kunne ikke fylde alle dine blade, det er fint, hvis man har en. 577 00:26:11,791 --> 00:26:12,290 OK? 578 00:26:12,290 --> 00:26:12,789 Awesome. 579 00:26:12,789 --> 00:26:15,930 Andre spørgsmål på træerne? 580 00:26:15,930 --> 00:26:16,670 OK. 581 00:26:16,670 --> 00:26:20,110 >> Tilbage til vores forsøg, da jeg talte om lidt tidligere, 582 00:26:20,110 --> 00:26:23,900 hvordan vi har disse multi-level arrays. 583 00:26:23,900 --> 00:26:26,280 Så i dette tilfælde, vi starter på toppen. 584 00:26:26,280 --> 00:26:29,030 Og vi kan følge en given ord ned. 585 00:26:29,030 --> 00:26:30,780 Så lad os sige vi ønskede at lede efter Turing. 586 00:26:30,780 --> 00:26:34,380 Vi starter ved T, skal du følge den ned til et array, som indeholder U, 587 00:26:34,380 --> 00:26:37,350 og følg den ned, indtil vi nå denne lille delta som 588 00:26:37,350 --> 00:26:39,060 fortæller os, ja, fandt man et ord. 589 00:26:39,060 --> 00:26:43,200 590 00:26:43,200 --> 00:26:44,120 Klar på forsøger? 591 00:26:44,120 --> 00:26:48,138 Noget at gå derovre? 592 00:26:48,138 --> 00:26:48,908 Ja? 593 00:26:48,908 --> 00:26:51,866 PUBLIKUM: Er symbol på delta nødt til at besætte plads i prøve? 594 00:26:51,866 --> 00:26:54,532 HANNAH: Ja, så det ikke nødvendigvis selv behøver at være en delta. 595 00:26:54,532 --> 00:26:57,760 Men vi har brug for nogle måde at fortælle vores computer-- sorry, 596 00:26:57,760 --> 00:27:01,130 så vi ved, at TUR er ikke et ord. 597 00:27:01,130 --> 00:27:04,180 Fordi lad os sige, vi ikke har dette begreb et delta, dette begreb 598 00:27:04,180 --> 00:27:09,850 af lykønskninger, fandt man et ord, det ville gå igennem og gentage T-U-R, 599 00:27:09,850 --> 00:27:11,300 og derefter sige, awesome, jeg fandt det! 600 00:27:11,300 --> 00:27:12,670 Det skal være et ord. 601 00:27:12,670 --> 00:27:13,720 Men det er virkelig ikke. 602 00:27:13,720 --> 00:27:15,310 Vi ønsker hele Turing at være et ord. 603 00:27:15,310 --> 00:27:17,760 Så vi skal have noget på ende, der siger, tillykke, 604 00:27:17,760 --> 00:27:19,051 du har fundet en legitim ord. 605 00:27:19,051 --> 00:27:21,680 PUBLIKUM: Så hvis du havde ligesom 26 bogstaver i alfabetet, 606 00:27:21,680 --> 00:27:24,560 ville du rent faktisk har 27 nøgler i din prøve? 607 00:27:24,560 --> 00:27:26,010 >> HANNAH: Awesome, ja. 608 00:27:26,010 --> 00:27:28,210 Så faktisk mener jeg, at vil være på det næste dias. 609 00:27:28,210 --> 00:27:29,440 Ta-da! 610 00:27:29,440 --> 00:27:32,880 Hvor hvis du har en knude i dit forsøg, er du 611 00:27:32,880 --> 00:27:35,800 vil have 27 børn i stedet for 26. 612 00:27:35,800 --> 00:27:39,010 613 00:27:39,010 --> 00:27:40,050 Eventuelle spørgsmål med det? 614 00:27:40,050 --> 00:27:40,550 Ja? 615 00:27:40,550 --> 00:27:44,569 PUBLIKUM: Hvorfor forsøger tager op, så meget plads [uhørligt], som du går? 616 00:27:44,569 --> 00:27:47,629 Hvorfor anses det for at være [uhørligt]? 617 00:27:47,629 --> 00:27:48,170 HANNAH: Sure. 618 00:27:48,170 --> 00:27:48,790 Lad os gå tilbage. 619 00:27:48,790 --> 00:27:52,350 Spørgsmålet er, hvorfor er forsøger så meget større 620 00:27:52,350 --> 00:27:54,620 end noget som en hash tabel. 621 00:27:54,620 --> 00:27:57,790 Så for hver af disse niveauer, selv om de ikke er trukket her, 622 00:27:57,790 --> 00:28:01,250 du skal have alle 26 tegn. 623 00:28:01,250 --> 00:28:04,420 Og grunden til, at du ikke kan sige, åh, men ligesom for Turing, jeg 624 00:28:04,420 --> 00:28:07,570 behøver ikke at have nogen af ​​de samme ting på niveauet for U. Well, 625 00:28:07,570 --> 00:28:11,390 Hvis pludselig du ønskede at tilføje noget, der var ligesom T-H, 626 00:28:11,390 --> 00:28:14,800 du behøver at have den evne til at tilføje det ord. 627 00:28:14,800 --> 00:28:17,330 Så for hver enkelt bogstav, du kommer til at have 628 00:28:17,330 --> 00:28:19,730 at have en flok arrays kommer ud af det. 629 00:28:19,730 --> 00:28:24,060 Så du kan se, hvordan det ville få virkelig stor, rigtig hurtigt. 630 00:28:24,060 --> 00:28:26,560 Andre spørgsmål? 631 00:28:26,560 --> 00:28:28,980 Ok. 632 00:28:28,980 --> 00:28:29,832 Ja? 633 00:28:29,832 --> 00:28:33,210 >> PUBLIKUM: Hvornår er forsøger hurtigere end hash tabeller? 634 00:28:33,210 --> 00:28:36,280 >> HANNAH: Hvornår er forsøger hurtigere end hash tabeller? 635 00:28:36,280 --> 00:28:39,120 Så hvis du havde en rigtig dårlig hash-funktionen. 636 00:28:39,120 --> 00:28:41,840 Så lad os sige, jeg var ligesom, her er din hash-funktionen. 637 00:28:41,840 --> 00:28:43,660 Hvad ord Ligegyldigt du giver mig, jeg er altid 638 00:28:43,660 --> 00:28:47,740 kommer til at sætte det i array indgang 0. 639 00:28:47,740 --> 00:28:52,000 Og så ender vi med blot at sætte alt i én stor lang linkede liste. 640 00:28:52,000 --> 00:28:58,740 Og så et opslag tid ville tage i værste fald n hvis det er i slutningen af ​​vores liste. 641 00:28:58,740 --> 00:29:03,150 Med prøve, vi bare nødt til at gentage gennem bogstaverne i ordet. 642 00:29:03,150 --> 00:29:07,080 Så selv om vi har tilføjet en flok flere ord til vores forsøg, 643 00:29:07,080 --> 00:29:09,620 Det ville ikke tage os længere at finde et bestemt ord. 644 00:29:09,620 --> 00:29:11,750 >> Alt, hvad vi skal gøre, er, for eksempel, i dette tilfælde, 645 00:29:11,750 --> 00:29:17,170 Lad os sige, at vi leder efter zoom, ville vi bare nødt til at gentage over 646 00:29:17,170 --> 00:29:19,840 Z-O-O-M, fire bogstaver. 647 00:29:19,840 --> 00:29:22,250 Så det er bare at Længden af ​​ordet zoom. 648 00:29:22,250 --> 00:29:25,400 Det er ligegyldigt, hvor mange flere ord vi sætter i denne prøve. 649 00:29:25,400 --> 00:29:30,225 Vi kan altid få det i disse fire trin. 650 00:29:30,225 --> 00:29:31,215 Awesome. 651 00:29:31,215 --> 00:29:32,205 Ja? 652 00:29:32,205 --> 00:29:34,185 >> PUBLIKUM: Så [uhørligt] er et array, ikke? 653 00:29:34,185 --> 00:29:35,322 >> HANNAH: Mm-hm. 654 00:29:35,322 --> 00:29:37,155 PUBLIKUM: Hvis du er søger [uhørligt] 655 00:29:37,155 --> 00:29:40,929 ville du nødt til at gå igennem dit array for at finde [uhørligt]? 656 00:29:40,929 --> 00:29:41,470 HANNAH: Sure. 657 00:29:41,470 --> 00:29:44,000 PUBLIKUM: Ikke at tage længere tid? 658 00:29:44,000 --> 00:29:46,370 HANNAH: Hvis jeg har tænkt mig at sige, at min array er altid 659 00:29:46,370 --> 00:29:49,250 kommer til at være A, B, C, D, E, F, G, bla bla bla, 660 00:29:49,250 --> 00:29:51,630 så hvis jeg altid ved, det er i nøjagtig samme rækkefølge, 661 00:29:51,630 --> 00:29:53,880 hvis jeg altid ved, det er i alfabetisk rækkefølge, 662 00:29:53,880 --> 00:29:57,860 Jeg kan bare sige O er nummer så og så i alfabetet. 663 00:29:57,860 --> 00:29:59,620 Bare springe til dette sted. 664 00:29:59,620 --> 00:30:01,860 Fordi husk, med arrays, kan vi få adgang 665 00:30:01,860 --> 00:30:06,590 ethvert element af denne matrix i konstant tid, hvis vi ved, hvor vi leder efter. 666 00:30:06,590 --> 00:30:09,080 667 00:30:09,080 --> 00:30:09,580 Ja? 668 00:30:09,580 --> 00:30:12,005 >> PUBLIKUM: På den tidligere glide [uhørligt] 27, 669 00:30:12,005 --> 00:30:14,430 men 26 for den første. 670 00:30:14,430 --> 00:30:15,400 >> HANNAH: Beklager? 671 00:30:15,400 --> 00:30:18,800 >> PUBLIKUM: Er ikke den første et 0, så ville det ikke være 26? 672 00:30:18,800 --> 00:30:24,900 >> HANNAH: Sure, så når vi siger 27, det er vil give os indeks 0 til 26. 673 00:30:24,900 --> 00:30:28,220 Men hvis du rent faktisk tæller dem ud, går det at være 27. 674 00:30:28,220 --> 00:30:30,007 Godt spørgsmål. 675 00:30:30,007 --> 00:30:30,590 Ellers noget? 676 00:30:30,590 --> 00:30:31,200 Ja? 677 00:30:31,200 --> 00:30:34,420 >> PUBLIKUM: Så er forsøger langsommere end hash tabeller? 678 00:30:34,420 --> 00:30:37,920 >> HANNAH: Forsøg vil være, i teori, hurtigere end hash tabeller 679 00:30:37,920 --> 00:30:39,760 men fylder mere hukommelse. 680 00:30:39,760 --> 00:30:40,534 Ja? 681 00:30:40,534 --> 00:30:41,450 Publikum: [uhørligt]? 682 00:30:41,450 --> 00:30:45,770 683 00:30:45,770 --> 00:30:47,484 >> HANNAH: Jeg er ked af, jeg ikke høre dig. 684 00:30:47,484 --> 00:30:48,400 Publikum: [uhørligt]. 685 00:30:48,400 --> 00:30:51,250 686 00:30:51,250 --> 00:30:54,100 Fra 0 til 25 giver dig 26. 687 00:30:54,100 --> 00:30:56,958 >> HANNAH 0 til 25 ville give dig 26, højre. 688 00:30:56,958 --> 00:30:58,457 >> PUBLIKUM: Og så [uhørligt]. 689 00:30:58,457 --> 00:30:59,040 HANNAH: Right. 690 00:30:59,040 --> 00:31:04,760 Så antallet vi angivelse er antallet af ting i vores array. 691 00:31:04,760 --> 00:31:07,260 Så hvis vi har 27, er det vil give os 0 692 00:31:07,260 --> 00:31:10,620 gennem 26, hvilket vil give os plads til, i dette tilfælde, 693 00:31:10,620 --> 00:31:12,770 Jeg er ikke inklusive en apostrof. 694 00:31:12,770 --> 00:31:17,040 Så vi får 0 til 25 er de første 26 bogstaver i alfabetet, 695 00:31:17,040 --> 00:31:18,990 eller alle 26 bogstaver i alfabetet. 696 00:31:18,990 --> 00:31:21,190 Og så det sidste ting, ved indgang 26, er 697 00:31:21,190 --> 00:31:24,598 vil være check mærke eller delta. 698 00:31:24,598 --> 00:31:26,960 Ellers noget? 699 00:31:26,960 --> 00:31:29,130 Awesome. 700 00:31:29,130 --> 00:31:30,020 Mistet min plads. 701 00:31:30,020 --> 00:31:31,020 OK, cool. 702 00:31:31,020 --> 00:31:33,240 >> Så vi allerede inde på det. 703 00:31:33,240 --> 00:31:37,430 Men den store afvejningen mellem lande og hash-tabeller 704 00:31:37,430 --> 00:31:39,720 er der forsøger levere i teorien konstant ser op 705 00:31:39,720 --> 00:31:42,890 gange, men bruger en hel masse hukommelse. 706 00:31:42,890 --> 00:31:46,495 Okay, nu har vi lidt mindre komplicerede strukturer, 707 00:31:46,495 --> 00:31:49,640 og vi vil gøres med C, og vi vil flytte til højre ad. 708 00:31:49,640 --> 00:31:51,930 >> Så stakke, vi så dette i foredrag, hvor du 709 00:31:51,930 --> 00:31:55,020 have noget som en stablen af ​​bakker, hvor 710 00:31:55,020 --> 00:31:57,330 det sidste, du sætter på stakken går 711 00:31:57,330 --> 00:31:59,500 at være den første ting du tager ud. 712 00:31:59,500 --> 00:32:02,880 Så det er det, der virkelig definerer en stak er, at det sidste, du lægger på 713 00:32:02,880 --> 00:32:06,080 vil være den første ting du tager ud. 714 00:32:06,080 --> 00:32:09,279 Og den terminologi, som vi bruger hvis vi kommer til at sætte noget, 715 00:32:09,279 --> 00:32:12,070 hvis vi vil tilføje noget til vores stack, vi kalder at skubbe. 716 00:32:12,070 --> 00:32:14,970 Og hvis vi tager noget off, vi kalder det popping. 717 00:32:14,970 --> 00:32:17,080 Og hvis vi skal gennemføre en stak, vi 718 00:32:17,080 --> 00:32:20,660 skal være sikker på at holde styr på både størrelse og kapacitet. 719 00:32:20,660 --> 00:32:24,940 Så det samlede antal elementer, vi kan holde og det nuværende antal elementer 720 00:32:24,940 --> 00:32:27,880 at vi holder. 721 00:32:27,880 --> 00:32:29,885 >> Og meget ens, har vi køer. 722 00:32:29,885 --> 00:32:34,510 Og den eneste forskel er i stedet for med stakke, 723 00:32:34,510 --> 00:32:37,630 vi sagde det sidste, vi lægger på er det første, vi tager ud. 724 00:32:37,630 --> 00:32:40,940 Så med køer, den første vi sætte i 725 00:32:40,940 --> 00:32:43,129 bliver den første vi tager ud. 726 00:32:43,129 --> 00:32:45,420 Så det er ligesom, hvis du er faktisk foring op i en butik 727 00:32:45,420 --> 00:32:48,140 og du bliver hjulpet, så den første person på linje 728 00:32:48,140 --> 00:32:50,880 skal være den første person, der skal hjælpes. 729 00:32:50,880 --> 00:32:52,220 Så det ville være en kø. 730 00:32:52,220 --> 00:32:55,880 >> Så vi har brug for at holde styr på størrelse, kapacitet, og hoved da vi er 731 00:32:55,880 --> 00:33:01,130 kommer til at tage alle ud foran af listen i stedet for ryggen. 732 00:33:01,130 --> 00:33:03,480 Spørgsmål om det? 733 00:33:03,480 --> 00:33:06,330 Eventuelle C spørgsmål, der generer dig? 734 00:33:06,330 --> 00:33:09,590 Datastrukturer, noget af det sjove ting? 735 00:33:09,590 --> 00:33:10,530 Okay, cool. 736 00:33:10,530 --> 00:33:14,120 Så jeg vil udlevere dem til Alison til hoppe ind i nogle mere programmering. 737 00:33:14,120 --> 00:33:15,965 >> ALISON: Åh, vil vi se. 738 00:33:15,965 --> 00:33:17,370 Vi vil se, hvor godt jeg gør her. 739 00:33:17,370 --> 00:33:21,410 OK, jeg har tænkt mig at forsøge at flyve gennem det her, gutter. 740 00:33:21,410 --> 00:33:24,540 Hannah gik meget i dybde på alle hendes ting. 741 00:33:24,540 --> 00:33:26,900 Jeg har tænkt mig at forsøge at give dig en hurtig blast oversigt 742 00:33:26,900 --> 00:33:31,290 så vi kan komme til Davin med alle de sjove JavaScript og sikkerhedsmæssige ting 743 00:33:31,290 --> 00:33:33,380 at måske du faktisk ønsker at høre mere om. 744 00:33:33,380 --> 00:33:36,600 >> OK, da Hannah sagde, hvis du har spørgsmål, 745 00:33:36,600 --> 00:33:39,170 Jeg har tænkt mig for hurtigt, please, lad mig det vide. 746 00:33:39,170 --> 00:33:42,114 Jeg vil besvare spørgsmål efter behov. 747 00:33:42,114 --> 00:33:45,280 Så for at starte, vi kommer til at starte med sandsynligvis en af ​​de allerførste ting 748 00:33:45,280 --> 00:33:48,730 du har lært med web programmering, tilladelser. 749 00:33:48,730 --> 00:33:52,720 Så chmod, du fyre bør har været mastere på dette med alle internettet 750 00:33:52,720 --> 00:33:54,870 programmering, som du har gjort på det seneste. 751 00:33:54,870 --> 00:33:57,320 Det er egentlig bare en kommando der ændrer tilladelser 752 00:33:57,320 --> 00:34:00,779 eller tilladelser for adgang af vores filsystemet objekter. 753 00:34:00,779 --> 00:34:02,570 Selvfølgelig faktisk se disse, hvis du er 754 00:34:02,570 --> 00:34:04,910 har nogen problemer med disse under dit problem sæt, 755 00:34:04,910 --> 00:34:11,460 du kan have brugt ls -l, hvilket er lang, at få visningen slags som det, 756 00:34:11,460 --> 00:34:14,209 hvor du faktisk se alle tilladelserne til en fil. 757 00:34:14,209 --> 00:34:16,850 758 00:34:16,850 --> 00:34:20,732 >> Og virkelig, vi bare kommer til at gå gennem temmelig hurtigt lige pretty 759 00:34:20,732 --> 00:34:21,940 meget, hvad hver af disse betyder. 760 00:34:21,940 --> 00:34:24,481 Så vi har d lige her, som bare står for biblioteket. 761 00:34:24,481 --> 00:34:26,790 762 00:34:26,790 --> 00:34:31,739 Naturligvis lige her ser vi rwx, som er læsbar, skrivbar og eksekverbare. 763 00:34:31,739 --> 00:34:37,090 Disse kunne også være repræsenteret som bits, som vi vil komme ind på næste side. 764 00:34:37,090 --> 00:34:40,699 Så hver triade, at vi så her, så det er tre triader. 765 00:34:40,699 --> 00:34:48,120 Vi har rwx, r intet X og R intet x for denne første fil. 766 00:34:48,120 --> 00:34:49,690 Det er denne generelle struktur. 767 00:34:49,690 --> 00:34:50,940 >> Så vi har nogle mappe. 768 00:34:50,940 --> 00:34:53,999 Vi har nogle brugergruppe med disse tilladelser. 769 00:34:53,999 --> 00:34:57,040 Nogle gruppe, der har disse tilladelser, og en verden, der har en tilladelse. 770 00:34:57,040 --> 00:34:59,420 Du kan tænke på disse som en triade. 771 00:34:59,420 --> 00:35:01,130 Du kan tænke på disse som tre bits. 772 00:35:01,130 --> 00:35:04,060 Så de kan holde værdier hvor som helst fra 0 op 773 00:35:04,060 --> 00:35:07,350 til 7, hvilket er grunden til tider Vi havde du chmod 774 00:35:07,350 --> 00:35:17,510 600 i stedet for chmod RW uanset. 775 00:35:17,510 --> 00:35:19,170 Vi vil komme ind et eksempel der. 776 00:35:19,170 --> 00:35:24,260 Men dybest set, kan du tror af disse som enten lige rwx, 777 00:35:24,260 --> 00:35:28,520 eller du kan tænke på dem som nogle nummer, hvor denne første her 778 00:35:28,520 --> 00:35:31,480 repræsenterer et tal mellem 0 og 7, denne anden 779 00:35:31,480 --> 00:35:33,970 repræsenterer et tal mellem 0 og 7, og den tredje 780 00:35:33,970 --> 00:35:38,245 repræsenterer et tal mellem 0 og 7, OK? 781 00:35:38,245 --> 00:35:42,700 >> r har en værdi på 4. w har en værdi på 2, og x 782 00:35:42,700 --> 00:35:49,230 har en værdi på 1, hvilket er grunden til dette tilladelse her ville blive chmod 700. 783 00:35:49,230 --> 00:35:53,520 Fordi der i dette tilfælde her, det siger vi har den første bit der er vendt på. 784 00:35:53,520 --> 00:35:55,380 Så vi har 4 for læsning. 785 00:35:55,380 --> 00:35:58,730 Den anden bit vendes om for w, hvilket er 2, så nu har vi 6. 786 00:35:58,730 --> 00:36:02,070 Og den tredje bit vendes på for x, som er 1, så vi får syv. 787 00:36:02,070 --> 00:36:04,820 Og selvfølgelig vores gruppe og vores verden er hver 0. 788 00:36:04,820 --> 00:36:07,770 Så det er også svarende til chmod 700. 789 00:36:07,770 --> 00:36:12,081 Og jeg vil helt sikkert forsøge at forstå mapping mellem dem. 790 00:36:12,081 --> 00:36:14,080 Jeg er ikke sikker på, om det har komme op på en quiz før, 791 00:36:14,080 --> 00:36:18,590 men det ville være en spørgsmål, som jeg kan spørge. 792 00:36:18,590 --> 00:36:22,110 >> Bare en lille smule går selv længere ind chmod her, her 793 00:36:22,110 --> 00:36:27,730 er den meget generelle strukturen af ​​en chmod opkald. 794 00:36:27,730 --> 00:36:29,500 Så selvfølgelig har vi chmod her. 795 00:36:29,500 --> 00:36:34,410 Referencer, hvad det henviser til, er der giver vi disse tilladelser til 796 00:36:34,410 --> 00:36:36,570 eller som vi tager disse tilladelser væk fra. 797 00:36:36,570 --> 00:36:44,330 Så vi har en her i tilladelserne, ligesom vi har givet dig chmod et plus x, 798 00:36:44,330 --> 00:36:45,440 som vi vil se snart. 799 00:36:45,440 --> 00:36:48,460 a betyder bare at give disse specifikke tilladelser til alle. 800 00:36:48,460 --> 00:36:49,600 Giv dem til alle. 801 00:36:49,600 --> 00:36:55,370 Så du kunne meget vel have u plus x eller g plus x eller o plus x eller flere 802 00:36:55,370 --> 00:36:55,870 deraf. 803 00:36:55,870 --> 00:36:59,280 Så første del er altid vil være referencer. 804 00:36:59,280 --> 00:37:03,220 Hvem giver vi disse tilladelser til, eller som vi tager dem væk fra? 805 00:37:03,220 --> 00:37:04,850 >> Den anden er operatør. 806 00:37:04,850 --> 00:37:07,350 Så du fyre har det meste behandlet plus. 807 00:37:07,350 --> 00:37:12,140 Dette giver tilladelser til hvem du giver dem, 808 00:37:12,140 --> 00:37:14,840 mens minus, logisk, fjerner dem. 809 00:37:14,840 --> 00:37:16,880 Så intet også forfærdeligt der. 810 00:37:16,880 --> 00:37:23,060 Og så tilstande er, hvad vi talte om med læsning, skrivning, eller udførelse. 811 00:37:23,060 --> 00:37:29,070 Så et plus x betyder at give eksekverbare tilladelser til alle. 812 00:37:29,070 --> 00:37:33,430 Og så, selvfølgelig, på hvilken specifik fil eller mappe. 813 00:37:33,430 --> 00:37:33,980 OK? 814 00:37:33,980 --> 00:37:36,010 Alle godt med chmod? 815 00:37:36,010 --> 00:37:37,850 Ikke alt for dårlig? 816 00:37:37,850 --> 00:37:42,417 >> OK, så HTML, nogen af ​​jer er gammel nok at-- MySpace alder? 817 00:37:42,417 --> 00:37:44,750 Jeg sendte det til min afdeling, og bogstaveligt talt halvdelen af ​​de mennesker 818 00:37:44,750 --> 00:37:45,790 kiggede på mig som om jeg var skør. 819 00:37:45,790 --> 00:37:47,498 Og jeg var ligesom, gutter, vi er ikke så gammel. 820 00:37:47,498 --> 00:37:48,910 Kom. 821 00:37:48,910 --> 00:37:53,360 Så HyperText Markup Language, Det er ærligt bare en måde for dig 822 00:37:53,360 --> 00:37:57,990 at vise visse ting på nettet. 823 00:37:57,990 --> 00:37:59,210 Så det er et kodesprog. 824 00:37:59,210 --> 00:38:00,640 Det er ikke et scriptsprog. 825 00:38:00,640 --> 00:38:02,160 Der er ingen logik i det. 826 00:38:02,160 --> 00:38:05,710 Det er simpelthen at ændre måde noget vises. 827 00:38:05,710 --> 00:38:07,670 OK, så det er en vigtig skelnen at gøre. 828 00:38:07,670 --> 00:38:12,030 Det betragtes som et kodesprog, ikke et scriptsprog. 829 00:38:12,030 --> 00:38:15,100 >> Så her har vi vores HTML-tags. 830 00:38:15,100 --> 00:38:20,390 På denne slide er formentlig de fleste af de dem, som du bør kende 831 00:38:20,390 --> 00:38:22,390 og være virkelig komfortabel med. 832 00:38:22,390 --> 00:38:25,700 Så selvfølgelig har vi vores HTML-tag, som 833 00:38:25,700 --> 00:38:29,930 betegner, at alt i mellem disse to vil være HTML. 834 00:38:29,930 --> 00:38:33,070 Vi har nogle link, som naturligvis vil give dig 835 00:38:33,070 --> 00:38:34,990 et link til en ekstern webside. 836 00:38:34,990 --> 00:38:37,520 Nogle titel, inden for vores hoved her. 837 00:38:37,520 --> 00:38:40,020 Og vi har vores krop med H1, som er en header, 838 00:38:40,020 --> 00:38:42,260 så det vil gøre det nice og fed og større. 839 00:38:42,260 --> 00:38:46,040 Og så har vi nogle p, som er et afsnit. 840 00:38:46,040 --> 00:38:49,000 Du bør nok vide og være fortrolig med ting 841 00:38:49,000 --> 00:38:54,030 gerne, hvordan du indsætter et billede, er der andre header klasser? 842 00:38:54,030 --> 00:38:57,240 Jeg vil absolut være komfortable med div. 843 00:38:57,240 --> 00:39:00,840 Så disse har de fleste mærker at du skal være fortrolig med. 844 00:39:00,840 --> 00:39:04,370 Men selvfølgelig, som med alt i CS 50, listen er ikke udtømmende. 845 00:39:04,370 --> 00:39:08,200 Så sørg for at børste op på det. 846 00:39:08,200 --> 00:39:13,260 >> CSS, så CSS, hvis nogen af ​​jer ser min seminar fra to uger siden, 847 00:39:13,260 --> 00:39:16,250 er egentlig bare en måde at style din webside? 848 00:39:16,250 --> 00:39:18,950 OK, så vi har nogle kodesprog. 849 00:39:18,950 --> 00:39:23,220 HTML, der tager sig af netop den tekst og hvor det kunne være på siden. 850 00:39:23,220 --> 00:39:25,760 Men CSS er virkelig, hvad gør det temmelig. 851 00:39:25,760 --> 00:39:30,690 Du kunne have disse i din HTML filer, men som vi vil tale om senere, 852 00:39:30,690 --> 00:39:32,660 Jeg er temmelig sikker på, det måske være den næste dias, det 853 00:39:32,660 --> 00:39:35,620 er almindelig praksis, og faktisk praksis, som vi virkelig opmuntre, 854 00:39:35,620 --> 00:39:40,670 for dig at holde dem adskilt, når vi taler om MVC, og at hele paradigme. 855 00:39:40,670 --> 00:39:42,490 Det er virkelig, hvad det indføres i. 856 00:39:42,490 --> 00:39:46,110 >> Så CSS er bare en måde at gøre tingene se pænt ud. 857 00:39:46,110 --> 00:39:50,500 De ting her, ligesom krop og #title og .info, 858 00:39:50,500 --> 00:39:54,340 disse kaldes selektorer og hvad de gør, er de vælger bestemte ting 859 00:39:54,340 --> 00:39:59,260 i din HTML-fil og anvende uanset stil, 860 00:39:59,260 --> 00:40:04,090 uanset slags ting, du ønsker, til det specifikke element i din web 861 00:40:04,090 --> 00:40:04,590 side. 862 00:40:04,590 --> 00:40:08,820 Så her har vi en baggrundsfarve og en farve 863 00:40:08,820 --> 00:40:12,450 og en skrifttype, der bliver anvendes til, hvad der er i kroppen. 864 00:40:12,450 --> 00:40:15,530 Så hvis vi kiggede tilbage her, det vil ikke gælde for titlen. 865 00:40:15,530 --> 00:40:22,340 Det vil kun gælde for det, der er i disse krop selektorer, OK? 866 00:40:22,340 --> 00:40:25,250 >> Med titlen her, det er vil være det samme, 867 00:40:25,250 --> 00:40:28,410 farven på teksten bliver blå er kun vil 868 00:40:28,410 --> 00:40:33,870 at påvirke det, der er inden for titel selektorer. 869 00:40:33,870 --> 00:40:36,580 Samt info her, teksten vil være pink, 870 00:40:36,580 --> 00:40:38,600 uanset info, som er lige her. 871 00:40:38,600 --> 00:40:40,860 Så det eneste, ville være lyserød på denne side 872 00:40:40,860 --> 00:40:44,100 er dato, Mandag 17 november, 2014. 873 00:40:44,100 --> 00:40:48,770 OK, så CSS er bare en måde at have mere kontrol over-- ja? 874 00:40:48,770 --> 00:40:51,850 >> PUBLIKUM: Hvorfor har du at bruge hash med titlen? 875 00:40:51,850 --> 00:40:55,170 >> HANNAH: Næste slide, lover! 876 00:40:55,170 --> 00:40:56,810 Vi får der. 877 00:40:56,810 --> 00:40:59,830 Så det er derfor, vi er nødt til at bruge hash. 878 00:40:59,830 --> 00:41:03,429 Så selektorer tage tre vigtigste formularer, som vi taler med jer om. 879 00:41:03,429 --> 00:41:05,595 Jeg fyou ønsker at lære mere, der er masser derude. 880 00:41:05,595 --> 00:41:07,540 Der er stor CSS dokumentation. 881 00:41:07,540 --> 00:41:12,680 Der er et mærkenavn, som har at gøre med blot din normale tags i HTML. 882 00:41:12,680 --> 00:41:17,210 Så H1, p, div, H2, den slags ting. 883 00:41:17,210 --> 00:41:20,320 Og vi kan bare nævne dem som er. 884 00:41:20,320 --> 00:41:22,650 Så som vi ser her med krop, er det en normal tag. 885 00:41:22,650 --> 00:41:26,660 Så vi kan bare sætte kroppen, når vi taler i vores CSS-fil. 886 00:41:26,660 --> 00:41:29,730 >> Med titel, hele grunden vi har denne hash er, at vi har, hvad der er 887 00:41:29,730 --> 00:41:31,010 betragtes som en ID. 888 00:41:31,010 --> 00:41:35,400 Så et ID bør altid være unik i din HTML-side 889 00:41:35,400 --> 00:41:37,930 så når du er henvise til det, du 890 00:41:37,930 --> 00:41:41,990 ved, at du kun henvise til en bestemt ting. 891 00:41:41,990 --> 00:41:46,270 Så i dette tilfælde her, med vores h1 her, CS 50 anmeldelser session, 892 00:41:46,270 --> 00:41:47,810 vi har en id på titlen. 893 00:41:47,810 --> 00:41:54,280 Så for at bare henvise til, at stykke af vores HTML, gør vi en hash titel. 894 00:41:54,280 --> 00:41:58,080 Lige efter sædvane id'er udpeget med en hash foran dem. 895 00:41:58,080 --> 00:42:01,650 På samme måde kan vi se, info her er en klasse. 896 00:42:01,650 --> 00:42:06,070 Og så klasse med CSS er udpeget som en prik klasse 897 00:42:06,070 --> 00:42:08,895 eller dot hvad denne klasse er. 898 00:42:08,895 --> 00:42:10,850 Så i dette tilfælde her, det er info. 899 00:42:10,850 --> 00:42:13,090 >> Så jeg tager det tilbage. 900 00:42:13,090 --> 00:42:16,200 Begge disse ville være pink til vores CSS her 901 00:42:16,200 --> 00:42:18,430 fordi de begge har en klasse af info. 902 00:42:18,430 --> 00:42:23,070 Og i vores CSS-fil, har vi udpeget at noget med en klasse af info 903 00:42:23,070 --> 00:42:24,120 er lyserødt. 904 00:42:24,120 --> 00:42:25,968 Giver det mening? 905 00:42:25,968 --> 00:42:27,435 Ja? 906 00:42:27,435 --> 00:42:30,731 >> PUBLIKUM: Hvis du skulle gøre alt i kroppen hvide, 907 00:42:30,731 --> 00:42:32,814 og så skal du prøve at lave noget inde i det blå, 908 00:42:32,814 --> 00:42:34,770 ville det give problemer? 909 00:42:34,770 --> 00:42:37,310 >> HANNAH: Så CSS er cascading style sheets. 910 00:42:37,310 --> 00:42:40,730 Så uanset hvad er mod bund forrang. 911 00:42:40,730 --> 00:42:44,080 Så hvis du gør noget med kroppen, og du gør alting hvidt, 912 00:42:44,080 --> 00:42:49,300 og så senere ændre dig titlen eller du ændre teksten i kroppen, 913 00:42:49,300 --> 00:42:50,560 det overskriver det. 914 00:42:50,560 --> 00:42:55,360 Så noget mod bund forrang. 915 00:42:55,360 --> 00:42:56,730 Ja? 916 00:42:56,730 --> 00:42:59,627 >> Publikum: Og id'er er unikke, men klasser kan være mere? 917 00:42:59,627 --> 00:43:00,210 HANNAH: Right. 918 00:43:00,210 --> 00:43:06,320 Så id'er skal være unikt, og klasserne kan henvise til så mange ting, som du gerne vil. 919 00:43:06,320 --> 00:43:07,580 Andre spørgsmål? 920 00:43:07,580 --> 00:43:09,800 Ja. 921 00:43:09,800 --> 00:43:11,210 >> Publikum: [uhørligt]. 922 00:43:11,210 --> 00:43:13,509 Jeg spekulerer på, om der gør en forskel. 923 00:43:13,509 --> 00:43:15,217 HANNAH: Jeg er ked af, hvad var spørgsmålet? 924 00:43:15,217 --> 00:43:18,960 PUBLIKUM: Der er lille "F" og kapital "F." 925 00:43:18,960 --> 00:43:21,440 HANNAH: Så forskellen mellem små "f" og kapital "F" 926 00:43:21,440 --> 00:43:22,606 bør ikke gøre en forskel. 927 00:43:22,606 --> 00:43:26,330 Så "f" vil være 15 begge veje. 928 00:43:26,330 --> 00:43:28,130 Cool, noget andet? 929 00:43:28,130 --> 00:43:29,930 Alle gode, CSS? 930 00:43:29,930 --> 00:43:30,850 Ja? 931 00:43:30,850 --> 00:43:31,790 >> PUBLIKUM: Undskyld. 932 00:43:31,790 --> 00:43:35,550 Kan du have en klasse og et ID? 933 00:43:35,550 --> 00:43:38,030 >> HANNAH: Ja, du kan. 934 00:43:38,030 --> 00:43:40,420 Ting kan have både en klasse og et ID. 935 00:43:40,420 --> 00:43:44,670 Og jeg kan varmt anbefale afprøve disse på egen hånd. 936 00:43:44,670 --> 00:43:50,480 CSS vil du lære bedst blot ved at gøre noget, meget enkel webside, 937 00:43:50,480 --> 00:43:53,440 udarbejdelse nogle CSS, og bare at se, hvordan de interagerer. 938 00:43:53,440 --> 00:43:56,970 Og du vil få en meget god, intuitiv fornemmelse for, hvordan det fungerer. 939 00:43:56,970 --> 00:43:58,810 >> OK, alle godt med CSS? 940 00:43:58,810 --> 00:44:01,280 Du alle kommer til at gøre smukke hjemmesider med CSS nu. 941 00:44:01,280 --> 00:44:05,460 OK, bedste praksis, bare ting at huske på, ting 942 00:44:05,460 --> 00:44:09,810 at-- det er derfor vi dock dig for designer og whatnot. 943 00:44:09,810 --> 00:44:11,820 Så lukke alle dine HTML-tags. 944 00:44:11,820 --> 00:44:14,840 Så hvis du har et åbent lad, der bør være en tæt krop. 945 00:44:14,840 --> 00:44:18,180 Hvis du har en åben stykke, der bør være en tæt stykke. 946 00:44:18,180 --> 00:44:19,555 Kontroller at se din side validerer. 947 00:44:19,555 --> 00:44:23,330 Du fyre bør være meget fortrolig med dette fra p-sæt syv 948 00:44:23,330 --> 00:44:26,350 med CS 50 finans med W3 validator. 949 00:44:26,350 --> 00:44:28,340 Og som jeg sagde før, en af ​​vores store paradigmer 950 00:44:28,340 --> 00:44:33,780 er at adskille din stil med CSS fra din markup, som er HTML. 951 00:44:33,780 --> 00:44:36,900 Og så, selvfølgelig, vi har denne store XKCD hernede. 952 00:44:36,900 --> 00:44:38,280 Yay, comic relief! 953 00:44:38,280 --> 00:44:41,340 >> OK, TCP / IP. 954 00:44:41,340 --> 00:44:44,650 Mellem disse og HTTP, dybest set de er begge protokoller. 955 00:44:44,650 --> 00:44:46,810 Så du kan bare tænke af dem som et sæt regler 956 00:44:46,810 --> 00:44:50,110 der regulerer, hvordan tingene flytte over internettet. 957 00:44:50,110 --> 00:44:53,410 Så transmission kontrol protokol, eller internet-protokol, 958 00:44:53,410 --> 00:44:57,280 er blot en måde at sikre, at data bliver hvor den skal hen 959 00:44:57,280 --> 00:45:00,030 og at vi ved, om vi nogensinde manglende data. 960 00:45:00,030 --> 00:45:03,520 Så hvis du fyre tænker tilbage på foredrag et par uger siden med David 961 00:45:03,520 --> 00:45:06,980 hvor vi havde fire kuverter, de blev alle nummereret som en af ​​fire, 962 00:45:06,980 --> 00:45:11,300 to til fire, tre til fire, fire af fire, det er bare et sæt regler. 963 00:45:11,300 --> 00:45:13,830 Vi sagde, OK, når vi arbejder sende mere end én pakke, 964 00:45:13,830 --> 00:45:16,610 vi kommer til at tælle det med, hvad nummer det er 965 00:45:16,610 --> 00:45:19,040 og hvor mange i alt at brugeren bør få. 966 00:45:19,040 --> 00:45:22,540 >> Og det er bare at fortælle hvem modtager data, om de 967 00:45:22,540 --> 00:45:26,120 har fået alt, eller hvis noget fik tabt undervejs. 968 00:45:26,120 --> 00:45:28,840 Og de har brug for at bede om det igen. 969 00:45:28,840 --> 00:45:31,140 Det er egentlig bare et sæt regler. 970 00:45:31,140 --> 00:45:33,650 Det er, hvordan du kan tænke på det, OK? 971 00:45:33,650 --> 00:45:37,700 Og også, det angiver den port, som jer can-- jeg kender under foredrag, 972 00:45:37,700 --> 00:45:39,170 de havde en hel liste over havne. 973 00:45:39,170 --> 00:45:41,630 Men vi har ikke dem her lige nu. 974 00:45:41,630 --> 00:45:45,290 >> Så Hypertext Transfer Protocol er, igen, det er en anden protokol. 975 00:45:45,290 --> 00:45:48,630 Så det er et andet sæt regler der styrer, i dette tilfælde, 976 00:45:48,630 --> 00:45:51,130 hvordan hypertekst overføres. 977 00:45:51,130 --> 00:45:54,340 Så det bare tillader browsere at tale med webservere. 978 00:45:54,340 --> 00:45:56,910 Og som vi sagde her, det er Ligesom den menneskelige handshaking. 979 00:45:56,910 --> 00:46:00,480 Det er bare en måde at regere hvordan webserveren er 980 00:46:00,480 --> 00:46:02,690 kommer til at interagere med din browser. 981 00:46:02,690 --> 00:46:05,660 Og vi har bare et par eksempler. 982 00:46:05,660 --> 00:46:09,100 Vi har nogle forespørgsler her hvor GET er metoden. 983 00:46:09,100 --> 00:46:13,760 Vi har HTTP 1.1, som er protokolversion for os. 984 00:46:13,760 --> 00:46:17,230 Og så, værten, hvilket er, hvad vi faktisk forsøger at få adgang. 985 00:46:17,230 --> 00:46:21,800 Og så, som du ser her, vi få noget respons med denne 200 986 00:46:21,800 --> 00:46:25,032 OK som vores HTTP-svar-kode. 987 00:46:25,032 --> 00:46:27,240 Vi har en stor liste jeg har tænkt mig at trække op på ét sekund 988 00:46:27,240 --> 00:46:29,430 at du fyre bør være bekendt med. 989 00:46:29,430 --> 00:46:35,750 Og vi har denne indholdstype tekst / HTML, som bare siger, hvilken type data 990 00:46:35,750 --> 00:46:39,990 vi modtager fra serveren, OK? 991 00:46:39,990 --> 00:46:44,230 Denne vært og dette indhold typen er en del af HTTP-headers. 992 00:46:44,230 --> 00:46:49,610 Du kan have så få eller så lidt som nødvendige for rammerne af, hvad 993 00:46:49,610 --> 00:46:50,580 du har at gøre med. 994 00:46:50,580 --> 00:46:53,371 Nogle gange vil du have en masse information, der kommer fra din server. 995 00:46:53,371 --> 00:46:56,040 Måske er de anmoder om en masse af oplysninger fra brugeren. 996 00:46:56,040 --> 00:46:57,600 Det varierer afhængigt af kontekst. 997 00:46:57,600 --> 00:47:01,144 Hvis man ser på CS 50 Undersøgelse, der er meget mere om det. 998 00:47:01,144 --> 00:47:03,060 Men vi har en masse at få igennem, så jeg har tænkt mig 999 00:47:03,060 --> 00:47:05,760 at gå bare i gang, hvis det er OK med jer? 1000 00:47:05,760 --> 00:47:07,960 Cool. 1001 00:47:07,960 --> 00:47:08,460 Hold på. 1002 00:47:08,460 --> 00:47:11,182 Jeg har definitivt at hel liste of-- hva! 1003 00:47:11,182 --> 00:47:13,140 Jeg ved ikke, hvorfor det er hele vejen herover. 1004 00:47:13,140 --> 00:47:15,660 Jeg troede, jeg flyttede bogstaveligt det, mens jeg var sitting-- 1005 00:47:15,660 --> 00:47:16,540 >> Davin: Ønsker du at lære det? 1006 00:47:16,540 --> 00:47:17,420 Eller vil du have mig til at undervise i det? 1007 00:47:17,420 --> 00:47:20,010 >> PUBLIKUM: Jeg troede, vi kunne bare vise dem til at starte med. 1008 00:47:20,010 --> 00:47:22,210 Jeg mener, du kan gå ind i dem yderligere, men jeg 1009 00:47:22,210 --> 00:47:26,030 troede det gjort mere fornuftigt, da jeg var bare taler om HTTP status. 1010 00:47:26,030 --> 00:47:28,200 Så her er hele listen. 1011 00:47:28,200 --> 00:47:31,730 Jeg gætte, hvad der kommer til at ske, er Davin kommer til at gå ind i dem senere. 1012 00:47:31,730 --> 00:47:35,330 Men der er en hel liste, en preview af smag til at komme. 1013 00:47:35,330 --> 00:47:41,640 OK, vi vil blow-- dette foregår at være en PHP lynkursus som ingen anden. 1014 00:47:41,640 --> 00:47:44,874 >> Så PHP, Hypertext Preprocessor, det er en rekursiv Backronym, 1015 00:47:44,874 --> 00:47:46,540 hvilket betyder, at det blev navngivet noget andet. 1016 00:47:46,540 --> 00:47:49,050 Og så de var ligesom, dette ikke rigtig mening. 1017 00:47:49,050 --> 00:47:52,210 Så de bare navngivet det-- og det var et akronym, 1018 00:47:52,210 --> 00:47:54,840 så de lige gjort det PHP hypertekst præprocessor, som 1019 00:47:54,840 --> 00:47:55,980 bare giver ingen mening. 1020 00:47:55,980 --> 00:47:57,714 Sjov historie. 1021 00:47:57,714 --> 00:47:58,880 Det er et programmeringssprog. 1022 00:47:58,880 --> 00:48:02,360 Så så meget som jeg understrege, at HTML er ikke et programmeringssprog, 1023 00:48:02,360 --> 00:48:05,350 Det er et kodesprog, PHP er et programmeringssprog. 1024 00:48:05,350 --> 00:48:07,422 Hvordan ved du, det er fordi der er logik. 1025 00:48:07,422 --> 00:48:08,380 Der er betingede. 1026 00:48:08,380 --> 00:48:12,750 Vi har variable, mens vi har ingen af ​​disse ting i HTML. 1027 00:48:12,750 --> 00:48:16,960 >> Okay, så har vi denne lille bit her det er ligesom en smag af PHP. 1028 00:48:16,960 --> 00:48:20,510 Så grundlæggende, variabelnavne starte med et dollartegn. 1029 00:48:20,510 --> 00:48:21,500 Masser af mennesker kan lide det. 1030 00:48:21,500 --> 00:48:22,371 Minder os penge. 1031 00:48:22,371 --> 00:48:22,995 Det er alle store. 1032 00:48:22,995 --> 00:48:25,280 Vi ønsker alle PHP. 1033 00:48:25,280 --> 00:48:28,020 Så vi ikke er angivet en variabel type længere. 1034 00:48:28,020 --> 00:48:29,995 Den bestemmes under kørslen. 1035 00:48:29,995 --> 00:48:32,710 1036 00:48:32,710 --> 00:48:35,890 Tolken vil være som, Åh, vi bare køre igennem, 1037 00:48:35,890 --> 00:48:39,565 og i henhold til kontekst, Vi vil se, hvad typer af typer 1038 00:48:39,565 --> 00:48:41,560 disse variabler skal have. 1039 00:48:41,560 --> 00:48:42,815 Der er ingen hovedfunktion. 1040 00:48:42,815 --> 00:48:43,690 Ting vil bare køre. 1041 00:48:43,690 --> 00:48:47,851 Du fyre med din import i din sidste p-sæt, vil du bemærke dette. 1042 00:48:47,851 --> 00:48:49,350 Der var ikke virkelig en vigtig funktion. 1043 00:48:49,350 --> 00:48:52,070 Du har lige skrev hvad du ville ske. 1044 00:48:52,070 --> 00:48:53,280 Og det lige slags skete. 1045 00:48:53,280 --> 00:48:56,760 Så det er PHP for dig. 1046 00:48:56,760 --> 00:48:59,180 >> Arrays er meget ens. 1047 00:48:59,180 --> 00:49:01,270 Vi har stadig dette beslag. 1048 00:49:01,270 --> 00:49:05,940 Her har vi nogle variable kaldet arr, og det er lige 1049 00:49:05,940 --> 00:49:08,540 at-- vi har vores normale beslag notation. 1050 00:49:08,540 --> 00:49:10,630 Og vi har nogle centrale værdi. 1051 00:49:10,630 --> 00:49:14,630 Og den store forskel mellem C og PHP arrays 1052 00:49:14,630 --> 00:49:19,330 er, at vi kan få denne associate-- vi kan knytte værdier til nøgler. 1053 00:49:19,330 --> 00:49:22,440 Så i stedet for bare at have et array, der er indekseret 1054 00:49:22,440 --> 00:49:26,630 med antallet eller positionen af dette element i arrayet, 1055 00:49:26,630 --> 00:49:29,060 Vi kan faktisk knytte det til en nøgle. 1056 00:49:29,060 --> 00:49:36,700 Hvor vi kan sige, OK, jeg vil uanset værdi er forbundet med frugt. 1057 00:49:36,700 --> 00:49:39,280 Og måske har vi frugt gik til banan. 1058 00:49:39,280 --> 00:49:41,760 Så det ville vende tilbage banan til os. 1059 00:49:41,760 --> 00:49:44,100 >> Men dybest set, det mest kraftfuld ting om dette 1060 00:49:44,100 --> 00:49:47,960 er, at hvis du fyre huske demo fra foredrag, hvor vi dybest set 1061 00:49:47,960 --> 00:49:53,050 omskrev speller i PHP, og det was-- opslag var egentlig bare gerne, 1062 00:49:53,050 --> 00:49:55,007 er denne tast findes? 1063 00:49:55,007 --> 00:49:56,590 Det er virkelig slags magt det. 1064 00:49:56,590 --> 00:49:58,560 Du behøver ikke at gentage gennem dit array. 1065 00:49:58,560 --> 00:50:00,311 Du behøver ikke at vide hvad plads, det ligger. 1066 00:50:00,311 --> 00:50:01,976 Det kunne være ved slutningen eller begyndelsen. 1067 00:50:01,976 --> 00:50:04,790 Så længe du kender nøglen der er forbundet med værdien, 1068 00:50:04,790 --> 00:50:09,740 PHP kan bare spytte denne værdi højre back ud på dig, OK? 1069 00:50:09,740 --> 00:50:12,960 >> Og så har vi også lige har netop fordi vi 1070 00:50:12,960 --> 00:50:16,750 kan have vigtige værdi par betyder ikke, du er nødt til. 1071 00:50:16,750 --> 00:50:19,180 Du kan også bare oprette en normal matrix som her, 1072 00:50:19,180 --> 00:50:21,540 på bunden, hvor det er blot én, to, tre, fire. 1073 00:50:21,540 --> 00:50:22,510 Det er vores værdier. 1074 00:50:22,510 --> 00:50:25,320 Og i virkeligheden, deres nøgler er indeksene. 1075 00:50:25,320 --> 00:50:26,830 Så nøglen til en ville være nul. 1076 00:50:26,830 --> 00:50:28,610 Nøglen til to ville være en. 1077 00:50:28,610 --> 00:50:31,910 Så videre og så videre, med mindre du udtrykkeligt tildele en nøgle, 1078 00:50:31,910 --> 00:50:34,630 man kunne antage, at den værdi er bare deres indeks. 1079 00:50:34,630 --> 00:50:37,290 Giver det mening for alle? 1080 00:50:37,290 --> 00:50:38,070 Ingen spørgsmål? 1081 00:50:38,070 --> 00:50:38,930 Awesome. 1082 00:50:38,930 --> 00:50:44,420 >> OK, foreach er en måde at gentage gennem dine arrays. 1083 00:50:44,420 --> 00:50:47,490 Så vi har noget her, blot den generelle struktur. 1084 00:50:47,490 --> 00:50:51,020 Så foreach, navnet på vores array, som uanset 1085 00:50:51,020 --> 00:50:53,930 du vil ringe til hver element i dit array, 1086 00:50:53,930 --> 00:50:57,270 og vi kan gøre noget med dette element eller med denne værdi. 1087 00:50:57,270 --> 00:50:58,680 Så vi har et eksempel her. 1088 00:50:58,680 --> 00:51:05,770 Vi har en associativ array med disse to poster 1089 00:51:05,770 --> 00:51:10,080 med bar blive associeret med foo og QUX blive associeret med baz. 1090 00:51:10,080 --> 00:51:12,180 Så nøgler er foo og baz. 1091 00:51:12,180 --> 00:51:13,650 Værdier er bar og QUX. 1092 00:51:13,650 --> 00:51:18,560 Så foreach, har vi vores vifte her, som den centrale værdi par. 1093 00:51:18,560 --> 00:51:21,560 Dette giver os mulighed for at få adgang både nøglen og værdi. 1094 00:51:21,560 --> 00:51:23,680 Måske du bare vil have værdi, i hvilket tilfælde 1095 00:51:23,680 --> 00:51:27,640 du bare kunne gøre som arr som $ værdi, og så er du 1096 00:51:27,640 --> 00:51:30,640 blot adgang værdien som du gentage gennem. 1097 00:51:30,640 --> 00:51:32,600 Men måske, for nogle grund, du ønsker nøglen, 1098 00:51:32,600 --> 00:51:35,460 hvilket er grunden til jeg valgte dette eksempel i stedet. 1099 00:51:35,460 --> 00:51:40,240 Så du kan faktisk manipulere nøgle og værdi i dette tilfælde. 1100 00:51:40,240 --> 00:51:41,070 OK? 1101 00:51:41,070 --> 00:51:41,905 Spørgsmål? 1102 00:51:41,905 --> 00:51:44,279 >> PUBLIKUM: Hvis du ønskede at blot manipulere nøglen ville 1103 00:51:44,279 --> 00:51:45,910 du skal gøre foreach-- 1104 00:51:45,910 --> 00:51:47,360 >> ALISON: Right. 1105 00:51:47,360 --> 00:51:50,560 Så hvis du ønsker at manipulere blot nøglen, 1106 00:51:50,560 --> 00:51:53,680 vil du stadig brug for dette syntaks, fordi hvis du bare 1107 00:51:53,680 --> 00:51:56,930 har arr som noget, som en ting, det er 1108 00:51:56,930 --> 00:52:00,070 kommer til at antage, at du ønsker værdien ikke nøglen. 1109 00:52:00,070 --> 00:52:06,780 Så hvis du nogensinde bare har ligesom arr som, måske er ligesom $ element, 1110 00:52:06,780 --> 00:52:11,670 det kommer til at antage, at du spørger for blot værdien ved hvert punkt. 1111 00:52:11,670 --> 00:52:13,879 Hvis du udtrykkeligt ønsker at gøre noget med nøglen, 1112 00:52:13,879 --> 00:52:16,170 selvom du ikke kommer til at gøre noget med værdien, 1113 00:52:16,170 --> 00:52:18,430 du har brug for denne struktur at vi her 1114 00:52:18,430 --> 00:52:22,330 hvor er du udtrykkeligt beder for både nøgle og værdi. 1115 00:52:22,330 --> 00:52:24,170 Store spørgsmål. 1116 00:52:24,170 --> 00:52:25,940 Ellers noget? 1117 00:52:25,940 --> 00:52:27,490 Cool. 1118 00:52:27,490 --> 00:52:29,911 >> Okay, PHP og HTML. 1119 00:52:29,911 --> 00:52:31,410 Åh, vi er tilbage til p-sæt syv igen. 1120 00:52:31,410 --> 00:52:35,380 Så dette bør se lidt bekendt. 1121 00:52:35,380 --> 00:52:41,760 Så dette er nogle enkle HTML-formular der har nogle input navn hej. 1122 00:52:41,760 --> 00:52:43,820 Og vi ser, vi har vores metode til GET. 1123 00:52:43,820 --> 00:52:47,430 Og hvis vi husker fra vores p-sæt, når denne formular indsendes, 1124 00:52:47,430 --> 00:52:58,130 sender et array kaldet $ _GET, der har alle disse input eller variabler fra 1125 00:52:58,130 --> 00:53:00,490 den form, der skal være manipuleres i vores PHP. 1126 00:53:00,490 --> 00:53:03,320 Så i dette tilfælde brugeren ville sætte i deres navn. 1127 00:53:03,320 --> 00:53:04,370 De har det. 1128 00:53:04,370 --> 00:53:07,810 Og vi ser, at vi får nogle matrix her. 1129 00:53:07,810 --> 00:53:09,080 Vi har vores GET array. 1130 00:53:09,080 --> 00:53:11,510 Og vi adgang til navnet. 1131 00:53:11,510 --> 00:53:15,070 >> Så det siger, OK, giv mig værdi, der er forbundet med navn, 1132 00:53:15,070 --> 00:53:16,550 navn er nøglen her. 1133 00:53:16,550 --> 00:53:21,400 Og der knytter direkte til det vi sagde vores input hedder. 1134 00:53:21,400 --> 00:53:28,960 Så dette var at give dig nøglen til, hvad vil være i dit array her. 1135 00:53:28,960 --> 00:53:31,220 Giver det mening for alle? 1136 00:53:31,220 --> 00:53:32,070 Ja? 1137 00:53:32,070 --> 00:53:36,240 >> PUBLIKUM: Er navnet på GET henvise til den lilla linje i [uhørligt]? 1138 00:53:36,240 --> 00:53:37,740 >> ALISON: Det henviser til dette her. 1139 00:53:37,740 --> 00:53:43,840 Så dette område lige her, det henviser til dette navn her. 1140 00:53:43,840 --> 00:53:47,800 Så dette kunne have været navngivet ligesom telefonnummer, eller hvad. 1141 00:53:47,800 --> 00:53:51,790 Dette navn faktisk siger, hvad kalder du dette felt? 1142 00:53:51,790 --> 00:53:53,600 Hvordan vil du henvise til dette område? 1143 00:53:53,600 --> 00:53:57,670 Og dette navn er faktisk godt lide, vi er siger dette felt kaldes navn. 1144 00:53:57,670 --> 00:53:59,224 Det er, hvordan vi kommer til at få adgang til det. 1145 00:53:59,224 --> 00:54:02,070 >> PUBLIKUM: Så er det gerne, input navn lig Bob, og-- 1146 00:54:02,070 --> 00:54:04,380 >> ALISON: Højre, så du ville få Bob dernede. 1147 00:54:04,380 --> 00:54:06,090 Præcis. 1148 00:54:06,090 --> 00:54:07,800 Alle cool? 1149 00:54:07,800 --> 00:54:10,990 Okay, så får versus POST, det er de to måder 1150 00:54:10,990 --> 00:54:14,880 at vi passerer data i en HTTP-anmodning. 1151 00:54:14,880 --> 00:54:17,370 Du fyre skulle have set begge disse forhåbentlig. 1152 00:54:17,370 --> 00:54:20,940 Så med GET, oplysningerne passeres gennem URL. 1153 00:54:20,940 --> 00:54:23,490 Så hvis du nogensinde gøre Google søgninger, YouTube, vil du 1154 00:54:23,490 --> 00:54:25,130 sikkert bemærke nogle spørgsmålstegn. 1155 00:54:25,130 --> 00:54:28,230 Og så alle de ord at du bare sætte derinde. 1156 00:54:28,230 --> 00:54:31,410 Og POST passerer dataene i HTTP brødteksten. 1157 00:54:31,410 --> 00:54:36,922 Så i modsætning til GET, du slags overveje at dataene er skjult for brugeren. 1158 00:54:36,922 --> 00:54:38,630 Men hvad er egentlig vigtigt at forstå 1159 00:54:38,630 --> 00:54:44,040 er, at dette er endnu lige så usikker som GET. 1160 00:54:44,040 --> 00:54:48,780 Analogien jeg gerne bruge, er, hvis du har dit bankkontonummer 1161 00:54:48,780 --> 00:54:52,795 og man skrive det på ydersiden af en konvolut, der er temmelig usikre. 1162 00:54:52,795 --> 00:54:55,920 Hvis du skulle skrive det på et stykke papir og sætte det ind i konvolutten, 1163 00:54:55,920 --> 00:54:58,850 det er stadig virkelig usikker, fordi alt hvad du skal gøre, er at åbne det op 1164 00:54:58,850 --> 00:55:03,480 og se på det faktiske indhold af beskeden at se. 1165 00:55:03,480 --> 00:55:08,310 Så dette er "skjult", og folk som til synes det er sikkert, men det er virkelig ikke. 1166 00:55:08,310 --> 00:55:11,000 Og jeg er sikker på Davin vil komme ind i denne mere, måske. 1167 00:55:11,000 --> 00:55:12,850 Men det er en vigtig sondring at gøre 1168 00:55:12,850 --> 00:55:15,820 og noget rigtig godt at forstå. 1169 00:55:15,820 --> 00:55:19,220 >> OK, SQL, Structured Query Language. 1170 00:55:19,220 --> 00:55:22,220 Alle de ting, vi har set indtil for nylig! 1171 00:55:22,220 --> 00:55:25,400 Så det er egentlig bare designet, naturligvis, til styring af data. 1172 00:55:25,400 --> 00:55:30,560 Du fyre havde en masse erfaring med dette i dine tabeller med PHP MyAdmin. 1173 00:55:30,560 --> 00:55:34,100 Og der er fire almindelige forespørgsler at vi ønsker jer at vide. 1174 00:55:34,100 --> 00:55:37,304 Så der er opdatering, indsætte, Vælg og slette. 1175 00:55:37,304 --> 00:55:38,970 Så skal du vide, dem rigtig godt. 1176 00:55:38,970 --> 00:55:40,960 Vi kommer til at gå gennem dem virkelig hurtigt. 1177 00:55:40,960 --> 00:55:44,340 >> Så opdatere, virkelig, som det du måske tror det gør, 1178 00:55:44,340 --> 00:55:46,740 det bare opdaterer data i din database. 1179 00:55:46,740 --> 00:55:48,750 Så vi har nogle eksempel her. 1180 00:55:48,750 --> 00:55:53,310 Dette er den generelle struktur for en opdatering forespørgsel. 1181 00:55:53,310 --> 00:55:56,150 Så vi opdaterer tabellen at vi taler om. 1182 00:55:56,150 --> 00:56:00,520 Og vi ønsker at sætte visse værdier, visse kolonner 1183 00:56:00,520 --> 00:56:02,600 svarende til bestemte værdier. 1184 00:56:02,600 --> 00:56:07,500 Så dette blot opdaterer tabellen, ændre værdier i alle rækker i denne sag. 1185 00:56:07,500 --> 00:56:13,690 Så i denne ene hernede, et virkeligt eksempel har vi insert-- ked. 1186 00:56:13,690 --> 00:56:17,630 Denne slide avancerede uden mig at vide det. 1187 00:56:17,630 --> 00:56:22,230 >> Så denne opdateringer tabellen col1 lige at VAL1 hvor hus er lig "Currier". 1188 00:56:22,230 --> 00:56:25,300 Hvad dette gør, er det ændrer kun den kun 1189 00:56:25,300 --> 00:56:28,130 opdaterer disse værdier i bestemte steder. 1190 00:56:28,130 --> 00:56:32,300 Så i denne første afgørelse ændrer disse værdier for alt i din tabel, 1191 00:56:32,300 --> 00:56:32,860 OK? 1192 00:56:32,860 --> 00:56:35,820 Det kommer til at ændre denne kolonne for hver enkelt post, 1193 00:56:35,820 --> 00:56:37,020 for hver enkelt række. 1194 00:56:37,020 --> 00:56:40,840 Men det her, kunne du tænk på det som en kvalifikationskamp. 1195 00:56:40,840 --> 00:56:44,020 Så det er kun kommer til at ændre det i meget specifikke steder. 1196 00:56:44,020 --> 00:56:47,840 Så i p-sæt syv, når du måske opdateres mængden af ​​kontanter 1197 00:56:47,840 --> 00:56:53,050 at din bruger havde, har du sandsynligvis haft nogle hvor ID er lig session id, ikke? 1198 00:56:53,050 --> 00:56:55,280 >> Fordi du ikke ønsker at ændre mængden af ​​kontanter 1199 00:56:55,280 --> 00:56:57,630 for hver person, der blev ved hjælp af din hjemmeside. 1200 00:56:57,630 --> 00:57:00,480 De ønskede at ændre det for en bestemt person, denne person er 1201 00:57:00,480 --> 00:57:02,410 hvem var at bruge det på det tidspunkt. 1202 00:57:02,410 --> 00:57:04,320 Right? 1203 00:57:04,320 --> 00:57:07,510 OK, så indsætte, indsætte visse værdier i tabeller. 1204 00:57:07,510 --> 00:57:11,650 Det er ligesom, når du er oprette en helt ny bruger. 1205 00:57:11,650 --> 00:57:14,240 Den generelle struktur her er indsætte i uanset tabel 1206 00:57:14,240 --> 00:57:15,680 vi taler om. 1207 00:57:15,680 --> 00:57:18,910 Værdier, der er de værdier, vi faktisk vil indsætte. 1208 00:57:18,910 --> 00:57:23,060 OK, så vi ser her, vi har indsætte i tabellen. 1209 00:57:23,060 --> 00:57:27,790 Dette er specifikke kolonner med deres svarede værdier. 1210 00:57:27,790 --> 00:57:29,940 Så dette siger, indsætte en ny række, der indeholder 1211 00:57:29,940 --> 00:57:33,660 værdier VAL1 og val2 under disse specifikke kolonner. 1212 00:57:33,660 --> 00:57:39,240 >> Så måske du kun ønsker at fylde ud halvdelen af ​​ting i denne række. 1213 00:57:39,240 --> 00:57:41,150 Det er, hvad denne del her kan du gøre. 1214 00:57:41,150 --> 00:57:43,280 Det kan du faktisk bestemme hvilken del. 1215 00:57:43,280 --> 00:57:44,244 Ja? 1216 00:57:44,244 --> 00:57:52,150 >> PUBLIKUM: Kan du kun [uhørligt] celler i rækken [uhørligt]? 1217 00:57:52,150 --> 00:57:55,000 >> ALISON: Hvis du kun udfylde visse dele af din række, 1218 00:57:55,000 --> 00:57:57,480 resten af ​​disse celler er blot tom. 1219 00:57:57,480 --> 00:58:02,730 1220 00:58:02,730 --> 00:58:05,660 Så længe du tillader dem at være tom, det er ikke et problem. 1221 00:58:05,660 --> 00:58:09,570 Hvis du forsøger at få adgang til dem, er det kommer til at vende tilbage en tomme element. 1222 00:58:09,570 --> 00:58:13,850 Men det er vigtigt at vide, at i visse tabeller, 1223 00:58:13,850 --> 00:58:16,690 de skal have lov til at være nul. 1224 00:58:16,690 --> 00:58:18,890 Du har måske løbe ind i en problem under dit p-sæt 1225 00:58:18,890 --> 00:58:21,320 fordi vi ikke lade nogen af dine værdier være null. 1226 00:58:21,320 --> 00:58:26,110 Men du kan angive en valgfri værdi i din tabel. 1227 00:58:26,110 --> 00:58:29,640 >> OK, skal du vælge, så dette er bare en måde at få 1228 00:58:29,640 --> 00:58:33,790 specifikke data fra en tabel på nogle id, som du ønsker. 1229 00:58:33,790 --> 00:58:37,990 Så vælg stjerne fra bordet, hvor col lig noget betyder blot, 1230 00:58:37,990 --> 00:58:43,820 give mig alle de oplysninger, der er forbundet hvor denne specifikke søjle er sandt. 1231 00:58:43,820 --> 00:58:49,020 Så stjernen i dette tilfælde returnere hele række til dig, okay? 1232 00:58:49,020 --> 00:58:54,880 >> Og så, i dette tilfælde skal du vælge stjerne fra tabel bare giver dig hele tabellen. 1233 00:58:54,880 --> 00:58:58,940 Og så, slet selvfølgelig, det bare sletter rækken fra tabellen. 1234 00:58:58,940 --> 00:59:01,320 Så slette bord, uanset bord er vi 1235 00:59:01,320 --> 00:59:06,830 henvisninger, hvor en vis id eller nogle betingelse er sand. 1236 00:59:06,830 --> 00:59:07,720 Ja? 1237 00:59:07,720 --> 00:59:08,700 >> PUBLIKUM: Spørgsmål. 1238 00:59:08,700 --> 00:59:10,699 Hvorfor bruger du dobbelt citater, og om du 1239 00:59:10,699 --> 00:59:13,600 gøre dobbelte anførselstegn eller enkelt citater, det gør en forskel? 1240 00:59:13,600 --> 00:59:18,235 >> ALISON: Dobbelt citater eller enkelte anførselstegn gør ikke en forskel i SQL. 1241 00:59:18,235 --> 00:59:19,610 Jeg troede, jeg så et andet spørgsmål. 1242 00:59:19,610 --> 00:59:20,814 Ja? 1243 00:59:20,814 --> 00:59:25,070 >> PUBLIKUM: Er det ikke påvirke, hvad bliver undsluppet fra forespørgslen? 1244 00:59:25,070 --> 00:59:27,945 >> ALISON: Rob? 1245 00:59:27,945 --> 00:59:31,410 >> ROB: Hvad mener du med flygtede fra forespørgslen? 1246 00:59:31,410 --> 00:59:36,870 >> PUBLIKUM: Hvis nogen har en enkelt forespørgsel i form of-- 1247 00:59:36,870 --> 00:59:39,862 >> ROB: Hvis nogen skulle sætte ét tilbud i, 1248 00:59:39,862 --> 00:59:43,560 så så længe du sterilisering dit input, så det gør ikke noget. 1249 00:59:43,560 --> 00:59:46,205 Men hvis du bruger en enkelt citat, og du er forkert 1250 00:59:46,205 --> 00:59:47,914 undslippe dine input, så ja, de har brug for 1251 00:59:47,914 --> 00:59:51,079 at sætte en apostrof for at bryde din kode. hvis du bruger anførselstegn, 1252 00:59:51,079 --> 00:59:53,580 de har brug for at sætte en dobbelt citerer at bryde din kode. 1253 00:59:53,580 --> 00:59:56,163 Men så længe du slippe ting korrekt, er det ligegyldigt. 1254 00:59:56,163 --> 00:59:59,220 Det bare at gå der skal oversættes til det korrekte symbol alligevel. 1255 00:59:59,220 --> 01:00:02,332 >> Publikum: Hvad betyder flugt betyde? 1256 01:00:02,332 --> 01:00:04,040 ALISON: Nå, ligesom desinficering og flugt. 1257 01:00:04,040 --> 01:00:06,810 1258 01:00:06,810 --> 01:00:13,820 Eksamen, vi har, den store XKCD tegneserie, at de trækker op, hvor du har, 1259 01:00:13,820 --> 01:00:15,629 oh-- 1260 01:00:15,629 --> 01:00:16,670 ROB: Det er det sidste dias. 1261 01:00:16,670 --> 01:00:18,500 ALISON: Det er det sidste dias, virkelig? 1262 01:00:18,500 --> 01:00:20,200 Oh my god. 1263 01:00:20,200 --> 01:00:21,780 Der går vi, perfekt. 1264 01:00:21,780 --> 01:00:27,900 OK, så dybest set, kan du injicere noget i denne SQL-forespørgsel 1265 01:00:27,900 --> 01:00:30,560 hvor det bryder din kode, eller som David viste 1266 01:00:30,560 --> 01:00:38,460 i klassen, hvis vi har nogle enkelt citat 1 er lig med 1, og hvis i vores kode, 1267 01:00:38,460 --> 01:00:41,230 vi bare direkte kopiere det i, og vi har en slutter enkelt tilbud, 1268 01:00:41,230 --> 01:00:44,740 hvad der sker, er, at vi får nogle udtryk, 1269 01:00:44,740 --> 01:00:48,680 evalueres til sand, der vil lade nogen komme ind i vores database 1270 01:00:48,680 --> 01:00:51,720 og få data, som vi ikke vil have dem til at komme. 1271 01:00:51,720 --> 01:00:54,240 Så sterilisering input betyder blot at sikre, 1272 01:00:54,240 --> 01:00:57,680 at vi flygter disse tegn og udpegning dem 1273 01:00:57,680 --> 01:01:01,720 som tegn og ikke ting der bør tillades 1274 01:01:01,720 --> 01:01:04,990 skal tages bogstaveligt som vores SQL-sætning. 1275 01:01:04,990 --> 01:01:09,980 >> Så den store ting, som vi sagde at du fyre bør være at bruge 1276 01:01:09,980 --> 01:01:13,650 var HTML særlige tegn, hvilket er noget 1277 01:01:13,650 --> 01:01:15,730 at du måske ønsker at tage et kig på. 1278 01:01:15,730 --> 01:01:17,240 OK, slette. 1279 01:01:17,240 --> 01:01:19,450 Datatyper, vil dette alt være online. 1280 01:01:19,450 --> 01:01:23,510 Da Vi har 15 minutter tilbage, er jeg bare kommer til at gå lige igennem dette. 1281 01:01:23,510 --> 01:01:28,500 PHP og SQL, dybest set er bare vi havde en søgefunktion, der 1282 01:01:28,500 --> 01:01:31,520 bidraget til at beskytte mod disse ondsindede angreb. 1283 01:01:31,520 --> 01:01:33,970 Så når du bruger forespørgsel, vi gjorde sikker 1284 01:01:33,970 --> 01:01:36,560 at tingene blev desinficeret og whatnot. 1285 01:01:36,560 --> 01:01:41,070 >> MVC er blot et design paradigme, så model, visning, controller. 1286 01:01:41,070 --> 01:01:44,200 Det er bare en måde at holde tingene nice og opdelt på samme måde 1287 01:01:44,200 --> 01:01:47,100 at vi har en tendens til at faktor ud kode i funktioner. 1288 01:01:47,100 --> 01:01:53,390 Dette er blot en web-design rammer der tillader dig at gøre det samme. 1289 01:01:53,390 --> 01:01:54,760 Jeg har tænkt mig at springe dette. 1290 01:01:54,760 --> 01:01:58,530 >> Det er noget, jeg ville være super comfy med. 1291 01:01:58,530 --> 01:02:01,132 Det er en stor lille tabel. 1292 01:02:01,132 --> 01:02:03,090 Det giver dig den funktion eksempel på modellen. 1293 01:02:03,090 --> 01:02:05,473 Jeg er bare at gå gennem dette, fordi jeg virkelig ønsker Davin at kunne tale. 1294 01:02:05,473 --> 01:02:07,140 Hvis du har spørgsmål, er du velkommen. 1295 01:02:07,140 --> 01:02:07,931 Jeg vil være her efter. 1296 01:02:07,931 --> 01:02:10,360 Lige kommet tale med mig. 1297 01:02:10,360 --> 01:02:13,380 Med dette, har vi HTTP status. 1298 01:02:13,380 --> 01:02:16,270 Og Davin kommer til at blæse gennem denne i 15 minutter. 1299 01:02:16,270 --> 01:02:17,560 Det kommer til at være stor. 1300 01:02:17,560 --> 01:02:18,893 >> Davin: OK. 1301 01:02:18,893 --> 01:02:20,312 Uh, din mikrofon? 1302 01:02:20,312 --> 01:02:22,210 Ja. 1303 01:02:22,210 --> 01:02:23,336 Undskyld. 1304 01:02:23,336 --> 01:02:24,460 ALISON: Vejen at være forberedt. 1305 01:02:24,460 --> 01:02:25,335 Davin: Nej, jeg er klar. 1306 01:02:25,335 --> 01:02:25,860 Jeg er klar. 1307 01:02:25,860 --> 01:02:28,790 Lad os gøre det. 1308 01:02:28,790 --> 01:02:29,290 Den er klar. 1309 01:02:29,290 --> 01:02:30,041 OK. 1310 01:02:30,041 --> 01:02:30,540 Undskyld. 1311 01:02:30,540 --> 01:02:31,664 Jeg spildte kaffe på mig selv. 1312 01:02:31,664 --> 01:02:36,037 1313 01:02:36,037 --> 01:02:38,210 Jeg ved ikke, om jeg er mere forstyrret, at jeg ser dum, 1314 01:02:38,210 --> 01:02:40,600 eller at jeg ikke har kaffe længere. 1315 01:02:40,600 --> 01:02:44,480 Anyway, bare en hurtig meddelelse om arket du fyre har. 1316 01:02:44,480 --> 01:02:47,994 Så dette ark du fyre har ikke den officielle hvad der er på quizzen. 1317 01:02:47,994 --> 01:02:49,660 Dette er den officielle hvad der er på quizzen. 1318 01:02:49,660 --> 01:02:52,520 Også på hjemmesiden, vi fortæller dig, OK, det vil være på quizzen. 1319 01:02:52,520 --> 01:02:55,020 Så i den lille snyde ark du har, ikke officiel. 1320 01:02:55,020 --> 01:02:56,690 Og der er fejl på den. 1321 01:02:56,690 --> 01:03:01,490 Så bedst ikke at bare blindt bruge det. 1322 01:03:01,490 --> 01:03:04,390 Så ja, det er det. 1323 01:03:04,390 --> 01:03:05,980 Så lad os komme ind i denne reelle hurtig. 1324 01:03:05,980 --> 01:03:07,420 >> Så HTTP status. 1325 01:03:07,420 --> 01:03:10,430 Så hvad sker der, når hjemmeside, alt er i orden. 1326 01:03:10,430 --> 01:03:11,144 Alt er OK. 1327 01:03:11,144 --> 01:03:13,310 Alt kommer tilbage til du den måde du ønsker det. 1328 01:03:13,310 --> 01:03:15,370 Du får en 200 OK. 1329 01:03:15,370 --> 01:03:19,250 301, hvor vi har set, at 301 før? 1330 01:03:19,250 --> 01:03:20,890 Vent, hvad sker der? 1331 01:03:20,890 --> 01:03:23,250 Undskyld. 1332 01:03:23,250 --> 01:03:24,980 Vi så jeg tin foredrag under sikkerhed. 1333 01:03:24,980 --> 01:03:30,690 Så i løbet af sikkerhed, så hvis David har skrevet i http og derefter forsøgte at gå til cs50.net, 1334 01:03:30,690 --> 01:03:31,940 du kommer til at se 301 flyttet. 1335 01:03:31,940 --> 01:03:32,440 Hvorfor? 1336 01:03:32,440 --> 01:03:35,570 Fordi det kommer til at omdirigere du automatisk til vores HTTPS. 1337 01:03:35,570 --> 01:03:38,649 >> Så 301 flyttes, bare det er dybest set en omdirigering. 1338 01:03:38,649 --> 01:03:40,190 Og du kan tænke over det på denne måde. 1339 01:03:40,190 --> 01:03:43,790 Enhver af de statusser, der starter med 2 s, de er ligesom, OK, at alt er ok. 1340 01:03:43,790 --> 01:03:46,530 Enhver af de statusser, der starter med 3, de er omdirigering. 1341 01:03:46,530 --> 01:03:49,571 Statusser, der starter med 4, at midler der er en slags klient fejl. 1342 01:03:49,571 --> 01:03:52,440 Statusser, der starter med 5, det er en form for serverfejl. 1343 01:03:52,440 --> 01:03:54,680 Så du slags bryde op de statusser som. 1344 01:03:54,680 --> 01:03:59,120 Så 304 ikke modificerede, så i din server.c p-sæt, så lad os sige, at du 1345 01:03:59,120 --> 01:04:00,600 loaded cat.html. 1346 01:04:00,600 --> 01:04:03,360 Alt kommer tilbage, du får 200s, OK, stor. 1347 01:04:03,360 --> 01:04:04,540 >> Lad os sige, du forfrisket det. 1348 01:04:04,540 --> 01:04:07,310 Nå, indeni, cat.html, har du en JPEG. 1349 01:04:07,310 --> 01:04:09,520 Nå, det JPEG er ikke kommer til at få genindlæses. 1350 01:04:09,520 --> 01:04:12,140 Du kommer ikke til at skrive en anden GET-anmodning til serveren, 1351 01:04:12,140 --> 01:04:13,980 og derefter få alle disse oplysninger tilbage. 1352 01:04:13,980 --> 01:04:17,560 Det kommer til at bare være-- billedet er vil blive cached på din maskine. 1353 01:04:17,560 --> 01:04:19,540 Og så billedet bliver en 304. 1354 01:04:19,540 --> 01:04:20,720 Så det er ikke blevet ændret. 1355 01:04:20,720 --> 01:04:24,600 Hvis du derefter lukke ud, klar cookies, og derefter opdatere 1356 01:04:24,600 --> 01:04:27,490 og prøv at indlæse denne side igen, er du nødt til at se 200s. 1357 01:04:27,490 --> 01:04:28,910 Du kommer ikke til at se, at 304. 1358 01:04:28,910 --> 01:04:32,340 >> 400, dårlig anmodning, real hurtig, ligesom hvis du 1359 01:04:32,340 --> 01:04:34,880 skulle sende en JSON objekt til serveren 1360 01:04:34,880 --> 01:04:38,090 og din JSON objekt var forkert, vil du se noget lignende. 1361 01:04:38,090 --> 01:04:39,000 403, forbudt. 1362 01:04:39,000 --> 01:04:40,330 Hvornår vil du se et forbudt? 1363 01:04:40,330 --> 01:04:41,394 Sandsynligvis Sandsynligvis? 1364 01:04:41,394 --> 01:04:42,060 PUBLIKUM: Chmod. 1365 01:04:42,060 --> 01:04:42,950 Davin: Chmod, ja. 1366 01:04:42,950 --> 01:04:44,730 Så du har ikke indstillet tilladelser korrekt. 1367 01:04:44,730 --> 01:04:45,577 404, ikke fundet. 1368 01:04:45,577 --> 01:04:46,410 Det er bare ikke der. 1369 01:04:46,410 --> 01:04:48,670 Så hvis du skriver i den forkerte URL. 1370 01:04:48,670 --> 01:04:53,500 500, intern serverfejl, serveren sandsynligvis ikke konfigureret korrekt. 1371 01:04:53,500 --> 01:04:56,260 Noget ikke på din ende, men noget på serveren side. 1372 01:04:56,260 --> 01:04:57,240 Og 503? 1373 01:04:57,240 --> 01:04:59,502 En masse mennesker har set 503s i sidste p-sæt. 1374 01:04:59,502 --> 01:05:00,460 Hvornår vil det ske? 1375 01:05:00,460 --> 01:05:04,180 1376 01:05:04,180 --> 01:05:05,660 Jeg hørte hvisken. 1377 01:05:05,660 --> 01:05:07,767 >> PUBLIKUM: Når Google beslutter du er en robot. 1378 01:05:07,767 --> 01:05:10,350 Davin: Ja, når Google beslutter du er en robot, du får 503s. 1379 01:05:10,350 --> 01:05:11,560 Så det er en overbelastning. 1380 01:05:11,560 --> 01:05:14,620 Hvis du har anmodet om fra serveren for meget, er det normalt midlertidig. 1381 01:05:14,620 --> 01:05:15,560 Og de fleste af jer har bemærket det. 1382 01:05:15,560 --> 01:05:16,185 Så du så 503. 1383 01:05:16,185 --> 01:05:19,282 Du har måske taget lidt pause, så 503s gik bort, 1384 01:05:19,282 --> 01:05:20,490 og alt var i orden. 1385 01:05:20,490 --> 01:05:26,640 >> GABE: Rigtig hurtig, hvornår du fyre får 500 i formentlig det sidste problem sæt? 1386 01:05:26,640 --> 01:05:27,954 Ja? 1387 01:05:27,954 --> 01:05:30,906 >> PUBLIKUM: Normalt hvis server har en fil malplaceret 1388 01:05:30,906 --> 01:05:34,650 eller [uhørligt] deres maskine [uhørligt]. 1389 01:05:34,650 --> 01:05:38,870 >> GABE: Så det kunne være en konfiguration spørgsmål i din PHP på din server. 1390 01:05:38,870 --> 01:05:42,250 Men det kan være lige noget ligesom et semikolon, at din glemte. 1391 01:05:42,250 --> 01:05:44,130 Hvis du skriver PHP, nogle forkert syntaks 1392 01:05:44,130 --> 01:05:46,000 kan få dig noget lignende. 1393 01:05:46,000 --> 01:05:46,960 OK? 1394 01:05:46,960 --> 01:05:48,610 >> Davin: Cool. 1395 01:05:48,610 --> 01:05:51,180 Vil du have mig til at gøre netop indtil AJAX? 1396 01:05:51,180 --> 01:05:52,950 >> GABE: [uhørligt]. 1397 01:05:52,950 --> 01:05:53,450 Davin: OK. 1398 01:05:53,450 --> 01:05:54,230 Så hvad er Dom? 1399 01:05:54,230 --> 01:05:55,290 Hvad DOM står for? 1400 01:05:55,290 --> 01:05:56,990 >> PUBLIKUM: Dokument objekt model. 1401 01:05:56,990 --> 01:05:57,490 Davin: Nice. 1402 01:05:57,490 --> 01:06:00,775 Og hvorfor vi kan lide det? 1403 01:06:00,775 --> 01:06:02,670 Awesome. 1404 01:06:02,670 --> 01:06:06,651 Højre, så det bare giver os mulighed for at få adgang HTML, få adgang til vores side meget hurtigt. 1405 01:06:06,651 --> 01:06:07,150 Hvorfor? 1406 01:06:07,150 --> 01:06:09,980 Fordi vi behandler vores side, behandle vores HTML-tags, 1407 01:06:09,980 --> 01:06:11,730 behandling alt som om de er objekter. 1408 01:06:11,730 --> 01:06:13,710 Hvis vi behandler dem som om de er objekter, så hvad kan vi gøre? 1409 01:06:13,710 --> 01:06:15,210 Nå, kan vi kalde funktioner på dem. 1410 01:06:15,210 --> 01:06:16,460 Og det er vigtigt, hvorfor? 1411 01:06:16,460 --> 01:06:19,200 Godt, fordi vi kommer til at bruge JavaScript opdatere vores HTML, 1412 01:06:19,200 --> 01:06:20,500 opdatere disse objekter. 1413 01:06:20,500 --> 01:06:23,869 Så hvis vi behandler dem som objekter, vi kan så kalde funktioner på dem. 1414 01:06:23,869 --> 01:06:26,660 Jeg har tænkt mig at komme ind i denne lidt mere, når jeg går ind i JavaScript, 1415 01:06:26,660 --> 01:06:30,510 men du har alle set som document.getElementById. 1416 01:06:30,510 --> 01:06:32,870 Så dokument er dit element, få element efter ID, 1417 01:06:32,870 --> 01:06:35,087 så du kommer til at se ud for nogle id i en HTML-tag. 1418 01:06:35,087 --> 01:06:36,920 Og så kan du gøre noget andet til. 1419 01:06:36,920 --> 01:06:40,089 For eksempel, som document.body, så kan du tilføje barn. 1420 01:06:40,089 --> 01:06:41,630 Så du kommer til at finde dokumentet. 1421 01:06:41,630 --> 01:06:42,340 Du har dokumentet. 1422 01:06:42,340 --> 01:06:43,629 Du kommer til at finde kroppen. 1423 01:06:43,629 --> 01:06:44,420 Du fandt liget. 1424 01:06:44,420 --> 01:06:46,545 Og så er du nødt til kalder en funktion på det. 1425 01:06:46,545 --> 01:06:50,312 Så tilføje barn, og du kan tilføje nogle HTML på enden inde i din krop. 1426 01:06:50,312 --> 01:06:52,520 Så dybest set, du er bare behandle det som et objekt. 1427 01:06:52,520 --> 01:06:54,515 Du behandler HTML tags som et objekt. 1428 01:06:54,515 --> 01:06:57,071 Og det gør det meget nemt og hurtig at gå igennem dem. 1429 01:06:57,071 --> 01:06:59,070 Men det giver dig også mulighed at kalde funktioner på dem 1430 01:06:59,070 --> 01:07:04,410 så du kan manipulere og ændre elementer. 1431 01:07:04,410 --> 01:07:10,162 >> GABE: I betragtning af dette, hvorfor er JavaScript sådan en dejlig sprog til at interagere med HTML? 1432 01:07:10,162 --> 01:07:12,870 Odds er, når folk vælger sproget for browseren, 1433 01:07:12,870 --> 01:07:14,990 for klientsiden, JavaScript er virkelig rart, 1434 01:07:14,990 --> 01:07:16,765 det er virkelig god til at håndtere genstande. 1435 01:07:16,765 --> 01:07:20,620 Og objekterne er slags gerne de objekter, der vises i HTML, 1436 01:07:20,620 --> 01:07:23,940 så det er meget nemt for JavaScript at gøre den slags håndtering. 1437 01:07:23,940 --> 01:07:24,440 Davin: Nice. 1438 01:07:24,440 --> 01:07:25,670 Så her er bare et eksempel. 1439 01:07:25,670 --> 01:07:29,020 Så jeg tror på sidste års quiz, eller måske to år siden, vi 1440 01:07:29,020 --> 01:07:30,840 bedt dig om at oprette et træ. 1441 01:07:30,840 --> 01:07:32,660 Så det er præcis, hvad du ville gøre. 1442 01:07:32,660 --> 01:07:34,255 Så du starter ud med dokumentet. 1443 01:07:34,255 --> 01:07:36,130 Og så er du dybest set bare se på tags. 1444 01:07:36,130 --> 01:07:38,100 Så hvis du ser, vi starte med en HTML-tag. 1445 01:07:38,100 --> 01:07:41,660 Og så får du fingerpeg om, hvordan du gøre dette baseret på indrykning. 1446 01:07:41,660 --> 01:07:43,870 Så hoved slags grene af. 1447 01:07:43,870 --> 01:07:46,242 Inde hovedet, vi har en anden tag for titlen. 1448 01:07:46,242 --> 01:07:47,450 Så har vi en titel-tag. 1449 01:07:47,450 --> 01:07:49,760 Og indeni, har vi nogle streng. 1450 01:07:49,760 --> 01:07:52,210 Og så vi repræsenterer en streng i en cirkel. 1451 01:07:52,210 --> 01:07:54,010 Og alle tags er i firkanter. 1452 01:07:54,010 --> 01:07:56,270 >> Og hvis man ser, hvis vi tænke på dette som et træ, 1453 01:07:56,270 --> 01:07:58,730 og lad os sige, at HTML er en forælder, så hoved og krop 1454 01:07:58,730 --> 01:07:59,772 vil være søskende. 1455 01:07:59,772 --> 01:08:01,813 De er begge kommer til at være børn af denne forælder. 1456 01:08:01,813 --> 01:08:03,620 Så fordi de er begge søskende, de er 1457 01:08:03,620 --> 01:08:06,590 kommer til at være slags siden hinanden i vores træ-model. 1458 01:08:06,590 --> 01:08:08,590 Og så, du dybest set gøre præcis det samme. 1459 01:08:08,590 --> 01:08:13,512 Så ikke svært, men vi har bedt spørgsmål som dette før på quizzen. 1460 01:08:13,512 --> 01:08:15,220 GABE: Er der nogen har spørgsmål indtil videre? 1461 01:08:15,220 --> 01:08:16,357 Er det godt? 1462 01:08:16,357 --> 01:08:16,856 Davin: Cool. 1463 01:08:16,856 --> 01:08:19,630 1464 01:08:19,630 --> 01:08:21,600 JavaScript, OK, de gode ting. 1465 01:08:21,600 --> 01:08:24,069 Så JavaScript, hvad er JavaScript? 1466 01:08:24,069 --> 01:08:28,370 Nå, JavaScript is-- det kompliceret, men disse 1467 01:08:28,370 --> 01:08:30,727 er nogle af højdepunkterne at du skal huske på. 1468 01:08:30,727 --> 01:08:31,810 For det første er det løst skrevet. 1469 01:08:31,810 --> 01:08:33,529 Hvad betyder det? 1470 01:08:33,529 --> 01:08:35,596 Så PHP was-- yeah, hvad sker der? 1471 01:08:35,596 --> 01:08:39,854 >> PUBLIKUM: Du behøver ikke eksplicit at tilstand, hvilken type variabel, det er. 1472 01:08:39,854 --> 01:08:40,479 Davin: Perfect. 1473 01:08:40,479 --> 01:08:43,270 Han sagde, at du ikke behøver at udtrykkeligt angive, hvilken type variabel. 1474 01:08:43,270 --> 01:08:44,160 Det er helt rigtigt. 1475 01:08:44,160 --> 01:08:49,700 Så i C, hvis jeg havde int i lig 50, så i PHP, det er ligesom dette, $ i, 1476 01:08:49,700 --> 01:08:50,550 lig 50. 1477 01:08:50,550 --> 01:08:54,319 Så i JavaScript, hvad ville samtalen være? 1478 01:08:54,319 --> 01:08:55,260 Var, ikke? 1479 01:08:55,260 --> 01:08:56,566 Det ville være ligesom var jeg lig 50. 1480 01:08:56,566 --> 01:08:58,649 Men du behøver ikke at være lignende, OK, dette er en int. 1481 01:08:58,649 --> 01:09:00,350 OK, det er en streng. 1482 01:09:00,350 --> 01:09:01,731 Ingen grund til at gøre det. 1483 01:09:01,731 --> 01:09:02,939 Det er et fortolket sprog. 1484 01:09:02,939 --> 01:09:04,904 Så hvad betyder det? 1485 01:09:04,904 --> 01:09:06,340 >> PUBLIKUM: Ikke udarbejdet. 1486 01:09:06,340 --> 01:09:10,470 >> Davin: Hvad der ikke kompileret betyde? 1487 01:09:10,470 --> 01:09:11,392 Ja? 1488 01:09:11,392 --> 01:09:15,336 >> PUBLIKUM: Du behøver ikke at omstrukturere koden 1489 01:09:15,336 --> 01:09:18,294 at få den klar til computeren til at køre den. 1490 01:09:18,294 --> 01:09:23,144 Det er bare taget på tidspunktet for udførelse og computeren [uhørligt]. 1491 01:09:23,144 --> 01:09:25,560 Davin: Ja, så det kommer til at passere gennem en tolk. 1492 01:09:25,560 --> 01:09:26,750 Men du er helt rigtigt. 1493 01:09:26,750 --> 01:09:28,319 Så du aldrig at kompilere det, ikke? 1494 01:09:28,319 --> 01:09:30,399 Når du lavede din PHP og JavaScript-kode, 1495 01:09:30,399 --> 01:09:31,365 du aldrig kaldt kompilere. 1496 01:09:31,365 --> 01:09:33,779 Du har aldrig kaldet noget lignende gøre eller sådan noget. 1497 01:09:33,779 --> 01:09:34,800 Det er, fordi det er fortolket. 1498 01:09:34,800 --> 01:09:37,319 Så hver gang det går igennem browseren, det går gennem en tolk. 1499 01:09:37,319 --> 01:09:40,370 Og det kommer til at fortolke den bare i realtid med det samme for dig. 1500 01:09:40,370 --> 01:09:43,770 Så hvad er nogle positive og negative at have et fortolket sprog 1501 01:09:43,770 --> 01:09:45,258 og som har en kompileret sprog? 1502 01:09:45,258 --> 01:09:48,240 1503 01:09:48,240 --> 01:09:50,540 Så compiling-- yeah, hvad sker der? 1504 01:09:50,540 --> 01:09:52,444 >> PUBLIKUM: Fortolket er langsommere. 1505 01:09:52,444 --> 01:09:53,319 Davin: På hvilken måde? 1506 01:09:53,319 --> 01:09:57,167 1507 01:09:57,167 --> 01:09:59,091 >> PUBLIKUM: Når du kompilere, behøver du ikke 1508 01:09:59,091 --> 01:10:04,400 at gøre noget ekstra trin til at udføre det, at dette [uhørligt]. 1509 01:10:04,400 --> 01:10:05,570 >> Davin: Højre, perfekt. 1510 01:10:05,570 --> 01:10:08,386 Så hvad du sagde, er som udgangspunkt, at indsamling, 1511 01:10:08,386 --> 01:10:10,760 når du kompilere, har du en masse startomkostninger, ikke? 1512 01:10:10,760 --> 01:10:11,760 Du kommer til at kompilere den. 1513 01:10:11,760 --> 01:10:13,750 Men efter du kompilere det, den compiler kommer til at optimere den. 1514 01:10:13,750 --> 01:10:14,840 Det kommer til at være hurtig. 1515 01:10:14,840 --> 01:10:16,170 Det kommer til at stort set være lige så hurtigt, som det kan være. 1516 01:10:16,170 --> 01:10:18,830 Tolkning, du aldrig har det upfront omkostninger. 1517 01:10:18,830 --> 01:10:22,260 Snarere det vil være lidt langsommere hver eneste gang du fortolker det. 1518 01:10:22,260 --> 01:10:24,940 Og du er nødt til at fortolke det hver eneste gang. 1519 01:10:24,940 --> 01:10:27,114 Så i stedet for at have denne én gang omkostninger, nu er du 1520 01:10:27,114 --> 01:10:29,530 nødt til at fortolke det hver gang siden gør. 1521 01:10:29,530 --> 01:10:31,890 >> Så tolke er gode, fordi du behøver ikke at kompilere det, 1522 01:10:31,890 --> 01:10:33,980 men de er dårligt i, at hver gang siden indlæses, er det 1523 01:10:33,980 --> 01:10:35,771 nødt til at fortolke denne JavaScript. 1524 01:10:35,771 --> 01:10:40,520 Og det kommer til at køre lidt langsommere end hvis du skulle kompilere den. 1525 01:10:40,520 --> 01:10:43,044 Gør det muligt at communicate-- åh, vent. 1526 01:10:43,044 --> 01:10:44,960 Anvendes til at manipulere den indhold og udseende. 1527 01:10:44,960 --> 01:10:46,043 Vi har lige talt om det. 1528 01:10:46,043 --> 01:10:47,250 Det bruger DOM. 1529 01:10:47,250 --> 01:10:49,930 AJAX, vil vi komme ind AJAX i en lille smule. 1530 01:10:49,930 --> 01:10:51,520 Og så er det klientsiden. 1531 01:10:51,520 --> 01:10:53,110 Så PHP er server side. 1532 01:10:53,110 --> 01:10:54,360 JavaScript er klientsiden. 1533 01:10:54,360 --> 01:10:57,780 Hvad er positive til det? 1534 01:10:57,780 --> 01:10:58,280 Den siger det. 1535 01:10:58,280 --> 01:11:01,480 1536 01:11:01,480 --> 01:11:02,780 Det er hurtigere, ikke? 1537 01:11:02,780 --> 01:11:05,282 Fordi du ikke har at-- det er hurtigere. 1538 01:11:05,282 --> 01:11:07,490 Du behøver ikke at kommunikere med en anden enhed. 1539 01:11:07,490 --> 01:11:08,790 Hvis du er bare på din klient, du aldrig 1540 01:11:08,790 --> 01:11:11,280 nødt til at gå og se hvad der er på serveren 1541 01:11:11,280 --> 01:11:13,150 og derefter rapportere tilbage eller noget lignende. 1542 01:11:13,150 --> 01:11:15,410 Så klientsiden tendens til være en lille smule hurtigere. 1543 01:11:15,410 --> 01:11:17,910 >> GABE: Ja, men dette betyder ikke, PHP er 1544 01:11:17,910 --> 01:11:20,440 hurtigere end JavaScript eller noget af lignende. 1545 01:11:20,440 --> 01:11:23,270 De kører slags i samme hastighed, fordi de er begge 1546 01:11:23,270 --> 01:11:24,490 fortolket sprog. 1547 01:11:24,490 --> 01:11:26,680 Det, der er langsom her er anmodningen. 1548 01:11:26,680 --> 01:11:28,870 Så du faktisk vil hele vejen over til Brasilien 1549 01:11:28,870 --> 01:11:31,460 at få nogle oplysninger der bor der. 1550 01:11:31,460 --> 01:11:34,590 Men PHP og JavaScript, de slags kører i samme hastighed. 1551 01:11:34,590 --> 01:11:37,930 Det er ikke, at man er hurtigere end den anden. 1552 01:11:37,930 --> 01:11:40,600 Dette også, trick spørgsmål her. 1553 01:11:40,600 --> 01:11:47,338 Så JavaScript aldrig bliver maskinkode, sandt eller falsk? 1554 01:11:47,338 --> 01:11:48,590 >> PUBLIKUM: Falsk. 1555 01:11:48,590 --> 01:11:49,090 GABE: Falsk. 1556 01:11:49,090 --> 01:11:51,298 Det skal blive maskinen kode, fordi maskinen kode er 1557 01:11:51,298 --> 01:11:53,210 det eneste maskinen forstår. 1558 01:11:53,210 --> 01:11:55,800 Selvom det ikke er kompileret, det stadig bliver maskinkode 1559 01:11:55,800 --> 01:11:59,120 fordi tolken er bare et program, der går linje for linje 1560 01:11:59,120 --> 01:12:02,170 og omdanner denne linje i noget computeren forstår. 1561 01:12:02,170 --> 01:12:02,825 OK? 1562 01:12:02,825 --> 01:12:03,325 Cool. 1563 01:12:03,325 --> 01:12:08,530 1564 01:12:08,530 --> 01:12:12,890 >> Davin: Her er bare et meget grundlæggende hej verden JavaScript-program. 1565 01:12:12,890 --> 01:12:15,590 Så jeg ved ikke, if-- du har set dette. 1566 01:12:15,590 --> 01:12:17,630 Men du skal bare HTML her. 1567 01:12:17,630 --> 01:12:21,020 Og i stedet for faktisk at sætte JavaScript i scriptet tags, 1568 01:12:21,020 --> 01:12:22,810 så du ville normalt sætte det i hovedet. 1569 01:12:22,810 --> 01:12:24,030 Du har script tags. 1570 01:12:24,030 --> 01:12:24,870 Du taber det der. 1571 01:12:24,870 --> 01:12:28,350 Alt vi har gjort her, er vi har linket in-- så vi har linket i en JavaScript-fil 1572 01:12:28,350 --> 01:12:29,137 som denne. 1573 01:12:29,137 --> 01:12:30,470 Og du har alle gjort det, ikke? 1574 01:12:30,470 --> 01:12:34,740 Så når du brugte jQuery og underscore.js i sidste p-sæt, 1575 01:12:34,740 --> 01:12:38,700 du ikke har tonsvis af kode op i Dit script tags, op i dit hoved. 1576 01:12:38,700 --> 01:12:41,415 Du kan gøre det, men i stedet du bare forbinder det i. 1577 01:12:41,415 --> 01:12:43,540 Og du linker den i ligesom du gør med CSS. 1578 01:12:43,540 --> 01:12:50,186 Så det bare gør det nemmere at læse så din kode er ikke som 1.000 linjer lang 1579 01:12:50,186 --> 01:12:52,310 med tonsvis af funktioner, du måske ikke bruger. 1580 01:12:52,310 --> 01:12:53,518 >> I stedet kan du bare linke det i. 1581 01:12:53,518 --> 01:12:55,050 Det compartmentalizes det. 1582 01:12:55,050 --> 01:13:00,110 Det er ligesom at skrive nogle header-fil, og så herunder header fil i C. 1583 01:13:00,110 --> 01:13:01,620 Tænk på det ligesom dette. 1584 01:13:01,620 --> 01:13:02,680 Så hvad betyder dette gøre? 1585 01:13:02,680 --> 01:13:04,560 Nå, dette kommer til at køre. 1586 01:13:04,560 --> 01:13:05,410 Det kommer til at advare. 1587 01:13:05,410 --> 01:13:08,020 Så du kommer til at få lidt pop up kaldet hej verden. 1588 01:13:08,020 --> 01:13:11,420 Hurtigt spørgsmål, bare tilregnelighed check, så du kan se her i kroppen, 1589 01:13:11,420 --> 01:13:13,160 sige organ, HTML her. 1590 01:13:13,160 --> 01:13:14,080 Hvad kommer først? 1591 01:13:14,080 --> 01:13:16,864 Skal jeg se krop, HTML her, eller kan jeg se advarslen først? 1592 01:13:16,864 --> 01:13:19,828 1593 01:13:19,828 --> 01:13:20,820 >> PUBLIKUM: Alert. 1594 01:13:20,820 --> 01:13:21,470 >> Davin: Right. 1595 01:13:21,470 --> 01:13:22,110 Han siger alarm. 1596 01:13:22,110 --> 01:13:22,610 Hvorfor? 1597 01:13:22,610 --> 01:13:24,470 >> PUBLIKUM: Fordi du gå fra top til bund. 1598 01:13:24,470 --> 01:13:25,600 >> Davin: Ja. 1599 01:13:25,600 --> 01:13:26,100 Perfekt. 1600 01:13:26,100 --> 01:13:29,207 Så han siger, du går fra top til bund, hvilket er helt korrekt. 1601 01:13:29,207 --> 01:13:30,790 Du kommer til at gå fra top til bund. 1602 01:13:30,790 --> 01:13:34,790 Og i JavaScript, jQuery, har du en funktion, der er ligesom onload eller klar, 1603 01:13:34,790 --> 01:13:38,030 og det siger, OK, vent alt dette HTML er indlæst. 1604 01:13:38,030 --> 01:13:39,580 Og så kalder JavaScript. 1605 01:13:39,580 --> 01:13:42,190 Fordi vi ikke har det her, det allerførste ting, der vil ske 1606 01:13:42,190 --> 01:13:43,920 er det kommer til at gå fra top til bund. 1607 01:13:43,920 --> 01:13:46,310 Det kommer til at ramme det JS kalder, det vil advare. 1608 01:13:46,310 --> 01:13:49,510 Efter at du klikker på OK, denne indberetning går væk. 1609 01:13:49,510 --> 01:13:53,600 Så det kommer til at vise du kroppen HTML her. 1610 01:13:53,600 --> 01:13:54,590 Nice. 1611 01:13:54,590 --> 01:14:00,880 >> OK, så bare virkelig hurtig, skrivning i JavaScript er super hurtig. 1612 01:14:00,880 --> 01:14:02,710 For at erklære en variabel, var navn. 1613 01:14:02,710 --> 01:14:07,070 Så i C, har du int i, du har at erklære hvilken form for type det er. 1614 01:14:07,070 --> 01:14:08,040 PHP, $. 1615 01:14:08,040 --> 01:14:08,755 JavaScript, var. 1616 01:14:08,755 --> 01:14:09,630 Vi talte om dette. 1617 01:14:09,630 --> 01:14:11,020 Okay, lad os gå. 1618 01:14:11,020 --> 01:14:12,510 >> Loops, samme ting. 1619 01:14:12,510 --> 01:14:14,230 Samme ting. 1620 01:14:14,230 --> 01:14:18,165 Funktion erklæringer, så ligesom du har set i C. 1621 01:14:18,165 --> 01:14:21,290 Det eneste anderledes er det, når du kommer til andre programmeringssprog, 1622 01:14:21,290 --> 01:14:24,780 ligesom når du tager 51 næste semester og du laver med OCaml, 1623 01:14:24,780 --> 01:14:26,690 du kan håndtere anonyme funktioner. 1624 01:14:26,690 --> 01:14:28,240 Så det er præcis, hvad du har her. 1625 01:14:28,240 --> 01:14:31,560 Så du ønsker at sætte i sum, en slags sumværdi. 1626 01:14:31,560 --> 01:14:33,870 Men du kan kun gøre det én gang. 1627 01:14:33,870 --> 01:14:37,310 Så du vil ikke kalde det funktion sum, give det en funktion erklæring. 1628 01:14:37,310 --> 01:14:39,830 I stedet kan du bare bruge det som en anonym funktion. 1629 01:14:39,830 --> 01:14:42,469 Og du har set dette en masse. 1630 01:14:42,469 --> 01:14:44,510 Du vil se et eksempel på dette i et par slides. 1631 01:14:44,510 --> 01:14:45,597 Ja, vil vi se. 1632 01:14:45,597 --> 01:14:46,430 GABE: Godt spørgsmål. 1633 01:14:46,430 --> 01:14:50,660 Hvornår kan du bruge en anonym funktion her? 1634 01:14:50,660 --> 01:14:54,111 Dybest set, når du vil have noget, som en begivenhed, at ske. 1635 01:14:54,111 --> 01:14:55,860 Så når musen er klikket for eksempel 1636 01:14:55,860 --> 01:14:57,790 du vil nogle funktion, der skal kaldes. 1637 01:14:57,790 --> 01:15:00,570 Så du passerer til begivenheden handler, du sender til arrangementet, 1638 01:15:00,570 --> 01:15:02,870 slags, den funktion, du ønsker at blive kaldt. 1639 01:15:02,870 --> 01:15:04,710 Og hvad du passerer er ligesom i slutningen 1640 01:15:04,710 --> 01:15:08,757 af dagen, blot en pointer til at instruktion, til funktionen. 1641 01:15:08,757 --> 01:15:11,090 Så det er ikke ligesom du passerer hele koden, ligesom 1642 01:15:11,090 --> 01:15:12,173 en pegepind til funktionen. 1643 01:15:12,173 --> 01:15:17,871 Og så, når nogen klikker på mus, så denne funktion bliver kaldt. 1644 01:15:17,871 --> 01:15:22,340 >> Davin: Arrays, så du har en array erklæring. 1645 01:15:22,340 --> 01:15:23,990 Så, for at et array sætte tingene i. 1646 01:15:23,990 --> 01:15:25,769 Rigtig hurtig, hvad vil det udskrive? 1647 01:15:25,769 --> 01:15:27,060 Hvad vil det tredje element være? 1648 01:15:27,060 --> 01:15:31,470 1649 01:15:31,470 --> 01:15:32,450 >> PUBLIKUM: "JS". 1650 01:15:32,450 --> 01:15:33,940 >> Davin: Højre, ville det være "JS". 1651 01:15:33,940 --> 01:15:35,760 Vent, gå tilbage. 1652 01:15:35,760 --> 01:15:37,100 Hvad er længden? 1653 01:15:37,100 --> 01:15:38,117 >> PUBLIKUM: Tre. 1654 01:15:38,117 --> 01:15:38,950 Davin: Tre, ikke? 1655 01:15:38,950 --> 01:15:40,210 Præcis hvad du synes. 1656 01:15:40,210 --> 01:15:42,072 OK, nu gå. 1657 01:15:42,072 --> 01:15:43,530 Arrays, kan du tilføje ting til dem. 1658 01:15:43,530 --> 01:15:45,395 Så du kan gå ud over deres oprindelige grænser. 1659 01:15:45,395 --> 01:15:46,740 Bare noget at huske på. 1660 01:15:46,740 --> 01:15:49,760 PHP, JavaScript, de er lidt lidt mere tilgivende i form af ting 1661 01:15:49,760 --> 01:15:50,570 sådan. 1662 01:15:50,570 --> 01:15:54,260 Objekter, meget gerne structs i C, meget 1663 01:15:54,260 --> 01:15:56,590 ligesom associative arrays i PHP. 1664 01:15:56,590 --> 01:15:58,720 I har alle haft erfaringer med dette. 1665 01:15:58,720 --> 01:16:01,880 Så JSON, når du passerer JSON frem og tilbage i p-sæt otte, 1666 01:16:01,880 --> 01:16:03,260 det er dit objekt. 1667 01:16:03,260 --> 01:16:06,290 >> Så ja, eksempelvis rigtig hurtig eksempel. 1668 01:16:06,290 --> 01:16:07,880 Her er et objekt. 1669 01:16:07,880 --> 01:16:12,700 Den måde du referere dette objekt, så bare virkelig hurtig, 1670 01:16:12,700 --> 01:16:18,630 lad os sige, at jeg ønskede at finde ud, OK, hvad er kurset? 1671 01:16:18,630 --> 01:16:20,681 Og så objektet navn her er CS50. 1672 01:16:20,681 --> 01:16:23,180 Og så, hvis jeg havde en associativ array, hvordan ville jeg gøre det? 1673 01:16:23,180 --> 01:16:24,580 Jeg kommer til at bruge en nøgle, ikke? 1674 01:16:24,580 --> 01:16:26,030 Så jeg har navnet på arrayet. 1675 01:16:26,030 --> 01:16:30,160 Jeg har beslag, citater, nøgle, end citater, endebeslag, 1676 01:16:30,160 --> 01:16:33,610 og der vil referere at element inde i mit associative array. 1677 01:16:33,610 --> 01:16:37,646 Hvordan kan jeg refereres kursus inde i mit objekt? 1678 01:16:37,646 --> 01:16:39,170 Nogen kender? 1679 01:16:39,170 --> 01:16:40,622 >> Publikum: [uhørligt]. 1680 01:16:40,622 --> 01:16:41,784 >> Davin: Hvad sker der? 1681 01:16:41,784 --> 01:16:42,700 PUBLIKUM: CS50.course. 1682 01:16:42,700 --> 01:16:43,510 Davin: Right, ja. 1683 01:16:43,510 --> 01:16:45,320 Så CS50.course. 1684 01:16:45,320 --> 01:16:48,770 Så den måde, du referere tingene inde i en JSON objekt er med en prik. 1685 01:16:48,770 --> 01:16:53,114 >> PUBLIKUM: Du kan også bruge matrix syntaks. 1686 01:16:53,114 --> 01:16:54,050 >> Davin: OK, fint. 1687 01:16:54,050 --> 01:16:57,544 >> GABE: Du kan også bruge CS50 beslag, snor, ligesom anførselstegn. 1688 01:16:57,544 --> 01:16:59,210 PUBLIKUM: Jeg synes det er identisk med PHP. 1689 01:16:59,210 --> 01:17:00,293 GABE: Det er det samme. 1690 01:17:00,293 --> 01:17:02,487 Davin: Fint! 1691 01:17:02,487 --> 01:17:03,945 Men du vil se dette andre steder. 1692 01:17:03,945 --> 01:17:08,990 1693 01:17:08,990 --> 01:17:10,480 Ja, så holde ud. 1694 01:17:10,480 --> 01:17:13,330 Det er, hvad jeg lige sagde. 1695 01:17:13,330 --> 01:17:17,840 Så ind i en JavaScript jQuery eksempel. 1696 01:17:17,840 --> 01:17:19,440 Så dette er min DOM, ikke? 1697 01:17:19,440 --> 01:17:22,290 1698 01:17:22,290 --> 01:17:25,410 Rigtig hurtig, så jeg har en hoved, hej verden, krop. 1699 01:17:25,410 --> 01:17:26,160 Jeg har en knap. 1700 01:17:26,160 --> 01:17:27,870 Den siger "skubbe mig", så jeg ønsker at presse den. 1701 01:17:27,870 --> 01:17:29,745 Og jeg ønsker at gøre noget når det er klikket. 1702 01:17:29,745 --> 01:17:31,220 Højre, næste. 1703 01:17:31,220 --> 01:17:34,630 >> Højre, så dette er min JavaScript. 1704 01:17:34,630 --> 01:17:37,790 Så jQuery er blot en lettere måde at skrive JavaScript. 1705 01:17:37,790 --> 01:17:40,920 Så dette, og hvad jeg har tænkt mig at vise du næste, bliver jQuery, 1706 01:17:40,920 --> 01:17:41,930 er identiske. 1707 01:17:41,930 --> 01:17:43,990 Så de vil gøre de samme ting. 1708 01:17:43,990 --> 01:17:45,974 Just jQuery tendens til at være lidt lettere. 1709 01:17:45,974 --> 01:17:47,140 Folk har en tendens til at lide det mere. 1710 01:17:47,140 --> 01:17:48,390 Det har en masse funktioner. 1711 01:17:48,390 --> 01:17:49,830 Så folk har tendens til at bruge jQuery. 1712 01:17:49,830 --> 01:17:53,270 Du alle brugte jQuery i den sidste p-sæt. 1713 01:17:53,270 --> 01:17:54,270 Så hvad vil det gøre? 1714 01:17:54,270 --> 01:17:56,580 Hvad vil denne JavaScript-- så dette er blot almindelig JavaScript. 1715 01:17:56,580 --> 01:17:57,430 Hvad vil det gøre? 1716 01:17:57,430 --> 01:18:00,600 1717 01:18:00,600 --> 01:18:03,450 Hvad vil det gøre? 1718 01:18:03,450 --> 01:18:04,890 >> Så først, du ser vinduet onload. 1719 01:18:04,890 --> 01:18:05,390 Right? 1720 01:18:05,390 --> 01:18:06,640 Så vi ikke se, at før. 1721 01:18:06,640 --> 01:18:09,380 Så dette kommer til at vente indtil hele vinduet belastninger. 1722 01:18:09,380 --> 01:18:12,770 Så det kommer til at vente, indtil html, alle de billeder belastning 1723 01:18:12,770 --> 01:18:13,770 før det gør noget. 1724 01:18:13,770 --> 01:18:16,050 Så lad os sige vores DOM er indlæst. 1725 01:18:16,050 --> 01:18:17,270 Alt er der. 1726 01:18:17,270 --> 01:18:19,080 Så hvad vil der ske? 1727 01:18:19,080 --> 01:18:19,922 Ja? 1728 01:18:19,922 --> 01:18:22,880 >> PUBLIKUM: Knap vises. 1729 01:18:22,880 --> 01:18:25,201 >> Davin: Knappen er der allerede. 1730 01:18:25,201 --> 01:18:26,700 Ja, så knappens allerede. 1731 01:18:26,700 --> 01:18:31,190 Men det kommer til at sige, OK, hvis jeg klikker på knappen, 1732 01:18:31,190 --> 01:18:33,650 så knappens allerede der, ligesom HTML-tag. 1733 01:18:33,650 --> 01:18:35,980 Vent, gå tilbage reelle hurtig. 1734 01:18:35,980 --> 01:18:39,470 Dette tag lige ret her er går allerede at være en knap. 1735 01:18:39,470 --> 01:18:40,810 Der er allerede en knap. 1736 01:18:40,810 --> 01:18:44,120 Men så, JavaScript tag, lige her, 1737 01:18:44,120 --> 01:18:46,160 den siger, OK, jeg vil have at få element efter ID, 1738 01:18:46,160 --> 01:18:50,300 så søgeknappen bare siger, OK, jeg vil have at kortlægge denne variabel til denne knap. 1739 01:18:50,300 --> 01:18:53,120 Så variabel er blot en nemmere måde at få adgang til denne knap. 1740 01:18:53,120 --> 01:18:57,300 Og jeg siger, OK, hvis jeg klikker der knap, så hvis jeg klikker det element, 1741 01:18:57,300 --> 01:18:59,560 og dette element refererer til på knappen, hvis jeg klikker på det, 1742 01:18:59,560 --> 01:19:00,875 så jeg vil ringe til en funktion. 1743 01:19:00,875 --> 01:19:03,500 Her er en af ​​dem anonym funktioner vi talte om. 1744 01:19:03,500 --> 01:19:04,840 >> Bare ring nogle funktion. 1745 01:19:04,840 --> 01:19:08,840 Inde denne funktion, dybest set noget, vi har set en masse, alarm. 1746 01:19:08,840 --> 01:19:10,477 Du klikker på søgeknappen. 1747 01:19:10,477 --> 01:19:12,060 Det kommer til at dybest set har en knap. 1748 01:19:12,060 --> 01:19:13,040 Du klikker på det. 1749 01:19:13,040 --> 01:19:14,040 Du får denne indberetning. 1750 01:19:14,040 --> 01:19:14,850 X ud. 1751 01:19:14,850 --> 01:19:15,754 Det er det. 1752 01:19:15,754 --> 01:19:16,254 Ja? 1753 01:19:16,254 --> 01:19:21,980 >> PUBLIKUM: Så hvis du sætter scriptet [Uhørligt], script-tag i din HTML? 1754 01:19:21,980 --> 01:19:24,300 >> Davin: Du kan sætte scriptet tag lige i hovedet 1755 01:19:24,300 --> 01:19:30,667 fordi du har denne onload. 1756 01:19:30,667 --> 01:19:32,000 Det er også, at du har et klik. 1757 01:19:32,000 --> 01:19:34,166 Så det kommer til at vente, indtil du klikker på noget. 1758 01:19:34,166 --> 01:19:37,470 Men onload er bare for at være sikker, for at gøre at alt belastninger i din HTML 1759 01:19:37,470 --> 01:19:38,170 forhånd. 1760 01:19:38,170 --> 01:19:39,247 Ja? 1761 01:19:39,247 --> 01:19:40,330 Du ønsker at sige noget? 1762 01:19:40,330 --> 01:19:41,080 >> GABE: [uhørligt]. 1763 01:19:41,080 --> 01:19:42,485 Davin: Ja. 1764 01:19:42,485 --> 01:19:45,426 >> PUBLIKUM: Så onLoad undviger definere variable søgeknappen 1765 01:19:45,426 --> 01:19:49,930 ved blot at sige document.getElementById søgeknappen dot [uhørligt]. 1766 01:19:49,930 --> 01:19:52,320 >> Davin: Definitely, men derefter din streng bliver bare enormt. 1767 01:19:52,320 --> 01:19:55,553 Præcis, så det er bare at gøre det lettere for dig, ja. 1768 01:19:55,553 --> 01:19:56,053 Ja? 1769 01:19:56,053 --> 01:19:57,886 >> Publikum: Hvor gjorde vi skabe window.onload? 1770 01:19:57,886 --> 01:19:58,951 Eller document.ready? 1771 01:19:58,951 --> 01:20:00,590 >> Davin: Ja, der er. 1772 01:20:00,590 --> 01:20:02,094 Ja, der er, jeg kontrolleret. 1773 01:20:02,094 --> 01:20:03,710 >> GABE: Ikke for dem at bekymre sig om. 1774 01:20:03,710 --> 01:20:06,970 >> Davin: OK, så jeg har tænkt mig at fortælle dig alligevel. 1775 01:20:06,970 --> 01:20:11,005 Så dybest set, bare i almindelighed, så window.onload venter, indtil din DOM, alle 1776 01:20:11,005 --> 01:20:12,180 din HTML, belastninger. 1777 01:20:12,180 --> 01:20:13,513 Det venter, indtil dine billeder belastning. 1778 01:20:13,513 --> 01:20:14,930 Den venter, før alt belastninger. 1779 01:20:14,930 --> 01:20:18,410 document.ready, det bare venter, indtil dine DOM belastninger. 1780 01:20:18,410 --> 01:20:22,190 Når HTML er alle der, når din DOM er der, begynder at køre. 1781 01:20:22,190 --> 01:20:23,400 Det er den eneste forskel. 1782 01:20:23,400 --> 01:20:24,700 >> GABE: Hurtig tilregnelighed kontrollere her. 1783 01:20:24,700 --> 01:20:29,060 Så det kan ses slags ligesom en linje kode, ikke? 1784 01:20:29,060 --> 01:20:33,600 Fordi det er window.onload svarer til en masse ting. 1785 01:20:33,600 --> 01:20:39,030 Når JavaScript læser dette, sandt eller falsk, bliver den funktion udføres. 1786 01:20:39,030 --> 01:20:40,020 Falsk. 1787 01:20:40,020 --> 01:20:40,920 OK? 1788 01:20:40,920 --> 01:20:44,470 Hvad sker der her, er du bare passerer denne funktion som en anonym funktioner 1789 01:20:44,470 --> 01:20:45,300 at window.onload. 1790 01:20:45,300 --> 01:20:48,480 Og så når det går til rent faktisk at få henrettet? 1791 01:20:48,480 --> 01:20:49,600 Når vinduet belastninger. 1792 01:20:49,600 --> 01:20:50,420 Det er en begivenhed. 1793 01:20:50,420 --> 01:20:52,460 Så det er jus t ting vi er taler om tidligere, ikke? 1794 01:20:52,460 --> 01:20:54,580 Så når begivenheden sker, funktionen sker. 1795 01:20:54,580 --> 01:20:55,746 Samme ting med onclick. 1796 01:20:55,746 --> 01:20:59,510 1797 01:20:59,510 --> 01:21:03,130 >> Davin: OK, så nogen tog væk document.ready. 1798 01:21:03,130 --> 01:21:04,698 Men det vil være nøjagtig same-- 1799 01:21:04,698 --> 01:21:06,864 PUBLIKUM: Den dollartegn, der er en document.ready. 1800 01:21:06,864 --> 01:21:07,710 Det er en genvej. 1801 01:21:07,710 --> 01:21:08,501 >> Davin: Åh, det er? 1802 01:21:08,501 --> 01:21:10,880 1803 01:21:10,880 --> 01:21:15,500 OK, så det betyder document.ready, genvej. 1804 01:21:15,500 --> 01:21:19,660 Men dette er den samme som window.onload undtagen den lille forskel 1805 01:21:19,660 --> 01:21:20,680 Jeg fortalte dig om. 1806 01:21:20,680 --> 01:21:21,870 Og det er jQuery. 1807 01:21:21,870 --> 01:21:25,190 Så dette er nøjagtig den samme thing-- dette er JavaScript. 1808 01:21:25,190 --> 01:21:29,500 Dette er bare-- nogle mennesker tænker på det som en mere let, strømlinet udgave 1809 01:21:29,500 --> 01:21:32,370 der har masser af funktionalitet at du sandsynligvis vil bruge. 1810 01:21:32,370 --> 01:21:34,500 Så dette gør præcis det samme. 1811 01:21:34,500 --> 01:21:37,110 >> Så ting at slags påpege. 1812 01:21:37,110 --> 01:21:40,364 Så i det andet eksempel, vi havde document.getElementById, 1813 01:21:40,364 --> 01:21:42,280 så vi havde denne lange streng, der kommer til at få 1814 01:21:42,280 --> 01:21:44,290 elementet ved hvad ID det har. 1815 01:21:44,290 --> 01:21:46,470 Det har erstattet af denne indkaldelse lige her. 1816 01:21:46,470 --> 01:21:50,860 Så du ser dollartegn, så kan du se tilbud, hashtag. 1817 01:21:50,860 --> 01:21:52,370 Hashtag er altid en vælger. 1818 01:21:52,370 --> 01:21:54,730 Den siger, OK, det har at gøre med et ID. 1819 01:21:54,730 --> 01:21:56,120 Hvad er vælgeren for en klasse? 1820 01:21:56,120 --> 01:21:57,190 >> PUBLIKUM: Dot. 1821 01:21:57,190 --> 01:21:57,960 >> Davin: Dot, højre. 1822 01:21:57,960 --> 01:22:01,950 Hvis du bare kommer til at Vælg et mærke, hvad er det? 1823 01:22:01,950 --> 01:22:03,310 Det er bare det tag, nøjagtigt. 1824 01:22:03,310 --> 01:22:05,560 Og du kan bruge det her, så godt. 1825 01:22:05,560 --> 01:22:08,560 >> GABE: Og tag, mener vi ligesom div, for eksempel, eller hoved. 1826 01:22:08,560 --> 01:22:11,500 >> Davin: Eller organ eller p eller noget lignende, ja. 1827 01:22:11,500 --> 01:22:14,390 Så her, OK, i stedet for at sige document.getElementById, 1828 01:22:14,390 --> 01:22:16,500 det er bare præcis det samme. 1829 01:22:16,500 --> 01:22:17,990 Lige i jQuery, det er kortere. 1830 01:22:17,990 --> 01:22:19,860 Så det er enklere. 1831 01:22:19,860 --> 01:22:23,420 Så, ikke mere onclick, skal du blot klikke. 1832 01:22:23,420 --> 01:22:26,320 jQuery funktion, kalder denne funktion. 1833 01:22:26,320 --> 01:22:27,580 Alert er nøjagtig den samme. 1834 01:22:27,580 --> 01:22:29,452 Så det er en lille smule mindre eller lidt 1835 01:22:29,452 --> 01:22:32,410 kortere, tænke lidt bit-- folk det er lidt nemmere at skrive, 1836 01:22:32,410 --> 01:22:34,600 en lille smule lettere at forstå. 1837 01:22:34,600 --> 01:22:35,640 Men dette er jQuery. 1838 01:22:35,640 --> 01:22:37,887 En masse mennesker få lidt lidt forvirret og bekymret 1839 01:22:37,887 --> 01:22:40,220 og de tror, ​​OK, jQuery er anderledes end JavaScript. 1840 01:22:40,220 --> 01:22:42,136 Jeg skal huske disse to forskellige ting. 1841 01:22:42,136 --> 01:22:42,740 Det er ikke. 1842 01:22:42,740 --> 01:22:45,315 Jeg mener, det er anderledes syntaks. 1843 01:22:45,315 --> 01:22:46,970 Men jQuery er JavaScript. 1844 01:22:46,970 --> 01:22:50,050 Det er bare en tilsyneladende bedre version, 1845 01:22:50,050 --> 01:22:51,967 kan være lettere at forstå, at folk bruger. 1846 01:22:51,967 --> 01:22:53,716 GABE: Ja, for at være ærlig, at dollartegn 1847 01:22:53,716 --> 01:22:57,240 som du ser i jQuery, det er bare navn på en funktion, jQuery definerer. 1848 01:22:57,240 --> 01:22:58,614 Det har ikke noget specielt. 1849 01:22:58,614 --> 01:23:03,140 Er Det er bare navnet på en funktion, ligesom du kan definere dollartegn. 1850 01:23:03,140 --> 01:23:05,670 >> Davin: Ja, så talte om dette. 1851 01:23:05,670 --> 01:23:06,680 Nogle nyttige ting. 1852 01:23:06,680 --> 01:23:10,414 Jeg ser tilbage på de gamle quizzer. 1853 01:23:10,414 --> 01:23:13,080 I de seneste par quizzer, de har måtte bruge ting som dette. 1854 01:23:13,080 --> 01:23:15,230 Så document.ready, så sørge for alt er 1855 01:23:15,230 --> 01:23:17,410 indlæst, inden du begynder at gøre ting. 1856 01:23:17,410 --> 01:23:20,120 Vælg et ID, eller vælg en klasse, det ville bare 1857 01:23:20,120 --> 01:23:24,020 være quote dot nogle klasse, ende citat. 1858 01:23:24,020 --> 01:23:26,580 Send, så hvis du er sender en formular og opkald 1859 01:23:26,580 --> 01:23:28,830 denne funktion efter formularen anført. 1860 01:23:28,830 --> 01:23:34,210 Value, så lad os sige, jeg havde en formular indsendelse, ligesom et brugernavn, en e-mail, 1861 01:23:34,210 --> 01:23:34,950 uanset hvad. 1862 01:23:34,950 --> 01:23:36,010 Jeg havde en tekstboks. 1863 01:23:36,010 --> 01:23:37,670 Så jeg skriver i denne tekstboks. 1864 01:23:37,670 --> 01:23:42,170 Tja, hvis du ønsker at få værdien ud af den tekstboks, du bruger dot val. 1865 01:23:42,170 --> 01:23:44,050 Og så, hernede, dot HTML er den samme 1866 01:23:44,050 --> 01:23:47,710 er ligesom dokument dot getElementById dot innerHTML. 1867 01:23:47,710 --> 01:23:50,890 Så det kommer til at vende tilbage du HTML fra ID. 1868 01:23:50,890 --> 01:23:55,080 Her du bare bruge nogle ID eller hvad dot HTML. 1869 01:23:55,080 --> 01:23:56,930 Det får den HTML fra dette element. 1870 01:23:56,930 --> 01:24:00,130 Hvis du ønskede at så ændre det HTML, kan du give det noget. 1871 01:24:00,130 --> 01:24:05,600 Så du ville være ligesom dot HTML, og derefter indeni, citater, nye HTML eller noget. 1872 01:24:05,600 --> 01:24:07,490 >> GABE: OK, så AJAX. 1873 01:24:07,490 --> 01:24:10,347 Jeg kan virkelig godt lide at forstå AJAX rigtig godt. 1874 01:24:10,347 --> 01:24:12,430 Så jeg vil have dig fyre til forstå AJAX rigtig godt. 1875 01:24:12,430 --> 01:24:14,221 For hvis du gør, du temmelig meget at gå 1876 01:24:14,221 --> 01:24:16,810 at forstå alt det, har at gøre med HTTP, PHP, 1877 01:24:16,810 --> 01:24:21,080 JavaScript fordi det hele kommer sammen i AJAX. 1878 01:24:21,080 --> 01:24:25,130 AJAX er ikke et sprog. 1879 01:24:25,130 --> 01:24:27,000 AJAX er en teknik. 1880 01:24:27,000 --> 01:24:31,690 Og det bruger masser af forskellige værktøjer. 1881 01:24:31,690 --> 01:24:35,090 AJAX står for asynkron JavaScript XML. 1882 01:24:35,090 --> 01:24:36,730 Så fremgangsmåden sproget, dataene. 1883 01:24:36,730 --> 01:24:40,610 >> Så det vigtigste sprog, vi bruger i AJAX til at udløse alt 1884 01:24:40,610 --> 01:24:42,830 og til at håndtere alt senere er JavaScript. 1885 01:24:42,830 --> 01:24:45,160 Det er derfor, det vedrører meget tæt på JavaScript. 1886 01:24:45,160 --> 01:24:49,810 Og så asynkron er fordi vi ikke gør det 1887 01:24:49,810 --> 01:24:51,980 alle på én gang, når vi indlæsning af siden. 1888 01:24:51,980 --> 01:24:57,190 Det er den ting, som vi kan gøre tingene slags parallelt. 1889 01:24:57,190 --> 01:24:59,725 Hovedidéen bag AJAX er, at du vil 1890 01:24:59,725 --> 01:25:02,170 det at få nogle specifikke oplysninger. 1891 01:25:02,170 --> 01:25:06,450 For eksempel, når du skriver nye brugernavn når du registrerer et brugernavn, 1892 01:25:06,450 --> 01:25:08,520 mit brugernavn er abc123. 1893 01:25:08,520 --> 01:25:11,671 Og så, i slutningen af formular, skal du klikke på Send. 1894 01:25:11,671 --> 01:25:14,420 Og det måtte gå til serveren, og derefter kontrollere, om i databasen, 1895 01:25:14,420 --> 01:25:15,594 abc123 er der allerede. 1896 01:25:15,594 --> 01:25:18,510 Og hvis det er der allerede, det siger, brugernavn allerede findes i databasen. 1897 01:25:18,510 --> 01:25:21,010 Og de, er du nødt til at fylde ud hele skemaet igen. 1898 01:25:21,010 --> 01:25:23,110 Og det var virkelig, virkelig dårlig. 1899 01:25:23,110 --> 01:25:25,440 >> Og så siger folk, OK, kan hvorfor vi ikke bare 1900 01:25:25,440 --> 01:25:29,560 gøre en lille HTTP-anmodning til lige tjekke at se, om brugeren er i databasen 1901 01:25:29,560 --> 01:25:32,080 før brugeren måtte indsende hele formen? 1902 01:25:32,080 --> 01:25:36,350 Så for eksempel når bruger færdig skrive abc123, 1903 01:25:36,350 --> 01:25:39,660 lad os bare gå til serveren lidt bit og bare få en sand eller falsk 1904 01:25:39,660 --> 01:25:43,080 fra serveren for at se om det er et gyldigt brugernavn eller ej. 1905 01:25:43,080 --> 01:25:49,250 OK, så det er en af ​​de vigtigste anvendelser af AJAX dag stadig. 1906 01:25:49,250 --> 01:25:52,130 >> Davin: Så virkelig hurtig, i en Ajax opkald i jQuery, 1907 01:25:52,130 --> 01:25:54,770 du kan angive, at du ønsker det skal være synkron. 1908 01:25:54,770 --> 01:25:56,330 Du bør ikke gøre dette. 1909 01:25:56,330 --> 01:25:57,640 Men du kan gøre det. 1910 01:25:57,640 --> 01:25:59,277 Og hvis du gjorde det, hvad der ville ske? 1911 01:25:59,277 --> 01:26:01,610 Nå, for eksempel, når du er få nyheder eller hvad, 1912 01:26:01,610 --> 01:26:05,464 din browser er bare at vente indtil hele opkaldet er afsluttet 1913 01:26:05,464 --> 01:26:08,130 stedet for at lade dig gøre andet ting lige efter du klikker på det. 1914 01:26:08,130 --> 01:26:14,560 1915 01:26:14,560 --> 01:26:17,115 >> GABE: Det er ikke passerer længere. 1916 01:26:17,115 --> 01:26:19,681 Oh my god. 1917 01:26:19,681 --> 01:26:20,180 Undskyld! 1918 01:26:20,180 --> 01:26:22,810 1919 01:26:22,810 --> 01:26:23,601 Yup. 1920 01:26:23,601 --> 01:26:25,350 "I fortiden, klient nødvendig til anmodning 1921 01:26:25,350 --> 01:26:26,840 hele indholdet af en hjemmeside. " 1922 01:26:26,840 --> 01:26:28,210 Det er, hvad jeg sagde. 1923 01:26:28,210 --> 01:26:30,070 Det giver os mulighed for at sende ekstra GET eller POST 1924 01:26:30,070 --> 01:26:32,140 anmodninger uden at have at genindlæse vores browser. 1925 01:26:32,140 --> 01:26:34,806 Så i slutningen af ​​dagen, er vi faktisk gør en HTTP forespørgsler 1926 01:26:34,806 --> 01:26:35,740 her ved hjælp af JavaScript. 1927 01:26:35,740 --> 01:26:39,700 Fordi før, kun vi brugte JavaScript at ændre HTML, der allerede kom. 1928 01:26:39,700 --> 01:26:43,110 Og nu kan vi bruge det til at interface med web-servere så godt. 1929 01:26:43,110 --> 01:26:46,140 Den måde dette sker er vi kunden. 1930 01:26:46,140 --> 01:26:47,340 Davin er en klient. 1931 01:26:47,340 --> 01:26:50,797 Og han har alle de JavaScript kører fordi HTML er dum. 1932 01:26:50,797 --> 01:26:51,630 JavaScript er smart. 1933 01:26:51,630 --> 01:26:54,690 Så Davin Davin har sit smarte del og hans stumme del. 1934 01:26:54,690 --> 01:26:57,590 Han kommer til at bruge sin smarte del nu. 1935 01:26:57,590 --> 01:27:00,860 Han kommer til at bruge JavaScript til anmodning, for eksempel, 1936 01:27:00,860 --> 01:27:04,340 hvorvidt abc123 er i databasen eller ej. 1937 01:27:04,340 --> 01:27:08,450 >> Så Davin, please, du lige send mig en HTTP-anmodning. 1938 01:27:08,450 --> 01:27:09,197 Tak. 1939 01:27:09,197 --> 01:27:10,530 Så han har lige sendt en HTTP-anmodning. 1940 01:27:10,530 --> 01:27:11,270 Du ser det? 1941 01:27:11,270 --> 01:27:14,700 Og det er kun på samme måde at enhver HTTP-forespørgsel sendes. 1942 01:27:14,700 --> 01:27:16,830 Browseren, Google Chrome eller noget, er 1943 01:27:16,830 --> 01:27:19,570 kommer til at se, at Davin s forsøger at sende en HTTP-anmodning, 1944 01:27:19,570 --> 01:27:20,930 vil hjælpe hm en lille smule. 1945 01:27:20,930 --> 01:27:23,950 Og det kommer til at gå hele vejen til serveren. 1946 01:27:23,950 --> 01:27:27,370 Nu er serveren vil have PHP her, eller et andet sprog. 1947 01:27:27,370 --> 01:27:29,990 Ligesom i en normal HTTP-anmodning. 1948 01:27:29,990 --> 01:27:31,950 Det er temmelig meget en normal HTTP-anmodning. 1949 01:27:31,950 --> 01:27:33,658 >> Og så serveren vil sige, OK, 1950 01:27:33,658 --> 01:27:37,270 Davin vil have mig til at kontrollere, om denne abc123 er i databasen. 1951 01:27:37,270 --> 01:27:38,310 Gå tale med modellen. 1952 01:27:38,310 --> 01:27:41,310 Modellen siger, det er ikke. abc123 er en god brugernavn. 1953 01:27:41,310 --> 01:27:47,940 Og da, webserveren vil bruge PHP til at gøre en form for fil. 1954 01:27:47,940 --> 01:27:52,280 Det kunne være bogstaveligt talt bare en fil der indeholder "ja" i det, eller "nej, 1955 01:27:52,280 --> 01:27:53,315 eller noget lignende. 1956 01:27:53,315 --> 01:27:54,190 Det kunne være en hvilken som helst fil. 1957 01:27:54,190 --> 01:27:57,080 >> Det kunne være som jeg har tænkt mig at Send Davin et billede af en and 1958 01:27:57,080 --> 01:28:01,200 hvis det er i databasen, og Send et billede af en hamster 1959 01:28:01,200 --> 01:28:02,420 hvis det ikke er i databasen. 1960 01:28:02,420 --> 01:28:04,294 Det ville være slags dum, men det vil fungere. 1961 01:28:04,294 --> 01:28:07,030 OK, så jeg sender en and til Davin. 1962 01:28:07,030 --> 01:28:08,150 Davin fik en and. 1963 01:28:08,150 --> 01:28:13,330 Og nu, hvem der skal at håndtere duck? 1964 01:28:13,330 --> 01:28:16,390 Davin smarte del igen, så JavaScript, ikke? 1965 01:28:16,390 --> 01:28:18,620 JavaScript sendte anmodning, og JavaScript 1966 01:28:18,620 --> 01:28:22,300 kommer til at modtage anmodningen og fortolke det på en eller anden form. 1967 01:28:22,300 --> 01:28:26,630 >> Og i denne forstand, det vil sige, OK, hvis ænder så er jeg god. 1968 01:28:26,630 --> 01:28:30,770 Hvis hamster, så jeg har tænkt mig at sige, nej, brugernavn allerede 1969 01:28:30,770 --> 01:28:31,970 findes i databasen. 1970 01:28:31,970 --> 01:28:33,845 Men som regel, du er ikke kommer til at sende en and. 1971 01:28:33,845 --> 01:28:36,740 Du kommer til at sende noget lidt smartere. 1972 01:28:36,740 --> 01:28:40,320 Og det, vi bruger, er XML. 1973 01:28:40,320 --> 01:28:42,690 Og for nylig, vi bruger JSON. 1974 01:28:42,690 --> 01:28:45,629 JSON er bare JavaScript Object Notation, som 1975 01:28:45,629 --> 01:28:47,670 er dybest set får du en Hele JavaScript objekt. 1976 01:28:47,670 --> 01:28:50,820 Og du sætter den i en fil, ligesom at CS50 objekt, du fyre så. 1977 01:28:50,820 --> 01:28:53,090 Du sætter den i en fil, og du sender det over til Davin. 1978 01:28:53,090 --> 01:28:55,850 >> Så i dette tilfælde, ville jeg lave et JavaScript objekt 1979 01:28:55,850 --> 01:28:59,570 og bare sige, brugeren eksisterer, ja. 1980 01:28:59,570 --> 01:29:01,630 Eller bruger eksisterer, nej. 1981 01:29:01,630 --> 01:29:02,810 Og sende den tilbage til ham. 1982 01:29:02,810 --> 01:29:03,830 Og hvorfor JSON? 1983 01:29:03,830 --> 01:29:07,330 Fordi den person hvem der modtager denne er 1984 01:29:07,330 --> 01:29:10,030 vil bruge JavaScript at håndtere svar. 1985 01:29:10,030 --> 01:29:14,970 Og JavaScript virker så godt, fordi det hedder JavaScript Object Notation. 1986 01:29:14,970 --> 01:29:15,470 Right? 1987 01:29:15,470 --> 01:29:19,660 Så han kan bare kalde en funktion og få denne nice objekt fra svaret. 1988 01:29:19,660 --> 01:29:22,890 Og så vil han vide, om at brugeren er i databasen eller ej. 1989 01:29:22,890 --> 01:29:25,230 >> Så du ser, det hele kommer sammen i webserveren, 1990 01:29:25,230 --> 01:29:28,450 og så er der en HTTP til anmodning og en HTTP respons og alt. 1991 01:29:28,450 --> 01:29:30,600 Så sørg for at fyre forstå denne AJAX kald 1992 01:29:30,600 --> 01:29:37,260 fordi det hjælper dig med at forstå alle af de begreber, vi taler om. 1993 01:29:37,260 --> 01:29:40,260 >> Så her er et eksempel AJAX med jQuery. 1994 01:29:40,260 --> 01:29:42,130 Og her, vi gør med get JSON. 1995 01:29:42,130 --> 01:29:45,660 Så vi prøver ikke at få en billede af en kat her, eller en and. 1996 01:29:45,660 --> 01:29:48,110 Vi forsøger at få en JSON-fil. 1997 01:29:48,110 --> 01:29:51,184 Og så vi vente til det er gjort, prik gjort. 1998 01:29:51,184 --> 01:29:52,850 Det betyder, jeg venter på svar. 1999 01:29:52,850 --> 01:29:54,180 Det kan tage lidt tid. 2000 01:29:54,180 --> 01:29:56,360 Derefter skal du se en lille belastning. 2001 01:29:56,360 --> 01:29:59,340 Hvis du ønsker at gøre det i dit websted. 2002 01:29:59,340 --> 01:30:01,440 Så dot gjort, og hvad så sker, når det er gjort? 2003 01:30:01,440 --> 01:30:04,040 Du passerer i en anonym funktion, ligesom vi så før. 2004 01:30:04,040 --> 01:30:07,800 Fordi gjort, er en begivenhed, bare ligesom at klikke på en mus eller hvad, 2005 01:30:07,800 --> 01:30:08,710 for jQuery. 2006 01:30:08,710 --> 01:30:13,710 Så du passerer i denne funktion med data, tekst, status, og jqXHR. 2007 01:30:13,710 --> 01:30:15,790 Og dybest set, det er blot nogle variabler 2008 01:30:15,790 --> 01:30:22,160 som du kan bruge senere til at have status for HTTP-anmodning, 2009 01:30:22,160 --> 01:30:24,470 de data, det vil til at sende tilbage til dig. 2010 01:30:24,470 --> 01:30:28,740 Så kan du senere fortolke det og gøre noget meningsfuldt med det. 2011 01:30:28,740 --> 01:30:30,240 Og hvis det mislykkes, når det måske ikke? 2012 01:30:30,240 --> 01:30:33,780 Nå, når HTTP-anmodning giver dig en 500 eller noget lignende. 2013 01:30:33,780 --> 01:30:37,420 Derefter går det at fortælle dig status, hvilken slags fejl, der var, 2014 01:30:37,420 --> 01:30:38,420 og alle mulige ting. 2015 01:30:38,420 --> 01:30:40,630 Du er nødt til at sikre, at håndtere begge tilfælde 2016 01:30:40,630 --> 01:30:42,770 ellers går programmet vanvittigt. 2017 01:30:42,770 --> 01:30:45,820 >> Davin: Så ja, det er præcis hvad du så på din sidste p-sæt. 2018 01:30:45,820 --> 01:30:49,720 Selve AJAX opkald er i get JSON. 2019 01:30:49,720 --> 01:30:50,587 Det er opkaldet. 2020 01:30:50,587 --> 01:30:52,920 Og så prik gjort, er ligesom kontrollerer det, hvis det er en succes. 2021 01:30:52,920 --> 01:30:55,620 Hvis det lykkes, du ønsker at gøre noget med dataene. 2022 01:30:55,620 --> 01:30:59,290 Du får tilbage fra at Anmodning data JSON. 2023 01:30:59,290 --> 01:31:00,600 Det er, hvad du får tilbage. 2024 01:31:00,600 --> 01:31:04,470 Så hvis du husker fra din p-sæt, en masse af jer var ligesom data beslag i 2025 01:31:04,470 --> 01:31:06,302 eller hvad, dot link eller titel. 2026 01:31:06,302 --> 01:31:08,260 Uanset hvad der kommer tilbage fra JSON, uanset 2027 01:31:08,260 --> 01:31:11,020 felterne er i denne JSON objekt, det er, hvad du får tilbage. 2028 01:31:11,020 --> 01:31:12,394 Data, hvad du får tilbage. 2029 01:31:12,394 --> 01:31:15,510 Tekst status, bare noget, lader dig vide, hvad der skete. 2030 01:31:15,510 --> 01:31:20,570 Og så, den jqXHR, det er bare jQuery XML HTTP-anmodning. 2031 01:31:20,570 --> 01:31:21,990 Det er ligesom et objekt. 2032 01:31:21,990 --> 01:31:23,932 Og så mislykkes, ligesom Gabe sagde. 2033 01:31:23,932 --> 01:31:27,140 GABE: I vores lille eksempel på abc123 bare for at kontrollere, om det er i databasen 2034 01:31:27,140 --> 01:31:32,260 eller ej, ville dataene være noget du ville gøre, hvis data dot brugernavn findes, 2035 01:31:32,260 --> 01:31:37,720 hvilket er, hvad din PHP genereret for dig, hvis data dot brugernavn eksisterer, så 2036 01:31:37,720 --> 01:31:40,880 Jeg har tænkt mig at advare, bruger navn findes allerede. 2037 01:31:40,880 --> 01:31:44,300 Else, jeg bare vil lade den Brugeren fortsætte udfylde formularen. 2038 01:31:44,300 --> 01:31:47,860 2039 01:31:47,860 --> 01:31:50,820 OK, sikkerhed, cool. 2040 01:31:50,820 --> 01:31:52,060 >> Davin: Skal jeg? 2041 01:31:52,060 --> 01:31:54,500 >> GABE: Jeg kan lide denne ene. 2042 01:31:54,500 --> 01:31:57,680 Så noget, der ser bekendt. 2043 01:31:57,680 --> 01:31:59,750 Vi er næsten færdig. 2044 01:31:59,750 --> 01:32:02,670 Så dette er blot et eksempel du fyre så i klassen. 2045 01:32:02,670 --> 01:32:04,860 Du brugte argv1 her. 2046 01:32:04,860 --> 01:32:06,460 Det er ligesom en kommandolinje argument. 2047 01:32:06,460 --> 01:32:09,270 Og vi mem kopiering som i en puffer af størrelse 12. 2048 01:32:09,270 --> 01:32:12,560 Hvad er problemet her? 2049 01:32:12,560 --> 01:32:13,660 Buffer overflow! 2050 01:32:13,660 --> 01:32:15,400 Fordi vi har en buffer på størrelse 12. 2051 01:32:15,400 --> 01:32:18,400 argv1 kan have en størrelse på to milliarder. 2052 01:32:18,400 --> 01:32:19,960 Vi gør ikke nogen grænse kontrol. 2053 01:32:19,960 --> 01:32:24,970 Så vi kan kopiere en masse hukommelse. 2054 01:32:24,970 --> 01:32:28,630 Og vi vil være særligt dårligt om dette. 2055 01:32:28,630 --> 01:32:32,600 Hvad kan vi gøre, det er meget, meget betyder i dette tilfælde? 2056 01:32:32,600 --> 01:32:33,278 Ja? 2057 01:32:33,278 --> 01:32:36,528 PUBLIKUM: En del af de to milliarder ting indeholder eksekverbar kode, der returnerer 2058 01:32:36,528 --> 01:32:38,127 [Uhørligt]. 2059 01:32:38,127 --> 01:32:38,710 GABE: Præcis. 2060 01:32:38,710 --> 01:32:41,110 Så det er den form for ting, som folk bruger 2061 01:32:41,110 --> 01:32:43,344 at jailbreake en iPhone, for eksempel. 2062 01:32:43,344 --> 01:32:44,260 Så den slags. 2063 01:32:44,260 --> 01:32:48,610 Fordi du bare kan gøre enheden fuldbyrde en kode, som du kan lide. 2064 01:32:48,610 --> 01:32:50,247 Rettelsen, så rettelsen er let. 2065 01:32:50,247 --> 01:32:51,330 Bare tjek for grænserne. 2066 01:32:51,330 --> 01:32:53,455 Du tjekke for null fordi vi altid kontrollere for null 2067 01:32:53,455 --> 01:32:54,940 når vi har at gøre med strenge. 2068 01:32:54,940 --> 01:32:57,840 Og så, du tager streng længde før. 2069 01:32:57,840 --> 01:33:00,150 Og hvis strengen Længden er en gyldig streng 2070 01:33:00,150 --> 01:33:03,700 længde, hvilket er inden for 0 og 12, så vi er gode. 2071 01:33:03,700 --> 01:33:07,144 >> Davin: Hvis du ikke tjekke for null, virkelig hurtig, hvad vil der ske? 2072 01:33:07,144 --> 01:33:07,810 Det vil seg fejl. 2073 01:33:07,810 --> 01:33:10,850 Hvorfor vil det seg fejl? 2074 01:33:10,850 --> 01:33:12,510 Fordi du ringer strlen på null. 2075 01:33:12,510 --> 01:33:13,010 GABE: Ja. 2076 01:33:13,010 --> 01:33:16,490 2077 01:33:16,490 --> 01:33:19,630 Sandt eller falsk, ved hjælp af en adgangskode er en god idé. 2078 01:33:19,630 --> 01:33:20,430 >> PUBLIKUM: Falsk. 2079 01:33:20,430 --> 01:33:21,150 >> GABE: Falsk. 2080 01:33:21,150 --> 01:33:23,870 Brug mange passwords, og store, lange dem. 2081 01:33:23,870 --> 01:33:26,050 Hængelås ikoner garantere sikkerheden. 2082 01:33:26,050 --> 01:33:27,080 >> PUBLIKUM: Falsk. 2083 01:33:27,080 --> 01:33:27,749 >> GABE: Falsk. 2084 01:33:27,749 --> 01:33:28,790 Det betyder ikke noget. 2085 01:33:28,790 --> 01:33:30,480 Det er bare et ikon. 2086 01:33:30,480 --> 01:33:32,824 SSL beskytter mod en mand i midten angreb. 2087 01:33:32,824 --> 01:33:33,490 PUBLIKUM: Falsk. 2088 01:33:33,490 --> 01:33:34,110 GABE: Falsk. 2089 01:33:34,110 --> 01:33:35,355 OK, så alle dem, er falske. 2090 01:33:35,355 --> 01:33:38,324 2091 01:33:38,324 --> 01:33:39,490 Nice. 2092 01:33:39,490 --> 01:33:40,220 [Uhørligt] 2093 01:33:40,220 --> 01:33:42,500 Ønsker du at tale om det? 2094 01:33:42,500 --> 01:33:43,259 Din tur. 2095 01:33:43,259 --> 01:33:45,050 Davin: Typer af angreb, mand i midten. 2096 01:33:45,050 --> 01:33:47,134 Hvad er en mand i midten angreb? 2097 01:33:47,134 --> 01:33:48,050 Publikum: [uhørligt]. 2098 01:33:48,050 --> 01:33:51,437 2099 01:33:51,437 --> 01:33:54,020 Davin: Hvis du sender en HTTP anmodning, kunne de gøre det, ikke? 2100 01:33:54,020 --> 01:33:57,890 Men hvis du sender HTTPS, de sandsynligvis ikke vil være i stand til at gøre dette. 2101 01:33:57,890 --> 01:33:59,952 Der er masser af point langs forbindelsen. 2102 01:33:59,952 --> 01:34:00,660 Du har routere. 2103 01:34:00,660 --> 01:34:01,746 Du har DNS-servere. 2104 01:34:01,746 --> 01:34:04,120 Hvis nogen er i stand til fysisk se, hvad du sender, 2105 01:34:04,120 --> 01:34:06,140 så en person er i stand til at faktisk få mellem dig, 2106 01:34:06,140 --> 01:34:08,840 klienten, og serveren, og er i stand til at se, hvad du sender, 2107 01:34:08,840 --> 01:34:10,298 dette er en mand i midten angreb. 2108 01:34:10,298 --> 01:34:14,287 Så for at se, hvad du forsøger at komme fra serveren, eller er i stand til at see-- værre, 2109 01:34:14,287 --> 01:34:16,620 du måske være i stand til at se cookies eller noget lignende. 2110 01:34:16,620 --> 01:34:19,290 >> Så for eksempel, hvis du ikke bruger SSL, han 2111 01:34:19,290 --> 01:34:21,900 kunne være i stand til at se din session ID-cookies. 2112 01:34:21,900 --> 01:34:25,460 Og dette kaldes sessionskapring fordi han ser dine ID-cookies, 2113 01:34:25,460 --> 01:34:28,317 og så er han i stand til at gå til den pågældende hjemmeside og foregive at være dig. 2114 01:34:28,317 --> 01:34:31,150 Fordi ligesom i PHP, husk når vi er logget ind, hvad gør vi? 2115 01:34:31,150 --> 01:34:33,340 Vi sætter session id lig ID. 2116 01:34:33,340 --> 01:34:34,810 Så der identificerer dig. 2117 01:34:34,810 --> 01:34:38,300 Det er derfor, du kan se din portefølje og ikke alle andres portefølje. 2118 01:34:38,300 --> 01:34:42,320 >> Tja, hvis jeg er i stand til at få det cookie, så kan jeg logge på den pågældende side. 2119 01:34:42,320 --> 01:34:45,380 Og så kan jeg bare se dine ting og begynde at købe og sælge ting. 2120 01:34:45,380 --> 01:34:46,800 Så det er sessionskapring. 2121 01:34:46,800 --> 01:34:50,810 Men du skal ikke være i stand til at-- så du kan bruge manden i midten angreb 2122 01:34:50,810 --> 01:34:52,290 selv om de bruger SSL. 2123 01:34:52,290 --> 01:34:53,520 Men du skal ikke være i stand til. 2124 01:34:53,520 --> 01:34:56,580 Hvis de bruger SSL, du ikke kan session hijack. 2125 01:34:56,580 --> 01:34:58,927 Hvorfor? 2126 01:34:58,927 --> 01:35:01,135 Fordi det hele er krypteret, ret? hvis det er krypteret, 2127 01:35:01,135 --> 01:35:03,509 og jeg er stadig en mand i midten, jeg stadig få dine data. 2128 01:35:03,509 --> 01:35:04,279 Det er fint. 2129 01:35:04,279 --> 01:35:05,070 Men det er krypteret. 2130 01:35:05,070 --> 01:35:07,750 Så kan jeg ikke rigtig bruge det. 2131 01:35:07,750 --> 01:35:09,840 Så det er to. 2132 01:35:09,840 --> 01:35:11,544 >> Rigtig hurtig, cross site request forfalskning. 2133 01:35:11,544 --> 01:35:13,960 Det er bare, hvis der er et link og at link gør noget 2134 01:35:13,960 --> 01:35:14,890 at du ikke mener, det bør gøre. 2135 01:35:14,890 --> 01:35:18,150 Altså for eksempel, hvis linket var kommer til at købe aktier eller sælge aktier, 2136 01:35:18,150 --> 01:35:19,360 og du vidste ikke, at. 2137 01:35:19,360 --> 01:35:22,040 Du har klikket på linket, sendt en anmodning, har købt 2138 01:35:22,040 --> 01:35:24,240 eller solgt noget, du var ikke min mening at gøre. 2139 01:35:24,240 --> 01:35:25,120 Det er det. 2140 01:35:25,120 --> 01:35:30,720 >> Cross site scripting, så her, du passerer ind via variabel q, 2141 01:35:30,720 --> 01:35:33,510 stedet for at passere i en slags af værdi, måske q er som et navn. 2142 01:35:33,510 --> 01:35:36,560 Så i stedet for at passere Q er lig Davin eller sådan noget, 2143 01:35:36,560 --> 01:35:38,740 hvis du ikke bruger HTML særlige tegn, hvis du 2144 01:35:38,740 --> 01:35:43,100 ikke undslippe denne for at sikre det er OK, så jeg kunne gå i stedet, 2145 01:35:43,100 --> 01:35:46,910 lad os sige i her, jeg siger print eller sådan noget, 2146 01:35:46,910 --> 01:35:51,070 så kunne jeg gå i her et script opkald. 2147 01:35:51,070 --> 01:35:53,140 >> Så i stedet for bare at få en variabel, 2148 01:35:53,140 --> 01:35:54,960 Jeg vil derefter udføre dette script opkald. 2149 01:35:54,960 --> 01:35:57,065 Så inde at script ringe, hvad gør den? 2150 01:35:57,065 --> 01:36:00,190 Dokument dot placering, der kommer til at ændre placeringen af ​​dokumentet. 2151 01:36:00,190 --> 01:36:02,290 Så jeg har tænkt mig at omdirigere til et andet sted. 2152 01:36:02,290 --> 01:36:08,170 Det hedder skurk i dette eksempel, meget god. 2153 01:36:08,170 --> 01:36:10,536 Kunne ikke tænke på ordet. 2154 01:36:10,536 --> 01:36:12,410 Og så, hvad der er endnu værre er, at jeg har tænkt mig 2155 01:36:12,410 --> 01:36:16,832 til derefter indstille cookie, som er nogle variabel Jeg har i denne hjemmeside. 2156 01:36:16,832 --> 01:36:19,040 Jeg har tænkt mig at sætte den lige til dokumentet dot cookie. 2157 01:36:19,040 --> 01:36:20,660 Derfor vil jeg at stjæle dine cookie. 2158 01:36:20,660 --> 01:36:22,951 Og jeg har tænkt mig at omdirigere nogle oplysninger til et websted 2159 01:36:22,951 --> 01:36:25,120 at du ikke skal være adgang. 2160 01:36:25,120 --> 01:36:29,250 Og alt dette sker, fordi du er ikke undslippe hvad du har set. 2161 01:36:29,250 --> 01:36:29,910 Ja? 2162 01:36:29,910 --> 01:36:32,160 >> PUBLIKUM: Så bare til gøre klart, er det 2163 01:36:32,160 --> 01:36:37,550 vulnerable.com at er sårbare over for denne. 2164 01:36:37,550 --> 01:36:39,300 Så link kan forekomme på en given side. 2165 01:36:39,300 --> 01:36:42,200 Nogen klikker på det, går til vulnerable.com. 2166 01:36:42,200 --> 01:36:43,700 Du har en cookie til vulnerable.com. 2167 01:36:43,700 --> 01:36:46,670 Lad os sige, Facebook er sårbar, så facebook.com. 2168 01:36:46,670 --> 01:36:48,310 Du har din Facebook cookie. 2169 01:36:48,310 --> 01:36:50,925 Hvad det gør, er du gå til facebook.com, 2170 01:36:50,925 --> 01:36:53,990 det er straks omdirigere dig at badguy.com, 2171 01:36:53,990 --> 01:36:57,182 men inklusive din cookie oplysninger. 2172 01:36:57,182 --> 01:36:59,310 Så det er en hurtig omdirigering, men din Facebook cookie 2173 01:36:59,310 --> 01:37:02,572 er inkluderet i denne omdirigering, og det er, hvordan de [uhørligt]. 2174 01:37:02,572 --> 01:37:04,280 GABE: Ja, der er nogle meget gennemsnitlige ting 2175 01:37:04,280 --> 01:37:06,070 at folk kan gøre, hvis der er dette. 2176 01:37:06,070 --> 01:37:09,190 For eksempel Facebook hvis det tillades alle til at ændre dit brugernavn, 2177 01:37:09,190 --> 01:37:11,680 og de gjorde ikke nogen sundhedstjek, så du 2178 01:37:11,680 --> 01:37:16,810 kunne indsætte et JavaScript ting, ændrer dit billede til en hamster. 2179 01:37:16,810 --> 01:37:22,590 Og der indsætter det samme JavaScript i alle, der ser din side. 2180 01:37:22,590 --> 01:37:26,400 Så alle, der ser din side har det samme i brugernavnet. 2181 01:37:26,400 --> 01:37:30,104 Og fordi det er en virus, det spreder eksponentielt. 2182 01:37:30,104 --> 01:37:32,270 Davin: Vi vil springe det sidste en, og så er vi færdige. 2183 01:37:32,270 --> 01:37:34,120 Så dette er blot endnu et eksempel. 2184 01:37:34,120 --> 01:37:36,120 Så dette er de ikke undslippe deres SQL tabel. 2185 01:37:36,120 --> 01:37:37,090 Så du kan slippe det. 2186 01:37:37,090 --> 01:37:38,805 Så du ønsker at flygte ting. 2187 01:37:38,805 --> 01:37:44,010 Det var det foregående eksempel med korset site scripting. 2188 01:37:44,010 --> 01:37:45,430 Undskyld vi kørte lidt sent. 2189 01:37:45,430 --> 01:37:46,870 I morgen, undskyld! 2190 01:37:46,870 --> 01:37:48,560 I morgen har vi kontortid. 2191 01:37:48,560 --> 01:37:50,870 Så kontortid i Cabbot 8:00 til 11:00. 2192 01:37:50,870 --> 01:37:55,240 De kontortid er strengt for quizspørgsmål. 2193 01:37:55,240 --> 01:37:56,587