1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> David J. MALAN: Lahat ng karapatan. 3 00:00:12,900 --> 00:00:16,790 Kaya maligayang pagdating sa unang kailanman CS50 postmortem para sa isang pagsusulit. 4 00:00:16,790 --> 00:00:18,340 Naisip naming italaga sa tungkulin ito tradisyon sa taong ito. 5 00:00:18,340 --> 00:00:20,960 At ito ay magiging isang pagkakataon upang maglakad sa pamamagitan ng 6 00:00:20,960 --> 00:00:22,220 solusyon sa pagsusulit. 7 00:00:22,220 --> 00:00:26,160 At kami mapabilis o bagalan batay sa interes ng mga dito. 8 00:00:26,160 --> 00:00:29,730 >> Kaya ikaw ay marahil dito dahil ikaw interesado sa kung paano mo maaaring magkaroon o 9 00:00:29,730 --> 00:00:31,170 dapat nasagot ang ilang mga sa mga problemang ito. 10 00:00:31,170 --> 00:00:33,300 Kaya bakit hindi tinitingnan namin ang muna sa seksyon na ito? 11 00:00:33,300 --> 00:00:34,450 Kaya sa pagkuha ng mga string. 12 00:00:34,450 --> 00:00:37,600 Ito ay nagbigay sa iyo ng tatlong iba't ibang mga bersyon ng isang program na noon ay, sa huli, 13 00:00:37,600 --> 00:00:39,650 sinadya upang makakuha ng isang string mula sa isang user. 14 00:00:39,650 --> 00:00:42,530 Man o hindi ginawa ito na noon ay ang natitira sa iyo upang matukoy. 15 00:00:42,530 --> 00:00:45,150 >> At kami tinanong sa Tanong 0, ipagpalagay na bersyon 1 ay 16 00:00:45,150 --> 00:00:46,400 pinagsama-sama at pinaandar. 17 00:00:46,400 --> 00:00:48,860 Bakit maaaring segfault sa program? 18 00:00:48,860 --> 00:00:51,150 Sa unang tingin, ang anumang mga mungkahi kung bakit? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Oo. 21 00:00:54,489 --> 00:00:59,260 >> Madla: Kaya tandaan ko nakikita ito sa isang nakaraang halimbawa ng pagtingin sa 22 00:00:59,260 --> 00:01:05,506 pansamantalang trabaho * s at nakikita ang pag-scan ng s at nakikita dahil ito ay isang pointer, kung paano 23 00:01:05,506 --> 00:01:07,971 ay ito makakaapekto sa kung ano ang iyong na-scan sa? 24 00:01:07,971 --> 00:01:10,940 Ito ba ay s o ang address ng s? 25 00:01:10,940 --> 00:01:11,180 >> David J. MALAN: OK. 26 00:01:11,180 --> 00:01:11,480 Mahusay. 27 00:01:11,480 --> 00:01:14,830 Kaya sa huli, ang pinagmulan ng anumang problema ay siguro pagpunta upang mabawasan ang 28 00:01:14,830 --> 00:01:16,210 sa mga na variable. 29 00:01:16,210 --> 00:01:17,280 At ito ay sa katunayan isang variable. 30 00:01:17,280 --> 00:01:19,900 Ang uri ng data ng mga variable na iyon ay pansamantalang trabaho *, na nangangahulugang ito ay pagpunta sa 31 00:01:19,900 --> 00:01:22,570 maglaman ang address ng isang character. 32 00:01:22,570 --> 00:01:23,850 At sa ganyang bagay ay namamalagi ang pananaw. 33 00:01:23,850 --> 00:01:28,330 Ito ay pagpunta sa maglaman ang address ng isang character o, mas karaniwan, ang 34 00:01:28,330 --> 00:01:32,110 address ng unang character sa isang buong bloke ng mga character. 35 00:01:32,110 --> 00:01:36,680 >> Pero ang catch ay na-scan s, layunin sa buhay, ay binigyan ng isang address at ibinigay 36 00:01:36,680 --> 00:01:40,960 isang format ng code, tulad ng% s, basahin ang isang string sa tipak ng 37 00:01:40,960 --> 00:01:42,330 memory sa address na iyon. 38 00:01:42,330 --> 00:01:46,040 Ngunit dahil walang kapantay na pag-sign bago na tuldok-kuwit sa unang 39 00:01:46,040 --> 00:01:49,310 linya ng code, dahil hindi namin talaga magtalaga ng anumang memory sa 40 00:01:49,310 --> 00:01:53,020 malloc, sapagkat ito ay hindi talaga magtalaga ng isang array ng ilang mga laki, ang lahat ng 41 00:01:53,020 --> 00:01:57,620 ginagawa mo ay pagbabasa ng gumagamit keyboard input sa ilang mga kumpletong 42 00:01:57,620 --> 00:02:00,490 halaga ng basura, na ay nasa mga bilang default. 43 00:02:00,490 --> 00:02:04,480 Kaya logro ay ka pagpunta sa segfault kung address na iyon ay hindi lamang kaya mangyari 44 00:02:04,480 --> 00:02:08,009 upang maging isang halaga na maaari mong, sa katunayan, sumulat sa. 45 00:02:08,009 --> 00:02:10,889 Kaya hindi magandang hindi upang magtalaga ng doon iyong memorya. 46 00:02:10,889 --> 00:02:13,150 >> Kaya pinag-uusapan 1, hiniling namin, ipagpalagay na bersyon 2 ay 47 00:02:13,150 --> 00:02:14,230 pinagsama-sama at pinaandar. 48 00:02:14,230 --> 00:02:15,900 Bakit maaaring segfault programang ito? 49 00:02:15,900 --> 00:02:17,990 Kaya ang isang ito ay mas maraming surot. 50 00:02:17,990 --> 00:02:21,470 At mayroon talagang isa lamang halata paraan kung saan maaari kang 51 00:02:21,470 --> 00:02:22,810 trigger ng segfault dito. 52 00:02:22,810 --> 00:02:23,730 At ito ay pampakay. 53 00:02:23,730 --> 00:02:28,180 Anumang oras na aming ginagamit c sa memory, kung ano magagawa mo upang mang-upat ng isang segfault 54 00:02:28,180 --> 00:02:30,718 gamit ang bersyon na 2? 55 00:02:30,718 --> 00:02:35,560 >> Madla: Kung gumagamit ka ng pag-input na sa isang string na mas mahaba sa 49 56 00:02:35,560 --> 00:02:35,975 character. 57 00:02:35,975 --> 00:02:37,260 >> David J. MALAN: Mismong. 58 00:02:37,260 --> 00:02:41,420 Anumang oras na makita ka ng isang bagay nakapirming haba pagdating sa isang array, ang iyong 59 00:02:41,420 --> 00:02:44,650 dapat pumunta off radar na maaaring ito ay may problema kung hindi ka naka-check sa 60 00:02:44,650 --> 00:02:45,810 mga hangganan ng isang array. 61 00:02:45,810 --> 00:02:46,650 At iyon ang problema dito. 62 00:02:46,650 --> 00:02:47,910 Kami ay gumagamit pa rin scanf. 63 00:02:47,910 --> 00:02:52,200 Kami ay gumagamit pa rin ng% s, na nangangahulugan na subukan basahin ang isang string mula sa user. 64 00:02:52,200 --> 00:02:56,300 Iyon pupuntahan mababasa sa s, na, sa puntong ito, ay epektibo ang 65 00:02:56,300 --> 00:02:58,570 address ng isang tipak ng memory o ito ay katumbas. 66 00:02:58,570 --> 00:03:02,080 Ito ay ang pangalan ng isang array ng mga character ng memorya. 67 00:03:02,080 --> 00:03:07,610 >> Ngunit nang eksakto na, kung basahin mo ang isang string na mas mahaba kaysa sa 49 mga character, 49 68 00:03:07,610 --> 00:03:10,440 dahil kailangan mo room para sa backslash 0, ka ng pagpunta sa pag-apaw 69 00:03:10,440 --> 00:03:11,390 na buffer. 70 00:03:11,390 --> 00:03:16,410 At maaari kang makakuha ng masuwerteng at ma- magsulat ng 51 na character, 52, 53. 71 00:03:16,410 --> 00:03:18,560 Ngunit sa ilang mga punto, ang OS ay pagpunta sa sabihin, hindi. 72 00:03:18,560 --> 00:03:21,270 Ito tiyak ay hindi memory pinapayagan ka upang hawakan. 73 00:03:21,270 --> 00:03:23,380 At ang mga programa ay pagpunta sa segfault. 74 00:03:23,380 --> 00:03:26,650 >> Kaya doon, ang heuristics dapat maging anumang oras na kailangan nakapirming haba, mayroon kang 75 00:03:26,650 --> 00:03:30,150 upang makatiyak na iyong-check sa haba ng kahit ano ito ay na sinusubukan 76 00:03:30,150 --> 00:03:31,090 upang mabasa ito. 77 00:03:31,090 --> 00:03:35,110 >> Madla: Kaya upang malutas iyon, maaari mong ay nagkaroon ng isang pahayag na aktwal na pagsusuri 78 00:03:35,110 --> 00:03:37,140 ay ang haba mas malaki mababa sa o mas mababa? 79 00:03:37,140 --> 00:03:37,730 >> David J. MALAN: GANAP. 80 00:03:37,730 --> 00:03:41,706 Mayroon kang lamang isang kundisyon na nagsasabing, kung ang - 81 00:03:41,706 --> 00:03:46,080 o sa halip mo ay hindi kinakailangang alam nang maaga kung gaano karaming mga character ang 82 00:03:46,080 --> 00:03:49,060 gumagamit ay pagpunta sa i-type, dahil mayroon kang manok at ang itlog. 83 00:03:49,060 --> 00:03:51,860 Hindi hanggang mong basahin ito sa iyong may scanf maaari mong malaman kung gaano ito kahaba. 84 00:03:51,860 --> 00:03:54,500 Ngunit sa puntong iyon, ito ay huli na, dahil na-nabasa mo ito sa 85 00:03:54,500 --> 00:03:55,710 ang ilang mga bloke ng memorya. 86 00:03:55,710 --> 00:03:59,590 Kaya bilang isang-tabi, ang avoids CS50 library ang isyu na ito nang sama-sama, pagpapabalik 87 00:03:59,590 --> 00:04:01,060 sa pamamagitan ng paggamit fgetc. 88 00:04:01,060 --> 00:04:05,390 At bumabasa ng ito sa isang character sa isang pagkakataon, tip-toeing kasama, alam na 89 00:04:05,390 --> 00:04:08,060 Hindi maaaring mapuno ang isang character kung basahin mo nang paisa-isa. 90 00:04:08,060 --> 00:04:11,580 >> Catch ay may getstring pagpapabalik ay mayroon kaming upang patuloy na muling-size 91 00:04:11,580 --> 00:04:13,590 na tipak ng memorya, na ay isang sakit lamang. 92 00:04:13,590 --> 00:04:15,310 Ito ay isang pulutong ng mga linya ng code upang gawin iyon. 93 00:04:15,310 --> 00:04:18,779 Kaya isa pang diskarte ay magiging sa talaga gumamit ng pinsan, kaya 94 00:04:18,779 --> 00:04:19,790 magsalita, ng scanf. 95 00:04:19,790 --> 00:04:22,820 Mayroong mga variant ng isang pulutong ng mga mga function na aktwal na suriin ang 96 00:04:22,820 --> 00:04:25,870 haba ng kung gaano karaming mga character maaari mong basahin maximally. 97 00:04:25,870 --> 00:04:29,430 At maaari mong tukuyin, huwag basahin higit sa 50 mga character. 98 00:04:29,430 --> 00:04:34,110 Kaya na magiging isa pang diskarte ngunit mas matulungin ng mas malaking input. 99 00:04:34,110 --> 00:04:37,040 >> Kaya tanong 2 nagtatanong, ipagpalagay na bersyon 3 ay pinagsama-sama at pinaandar. 100 00:04:37,040 --> 00:04:39,960 Bakit maaaring segfault programa na? 101 00:04:39,960 --> 00:04:42,650 Kaya ang isang ito ay talagang ang parehong sagutin, kahit na ito 102 00:04:42,650 --> 00:04:43,590 mukhang ng kaunti may interes. 103 00:04:43,590 --> 00:04:46,440 Ginagamit namin malloc, na pakiramdam ng tulad ng kami ay nagbibigay sa ating sarili higit pang mga pagpipilian. 104 00:04:46,440 --> 00:04:48,030 At pagkatapos kami ay pagbabakante na memory sa dulo. 105 00:04:48,030 --> 00:04:49,580 Ito ay bytes 50 lamang ng memorya pa rin. 106 00:04:49,580 --> 00:04:53,620 Kaya maaari pa rin sinusubukan naming basahin sa 51, 52, 1000 bytes. 107 00:04:53,620 --> 00:04:55,830 Ito ay pagpunta sa segfault para sa eksakto ang parehong dahilan. 108 00:04:55,830 --> 00:04:57,530 >> Ngunit mayroong Masyadong isa pang dahilan. 109 00:04:57,530 --> 00:05:03,890 Ano pa ang maaari malloc balik bukod sa ang address ng isang tipak ng memory? 110 00:05:03,890 --> 00:05:04,920 Maaaring ito bumalik null. 111 00:05:04,920 --> 00:05:07,560 At dahil hindi namin Sinusuri para sa iyon, maaaring ginagawa namin ng isang bagay 112 00:05:07,560 --> 00:05:11,350 nakababagod para sa isa pang dahilan, na kung saan ay na Maaaring pagsabi namin scanf, basahin ang 113 00:05:11,350 --> 00:05:16,050 input ng user mula sa mga keyboard sa 0 lokasyon, aka null. 114 00:05:16,050 --> 00:05:18,890 At iyon, masyadong, ay talagang trigger ng segfault. 115 00:05:18,890 --> 00:05:21,590 Kaya para sa layunin ng pagsusulit ay, kami ay Tinanggap ang alinman sa mga bilang 116 00:05:21,590 --> 00:05:22,740 wastong dahilan. 117 00:05:22,740 --> 00:05:23,420 Ang isa ay magkapareho. 118 00:05:23,420 --> 00:05:25,720 Ang isa ay mas ng kaunti nuanced. 119 00:05:25,720 --> 00:05:28,975 >> Panghuli, na may paggalang sa ng program paggamit ng memory, kung paano gawin bersyon 2 at 120 00:05:28,975 --> 00:05:30,350 bersyon 3-iba? 121 00:05:30,350 --> 00:05:35,070 Kaya para sa kung ano ito ay nagkakahalaga, nakita namin ang isang tila walang katapusang supply ng panahon 122 00:05:35,070 --> 00:05:35,770 mga sagot sa mga ito. 123 00:05:35,770 --> 00:05:39,300 At bukod sa mga sagot ng mga tao, kung ano kami ay inaasahan namin pero hindi namin tinatanggap ang iba pang mga 124 00:05:39,300 --> 00:05:42,250 mga bagay, ay ang ilang mga pagbanggit ng katotohanan na bersyon 2 ay gumagamit ng 125 00:05:42,250 --> 00:05:44,560 ng tinatawag na stack. 126 00:05:44,560 --> 00:05:46,710 Bersyon 3 ay gumagamit ng magbunton. 127 00:05:46,710 --> 00:05:50,060 At sa pagtakbo, ito ay hindi gumagana talaga gawin ang lahat na magkano ng isang pagkakaiba. 128 00:05:50,060 --> 00:05:54,040 Sa pagtatapos ng araw, kami pa rin nakukuha lang 50 bytes ng memorya. 129 00:05:54,040 --> 00:05:56,640 >> Ngunit iyon ay isa sa mga posibleng sagot tayo ay tumitingin sa. 130 00:05:56,640 --> 00:05:59,730 Ngunit makikita mo, bilang makuha mo ang iyong mga pagsusulit pabalik mula sa TFs, na ginawa namin 131 00:05:59,730 --> 00:06:04,330 tanggapin iba pang mga talakayan ng kanilang disparate mga paggamit ng memory pati na rin. 132 00:06:04,330 --> 00:06:08,600 Ngunit stack at sana ay naging kimpal isang madaling kasagutan sa pumunta sa. 133 00:06:08,600 --> 00:06:11,150 Ang anumang mga katanungan? 134 00:06:11,150 --> 00:06:12,400 Ibinibigay ko sa iyo Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> Rob BOWDEN: Kaya problema 4. 137 00:06:20,210 --> 00:06:21,985 Ito ang isa kung saan kayo ay nagkaroon ng upang punan sa bilang ng mga byte out sa lahat 138 00:06:21,985 --> 00:06:23,460 mga iba't ibang mga uri ginagamit. 139 00:06:23,460 --> 00:06:24,830 Kaya unang bagay na makita namin. 140 00:06:24,830 --> 00:06:27,930 Ipagpalagay na ang isang 32-bit architecture, ganito CS50 appliance. 141 00:06:27,930 --> 00:06:33,530 Kaya isa sa mga pangunahing bagay tungkol sa 32-bit architectures, na nagsasabi sa atin 142 00:06:33,530 --> 00:06:37,490 nang eksakto kung gaano kalaki ang isang pointer ay pagpunta upang maging sa arkitektura. 143 00:06:37,490 --> 00:06:43,020 >> Kaya agad-agad, alam namin na ang anumang pointer uri ay 32-bit o 4 bytes. 144 00:06:43,020 --> 00:06:46,010 Kaya ng pagtingin sa talahanayan na ito, isang node * ay isang uri pointer. 145 00:06:46,010 --> 00:06:47,250 Iyon pupuntahan maging 4 bytes. 146 00:06:47,250 --> 00:06:51,640 Struct node *, na literal kapareho node bituin. 147 00:06:51,640 --> 00:06:53,590 At upang ang pupuntahan maging 4 bytes. 148 00:06:53,590 --> 00:06:58,270 String, kaya ito ay hindi mukhang isang pa pointer, ngunit ang typedef, isang 149 00:06:58,270 --> 00:07:01,590 string lamang ang pansamantalang trabaho *, na ay isang uri ng pointer. 150 00:07:01,590 --> 00:07:03,550 Kaya na pupuntahan maging 4 bytes. 151 00:07:03,550 --> 00:07:06,150 >> Kaya ang tatlong ay ang lahat ng 4 bytes. 152 00:07:06,150 --> 00:07:09,350 Ngayon, node at mag-aaral ay ng kaunti pang kumplikado. 153 00:07:09,350 --> 00:07:15,160 Kaya tumitingin sa node at mag-aaral, makikita natin node bilang isang integer at isang pointer. 154 00:07:15,160 --> 00:07:18,050 At mag-aaral ay dalawang mga payo sa loob nito. 155 00:07:18,050 --> 00:07:23,340 Kaya hindi bababa sa para sa aming kaso dito, ang paraan na nagtatapos up namin kinakalkula ang laki ng 156 00:07:23,340 --> 00:07:27,020 ito struct ay magdagdag ng hanggang lamang ang lahat ng bagay na ang nasa loob ng struct. 157 00:07:27,020 --> 00:07:30,690 >> Kaya para sa node, mayroon kaming isang integer, na kung saan ay 4 bytes. 158 00:07:30,690 --> 00:07:32,830 Mayroon kaming isang pointer, na kung saan ay 4 bytes. 159 00:07:32,830 --> 00:07:35,820 At kaya isa node ay pagpunta upang tumagal ng hanggang 8 bytes. 160 00:07:35,820 --> 00:07:39,490 At katulad para sa mag-aaral, mayroon kaming isang pointer na 4 bytes at isa pa 161 00:07:39,490 --> 00:07:40,770 pointer na 4 bytes. 162 00:07:40,770 --> 00:07:43,180 Kaya na pupuntahan magtapos up pagiging 8 bytes. 163 00:07:43,180 --> 00:07:45,480 Kaya node at mag-aaral ay 8 bytes. 164 00:07:45,480 --> 00:07:48,950 At ang tatlong ay ang lahat ng 4 bytes. 165 00:07:48,950 --> 00:07:50,240 Mga Tanong sa iyon? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Oo. 168 00:07:54,990 --> 00:07:58,413 >> Madla: Ay ito ay isang 64-bit architecture, gagawin na 169 00:07:58,413 --> 00:07:59,880 double lahat ng mga ito? 170 00:07:59,880 --> 00:08:01,790 >> Rob BOWDEN: Ito gagawin hindi double lahat ng mga ito. 171 00:08:01,790 --> 00:08:05,830 Kaya 64-bit architecture, ito, muli, pagbabago na pangunahing bagay na ang isang 172 00:08:05,830 --> 00:08:08,910 pointer ngayon ay 64 bits. 173 00:08:08,910 --> 00:08:09,290 Oo. 174 00:08:09,290 --> 00:08:10,930 Kaya isang pointer ay 8 bytes. 175 00:08:10,930 --> 00:08:15,420 Kaya ang mga iyon ay mga 4 bytes ay magiging 8 bytes. 176 00:08:15,420 --> 00:08:18,617 Ang isang mag-aaral, na kung saan ay dalawang mga payo, well, ngayon ito pupuntahan 177 00:08:18,617 --> 00:08:19,800 maging 8 bytes, 8 bytes. 178 00:08:19,800 --> 00:08:21,980 Ito ay pagpunta sa gawin 16 bytes. 179 00:08:21,980 --> 00:08:25,710 >> Ngunit isang node ay 4 bytes pa rin. 180 00:08:25,710 --> 00:08:27,800 Kaya ito pointer ay pagpunta upang maging 8 bytes. 181 00:08:27,800 --> 00:08:28,930 Ito ay 4 bytes. 182 00:08:28,930 --> 00:08:30,870 Kaya isang node ay pagpunta lamang upang maging 12 bytes. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Anumang iba pang mga tanong sa isa na? 185 00:08:39,280 --> 00:08:44,500 Kaya sa susunod na isa, ito ay mga ang code ng katayuan ng HTTP. 186 00:08:44,500 --> 00:08:48,000 At nagkaroon ka ng upang ilarawan ang mga pangyayari sa ilalim kung saan ang mga baka 187 00:08:48,000 --> 00:08:49,810 ibabalik sa iyo. 188 00:08:49,810 --> 00:08:56,730 isa problema na narinig ko ang ilang mga mag-aaral mayroon ay na sinubukan nila upang gawin ang 189 00:08:56,730 --> 00:08:58,950 mga error maging sa dulo ng kliyente. 190 00:08:58,950 --> 00:09:02,320 Kaya kapag sinusubukan naming gawin ang kahilingan sa server, isang bagay na napupunta 191 00:09:02,320 --> 00:09:03,820 mali sa aming pagtatapos. 192 00:09:03,820 --> 00:09:07,660 Ngunit sa pangkalahatan, ang mga code ay ini-ibinalik ng server. 193 00:09:07,660 --> 00:09:11,720 Kaya gusto naming malaman kung ano ang nangyayari mali o pakanan sa server na 194 00:09:11,720 --> 00:09:14,280 nagiging sanhi ng mga bagay na ito na ibabalik. 195 00:09:14,280 --> 00:09:18,670 Kaya bakit maaari isang server babalik status code 200? 196 00:09:18,670 --> 00:09:19,920 Anumang mga saloobin? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Oo. 199 00:09:23,730 --> 00:09:27,850 Kaya ang isang bagay tungkol sa matagumpay nagpunta ang kahilingan sa pamamagitan ng. 200 00:09:27,850 --> 00:09:30,260 At ang mga ito ay maaaring makabalik ano naman hiniling mo. 201 00:09:30,260 --> 00:09:32,240 Kaya ang lahat ng bagay ay pinong. 202 00:09:32,240 --> 00:09:35,662 Paano ang tungkol sa 302 nahanap? 203 00:09:35,662 --> 00:09:36,618 Oo. 204 00:09:36,618 --> 00:09:39,008 >> Madla: Ang server ay naghahanap para sa kung ano ang iyong hiniling. 205 00:09:39,008 --> 00:09:40,442 Ngunit hindi nito ma-mahanap ito. 206 00:09:40,442 --> 00:09:42,850 Kaya mayroong isang error. 207 00:09:42,850 --> 00:09:47,720 >> Rob BOWDEN: Kaya ang server noon ay naghahanap ng kung ano ang gusto mo. 208 00:09:47,720 --> 00:09:51,682 Kaya lang hinahanap dito, 302 nakita, ito ay magagawang upang hanapin ito. 209 00:09:51,682 --> 00:09:53,035 >> Madla: Sorry. 210 00:09:53,035 --> 00:09:54,388 Nahanap na nangangahulugan na sila ay ginawa mahanap ito. 211 00:09:54,388 --> 00:09:55,638 Sorry. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> Rob BOWDEN: Kaya 302 natagpuan. 214 00:10:00,160 --> 00:10:02,350 Ang server ay magagawang mahanap kung ano ang nais mo. 215 00:10:02,350 --> 00:10:04,640 >> Madla: Ngunit ito ay hindi pagpapakita ito? 216 00:10:04,640 --> 00:10:08,180 >> Rob BOWDEN: Ang pagkakaiba sa pagitan ng ito 302 at 200 ay tumutulong ito 217 00:10:08,180 --> 00:10:09,280 nakakaalam kung ano ang gusto mo. 218 00:10:09,280 --> 00:10:12,000 Ngunit ito ay hindi eksakto kung saan mo nais na magtanong. 219 00:10:12,000 --> 00:10:14,580 Kaya 302 ay isang tipikal na pag-redirect. 220 00:10:14,580 --> 00:10:16,510 Kaya mo Humiling ka ng pahina. 221 00:10:16,510 --> 00:10:19,590 Nakakaalam Ito, oh, gusto kong upang bumalik sa iyo ito. 222 00:10:19,590 --> 00:10:21,070 Ngunit ito ay sa isang iba't ibang mga URL. 223 00:10:21,070 --> 00:10:23,534 Kaya hey, na talagang gusto ito. 224 00:10:23,534 --> 00:10:26,950 >> David J. MALAN: Ito ay isang piraso na sinabi na binigay namin sa iyo guys isang pag-redirect 225 00:10:26,950 --> 00:10:30,830 function na ginagamit ang function ng header iyon, siya namang, i-print out ng lokasyon, 226 00:10:30,830 --> 00:10:34,110 tutuldok, at pagkatapos ay ang URL na kung saan na nais mong tanggihan ang user. 227 00:10:34,110 --> 00:10:37,480 Kahit na hindi mo makita 302 tahasan doon, iyon ay kung ano ang PHP 228 00:10:37,480 --> 00:10:41,550 Gusto magically magpasok ng bilang ng header sinasabi kung ano mismo ang sinabi Rob doon - 229 00:10:41,550 --> 00:10:41,930 natagpuan. 230 00:10:41,930 --> 00:10:43,180 Ngunit pumunta dito sa halip. 231 00:10:43,180 --> 00:10:45,960 232 00:10:45,960 --> 00:10:46,160 >> Rob BOWDEN: OK. 233 00:10:46,160 --> 00:10:47,630 Kaya kung ano ang tungkol sa 403 Ipinagbabawal? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> Madla: Sa tingin ko ito na ang server ay isa lamang na nagsasabi na ang kliyente 236 00:10:57,120 --> 00:10:59,970 Hindi ma-access ang home page. 237 00:10:59,970 --> 00:11:03,260 >> Rob BOWDEN: So yes. 238 00:11:03,260 --> 00:11:07,670 Well, ang tipikal na sagot namin umaasa ay isang bagay tulad ng, ang mga file 239 00:11:07,670 --> 00:11:08,920 Hindi chmodded nang naaangkop. 240 00:11:08,920 --> 00:11:11,590 Iyon ay marahil sa ilalim kung ano pangyayari na nakita mo ang mga ito. 241 00:11:11,590 --> 00:11:18,920 Subalit mayroong isang dahilan na ang kliyente maaaring maging sa kasalanan dito. 242 00:11:18,920 --> 00:11:20,440 Mayroon talaga ng isa pang code ng katayuan - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Kaya ang mga ito ay halos katulad na. 245 00:11:22,820 --> 00:11:24,590 >> 401 ay walang pahintulot na. 246 00:11:24,590 --> 00:11:26,130 At 403 Ipinagbabawal. 247 00:11:26,130 --> 00:11:31,890 At kaya hindi awtorisadong mo eksklusibong makuha kung hindi ka naka-log in 248 00:11:31,890 --> 00:11:34,520 Ngunit pag-log in ay maaaring mangahulugan na pinahintulutan. 249 00:11:34,520 --> 00:11:37,930 Ngunit kung mayroon kang naka-log in at ikaw hindi pa rin magkaroon ng pahintulot, pagkatapos ay i- 250 00:11:37,930 --> 00:11:40,140 maaari ka ring makakuha ng mga ipinagbabawal na. 251 00:11:40,140 --> 00:11:45,320 Kaya't kung ikaw ay naka-log in at wala kang pahintulot, ipinagbabawal din 252 00:11:45,320 --> 00:11:47,164 isang bagay na maaari kang makakuha ng. 253 00:11:47,164 --> 00:11:48,900 >> David J. MALAN: At ang mga mekanismo sa pamamagitan ng kung saan ang mga problemang ito ay karaniwang 254 00:11:48,900 --> 00:11:53,100 Nalutas sa server ay sa pamamagitan ng kung ano ang utos? 255 00:11:53,100 --> 00:11:57,700 Chmod, kung ito ay, sa katunayan, isang pahintulot maglalabas sa file o direktoryo. 256 00:11:57,700 --> 00:11:59,220 >> Rob BOWDEN: Pagkatapos 404 hindi nahanap. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Oo. 259 00:12:03,470 --> 00:12:10,150 Kaya hindi tulad ng 302 kung saan ito ay hindi eksakto kung saan ka nagtatanong pero alam kung ano 260 00:12:10,150 --> 00:12:12,710 mo gusto, ito, lamang ito ay may walang ideya kung ano ang gusto mo. 261 00:12:12,710 --> 00:12:15,648 At hindi ka humihiling isang bagay wasto. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Isa akong tsarera at pagkatapos ay 500 panloob server. 264 00:12:22,310 --> 00:12:24,870 Kaya kung bakit maaari kang makakuha ng mga iyon? 265 00:12:24,870 --> 00:12:26,120 >> Kaya segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Ako talagang hindi alam ang grading pamantayan para sa mga ito. 268 00:12:30,640 --> 00:12:34,850 Ngunit kung ang iyong code na PHP ay nagkaroon ng isang bagay mali sa loob nito, sa teorya, ng dati 269 00:12:34,850 --> 00:12:39,650 talaga segfault, kung saan, ito 500 panloob na error sa server, isang bagay 270 00:12:39,650 --> 00:12:41,400 ay mali sa server ang iyong configuration. 271 00:12:41,400 --> 00:12:44,320 O kaya mayroong isang syntax error sa iyong code na PHP. 272 00:12:44,320 --> 00:12:46,095 O isang bagay na masama ay pagpunta sa. 273 00:12:46,095 --> 00:12:48,320 >> David J. MALAN: namin nakita segfault kasama ng mga sagot ng ilang mga tao na. 274 00:12:48,320 --> 00:12:49,490 At technically, maaari itong mangyari. 275 00:12:49,490 --> 00:12:53,820 Ngunit iyon ay magiging isang PHP, ang programa nakasulat sa pamamagitan ng iba pang mga tao, talaga 276 00:12:53,820 --> 00:12:57,790 segfaulted, na lamang kung ang mga taong iyon screwed up at na sinulat maraming surot code sa 277 00:12:57,790 --> 00:13:00,680 kanilang mga tagasalin ng ginagawa PHP mismo segfault. 278 00:13:00,680 --> 00:13:06,460 Kaya kahit na 500 ay tulad ng isang segfault sa espiritu, ito ay halos palaging ang 279 00:13:06,460 --> 00:13:10,490 resulta ng isang isyu ito sa configuration file gamit ang iyong web server o, tulad ng sinabi Rob, 280 00:13:10,490 --> 00:13:13,200 syntax error, tulad mo Hindi maisara ang isang quote. 281 00:13:13,200 --> 00:13:16,180 O nawala ka ng isang tuldok-kuwit sa isang lugar. 282 00:13:16,180 --> 00:13:23,677 >> Madla: Kaya para sa Shuttle pset, ako Sa tingin kapag ginawa ko ito nang isang beses na-click ko ang 283 00:13:23,677 --> 00:13:26,300 browser, ngunit wala dumating up, ano ang tinatawag nila puting pahina. 284 00:13:26,300 --> 00:13:28,056 Ngunit iyon ay dahil sa ang code. 285 00:13:28,056 --> 00:13:29,440 Sa tingin ko na noon ay JavaScript, tama? 286 00:13:29,440 --> 00:13:29,770 >> Rob BOWDEN: Oo. 287 00:13:29,770 --> 00:13:31,180 >> Madla: Gusto error na makaisip pa rin? 288 00:13:31,180 --> 00:13:34,290 >> Rob BOWDEN: Kaya hindi na makakakuha ka ang error na ito dahil ang lahat ng bagay 289 00:13:34,290 --> 00:13:36,930 mula sa pananaw ng server ng web ay ganap fine. 290 00:13:36,930 --> 00:13:39,090 Ngunit na iyong hiniling index.html. 291 00:13:39,090 --> 00:13:42,000 Hiniling mo shuttle.js at service.js. 292 00:13:42,000 --> 00:13:44,580 At iyon ay matagumpay na mai bumalik sa iyo ang lahat ng mga bagay - 293 00:13:44,580 --> 00:13:44,980 200. 294 00:13:44,980 --> 00:13:45,680 OK. 295 00:13:45,680 --> 00:13:49,330 Ito ay lamang kapag sinubukan iyong browser upang bigyang-kahulugan ang code ng JavaScript na 296 00:13:49,330 --> 00:13:51,370 ito ay tulad, maghintay, ito ay hindi wastong error sa JavaScript. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Anumang iba pang mga katanungan? 299 00:13:58,210 --> 00:14:00,750 Ayos lang. 300 00:14:00,750 --> 00:14:04,120 >> David J. MALAN: Kaya susunod up noon ay bilang 11. 301 00:14:04,120 --> 00:14:07,610 At 11 ay ang scariest para sa maraming mga tao. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Kaya ang pinakamahalagang bagay na dapat tandaan dito noon na ito ay, sa katunayan, tungkol sa 304 00:14:18,570 --> 00:14:19,840 isang doble naka-link na listahan. 305 00:14:19,840 --> 00:14:23,160 Ngunit hindi ito ay ang parehong bilang ng nakaraang taon doble naka-link problema listahan, 306 00:14:23,160 --> 00:14:27,170 na hindi nagbibigay sa iyo ng caveat na ang listahan ay maaaring, sa katunayan, maging unsorted. 307 00:14:27,170 --> 00:14:29,640 >> Kaya ang katotohanan na ang listahan ay unsorted at ang katotohanan na ang salitang iyon ay 308 00:14:29,640 --> 00:14:32,930 nakasalungguhit doon ay sinadya upang magbigay-kahulugan na ito ay talagang isang pagpapagaan 309 00:14:32,930 --> 00:14:35,430 ng kung ano kung hindi man ay maaaring naging isang mas mapaghamong problema 310 00:14:35,430 --> 00:14:36,600 at ng mas mahabang isa. 311 00:14:36,600 --> 00:14:40,760 Kaya isang pangkaraniwang pagkakamali dito ay pinagsikapan solusyon ng nakaraang taon sa iyong isa 312 00:14:40,760 --> 00:14:45,580 pager at pagkatapos lamang nang walang taros kopyahin na down na bilang sagot, kung saan ay ang karapatan 313 00:14:45,580 --> 00:14:48,520 sagutin sa ibang tanong katulad sa espiritu. 314 00:14:48,520 --> 00:14:51,340 Ngunit ang subtleties dito ay tulad ng sumusunod. 315 00:14:51,340 --> 00:14:55,200 >> Kaya isa, kami ng node ipinahayag at tinukoy sa karaniwang paraan dito. 316 00:14:55,200 --> 00:14:59,230 Pagkatapos ay natukoy namin listahan ng mga maging isang pandaigdigang pointer nasimulan upang null. 317 00:14:59,230 --> 00:15:02,150 Pagkatapos ay tila, mayroong dalawang mga function mayroon kaming mga modelo para dito, insert 318 00:15:02,150 --> 00:15:03,240 at alisin. 319 00:15:03,240 --> 00:15:06,600 At pagkatapos ay mayroon kaming ilang sample code dito ng paggawa ng grupo ng mga pagpapasok. 320 00:15:06,600 --> 00:15:09,930 At pagkatapos ay tanungin ka namin upang makumpleto ang pagpapatupad ng insert sa ibaba sa naturang 321 00:15:09,930 --> 00:15:14,380 isang paraan na ito insert n sa listahan sa pare-pareho ang oras, nakasalungguhit din, 322 00:15:14,380 --> 00:15:15,730 kahit na mayroon na. 323 00:15:15,730 --> 00:15:20,600 >> Kaya ang kagandahan ng kawalan ng kakayahang magpasok ng mga sa pare-pareho ang oras ay nagpapahiwatig na ito 324 00:15:20,600 --> 00:15:23,060 na mayroon ka upang ipasok ang bagong node saan? 325 00:15:23,060 --> 00:15:23,690 Papunta sa front. 326 00:15:23,690 --> 00:15:27,760 Kaya ito inaalis, thankfully, hindi bababa sa isa sa mga kaso na ginagamit upang mangailangan 327 00:15:27,760 --> 00:15:30,520 higit pang mga linya ng code, tulad ng ito ginawa nakaraang taon at kahit sa klase kung kailan namin 328 00:15:30,520 --> 00:15:34,040 usapan sa pamamagitan ng ganitong uri ng bagay may mga kawani na tao at may ilang mga 329 00:15:34,040 --> 00:15:35,250 ukol sa pandiwa palsipikado code. 330 00:15:35,250 --> 00:15:39,190 Kaya sa ang solusyon dito, ni laktawan sa paglipas ng ipaalam sa na magkaroon lamang ng isang visual sa 331 00:15:39,190 --> 00:15:40,480 screen. 332 00:15:40,480 --> 00:15:42,230 >> Pansinin na aming ginagawa ng mga sumusunod. 333 00:15:42,230 --> 00:15:45,140 At mapapansin din ang iba pang pagpapagaan ay na kahit na ito ay 334 00:15:45,140 --> 00:15:48,280 na mayroon na, kaya ang ibig sabihin nito kahit na ang bilang na ito ay pa ito doon, maaari kang 335 00:15:48,280 --> 00:15:50,280 lamang nang walang taros magpasok ng isa pang kopya nito. 336 00:15:50,280 --> 00:15:52,560 At iyon, masyadong, ay nilalayong maging isang pagpapagaan, sa gayon na maaari mong 337 00:15:52,560 --> 00:15:54,940 tumuon sa, talaga, ang ilan sa mga higit pang mga intellectually kagiliw-giliw na bahagi at 338 00:15:54,940 --> 00:15:58,090 hindi lamang ng ilang karagdagang mga error pagsuri na nabigyan ng limitadong oras. 339 00:15:58,090 --> 00:16:02,880 >> Kaya sa ang sample na solusyon, maglaan namin tagaturo sa mga kaliwete 340 00:16:02,880 --> 00:16:04,510 Side dito sa isang node. 341 00:16:04,510 --> 00:16:07,190 Ngayon, mapagtanto na pointer, bilang Sinabi ni Rob, ay bit sa 32 lang. 342 00:16:07,190 --> 00:16:09,060 At hindi ito aktwal na naglalaman ng isang address hanggang sa iyo 343 00:16:09,060 --> 00:16:09,970 italaga ito ang address. 344 00:16:09,970 --> 00:16:13,220 At gawin namin na sa kanang kamay gilid sa pamamagitan ng malloc. 345 00:16:13,220 --> 00:16:16,550 Tulad ng isang mabuting mamamayan, suriin namin na malloc ay hindi, sa katunayan, null, upang 346 00:16:16,550 --> 00:16:18,690 hindi namin sinasadyang lumikha isang segfault dito. 347 00:16:18,690 --> 00:16:22,840 At anumang oras mong gamitin ang malloc sa buhay, mo dapat na naghahanap ng mga null, baka 348 00:16:22,840 --> 00:16:24,090 mayroon kang isang banayad na bug. 349 00:16:24,090 --> 00:16:28,460 >> Pagkatapos initialize namin na null sa pamamagitan ng nagtatalaga n at nakaraan at susunod. 350 00:16:28,460 --> 00:16:32,450 At sa kasong ito dito, ako nasimulan nakaraang sa null, dahil ang bagong 351 00:16:32,450 --> 00:16:34,780 na node ay magiging ang bagong simula ng aking listahan. 352 00:16:34,780 --> 00:16:37,050 Kaya doon pupuntahan maging walang bago ito. 353 00:16:37,050 --> 00:16:42,010 At gusto kong i-mahalagang ikabit ang umiiral na listahan sa bagong node sa pamamagitan ng 354 00:16:42,010 --> 00:16:44,700 pagtatakda ng susunod na katumbas ng ilista ang sarili nito. 355 00:16:44,700 --> 00:16:47,120 Ngunit hindi pa lang ako tapos na. 356 00:16:47,120 --> 00:16:51,780 Kaya kung ang listahan mismo na umiral, at nagkaroon ng hindi bababa sa isa node 357 00:16:51,780 --> 00:16:57,070 nasa lugar, kung ito ang listahan dito at ipasok ko ng bagong node dito, ako 358 00:16:57,070 --> 00:17:01,840 kailangan upang matiyak na ang aking dating node tumuturo pabalik sa aking bagong node, 359 00:17:01,840 --> 00:17:04,260 dahil ito ay, muli, isang doble naka-link na listahan. 360 00:17:04,260 --> 00:17:05,460 >> Kaya ang ginagawa namin ng isang tseke katinuan. 361 00:17:05,460 --> 00:17:10,109 Kung listahan ay hindi null, kung mayroong pa isa o higit pang mga node doon, pagkatapos ay 362 00:17:10,109 --> 00:17:12,470 magdagdag na muli reference sa gayon na magsalita. 363 00:17:12,470 --> 00:17:15,420 At pagkatapos ay ang napaka-huling bagay na kailangan namin gawin ay talagang i-update ang global 364 00:17:15,420 --> 00:17:20,329 listahan mismo variable upang ituro sa na ang mga bagong node. 365 00:17:20,329 --> 00:17:21,790 Oo. 366 00:17:21,790 --> 00:17:26,579 >> Madla: Sa pointer arrow [Hindi marinig] ay katumbas ng null, gumagana na 367 00:17:26,579 --> 00:17:30,420 makitungo sa listahan dahil ang listahan ay walang bisa? 368 00:17:30,420 --> 00:17:30,596 >> David J. MALAN: Nope. 369 00:17:30,596 --> 00:17:34,500 Iyon ay lamang sa akin sa pagiging maagap Mag-ingat, sa na kung ito ay ang aking 370 00:17:34,500 --> 00:17:38,730 orihinal na listahan na may marahil ilang mga higit pang mga node sa paglipas dito at ako pagpasok ng aking 371 00:17:38,730 --> 00:17:42,380 bagong node sa paglipas dito, may pupuntahan na maging walang paglipas dito. 372 00:17:42,380 --> 00:17:44,720 At gusto kong makuha na ideya sa pamamagitan ng pagtatakda nakaraang sa 373 00:17:44,720 --> 00:17:47,740 null sa bagong node. 374 00:17:47,740 --> 00:17:51,410 At siguro, kung ang aking code ay tama at walang iba pang mga paraan upang ipasok 375 00:17:51,410 --> 00:17:54,970 nodes bukod sa ito function, siguro, kahit na listahan ay mayroon 376 00:17:54,970 --> 00:18:00,090 isa o higit pang mga node sa loob nito, siguro ang listahan, ang unang node, ay magkakaroon ng isang 377 00:18:00,090 --> 00:18:02,750 nakaraang pointer ng null mismo. 378 00:18:02,750 --> 00:18:03,550 >> Madla: At isang follow-up lang. 379 00:18:03,550 --> 00:18:08,139 Ang dahilan kung bakit inilagay mo pointer sa tabi Kapantay listahan ay pinakikinabangan ninyo ang pointer 380 00:18:08,139 --> 00:18:13,579 bago listahan sa na ito ng pagturo sa susunod, hulaan ko - 381 00:18:13,579 --> 00:18:14,980 Ako don't - 382 00:18:14,980 --> 00:18:15,450 lamang ay naglilista? 383 00:18:15,450 --> 00:18:16,400 >> David J. MALAN: Mismong. 384 00:18:16,400 --> 00:18:19,400 At ni aktwal na isaalang-alang ang dalawang mga kaso kaya hayaan dito talaga ito, kahit na ang 385 00:18:19,400 --> 00:18:22,070 Upang ipapakita namin isaalang-alang ang mga ito ay hindi parehong medyo bilang ang code. 386 00:18:22,070 --> 00:18:26,250 Ngunit sa isang mataas na antas, kung ito ay kumakatawan ilista at ito ay isang 32-bit 387 00:18:26,250 --> 00:18:29,560 pointer, ang pinakasimpleng sitwasyon ay na ito ay walang bisa sa pamamagitan ng default. 388 00:18:29,560 --> 00:18:33,010 At ipagpalagay na nais ko upang ipasok ang numero 50 ay ang unang numero. 389 00:18:33,010 --> 00:18:37,640 Kaya pupuntahan ko sige at maglaan isang node, na kung saan ay pagpunta sa maglaman 390 00:18:37,640 --> 00:18:38,770 tatlong mga patlang - 391 00:18:38,770 --> 00:18:42,070 n, nakaraan, at susunod. 392 00:18:42,070 --> 00:18:44,580 >> Pupunta ako sa ilagay ang numero 50 dito, dahil ito ay magiging n. 393 00:18:44,580 --> 00:18:46,130 Ito ang magiging susunod. 394 00:18:46,130 --> 00:18:48,530 At ito ay magiging nakaraang. 395 00:18:48,530 --> 00:18:50,910 At kaya kung ano ang gagawin ko sa kasong ito? 396 00:18:50,910 --> 00:18:53,900 Well, na lang tapos na ako 1 linya dito. 397 00:18:53,900 --> 00:18:55,400 N ng pointer ay nakakakuha n. 398 00:18:55,400 --> 00:18:57,740 Pagkatapos ay ako na nagsasabi, nakaraang dapat makakuha null. 399 00:18:57,740 --> 00:18:59,470 Kaya ito ay magiging walang bisa. 400 00:18:59,470 --> 00:19:01,365 Pagkatapos pupuntahan ko sabihin sa tabi Pupunta upang makakuha ng listahan. 401 00:19:01,365 --> 00:19:05,150 >> At ito lamang ang gumagana out na rin. 402 00:19:05,150 --> 00:19:06,500 Ito ay walang bisa. 403 00:19:06,500 --> 00:19:10,620 At kaya ako sinasabi ko, ang mga bagong node ng susunod field na dapat makakuha ng kahit ano ito ay. 404 00:19:10,620 --> 00:19:12,570 Kaya na naglalagay ng isa pang null doon. 405 00:19:12,570 --> 00:19:14,510 At pagkatapos ay ang huling bagay Ay ko check dito. 406 00:19:14,510 --> 00:19:17,870 Kung listahan ay hindi kapantay sa null, ngunit ito ay katumbas ng null, upang laktawan namin na 407 00:19:17,870 --> 00:19:18,470 sama-sama. 408 00:19:18,470 --> 00:19:23,520 At kaya susunod ay ang lahat ng kailangan kong gawin listahan ay makakakuha ng pointer, na pictorially nagreresulta sa 409 00:19:23,520 --> 00:19:25,570 isang larawan tulad na. 410 00:19:25,570 --> 00:19:26,620 Kaya iyon ang isa tagpo. 411 00:19:26,620 --> 00:19:30,490 >> At ang isa na ikaw ay nagtatanong tungkol sa partikular ay isang sitwasyon tulad nito, 412 00:19:30,490 --> 00:19:33,190 kung saan kami ay mayroon ng isang listahan ng isa-node. 413 00:19:33,190 --> 00:19:36,240 At kung pumunta ako pabalik hanggang sa ang orihinal problema na pahayag, ang susunod na kami ay 414 00:19:36,240 --> 00:19:39,320 isingit sabihin nating 34, para lamang sa ang alang-alang ng talakayan. 415 00:19:39,320 --> 00:19:46,210 Kaya Pupunta ako sa Maginhawang lamang gumuhit na sa paglipas dito. 416 00:19:46,210 --> 00:19:47,540 Lamang ako ng malloced. 417 00:19:47,540 --> 00:19:49,310 Ipagpalagay nating Lalabas na ako para sa null Hayaan. 418 00:19:49,310 --> 00:19:51,870 >> Ngayon, ako pagpunta sa pagsisimula ng pag- n na maging 34. 419 00:19:51,870 --> 00:19:53,040 At ito ay magiging n. 420 00:19:53,040 --> 00:19:54,670 Ito ang magiging susunod. 421 00:19:54,670 --> 00:19:57,100 At ito ay magiging nakaraang. 422 00:19:57,100 --> 00:19:59,370 Tiyakin ko ang hindi Hayaang makakuha ng mga ito pabalik. 423 00:19:59,370 --> 00:20:01,110 Unang Nakaraang pagdating sa kahulugan. 424 00:20:01,110 --> 00:20:03,070 Hayaan akong ayusin ito. 425 00:20:03,070 --> 00:20:04,410 Ito ay nakaraang. 426 00:20:04,410 --> 00:20:05,780 Ito ang susunod. 427 00:20:05,780 --> 00:20:08,620 Kahit na ang mga ito ay magkakahawig, panatilihin ni ito pare-pareho ipaalam. 428 00:20:08,620 --> 00:20:09,450 >> Nakaraang. 429 00:20:09,450 --> 00:20:11,030 Ito ang susunod. 430 00:20:11,030 --> 00:20:16,310 Kaya nagbigay lamang malloced ko ang aking tala, nasuri para sa null, itinalaga 34 papunta sa node. 431 00:20:16,310 --> 00:20:17,570 Nakaraang nakakakuha null. 432 00:20:17,570 --> 00:20:19,480 Kaya na nagbibigay sa akin na iyon. 433 00:20:19,480 --> 00:20:21,010 Susunod na nakakakuha listahan. 434 00:20:21,010 --> 00:20:22,370 Kaya list na ito. 435 00:20:22,370 --> 00:20:26,520 Kaya ito ang parehong ngayon bilang pagguhit ito arrow, upang ituro ang mga ito sa isa 436 00:20:26,520 --> 00:20:27,940 sa parehong. 437 00:20:27,940 --> 00:20:30,400 At pagkatapos ay Lalabas na ako kung listahan ay hindi kapantay sa null. 438 00:20:30,400 --> 00:20:31,740 At ito ay hindi oras na ito. 439 00:20:31,740 --> 00:20:35,580 Pagkatapos ay pupuntahan ko na gawin listahan nakaraang ay makakakuha ng pointer. 440 00:20:35,580 --> 00:20:39,700 >> Kaya ilista ang nakaraang ay makakakuha ng PTR. 441 00:20:39,700 --> 00:20:44,300 Kaya ito ay ang epekto ng paglalagay ng isang graphical arrow dito. 442 00:20:44,300 --> 00:20:46,930 At na nakakakuha ng kaunti may alun-alon, ang mga linya. 443 00:20:46,930 --> 00:20:50,780 At pagkatapos, sa wakas, i-update ko ilista upang tumuro sa pointer. 444 00:20:50,780 --> 00:20:55,560 Kaya ngayon ito nagtuturo sa ito tao. 445 00:20:55,560 --> 00:20:57,170 At ngayon, ni gawin ang isang mabilis na ipaalam check katinuan. 446 00:20:57,170 --> 00:20:59,470 >> Narito ang listahan, na kung saan ay ang global variable. 447 00:20:59,470 --> 00:21:02,850 Ang unang node ay, sa katunayan, 34, dahil Sinusundan ko arrow na. 448 00:21:02,850 --> 00:21:05,210 At iyon ay tama dahil gusto kong isingit sa simula ng listahan 449 00:21:05,210 --> 00:21:06,070 lahat ng mga bagong nodes. 450 00:21:06,070 --> 00:21:08,860 Humahantong ang kanyang susunod na field sa akin sa ito tao. 451 00:21:08,860 --> 00:21:10,710 Kung panatilihing ako pagpunta, pindutin ko sa tabi ay walang bisa. 452 00:21:10,710 --> 00:21:11,760 Kaya walang higit pang listahan. 453 00:21:11,760 --> 00:21:14,460 Kung ang hit ko nakaraang, nakukuha ko i-back kung saan aking inaasahan. 454 00:21:14,460 --> 00:21:16,435 >> Kaya doon ang ilang mga payo pa rin, malinaw naman, upang manipulahin. 455 00:21:16,435 --> 00:21:19,870 Ngunit ang katotohanan na ikaw ay sinabi na gawin ito sa pare-pareho ang oras ay nangangahulugan na ikaw lamang 456 00:21:19,870 --> 00:21:22,910 magkaroon ng isang tiyak na bilang ng mga bagay ka pinapayagang gawin. 457 00:21:22,910 --> 00:21:24,290 At kung ano ang numerong iyon? 458 00:21:24,290 --> 00:21:25,185 Maaaring maging isang hakbang. 459 00:21:25,185 --> 00:21:25,700 Maaaring maging dalawa. 460 00:21:25,700 --> 00:21:26,820 Maaaring maging 1,000 na mga hakbang. 461 00:21:26,820 --> 00:21:30,500 Ngunit ito ay may hangganan, na nangangahulugan na hindi mo magagawa na ang anumang uri ng looping ng pagpunta sa 462 00:21:30,500 --> 00:21:32,010 dito, walang recursion, walang mga loop. 463 00:21:32,010 --> 00:21:37,390 Ay Naging ito upang maging hard-code na mga linya ng code bilang mayroon kami sa sample na ito. 464 00:21:37,390 --> 00:21:42,330 >> Kaya't tinanong ang susunod na problema 12 sa amin sa kumpletuhin ang pagpapatupad ng pag-alis 465 00:21:42,330 --> 00:21:46,740 sa ibaba sa paraan na ito ay nag-aalis n mula sa listahan sa linear oras. 466 00:21:46,740 --> 00:21:48,740 Kaya mayroon kang isang kaunti pa kumawag room ngayon. 467 00:21:48,740 --> 00:21:52,380 Maaari mong ipalagay na n, kung kasalukuyan sa listahan, ay naroroon 468 00:21:52,380 --> 00:21:53,340 hindi hihigit sa isang beses. 469 00:21:53,340 --> 00:21:56,770 At na masyadong nilalayong maging isang pagsusulit na batay sa pagpapasimple ng pagkukunwari, kaya 470 00:21:56,770 --> 00:21:59,780 na kung nakita mo ang isang lugar numero 50 sa listahan, hindi mo rin 471 00:21:59,780 --> 00:22:02,890 kailangang mag-alala tungkol sa patuloy na umulit, naghahanap para sa bawat posibleng 472 00:22:02,890 --> 00:22:06,990 kopya na 50, na kung saan ay malipat lamang sa ilang mga minutia sa limitadong panahon. 473 00:22:06,990 --> 00:22:10,460 >> Kaya sa pag-alis, ang isang ito ay talagang higit pang mga hamon at higit pa 474 00:22:10,460 --> 00:22:11,640 code upang magsulat. 475 00:22:11,640 --> 00:22:14,990 Ngunit sa unang tingin, lantaran, maaari itong Inaasahan napakatinding at tulad ng isang bagay 476 00:22:14,990 --> 00:22:17,060 walang paraan maaari kang magkaroon ng makabuo ng sa isang pagsusulit. 477 00:22:17,060 --> 00:22:22,450 Ngunit kung tumuon kami sa indibidwal na mga hakbang, sana, ito nasain bigla 478 00:22:22,450 --> 00:22:26,060 strike sa iyo na ang bawat isa sa mga indibidwal na mga hakbang na ginagawang halata kahulugan 479 00:22:26,060 --> 00:22:27,080 sa pag-alaala. 480 00:22:27,080 --> 00:22:28,200 Kaya ipaalam sa tumagal ng isang hitsura. 481 00:22:28,200 --> 00:22:32,570 >> Kaya una, initialize namin pointer upang maging ilista ang sarili nito. 482 00:22:32,570 --> 00:22:36,040 Dahil gusto ko linear oras, na paraan Pupunta ako magpa-loop. 483 00:22:36,040 --> 00:22:39,730 At isang pangkaraniwang paraan upang umulit sa ibabaw ng mga node sa isang istraktura ng listahan o anumang uri 484 00:22:39,730 --> 00:22:43,860 ng istraktura iteratively ay gumawa tagaturo patungo sa harap ng data 485 00:22:43,860 --> 00:22:46,990 istraktura at pagkatapos lamang simulan ang pag-update ito at walk iyong paraan 486 00:22:46,990 --> 00:22:48,650 sa pamamagitan ng istraktura ng data. 487 00:22:48,650 --> 00:22:50,040 Kaya pupuntahan ko na gawin eksakto na. 488 00:22:50,040 --> 00:22:54,260 >> Habang pointer, ang aking pansamantalang variable, ay hindi kapantay sa null, sabihin 489 00:22:54,260 --> 00:22:55,660 sige at tingnan. 490 00:22:55,660 --> 00:22:56,910 Ba akong makakuha ng masuwerteng? 491 00:22:56,910 --> 00:23:01,740 Ay ang n patlang sa node sa kasalukuyan ako tumitingin sa katumbas ng 492 00:23:01,740 --> 00:23:03,380 bilang Naghahanap ako? 493 00:23:03,380 --> 00:23:05,410 Gawin ang isang bagay at kung gayon, sabihin. 494 00:23:05,410 --> 00:23:10,020 Ngayon, mapapansin na ito kung kondisyon pumapalibot sa buong 495 00:23:10,020 --> 00:23:11,520 sumusunod na linya ng code. 496 00:23:11,520 --> 00:23:14,610 Ito ay ang tanging bagay na mahalaga ako tungkol sa - paghahanap ng isang numero na pinag-uusapan. 497 00:23:14,610 --> 00:23:18,010 Kaya walang ibang tao, na pinapasimple bagay conceptually kaunti. 498 00:23:18,010 --> 00:23:22,040 >> Ngunit ngayon, ako na maisasakatuparan, at maaaring mayroon ka natanto na ito lamang pagkatapos ng pag-iisip 499 00:23:22,040 --> 00:23:24,720 ito sa pamamagitan ng isang bit, mayroong talagang dalawang mga kaso dito. 500 00:23:24,720 --> 00:23:28,060 Ang isa ay kung saan ang node ay sa simula ng listahan, na isang 501 00:23:28,060 --> 00:23:31,040 maliit na nakakainis na, dahil iyon ay isang espesyal na kaso, dahil mayroon kang haharapin 502 00:23:31,040 --> 00:23:33,340 may bagay na ito, na ay ang tanging anomalya. 503 00:23:33,340 --> 00:23:35,720 Kahit saan pa man sa listahan, ito ay ang parehong bagay. 504 00:23:35,720 --> 00:23:38,050 Mayroong isang nakaraang node at isang tabi node, nakaraang node, susunod na node. 505 00:23:38,050 --> 00:23:40,940 Ngunit ito tao ay isang maliit na espesyal kung siya ay sa simula. 506 00:23:40,940 --> 00:23:48,710 >> Kaya kung ang pointer ay katumbas sa listahan mismo, kaya kung ako sa simula ng 507 00:23:48,710 --> 00:23:53,960 ang listahan at nalaman ko na n, Kailangan ko na gawin ang isang pares ng mga bagay. 508 00:23:53,960 --> 00:23:59,230 Ang isa, kailangan kong baguhin ang listahan upang ituro sa susunod na patlang, 50. 509 00:23:59,230 --> 00:24:01,270 Kaya ipagpalagay na sinusubukan ko alisin 34. 510 00:24:01,270 --> 00:24:03,560 Kaya ito tao ay nakuha upang pumunta ang layo sa isang sandali lamang. 511 00:24:03,560 --> 00:24:07,210 >> Kaya pupuntahan ko sabihin, listahan ay makakakuha ng pointer susunod. 512 00:24:07,210 --> 00:24:08,570 Well, ito ang pointer. 513 00:24:08,570 --> 00:24:10,360 Susunod na nakaturo sa paglipas dito. 514 00:24:10,360 --> 00:24:17,470 Kaya ito ay nagbabago ito arrow right ngayon upang tumuro sa ito tao dito. 515 00:24:17,470 --> 00:24:19,580 Ngayon, tandaan, mayroon kami isang pansamantalang variable. 516 00:24:19,580 --> 00:24:23,520 Kaya hindi pa namin naulila anumang nodes, dahil mayroon ko rin ito tao sa aking 517 00:24:23,520 --> 00:24:25,010 pagpapatupad ng pag-alis. 518 00:24:25,010 --> 00:24:29,600 Kaya ngayon, kung listahan mismo ay hindi null, Kailangan ko upang ayusin ang isang maliit na isang bagay. 519 00:24:29,600 --> 00:24:32,690 >> Kailangan ko bang ngayon tiyakin na ito arrow, na kung saan ay dati nang pagturo 520 00:24:32,690 --> 00:24:36,830 50-34, ito ay nakuha upang pumunta ang layo, dahil kung sinusubukan ko upang mapupuksa 521 00:24:36,830 --> 00:24:41,910 ng 34, 50 ay nagkaroon ng mas mahusay na hindi panatilihin ang anumang mga uri ng pabalik sanggunian sa ito bilang 522 00:24:41,910 --> 00:24:42,820 mga iminungkahing arrow. 523 00:24:42,820 --> 00:24:44,820 Kaya lang ginawa ko sa linyang ito. 524 00:24:44,820 --> 00:24:46,520 Kaya pagkatapos ay ako tapos na. 525 00:24:46,520 --> 00:24:48,040 Kaso Iyon ay aktwal na medyo madali. 526 00:24:48,040 --> 00:24:51,010 Pagpuputol off ulo ng listahan ay medyo prangka. 527 00:24:51,010 --> 00:24:52,980 >> Sa kasamaang palad, mayroong ito nakakainis na iba block. 528 00:24:52,980 --> 00:24:56,170 Kaya ngayon, mayroon akong upang isaalang-alang ang kaso kung saan mayroong isang bagay sa gitna. 529 00:24:56,170 --> 00:24:59,880 Ngunit ito ay hindi masyadong kahila-hilakbot, maliban para sa syntax tulad nito. 530 00:24:59,880 --> 00:25:03,080 Kaya kung hindi ako sa simula ng listahan, ako sa isang lugar sa gitna. 531 00:25:03,080 --> 00:25:08,160 At ang linyang ito dito ay sinasabi, simula sa kahit anong node ikaw ay sa. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Pumunta sa susunod na field sa nakaraang node ni at ituro iyon sa pointer. 534 00:25:18,550 --> 00:25:20,390 >> Ni gawin ito pictorially Hayaan. 535 00:25:20,390 --> 00:25:21,640 Iyon ay nakakakuha kumplikado. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Kaya kung mayroon akong isang nakaraang field dito - ni gawin ito ipaalam - susunod na field dito. 538 00:25:37,990 --> 00:25:41,200 Pupunta ako sa gawing simple ang aking mungkahi ukol sa halip kaysa gumuhit ang maramihang mga 539 00:25:41,200 --> 00:25:45,710 bagay na pabalik-balik crisscrossing isa't isa. 540 00:25:45,710 --> 00:25:50,870 At ngayon, sabihin nating lamang ito ay 1, 2, 3 alang-alang sa talakayan, kahit na 541 00:25:50,870 --> 00:25:53,410 bagaman na hindi line up sa ang problema na pinag-uusapan. 542 00:25:53,410 --> 00:25:55,900 >> Kaya narito ang aking listahan ng naka-link. 543 00:25:55,900 --> 00:25:59,300 Ako ay sinusubukan mong alisin ang dalawang sa ito partikular na bersyon ng kuwento. 544 00:25:59,300 --> 00:26:01,960 Kaya na-update ko pointer sa ay nagtuturo sa ito tao. 545 00:26:01,960 --> 00:26:03,315 Kaya ito ay PTR. 546 00:26:03,315 --> 00:26:04,530 Siya'y tumuturo dito. 547 00:26:04,530 --> 00:26:07,170 Ito ang listahan, na kung saan ay umiiral sa buong mundo tulad ng dati. 548 00:26:07,170 --> 00:26:09,200 At siya ay tumuturo dito kahit na ano. 549 00:26:09,200 --> 00:26:10,800 At ngayon, sinusubukan ko upang alisin ang dalawa. 550 00:26:10,800 --> 00:26:13,850 >> Kaya kung pointer nakaturo dito, ako pagpunta sa sundin, sa malas, ang 551 00:26:13,850 --> 00:26:17,110 nakaraang pointer, na naglalagay sa akin sa 1. 552 00:26:17,110 --> 00:26:22,290 Pagkatapos ay pupuntahan ko sabihin na ang susunod na patlang, na pinagsasama-ako sa ibabaw upang ito 553 00:26:22,290 --> 00:26:25,410 box dito, ay pagpunta sa katumbas pointer susunod. 554 00:26:25,410 --> 00:26:28,400 Kaya kung ito pointer, ito ang susunod. 555 00:26:28,400 --> 00:26:31,840 Ay nangangahulugan na na ito pangangailangan arrow upang ituro sa tao na ito. 556 00:26:31,840 --> 00:26:35,140 >> Kaya kung ano ay may lamang na linya ng code tapos Medyo ng ito. 557 00:26:35,140 --> 00:26:37,500 At ngayon, ito ay naghahanap ng tulad ng isang hakbang sa kanan direksyon. 558 00:26:37,500 --> 00:26:41,390 Talaga namin nais na may Ginupit 2 out ng gitna ng 1 at 3. 559 00:26:41,390 --> 00:26:44,400 Kaya ito ang akma na gusto naming ruta na ito pointer sa paligid nito. 560 00:26:44,400 --> 00:26:50,400 Kaya ito susunod na linya ay check kung pointer susunod ay hindi null, mayroong 561 00:26:50,400 --> 00:26:54,200 sa katunayan isang tao sa kanan ng 2, Ibig sabihin nito na mayroon din naming gawin 562 00:26:54,200 --> 00:26:55,850 ang kaunti na may Ginupit dito. 563 00:26:55,850 --> 00:27:00,590 >> Kaya kailangan ko ngayon upang sundin ang pointer at i-update ang nakaraang pointer sa 564 00:27:00,590 --> 00:27:05,410 ito tao na gawin ang isang maliit na bit ng isang workaround dito ang punto dito. 565 00:27:05,410 --> 00:27:07,100 At ngayon, biswal na ito ay magaling. 566 00:27:07,100 --> 00:27:11,930 Ito ay isang maliit na walang kaayusan sa na mayroong walang sinuman na tumuturo sa 2 na ngayon. 567 00:27:11,930 --> 00:27:13,600 2 nakaturo sa kaliwa. 568 00:27:13,600 --> 00:27:14,980 At 2 nakaturo sa kanan. 569 00:27:14,980 --> 00:27:17,480 Ngunit maaari siya gawin ang anumang siya Nais ni, dahil siya ay tungkol sa upang makakuha ng mga napalaya. 570 00:27:17,480 --> 00:27:19,480 At hindi mahalaga kung ano ang mga halaga ay nakikita. 571 00:27:19,480 --> 00:27:23,040 >> Ano ang mahalaga ay na ang mga natitirang guys ay routing sa itaas 572 00:27:23,040 --> 00:27:24,280 at sa ibaba sa kanya ngayon. 573 00:27:24,280 --> 00:27:25,810 At sa katunayan, iyon ang ginagawa namin sa susunod. 574 00:27:25,810 --> 00:27:29,360 Kami ng mga libreng pointer, na nangangahulugang sabihin namin ang operating system, ikaw ay malugod 575 00:27:29,360 --> 00:27:30,906 i-reclaim na ito. 576 00:27:30,906 --> 00:27:34,900 At pagkatapos ay sa wakas, bumalik kami. 577 00:27:34,900 --> 00:27:37,220 Iba Pa nang kataon lamang, kung namin hindi pa ibinalik, 578 00:27:37,220 --> 00:27:38,290 mayroon kaming panatilihing naghahanap. 579 00:27:38,290 --> 00:27:41,485 Kaya pointer ay katumbas ng pointer sa tabi lang Nangangahulugan ilipat ang tao dito. 580 00:27:41,485 --> 00:27:42,600 Ilipat ang tao dito. 581 00:27:42,600 --> 00:27:45,400 Ilipat ang tao dito kung, sa katunayan, hindi kami nakahanap ng mga numero 582 00:27:45,400 --> 00:27:46,960 kaming naghahanap ng mga pa. 583 00:27:46,960 --> 00:27:49,630 >> Kaya nang tapat, mukha itong ganap napakalaki, sa palagay ko, sa unang 584 00:27:49,630 --> 00:27:52,180 sulyap, lalo na kung struggled may ito sa panahon ng pagsusulit pagkatapos makita 585 00:27:52,180 --> 00:27:52,850 isang bagay na katulad nito. 586 00:27:52,850 --> 00:27:55,050 At sa iyo Pat iyong sarili sa likod. 587 00:27:55,050 --> 00:27:57,080 Well, walang paraan maaari kong magkaroon makabuo ng mga na sa pagsusulit. 588 00:27:57,080 --> 00:28:00,470 Ngunit Gusto ko magtaltalan, maaari mong kung masira mo ito down sa mga indibidwal na 589 00:28:00,470 --> 00:28:04,400 kaso at lamang maglakad sa pamamagitan nito Maingat, kahit na, tinatanggap na, sa ilalim ng 590 00:28:04,400 --> 00:28:06,300 nakababahalang pangyayari. 591 00:28:06,300 --> 00:28:09,470 >> Thankfully, ang larawan ginawa ang lahat ng bagay mas masaya. 592 00:28:09,470 --> 00:28:11,050 Maaari mong iguhit ito sa anumang bilang ng mga paraan. 593 00:28:11,050 --> 00:28:12,760 Hindi mo kailangang gawin ang crisscrossing bagay dito. 594 00:28:12,760 --> 00:28:14,520 Maaari mong gawin ito sa tuwid mga linya tulad nito. 595 00:28:14,520 --> 00:28:18,790 Subalit ang diwa ng problemang ito, sa pangkalahatan, ay upang mapagtanto na ang 596 00:28:18,790 --> 00:28:22,060 larawan sa dulo ay dapat magmukhang ng kaunti isang bagay na tulad nito, dahil 597 00:28:22,060 --> 00:28:25,030 pare-pareho ang oras ipinahiwatig na panatiliin ninyo trapiko at trapiko at trapiko ang 598 00:28:25,030 --> 00:28:29,900 bagong mga node sa simula ng listahan. 599 00:28:29,900 --> 00:28:31,960 Ang anumang mga katanungan? 600 00:28:31,960 --> 00:28:34,565 Marahil ang pinaka-hamon ng tiyak ang mga tanong na coding. 601 00:28:34,565 --> 00:28:37,690 >> Madla: Kaya ay listahan na katulad ng magtungo sa mga nakaraang mga halimbawa. 602 00:28:37,690 --> 00:28:39,640 >> David J. MALAN: Eksaktong, eksakto. 603 00:28:39,640 --> 00:28:43,130 Lamang ng ibang pangalan para sa isang global variable. 604 00:28:43,130 --> 00:28:44,380 World malawak na ano? 605 00:28:44,380 --> 00:28:48,880 606 00:28:48,880 --> 00:28:49,730 >> Rob BOWDEN: OK. 607 00:28:49,730 --> 00:28:52,020 Kaya ito ay ang isa kung saan mo nagkaroon na magsulat ng talata. 608 00:28:52,020 --> 00:28:56,060 Ang ilang mga tao ay nagsulat Mga Sanaysay para sa tanong na ito. 609 00:28:56,060 --> 00:29:00,230 Ngunit kailangan mo lamang na gamitin ang mga anim na tuntunin upang ilarawan kung ano ang mangyayari kapag 610 00:29:00,230 --> 00:29:02,440 subukan mo upang makipag-ugnay sa facebook.com. 611 00:29:02,440 --> 00:29:07,930 Kaya ko makikita lamang makipag-usap sa pamamagitan ng proseso gamit ang lahat ng mga tuntuning ito. 612 00:29:07,930 --> 00:29:11,290 Kaya sa aming mga browser, i-type namin facebook.com at pindutin ang Enter. 613 00:29:11,290 --> 00:29:17,280 Kaya ang nangyayari sa aming mga browser upang bumuo ng isang HTTP hilingin na ito ang nangyayari upang magpadala ng 614 00:29:17,280 --> 00:29:22,220 sa pamamagitan ng ilang mga proseso sa Facebook para sa Facebook upang tumugon sa amin sa 615 00:29:22,220 --> 00:29:24,450 HTML ng pahina nito. 616 00:29:24,450 --> 00:29:28,800 >> Kaya kung ano ay ang proseso sa pamamagitan ng saan ang kahilingan ng HTTP 617 00:29:28,800 --> 00:29:30,730 talaga ang nakakakuha sa Facebook? 618 00:29:30,730 --> 00:29:32,790 Kaya una, kailangan namin upang isalin Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Kaya lang ibinigay ang pangalan Facebook.com, kung saan ang aktwal na mga kahilingan ng HTTP 620 00:29:38,780 --> 00:29:39,940 kailangan pumunta? 621 00:29:39,940 --> 00:29:44,120 Kaya kailangan namin upang isalin ang Facebook.com sa isang IP address, na tanging 622 00:29:44,120 --> 00:29:47,620 Kinikilala ng kung ano ang machine namin talaga nais na magpadala ng kahilingan na ito sa. 623 00:29:47,620 --> 00:29:49,310 Ang iyong laptop na may IP address. 624 00:29:49,310 --> 00:29:52,240 Anumang bagay konektado sa internet may IP address. 625 00:29:52,240 --> 00:29:59,030 >> Kaya DNS, Domain Name System, iyon ay kung ano ang nangyayari upang mahawakan ang pagsasalin 626 00:29:59,030 --> 00:30:03,750 mula sa facebook.com sa isang IP address na talagang gusto mong makipag-ugnay. 627 00:30:03,750 --> 00:30:08,075 Kaya-ugnay kami ng mga DNS server at sabihin nating, ano ang facebook.com? 628 00:30:08,075 --> 00:30:16,560 Sinasabi nito, oh, ito ay ang IP address ng 190.212 isang bagay, isang bagay, isang bagay. 629 00:30:16,560 --> 00:30:16,900 Ayos lang. 630 00:30:16,900 --> 00:30:18,850 Ngayon, alam ko kung ano ang machine Gusto kong makipag-ugnay. 631 00:30:18,850 --> 00:30:22,360 >> Kaya pagkatapos mong ipadala ang iyong kahilingan sa HTTP sa ibabaw sa machine na. 632 00:30:22,360 --> 00:30:24,140 Kaya paano nito makapunta sa machine na? 633 00:30:24,140 --> 00:30:27,200 Well, napupunta ang kahilingan mula sa router sa router bounce. 634 00:30:27,200 --> 00:30:32,630 Alalahanin ang halimbawa sa klase, kung saan talaga Nakita namin ang ruta na ang 635 00:30:32,630 --> 00:30:35,340 packet kinuha noong sinubukan naming upang makipag-ugnayan. 636 00:30:35,340 --> 00:30:38,460 Nakita namin ito tumalon sa ibabaw ng Atlantic Karagatan sa isang punto o kahit ano. 637 00:30:38,460 --> 00:30:42,820 >> Kaya ang huling termino port. 638 00:30:42,820 --> 00:30:46,520 Kaya ito ay ngayon sa iyong computer. 639 00:30:46,520 --> 00:30:49,970 Maaari kang magkaroon ng maramihang mga bagay sa kasalukuyan pakikipag-ugnay sa internet. 640 00:30:49,970 --> 00:30:53,730 Kaya ko maaaring tumatakbo, sabihin nating, Skype. 641 00:30:53,730 --> 00:30:55,670 Maaaring mayroon akong isang web browser bukas. 642 00:30:55,670 --> 00:30:59,010 Maaaring mayroon akong isang bagay na torrenting mga file. 643 00:30:59,010 --> 00:31:00,880 Kaya lahat ng mga bagay na ito ay pakikipag-ugnay sa 644 00:31:00,880 --> 00:31:02,600 internet sa ilang mga paraan. 645 00:31:02,600 --> 00:31:08,070 >> Kaya kapag ang iyong computer na natatanggap ng ilang data mula sa internet, paano gagawin nito sa 646 00:31:08,070 --> 00:31:10,130 malaman kung ano ang application talaga Nais ni ang data? 647 00:31:10,130 --> 00:31:12,610 Paano gumagana ang alam ito kung ang partikular na data ay sinadya para sa 648 00:31:12,610 --> 00:31:16,070 torrenting application na taliwas sa web browser? 649 00:31:16,070 --> 00:31:20,980 Kaya ito ay ang layunin ng port sa na lahat ng mga application na ito ay may 650 00:31:20,980 --> 00:31:22,720 inaangkin ng isang port sa iyong computer. 651 00:31:22,720 --> 00:31:27,580 Kaya iyong web browser nagsasabing, hey, Ako pakikinig sa port 1000. 652 00:31:27,580 --> 00:31:32,240 At ang iyong mga torrenting programa ay nagsasabi, Ako pakikinig sa port 3000. 653 00:31:32,240 --> 00:31:34,770 At Skype sabi, gumagamit ako ng port 4000. 654 00:31:34,770 --> 00:31:41,950 >> Kaya kapag nakakuha ka ng ilang mga data na pag-aari sa isa sa mga application na ito, ang data 655 00:31:41,950 --> 00:31:45,510 ay minarkahan ng port kung saan ito talaga dapat ipadala kasama sa. 656 00:31:45,510 --> 00:31:47,950 Kaya ito ang sinasabi, oh, nabibilang ko sa port 1000. 657 00:31:47,950 --> 00:31:50,950 Alam ko pagkatapos kailangan kong ipasa ito kasama sa aking web browser. 658 00:31:50,950 --> 00:31:56,440 Kaya ang dahilan kung ito'y may-katuturang dito ay ang mga web server ay may posibilidad na 659 00:31:56,440 --> 00:31:58,240 makinig sa port 80. 660 00:31:58,240 --> 00:32:02,420 Kaya kapag-ugnay ako sa Facebook.com, ako pakikipag-ugnayan sa ilang mga machine. 661 00:32:02,420 --> 00:32:06,390 Ngunit kailangan kong sabihin na port ng na machine gusto kong makipag-usap sa. 662 00:32:06,390 --> 00:32:09,160 At mga web server ay may posibilidad na maging pakikinig sa port 80. 663 00:32:09,160 --> 00:32:14,010 >> Kung nais nila, maaari nilang itakda ito up kaya inililista nito ang bilang sa port 7000. 664 00:32:14,010 --> 00:32:19,090 At pagkatapos ay sa isang web browser, maaari ko mano-manong i-type Facebook.com: 7000 upang 665 00:32:19,090 --> 00:32:24,600 magpadala ng kahilingan sa port 7000 ng web server Facebook ni. 666 00:32:24,600 --> 00:32:26,820 >> David J. MALAN: At sa kasong ito, kahit na kahit na hindi namin ginawa ay kinakailangan na ang mga tao 667 00:32:26,820 --> 00:32:30,000 banggitin ito, sa kasong ito, kung ano ang port Gusto ang kahilingan aktwal na pumunta sa? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Subukang muli. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Mismong. 672 00:32:44,300 --> 00:32:47,960 Hindi naghahanap ng iyon, ngunit isang kapitaganan na mayroong none ang huling. 673 00:32:47,960 --> 00:32:51,770 >> Rob BOWDEN: Kaya ang HTTPS, dahil ito ay partikular pakikinig para sa 674 00:32:51,770 --> 00:32:55,180 naka-encrypt, ito ay sa port 4430. 675 00:32:55,180 --> 00:32:57,680 >> Madla: At na email ay 25, tama? 676 00:32:57,680 --> 00:33:00,670 >> David J. MALAN: Papalabas email, 25, yep. 677 00:33:00,670 --> 00:33:03,760 >> Rob BOWDEN: hindi ko kahit na ang karamihan sa mga kilala ang - ang lahat ng mga mas mababang mga bago ay may posibilidad na maging 678 00:33:03,760 --> 00:33:06,310 nakalaan para sa mga bagay. 679 00:33:06,310 --> 00:33:09,260 Sa tingin ko ang lahat ng bagay sa ilalim ng 1024 ay nakareserba. 680 00:33:09,260 --> 00:33:13,450 >> Madla: Bakit mo sinasabi 3 ay ang maling numero? 681 00:33:13,450 --> 00:33:18,820 >> Rob BOWDEN: Dahil sa isang IP address, mayroong apat na mga pagpapangkat ng mga digit. 682 00:33:18,820 --> 00:33:21,090 At ang mga ito ay 0-255. 683 00:33:21,090 --> 00:33:28,060 Kaya 192.168.2.1 ay isang pangkaraniwang lokal na IP address ng network. 684 00:33:28,060 --> 00:33:30,840 Pansinin lahat ng mga Mas mababa sa 255. 685 00:33:30,840 --> 00:33:33,570 Kaya kapag nagsimula ako sa 300, na Hindi ma posibleng magkaroon 686 00:33:33,570 --> 00:33:35,210 naging isa sa mga numero. 687 00:33:35,210 --> 00:33:38,170 >> David J. MALAN: Ngunit na ulok clip mula sa - ay ito CSI, kung saan sila ay nagkaroon ng isang 688 00:33:38,170 --> 00:33:39,970 na numero ay masyadong malaki para sa mga IP address. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> Rob BOWDEN: Anumang mga katanungan sa ito? 691 00:33:46,110 --> 00:33:51,710 Ang susunod na isa, kaya kumpletong pagbabago sa topic, ngunit mayroon kaming ito array PHP para sa 692 00:33:51,710 --> 00:33:53,270 ang mga bahay sa patyo sa loob. 693 00:33:53,270 --> 00:33:56,360 At kami ay may isang unordered listahan. 694 00:33:56,360 --> 00:33:59,550 At gusto naming i-print ang bawat item sa listahan lamang na naglalaman ng mga pangalan ng bahay. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Kaya mayroon kaming foreach loop. 697 00:34:11,870 --> 00:34:17,540 Kaya tandaan, ang syntax ay foreach array bilang item sa array. 698 00:34:17,540 --> 00:34:22,360 Kaya sa pamamagitan ng bawat pag-ulit ng loop, bahay ay pagpunta sa tumagal ng sa isa sa mga 699 00:34:22,360 --> 00:34:24,060 mga halaga sa loob ng array. 700 00:34:24,060 --> 00:34:26,530 >> Nasa unang iteration, bahay Magiging Cabot House. 701 00:34:26,530 --> 00:34:30,370 Sa isang pangalawang iteration, bahay habilin maging Courier House at iba pa. 702 00:34:30,370 --> 00:34:34,370 Kaya para sa bawat patyo sa loob bilang house, kami ay lamang ng pagpunta sa i-print - 703 00:34:34,370 --> 00:34:37,250 din sana echoed mo - 704 00:34:37,250 --> 00:34:42,199 ang item sa listahan at pagkatapos ay ang pangalan ng bahay ni at pagkatapos isara ang item sa listahan. 705 00:34:42,199 --> 00:34:45,210 Ang kulot tirante ay opsyonal dito. 706 00:34:45,210 --> 00:34:49,480 >> At pagkatapos ay sinabi rin namin sa pinag-uusapan mismo, tandaan upang isara ang 707 00:34:49,480 --> 00:34:50,770 unordered listahan tag. 708 00:34:50,770 --> 00:34:53,949 Kaya kailangan namin upang lumabas sa mode na PHP upang gawin ito. 709 00:34:53,949 --> 00:35:00,280 O kaya naman sana echoed namin ang isara unordered listahan tag. 710 00:35:00,280 --> 00:35:02,380 >> David J. MALAN: masarap na rin dito gagawin naging gumamit ng isang lumang paaralan para sa 711 00:35:02,380 --> 00:35:07,340 loop na may $ i = 0 0 at paggamit ng mga bilang sa tayahin ang haba ng ray. 712 00:35:07,340 --> 00:35:09,240 Lahat-lahat fine masyadong, lamang medyo wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> Madla: Kaya't kung ikaw ay pagpunta sa [Hindi marinig], gagawin mo - 715 00:35:14,742 --> 00:35:16,734 Nalimutan ko kung ano ang loop [hindi marinig] ay. 716 00:35:16,734 --> 00:35:21,380 Gusto mo $ patyo sa loob bracket i? 717 00:35:21,380 --> 00:35:21,850 >> David J. MALAN: Mismong. 718 00:35:21,850 --> 00:35:23,100 Oo, eksakto. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> Rob BOWDEN: Ano pa? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> David J. MALAN: Lahat ng karapatan. 723 00:35:32,010 --> 00:35:32,300 Trade-off. 724 00:35:32,300 --> 00:35:38,290 Kaya mayroong bunches ng sagot posible para sa bawat isa sa mga. 725 00:35:38,290 --> 00:35:40,510 Kami ay talagang lamang naghahanap para sa isang bagay na nakakahimok para sa isang nakabaligtad at 726 00:35:40,510 --> 00:35:41,100 isang downside. 727 00:35:41,100 --> 00:35:44,830 At bilang 16 nagtanong, pagpapatunay sa mga gumagamit ' input client-side, tulad sa JavaScript, 728 00:35:44,830 --> 00:35:47,280 sa halip ng server-side, tulad sa PHP. 729 00:35:47,280 --> 00:35:49,450 Kaya kung ano ang isang bentahe ng paggawa client-side? 730 00:35:49,450 --> 00:35:53,780 >> Well, isa sa mga bagay na aming iminungkahi ay na bawasan mo latency, dahil ikaw 731 00:35:53,780 --> 00:35:56,750 Hindi mo na kailangang mag-abala pakikipag-ugnay sa server, na maaaring tumagal ng ilang 732 00:35:56,750 --> 00:36:00,390 millisecond o kahit na ilang mga segundo sa pamamagitan ng pag-iwas na lamang at 733 00:36:00,390 --> 00:36:04,670 pagpapatunay ng pag-input client-side ng mga gumagamit ' nagti-trigger ng on-sumite handler at 734 00:36:04,670 --> 00:36:06,650 check lang, nag-type sila isang bagay in para sa pangalan? 735 00:36:06,650 --> 00:36:08,080 Type mo ba sila ng isang bagay in para sa email address? 736 00:36:08,080 --> 00:36:10,950 Pumili ba sila ng dorm mula sa sa drop-down menu? 737 00:36:10,950 --> 00:36:14,360 >> Maaari mong bigyan sila ng madalian feedback gamit ang gigahertz computer na 738 00:36:14,360 --> 00:36:16,770 o kahit anong mayroon sila na talaga sa kanilang desk. 739 00:36:16,770 --> 00:36:19,310 Kaya ito ay lamang ng isang mas mahusay na user makaranas ng karaniwang. 740 00:36:19,310 --> 00:36:24,460 Ngunit isang downside ng paggawa ng client-side pagpapatunay, kung gagawin mo ito nang hindi rin 741 00:36:24,460 --> 00:36:29,860 paggawa server-side pagpapatunay ay na karamihan ng sinuman galing sa CS50 alam 742 00:36:29,860 --> 00:36:33,980 na maaari mo lamang magpadala ng anumang data na nais mong sa isang server ng anumang bilang ng mga paraan. 743 00:36:33,980 --> 00:36:37,030 Nang tapat, sa karamihan ng anumang browser, maaari kang i-click sa paligid ng mga setting at lamang 744 00:36:37,030 --> 00:36:40,110 i-off ang JavaScript, na gagawin, samakatuwid, huwag paganahin ang anumang paraan ng 745 00:36:40,110 --> 00:36:41,080 pagpapatunay. 746 00:36:41,080 --> 00:36:44,460 >> Ngunit maaari mo ring isipin na kahit ako May ginawang ilang arcane bagay sa klase ng paggamit 747 00:36:44,460 --> 00:36:47,790 telnet at talagang pagkukunwaring maging isang browser sa pamamagitan ng pagpapadala get 748 00:36:47,790 --> 00:36:49,240 mga kahilingan sa server. 749 00:36:49,240 --> 00:36:51,030 At iyon ay tiyak na hindi gamit ang anumang JavaScript. 750 00:36:51,030 --> 00:36:53,290 Na lang ako mag-type command sa isang keyboard. 751 00:36:53,290 --> 00:36:57,410 Kaya talaga, ang anumang mga programmer sa loob ng sapat na ginhawa sa web at HTTP 752 00:36:57,410 --> 00:37:01,690 maaaring ipadala ang anumang data siya Nais ni sa isang server na walang pagpapatunay. 753 00:37:01,690 --> 00:37:05,470 At kung ang iyong server ay hindi rin pagsuri, ay magbibigay sila sa akin ng isang pangalan, ay 754 00:37:05,470 --> 00:37:08,930 ito talagang isang wastong email address, ginawang sila pumili ng dorm, maaari mong tapusin 755 00:37:08,930 --> 00:37:12,800 up pagpasok bogus o lamang blangko ang data sa iyong database, na marahil 756 00:37:12,800 --> 00:37:15,450 ay hindi pagpunta sa maging isang magandang bagay kung ikaw ay sa pag-aakala ito ay doon. 757 00:37:15,450 --> 00:37:16,770 >> Kaya ito ay isang nakakainis na katotohanan. 758 00:37:16,770 --> 00:37:19,890 Ngunit sa pangkalahatan, ang client-side pagpapatunay ay napakahusay. 759 00:37:19,890 --> 00:37:21,810 Ngunit ito ay nangangahulugan ng dalawang beses bilang magkano ang trabaho. 760 00:37:21,810 --> 00:37:25,970 Kahit na gawin doon umiiral ang iba't-ibang mga aklatan, mga aklatan ng JavaScript para sa 761 00:37:25,970 --> 00:37:28,830 Halimbawa, na gumawa ito magkano, higit na mas mababa ng isang sakit ng ulo. 762 00:37:28,830 --> 00:37:31,940 At maaari mong muling gamitin ang ilan sa mga code server-side, ang client-side. 763 00:37:31,940 --> 00:37:35,980 Ngunit huwag mapagtanto na ito ay karaniwang dagdag na trabaho. 764 00:37:35,980 --> 00:37:36,415 Oo. 765 00:37:36,415 --> 00:37:37,792 >> Madla: Kaya kung kami lamang Sinabi gaanong secure - 766 00:37:37,792 --> 00:37:39,205 >> David J. MALAN: [LAUGHS] 767 00:37:39,205 --> 00:37:39,680 He. 768 00:37:39,680 --> 00:37:43,105 Iyon ang palagi ang mas mahirap mga bago upang dinggin. 769 00:37:43,105 --> 00:37:44,480 >> Rob BOWDEN: gagawin iyon tinanggap. 770 00:37:44,480 --> 00:37:44,810 >> David J. MALAN: Ano? 771 00:37:44,810 --> 00:37:45,810 >> Rob BOWDEN: Lumikha ako ng problemang ito. 772 00:37:45,810 --> 00:37:46,735 Iyon sana ay natanggap na. 773 00:37:46,735 --> 00:37:47,220 >> David J. MALAN: Oo. 774 00:37:47,220 --> 00:37:47,830 >> Madla: Cool. 775 00:37:47,830 --> 00:37:51,770 >> Rob BOWDEN: Ngunit kami ay hindi tanggapin para sa unang isa - 776 00:37:51,770 --> 00:37:53,630 well, ano humahanap kami ay isang bagay na tulad mo Hindi mo na kailangang 777 00:37:53,630 --> 00:37:55,270 makipag-ugnayan sa server. 778 00:37:55,270 --> 00:37:58,355 Hindi kami tumatanggap ng mas mabilis lang. 779 00:37:58,355 --> 00:38:00,080 >> Madla: Paano ang tungkol sa huwag i-reload ang pahina? 780 00:38:00,080 --> 00:38:00,430 >> Rob BOWDEN: Oo. 781 00:38:00,430 --> 00:38:03,000 Iyon ay isang tinatanggap na sagot. 782 00:38:03,000 --> 00:38:06,300 >> David J. MALAN: Anumang bagay kung saan kami nadama ito ay mas malamang kaysa sa hindi malamang 783 00:38:06,300 --> 00:38:09,780 na alam mo kung ano ang mga sinasabi, na isang matigas 784 00:38:09,780 --> 00:38:13,500 linya upang gumuhit ng minsan. 785 00:38:13,500 --> 00:38:16,000 Sa halip Paggamit ng isang naka-link na listahan ng isang array upang mapanatili ang isang 786 00:38:16,000 --> 00:38:17,590 pinagsunod-sunod na listahan ng mga integer. 787 00:38:17,590 --> 00:38:21,000 Kaya isang nakabaligtad kami madalas sipiin may naka-link mga listahan na motivated ang kanilang buong 788 00:38:21,000 --> 00:38:22,370 panimula ay kang makakuha ng dynamism. 789 00:38:22,370 --> 00:38:23,030 Maaari silang lumaki. 790 00:38:23,030 --> 00:38:23,950 Maaari silang pag-urong. 791 00:38:23,950 --> 00:38:27,370 Kaya hindi mo na kailangang tumalon sa pamamagitan hoops upang aktwal na lumikha ng higit pang memory 792 00:38:27,370 --> 00:38:28,140 may isang array. 793 00:38:28,140 --> 00:38:30,310 O kaya hindi mo na kailangang lamang sabihin, paumanhin, ang user. 794 00:38:30,310 --> 00:38:31,410 Ang array ay puno. 795 00:38:31,410 --> 00:38:35,850 Kaya dynamic na paglago ng listahan. 796 00:38:35,850 --> 00:38:37,210 Isang downside bagaman ng naka-link na listahan? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> Madla: Ito ay linear. 799 00:38:43,356 --> 00:38:45,800 Naghahanap sa naka-link na listahan ay linear sa halip ng kung ano-log in ka 800 00:38:45,800 --> 00:38:46,360 >> David J. MALAN: Mismong. 801 00:38:46,360 --> 00:38:50,160 Naghahanap sa naka-link na listahan ay linear, kahit na ito ay pinagsunod-sunod, dahil maaari ka 802 00:38:50,160 --> 00:38:53,170 sundin lamang ang mga tinapay crumbs, ang mga mga payo, mula sa simula ng listahan 803 00:38:53,170 --> 00:38:53,570 sa dulo. 804 00:38:53,570 --> 00:38:57,970 Hindi mo maaaring magamit random access at, kaya, binary paghahanap, kahit na ito ay 805 00:38:57,970 --> 00:39:00,740 pinagsunod-sunod, na maaari mong gawin sa isang array. 806 00:39:00,740 --> 00:39:02,390 At mayroon ding isa pang gastos. 807 00:39:02,390 --> 00:39:02,966 Oo. 808 00:39:02,966 --> 00:39:03,800 >> Madla: Memory hindi mabisa? 809 00:39:03,800 --> 00:39:04,130 >> David J. MALAN: Oo. 810 00:39:04,130 --> 00:39:06,940 Well, hindi ko gagawin naman sabihin hindi mabisa. 811 00:39:06,940 --> 00:39:10,110 Ngunit ito ang gastos sa iyo ng karagdagang memorya, dahil kailangan mo 32 bits para sa bawat 812 00:39:10,110 --> 00:39:13,400 na node para sa karagdagang pointer, sa hindi bababa sa para sa isang isa-isa naka-link na listahan. 813 00:39:13,400 --> 00:39:16,660 Ngayon, kung ikaw ay lamang ang pag-iimbak integer at nagdadagdag ka ng mga pointer, na 814 00:39:16,660 --> 00:39:17,830 talagang uri ng di-walang kuwenta. 815 00:39:17,830 --> 00:39:19,340 Ang pagdodoble nito ang halaga ng memorya. 816 00:39:19,340 --> 00:39:22,330 Ngunit sa katotohanan, kung ikaw ay nag-iimbak ng isang naka-link na listahan ng mga structs na maaaring mayroon 817 00:39:22,330 --> 00:39:25,540 8 bytes, 16 bytes, kahit na higit pa kaysa doon, marahil ito ay mas mababa 818 00:39:25,540 --> 00:39:26,500 ng isang nasa gilid gastos. 819 00:39:26,500 --> 00:39:28,320 Ngunit ito ay isang cost gayunman. 820 00:39:28,320 --> 00:39:31,880 Kaya ang alinman sa mga nais nai naging fine bilang downsides. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Paggamit ng PHP sa halip na C upang magsulat isang programa command-line. 823 00:39:36,100 --> 00:39:41,890 Kaya dito, ito ay madalas na mas mabilis na gamitin ang isang wika tulad ng PHP o Ruby o Python. 824 00:39:41,890 --> 00:39:43,700 Ikaw lamang madaling mabuksan up ng isang text editor. 825 00:39:43,700 --> 00:39:45,900 Mayroon kang maraming iba pang mga pag-andar magagamit mo. 826 00:39:45,900 --> 00:39:49,325 May kusina ang lababo ng mga function na PHP, samantalang sa C, mo 827 00:39:49,325 --> 00:39:50,420 may napaka, napakaliit. 828 00:39:50,420 --> 00:39:53,820 Sa katunayan, guys ang alam na ang mahirap na paraan na wala kang hash talahanayan. 829 00:39:53,820 --> 00:39:55,000 Hindi mo nai-link ang mga listahan. 830 00:39:55,000 --> 00:39:57,470 Kung nais mong iyon, mayroon kang upang ipatupad ang mga ito sa iyong sarili. 831 00:39:57,470 --> 00:40:00,950 >> Kaya isa bentahe ng PHP o talagang anumang kahulugan ng wika ay ang kabilisan 832 00:40:00,950 --> 00:40:02,920 na kung saan maaari mong isulat ang code. 833 00:40:02,920 --> 00:40:06,660 Ngunit isang downside, nakita namin na ito kapag ako ay mabilis whipped up ng isang misspeller 834 00:40:06,660 --> 00:40:11,780 pagpapatupad sa panayam gamit ang PHP, ay na gumagamit ng isang kahulugan ng wika 835 00:40:11,780 --> 00:40:13,570 ay karaniwang mas mabagal. 836 00:40:13,570 --> 00:40:18,420 At nakita namin na demonstrably may isang dagdagan sa oras mula sa 0.3 segundo upang 3 837 00:40:18,420 --> 00:40:24,440 segundo, dahil sa ang interpretasyon na aktwal na mangyayari. 838 00:40:24,440 --> 00:40:27,060 >> Isa pang bentahe ay na sa iyo Hindi mo na kailangang mag-compile. 839 00:40:27,060 --> 00:40:30,130 Kaya din pinapabilis ito pataas-unlad nagkataon, dahil hindi mo na kailangang 840 00:40:30,130 --> 00:40:31,360 dalawang hakbang sa pagpapatakbo ng isang programa. 841 00:40:31,360 --> 00:40:32,140 Magkaroon ng isa ka lang. 842 00:40:32,140 --> 00:40:35,260 At kaya na medyo nakahihimok pati na rin. 843 00:40:35,260 --> 00:40:38,450 Sa halip ng paggamit ng isang database SQL isang CSV file upang mag-imbak ng data. 844 00:40:38,450 --> 00:40:40,230 Kaya SQL database ay ginagamit para sa pset7. 845 00:40:40,230 --> 00:40:42,060 CSV na mga file mo ay hindi magkano ang gamitin. 846 00:40:42,060 --> 00:40:45,960 Ngunit ginagamit mo ito nang kataon lamang sa pset7 bilang na rin sa pamamagitan ng pakikipag-usap sa Yahoo Finance. 847 00:40:45,960 --> 00:40:49,330 >> Ngunit CSV ay katulad lamang ng isang Excel file ngunit sobrang simple, kung saan ang mga hanay ay 848 00:40:49,330 --> 00:40:54,010 lamang demarked ng mga kuwit loob ng isang kung hindi man tekstong file. 849 00:40:54,010 --> 00:40:56,740 At gamit ang isang database ng SQL ay mas nakakahimok ng kaunti. 850 00:40:56,740 --> 00:41:00,060 Ito ay isang bentahe, dahil makakakuha ka ng mga bagay piliin tulad at ipasok at tanggalin. 851 00:41:00,060 --> 00:41:03,790 At nakuha, siguro, ini-index na MySQL at iba pang mga database, tulad ng 852 00:41:03,790 --> 00:41:07,510 Oracle, bumuo ng para sa iyo sa memorya, na nangangahulugan na ang iyong piliin Marahil hindi 853 00:41:07,510 --> 00:41:09,000 pagpunta sa maging linear itaas hanggang sa ibaba. 854 00:41:09,000 --> 00:41:11,300 Talaga Ito ay pagpunta sa maging isang bagay tulad ng binary paghahanap o isang bagay 855 00:41:11,300 --> 00:41:12,520 katulad sa espiritu. 856 00:41:12,520 --> 00:41:13,930 Kaya ang mga ito ay karaniwang mas mabilis. 857 00:41:13,930 --> 00:41:16,040 >> Ngunit isang downside ay na ito lamang ay pang trabaho. 858 00:41:16,040 --> 00:41:16,730 Ito ay higit na pagsusumikap. 859 00:41:16,730 --> 00:41:18,140 Mayroon kang upang maunawaan ang mga database. 860 00:41:18,140 --> 00:41:18,940 Mayroon kang i-set up ito. 861 00:41:18,940 --> 00:41:20,840 Kailangan mo ng isang server upang tumakbo na database sa. 862 00:41:20,840 --> 00:41:22,750 Kailangan mong maunawaan paano i-configure ito. 863 00:41:22,750 --> 00:41:24,930 Kaya ang mga ito ay lamang ang mga mga uri ng kalakalan-off. 864 00:41:24,930 --> 00:41:27,860 Sapagkat isang CSV file, maaari mong lumikha ng ito sa gedit. 865 00:41:27,860 --> 00:41:28,770 At ikaw ay handa na upang patakbuhin. 866 00:41:28,770 --> 00:41:31,550 Walang kumplikado lampas na. 867 00:41:31,550 --> 00:41:34,870 >> Paggamit ng isang trie sa halip ng isang hash talahanayan may nakahiwalay na chaining upang mag-imbak ng 868 00:41:34,870 --> 00:41:37,490 diksyunaryo ng mga salita nakapagpapagunita ng pset5. 869 00:41:37,490 --> 00:41:42,480 Kaya isang sinusubukan ng nakabaligtad, sa teorya hindi bababa sa, ay kung ano? 870 00:41:42,480 --> 00:41:46,380 Ang patuloy na mga oras, hindi bababa sa kung ikaw ay hashing sa bawat isa sa mga indibidwal na 871 00:41:46,380 --> 00:41:48,990 mga letra sa isang salita, tulad mo maaaring mayroon para sa pset5. 872 00:41:48,990 --> 00:41:52,720 Iyon ay maaaring maging limang hashes, anim hashes kung mayroong lima o anim na 873 00:41:52,720 --> 00:41:53,900 mga titik sa salita. 874 00:41:53,900 --> 00:41:54,580 At iyon ang medyo magandang. 875 00:41:54,580 --> 00:41:56,910 At kung mayroong isang pang-itaas nakatali sa kung paano ang haba ng iyong mga salita ay maaaring maging, na 876 00:41:56,910 --> 00:41:59,320 sa katunayan asymptotically pare-pareho ang panahon. 877 00:41:59,320 --> 00:42:05,180 >> Sapagkat isang hash talahanayan na may nakahiwalay na chaining, ang problema doon sa na 878 00:42:05,180 --> 00:42:09,070 uri ng istraktura ng data ay ang pagganap ng iyong mga algorithm ay karaniwang 879 00:42:09,070 --> 00:42:12,700 ay depende sa bilang ng mga bagay Nasa istraktura ng data. 880 00:42:12,700 --> 00:42:15,660 At iyon ang tiyak ang kaso sa chain, kung saan ang higit pang mga bagay-bagay na inilagay mo 881 00:42:15,660 --> 00:42:18,800 sa isang hash talahanayan, ang mas mahabang mga chain pumunta, na nangangahulugan na sa pinakamasama 882 00:42:18,800 --> 00:42:21,960 kaso, ang bagay sa iyo ay maaaring naghahanap ng ay ang lahat ng mga paraan sa dulo ng isa 883 00:42:21,960 --> 00:42:26,000 ng mga chain, na epektibong devolves sa isang bagay linear. 884 00:42:26,000 --> 00:42:29,450 >> Ngayon, sa pagsasagawa, ito ay maaaring walang pasubali ang kaso na ang isang hash talahanayan na may 885 00:42:29,450 --> 00:42:32,820 chain ay mas mabilis kaysa isang naaayong trie pagpapatupad. 886 00:42:32,820 --> 00:42:35,570 Ngunit iyon para sa iba't ibang mga kadahilanan, bukod sa na kung saan ay pagsusubok na gumamit ng isang buong maraming 887 00:42:35,570 --> 00:42:39,240 memory na maaari, sa katunayan, mabagal na mga bagay pababa, dahil hindi mo makakuha ng magaling 888 00:42:39,240 --> 00:42:42,410 mga benepisyo ng isang bagay na tinatawag na pag-cache, kung saan mga bagay na malapit nang sama-sama 889 00:42:42,410 --> 00:42:45,420 sa memory maaaring ma-access madalas na mas mabilis. 890 00:42:45,420 --> 00:42:48,180 At kung minsan maaari kang makabuo ng isang talagang magandang hash. 891 00:42:48,180 --> 00:42:51,060 Kahit na mayroon ka upang aksaya ng kaunting memorya, ikaw ay maaaring, sa katunayan, ma- 892 00:42:51,060 --> 00:42:54,430 mabilis at hindi mahanap ang mga bagay bilang masamang bilang linearly. 893 00:42:54,430 --> 00:42:58,410 >> Kaya sa maikling, nagkaroon hindi kinakailangang may alinman sa mga ito ng isa o kahit dalawang 894 00:42:58,410 --> 00:43:00,050 mga tukoy na bagay humahanap kami. 895 00:43:00,050 --> 00:43:03,080 Talagang kahit ano mapanghimok bilang isang nakabaligtad at downside 896 00:43:03,080 --> 00:43:04,800 sa pangkalahatan ay nahuli ang aming mata. 897 00:43:04,800 --> 00:43:11,840 >> Rob BOWDEN: Kaya't para ng bentahe, ginawa namin Hindi tumatanggap sa sarili nitong "mas mabilis." Sa iyo 898 00:43:11,840 --> 00:43:14,540 Nagkaroon sasabihin ng isang bagay tungkol dito. 899 00:43:14,540 --> 00:43:17,910 Kahit na sinabi mo theoretically mas mabilis, Alam namin na iyong uri ng naunawaan 900 00:43:17,910 --> 00:43:19,470 na ito ay 0 ng 1. 901 00:43:19,470 --> 00:43:22,820 At hash talahanayan, sa teorya, Hindi 0 ng 1. 902 00:43:22,820 --> 00:43:26,550 Pagbanggit ng kahit ano tungkol sa runtime sa pangkalahatan ay nakuha mo ang punto. 903 00:43:26,550 --> 00:43:32,640 Ngunit "mas mabilis," ang karamihan sa mga solusyon sa ang malaking board na pagsusubok ay 904 00:43:32,640 --> 00:43:34,990 talaga mas mabagal kaysa sa mga solusyon na naging hash talahanayan. 905 00:43:34,990 --> 00:43:37,250 Kaya mas mabilis sa at ng sarili nito ay hindi talaga totoo. 906 00:43:37,250 --> 00:43:41,550 907 00:43:41,550 --> 00:43:44,380 >> David J. MALAN: Dom de DOM DOM. 908 00:43:44,380 --> 00:43:46,686 Ako ay marahil ang isa lamang na napagtanto na kung paano na dapat 909 00:43:46,686 --> 00:43:47,500 ay binibigkas, tama? 910 00:43:47,500 --> 00:43:50,400 >> Rob BOWDEN: Mayroon akong talagang walang ideya. 911 00:43:50,400 --> 00:43:51,650 >> David J. MALAN: Ito ginawa kahulugan sa aking ulo. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> Rob BOWDEN: ako ng paggawa ng isang ito. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 Kaya ito ay ang isa kung saan kayo ay nagkaroon upang gumuhit ang diagram katulad mo lakas 916 00:44:04,243 --> 00:44:06,040 na nakita sa nakaraang pagsusulit. 917 00:44:06,040 --> 00:44:12,200 Kaya tingnan lamang ni sa ito ipaalam. 918 00:44:12,200 --> 00:44:18,170 Kaya mula sa HTML node, mayroon kaming dalawang mga bata, ang ulo at ang katawan. 919 00:44:18,170 --> 00:44:20,570 Kaya branch namin - ulo at katawan. 920 00:44:20,570 --> 00:44:22,280 Ulo ay may isang tag na pamagat. 921 00:44:22,280 --> 00:44:23,710 Kaya mayroon kaming isang pamagat. 922 00:44:23,710 --> 00:44:28,450 >> Ngayon, ang isang bagay ng maraming tao Nakalimutan ay na ang mga nodes teksto ay 923 00:44:28,450 --> 00:44:30,430 mga elemento sa loob ng punong kahoy na ito. 924 00:44:30,430 --> 00:44:36,260 Kaya dito mangyari namin upang gumuhit ng mga ito bilang mga ovals pag-iibahin ang mga ito mula sa mga 925 00:44:36,260 --> 00:44:37,380 mga uri ng node. 926 00:44:37,380 --> 00:44:41,450 Ngunit notice din dito mayroon kaming tuktok, gitna, at ibaba ay napupunta sa pagiging 927 00:44:41,450 --> 00:44:42,560 teksto nodes. 928 00:44:42,560 --> 00:44:46,250 Kaya forgetting mga noon ay medyo ng isang pangkaraniwang pagkakamali. 929 00:44:46,250 --> 00:44:48,770 >> Ang katawan ay may tatlong mga bata - ang tatlong divs. 930 00:44:48,770 --> 00:44:53,340 Kaya div, div, div at pagkatapos ay ang teksto node mga anak ng mga divs. 931 00:44:53,340 --> 00:44:55,900 Iyan ay medyo magkano ito para sa na mga katanungan. 932 00:44:55,900 --> 00:44:57,860 >> David J. MALAN: At ito ay nagkakahalaga ng noting, kahit na hindi namin mangatwiran ang mga 933 00:44:57,860 --> 00:45:01,040 mga detalye sa time gastusin namin sa JavaScript, na ginagawa ng order, sa 934 00:45:01,040 --> 00:45:02,290 katunayan, technically bagay na ito. 935 00:45:02,290 --> 00:45:06,330 Kaya kung ulo nauuna bago katawan sa HTML, pagkatapos ay dapat na lumitaw sa 936 00:45:06,330 --> 00:45:08,860 iniwan ng katawan sa aktwal na DOM. 937 00:45:08,860 --> 00:45:12,265 Iyon ang kanyang ay, sa pangkalahatan, Para sa Iyong Impormasyon lamang, isang bagay na tinatawag na order dokumento, kung saan 938 00:45:12,265 --> 00:45:13,260 ginagawa nito bagay. 939 00:45:13,260 --> 00:45:17,470 At kung ikaw ay pagpapatupad ng isang pang-parse, isang program na bumabasa ng HTML sa gusali 940 00:45:17,470 --> 00:45:20,960 up tree sa memorya, upang maging tapat, na intuitively marahil kung ano ang iyong 941 00:45:20,960 --> 00:45:24,720 gawin pa rin - itaas hanggang sa ibaba, kaliwa papuntang kanan. 942 00:45:24,720 --> 00:45:26,116 >> Rob BOWDEN: Mga tanong sa iyon? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Dapat ko bang gawin ang kasunod? 945 00:45:30,000 --> 00:45:32,380 >> David J. MALAN: Oo naman. 946 00:45:32,380 --> 00:45:33,810 >> Rob BOWDEN: OK. 947 00:45:33,810 --> 00:45:39,320 Kaya ito ay ang buffer sumobra atake tanong. 948 00:45:39,320 --> 00:45:43,740 Ang pangunahing bagay na makilala dito ay, well, kung paano maaari isang kalaban kahanga-hangang gawa 949 00:45:43,740 --> 00:45:46,170 ito programa sa e-execute arbitrary code? 950 00:45:46,170 --> 00:45:51,860 Kaya argv1, ang unang linya ng command argumento sa program na ito, na maaaring maging 951 00:45:51,860 --> 00:45:53,920 nagkataon mahaba. 952 00:45:53,920 --> 00:45:59,160 Ngunit dito na aming ginagamit memcpy upang kopyahin , na argv1 dito ay bar. 953 00:45:59,160 --> 00:46:00,165 Kami ay pagpasa ito bilang argumento. 954 00:46:00,165 --> 00:46:02,050 At kaya tumatagal sa pangalan bar. 955 00:46:02,050 --> 00:46:08,040 >> Kaya kami memcpying bar sa ito buffer c. 956 00:46:08,040 --> 00:46:09,400 Gaano karaming bytes kami ng pagkopya? 957 00:46:09,400 --> 00:46:14,040 Well gayunpaman maraming mga byte bar ang mangyayari sa ginagamit, ang haba ng na argumento. 958 00:46:14,040 --> 00:46:17,930 Ngunit c ay 12 lamang bytes ang lapad. 959 00:46:17,930 --> 00:46:22,280 Kaya kung nag-type namin ang isang argumento command line na mas mahaba kaysa sa 12 bytes, hindi namin 960 00:46:22,280 --> 00:46:25,470 pagpunta sa pag-apaw na ito partikular na buffer. 961 00:46:25,470 --> 00:46:31,000 Ngayon, kung paano maaaring isang kalaban linlangin ang programa sa e-execute arbitrary code? 962 00:46:31,000 --> 00:46:34,910 >> Kaya tandaan na dito pangunahing Tinatawagan foo. 963 00:46:34,910 --> 00:46:37,340 At kaya pagkatapos pangunahing mga tawag sa foo. 964 00:46:37,340 --> 00:46:40,408 Ni gumuhit ito Hayaan. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Kaya mayroon kaming ang aming stack. 967 00:46:46,990 --> 00:46:49,090 At pangunahing ay may isang stack frame sa ibaba. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 Sa ilang mga punto, ang mga pangunahing mga tawag sa foo. 970 00:46:53,250 --> 00:46:55,390 Well, agad-agad, pangunahing mga tawag sa foo. 971 00:46:55,390 --> 00:46:57,130 At kaya foo ay makakakuha ng sarili nitong stack frame. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Ngayon, sa isang punto, foo Pupunta upang bumalik. 974 00:47:02,220 --> 00:47:06,810 At nagpunta foo pagbalik, kailangan naming malaman sa ano linya ng code sa loob ng main namin 975 00:47:06,810 --> 00:47:10,610 ay upang malaman kung saan dapat naming ipagpatuloy sa pangunahing. 976 00:47:10,610 --> 00:47:13,100 Maaari kaming tawagan foo mula sa isang kabuuan tungkos ng iba't ibang mga lugar. 977 00:47:13,100 --> 00:47:14,620 Paano ko malalaman namin kung saan upang bumalik? 978 00:47:14,620 --> 00:47:16,460 Well, kailangan namin upang mag-imbak na sa isang lugar. 979 00:47:16,460 --> 00:47:23,010 >> Kaya sa isang lugar sa paligid ng karapatan dito, iniimbak namin kung saan dapat naming bumalik sa isang beses 980 00:47:23,010 --> 00:47:24,070 foo babalik. 981 00:47:24,070 --> 00:47:26,350 At ito ang return address. 982 00:47:26,350 --> 00:47:30,490 Kaya kung paano maaaring tumagal ng isang kalaban kalamangan ng ito ay ang katunayan na ang 983 00:47:30,490 --> 00:47:37,550 ito buffer c ay naka-imbak, sabihin sabihin, dito mismo ay c. 984 00:47:37,550 --> 00:47:39,690 Kaya Nakakuha kami ng 12 bytes para c. 985 00:47:39,690 --> 00:47:40,540 Ito ay c. 986 00:47:40,540 --> 00:47:43,030 At ito ay stack singsing foo ni. 987 00:47:43,030 --> 00:47:49,970 Kaya kung nagpasok ang nakakahamak na gumagamit nang higit pa bytes sa 12 o magpasok sila ng isang command 988 00:47:49,970 --> 00:47:54,570 argumento linya na mas mahaba sa 12 character, pagkatapos kami ay pagpunta sa 989 00:47:54,570 --> 00:47:57,540 mapuno ito buffer. 990 00:47:57,540 --> 00:47:59,910 >> Maaari naming panatilihin ang pagpunta. 991 00:47:59,910 --> 00:48:02,220 At sa isang punto, pumunta kami ngayon sapat na sisimulan namin ang 992 00:48:02,220 --> 00:48:05,120 Sasapawan nito ang return address. 993 00:48:05,120 --> 00:48:08,310 Kaya minsan patungan namin ang return address, Nangangahulugan ito na kapag foo 994 00:48:08,310 --> 00:48:14,220 pagbalik, kami ay bumabalik sa kung saan man ang nakakahamak na gumagamit ay nagsasabi sa ito sa pamamagitan ng 995 00:48:14,220 --> 00:48:19,490 kahit anong halaga ito ipinasok, sa pamamagitan ng kahit anupamang mga character na ipinasok ng gumagamit. 996 00:48:19,490 --> 00:48:24,320 At kaya kung ang nakakahamak na gumagamit ay pagiging lalo na matalino, siya ay maaaring magkaroon ng ito 997 00:48:24,320 --> 00:48:29,255 bumalik sa isang lugar sa printDef pag-andar o sa isang lugar sa malloc 998 00:48:29,255 --> 00:48:31,830 function, lamang kahit saan di-makatwirang. 999 00:48:31,830 --> 00:48:38,420 >> Ngunit kahit na higit pa matalino ay kung ano kung mayroon siyang gumagamit ang bumalik sa dito mismo. 1000 00:48:38,420 --> 00:48:41,920 At pagkatapos mong simulan ang pagpapatupad sa ito bilang mga linya ng code. 1001 00:48:41,920 --> 00:48:46,610 Kaya sa puntong iyon, maaari ipasok ang user ano naman siya Nais ng sa rehiyon na ito. 1002 00:48:46,610 --> 00:48:52,210 At siya ay may kumpletong kontrol higit sa iyong mga programa. 1003 00:48:52,210 --> 00:48:53,460 Mga Tanong sa iyon? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Kaya sa susunod na tanong ay kumpleto na ang reimplementation ng foo sa paraang 1006 00:49:00,970 --> 00:49:02,620 na hindi na ito mahina laban. 1007 00:49:02,620 --> 00:49:03,870 >> Kaya mayroong ilang mga paraan maaaring nagawa mo na ito. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Mayroon pa kaming c lamang pagiging ng haba 12. 1010 00:49:13,330 --> 00:49:16,480 Maaaring nagbago ka ito bilang bahagi ng iyong solusyon. 1011 00:49:16,480 --> 00:49:18,930 Nagdagdag din kami ng isang tseke upang gumawa ng sigurado bar ay hindi null. 1012 00:49:18,930 --> 00:49:24,460 Kahit na hindi mo kailangan na para sa buong credit. 1013 00:49:24,460 --> 00:49:27,690 Kaya kami muna ng pagsuri sa string haba ng bar. 1014 00:49:27,690 --> 00:49:31,650 Kung ito ay mas malaki kaysa sa 12, pagkatapos ay huwag aktwal na gawin ang mga kopya. 1015 00:49:31,650 --> 00:49:33,010 Kaya iyon ang isang paraan ng pag-aayos nito. 1016 00:49:33,010 --> 00:49:36,750 >> Ang isa pang paraan ng pag-aayos ng ito ay sa halip ng pagkakaroon c maging ng haba 12 lamang, mayroon itong 1017 00:49:36,750 --> 00:49:39,310 maging ng haba strlen (bar). 1018 00:49:39,310 --> 00:49:43,370 Ang isa pang paraan ng pag-aayos ng ito ay upang bumalik talaga lang. 1019 00:49:43,370 --> 00:49:46,690 Kaya kung lang mo ay nakuha mapupuksa ang lahat ng ito, kung lamang sa iyo ay tinanggal lahat 1020 00:49:46,690 --> 00:49:51,830 linya ng code, na maaaring nakuha mo buong credit, dahil ito function na 1021 00:49:51,830 --> 00:49:54,150 ay hindi aktwal na makamit kahit ano. 1022 00:49:54,150 --> 00:49:57,650 Ito ay pagkopya sa command line argumento sa ilang mga array sa 1023 00:49:57,650 --> 00:49:59,960 nito lokal na stack na frame. 1024 00:49:59,960 --> 00:50:01,310 At pagkatapos ay ang bagay ay bumabalik. 1025 00:50:01,310 --> 00:50:04,020 At ano naman ito nagagawa ay nawala. 1026 00:50:04,020 --> 00:50:09,740 Kaya return ay isang sapat na rin paraan ng pagkuha ng buong credit. 1027 00:50:09,740 --> 00:50:13,425 >> David J. MALAN: Hindi masyadong ang espiritu ng ang tanong ngunit katanggap-tanggap ayon sa mga 1028 00:50:13,425 --> 00:50:15,580 spec gayunman. 1029 00:50:15,580 --> 00:50:18,260 >> Rob BOWDEN: Mga tanong sa anuman sa mga iyon? 1030 00:50:18,260 --> 00:50:22,270 Ang isang bagay na hindi bababa sa kinakailangan upang pa kino-compile ang code. 1031 00:50:22,270 --> 00:50:24,810 Kaya kahit na technically kayo ay hindi maaaring masaktan kung ang iyong code ay hindi 1032 00:50:24,810 --> 00:50:29,130 sumulat ng libro, hindi kami tumatanggap ng iyon. 1033 00:50:29,130 --> 00:50:31,350 Walang mga tanong? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> David J. MALAN: Nais mo upang sabihin sa pamagat na ito? 1036 00:50:34,580 --> 00:50:37,230 >> Rob BOWDEN: Hindi. 1037 00:50:37,230 --> 00:50:40,470 >> David J. MALAN: Kaya sa isang ito, ito ay alinman sa mabuting balita o masamang balita. 1038 00:50:40,470 --> 00:50:43,870 Ito ay literal ang parehong problema bilang unang pagsusulit. 1039 00:50:43,870 --> 00:50:46,140 At ito ay halos pareho problema bilang pset1. 1040 00:50:46,140 --> 00:50:49,980 Ngunit sadyang ito ay pinasimple upang maging ng isang mas simpleng pyramid, isa na maaaring maging 1041 00:50:49,980 --> 00:50:52,330 Nalutas na may bahagyang mas simple iteration. 1042 00:50:52,330 --> 00:50:55,680 At talaga, kung ano tayo ay nakakakuha sa dito ay hindi kaya magkano ang logic, 1043 00:50:55,680 --> 00:50:58,100 dahil marahil, sa pamamagitan ng puntong ito, ikaw ay higit pang mga kumportableng kaysa ikaw ay 1044 00:50:58,100 --> 00:51:01,850 sa linggo ang isa ay may para sa mga loop o bakit loop, pero talagang mang-ulol-hatiin na 1045 00:51:01,850 --> 00:51:04,790 ikaw ay isang maliit na komportable na sa paniwala na PHP ay hindi tungkol sa kung ano lamang 1046 00:51:04,790 --> 00:51:05,290 programming. 1047 00:51:05,290 --> 00:51:07,820 Talaga Ito ay maaaring magamit bilang isang wika sumulat ng linya mga programa ng command. 1048 00:51:07,820 --> 00:51:10,060 >> At sa katunayan, iyon ang kung ano ang aming sinusubukan upang gumuhit ng iyong pansin sa. 1049 00:51:10,060 --> 00:51:12,060 Ito ay isang programa command line PHP. 1050 00:51:12,060 --> 00:51:16,690 Kaya C code dito, habang tama sa C, hindi itama para sa PHP. 1051 00:51:16,690 --> 00:51:17,940 Ngunit ang code talaga ay pareho. 1052 00:51:17,940 --> 00:51:21,720 Kung ihambing mo ang mga solusyon para sa Pagsusulit 0 laban sa Pagsusulit 1, makikita mo na 1053 00:51:21,720 --> 00:51:25,630 ito ay halos magkapareho, maliban sa ang ilang mga palatandaan dollar at para sa mga 1054 00:51:25,630 --> 00:51:27,250 kawalan ng isang uri ng data. 1055 00:51:27,250 --> 00:51:31,720 Sa partikular, kung tinitingnan namin ang dito, makikita mo na umulit namin, sa ganitong 1056 00:51:31,720 --> 00:51:33,730 kaso, mula 1 up sa pamamagitan ng 7. 1057 00:51:33,730 --> 00:51:34,910 >> Na namin ma-tapos na ito 0 index. 1058 00:51:34,910 --> 00:51:37,320 Ngunit minsan, sa tingin ko ito lamang sa itak mas madali mag-isip tungkol sa mga bagay 1059 00:51:37,320 --> 00:51:38,200 1-7. 1060 00:51:38,200 --> 00:51:40,300 Kung nais mong isang bloke, pagkatapos ng dalawang bloke, pagkatapos ay tatlo, pagkatapos ay 1061 00:51:40,300 --> 00:51:41,770 tuldok, tuldok, dot pitong. 1062 00:51:41,770 --> 00:51:45,960 J namin ini-initialize sa 1 at pagkatapos ng pagbibilang sa hanggang sa i. 1063 00:51:45,960 --> 00:51:48,150 At lahat ng bagay dito ay kung hindi man magkapareho. 1064 00:51:48,150 --> 00:51:49,790 Ngunit karapat-dapat sa tala ay dalawang bagay. 1065 00:51:49,790 --> 00:51:53,230 Bigyan ka namin ng mga dalawang linya, una ito isa, goofily pinangalanan bilang isang shebang 1066 00:51:53,230 --> 00:51:54,560 para sa matalim putok. 1067 00:51:54,560 --> 00:51:58,770 At na tumutukoy lamang sa landas, ang folder, kung saan ang isang programa ay maaaring maging 1068 00:51:58,770 --> 00:52:02,160 nalaman na gusto mong gamitin upang bigyang-kahulugan ang file na ito. 1069 00:52:02,160 --> 00:52:04,710 >> At pagkatapos ay ang linya matapos na, ng Siyempre, nangangahulugan ipasok ang mode PHP. 1070 00:52:04,710 --> 00:52:07,740 At ang mga linya sa ibaba napaka Nangangahulugan mode exit na PHP. 1071 00:52:07,740 --> 00:52:09,740 At ito ay gumagana, sa pangkalahatan, may kahulugan ng mga wika. 1072 00:52:09,740 --> 00:52:14,370 Ito ay uri ng nakakainis na kung sumulat ka ng isang programa sa isang file na tinatawag foo.php. 1073 00:52:14,370 --> 00:52:17,320 At pagkatapos ang iyong mga gumagamit ay may sa makatarungan tandaan, OK, upang patakbuhin ang program na ito, ako 1074 00:52:17,320 --> 00:52:22,320 Mayroon i-type ang "php space foo.php." Uri ng mga nakakainis na kung wala pang tao. 1075 00:52:22,320 --> 00:52:25,270 At ito rin ay nagpapakita na ang iyong mga programa ay nakasulat sa PHP, na kung saan ay hindi lahat 1076 00:52:25,270 --> 00:52:27,060 na pagbibigay para sa user. 1077 00:52:27,060 --> 00:52:30,100 >> Kaya maaari mong alisin ang. Php nang sama-sama isipin mula sa panayam. 1078 00:52:30,100 --> 00:52:35,690 At maaari mong talagang gawin. / Foo kung na iyong chmodded ito sa pamamagitan ng pagpapadali 1079 00:52:35,690 --> 00:52:36,500 executable. 1080 00:52:36,500 --> 00:52:39,630 Kaya sana ay tapos chmod isang + x foo iyon. 1081 00:52:39,630 --> 00:52:41,460 At kung mong idagdag din ang shebang dito. 1082 00:52:41,460 --> 00:52:45,320 Ngunit talaga ito, ang problema ay nakukuha sa nagpi-print out ng isang bagay na katulad nito. 1083 00:52:45,320 --> 00:52:51,100 Walang HTML, walang C-code ay tiyak na, ilan lang na PHP. 1084 00:52:51,100 --> 00:52:54,100 Kaya Milo pagkatapos ay ibinalik sa problema 25. 1085 00:52:54,100 --> 00:52:58,050 At sa 25, kung saan bibigyan ka ng mga sumusunod balangkas code, na noon ay isang 1086 00:52:58,050 --> 00:52:59,730 medyo simple web page. 1087 00:52:59,730 --> 00:53:04,230 At ang makatas bahagi ng HTML-matalino ay down dito, kung saan mayroon sa loob ng katawan namin 1088 00:53:04,230 --> 00:53:09,160 ng isang form na may mga natatanging ID ng input sa loob ng na kung saan ay dalawang input, isa 1089 00:53:09,160 --> 00:53:11,950 may isang ideya ng pangalan, isa may isang ideya ng pindutan. 1090 00:53:11,950 --> 00:53:14,240 >> Ang unang naging uri ng teksto, ang pangalawang uri ng isumite. 1091 00:53:14,240 --> 00:53:16,930 At kaya nagbigay kami sa iyo, talaga, nang higit pa sangkap kaysa sa iyo na kailangan, kaya lamang 1092 00:53:16,930 --> 00:53:19,230 ka guys ay nagkaroon ng mga pagpipilian na kung saan upang malutas ang problemang ito. 1093 00:53:19,230 --> 00:53:21,130 Hindi mo na mahigpit na kailangan lahat ng mga ID. 1094 00:53:21,130 --> 00:53:23,580 Ngunit ito ay nagbibigay-daan sa iyo upang malutas ito sa iba't ibang paraan. 1095 00:53:23,580 --> 00:53:27,050 At hanggang sa tuktok, napansin na ang ang layunin ay upang palitawin ang 1096 00:53:27,050 --> 00:53:27,960 isang window na tulad nito - 1097 00:53:27,960 --> 00:53:28,780 Kumusta, Milo! - 1098 00:53:28,780 --> 00:53:31,270 mag-pop up sa browser gamit ang sobrang simple, kung 1099 00:53:31,270 --> 00:53:33,190 hindi mainit ang ulo, function na alerto. 1100 00:53:33,190 --> 00:53:37,480 At kaya, sa huli, boils down na ito conceptually upang kahit papaano ay nakikinig para sa 1101 00:53:37,480 --> 00:53:41,290 mga pagsusumite ng form ng client-side , Hindi ang server-side, kahit paano 1102 00:53:41,290 --> 00:53:45,640 pagtugon sa pagsusumite na sa pamamagitan ng daklot ang halaga na nai-type ng gumagamit ang 1103 00:53:45,640 --> 00:53:50,120 in sa patlang na Pangalan, at pagkatapos ay pagpapakita ng mga ito sa katawan ng isang alerto. 1104 00:53:50,120 --> 00:53:53,460 >> Kaya isang paraan na maaari mong gawin ito ay may jQuery, na kamukha ng kaunti 1105 00:53:53,460 --> 00:53:56,880 syntactically nakalilito sa unang. 1106 00:53:56,880 --> 00:54:00,760 Maaari mong gawin ito gamit ang purong DOM code - document.getelement sa pamamagitan ng ID. 1107 00:54:00,760 --> 00:54:02,530 Ngunit ipaalam sa tumagal ng isang pagtingin sa bersyong ito. 1108 00:54:02,530 --> 00:54:05,110 Mayroon akong isang pares ng mga mahalagang mga linya unang. 1109 00:54:05,110 --> 00:54:09,460 Kaya isa, mayroon kaming ang linyang ito, na kung saan ay magkapareho sa kung ano ang maaaring na nakita mo 1110 00:54:09,460 --> 00:54:13,830 sa, naniniwala ako, form2.html mula sa klase sa linggo 9. 1111 00:54:13,830 --> 00:54:16,960 At ito ay sinasabi lang, gawin ang sumusunod na code kapag 1112 00:54:16,960 --> 00:54:18,430 ang dokumento ay handa na. 1113 00:54:18,430 --> 00:54:21,770 Ang pagiging mahalaga dahil lamang Mga HTML na pahina ay read tuktok upang 1114 00:54:21,770 --> 00:54:23,280 ibaba, kaliwa papuntang kanan. 1115 00:54:23,280 --> 00:54:27,910 >> At samakatuwid, kung susubukan mong gawin isang bagay sa code dito sa ilang mga DOM 1116 00:54:27,910 --> 00:54:31,560 elemento, ang ilang mga HTML tag, na kung pababa dito, ninyo ito ginagawa masyadong lalong madaling panahon, 1117 00:54:31,560 --> 00:54:34,220 dahil ito ay hindi kahit na Na-basahin sa memorya. 1118 00:54:34,220 --> 00:54:37,740 Kaya sa pamamagitan ng sinasabi ito document.ready linya, sinasabi na namin, 1119 00:54:37,740 --> 00:54:39,040 narito ang ilang code, browser. 1120 00:54:39,040 --> 00:54:42,440 Ngunit huwag mag-execute ito hanggang ang buong dokumento ay handa na, iyon ay ang DOM 1121 00:54:42,440 --> 00:54:44,320 puno umiiral sa memorya. 1122 00:54:44,320 --> 00:54:47,110 Isa na ito ay isang kaunti pa prangka, kung syntactically isang 1123 00:54:47,110 --> 00:54:51,890 bit ibang, kung saan makakakuha ako sinasabi, mang-agaw ang HTML element na kung saan ang mga natatanging 1124 00:54:51,890 --> 00:54:53,560 identifier ay input. 1125 00:54:53,560 --> 00:54:56,220 Iyon ay kung ano ang hash tag Tinutukoy, ang mga natatanging ID. 1126 00:54:56,220 --> 00:54:58,070 At pagkatapos ay ako sa pagtawag. Isumite. 1127 00:54:58,070 --> 00:55:01,660 >> Kaya. Isumite dito ay isang function, kung hindi man Kilala bilang isang paraan, na 1128 00:55:01,660 --> 00:55:05,850 sa loob ng bagay na sa mga kaliwete gilid doon na hindi ako nag-i-highlight. 1129 00:55:05,850 --> 00:55:08,990 Kaya kung sa tingin mo ng input bilang isang bagay na sa memorya - at sa katunayan ito ay. 1130 00:55:08,990 --> 00:55:10,440 Ito ay isang node sa isang puno - 1131 00:55:10,440 --> 00:55:16,580 . Isumite ang paraan kapag ang form na ito sa ang ID na ito ay isinumite, gawin 1132 00:55:16,580 --> 00:55:17,700 ang sumusunod na code. 1133 00:55:17,700 --> 00:55:20,290 Wala akong pakialam kung ano ang pangalan ng function ay ako e-execute. 1134 00:55:20,290 --> 00:55:23,760 Kaya dito ko ginagamit, tulad ng dati, kung ano ang na tinatawag na ang lambda function na o isang 1135 00:55:23,760 --> 00:55:24,720 anonymous na function. 1136 00:55:24,720 --> 00:55:27,640 Ito ay hindi sa lahat intellectually kagiliw-giliw na bukod sa ito ay walang pangalan, 1137 00:55:27,640 --> 00:55:30,220 na kung saan ay pinong kung ikaw ay lamang kailanman pagpunta sa tumawag ito nang isang beses. 1138 00:55:30,220 --> 00:55:34,490 At sa loob doon talaga ako mahawakan ang pagsusumite ng form. 1139 00:55:34,490 --> 00:55:36,810 Ako unang magpahayag ng isang variable tinatawag na halaga. 1140 00:55:36,810 --> 00:55:40,610 At pagkatapos ay kung ano ang epekto ng mga ito naka-highlight na bahagi dito ngayon? 1141 00:55:40,610 --> 00:55:44,755 Ano ang ibig na gawin sa isang mataas na antas para sa akin? 1142 00:55:44,755 --> 00:55:48,539 >> Madla: Ito ay nakakakuha ng halaga na ang May ginawang gumagamit hindi sa HTML sa ibaba. 1143 00:55:48,539 --> 00:55:50,920 Ito ay makakakuha ng ID na iyon at pagkatapos ay nakakahanap ng mga halaga ng mga ito. 1144 00:55:50,920 --> 00:55:51,590 >> David J. MALAN: Mismong. 1145 00:55:51,590 --> 00:55:54,300 Ito grabs ang node, na ang natatanging identifier ay pangalan. 1146 00:55:54,300 --> 00:55:56,900 Ito ay nakakakuha ng halaga doon, na ay, siguro, kung ano ang user 1147 00:55:56,900 --> 00:55:58,190 nai-type sa kanya o ang kanyang sarili. 1148 00:55:58,190 --> 00:56:01,020 At pagkatapos ay nag-iimbak ito na sa variable na tinatawag na halaga. 1149 00:56:01,020 --> 00:56:03,720 Bilang isang bukod, maaari kang magkaroon din tapos ito medyo naiiba. 1150 00:56:03,720 --> 00:56:09,250 Lahat-lahat katanggap-tanggap sa pamamagitan ng paggawa ng isang bagay ay makakakuha ng kasinungalingan var halaga 1151 00:56:09,250 --> 00:56:10,500 document.getElementById. 1152 00:56:10,500 --> 00:56:12,860 1153 00:56:12,860 --> 00:56:15,460 At ito ang dahilan kung bakit ito ay isang maliit na nakakapagod na hindi gumagamit ng jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Pangalan" value.. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Kaya lubos na katanggap-tanggap. 1157 00:56:19,620 --> 00:56:22,770 Iba't ibang mga paraan upang magawa ito. jQuery lamang may gawi na maging mas maikli at malinaw at ng kaunti 1158 00:56:22,770 --> 00:56:25,230 Talagang mas sikat kabilang sa mga programmer. 1159 00:56:25,230 --> 00:56:27,590 >> Ngayon, ako paggawa ng isang bit ng isang katinuan suriin, dahil sa mga problema 1160 00:56:27,590 --> 00:56:30,820 pahayag tahasan naming sinabi, kung ang user ay hindi pa nai-type ang kaniyang 1161 00:56:30,820 --> 00:56:32,580 pangalanan, huwag ipakita ang isang alerto. 1162 00:56:32,580 --> 00:56:35,390 Ngunit maaari mong suriin para sa na, sa pamamagitan lamang pagsusuri para sa mga walang laman na string para sa isang 1163 00:56:35,390 --> 00:56:37,850 quote-magpanipi kung mayroong wala talaga doon. 1164 00:56:37,850 --> 00:56:40,880 Ngunit kung ito ay hindi katumbas ng quote-magpanipi, Gusto kong tumawag sa mga alerto. 1165 00:56:40,880 --> 00:56:45,610 At ang mga kagiliw-giliw na bahagi dito ay na ginagamit namin ang plus operator, na 1166 00:56:45,610 --> 00:56:48,130 ginagawa kung ano sa JavaScript? 1167 00:56:48,130 --> 00:56:48,740 Pagdugtungin. 1168 00:56:48,740 --> 00:56:50,690 Kaya ito ay tulad ng PHPs tuldok operator. 1169 00:56:50,690 --> 00:56:52,820 Parehong ideya, bahagyang naiiba syntax. 1170 00:56:52,820 --> 00:56:55,280 At Lumilikha ako lamang ang string na na nakita mo sa shot screen - 1171 00:56:55,280 --> 00:56:57,750 Kamusta, sa gayon. 1172 00:56:57,750 --> 00:56:59,200 >> At pagkatapos ay ang huling detalye ay na ito. 1173 00:56:59,200 --> 00:57:04,970 Bakit bumalik ako ng hindi totoo sa loob ng anonymous function na ito? 1174 00:57:04,970 --> 00:57:07,420 >> Madla: Walang halaga. 1175 00:57:07,420 --> 00:57:09,380 Inilagay mo ito sa form na ito. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 Ito lang ang sabi, kung halaga ay hindi katumbas ng blangko, pagkatapos ay gawin ito. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Nagkaroon ng blangko sa pagsusumite iyon. 1180 00:57:20,940 --> 00:57:21,170 >> David J. MALAN: OK. 1181 00:57:21,170 --> 00:57:21,640 Mag-ingat bagaman. 1182 00:57:21,640 --> 00:57:22,830 Walang sinuman ang dito. 1183 00:57:22,830 --> 00:57:25,510 At na return false ay nasa labas ng kung kundisyon. 1184 00:57:25,510 --> 00:57:29,470 Kaya ito na naka-highlight linya, bumalik hindi totoo, executes kahit na ano kapag 1185 00:57:29,470 --> 00:57:32,310 ang form ay isinumite. 1186 00:57:32,310 --> 00:57:36,810 Ano ang bumabalik na hindi totoo sa loob ng ito handler ng kaganapan, pati na ang tawag dito, 1187 00:57:36,810 --> 00:57:38,450 ang kaganapan na pinag-uusapan pagiging pagsusumite? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> Madla: Dahil ito mangyayari lamang nang isang beses. 1190 00:57:44,470 --> 00:57:45,320 >> David J. MALAN: mangyayari lamang nang isang beses. 1191 00:57:45,320 --> 00:57:46,821 Hindi masyadong. 1192 00:57:46,821 --> 00:57:47,292 Oo? 1193 00:57:47,292 --> 00:57:50,589 >> Madla: Pinipigilan nito ang form na ito mula sa pagsusumite sa default na pag-uugali, 1194 00:57:50,589 --> 00:57:52,480 na kung saan ay gagawa ng reload na pahina. 1195 00:57:52,480 --> 00:57:53,110 >> David J. MALAN: Mismong. 1196 00:57:53,110 --> 00:57:56,490 Kaya ako ingagkakargaang labis ko ng term na magsumite dito, dahil ako na nagsasabi, ang form ay 1197 00:57:56,490 --> 00:57:57,670 ini-sumite. 1198 00:57:57,670 --> 00:58:02,240 Ngunit bilang iminumungkahi sa iyo, ito ay talagang hindi Naisumite na sa totoo HTTP paraan. 1199 00:58:02,240 --> 00:58:06,870 Kapag nag-click ka sa Isumite, dahil sa aming onSubmit handler, kami ay intercepting 1200 00:58:06,870 --> 00:58:09,040 na ang pagsumite ng form upang magsalita. 1201 00:58:09,040 --> 00:58:11,290 Pagkatapos naming ginagawa ang aming bagay may JavaScript code. 1202 00:58:11,290 --> 00:58:14,070 Ngunit sadya ako bumabalik na hindi totoo, dahil kung ano ang hindi ko gustong mangyari ng 1203 00:58:14,070 --> 00:58:18,430 split second mamaya ay para sa buong anyo mismo na isinumite sa web 1204 00:58:18,430 --> 00:58:22,800 server gamit ang key ng mga pares ng halaga sa pamamagitan ng pagbabago ang URL upang maging isang bagay tulad ng 1205 00:58:22,800 --> 00:58:26,180 q = pusa o kahit anong ginawa namin, halimbawa, sa class. 1206 00:58:26,180 --> 00:58:29,640 Hindi ko nais na mangyari, dahil walang pakikinig server para sa 1207 00:58:29,640 --> 00:58:30,690 bumuo ng pagsusumite. 1208 00:58:30,690 --> 00:58:32,320 Pulos tapos na ito sa JavaScript code. 1209 00:58:32,320 --> 00:58:35,760 At iyon ang dahilan kung bakit ako ay hindi kahit na magkaroon ng isang pagkilos ipatungkol sa aking form, dahil ako 1210 00:58:35,760 --> 00:58:38,870 hindi nilayon para sa ito sa kailanman pumunta sa server. 1211 00:58:38,870 --> 00:58:40,780 >> Kaya ito ay ini-sumite. 1212 00:58:40,780 --> 00:58:44,340 Ngunit kami ay intercepting form na iyon ang pagsumite at pumipigil sa default 1213 00:58:44,340 --> 00:58:47,477 pag-uugali, na kung saan ay ang aktwal na pumunta lahat ng mga paraan sa server. 1214 00:58:47,477 --> 00:58:48,730 >> Madla: Kaya pagpapanatiling ito sa panig ng client. 1215 00:58:48,730 --> 00:58:49,780 >> David J. MALAN: Pagpapanatiling ito client-side. 1216 00:58:49,780 --> 00:58:51,030 Akmang-akma. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Susunod up ay aking oh MySQL. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> Rob BOWDEN: OK. 1221 00:59:00,430 --> 00:59:04,990 Kaya ito unang tanong ay sa pangkalahatan magaspang na para sa mga tao. 1222 00:59:04,990 --> 00:59:07,270 Kahit na ang mamaya mga nagpunta mas mahusay. 1223 00:59:07,270 --> 00:59:12,260 Kaya kayo ay nagkaroon ng upang piliin ang tamang data mga uri para sa parehong ng mga hanay na ito. 1224 00:59:12,260 --> 00:59:17,750 At pareho sa mga may ilang mga bagay tungkol sa kanila na 1225 00:59:17,750 --> 00:59:20,620 gawin ang mga pagpipilian mahirap. 1226 00:59:20,620 --> 00:59:24,430 Kaya int ay hindi isang wastong nagta-type para sa numero. 1227 00:59:24,430 --> 00:59:29,410 Ang dahilan sa pagiging isang 12-digit account numero, isang int ay hindi sapat na malaki upang 1228 00:59:29,410 --> 00:59:31,070 mag-imbak ng kabuuang mga digit. 1229 00:59:31,070 --> 00:59:36,570 Kaya isang wastong pagpili maaaring naging isang malaking int kung mangyari mong malaman na. 1230 00:59:36,570 --> 00:59:42,090 Sana naging Ang isa pang pagpipilian isang pansamantalang trabaho field ng haba 12. 1231 00:59:42,090 --> 00:59:44,560 Kaya ang alinman sa mga sana ay nagtrabaho. 1232 00:59:44,560 --> 00:59:46,100 Int gagawin hindi. 1233 00:59:46,100 --> 00:59:50,170 >> Ngayon, balanse, sa tingin pabalik sa pset7. 1234 00:59:50,170 --> 00:59:59,540 Kaya partikular na namin ginagamit decimal sa mag-imbak ang halaga ng pagbabahagi o - 1235 00:59:59,540 --> 01:00:00,550 >> David J. MALAN: Cash. 1236 01:00:00,550 --> 01:00:01,060 >> Rob BOWDEN: Cash. 1237 01:00:01,060 --> 01:00:05,710 Ginamit namin decimal upang i-imbak ang halaga ng cash na ang gumagamit ay kasalukuyang may. 1238 01:00:05,710 --> 01:00:10,950 Kaya ang dahilan ginagawa namin na dahil, tandaan, sa kamay. 1239 01:00:10,950 --> 01:00:12,480 Mayroong mga lumulutang na tuldok sa katumpakan. 1240 01:00:12,480 --> 01:00:18,200 Hindi ito maaaring tumpak iimbak ang cash mga halaga tulad namin gusto dito. 1241 01:00:18,200 --> 01:00:23,630 Kaya decimal ay magagawang tiyak na tindahan isang bagay sa, sabihin nating, dalawang decimal place. 1242 01:00:23,630 --> 01:00:27,630 Iyon ang dahilan kung bakit balanse, gusto namin ito upang maging decimal at hindi lumutang. 1243 01:00:27,630 --> 01:00:30,230 >> David J. MALAN: At din, masyadong, bagaman maaaring ito ay inalisan ng matalino sa iba pang mga 1244 01:00:30,230 --> 01:00:32,760 konteksto sa tingin, siguro ito ay isang pagkakataon para sa isang int. 1245 01:00:32,760 --> 01:00:34,420 Kukunin ko na lang subaybayan ang mga bagay sa pennies. 1246 01:00:34,420 --> 01:00:38,670 Dahil tahasan naming Nagpakita ang default na halaga ng pagiging 100.00, na 1247 01:00:38,670 --> 01:00:40,380 Nangangahulugan ito ay maaaring lamang sa isang int. 1248 01:00:40,380 --> 01:00:45,310 At isa pang kapitaganan masyadong may numero ay hindi ito sinadya 1249 01:00:45,310 --> 01:00:46,180 upang maging isang kahanga-hangang gawa tanong. 1250 01:00:46,180 --> 01:00:49,860 Ngunit isipin na isang int sa MySQL, tulad ng sa C, hindi bababa sa 1251 01:00:49,860 --> 01:00:51,440 appliance, ay 32-bit. 1252 01:00:51,440 --> 01:00:53,960 At kahit na hindi namin inaasahan mong eksaktong alam kung gaano karaming mga digit na 1253 01:00:53,960 --> 01:00:56,910 paraan, huwag isipin na ang pinakamalaking bilang maaari mong kumatawan potensyal na 1254 01:00:56,910 --> 01:01:00,710 may 32-bit na numero ay halos kung ano? 1255 01:01:00,710 --> 01:01:02,760 >> Ano ang numero ko palagi naming sabihin? 1256 01:01:02,760 --> 01:01:04,530 2 sa 32, na kung saan ay kung ano ang halos? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Hindi mo na kailangang malaman tumpak. 1259 01:01:08,780 --> 01:01:10,580 Pero halos ay kapaki-pakinabang sa buhay. 1260 01:01:10,580 --> 01:01:12,200 Ito ay humigit-kumulang 4000000000. 1261 01:01:12,200 --> 01:01:14,430 Kaya na sinabi namin na nang ilang beses. 1262 01:01:14,430 --> 01:01:16,360 Alam ko na ako ay sinabi na nang ilang beses. 1263 01:01:16,360 --> 01:01:17,670 At ito ay halos 4000000000. 1264 01:01:17,670 --> 01:01:19,710 At iyon, isang magandang panuntunan ng hinlalaki malaman. 1265 01:01:19,710 --> 01:01:21,880 Kung mayroon kang 8 bits, 256 ay ang magic number. 1266 01:01:21,880 --> 01:01:24,160 Kung mayroon kang 32 bits, 4 bilyon bigyan o tumagal. 1267 01:01:24,160 --> 01:01:27,140 Kaya kung sumulat ka lang pababa 4000000000, makikita mo na ito ay mas kaunti kaysa sa mga digit 1268 01:01:27,140 --> 01:01:30,970 12, na nangangahulugan na malinaw na hindi sapat expressiveness upang makuha ang isang 1269 01:01:30,970 --> 01:01:34,220 12-digit na numero ng account. 1270 01:01:34,220 --> 01:01:34,940 >> Rob BOWDEN: OK. 1271 01:01:34,940 --> 01:01:38,520 Kaya ang iba pang mga bago nagpunta mas mahusay. 1272 01:01:38,520 --> 01:01:40,900 Kaya ipagpalagay na ang bank nagpatupad ang isang $ 20 buwanang 1273 01:01:40,900 --> 01:01:42,400 maintenance fee sa lahat ng mga account. 1274 01:01:42,400 --> 01:01:45,506 Sa aling mga SQL query ng dati ang bank ibabawas $ 20 mula sa bawat count, kahit na 1275 01:01:45,506 --> 01:01:47,520 Mga resulta ng ito sa ilang mga negatibong balanse? 1276 01:01:47,520 --> 01:01:50,380 Kaya talaga, may mga apat pangunahing uri ng mga query - 1277 01:01:50,380 --> 01:01:52,840 isingit, piliin, i-update, at tanggalin. 1278 01:01:52,840 --> 01:01:56,080 Kaya ano ang tingin namin kami ay pagpunta sa gamitin dito? 1279 01:01:56,080 --> 01:01:57,000 I-update. 1280 01:01:57,000 --> 01:01:58,260 >> Kaya ipaalam sa tumagal ng isang hitsura. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Kaya dito naming ina-update. 1283 01:02:05,870 --> 01:02:09,900 Ano talahanayan ay ina-update namin ang mga account? 1284 01:02:09,900 --> 01:02:11,670 Kaya pag-update ng account. 1285 01:02:11,670 --> 01:02:15,390 At pagkatapos ay ang syntax sabi, kung ano sa mga account ay ina-update namin? 1286 01:02:15,390 --> 01:02:19,520 Well, kami ay pagtatakda ng balanse katumbas ng kasalukuyang halaga ng balanse minus 20. 1287 01:02:19,520 --> 01:02:22,860 Kaya Maa-update ito sa lahat ng mga hilera ng mga account, ng pagbabawas 1288 01:02:22,860 --> 01:02:26,250 $ 20 mula sa balanse. 1289 01:02:26,250 --> 01:02:29,260 >> David J. MALAN: Ang isang karaniwang pagkakamali dito, kahit minsan forgave namin ito, 1290 01:02:29,260 --> 01:02:32,990 ay ang aktwal na mayroon dito code na PHP pagtawag sa function na query o paglalagay 1291 01:02:32,990 --> 01:02:35,460 quote sa palibot ng lahat ng bagay na ay hindi kailangang maging doon. 1292 01:02:35,460 --> 01:02:39,780 >> Rob BOWDEN: Tandaan na ang MySQL ay isang hiwalay na wika mula sa PHP. 1293 01:02:39,780 --> 01:02:42,410 Mangyari namin na sumusulat MySQL sa PHP. 1294 01:02:42,410 --> 01:02:46,180 At PHP ay pagkatapos ipadala ito sa ibabaw ng mga MySQL server. 1295 01:02:46,180 --> 01:02:51,120 Ngunit hindi mo kailangang PHP upang makipag-ugnayan sa isang MySQL server. 1296 01:02:51,120 --> 01:02:51,730 >> David J. MALAN: Mismong. 1297 01:02:51,730 --> 01:02:54,240 Kaya walang mga variable na may mga palatandaan dollar Dapat na nasa kontekstong ito. 1298 01:02:54,240 --> 01:02:59,550 Maaari lamang itong gawin ang lahat ng mga matematika sa loob ng mismong database. 1299 01:02:59,550 --> 01:03:00,080 >> Rob BOWDEN: OK. 1300 01:03:00,080 --> 01:03:01,300 Kaya sa susunod na isa. 1301 01:03:01,300 --> 01:03:02,731 Sa susunod na isa ba ito? 1302 01:03:02,731 --> 01:03:03,210 Oo. 1303 01:03:03,210 --> 01:03:06,570 Kaya may ano SQL query ng dati ang bank mabawi ang mga numero ng account ng nito 1304 01:03:06,570 --> 01:03:09,300 pinakamayamang mga customer, ang mga may balanse mas malaki kaysa sa 1000? 1305 01:03:09,300 --> 01:03:13,280 Kaya kung alin sa mga apat na pangunahing uri kami makapupunta sa gusto dito? 1306 01:03:13,280 --> 01:03:14,430 Piliin. 1307 01:03:14,430 --> 01:03:16,650 Kaya gusto naming piliin. 1308 01:03:16,650 --> 01:03:17,610 Ano ang gusto naming piliin? 1309 01:03:17,610 --> 01:03:19,380 Ano haligi nais naming piliin? 1310 01:03:19,380 --> 01:03:20,970 Susubukan naming partikular, gusto upang piliin ang numero. 1311 01:03:20,970 --> 01:03:23,910 Ngunit kung sinabi mo star, namin Tinanggap din iyon. 1312 01:03:23,910 --> 01:03:25,820 >> Kaya piliin ang numero mula sa kung ano ang talahanayan? 1313 01:03:25,820 --> 01:03:26,640 Accounts. 1314 01:03:26,640 --> 01:03:28,370 At pagkatapos ay ang kundisyon gusto naming? 1315 01:03:28,370 --> 01:03:30,140 Saan balanse mas malaki kaysa sa 1000. 1316 01:03:30,140 --> 01:03:31,720 Tinanggap din kami ng mas malaki mababa sa o katumbas. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Huling isa. 1319 01:03:36,190 --> 01:03:42,940 Sa aling mga SQL query ng dati ang bank malapit, ibig sabihin, tanggalin ang bawat account na 1320 01:03:42,940 --> 01:03:44,480 May balanse ng $ 0? 1321 01:03:44,480 --> 01:03:47,620 Kaya kung aling sa apat na tayo pagpunta sa nais na gumamit? 1322 01:03:47,620 --> 01:03:48,320 Tanggalin. 1323 01:03:48,320 --> 01:03:50,180 Kaya ang syntax para sa iyon? 1324 01:03:50,180 --> 01:03:51,890 Tanggalin mula sa kung ano ang talahanayan? 1325 01:03:51,890 --> 01:03:53,550 Accounts. 1326 01:03:53,550 --> 01:03:55,790 At pagkatapos ay ang kundisyon kung saan gusto naming tanggalin - 1327 01:03:55,790 --> 01:03:57,280 kung saan ay katumbas ng balanse sa zero. 1328 01:03:57,280 --> 01:04:03,050 Kaya tanggalin ang lahat ng mga hilera mula sa mga account kung saan walang balanse. 1329 01:04:03,050 --> 01:04:04,300 Mga tanong sa anuman sa mga ito? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Gustong mag-lilinya? 1332 01:04:10,260 --> 01:04:11,200 >> David J. MALAN: gabay sa Queue. 1333 01:04:11,200 --> 01:04:17,110 Kaya sa isang ito, binigyan ka namin ng isang medyo pamilyar na istraktura na ginalugad namin ang isang 1334 01:04:17,110 --> 01:04:20,450 bit sa klase sa tabi ng structs, na kung saan ay isang data 1335 01:04:20,450 --> 01:04:21,910 may kaugnayan sa espiritu istraktura. 1336 01:04:21,910 --> 01:04:24,670 Ang pagkakaiba bagama't may queue na namin ay may upang kahit papaano ay matandaan kung sino 1337 01:04:24,670 --> 01:04:27,900 ay nasa harap ng pila, sa malalaking bahagi nang sa gayon ay maaari kaming magsagawa ng higit pang mga 1338 01:04:27,900 --> 01:04:30,530 mahusay na paggamit ng memory, hindi bababa sa kung kami ay gumagamit ng isang array. 1339 01:04:30,530 --> 01:04:35,460 >> Dahil pagpapabalik, kung kami ay may isang array, kung, halimbawa, ito ay ang harapan ng 1340 01:04:35,460 --> 01:04:38,470 ang queue, kung makakuha ako papunta sa pila dito, at pagkatapos ay isang tao ay nakakakuha sa linya 1341 01:04:38,470 --> 01:04:42,710 sa likod ng akin, sa likod ako, sa likod sa akin, at isang tao hakbang out ng linya, mo 1342 01:04:42,710 --> 01:04:45,930 dati, bilang Nakita namin ang ilan sa aming pantao boluntaryo sa klase, mayroon ng lahat 1343 01:04:45,930 --> 01:04:47,100 shift ganitong paraan. 1344 01:04:47,100 --> 01:04:50,880 Ngunit sa pangkalahatan, pagkakaroon ng lahat ng tao gawin isang bagay ay hindi ang pinakamabuting paggamit ng oras 1345 01:04:50,880 --> 01:04:54,600 sa isang programa, dahil ang ibig sabihin nito ang iyong algorithm ay tumatakbo sa kung ano 1346 01:04:54,600 --> 01:04:56,520 asymptotic oras running? 1347 01:04:56,520 --> 01:04:57,420 Ito ay linear. 1348 01:04:57,420 --> 01:04:59,600 >> At sa tingin ko katulad na uri ng bobo. 1349 01:04:59,600 --> 01:05:02,890 Kung ang susunod na tao sa linya ay ang susunod na tao kung sino ang dapat na pumunta sa 1350 01:05:02,890 --> 01:05:04,660 tindahan, sila hindi lahat ng mayroon upang ilipat nang magkakasama. 1351 01:05:04,660 --> 01:05:08,200 Hayaan lamang ang taong iyon ay plucked off kapag ang oras ay dumating, halimbawa. 1352 01:05:08,200 --> 01:05:09,870 Kaya maaaring mag-save kami ng kaunting oras doon. 1353 01:05:09,870 --> 01:05:14,840 At kaya bang gawin iyon bagaman, paraan na na ang pinuno ng queue o ang 1354 01:05:14,840 --> 01:05:18,060 harap ng queue ay pagpunta sa progressively ilipat ang mas malalim at mas malalim 1355 01:05:18,060 --> 01:05:23,340 sa array at kalaunan maaari talaga balutin sa paligid kung ginagamit namin ang isang 1356 01:05:23,340 --> 01:05:25,790 array upang i-imbak ang mga tao sa ganitong queue. 1357 01:05:25,790 --> 01:05:28,390 Kaya maaari mong halos isipin ang array bilang isang pabilog na data 1358 01:05:28,390 --> 01:05:29,880 istruktura sa na kahulugan. 1359 01:05:29,880 --> 01:05:33,970 >> Kaya mo kahit papaano mayroon upang masubaybayan ang laki ng ito o talagang sa dulo ng ito 1360 01:05:33,970 --> 01:05:36,250 at pagkatapos ay kung saan ang simula ng ito ay. 1361 01:05:36,250 --> 01:05:39,490 Kaya ipanukala namin na pinahahayag isa tulad queue, pagtawag 1362 01:05:39,490 --> 01:05:41,330 ito q, isang titik lamang. 1363 01:05:41,330 --> 01:05:44,570 Pagkatapos ipanukala namin na ang front maging nasimulan sa zero at na ang laki 1364 01:05:44,570 --> 01:05:45,470 ma-initialize sa zero. 1365 01:05:45,470 --> 01:05:47,770 >> Kaya ngayon, walang ay sa loob ng na queue. 1366 01:05:47,770 --> 01:05:50,910 At magtanong ka namin upang makumpleto ang pagpapatupad ng enqueue sa ibaba sa 1367 01:05:50,910 --> 01:05:55,250 tulad ng isang paraan na ang pag-andar nagdadagdag n sa sa dulo ng q at pagkatapos ay bumalik totoo. 1368 01:05:55,250 --> 01:05:58,690 Ngunit kung q ay puno na o negatibong, ang pag-andar ay dapat na sa halip bumalik hindi totoo. 1369 01:05:58,690 --> 01:06:01,060 At binigyan ka namin ng isang pares ng mga palagay. 1370 01:06:01,060 --> 01:06:04,320 Ngunit ang mga ito ay hindi talaga sa pagtakbo , umiiral ang may-katuturang bool lang iyon, 1371 01:06:04,320 --> 01:06:06,690 dahil, technically, bool hindi umiiral sa C maliban kung isinama mo ang isang 1372 01:06:06,690 --> 01:06:07,310 ang ilang mga file na header. 1373 01:06:07,310 --> 01:06:09,350 Kaya na tiyakin lamang na mayroong ay hindi ito isang kahanga-hangang gawa 1374 01:06:09,350 --> 01:06:10,940 tanong uri ng bagay. 1375 01:06:10,940 --> 01:06:16,280 >> Kaya enqueue, ipinanukala sa sample solusyon upang ipatupad tulad ng sumusunod. 1376 01:06:16,280 --> 01:06:20,420 Ang isa, muna naming suriin ang kadalian, low-hanging prutas. 1377 01:06:20,420 --> 01:06:23,820 Kung ang queue ay puno o ang bilang na na sinusubukan mong ipasok Mababa 1378 01:06:23,820 --> 01:06:26,380 sa zero, na sinabi namin sa pagtutukoy ng problema dapat 1379 01:06:26,380 --> 01:06:30,320 hindi papayagan, dahil gusto naming lamang hindi-negatibong halaga, pagkatapos ay dapat mong 1380 01:06:30,320 --> 01:06:31,640 bumalik lamang huwad na agad. 1381 01:06:31,640 --> 01:06:33,820 Kaya ang ilang mga relatibong madaling error-check. 1382 01:06:33,820 --> 01:06:38,720 Kung bagaman gusto mong idagdag na aktwal na numero, nagkaroon ka na gawin ang isang bit ng 1383 01:06:38,720 --> 01:06:39,440 pag-iisip dito. 1384 01:06:39,440 --> 01:06:41,330 At ito ay kung saan ito ay isang maliit na nakakainis sa pag-iisip, dahil mayroon kang upang 1385 01:06:41,330 --> 01:06:43,000 malaman kung paano panghawakan ang wraparound. 1386 01:06:43,000 --> 01:06:46,870 >> Ngunit ang mikrobyo ng ideya dito na ng interes sa amin ay na wraparound 1387 01:06:46,870 --> 01:06:51,480 madalas nagpapahiwatig Modular palatuusan at ang mod operator, ang porsiyento gilid, 1388 01:06:51,480 --> 01:06:55,140 kung saan maaari kang pumunta mula sa isang mas malaking halaga bumalik sa zero at pagkatapos ay i-isa at dalawa at 1389 01:06:55,140 --> 01:06:58,650 tatlong at pagkatapos ay bumalik sa paligid sa zero, isa at dalawa at tatlong at iba pa 1390 01:06:58,650 --> 01:06:59,380 muli at muli. 1391 01:06:59,380 --> 01:07:02,880 Kaya ang paraan nagmungkahi kami ng paggawa nito ay na nais naming i-index sa 1392 01:07:02,880 --> 01:07:05,850 array na tinatawag na mga numero kung saan ang aming integer nagsasabi ng totoo. 1393 01:07:05,850 --> 01:07:10,740 Ngunit upang makakuha ng doon, gusto muna naming gawin anuman ang laki ng queue pero 1394 01:07:10,740 --> 01:07:14,080 pagkatapos ay idagdag sa na kung ano ang harapan ng listahan ay. 1395 01:07:14,080 --> 01:07:17,880 At ang epekto ng na ay upang ilagay sa amin sa ang tamang posisyon sa queue at 1396 01:07:17,880 --> 01:07:20,970 hindi ipinapalagay na ang unang tao sa linya ay sa simula, na siya o 1397 01:07:20,970 --> 01:07:24,130 siya walang pasubali maaaring maging kung namin ay rin nagbabago lahat. 1398 01:07:24,130 --> 01:07:26,710 Ngunit ka lamang paglikha namin trabaho para sa ating mga sarili kung kinuha namin 1399 01:07:26,710 --> 01:07:27,800 na partikular na daanan. 1400 01:07:27,800 --> 01:07:29,330 >> Kaya maaari naming panatilihin ito medyo simple. 1401 01:07:29,330 --> 01:07:32,180 Kami kailangang tandaan na namin lamang Idinagdag sa isang int sa pila. 1402 01:07:32,180 --> 01:07:35,850 At pagkatapos ay bumalik lang namin totoo. 1403 01:07:35,850 --> 01:07:38,560 Samantala, sa dequeue, hiniling namin mong gawin ang sumusunod. 1404 01:07:38,560 --> 01:07:42,260 Ipatupad ito sa paraan na ito dequeues, na nag-aalis at babalik, 1405 01:07:42,260 --> 01:07:44,190 ang int sa harap ng queue. 1406 01:07:44,190 --> 01:07:46,410 Upang alisin ang mga int, suffices ito upang makalimutan ito. 1407 01:07:46,410 --> 01:07:47,650 Hindi mo kailangang i-override bit nito. 1408 01:07:47,650 --> 01:07:48,820 Kaya ito ay talagang doon pa rin. 1409 01:07:48,820 --> 01:07:51,930 Tulad ng data sa isang hard drive, kami ay hindi papansin ang lang ang katotohanan 1410 01:07:51,930 --> 01:07:52,970 na ito ay mayroon na ngayong. 1411 01:07:52,970 --> 01:07:55,520 At kung q ay walang laman, dapat namin sa halip bumalik negatibong 1. 1412 01:07:55,520 --> 01:07:56,750 Kaya ito nararamdaman di-makatwirang. 1413 01:07:56,750 --> 01:08:01,640 Bakit bumalik negatibong 1 sa halip ng hindi totoo? 1414 01:08:01,640 --> 01:08:02,620 Oo. 1415 01:08:02,620 --> 01:08:05,070 >> Madla: Q ay ang pag-iimbak mga positibong halaga. 1416 01:08:05,070 --> 01:08:10,950 Dahil imbak mo ang mga positibong halaga sa q, negatibong ay isang error. 1417 01:08:10,950 --> 01:08:11,510 >> David J. MALAN: OK, totoo. 1418 01:08:11,510 --> 01:08:14,850 Kaya dahil kami lamang ang pag-iimbak ng positibong mga halaga o zero, pagkatapos ito ay pinong upang 1419 01:08:14,850 --> 01:08:18,050 magbalik ng negatibong halaga bilang isang tanod halaga, isang espesyal na simbolo. 1420 01:08:18,050 --> 01:08:21,630 Ngunit ka muling pagsusulat ng kasaysayan doon, dahil ang dahilan lamang kami 1421 01:08:21,630 --> 01:08:25,890 bumabalik hindi-negatibong halaga ay dahil gusto naming 1422 01:08:25,890 --> 01:08:27,670 magkaroon ng isang halaga nagbabantay. 1423 01:08:27,670 --> 01:08:32,617 Kaya higit na partikular, kung bakit hindi lamang bumalik hindi totoo sa mga kaso ng mga error? 1424 01:08:32,617 --> 01:08:33,099 Oo. 1425 01:08:33,099 --> 01:08:35,510 >> Madla: mo na nabigo upang bumalik isang integer. 1426 01:08:35,510 --> 01:08:36,630 >> David J. MALAN: Mismong. 1427 01:08:36,630 --> 01:08:38,569 At ito ay kung saan nakakakuha C medyo constraining. 1428 01:08:38,569 --> 01:08:40,590 Kung ikaw ay nagsasabi ka ng pagpunta upang bumalik sa isang int, na kailangan 1429 01:08:40,590 --> 01:08:41,279 upang bumalik sa isang int. 1430 01:08:41,279 --> 01:08:43,689 Hindi ka maaaring makakuha ng magarbong at simulan ang pagbabalik isang bool o isang float o isang 1431 01:08:43,689 --> 01:08:45,040 string o isang bagay tulad na. 1432 01:08:45,040 --> 01:08:49,370 Ngayon, samantala, JavaScript at PHP at ilang iba pang mga wika maaari, sa katunayan, 1433 01:08:49,370 --> 01:08:51,310 mayroon kang bumabalik iba't ibang mga uri ng mga halaga. 1434 01:08:51,310 --> 01:08:54,819 At na aktwal na maaaring maging kapaki-pakinabang, kung saan maaari kang bumalik positibong ints, zero, 1435 01:08:54,819 --> 01:08:59,439 negatibong ints, o hindi totoo o null kahit na upang magpahiwatig ng error. 1436 01:08:59,439 --> 01:09:01,890 Ngunit wala kaming na masaklaw na karunungan sa C. 1437 01:09:01,890 --> 01:09:04,569 >> Kaya may dequeue, kung ano ang aming ipanukala gawin ay - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> Rob BOWDEN: Maaari kang bumalik hindi totoo. 1440 01:09:09,830 --> 01:09:13,189 Ito ay lamang na hindi totoo ay hash tukuyin ang hindi totoo sa zero. 1441 01:09:13,189 --> 01:09:16,000 Kaya't kung ikaw ay bumalik hindi totoo, bumabalik ka sa zero. 1442 01:09:16,000 --> 01:09:25,470 At zero ay isang wastong bagay sa aming queue, samantalang ang mga negatibong 1 ay hindi kung 1443 01:09:25,470 --> 01:09:27,000 maling nangyari sa mga negatibo 1. 1444 01:09:27,000 --> 01:09:29,972 Ngunit hindi ka dapat kahit na kailangang malaman iyon. 1445 01:09:29,972 --> 01:09:32,399 >> David J. MALAN: Iyon bakit hindi ko ito sinasabi. 1446 01:09:32,399 --> 01:09:36,450 >> Rob BOWDEN: Subalit hindi totoo na hindi na kayo makakabalik false. 1447 01:09:36,450 --> 01:09:37,700 >> David J. MALAN: Oo naman. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Kaya dequeue, mapapansin na aming tinatanggap walang bisa bilang argument nito. 1450 01:09:44,240 --> 01:09:45,479 At iyon ay dahil kami ay hindi pagpasa ng kahit ano in 1451 01:09:45,479 --> 01:09:48,359 Gusto lang namin upang alisin ang elemento ng sa harap ng queue. 1452 01:09:48,359 --> 01:09:49,819 Kaya kung paano maaari naming pumunta tungkol sa paggawa na ito? 1453 01:09:49,819 --> 01:09:51,290 Well, una, ni gawin ito ipaalam mabilis na check katinuan. 1454 01:09:51,290 --> 01:09:53,350 Kung ang laki queue 0, mayroong walang trabaho na gawin. 1455 01:09:53,350 --> 01:09:54,210 Bumalik negatibong 1. 1456 01:09:54,210 --> 01:09:54,800 Tapos na. 1457 01:09:54,800 --> 01:09:56,340 Kaya na ng ilang linya ng aking programa. 1458 01:09:56,340 --> 01:09:58,180 Kaya apat lang linya mananatiling. 1459 01:09:58,180 --> 01:10:01,310 >> Kaya dito nagpasya kong pagbawas ang laki. 1460 01:10:01,310 --> 01:10:04,620 At decrementing ang laki nang epektibo Nangangahulugan na ako forgetting 1461 01:10:04,620 --> 01:10:06,010 isang bagay ay nasa doon. 1462 01:10:06,010 --> 01:10:09,910 Ngunit mayroon din akong i-update kung saan sa harap ng mga numero ay. 1463 01:10:09,910 --> 01:10:11,620 Kaya upang gawin iyon, kailangan ko upang gawin ang dalawang bagay. 1464 01:10:11,620 --> 01:10:16,390 Kailangan ko munang i-matandaan kung ano ang bilang ay nasa harap ng pila, 1465 01:10:16,390 --> 01:10:17,860 dahil kailangan ko upang bumalik bagay na iyon. 1466 01:10:17,860 --> 01:10:20,910 Kaya hindi ko nais na sinasadyang kalimutan ang tungkol dito at pagkatapos patungan ito. 1467 01:10:20,910 --> 01:10:22,840 Lamang ako ng pagpunta sa tandaan sa isang int. 1468 01:10:22,840 --> 01:10:27,310 >> At ngayon, gusto kong i-update q.front na q.front 1. 1469 01:10:27,310 --> 01:10:30,070 Kaya kung ito ay ang unang tao sa linya, ngayon, gusto kong gawin plus 1 sa 1470 01:10:30,070 --> 01:10:31,930 ituro sa susunod na tao sa linya. 1471 01:10:31,930 --> 01:10:33,420 Ngunit mayroon akong upang mahawakan na wraparound. 1472 01:10:33,420 --> 01:10:37,270 At kung kapasidad ay isang pandaigdigang pare-pareho, na pupuntahan payagan ako upang tiyakin na 1473 01:10:37,270 --> 01:10:41,140 bilang ituro ako sa napaka huling tao sa linya, ang operasyon modulo ay magdadala ng 1474 01:10:41,140 --> 01:10:43,840 ako pabalik sa zero sa harap ng queue. 1475 01:10:43,840 --> 01:10:46,050 At na humahawak sa mga wraparound dito. 1476 01:10:46,050 --> 01:10:48,950 At pagkatapos ay magpatuloy ako upang bumalik n. 1477 01:10:48,950 --> 01:10:51,530 >> Ngayon, mahigpit na nagsasalita, ginawa ko hindi mayroon na idedeklara n. 1478 01:10:51,530 --> 01:10:53,880 Hindi ko kailangang mag-grab ito at mag-store ito pansamantalang, dahil ang halaga ay 1479 01:10:53,880 --> 01:10:54,740 pa rin doon. 1480 01:10:54,740 --> 01:10:57,490 Kaya maaari kong gawin lang sa tamang palatuusan upang ibalik ang dating ulo 1481 01:10:57,490 --> 01:10:58,450 ng queue. 1482 01:10:58,450 --> 01:11:01,850 Ngunit lamang nadama ko na ito ay mas malinaw upang aktwal na-grab ang int, ilagay ito 1483 01:11:01,850 --> 01:11:04,320 sa n, at pagkatapos ay bumalik na alang-alang sa kalinawan ng ngunit 1484 01:11:04,320 --> 01:11:05,735 hindi mahigpit na kinakailangan. 1485 01:11:05,735 --> 01:11:09,313 1486 01:11:09,313 --> 01:11:12,130 Psst. 1487 01:11:12,130 --> 01:11:13,410 Ang mga ito ang lahat ng mga nabibigkas sa aking ulo. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> Rob BOWDEN: Kaya unang tanong ay ang binary problema tree. 1490 01:11:19,110 --> 01:11:22,140 Kaya unang tanong ay, kami ay naibigay na ang mga numerong ito. 1491 01:11:22,140 --> 01:11:27,160 At gusto namin upang kahit papaano ay ipasok ang mga ito sa mga nodes tulad na ito ay isang 1492 01:11:27,160 --> 01:11:30,110 wastong binary paghahanap tree. 1493 01:11:30,110 --> 01:11:36,260 Kaya ang isang bagay upang tandaan tungkol sa binary paghahanap puno ay na ito ay hindi 1494 01:11:36,260 --> 01:11:39,800 lamang na ang mga bagay sa kaliwa Mababa at ang bagay na dapat 1495 01:11:39,800 --> 01:11:41,120 sa kanan ang mas mataas. 1496 01:11:41,120 --> 01:11:44,580 Kailangan itong maging na ang buong tree upang kaliwa ay mas mababa, at ang buong puno 1497 01:11:44,580 --> 01:11:45,740 sa kanan ang mas mataas. 1498 01:11:45,740 --> 01:11:55,260 >> Kaya kung ko bang ilagay ang 34 dito sa tuktok, at pagkatapos ay Naglagay ako ng 20 dito, kaya iyon ang wastong kaya 1499 01:11:55,260 --> 01:11:56,970 sa ngayon, dahil 34 up dito. 1500 01:11:56,970 --> 01:11:57,920 20 ay pagpunta sa kaliwa. 1501 01:11:57,920 --> 01:11:58,950 Kaya na mas mababa. 1502 01:11:58,950 --> 01:12:03,640 Ngunit hindi ko pagkatapos ay maaari ilagay 59 dito, dahil kahit na 59 ay nasa kanan ng 20, 1503 01:12:03,640 --> 01:12:06,140 ito ay sa kaliwa ng 34 pa rin. 1504 01:12:06,140 --> 01:12:10,760 Kaya may na hadlang sa isip, ang pinakamadaling paraan ng pag-solve marahil ito 1505 01:12:10,760 --> 01:12:14,330 problema ay ang uri lamang ng mga numerong ito - 1506 01:12:14,330 --> 01:12:18,720 kaya 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 At pagkatapos ay ipasok ang mga mula kaliwa papuntang kanan. 1508 01:12:21,640 --> 01:12:23,390 >> Kaya 20 na napupunta dito. 1509 01:12:23,390 --> 01:12:24,630 34 napupunta dito. 1510 01:12:24,630 --> 01:12:25,830 36 napupunta dito. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 At ka din sana may korte out kasama ilang i-plug in at napagtatanto, 1513 01:12:34,730 --> 01:12:38,830 oh, maghintay, wala akong sapat na mga numero upang punan ito sa paglipas dito. 1514 01:12:38,830 --> 01:12:42,170 Kaya kailangan kong reshift ano ang aking tala ruta ay magiging. 1515 01:12:42,170 --> 01:12:47,490 Ngunit mapansin na sa huling tatlong, kung mong basahin mula kaliwa hanggang kanan, ito ay nasa 1516 01:12:47,490 --> 01:12:48,740 pagtaas ng order. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Kaya ngayon, gusto naming magpahayag ng kung ano ang struct ay magiging para sa 1519 01:12:56,540 --> 01:12:58,300 mga node sa punong kahoy na ito. 1520 01:12:58,300 --> 01:13:02,720 Kaya kung ano ang kailangan namin sa isang binary puno? 1521 01:13:02,720 --> 01:13:05,830 Kaya mayroon kaming isang halaga ng uri int, kaya ang ilang mga halaga int. 1522 01:13:05,830 --> 01:13:07,220 Hindi ko alam kung ano ang tinatawag naming ito sa solusyon - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Kailangan namin ng isang pointer sa kaliwa anak at isang pointer sa kanan bata. 1525 01:13:13,570 --> 01:13:17,540 Kaya ito ay pagpunta sa ganito ang hitsura. 1526 01:13:17,540 --> 01:13:20,510 At talagang ito kailanman lilingon bago kapag sinabi ng doble na naka-link 1527 01:13:20,510 --> 01:13:25,090 bagay-bagay na listahan, kaya notice - 1528 01:13:25,090 --> 01:13:27,860 Pupunta ako sa mag-scroll ang lahat ng mga paraan bumalik down sa problema 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Kaya't mapapansin mukha itong kapareho ito, maliban mangyari lamang namin na tumawag sa mga 1531 01:13:36,390 --> 01:13:38,590 iba't ibang mga pangalan. 1532 01:13:38,590 --> 01:13:41,440 Mayroon pa kaming isang integer halaga at dalawang mga payo. 1533 01:13:41,440 --> 01:13:44,850 Ito ay lamang na sa halip ng pagpapagamot ng mga mga payo bilang ng pagturo sa susunod na bagay 1534 01:13:44,850 --> 01:13:47,955 at naunang bagay, kami ay pagpapagamot ng ang mga payo upang tumuro sa isang kaliwang anak 1535 01:13:47,955 --> 01:13:49,205 at kanang mga bata. 1536 01:13:49,205 --> 01:13:57,372 1537 01:13:57,372 --> 01:13:57,860 OK. 1538 01:13:57,860 --> 01:13:59,650 Kaya iyon ang aming struct node. 1539 01:13:59,650 --> 01:14:03,920 At ngayon, ang tanging pag-andar na kailangan namin upang ipatupad para ito ay tumawid, na 1540 01:14:03,920 --> 01:14:08,320 gusto naming pumunta sa ibabaw ng tree, pag-print out ang mga halaga ng puno sa pagkakasunud-sunod. 1541 01:14:08,320 --> 01:14:15,241 >> Kaya hinahanap dito, nais namin nais na i-print out 20, 34, 36, 52, 59, at 106. 1542 01:14:15,241 --> 01:14:17,970 Paano ko maisagawa namin iyon? 1543 01:14:17,970 --> 01:14:18,890 Kaya ito ay medyo katulad. 1544 01:14:18,890 --> 01:14:22,910 Kung nakita mo sa nakaraan eksaminasyon ang problema na nais mong i-print out 1545 01:14:22,910 --> 01:14:25,940 ang buong puno na may mga kuwit sa pagitan ng ang lahat ng bagay, ito ay aktwal na kahit na 1546 01:14:25,940 --> 01:14:27,320 mas madali kaysa sa na. 1547 01:14:27,320 --> 01:14:30,950 Kaya dito ay ang solusyon. 1548 01:14:30,950 --> 01:14:33,110 Ito ay makabuluhang mas madali kung ginawa mo ito recursively. 1549 01:14:33,110 --> 01:14:36,650 Hindi ko alam kung Tinangka sinuman upang gawin ito iteratively. 1550 01:14:36,650 --> 01:14:38,340 >> Ngunit una, mayroon kaming ang aming base kaso. 1551 01:14:38,340 --> 01:14:39,660 Paano kung ang ugat ay walang bisa? 1552 01:14:39,660 --> 01:14:40,610 Pagkatapos lang kami ng pagpunta upang bumalik. 1553 01:14:40,610 --> 01:14:42,300 Hindi namin nais na i-print ang kahit ano. 1554 01:14:42,300 --> 01:14:45,940 Iba Pa kami ng pagpunta sa pagtawid recursively pababa. 1555 01:14:45,940 --> 01:14:48,140 I-print ang buong kaliwang subtree. 1556 01:14:48,140 --> 01:14:51,440 Kaya mag-print ng lahat ng bagay mas kaunti kaysa sa aking kasalukuyang halaga. 1557 01:14:51,440 --> 01:14:53,930 At pagkatapos ay ako pagpunta sa i-print ang aking sarili. 1558 01:14:53,930 --> 01:14:57,310 At pagkatapos ay ako pagpunta sa recurse down na aking buong karapatan subtree, kaya ang lahat ng bagay 1559 01:14:57,310 --> 01:14:58,810 mas higit pa kaysa sa aking halaga. 1560 01:14:58,810 --> 01:15:03,870 At ito ay pagpunta sa i-print out ang lahat sa order. 1561 01:15:03,870 --> 01:15:05,860 Mga Tanong sa kung paano ito talaga accomplishes na? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> Madla: Mayroon akong tanong sa [hindi marinig]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> Rob BOWDEN: Kaya isang paraan ng papalapit anumang recursive problema ay ang sa tingin lamang 1566 01:15:23,550 --> 01:15:26,275 tungkol dito gusto mayroon kang mag-isip tungkol sa lahat ng mga kaso sulok. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Kaya isaalang-alang na nais naming i-print ang buong tree. 1569 01:15:38,110 --> 01:15:42,030 Kaya lahat kami ay pagpunta sa focus sa ay ang partikular na node - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 Ang recursive tawag, magpanggap namin mga lang gagana. 1572 01:15:47,420 --> 01:15:54,000 Kaya dito, ito recursive tawag sa tumawid, namin nang hindi kahit na pag-iisip 1573 01:15:54,000 --> 01:15:58,640 tungkol dito, traversing lamang sa kaliwa tatlo, isipin na mayroon ng mga Kopya 20 1574 01:15:58,640 --> 01:16:00,730 at 34 para sa amin. 1575 01:16:00,730 --> 01:16:03,350 At pagkatapos ay kapag kami kalaunan recursively tumawag sa pagtawid sa 1576 01:16:03,350 --> 01:16:07,890 kanan, na tama ang i-print 52, 59, at 106 para sa amin. 1577 01:16:07,890 --> 01:16:13,620 >> Kaya ibinigay na maaaring i-print ito 20, 34, at maaaring mag-print ang iba pang mga 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 lahat ng kailangan namin upang magawang gawin ay i-print kami mismo sa gitna ng iyon. 1579 01:16:17,180 --> 01:16:21,250 Kaya i-print out ang lahat bago sa amin. 1580 01:16:21,250 --> 01:16:27,710 I-print kami mismo, kaya ang kasalukuyang node sa pag-print 36, regular printf, at pagkatapos ay 1581 01:16:27,710 --> 01:16:31,170 i-print ang lahat pagkatapos sa amin. 1582 01:16:31,170 --> 01:16:32,730 >> David J. MALAN: Ito ay kung saan recursion ay makakakuha ng talagang magandang. 1583 01:16:32,730 --> 01:16:36,270 Ito ay ang mga kamangha-manghang talon ng pananampalataya kung saan gagawin mo ang tiniest bit ng trabaho. 1584 01:16:36,270 --> 01:16:38,460 At pagkatapos mong hayaan ang isang tao iba na ang bahala. 1585 01:16:38,460 --> 01:16:40,180 At may iba ay, ironically, mo. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Kaya para sa mga malubhang mga puntos ng brownies, kung kang mag-scroll pataas sa mga tanong - 1588 01:16:48,360 --> 01:16:50,530 >> Rob BOWDEN: Sa mga tanong? 1589 01:16:50,530 --> 01:16:53,490 >> David J. MALAN: At pababa ng kaunti sa ang mga numero, ang sinuman alam kung saan 1590 01:16:53,490 --> 01:16:55,190 ang mga numerong ito nanggaling? 1591 01:16:55,190 --> 01:16:56,610 >> Rob BOWDEN: Mayroon akong Literal na walang ideya. 1592 01:16:56,610 --> 01:16:59,794 >> David J. MALAN: Lumilitaw ang mga ito sa buong pagsusulit. 1593 01:16:59,794 --> 01:17:01,150 >> Madla: ba ang mga ito ang parehong numero? 1594 01:17:01,150 --> 01:17:01,910 >> David J. MALAN: Yaong mga numero. 1595 01:17:01,910 --> 01:17:03,260 Ang isang maliit na Easter itlog. 1596 01:17:03,260 --> 01:17:08,100 Kaya para sa mga mo ang panonood online sa bahay, kung maaari mong sabihin sa amin sa pamamagitan ng e-mail sa 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net kung ano ang kabuluhan sa mga umuulit na anim na mga numero ay 1598 01:17:12,680 --> 01:17:18,560 sa buong Pagsusulit 1, magkakaroon kami ng shower mo may mga kamangha-manghang pansin sa panghuling 1599 01:17:18,560 --> 01:17:21,610 magbigay ng panayam at ang stress ball. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Nice, madaya. 1602 01:17:27,790 --> 01:17:29,570 >> Rob BOWDEN: Anumang huling tanong tungkol sa anumang bagay sa pagsusulit? 1603 01:17:29,570 --> 01:17:32,608