1 00:00:00,000 --> 00:00:12,040 >> [MUSIC Playing] 2 00:00:12,040 --> 00:00:16,460 >> Kryetari 1: Në rregull, kjo është CS50, dhe kjo është fillimi i javës katër, 3 00:00:16,460 --> 00:00:20,420 dhe si ju mund të keni dëgjuar ose lexuar, bota është duke përfunduar. 4 00:00:20,420 --> 00:00:23,520 Duke shkuar të gjithë rreth internetit ka qenë e njohurive dhe vetëdijes 5 00:00:23,520 --> 00:00:27,100 e një bug në një program, a gjuhë programimi të quajtur Bash. 6 00:00:27,100 --> 00:00:32,729 Kjo është quajtur mrekullisht si Shellshock, ose derën Bash, 7 00:00:32,729 --> 00:00:35,485 por artikuj si këto nuk kanë qenë të rralla. 8 00:00:35,485 --> 00:00:38,807 Dhe në fakt, shumë prej tyre të sjellë kujtimet mbrapa e Heartbleed, 9 00:00:38,807 --> 00:00:41,640 të cilat ju mund të keni vënë re në shtypni përsëri këtë pranverë kaluar, e cila 10 00:00:41,640 --> 00:00:43,980 në mënyrë të ngjashme ishte mjaft dramatike. 11 00:00:43,980 --> 00:00:47,110 Tani e atyre prej jush këtu sot, sa prej jush kanë, 12 00:00:47,110 --> 00:00:50,330 edhe në qoftë se ju nuk e kuptoni se çfarë kjo është e gjitha në lidhje me, dëgjuar Shellshock? 13 00:00:50,330 --> 00:00:51,370 14 00:00:51,370 --> 00:00:54,245 Në rregull, dhe sa prej jush kanë kompjutera që janë të pambrojtur? 15 00:00:54,245 --> 00:00:55,680 16 00:00:55,680 --> 00:01:00,250 OK, nuk duhet të jetë shumë, shumë më tepër duart deri tani, për arsye ne do të shohim. 17 00:01:00,250 --> 00:01:02,580 >> Le të bëjmë një vështrim në atë që është vazhduar në media 18 00:01:02,580 --> 00:01:05,304 dhe pastaj të shpjegojë atë pak këtu për ne teknikisht. 19 00:01:05,304 --> 00:01:07,670 20 00:01:07,670 --> 00:01:11,250 >> Gjuha 2: Ekspertët e sigurisë kanë paralajmëroi se një e metë serioze mund 21 00:01:11,250 --> 00:01:15,650 të jetë gati për të ndikojë në qindra miliona e përdoruesve të internetit në botë. 22 00:01:15,650 --> 00:01:20,600 Pra, çfarë saktësisht është bug që ka qenë quajtur Shellshock, dhe çfarë e bën këtë? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 E pra, Shellshock është i njohur edhe si Bug Bash, software ajo shfrytëzon. 25 00:01:28,910 --> 00:01:33,230 Hakerët përdorin virusin për të scan pambrojtur Sistemet running Linux dhe Unix 26 00:01:33,230 --> 00:01:36,300 sistemet operative dhe më pas infektojnë ato. 27 00:01:36,300 --> 00:01:38,730 Bash është një shell command line. 28 00:01:38,730 --> 00:01:43,460 Kjo lejon përdoruesit çështje urdhëron për të nisur Programet dhe karakteristika brenda software 29 00:01:43,460 --> 00:01:45,250 nga shtypja në tekst. 30 00:01:45,250 --> 00:01:49,980 Është përdorur në mënyrë tipike nga programuesit, dhe nuk duhet të jetë e hapur për botën më të gjerë, 31 00:01:49,980 --> 00:01:51,590 pse Shellshock ndryshon se. 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> E pra, worringly, disa analistë paralajmërojnë se mund të jetë një kërcënim i madh, 34 00:01:57,910 --> 00:02:01,580 sepse Shellshock lejon plotë kontrollin e një makine të infektuar, 35 00:02:01,580 --> 00:02:06,030 ndërsa Heartbleed lejohet vetëm hakerat për të spiunuar në kompjuter. 36 00:02:06,030 --> 00:02:09,130 Është kaq serioze, është e është vlerësuar një 10 nga 10 37 00:02:09,130 --> 00:02:11,900 për peshën nga Kombëtare Baza e të dhënave dobësi. 38 00:02:11,900 --> 00:02:15,530 39 00:02:15,530 --> 00:02:20,015 2/3 e të gjithë serverat e internetit janë në rrezikut, duke përfshirë disa kompjuterat Mac. 40 00:02:20,015 --> 00:02:22,760 41 00:02:22,760 --> 00:02:25,600 Well, sigurohuni që ju të patch sistemet e tuaja tani. 42 00:02:25,600 --> 00:02:29,330 Çdokush pret një website running sistemet operative të prekur 43 00:02:29,330 --> 00:02:31,800 duhet të marrin masa sa më shpejt të jetë e mundur. 44 00:02:31,800 --> 00:02:35,390 Kushdo që mund të përballojë ajo duhet të duket të monitorimit dhe web zbatimin e tyre 45 00:02:35,390 --> 00:02:37,355 firewalls për të parë jashtë për ndonjë sulme. 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 Kryetari 3: Gjëja më e keqe që mund të ndodhë është 48 00:02:41,770 --> 00:02:45,080 që dikush do të shkruaj kodin që do të shkojnë automatikisht dhe skanim 49 00:02:45,080 --> 00:02:48,280 internetit dhe do të ndikojë në të gjitha këto kompjutera. 50 00:02:48,280 --> 00:02:50,710 Dhe një herë ata e bëjnë se, mirë, Gjëja më e keqe që mund të bëni 51 00:02:50,710 --> 00:02:53,300 është vetëm të fshini çdo gjë, ose mbyllur faqet poshtë. 52 00:02:53,300 --> 00:02:55,360 Pra, ne mund të shohim dëme nga kjo pikëpamje, 53 00:02:55,360 --> 00:02:58,300 ku ne do të kemi njerëz me qëllim të keq që vetëm të vendosë për të shkaktuar kërdi 54 00:02:58,300 --> 00:03:02,534 duke sjellë sisteme poshtë ose fshirjes fotografi, dhe gjëra të tilla si se. 55 00:03:02,534 --> 00:03:05,200 Gjuha 2: Disa thonë se kjo është një e më e vështirë për të matur 56 00:03:05,200 --> 00:03:08,080 bugs në vite, dhe ajo mund të duhen javë ose edhe 57 00:03:08,080 --> 00:03:10,820 muaj për të përcaktuar ndikimin e saj përfundimtar. 58 00:03:10,820 --> 00:03:12,180 59 00:03:12,180 --> 00:03:15,560 >> Kryetari 1: Pra, të gjithë e që është e vërtetë, por Funny gjë është, pothuajse të gjithë 60 00:03:15,560 --> 00:03:18,330 nga imazhet qe sapo e pa, me përjashtim të ndoshta tastierë, 61 00:03:18,330 --> 00:03:20,930 ka asgjë të bëjë me bug whatsoever. 62 00:03:20,930 --> 00:03:23,960 Serverat dhe telat dhe kështu me radhë, është e lidhur lloj tangenciale, 63 00:03:23,960 --> 00:03:27,410 por në thelb kjo është në fakt shumë e njohur se çfarë po ndodh këtu. 64 00:03:27,410 --> 00:03:30,050 Në fakt, më lejoni të shkoj në aplikim tonë CS50. 65 00:03:30,050 --> 00:03:32,910 Më lejoni të shkojnë përpara dhe të maksimizuar dritare terminali këtu. 66 00:03:32,910 --> 00:03:36,020 Dhe ju djema kanë përdorur këtë, ose versionin ngulitur tij, 67 00:03:36,020 --> 00:03:39,460 në gedit në mënyrë për të shkruar programe, shtypni komandat, dhe kështu me radhë, 68 00:03:39,460 --> 00:03:43,690 dhe kjo është në të vërtetë, dhe ka qenë për javë, Bash, B-A-S-H. 69 00:03:43,690 --> 00:03:46,890 Kjo është Bourne-përsëri shell, e cila është vetëm një mënyrë e sofistikuar për të thënë, 70 00:03:46,890 --> 00:03:50,220 ky është një program që ka një keq të shpejtë, në mënyrë efektive, 71 00:03:50,220 --> 00:03:51,970 që ulet aty duke pritur për të dhëna për ju. 72 00:03:51,970 --> 00:03:53,920 Dhe kjo është komanda line interface me anë të të cilat 73 00:03:53,920 --> 00:03:57,650 ju djema janë duke komandat dhe në fund të fundit hartimin dhe pastaj duke 74 00:03:57,650 --> 00:03:58,400 programe. 75 00:03:58,400 --> 00:04:01,320 >> Por bash edhe një programimit Gjuha në kuptimin e mëposhtme. 76 00:04:01,320 --> 00:04:05,460 Ju e dini se ka komandat si cd dhe ls dhe tingëllim dhe të tjerët, 77 00:04:05,460 --> 00:04:09,580 por ju mund të përcaktojë komandat tuaja duke zbatuar ato në Bash. 78 00:04:09,580 --> 00:04:11,420 Tani ne nuk do të shkojnë në hollësi të madhe 79 00:04:11,420 --> 00:04:16,089 si për të Bash gjuhë programimi, por e dini, për shembull, që në këtë moment, 80 00:04:16,089 --> 00:04:17,607 nuk ka komandë të quajtur "hello". 81 00:04:17,607 --> 00:04:19,440 Pra, ajo mund të gjendet në një nga këto paketa. 82 00:04:19,440 --> 00:04:20,856 Kjo nuk është instaluar në kompjuterin tim. 83 00:04:20,856 --> 00:04:21,870 Pyesni administratorin tuaj. 84 00:04:21,870 --> 00:04:26,030 Por në qoftë se unë dua që të ketë një program quajtur "hello" në Bash ose në ftim tim, 85 00:04:26,030 --> 00:04:30,810 Unë në fakt mund të përdorni sintaksë që është krejt si C. Kjo nuk është krejt e njëjtë, 86 00:04:30,810 --> 00:04:35,020 por kjo duket shumë e ngjashme me një funksion, edhe pse mungojnë disa detaje. 87 00:04:35,020 --> 00:04:38,090 Asgjë nuk duket të ndodhë, por tani, nëse unë lloji "hello," 88 00:04:38,090 --> 00:04:40,960 në të vërtetë ju mund të shkruani një program, jo ​​në C, jo në Java, 89 00:04:40,960 --> 00:04:44,280 jo në një tjetër programimit gjuhë, por në vetë Bash. 90 00:04:44,280 --> 00:04:47,630 >> Tani kryesore këtu është që kam shkruar emrin Unë të kërkuar për të dhënë këtë komandë të re, 91 00:04:47,630 --> 00:04:50,820 dhe kllapa janë gjithashtu simbolike e kjo duke qenë një funksion. 92 00:04:50,820 --> 00:04:54,010 Si një mënjanë, ju gjithashtu mund të bëni fun gjërat, dhe në fakt, edhe në Mac OS, 93 00:04:54,010 --> 00:04:55,620 ky është një program i quajtur Terminal. 94 00:04:55,620 --> 00:04:58,800 Ajo vjen e ndërtuar në askujt kompjuter që ka një Mac në këtë dhomë, 95 00:04:58,800 --> 00:05:03,640 dhe ju mund të bëni gjëra të ngjashme në Mac OS, por ju mund të shkoni më tej se. 96 00:05:03,640 --> 00:05:07,110 Dhe kjo është pak tangjencial, por kjo është lloj i fun. 97 00:05:07,110 --> 00:05:09,715 Unë u kujtoi këtë mëngjes, kur duke menduar këtë anë, 98 00:05:09,715 --> 00:05:13,279 e një lojë pak kam përdorur për të luajtur me një nga ish-TFS CS50-së 99 00:05:13,279 --> 00:05:16,570 ku çdo herë ai do të dalë nga tastierë e tij me ekran e tij hapur, 100 00:05:16,570 --> 00:05:23,611 Unë do të të ekzekutuar një komandë si this-- "thonë hello." 101 00:05:23,611 --> 00:05:26,610 Dhe tani çdo herë ai u kthye në e tij keyboard pasi kam pastruar në ekran 102 00:05:26,610 --> 00:05:27,985 dhe ai do të ulen, të përpiqet të bëjë disa punë, 103 00:05:27,985 --> 00:05:29,250 lista përmbajtjen e directory-- tij 104 00:05:29,250 --> 00:05:29,510 >> [AUDIO Playback] 105 00:05:29,510 --> 00:05:30,010 >> -Hello. 106 00:05:30,010 --> 00:05:31,621 107 00:05:31,621 --> 00:05:32,120 Përshëndetje. 108 00:05:32,120 --> 00:05:35,030 >> Kryetari 1: Pra, në drejtësi, ajo nuk ishte në të vërtetë "hello". 109 00:05:35,030 --> 00:05:36,894 Ajo ishte zakonisht diçka më e ngjashme me that-- 110 00:05:36,894 --> 00:05:37,560 [AUDIO Playback] 111 00:05:37,560 --> 00:05:37,750 -Beep. 112 00:05:37,750 --> 00:05:39,320 Kryetari 1: --that I would-- kështu që kompjuteri i tij do të 113 00:05:39,320 --> 00:05:42,170 betohem në atë në çdo kohë që ai në të vërtetë u ul në tastierën e tij. 114 00:05:42,170 --> 00:05:46,265 Dhe shumë shpejt ai me motive nga mos lënë ekran i tij i hapur. 115 00:05:46,265 --> 00:05:48,730 Por kjo sugjeron lloj i fun budallaqe që ju 116 00:05:48,730 --> 00:05:50,210 mund të ketë me diçka si Bash. 117 00:05:50,210 --> 00:05:52,770 Por kjo është pak më shumë serioze, të jetë i sigurt, se kaq. 118 00:05:52,770 --> 00:05:57,235 Dhe në fakt, kjo është një nga shumica e mete rrezikshme dhe të zgjasin 119 00:05:57,235 --> 00:05:58,860 që e ka goditur me të vërtetë botën globalisht. 120 00:05:58,860 --> 00:06:02,060 Kjo bug ka qenë rreth për rreth 20 vjet, 121 00:06:02,060 --> 00:06:05,780 dhe ju do të goditur në vetëm një moment nga thjeshtësinë e saj të afërm. 122 00:06:05,780 --> 00:06:07,990 >> Pra, kjo është një përfaqësues thuaj që në qoftë se ju 123 00:06:07,990 --> 00:06:10,448 vetë një Mac, fjalë për fjalë të drejtë tani kur ju keni kapak tuaj të hapur, 124 00:06:10,448 --> 00:06:12,940 ju mund të provoni të shtypni në se program të quajtur Terminal. 125 00:06:12,940 --> 00:06:15,410 Terminali është nën Aplikime Utilities-- 126 00:06:15,410 --> 00:06:18,790 për një herë, përdoruesit e Windows nuk duhet të shqetësuar për këtë threat-- veçantë 127 00:06:18,790 --> 00:06:22,310 por ata që ndër ju me Macs mund të shtypni këtë në një dritare si unë do të bëj këtu, 128 00:06:22,310 --> 00:06:24,210 dhe në qoftë se ju nuk shkruani që në këtë program 129 00:06:24,210 --> 00:06:28,830 quajtur Terminal, si unë do të bëj tani, nëse ju shihni fjalën "të prekshme," 130 00:06:28,830 --> 00:06:32,200 kompjuteri juaj është i pambrojtur ndaj shfrytëzimit. 131 00:06:32,200 --> 00:06:33,850 >> Tani çfarë do që në të vërtetë do të thotë? 132 00:06:33,850 --> 00:06:35,870 Dhe kjo është pa dyshim disa sintaksë goxha i çmendur, 133 00:06:35,870 --> 00:06:39,050 por le të paktën të nxjerrë jashtë disa nga aspektet interesante. 134 00:06:39,050 --> 00:06:42,567 Pra, ka disa sintaksë që duket a njohur pak, të paktën nga C 135 00:06:42,567 --> 00:06:43,950 dhe programimit në përgjithësi. 136 00:06:43,950 --> 00:06:47,550 Unë shoh disa kllapa, pikpresje, formatimin e teksteve kaçurrel, dhe të tilla, 137 00:06:47,550 --> 00:06:50,820 por rezulton se kjo gjë e trashë këtu në të verdhë 138 00:06:50,820 --> 00:06:53,580 është në thelb një funksion që nuk bën asgjë. 139 00:06:53,580 --> 00:06:57,840 Mjetet zorrës së trashë të bëjë asgjë, dhe pikëpresje do të thotë mos bërë asgjë. 140 00:06:57,840 --> 00:07:00,250 Pra, brenda këtyre formatimin e teksteve kaçurrel, fakti 141 00:07:00,250 --> 00:07:02,440 se unë kam një të barabartë nënshkruajë për të majtë, kjo 142 00:07:02,440 --> 00:07:05,500 thelb është krijuar një komandë, ose një variabël, 143 00:07:05,500 --> 00:07:09,520 quajtur x, dhe caktimin atë se pak e verdhë e kodit atje. 144 00:07:09,520 --> 00:07:14,040 Kjo mund të jetë diçka si "echo hello "apo" thonë bip "ose diçka 145 00:07:14,040 --> 00:07:15,120 e ngjashme me këtë. 146 00:07:15,120 --> 00:07:17,780 Por vini re, nëse sytë tuaj endet më tej në të djathtë, 147 00:07:17,780 --> 00:07:22,150 ka më shumë për këtë linjë se vetëm në fund të asaj pikëpresje. 148 00:07:22,150 --> 00:07:25,160 "Echo të prekshme," dhe pastaj përtej se ka edhe më shumë. 149 00:07:25,160 --> 00:07:26,530 Një tjetër pikëpresje, bash -c :. 150 00:07:26,530 --> 00:07:28,120 151 00:07:28,120 --> 00:07:34,050 >> Pra histori të gjatë të shkurtër, kjo linjë e kodit është 152 00:07:34,050 --> 00:07:36,660 mjaftueshme për imponues një kompjuter që është 153 00:07:36,660 --> 00:07:39,830 të prekshme për të bërë diçka se ju doni të bëni, 154 00:07:39,830 --> 00:07:44,290 sepse ka një bug në Bash ku edhe pse bash është dashur për të ndaluar 155 00:07:44,290 --> 00:07:48,980 lexuar linjat e djathtë e komandës ka pas tekstit të verdhë, 156 00:07:48,980 --> 00:07:52,520 për një 20-vjeçare plus bug të vjetër, Bash ka qenë në fakt leximi 157 00:07:52,520 --> 00:07:56,780 përtej kësaj pikëpresje dhe shumë e sa duke bërë atë që është thënë. 158 00:07:56,780 --> 00:07:59,070 >> Pra, çfarë është implikimi e që në fund të fundit? 159 00:07:59,070 --> 00:08:01,340 Unë vetëm tha se "echo hello" ose "echo prekshme," 160 00:08:01,340 --> 00:08:05,449 por ajo në qoftë se keni bërë diçka në të vërtetë me qëllim të keq, si rm -rf *, 161 00:08:05,449 --> 00:08:07,240 të cilat ju nuk mund kanë shtypur kurrë më parë, 162 00:08:07,240 --> 00:08:08,920 dhe sinqerisht ju ndoshta nuk duhet shumë shpejt, 163 00:08:08,920 --> 00:08:10,700 sepse ju mund të bëni një shumë e dëmit me të. 164 00:08:10,700 --> 00:08:11,210 Pse? 165 00:08:11,210 --> 00:08:12,990 rm bën çfarë, natyrisht? 166 00:08:12,990 --> 00:08:14,270 Heq. 167 00:08:14,270 --> 00:08:15,930 * Do të thotë çfarë? 168 00:08:15,930 --> 00:08:16,430 Të gjitha. 169 00:08:16,430 --> 00:08:18,180 Pra, kjo është një i ashtuquajtur kartë e rrezikshme, kështu që kjo do të thotë 170 00:08:18,180 --> 00:08:20,410 fshini çdo gjë në Lista aktuale. 171 00:08:20,410 --> 00:08:23,379 -r ndodh të thotë rekursive, që do të thotë në qoftë se ajo që ju jeni fshirjes 172 00:08:23,379 --> 00:08:26,420 është një directory, dhe brenda ka është fotografi të tjera dhe drejtoritë e tjera, 173 00:08:26,420 --> 00:08:28,950 Recursively pikiatë në atje dhe fshini të gjithë se. 174 00:08:28,950 --> 00:08:31,040 Dhe f është më e keqja e të gjithë atyre. 175 00:08:31,040 --> 00:08:32,580 Çdokush e di se çfarë do të thotë -f këtu? 176 00:08:32,580 --> 00:08:33,690 177 00:08:33,690 --> 00:08:34,360 Force. 178 00:08:34,360 --> 00:08:37,830 Pra detyruar mjetet, madje edhe në qoftë se kjo është një ide e keqe, 179 00:08:37,830 --> 00:08:40,939 bëjë atë pa bërë mua për konfirmim të mëtejshëm. 180 00:08:40,939 --> 00:08:43,230 Pra, ju e dini, ne qeshim me këtë, por sinqerisht, unë ndoshta 181 00:08:43,230 --> 00:08:44,972 shtypni këtë herë të shumta një ditë, sepse realiteti 182 00:08:44,972 --> 00:08:47,210 është kjo është mënyra më e shpejtë për të fshini një bandë e tërë e gjëra. 183 00:08:47,210 --> 00:08:48,590 Por edhe unë kam bërë disa dëme. 184 00:08:48,590 --> 00:08:53,100 >> Por në qoftë se ju do të gënjejnë një kompjuter në përcaktimin e disa ndryshore budallaqe 185 00:08:53,100 --> 00:08:56,810 ose funksion i quajtur x, por pastaj tricking kompjuterin në ekzekutimin 186 00:08:56,810 --> 00:09:00,030 përtej kufijve të që funksion, përtej kësaj pikëpresje, 187 00:09:00,030 --> 00:09:04,430 ju mund të vërtetë gënjejnë një kompjuter në ekzekutimin diçka si rm -rf 188 00:09:04,430 --> 00:09:07,810 ose Email komandës ose komandën Copy. 189 00:09:07,810 --> 00:09:11,400 Çdo gjë të vërtetë ju mund të bëni me kompjuter, nëse është e fshirjes fotografi, 190 00:09:11,400 --> 00:09:15,350 krijimin fotografi, spamming dikë, sulmuar një server nga distanca, 191 00:09:15,350 --> 00:09:17,190 në qoftë se ju mund të shprehin atë me një komandë, ju 192 00:09:17,190 --> 00:09:19,120 mund të gënjejnë një kompjuter në duke bërë që. 193 00:09:19,120 --> 00:09:21,510 >> Tani ajo është një shembull i se si ju mund të bëni këtë? 194 00:09:21,510 --> 00:09:24,300 E pra, ka shumë të kompjuterëve në Bash internet running. 195 00:09:24,300 --> 00:09:26,390 Të gjithë përdoruesit e na Mac janë në mesin e tyre. 196 00:09:26,390 --> 00:09:30,390 Shumë serverat Linux janë ndër ato, si edhe, dhe serverat Unix. 197 00:09:30,390 --> 00:09:32,630 Dritaret përsëri merr relativisht off hook 198 00:09:32,630 --> 00:09:34,590 nëse nuk e keni instaluar software të veçantë. 199 00:09:34,590 --> 00:09:37,130 Tani një shumë të servers, për shembull, serverat drejtuar web, 200 00:09:37,130 --> 00:09:39,840 dhe në fakt Linux është ndoshta më të sistemit operativ popullor 201 00:09:39,840 --> 00:09:43,060 për të kandiduar në kompjuter në internet që po shërbejnë faqet e Internetit. 202 00:09:43,060 --> 00:09:44,910 Tani si ne do të shohim më vonë në semestrin, kur 203 00:09:44,910 --> 00:09:48,470 të dërgoni një kërkesë nga Chrome juaj browser--, 204 00:09:48,470 --> 00:09:50,790 Internet Explorer, whatever-- në një server të largët, 205 00:09:50,790 --> 00:09:53,730 rezulton se edhe pse ju vetëm të shtypur www.example.com, 206 00:09:53,730 --> 00:09:59,590 shfletuesi juaj po dërgon një mesazh kjo është pak më e errët, si kjo. 207 00:09:59,590 --> 00:10:01,239 >> Por vini re një diçka të vogël të çuditshme. 208 00:10:01,239 --> 00:10:03,030 Dy linjat e para Unë kurrë nuk kam parë më parë, 209 00:10:03,030 --> 00:10:04,904 por ata nuk e shohin veçanërisht kërcënuese. 210 00:10:04,904 --> 00:10:08,030 Por vini re atë që unë e kam vjedhur për linjën e tretë këtu. 211 00:10:08,030 --> 00:10:13,390 Në qoftë se një djalë i keq do të dërgojë një mesazh si kjo nga kompjuteri tij ose të saj 212 00:10:13,390 --> 00:10:17,270 në një Mac pambrojtur ose a pambrojtur server Linux, 213 00:10:17,270 --> 00:10:21,580 Funny gjë është se Bash, që thjeshtë pak komandë të shpejtë, 214 00:10:21,580 --> 00:10:27,450 është i përhapur kudo dhe shpesh është përdorur për të në thelb të ekzekutuar 215 00:10:27,450 --> 00:10:30,020 përmbajtja e një Mesazhi që ajo merr. 216 00:10:30,020 --> 00:10:33,490 Dhe nga kjo logjikë, ju mund të gënjejnë një web server, prandaj, 217 00:10:33,490 --> 00:10:36,370 duke dërguar diçka si User-Agent, të cilat zakonisht 218 00:10:36,370 --> 00:10:38,300 është menduar për të thënë emrin e shfletuesit tuaj. 219 00:10:38,300 --> 00:10:42,420 User-Agent krom, User-Agent Internet Explorer, User-Agent Firefox, kjo 220 00:10:42,420 --> 00:10:44,590 është vetëm të shfletuesit mënyrë për të identifikuar veten. 221 00:10:44,590 --> 00:10:46,605 Por në qoftë se një djalë i keq shumë cleverly thotë, mm-mm, unë jam 222 00:10:46,605 --> 00:10:47,930 nuk do të ju them çfarë shfletuesi im është, 223 00:10:47,930 --> 00:10:50,888 Unë jam në vend të kësaj do të ju dërgoj këtë gjë të fshehtë, në kërkim me një -rf rm 224 00:10:50,888 --> 00:10:55,840 * Në të, ju mund të vërtetë të gënjejnë një pambrojtur web server në internet 225 00:10:55,840 --> 00:10:59,055 në ekzekutimin e pikërisht se në atje për fshirjes të gjitha dosjet. 226 00:10:59,055 --> 00:11:00,930 Dhe sinqerisht, kjo nuk është e edhe më të keq të saj. 227 00:11:00,930 --> 00:11:01,763 Ju mund të bëni asgjë. 228 00:11:01,763 --> 00:11:04,480 Ju mund të filloni një të shpërndara mohimi i sulmit të shërbimit 229 00:11:04,480 --> 00:11:07,030 në qoftë se ju ka dërguar këtë mesazh tek bunches e tërë e serverat e internetit 230 00:11:07,030 --> 00:11:10,256 dhe pastaj të kishin ata të gjithë vijnë, për shembull, në serverat Harvard.edu, 231 00:11:10,256 --> 00:11:12,130 dhe ju mund të lloj të zhurmë dreq prej tyre 232 00:11:12,130 --> 00:11:15,490 nga një rrjetit të trafikut që ishte shkaktuar ndryshe me këtë djalë i keq. 233 00:11:15,490 --> 00:11:18,760 >> Pra, histori të gjatë të shkurtër, pothuajse të gjithë në këtë dhomë që zotëron një Mac 234 00:11:18,760 --> 00:11:20,240 është e ndjeshme për këtë. 235 00:11:20,240 --> 00:11:24,100 Rreshtim argjendi është se nëse ju jeni drejtimin e një web server në laptopë tuaj, 236 00:11:24,100 --> 00:11:27,780 dhe nëse ju keni konfiguruar në të vërtetë ajo për të lejuar diçka si SSH në të, 237 00:11:27,780 --> 00:11:28,670 ju jeni të vërtetë të sigurt. 238 00:11:28,670 --> 00:11:31,710 Është e prekshme, por nuk ka ka e duke u përpjekur për të marrë në laptop, 239 00:11:31,710 --> 00:11:33,290 kështu që ju mund të lloj të tjera siguroi. 240 00:11:33,290 --> 00:11:36,210 Megjithatë, Apple do të së shpejti jetë përditësimin një fix për këtë. 241 00:11:36,210 --> 00:11:39,660 Bota e Linux ka lëshuar tashmë një numër i fixes për Fedora dhe Ubuntu 242 00:11:39,660 --> 00:11:43,790 dhe versionet e tjera të Linux, dhe me të vërtetë në qoftë se ju drejtuar përditësim 50 në aplikim, 243 00:11:43,790 --> 00:11:45,930 edhe se shumë do të jetë e përditësuar dhe të korrigjohen. 244 00:11:45,930 --> 00:11:47,764 Por se edhe nuk ka qenë me të vërtetë të pambrojtur, 245 00:11:47,764 --> 00:11:49,804 sepse nëse nuk keni tinkered me aplikim 246 00:11:49,804 --> 00:11:52,770 dhe bëri laptop publikisht arritshme on internetit, e cila nuk eshte 247 00:11:52,770 --> 00:11:54,910 nga default, ju keni në të vërtetë qenë mirë, sepse 248 00:11:54,910 --> 00:11:56,890 i firewalling dhe teknika të tjera. 249 00:11:56,890 --> 00:12:01,000 >> Por kjo është një shembull ekstrem i një bug se ne kemi jetuar për të fjalë për fjalë 20 250 00:12:01,000 --> 00:12:04,050 vjet, dhe kush e di nëse dikush e gjithë kjo kohë është njohur në lidhje me të? 251 00:12:04,050 --> 00:12:06,300 Dhe në fakt, kjo është një nga sfidat themelore 252 00:12:06,300 --> 00:12:08,690 se ne do të shohim më vonë në semestër në lidhje me sigurinë, 253 00:12:08,690 --> 00:12:13,020 është se ashtu si në botën e vërtetë, njerëz të mirë janë në disavantazh. 254 00:12:13,020 --> 00:12:16,500 Për të mbajtur të liq jashtë, ne duhet të sigurohuni që çdo dera është e mbyllur, 255 00:12:16,500 --> 00:12:20,340 se çdo dritare është e sigurtë, që çdo pikë e hyrjes në një shtëpi 256 00:12:20,340 --> 00:12:21,980 është e sigurtë për të mbajtur të liq jashtë. 257 00:12:21,980 --> 00:12:26,870 Por ajo që e bën djalë i keq duhet të bëni që në fakt kompromis shtëpinë tuaj 258 00:12:26,870 --> 00:12:28,200 dhe vjedhin nga ju? 259 00:12:28,200 --> 00:12:32,574 Ai ose ajo vetëm ka për të gjetur një të hapur derë, një dritare e thyer, ose diçka 260 00:12:32,574 --> 00:12:35,240 në këto linja, dhe kjo është njëjta gjë në sigurinë kompjuterike. 261 00:12:35,240 --> 00:12:37,660 Ne mund të shkruani miliona rreshta të kodit programimit 262 00:12:37,660 --> 00:12:40,570 dhe të shpenzojnë qindra ose mijëra e orë duke u përpjekur për të marrë atë të saktë, 263 00:12:40,570 --> 00:12:43,370 por në qoftë se ju bëni vetëm një gabim në korrektësi, 264 00:12:43,370 --> 00:12:47,030 ju mund të vënë të gjithë sistemin dhe të vërtetë në këtë rast, e gjithë internetit 265 00:12:47,030 --> 00:12:48,660 dhe botërore në rrezik. 266 00:12:48,660 --> 00:12:51,950 >> Pra, nëse ju dëshironi të mësoni më shumë në lidhje me këtë, shkoni në këtë URL këtu. 267 00:12:51,950 --> 00:12:54,450 Nuk ka nevojë për veprim sonte nëse ju jeni 268 00:12:54,450 --> 00:12:57,116 në mesin e atyre më të rehatshme se janë drejtimin e web tuaj 269 00:12:57,116 --> 00:12:59,810 server, në të cilin rast ju duhet, në fakt, të rinovuar software tuaj. 270 00:12:59,810 --> 00:13:03,244 >> Dhe kjo gjithashtu është titulli i një fjalim, dhe tani një letër, 271 00:13:03,244 --> 00:13:05,410 që ne kemi lidhur në website kursin për sot. 272 00:13:05,410 --> 00:13:07,600 Ajo ishte nga një shoku me emrin Ken Thompson, i cili 273 00:13:07,600 --> 00:13:10,120 u pranuar një shumë të famshëm Çmimi në shkenca kompjuterike, 274 00:13:10,120 --> 00:13:13,495 dhe ai i dha këtë fjalim disa vite më parë, në thelb në këtë temë të njëjtë. 275 00:13:13,495 --> 00:13:18,250 276 00:13:18,250 --> 00:13:20,520 Asking folks pyetja, duhet ju me të vërtetë 277 00:13:20,520 --> 00:13:23,480 besim, në fund të fundit, software ju keni dhënë? 278 00:13:23,480 --> 00:13:26,100 Për shembull, ne të gjithë kemi qenë i shkruar programet, 279 00:13:26,100 --> 00:13:27,820 dhe ne kemi qenë hartimin e ata me tingëllim. 280 00:13:27,820 --> 00:13:31,830 Dhe për dijeninë tuaj, a keni shkruar ndonjë program për CS50 ku ka 281 00:13:31,830 --> 00:13:35,310 një derë mbrapa në terezi, ka një mënyrë se një djalë i keq, nëse running programin tuaj, 282 00:13:35,310 --> 00:13:37,410 mund të marrë përsipër kompjuterin tuaj? 283 00:13:37,410 --> 00:13:38,310 Jo ndoshta, e drejtë? 284 00:13:38,310 --> 00:13:40,180 Mario, dhe të babëzitur, dhe Credit. 285 00:13:40,180 --> 00:13:41,680 Këto janë të gjitha programet mjaft të vogla. 286 00:13:41,680 --> 00:13:43,910 Ju do të duhet të jetë goxha keq në qoftë se ju në të vërtetë 287 00:13:43,910 --> 00:13:47,310 bëri tërë kompjuterin tuaj pambrojtur pas shkruar 10 ose 20 rreshta të kodit, 288 00:13:47,310 --> 00:13:49,690 ose të paktën pavetëdijshëm disa të implikimeve të sigurisë. 289 00:13:49,690 --> 00:13:52,023 Tani them se shaka, por ne do të shohim sot 290 00:13:52,023 --> 00:13:54,600 dhe këtë javë është e vërtetë me të vërtetë, të vërtetë e lehtë 291 00:13:54,600 --> 00:13:57,980 të jetë e keqe dhe të bëjë edhe programeve të shkurtra të rrezikuara. 292 00:13:57,980 --> 00:14:02,880 >> Por tani për tani, të paktën, të kuptojnë se çështja u pyetur këtu 293 00:14:02,880 --> 00:14:04,850 është rreth tingëllim në një përpilues. 294 00:14:04,850 --> 00:14:08,360 Pse kemi qenë të besuar tingëllimë për të kaluar dy ose tre javë? 295 00:14:08,360 --> 00:14:12,650 Kush është për të thënë se kushdo që ka shkruar tingëllimë nuk kanë një "nëse" gjendjen në atje 296 00:14:12,650 --> 00:14:17,680 që në thelb injektuar disa zero dhe ato në çdo program që harton 297 00:14:17,680 --> 00:14:21,180 që do të le ose aksesi i saj kompjuterin tuaj, kur ju jeni në gjumë 298 00:14:21,180 --> 00:14:23,580 dhe kapak tuaj laptop është e hapur dhe kompjuteri juaj është duke? 299 00:14:23,580 --> 00:14:24,080 E drejta? 300 00:14:24,080 --> 00:14:28,350 Ne kemi këtë lloj të drejtën e sistemit nder tani ku ne kemi besim se tingëllimë është legit. 301 00:14:28,350 --> 00:14:30,000 Ju besoni se pajisja është legit. 302 00:14:30,000 --> 00:14:34,430 Ju besoni që fjalë për fjalë çdo program në Mac ose PC tuaj është i besueshëm. 303 00:14:34,430 --> 00:14:37,510 Dhe siç sugjeron ky bug thjeshtë, edhe në qoftë se kjo nuk është me qëllim të keq, 304 00:14:37,510 --> 00:14:40,580 që nuk është absolutisht e të ngjarë të jetë rasti. 305 00:14:40,580 --> 00:14:42,350 >> Kështu që ju duhet të jenë të frikësuar si ferr. 306 00:14:42,350 --> 00:14:45,560 Sinqerisht, nuk ka të thjeshtë zgjidhje për këtë tjetrin 307 00:14:45,560 --> 00:14:48,185 shumë se një lloj të vetëdijes shoqërore të rritjes së kompleksitetit 308 00:14:48,185 --> 00:14:50,310 se ne jemi duke ndërtuar në krye nga sistemet tona kompjuterike, 309 00:14:50,310 --> 00:14:53,740 dhe se si të pambrojtur gjithnjë ne mund të jetë shumë mirë. 310 00:14:53,740 --> 00:14:55,570 >> Tani me se tha, Breakout. 311 00:14:55,570 --> 00:14:59,889 Pra Breakout është problemi vendosur tre, dhe Breakout është një lojë nga kaluar 312 00:14:59,889 --> 00:15:02,180 që ju të mund të të kujtojnë, por për ne në problemin vendosur tre, 313 00:15:02,180 --> 00:15:04,450 ajo na lejon që të marrë gjëra të mbështetur një nivel 314 00:15:04,450 --> 00:15:08,880 kështu që kur ne jemi të shkruar programe, edhe në një dritare Terminal si kjo, 315 00:15:08,880 --> 00:15:14,670 ne fakt mund të kandidojë, në fund të fundit, jo programe grafike 316 00:15:14,670 --> 00:15:17,800 ndryshe nga ato që kishim qasje në në Scratch. 317 00:15:17,800 --> 00:15:20,910 Pra, kjo është e stafit të së zbatimi i Breakout, 318 00:15:20,910 --> 00:15:23,930 e cila është vetëm ky tulla-thyer lojë, që ju të lëvizur vozis tuaj mbrapa 319 00:15:23,930 --> 00:15:27,590 dhe me radhë, dhe ju goditi topin kundër atyre tulla ngjyrë deri krye. 320 00:15:27,590 --> 00:15:30,020 Pra, kjo është duke e çuar ne lloj përsëri në ku 321 00:15:30,020 --> 00:15:33,180 ne kemi qenë në gjendje të jetë shumë shpejt me Scratch, dhe tani me C, 322 00:15:33,180 --> 00:15:35,800 zbatimin e jona user interfaces grafike. 323 00:15:35,800 --> 00:15:38,960 >> Por më shumë se kaq, kjo set problemi paraqet parë 324 00:15:38,960 --> 00:15:41,000 në të cilën ne jemi duke i dhënë ju një bandë e kodit. 325 00:15:41,000 --> 00:15:43,940 Dhe në fakt, unë të sjellë të qartë vëmendje për këtë, sepse sidomos 326 00:15:43,940 --> 00:15:47,090 për ata më pak të rehatshme, kjo Problemi vendosur, të paktën në pamje të parë, 327 00:15:47,090 --> 00:15:49,170 do të ndjehen si ne kemi marrë atë një nivel. 328 00:15:49,170 --> 00:15:51,540 Sepse ne kemi dhënë ty, për disa të kërkimit 329 00:15:51,540 --> 00:15:54,930 dhe zgjidhja e problemeve në pset, një bandë e kodit që kemi shkruar, 330 00:15:54,930 --> 00:15:56,680 dhe nja dy komente që thonë se "për të bërë", 331 00:15:56,680 --> 00:15:58,221 ku ju duhet të plotësoni në bosh. 332 00:15:58,221 --> 00:16:00,020 Pra, jo shumë të frikshme, por kjo është hera e parë 333 00:16:00,020 --> 00:16:03,370 ne jemi dorëzuar t'ju kodin që ju duhet për të së pari të lexoni, të kuptojnë, dhe pastaj shtoni në 334 00:16:03,370 --> 00:16:04,290 dhe të plotë atë. 335 00:16:04,290 --> 00:16:05,940 >> Dhe pastaj me Breakout, ne jemi duke shkuar për të bërë të njëjtën gjë, 336 00:16:05,940 --> 00:16:08,740 duke ju dhënë një duzinë disa rreshta më shumë të kodit që, sinqerisht, ju jap 337 00:16:08,740 --> 00:16:11,490 një shumë e kornizës për loja por të ndaluar të shkurtër 338 00:16:11,490 --> 00:16:14,304 e zbatimit tulla dhe topin dhe vozis, 339 00:16:14,304 --> 00:16:15,970 por ne zbatimin e disa karakteristika të tjera. 340 00:16:15,970 --> 00:16:18,280 Dhe madje që në shikim të parë, përsëri, veçanërisht në qoftë se më pak të rehatshme, 341 00:16:18,280 --> 00:16:21,480 mund të duket e frikshme dhe veçanërisht mendoni se ka kaq shumë funksione të reja 342 00:16:21,480 --> 00:16:24,070 ju duhet të përfundojë mendjen tuaj rreth, dhe kjo është e vërtetë. 343 00:16:24,070 --> 00:16:26,281 Por mbani në mend, është e krejt si Scratch. 344 00:16:26,281 --> 00:16:28,780 Shanset janë që ju nuk e përdorni të gjithë copa mister në Scratch. 345 00:16:28,780 --> 00:16:31,120 Shanset janë që ju nuk u kujdes për të përfunduar mendjen tuaj rreth të gjithë ata 346 00:16:31,120 --> 00:16:33,617 sepse të gjithë ajo mori ishte një shikim të shpejtë për të kuptuar, oh, 347 00:16:33,617 --> 00:16:35,450 kjo është ajo që unë mund të bëj me atë copë mister. 348 00:16:35,450 --> 00:16:38,260 Dhe me të vërtetë, në problemin vendosur 3 spekulim, ne do të ju pikë 349 00:16:38,260 --> 00:16:41,370 në dokumentacionin që do të prezantoj me disa funksione të reja, 350 00:16:41,370 --> 00:16:43,570 dhe në fund të fundit i programimit ndërton ju përdorni. 351 00:16:43,570 --> 00:16:47,610 Kushtet, sythe, variablave, dhe funksionet 352 00:16:47,610 --> 00:16:50,720 do të jetë identike me ajo që kemi parë deri tani. 353 00:16:50,720 --> 00:16:53,560 >> Pra me të vërtetë, çfarë ne do të japim ju është një kod mostër që 354 00:16:53,560 --> 00:16:56,110 ju lejon të krijoni një dritare që nuk duket ndryshe nga kjo, 355 00:16:56,110 --> 00:16:59,540 dhe në fund të fundit të kthehet në diçka mjaft si kjo. 356 00:16:59,540 --> 00:17:02,250 Pra, të përfitojnë nga CS50, diskutuar mbi orarin e punës dhe më shumë, 357 00:17:02,250 --> 00:17:05,290 dhe të marrin ngushëllim në faktin se shuma e kodit që ju keni për të shkruar 358 00:17:05,290 --> 00:17:06,760 është në të vërtetë jo të gjithë se shumë. 359 00:17:06,760 --> 00:17:10,359 Sfida e parë është vetëm për të acclimate veten në një farë kodin që kemi shkruar. 360 00:17:10,359 --> 00:17:11,450 361 00:17:11,450 --> 00:17:15,810 >> Çdo pyetje mbi pset3, Shellshock, apo ndryshe? 362 00:17:15,810 --> 00:17:19,226 >> Audienca: Ajo dukej si duke kaluar me Breakout 363 00:17:19,226 --> 00:17:22,154 se kodi është pothuajse një stil objekt-orientuar, 364 00:17:22,154 --> 00:17:24,675 por mendova C ishte një objekt-orientuar program. 365 00:17:24,675 --> 00:17:26,050 Kryetari 1: Një pyetje e shkëlqyer. 366 00:17:26,050 --> 00:17:28,258 Pra, në kërkim përmes Kodi i shpërndarjes, kodin 367 00:17:28,258 --> 00:17:30,180 kemi shkruar për pset3, për ata të njohur, atë 368 00:17:30,180 --> 00:17:32,230 duket si ajo është një pak object-oriented. 369 00:17:32,230 --> 00:17:33,800 Përgjigja e shkurtër është, ajo është. 370 00:17:33,800 --> 00:17:38,130 Është një përafrim se si ju mund të bëjë kodin object-oriented përdorur 371 00:17:38,130 --> 00:17:41,850 një gjuhë si C, por është ende në fund të fundit procedurale. 372 00:17:41,850 --> 00:17:44,900 Nuk ka metoda brenda e variablat, si ju do të shihni. 373 00:17:44,900 --> 00:17:46,180 Por ajo të kujton se. 374 00:17:46,180 --> 00:17:48,780 Dhe ne do të shohim atë funksion përsëri kur ne të merrni për të PHP dhe JavaScript 375 00:17:48,780 --> 00:17:49,946 drejt në fund të semestrit. 376 00:17:49,946 --> 00:17:53,667 Por tani për tani, të mendojnë për atë si një aluzion të asaj që është për të ardhur. 377 00:17:53,667 --> 00:17:54,250 Pyetje e mirë. 378 00:17:54,250 --> 00:17:56,051 379 00:17:56,051 --> 00:17:56,550 Të gjithë të drejtë. 380 00:17:56,550 --> 00:17:59,730 Pra Merge ishte lloj si ne gjëra të majtë për herë të fundit. 381 00:17:59,730 --> 00:18:03,250 Dhe Merge lloj ishte e ftohtë në ndjenjë se ajo ishte aq shumë më të shpejtë, 382 00:18:03,250 --> 00:18:07,100 të paktën në bazë të testeve të përciptë kemi bërë javën e kaluar, se sa, të themi, flluskë 383 00:18:07,100 --> 00:18:08,710 lloj, lloj përzgjedhje, futje lloj. 384 00:18:08,710 --> 00:18:11,780 Dhe ajo që ishte shumë i zoti është vetëm se si të ngjeshur dhe të pastër 385 00:18:11,780 --> 00:18:12,810 ju mund të shprehë atë. 386 00:18:12,810 --> 00:18:15,840 Dhe ajo që bëri që ne të themi se ishte një sipërme i lidhur në kohë shfaqje prej bashkimi 387 00:18:15,840 --> 00:18:16,340 lloj? 388 00:18:16,340 --> 00:18:17,633 389 00:18:17,633 --> 00:18:18,495 Po? 390 00:18:18,495 --> 00:18:19,360 >> Audienca: n log n? 391 00:18:19,360 --> 00:18:20,819 >> Kryetari 1: n log n, e drejtë. n log n. 392 00:18:20,819 --> 00:18:23,776 Dhe ne do të kthehen në atë që me të vërtetë do të thotë ose ku që vjen nga, 393 00:18:23,776 --> 00:18:25,570 por kjo ishte më e mirë se çfarë kohë running 394 00:18:25,570 --> 00:18:28,440 që pamë për flluskë Përzgjedhja dhe futje lloj? 395 00:18:28,440 --> 00:18:30,610 Pra, n katror. n katror është më e madhe se kjo, 396 00:18:30,610 --> 00:18:34,650 dhe madje edhe në qoftë se kjo nuk është mjaft e qartë, e di se log n është më e vogël se n, 397 00:18:34,650 --> 00:18:36,910 kështu që nëse ju bëni herë n diçka më e vogël se n, 398 00:18:36,910 --> 00:18:38,680 ajo do të jetë më pak se katror n. 399 00:18:38,680 --> 00:18:40,130 Është pak e intuitës atje. 400 00:18:40,130 --> 00:18:42,190 Por kemi paguar një çmim për këtë. 401 00:18:42,190 --> 00:18:47,000 Ajo ishte më e shpejtë, por një temë që ka filluar të dalë javën e kaluar ishte kjo tradeoff. 402 00:18:47,000 --> 00:18:49,804 I kam performancë më të mirë Ora e mençur, por ajo që 403 00:18:49,804 --> 00:18:52,470 nuk kam për të shpenzuar nga ana tjetër dorë, në mënyrë që të arritur këtë? 404 00:18:52,470 --> 00:18:53,591 >> Audienca: Memory. 405 00:18:53,591 --> 00:18:54,465 Kryetari 1: Thuaj përsëri? 406 00:18:54,465 --> 00:18:55,173 Audienca: Memory. 407 00:18:55,173 --> 00:18:57,040 Kryetari 1: Memory, ose hapësirë ​​më shumë në përgjithësi. 408 00:18:57,040 --> 00:18:59,040 Dhe kjo nuk ishte super qartë me njerëzit tanë, 409 00:18:59,040 --> 00:19:02,240 por kujtojnë se vullnetarëve tanë u shkonte përpara dhe rrit 410 00:19:02,240 --> 00:19:04,780 mbrapa sikur ka një grup këtu, dhe sikur nuk ka 411 00:19:04,780 --> 00:19:07,130 një koleksion të dytë këtu se ata mund të përdorin, sepse ne 412 00:19:07,130 --> 00:19:09,080 diku të nevojshme për të bashkojë ato folks. 413 00:19:09,080 --> 00:19:11,480 Ne nuk mund vetëm shkëmbim të tyre në vend. 414 00:19:11,480 --> 00:19:13,800 Pra bashkojë levave renditjes është më hapësirë, e cila 415 00:19:13,800 --> 00:19:15,620 ne nuk duhet me algoritme të tjera, 416 00:19:15,620 --> 00:19:17,410 por me kokë është se ajo është shumë më e shpejtë. 417 00:19:17,410 --> 00:19:20,780 Dhe sinqerisht, në hapësirën e vërtetë botërore këto RAM days--, hard disk space-- 418 00:19:20,780 --> 00:19:25,030 është relativisht i lirë, dhe kështu që është e jo domosdoshmërisht një gjë e keqe. 419 00:19:25,030 --> 00:19:28,320 >> Pra, le të marrin një vështrim të shpejtë, pak më shumë metodike, në atë që ne e bëmë 420 00:19:28,320 --> 00:19:30,220 dhe pse ne tha se n u log n. 421 00:19:30,220 --> 00:19:33,260 Kështu që këtu janë tetë numra dhe tetë vullnetarë kemi pasur herën e fundit. 422 00:19:33,260 --> 00:19:35,718 Dhe gjëja e parë që Merge Lloj na tha që të bënte ishte çfarë? 423 00:19:35,718 --> 00:19:37,010 424 00:19:37,010 --> 00:19:38,010 Audienca: Ndani në dy. 425 00:19:38,010 --> 00:19:38,663 Kryetari 1: Thuaj përsëri? 426 00:19:38,663 --> 00:19:39,650 Audienca: Ndani në dy. 427 00:19:39,650 --> 00:19:40,610 Kryetari 1: Ndani në dy pjesë, të drejtë. 428 00:19:40,610 --> 00:19:42,818 Kjo është shumë e kujton librin e telefonit, e ndarjes 429 00:19:42,818 --> 00:19:44,220 dhe të pushtuar më në përgjithësi. 430 00:19:44,220 --> 00:19:45,640 Pra, ne shikuar në gjysmën e majtë. 431 00:19:45,640 --> 00:19:48,700 Dhe pastaj një herë thamë, lloj gjysma e majtë e elementeve, 432 00:19:48,700 --> 00:19:49,690 Çfarë kemi tjetër themi? 433 00:19:49,690 --> 00:19:51,210 434 00:19:51,210 --> 00:19:54,860 Sort gjysmën e majtë të majtë gjysmë, e cila na lejohet të, 435 00:19:54,860 --> 00:19:57,570 pasi duke e ndarë në dy pjesë, të përqëndrohet në katër dhe dy. 436 00:19:57,570 --> 00:20:01,280 >> Si mund të zgjidhur një listë tani, në verdhë, e madhësisë dy, duke përdorur bashkojë Rendit? 437 00:20:01,280 --> 00:20:02,330 438 00:20:02,330 --> 00:20:04,580 E pra ndajnë atë në gjysmë, dhe lloj gjysmën e majtë. 439 00:20:04,580 --> 00:20:07,100 Dhe kjo ishte e ku gjërat mori një kohë të shkurtër pak budalla. 440 00:20:07,100 --> 00:20:10,720 Si mund të zgjidhur një listë që është e një madhësi, si këtë numër katër këtu? 441 00:20:10,720 --> 00:20:12,330 442 00:20:12,330 --> 00:20:13,210 Është e renditura. 443 00:20:13,210 --> 00:20:14,200 Ju jeni bërë. 444 00:20:14,200 --> 00:20:17,300 >> Por atëherë si mund të zgjidhur një listë të e kur është numri dy madhësia? 445 00:20:17,300 --> 00:20:21,640 E pra, të njëjtën gjë, por tani ajo ishte tretë dhe hapi kyç në bashkojë Rendit? 446 00:20:21,640 --> 00:20:24,020 Ju është dashur të bashkojë të majtën gjysmë dhe gjysmë të drejtë. 447 00:20:24,020 --> 00:20:26,580 Dhe një herë ne e bëmë këtë, kemi shikuar në katër, ne kemi shikuar në dy. 448 00:20:26,580 --> 00:20:28,750 Ne vendosëm të gjithë të drejtë, padyshim dy vjen e para, 449 00:20:28,750 --> 00:20:31,840 kështu që ne kemi vënë dy në saj të vend, e ndjekur nga katër. 450 00:20:31,840 --> 00:20:35,010 Dhe tani ju duhet të lloj rewind, dhe kjo është lloj karakteristike 451 00:20:35,010 --> 00:20:37,570 i një algoritmi si Merge Lloj, Rewind në kujtesë. 452 00:20:37,570 --> 00:20:40,240 Cili ishte linjë tjetër të tregimit? 453 00:20:40,240 --> 00:20:41,780 Çfarë duhet të jetë duke u fokusuar në e ardhshme? 454 00:20:41,780 --> 00:20:43,110 455 00:20:43,110 --> 00:20:47,350 Gjysma e drejta e të majtë gjysmë, e cila është gjashtë dhe tetë. 456 00:20:47,350 --> 00:20:50,320 >> Pra, më lejoni vetëm të hap nëpër këtë pa belaboring pikë shumë. 457 00:20:50,320 --> 00:20:53,330 Gjashtë dhe tetë, pastaj gjashtë është renditura, tetë është e renditura. 458 00:20:53,330 --> 00:20:57,190 Përziej ato së bashku si kjo, dhe tani hapi tjetër i madh 459 00:20:57,190 --> 00:21:00,990 është, natyrisht, të lloj gjysmën e duhur nga Hapi i parë i këtij algoritmi. 460 00:21:00,990 --> 00:21:02,870 Pra, ne të përqëndrohet në një, tre, shtatë, pesë. 461 00:21:02,870 --> 00:21:04,540 Ne pastaj të përqëndrohet në gjysmën e majtë. 462 00:21:04,540 --> 00:21:09,400 Gjysma e majtë e se, gjysma e drejta e se, dhe pastaj shkrihen në një dhe tre. 463 00:21:09,400 --> 00:21:13,100 Pastaj gjysma djathtë, pastaj u largua gjysma e tij, atëherë gjysma e drejta e saj. 464 00:21:13,100 --> 00:21:15,985 Bashkojë atë në, dhe tani çfarë hapi mbetet? 465 00:21:15,985 --> 00:21:18,040 466 00:21:18,040 --> 00:21:22,460 Bashkojë gjysmën e madhe e majtë dhe e madhe gjysma e drejtë, kështu që shkon poshtë aty, 467 00:21:22,460 --> 00:21:27,330 atëherë dy, pastaj tre, pastaj katër, atëherë pesë, pastaj gjashtë, pastaj shtatë, pastaj tetë. 468 00:21:27,330 --> 00:21:31,990 >> Deri tani, pse është kjo në fund të fundit duke zbuluar, veçanërisht nëse n dhe logaritmet më shumë 469 00:21:31,990 --> 00:21:35,487 në përgjithësi në vend shpëtuar ju, të paktën në kujtim të kohëve të fundit? 470 00:21:35,487 --> 00:21:37,070 E pra, njoftim lartësinë e kësaj gjëje. 471 00:21:37,070 --> 00:21:41,230 Ne kishim tetë elemente, dhe ne ndarë atë nga dy, nga dy, nga dy. 472 00:21:41,230 --> 00:21:44,590 Pra hyni bazë dy nga tetë na jep tre. 473 00:21:44,590 --> 00:21:45,640 474 00:21:45,640 --> 00:21:48,540 Dhe besoni mua në se në qoftë se një mjegullt pak mbi këtë. 475 00:21:48,540 --> 00:21:54,710 Por hyni bazë dy nga tetë është tre, kështu që ne kemi bërë tri shtresa të bashkimit. 476 00:21:54,710 --> 00:21:57,170 Dhe kur ne u bashkua elementet, si shumë elemente 477 00:21:57,170 --> 00:21:58,950 e shikojmë në secilin prej këtyre rreshtave? 478 00:21:58,950 --> 00:22:00,212 479 00:22:00,212 --> 00:22:01,437 Një total prej n, e drejtë? 480 00:22:01,437 --> 00:22:04,020 Për shkak të bashkojë rreshtin e lartë, edhe pse ne e bëmë atë pak nga pak, 481 00:22:04,020 --> 00:22:05,990 ne fund të fundit prekur çdo numër herë. 482 00:22:05,990 --> 00:22:09,054 Dhe në radhë të dytë, për të bashkojë ato listat e madhësisë dy, 483 00:22:09,054 --> 00:22:10,470 ne kishim për të prekur çdo element herë. 484 00:22:10,470 --> 00:22:12,690 Dhe pastaj këtu të vërtetë në mënyrë të qartë në rreshtin e fundit, 485 00:22:12,690 --> 00:22:15,430 ne kishim për të prekur njëri prej atyre Elementet e një herë, por vetëm një herë, 486 00:22:15,430 --> 00:22:18,400 kështu që këtu qëndron, atëherë, tonë log n n. 487 00:22:18,400 --> 00:22:21,780 >> Dhe tani vetëm për të bërë gjërat pak më formale për vetëm një moment, nëse ju 488 00:22:21,780 --> 00:22:24,260 ishin tani të analizuar këtë në një lloj nivel më të lartë 489 00:22:24,260 --> 00:22:28,340 dhe të përpiqen për të vendosur, edhe si mund të ju shkoni në lidhje me shprehjen e 490 00:22:28,340 --> 00:22:31,780 koha drejtimin e këtij algoritmi vetëm duke shikuar në të dhe nuk 491 00:22:31,780 --> 00:22:33,590 duke përdorur një shembull të trilluar? 492 00:22:33,590 --> 00:22:36,590 E pra, sa kohë do të thoni një hap si kjo në të verdhë do të marrë, 493 00:22:36,590 --> 00:22:37,173 nëse n <2 kthimi? 494 00:22:37,173 --> 00:22:38,840 495 00:22:38,840 --> 00:22:39,830 Kjo është një O e madhe e çfarë? 496 00:22:39,830 --> 00:22:41,450 497 00:22:41,450 --> 00:22:44,540 Kështu që unë jam duke parë një të tillë, kështu një hap, ndoshta dy hapa, sepse kjo është në qoftë se 498 00:22:44,540 --> 00:22:47,110 dhe pastaj të kthehen, por është e Koha konstante, e drejtë? 499 00:22:47,110 --> 00:22:49,960 Pra, ne tha O (1), dhe kjo është se si unë do të shprehin këtë. 500 00:22:49,960 --> 00:22:51,480 T, vetëm të jetë running kohë. 501 00:22:51,480 --> 00:22:54,150 n është madhësia e input, kështu T (n), vetëm një mënyrë e sofistikuar 502 00:22:54,150 --> 00:22:56,330 i thënë drejtimin Ora input dhënë me madhësi n 503 00:22:56,330 --> 00:23:00,220 do të jetë në rendin kohe konstante, në O (1). 504 00:23:00,220 --> 00:23:01,970 >> Por ndryshe, çka në lidhje me këtë? 505 00:23:01,970 --> 00:23:05,660 Si do ta shprehin running kohë e kësaj linje të verdhë? 506 00:23:05,660 --> 00:23:06,250 T i çfarë? 507 00:23:06,250 --> 00:23:09,440 508 00:23:09,440 --> 00:23:12,665 Ju mund të lloj të mashtrojnë këtu dhe përgjigje pyetjen time ciklikisht. 509 00:23:12,665 --> 00:23:14,770 510 00:23:14,770 --> 00:23:17,900 Pra, në qoftë se koha që konkurrojnë në përgjithësi ne vetëm të themi është T (n). 511 00:23:17,900 --> 00:23:18,950 512 00:23:18,950 --> 00:23:22,490 Dhe tani ju jeni lloj i punting këtu dhe duke thënë, mirë, vetëm lloj gjysmën e majtë, 513 00:23:22,490 --> 00:23:23,920 dhe pastaj të zgjidhur gjysmën e duhur. 514 00:23:23,920 --> 00:23:27,520 Si mund ne të përfaqësuar simbolikisht koha drejtimin e kësaj linje të verdhë? 515 00:23:27,520 --> 00:23:28,020 T i çfarë? 516 00:23:28,020 --> 00:23:29,360 Çfarë është madhësia e input? 517 00:23:29,360 --> 00:23:30,510 518 00:23:30,510 --> 00:23:31,057 n mbi dy. 519 00:23:31,057 --> 00:23:32,140 Pse nuk mundem të them vetëm se? 520 00:23:32,140 --> 00:23:36,449 Dhe pastaj kjo është tjetër T (n / 2) dhe pastaj përsëri, në qoftë se unë të bashkohen dy gjysmave të renditura, 521 00:23:36,449 --> 00:23:38,615 sa elemente jam unë do që të ketë për të prekur gjithsej? 522 00:23:38,615 --> 00:23:39,780 523 00:23:39,780 --> 00:23:40,320 n. 524 00:23:40,320 --> 00:23:42,790 Kështu që unë mund të shprehin këtë, vetëm të jetë lloj i zbukuruar, 525 00:23:42,790 --> 00:23:44,430 si koha kalon në përgjithësi. 526 00:23:44,430 --> 00:23:51,140 T (n) është vetëm koha drejtimin e T (n / 2), plus T (n / 2), u largua gjysma dhe gjysma e duhur, 527 00:23:51,140 --> 00:23:55,360 plus O (n), e cila është ndoshta n hapa, por ndoshta, në qoftë se unë jam duke përdorur dy gishta, 528 00:23:55,360 --> 00:23:57,960 kjo është dy herë më shumë hapa, por është linear. 529 00:23:57,960 --> 00:24:00,440 Kjo është disa numër hapash që është një faktor i N, 530 00:24:00,440 --> 00:24:02,270 kështu që ne mund të shprehim këtë si kjo. 531 00:24:02,270 --> 00:24:05,550 Dhe ky është vendi ku tani ne do të vë bast për mbrapa e shkollës së mesme tonë matematikë tekst 532 00:24:05,550 --> 00:24:10,290 ne jemi se përsëritje në fund të fundit përfundon barabartë kjo, n herë log n, 533 00:24:10,290 --> 00:24:12,530 në qoftë se ju në të vërtetë të bëjë jashtë matematikë më zyrtarisht. 534 00:24:12,530 --> 00:24:13,950 >> Pra, kjo është vetëm dy perspektiva. 535 00:24:13,950 --> 00:24:17,500 Një numerikisht me një vështirë-koduar shembull përfaqësues 536 00:24:17,500 --> 00:24:21,140 duke përdorur tetë numra, dhe një më shumë vështrim i përgjithshëm se si kemi marrë atje. 537 00:24:21,140 --> 00:24:25,670 Por ajo që është me të vërtetë interesante këtu është, përsëri, ky nocion e çiklizmit. 538 00:24:25,670 --> 00:24:26,900 Unë nuk jam duke përdorur për sythe. 539 00:24:26,900 --> 00:24:29,860 Unë jam lloj i përcaktimit diçka në aspektin e vetë, 540 00:24:29,860 --> 00:24:31,950 jo vetëm me këtë funksion matematikore, 541 00:24:31,950 --> 00:24:34,860 por edhe në drejtim të këtij kodi pseudo. 542 00:24:34,860 --> 00:24:38,260 Ky kod pseudo është gjithkund rekursive në atë dy linja saj 543 00:24:38,260 --> 00:24:42,310 është në thelb duke u thënë atë për të shkuar përdorin vetë për të zgjidhur një më të vogël 544 00:24:42,310 --> 00:24:45,400 Problemi i madhësisë më të vogël, dhe pastaj përsëri dhe përsëri 545 00:24:45,400 --> 00:24:48,820 dhe përsëri deri ne shkurtoj atë poshtë në këtë të ashtuquajturin rastin bazë. 546 00:24:48,820 --> 00:24:52,810 >> Pra, le të vërtetë të tërheqë një shumë bindëse marrë-larg nga kjo si më poshtë. 547 00:24:52,810 --> 00:24:58,420 Më lejoni të shkoj në gedit dhe për të marrë një të shikojmë disa nga kodin e sotme burim, 548 00:24:58,420 --> 00:24:59,930 në mënyrë të veçantë ky shembull këtu. 549 00:24:59,930 --> 00:25:03,709 Sigma 0, e cila shton me sa duket numri një deri n. 550 00:25:03,709 --> 00:25:05,750 Pra, le të shohim se çfarë është e njohur dhe të panjohura këtu. 551 00:25:05,750 --> 00:25:08,690 Së pari ne kemi një çift të përfshin, kështu që asgjë të re atje. 552 00:25:08,690 --> 00:25:09,190 Prototype. 553 00:25:09,190 --> 00:25:11,370 Unë jam një i mjegullt pak në kjo pas disa ditësh, 554 00:25:11,370 --> 00:25:13,790 por ajo që u themi një prototip i një funksioni është? 555 00:25:13,790 --> 00:25:15,099 556 00:25:15,099 --> 00:25:16,015 Audienca: [padëgjueshme]. 557 00:25:16,015 --> 00:25:16,905 Kryetari 1: Çfarë është ajo? 558 00:25:16,905 --> 00:25:17,800 Audienca: Ne shpallë atë. 559 00:25:17,800 --> 00:25:18,883 Kryetari 1: Ne shpallë atë. 560 00:25:18,883 --> 00:25:22,290 Pra, ju jeni të mësimdhënies tingëllim, hej, jo të vërtetë zbatimin këtë ende, 561 00:25:22,290 --> 00:25:25,740 por diku në këtë fotografi, me sa duket, do të jetë një funksion të quajtur çfarë? 562 00:25:25,740 --> 00:25:26,930 563 00:25:26,930 --> 00:25:27,540 Sigma. 564 00:25:27,540 --> 00:25:30,540 Dhe kjo është vetëm një premtim që ajo do të duket si ky. 565 00:25:30,540 --> 00:25:33,720 Ajo do të marrë një numër të plotë, si input-- dhe unë mund të jetë më i qartë 566 00:25:33,720 --> 00:25:36,570 dhe thonë int n --and është do të kthehen një int, 567 00:25:36,570 --> 00:25:39,900 por do të thotë pikëpresje, mm, unë do të marrë rreth për të zbatuar këtë pak më vonë. 568 00:25:39,900 --> 00:25:40,989 Përsëri, tingëllimë është memec. 569 00:25:40,989 --> 00:25:43,280 Kjo vetëm do të dini se çfarë ju tregoni atë të lartë e deri në fund, 570 00:25:43,280 --> 00:25:45,765 kështu që ne duhet të paktën të dhënë atë një aluzion të asaj që është për të ardhur. 571 00:25:45,765 --> 00:25:47,330 >> Tani le të shohim kryesore këtu. 572 00:25:47,330 --> 00:25:50,040 Le të lëvizni poshtë këtu dhe shohim se çfarë kryesor është duke bërë. 573 00:25:50,040 --> 00:25:53,780 Nuk është se e gjatë e një funksion, dhe në fakt konstrukti këtu është e njohur. 574 00:25:53,780 --> 00:25:57,590 Unë deklaroj një n ndryshueshme, dhe pastaj Unë mërzit përdoruesit përsëri dhe përsëri 575 00:25:57,590 --> 00:26:01,880 për një numër i plotë pozitiv duke përdorur getInt, dhe vetëm dalje nga ky lak 576 00:26:01,880 --> 00:26:03,280 një herë përdorues ka përmbushur. 577 00:26:03,280 --> 00:26:05,670 A Ndërsa, ne kemi përdorur për të mërzit përdoruesit në atë mënyrë. 578 00:26:05,670 --> 00:26:06,670 Tani kjo është interesante. 579 00:26:06,670 --> 00:26:08,510 Unë deklaroj një int quajtur "përgjigje." 580 00:26:08,510 --> 00:26:11,420 Unë caktojë kjo vlera e kthimit e një funksion të quajtur "SIGMA." 581 00:26:11,420 --> 00:26:15,200 Unë nuk e di atë që e bën, por Mbaj mend duke deklaruar atë një moment më parë. 582 00:26:15,200 --> 00:26:18,310 Dhe atëherë unë jam duke kaluar në vlera që përdoruesi shtypur në, n, 583 00:26:18,310 --> 00:26:20,420 dhe pastaj unë raportoni përgjigjen. 584 00:26:20,420 --> 00:26:22,260 E pra le të lëviz mbrapa për vetëm një moment. 585 00:26:22,260 --> 00:26:28,620 Le të shkojmë përpara në këtë directory, të bëjë SIGMA 0, dhe në të vërtetë të drejtuar këtë program 586 00:26:28,620 --> 00:26:30,490 dhe të shohim se çfarë ndodh. 587 00:26:30,490 --> 00:26:35,930 Pra, nëse unë shkoj përpara dhe të drejtuar ky program, ./sigma-0, 588 00:26:35,930 --> 00:26:40,139 dhe unë lloji në një pozitiv integer si dy, Sigma, 589 00:26:40,139 --> 00:26:43,180 si simbol greke nënkupton, është vetëm do të shtoni deri të gjitha numrat nga 590 00:26:43,180 --> 00:26:44,320 zero në deri në dy. 591 00:26:44,320 --> 00:26:46,560 Pra, 0 plus 1 plus 2. 592 00:26:46,560 --> 00:26:48,830 Pra, kjo duhet të shpresojmë se më jepni 3. 593 00:26:48,830 --> 00:26:49,750 Kjo është e gjitha ajo është duke bërë. 594 00:26:49,750 --> 00:26:52,690 Dhe në mënyrë të ngjashme, në qoftë se unë të drejtuar këtë përsëri dhe unë i jep numrin tre, 595 00:26:52,690 --> 00:26:56,721 kjo është 3 plus 2, kështu që është e 5, plus 1 duhet të jepni 6. 596 00:26:56,721 --> 00:26:59,470 Dhe pastaj në qoftë se unë të marrë me të vërtetë i çmendur dhe filloni të shtypni në numër më të mëdha, 597 00:26:59,470 --> 00:27:01,290 ajo duhet të jepni shuma më të mëdha. 598 00:27:01,290 --> 00:27:02,250 Pra, kjo është e gjitha. 599 00:27:02,250 --> 00:27:04,010 >> Pra, çfarë e bën të duket SIGMA si? 600 00:27:04,010 --> 00:27:05,430 E pra, kjo është goxha e drejtpërdrejtë. 601 00:27:05,430 --> 00:27:08,940 Është mënyra se si ne mund të kemi zbatuar kjo për dy javëve të shkuara. 602 00:27:08,940 --> 00:27:11,120 "Int" do të jetë lloj kthimi. 603 00:27:11,120 --> 00:27:14,330 Sigma është emri, dhe ajo merr një m ndryshueshme në vend të n. 604 00:27:14,330 --> 00:27:15,940 Unë do të ndryshojë që deri lartë. 605 00:27:15,940 --> 00:27:17,340 Atëherë kjo është vetëm një kontroll mendje e shëndoshë. 606 00:27:17,340 --> 00:27:18,430 607 00:27:18,430 --> 00:27:19,950 Ne do të shohim se pse në një moment. 608 00:27:19,950 --> 00:27:24,220 Tani unë deklaroj një ndryshore, Shuma, nisja atë në zero. 609 00:27:24,220 --> 00:27:28,140 Pastaj unë kam këtë për lak iterating, me sa duket për qartësi, 610 00:27:28,140 --> 00:27:33,810 nga i = 1 më lart në një = m, e cila është çfarëdo përdoruesi shtypur në, dhe pastaj unë 611 00:27:33,810 --> 00:27:35,690 rrisim shumën si kjo. 612 00:27:35,690 --> 00:27:37,360 Dhe pastaj kthehen shumën. 613 00:27:37,360 --> 00:27:38,440 >> Pra, disa pyetje. 614 00:27:38,440 --> 00:27:42,370 Një, unë pretendojnë në komentin tim se kjo shmang rrezikun e një lak të pafund. 615 00:27:42,370 --> 00:27:45,620 Pse do të kalon në një numër negativ shkaktoj, potencialisht, një lak pafund? 616 00:27:45,620 --> 00:27:49,396 617 00:27:49,396 --> 00:27:51,290 >> Audienca: Ju kurrë nuk do të arrijnë m. 618 00:27:51,290 --> 00:27:52,880 >> Kryetari 1: Asnjëherë mos arrijnë m. 619 00:27:52,880 --> 00:27:55,880 Por m është e kaluar në, kështu që le të konsiderojnë një shembull të thjeshtë. 620 00:27:55,880 --> 00:27:58,510 Nëse m është miratuar në nga Përdorues si një negativ. 621 00:27:58,510 --> 00:28:00,059 Pavarësisht kryesore. 622 00:28:00,059 --> 00:28:01,850 Kryesore na mbron nga këtë shumë, kështu që unë jam vetëm 623 00:28:01,850 --> 00:28:04,680 duke qenë të vërtetë anal me SIGMA për të gjithashtu të sigurt 624 00:28:04,680 --> 00:28:06,540 se input nuk mund të jetë negativ. 625 00:28:06,540 --> 00:28:10,130 Pra, nëse m është negative, diçka si një negativ. 626 00:28:10,130 --> 00:28:11,930 Çfarë do të ndodhë? 627 00:28:11,930 --> 00:28:14,390 E pra, unë do të të niset për një, 628 00:28:14,390 --> 00:28:19,060 dhe pastaj unë do të jetë më pak se ose e barabartë me m? 629 00:28:19,060 --> 00:28:24,130 630 00:28:24,130 --> 00:28:24,765 >> Sehir. 631 00:28:24,765 --> 00:28:26,930 632 00:28:26,930 --> 00:28:29,370 Kjo was-- mos-së, le hiç këtë histori. 633 00:28:29,370 --> 00:28:32,780 Unë nuk kërkoj këtë pyetje, sepse rreziku që unë jam duke aluduar në 634 00:28:32,780 --> 00:28:38,360 nuk do të ndodhë për shkak se i është gjithmonë do të jetë në rregull më i madh than--, 635 00:28:38,360 --> 00:28:39,871 Unë mohoj këtë pyetje. 636 00:28:39,871 --> 00:28:40,370 OK. 637 00:28:40,370 --> 00:28:42,030 Le të fokusohemi vetëm në këtë pjesë këtu. 638 00:28:42,030 --> 00:28:44,210 639 00:28:44,210 --> 00:28:48,830 Pse unë deklaroj disa jashtë lak? 640 00:28:48,830 --> 00:28:52,010 Njoftimi on line 49 Unë e kam deklaruar i brenda lak, 641 00:28:52,010 --> 00:28:54,950 por në internet 48 Unë e kam deklaruar disa jashtë. 642 00:28:54,950 --> 00:28:55,695 Po. 643 00:28:55,695 --> 00:28:56,611 Audienca: [padëgjueshme]. 644 00:28:56,611 --> 00:28:58,734 645 00:28:58,734 --> 00:28:59,400 Kryetari 1: Sigurisht. 646 00:28:59,400 --> 00:29:03,360 Pra, para së gjithash unë sigurisht nuk e bëjnë duan të deklarojnë dhe të nisja shumë 647 00:29:03,360 --> 00:29:06,130 me zero brendësi lak në çdo përsëritje, 648 00:29:06,130 --> 00:29:09,370 sepse kjo do të humbjen në mënyrë të qartë Qëllimi i mbledhur deri numrat. 649 00:29:09,370 --> 00:29:11,770 Unë do të të mbajtur në ndryshim vlera e kthyer në zero. 650 00:29:11,770 --> 00:29:17,992 Dhe gjithashtu, çfarë është një tjetër më të errët Arsyeja për të njëjtin vendim të projektimit? 651 00:29:17,992 --> 00:29:18,954 Po. 652 00:29:18,954 --> 00:29:20,279 >> Audienca: [padëgjueshme]. 653 00:29:20,279 --> 00:29:21,070 Kryetari 1: Pikërisht. 654 00:29:21,070 --> 00:29:24,060 Unë dua të hyni në atë jashtë e lak too në atë linjë? 655 00:29:24,060 --> 00:29:25,390 656 00:29:25,390 --> 00:29:26,400 Më 53. 657 00:29:26,400 --> 00:29:29,910 Dhe në bazë të rregullit tonë e pranoj nga disa ligjërata më parë, 658 00:29:29,910 --> 00:29:33,680 Variablat janë scoped, me të vërtetë, për të formatimin e teksteve kaçurrel që përfshijnë ato. 659 00:29:33,680 --> 00:29:38,190 Pra, në qoftë se unë nuk e deklarojnë shumën brenda e këtyre formatimin e teksteve kaçurrel jashtme, 660 00:29:38,190 --> 00:29:40,250 Unë nuk mund ta përdorin atë në linjë 53. 661 00:29:40,250 --> 00:29:43,160 Vendos një mënyrë tjetër, në qoftë se unë deklaruar Shuma në këtu, apo edhe brenda 662 00:29:43,160 --> 00:29:45,410 Për loop, unë nuk mund të hyni në atë në 53. 663 00:29:45,410 --> 00:29:47,150 Ndryshueshme në mënyrë efektive do të jetë zhdukur. 664 00:29:47,150 --> 00:29:48,579 Pra disa arsye atje. 665 00:29:48,579 --> 00:29:50,370 Por tani le të kthehemi dhe të shohim se çfarë ndodh. 666 00:29:50,370 --> 00:29:51,730 Pra SIGMA merr quajtur. 667 00:29:51,730 --> 00:29:55,640 Ajo shton deri 1 plus 2, ose 1 plus 2 plus 3, dhe pastaj kthimit vlerën, 668 00:29:55,640 --> 00:29:59,660 dyqane se në përgjigje, dhe printf këtu është arsyeja pse unë jam duke parë në ekran. 669 00:29:59,660 --> 00:30:03,079 Pra, kjo është ajo që ne do të thërrasë një përsëritës qasje, ku përsëritje vetëm 670 00:30:03,079 --> 00:30:03,870 do të thotë duke përdorur një lak. 671 00:30:03,870 --> 00:30:06,900 Një Për lak, një lak, ndërsa, a bëni ndërsa loop, vetëm duke bërë diçka përsëri 672 00:30:06,900 --> 00:30:08,380 dhe përsëri dhe përsëri. 673 00:30:08,380 --> 00:30:13,505 >> Por SIGMA është lloj i një funksion i zoti në që unë mund të zbatojë atë ndryshe. 674 00:30:13,505 --> 00:30:14,620 675 00:30:14,620 --> 00:30:19,120 Po në lidhje me këtë, i cili vetëm të jetë lloj i ftohtë, 676 00:30:19,120 --> 00:30:21,880 më lejoni të vërtetë të shpëtoj e shumë zbavitje 677 00:30:21,880 --> 00:30:24,380 sepse këtë funksion është me të vërtetë shumë e thjeshtë. 678 00:30:24,380 --> 00:30:27,780 Le të shkurtoj atë vetëm për katër linjat e saj kryesore 679 00:30:27,780 --> 00:30:30,410 dhe të shpëtoj të gjithë Komentet dhe formatimin e teksteve kaçurrel. 680 00:30:30,410 --> 00:30:34,334 Kjo është lloj i një mendje-defekt Zbatimi alternativë. 681 00:30:34,334 --> 00:30:37,250 Në rregull, ndoshta nuk e mendje-defekt, por kjo është lloj i sexier, të gjithë të drejtë, 682 00:30:37,250 --> 00:30:39,920 për të parë në këtë mënyrë shumë më shkurtimisht. 683 00:30:39,920 --> 00:30:43,120 Me vetëm katër rreshta të kodit, Për herë të parë e kanë këtë kontroll mendje e shëndoshë. 684 00:30:43,120 --> 00:30:45,732 Nëse m është më pak se ose e barabartë me zero, SIGMA nuk ka kuptim. 685 00:30:45,732 --> 00:30:48,190 Ajo është menduar vetëm për të qenë në ky rast për numrat pozitiv, 686 00:30:48,190 --> 00:30:50,340 kështu që unë jam vetëm duke shkuar për të kthehet zero në mënyrë arbitrare 687 00:30:50,340 --> 00:30:53,210 në mënyrë që ne të paktën të ketë disa ashtuquajturi rasti bazë. 688 00:30:53,210 --> 00:30:54,430 >> Por këtu është bukuria. 689 00:30:54,430 --> 00:30:59,930 Tërësia e kësaj ideje, duke shtuar numrat nga 1 deri n, ose m në këtë rast, 690 00:30:59,930 --> 00:31:02,630 mund të bëhet nga lloji i kaluar dollar. 691 00:31:02,630 --> 00:31:04,947 E pra, ajo që është shuma e 1 për të m? 692 00:31:04,947 --> 00:31:05,780 E pra, ju e dini se çfarë? 693 00:31:05,780 --> 00:31:11,949 Është e njëjtë si shuma e m plus shuma e 1 në m minus 1. 694 00:31:11,949 --> 00:31:12,740 E pra ju e dini se çfarë? 695 00:31:12,740 --> 00:31:13,940 Çfarë është SIGMA të m minus 1? 696 00:31:13,940 --> 00:31:17,860 E pra, në qoftë se ju lloj i ndjekin këtë logjikisht, është e njëjta si m minus 1 697 00:31:17,860 --> 00:31:21,415 plus SIGMA e m minus 2. 698 00:31:21,415 --> 00:31:22,480 699 00:31:22,480 --> 00:31:26,012 Kështu që ju mund të lloj just-- kjo është si, në qoftë se ju jeni vetëm 700 00:31:26,012 --> 00:31:28,220 duke u përpjekur për të fyejnë një mik dhe ata të ju pyes një pyetje, 701 00:31:28,220 --> 00:31:31,344 ju lloj i përgjigjet me një pyetje, ju mund të lloj të mbajtur duke kaluar dollar. 702 00:31:31,344 --> 00:31:34,560 Por ajo që është kryesore është se në qoftë se ju mbani duke bërë pyetje vogla dhe të vogla 703 00:31:34,560 --> 00:31:36,910 dhe më të vogla, ju jeni jo duke i kërkuar se çfarë është SIGMA 704 00:31:36,910 --> 00:31:39,116 i n, çfarë është SIGMA e n, çfarë është e SIGMA n? 705 00:31:39,116 --> 00:31:40,990 Ju jeni duke i kërkuar se çfarë është SIGMA i n, çfarë është SIGMA 706 00:31:40,990 --> 00:31:42,839 e n minus 1, çfarë është SIGMA e n minus 2? 707 00:31:42,839 --> 00:31:44,880 Përfundimisht pyetja juaj do të bëhet çfarë? 708 00:31:44,880 --> 00:31:50,250 Çfarë është SIGMA e një ose zero, disa vlera shumë të vogla, 709 00:31:50,250 --> 00:31:52,220 dhe sa më shpejt që ju merrni atë, mikut tuaj, 710 00:31:52,220 --> 00:31:54,350 ju nuk do të kërkojë njëjtën pyetje përsëri, 711 00:31:54,350 --> 00:31:55,975 ju jeni vetëm duke shkuar për të thënë, oh kjo është zero. 712 00:31:55,975 --> 00:31:58,490 Ne jeni bërë duke luajtur këtë lloj e lojës budallaqe ciklike. 713 00:31:58,490 --> 00:32:02,950 >> Pra recursion është akti në programimin e një funksion që e quan veten. 714 00:32:02,950 --> 00:32:06,630 Ky program, kur hartuar dhe drejtuar, është do të sillen pikërisht të njëjtën mënyrë, 715 00:32:06,630 --> 00:32:09,620 por ajo që është kryesore është që brenda e një funksion të quajtur SIGMA, 716 00:32:09,620 --> 00:32:13,150 ka një vijë e kodit ku ne jemi duke e quajtur veten, 717 00:32:13,150 --> 00:32:14,980 i cili normalisht do të ishte keq. 718 00:32:14,980 --> 00:32:21,160 Për shembull, çfarë nëse unë i parë hartuar këtë, kështu që të bëjë sigma-- 719 00:32:21,160 --> 00:32:22,710 bërë SIGMA 1 ./sigma-1. 720 00:32:22,710 --> 00:32:25,050 721 00:32:25,050 --> 00:32:27,690 Numër i plotë pozitiv, ju lutem, 50 1275. 722 00:32:27,690 --> 00:32:30,810 Pra, çfarë funksioni duket të jetë, në bazë të një testi, të saktë. 723 00:32:30,810 --> 00:32:34,917 Por ajo që në qoftë se unë të marrë një pak i rrezikshëm dhe fshini të ashtuquajturin rasti bazë, 724 00:32:34,917 --> 00:32:37,750 dhe vetëm thonë, dhe unë jam vetëm duke e bërë kjo më e komplikuar se sa është. 725 00:32:37,750 --> 00:32:42,450 Le të vetëm të llogaritur SIGMA duke marrë m dhe pastaj duke shtuar 726 00:32:42,450 --> 00:32:44,564 në SIGMA e një m minus? 727 00:32:44,564 --> 00:32:45,980 E pra, çfarë do të ndodhë këtu? 728 00:32:45,980 --> 00:32:47,140 Le të zoom out. 729 00:32:47,140 --> 00:32:52,920 Le të përpiluar programin, shpëtuar atë, përpiluar programin, 730 00:32:52,920 --> 00:33:00,450 dhe pastaj gati ./sigma-1 zooming në, hyjë numër i plotë pozitiv, ju lutem, 50. 731 00:33:00,450 --> 00:33:02,180 732 00:33:02,180 --> 00:33:04,430 Sa prej jush janë të gatshëm të fess deri në duke parë se? 733 00:33:04,430 --> 00:33:04,950 >> OK. 734 00:33:04,950 --> 00:33:06,690 Pra, kjo mund të ndodhë për një numër arsyesh, 735 00:33:06,690 --> 00:33:09,148 dhe sinqerisht këtë javë ne jemi gati për të ju jap më shumë prej tyre. 736 00:33:09,148 --> 00:33:11,780 Por në këtë rast, do të përpiqen për arsye prapa 737 00:33:11,780 --> 00:33:14,430 çfarë mund të ketë ndodhur këtu? 738 00:33:14,430 --> 00:33:17,400 Faji segmentimit, kemi thënë e kaluar koha, i referohet një segment të kujtesës. 739 00:33:17,400 --> 00:33:18,690 Diçka e keqe ka ndodhur. 740 00:33:18,690 --> 00:33:21,550 Por ajo që ishte ajo mekanikisht që shkoi shtrembër 741 00:33:21,550 --> 00:33:25,000 këtu për shkak të largimit tim e që të ashtuquajturin rasti bazë, 742 00:33:25,000 --> 00:33:26,870 ku kam kthyer një vlerë të vështirë-koduar? 743 00:33:26,870 --> 00:33:28,970 744 00:33:28,970 --> 00:33:30,460 Çfarë mendoni se shkoi keq? 745 00:33:30,460 --> 00:33:31,219 Po. 746 00:33:31,219 --> 00:33:32,135 >> Audienca: [padëgjueshme]. 747 00:33:32,135 --> 00:33:36,387 748 00:33:36,387 --> 00:33:36,970 Kryetari 1: Ah. 749 00:33:36,970 --> 00:33:37,550 Pyetje e mirë. 750 00:33:37,550 --> 00:33:39,508 Pra, nga madhësia e numrit që unë u mbledhur deri 751 00:33:39,508 --> 00:33:41,920 mori aq i madh se ajo tejkaluar madhësia e hapësirës kujtesës. 752 00:33:41,920 --> 00:33:44,640 Ide e mirë, por jo krejtësisht do të shkaktojë një përplasje. 753 00:33:44,640 --> 00:33:48,230 Kjo mund të shkaktojë del nga shtrati numër i plotë, ku bit vetëm rrokullisje mbi 754 00:33:48,230 --> 00:33:51,760 dhe pastaj ne gabim një të vërtetë të madhe numri për të si një numër negativ, 755 00:33:51,760 --> 00:33:53,260 por që në vetvete nuk do të shkaktojë një përplasje. 756 00:33:53,260 --> 00:33:55,509 Sepse në fund të ditë një int është ende 32 bit. 757 00:33:55,509 --> 00:33:57,640 Ju nuk jeni do të aksidentalisht vjedhin një grimë e 33. 758 00:33:57,640 --> 00:33:58,431 Por një mendim i mirë. 759 00:33:58,431 --> 00:33:58,984 Po. 760 00:33:58,984 --> 00:33:59,900 >> Audienca: [padëgjueshme]. 761 00:33:59,900 --> 00:34:00,551 762 00:34:00,551 --> 00:34:02,300 Kryetari 1: Metoda nuk ndalet running, 763 00:34:02,300 --> 00:34:06,658 dhe në të vërtetë ai e quan veten përsëri dhe përsëri dhe përsëri dhe përsëri 764 00:34:06,658 --> 00:34:08,449 dhe përsëri, dhe asnjë nga ato funksione ndonjëherë 765 00:34:08,449 --> 00:34:13,310 përfundojë sepse vija e tyre e vetëm të Kodi quan themself përsëri dhe përsëri 766 00:34:13,310 --> 00:34:14,219 dhe përsëri. 767 00:34:14,219 --> 00:34:16,080 Dhe ajo që është me të vërtetë ndodh këtu, dhe tani ne 768 00:34:16,080 --> 00:34:18,100 mund të lloj të tërheqë këtë në pikturë. 769 00:34:18,100 --> 00:34:20,899 Më lejoni të shkoj në një foto për vetëm një moment. 770 00:34:20,899 --> 00:34:22,940 Kjo është një foto, që përfundimisht do të mishit nga 771 00:34:22,940 --> 00:34:26,336 në më shumë detaje, e çfarë po ndodh brenda e kujtesës e kompjuterit tuaj. 772 00:34:26,336 --> 00:34:28,460 Dhe kjo rezulton se në fund të kësaj foto 773 00:34:28,460 --> 00:34:29,709 është diçka e quajtur rafte. 774 00:34:29,709 --> 00:34:31,920 Kjo është një copë e kujtesës, një copë e RAM, 775 00:34:31,920 --> 00:34:33,920 që është përdorur vetëm në çdo kohë një funksion quhet. 776 00:34:33,920 --> 00:34:36,239 Çdo herë që, një programues, thërrasë një funksion, 777 00:34:36,239 --> 00:34:38,860 sistemit operativ, si Mac OS, Windows, apo Linux, 778 00:34:38,860 --> 00:34:41,920 grabs një bandë e bytes, ndoshta një disa kilobytes, ndoshta disa megabajt 779 00:34:41,920 --> 00:34:44,590 e kujtesës, duart e tyre për ju, dhe pastaj të lejon të 780 00:34:44,590 --> 00:34:47,650 ju drejtuar funksion tuaj duke përdorur çdo gjë që variabla që ju duhet. 781 00:34:47,650 --> 00:34:50,699 Dhe në qoftë se ju atëherë telefononi një tjetër Funksioni dhe një tjetër funksion, 782 00:34:50,699 --> 00:34:53,590 ju merrni një fetë e kujtesës dhe një tjetër fetë e kujtesës. 783 00:34:53,590 --> 00:34:57,090 >> Dhe me të vërtetë, në qoftë se këto tabaka gjelbër nga Annenberg prezantojnë atë kujtesës, 784 00:34:57,090 --> 00:34:59,870 këtu është ajo që ndodh e para herë që të telefononi funksion SIGMA. 785 00:34:59,870 --> 00:35:04,510 Është si të vënë një tabaka si kjo në atë që është fillimisht një rafte bosh. 786 00:35:04,510 --> 00:35:07,142 Por pastaj në qoftë se tabaka e quan veten, në mënyrë që të flasin, 787 00:35:07,142 --> 00:35:08,850 duke e quajtur një tjetër shembull i SIGMA-s, që është 788 00:35:08,850 --> 00:35:11,640 si të pyesësh e sistemit operativ, Ooh, duhet një memorie pak më shumë, 789 00:35:11,640 --> 00:35:12,520 më jepni atë. 790 00:35:12,520 --> 00:35:14,840 Dhe pastaj ajo merr grumbulluar në në krye. 791 00:35:14,840 --> 00:35:18,030 Por ajo që është kryesore këtu është se tabaka parë është ende atje, 792 00:35:18,030 --> 00:35:20,620 sepse ai thirret këtë tabaka dytë. 793 00:35:20,620 --> 00:35:23,500 Tani ndërkohë, SIGMA telefononi SIGMA, kjo është si të pyesësh për më shumë memorie. 794 00:35:23,500 --> 00:35:25,830 Merr grumbulluar në mbi këtu. 795 00:35:25,830 --> 00:35:29,350 SIGMA telefononi SIGMA, kjo është një tjetër tabaka që merr grumbulluar në këtu. 796 00:35:29,350 --> 00:35:32,942 Dhe në qoftë se ju mbani duke bërë këtë, përfundimisht, lloj hartë këtë vizuale 797 00:35:32,942 --> 00:35:35,525 në këtë tabelë, çfarë do të ndodhë me rafte e tabaka? 798 00:35:35,525 --> 00:35:37,480 799 00:35:37,480 --> 00:35:41,160 Ajo do të kalojë shumën e kujtesës kompjuteri juaj ka. 800 00:35:41,160 --> 00:35:45,790 Dhe, sa më shpejt që këtë tabaka gjelbër kalon vijën horizontale 801 00:35:45,790 --> 00:35:49,410 mbi rafte dhe mbi atë grumbull të fjalës, të cilat ne do të kthehen në të ardhmen, 802 00:35:49,410 --> 00:35:50,410 që është një gjë e keqe. 803 00:35:50,410 --> 00:35:52,810 Tog është një tjetër segment i kujtesës, 804 00:35:52,810 --> 00:35:55,190 dhe në qoftë se ju le këto tabaka grumbull dhe grumbull në, 805 00:35:55,190 --> 00:35:57,800 ju jeni do të kalojë segment tuaj të kujtesës, 806 00:35:57,800 --> 00:36:00,420 dhe një program është me të vërtetë duke shkuar për të rrëzuar. 807 00:36:00,420 --> 00:36:02,930 >> Tani si një mënjanë, këtë ide e recursion, për këtë arsye, 808 00:36:02,930 --> 00:36:06,500 në mënyrë të qartë mund të çojë në probleme, por kjo nuk është domosdoshmërisht një gjë e keqe. 809 00:36:06,500 --> 00:36:08,840 Për shkak se e konsiderojnë, pas të gjithë, how-- dhe ndoshta 810 00:36:08,840 --> 00:36:11,700 kjo merr disa duke u përdorur të --how elegante apo sa e thjeshtë 811 00:36:11,700 --> 00:36:14,890 se zbatimi i SIGMA ishte. 812 00:36:14,890 --> 00:36:17,440 Dhe ne nuk jemi duke shkuar për të përdorur recursion të gjithë se shumë në CS50, 813 00:36:17,440 --> 00:36:20,780 por në CS51, dhe me të vërtetë çdo klasë ku ju manipuluar strukturat e të dhënave 814 00:36:20,780 --> 00:36:23,640 si pemë, ose pemë familjare, që kanë disa hierarki, 815 00:36:23,640 --> 00:36:26,000 kjo është super, super të dobishme. 816 00:36:26,000 --> 00:36:29,750 Tani, si një mënjanë, në mënyrë që ju si aspirojnë shkencëtarët kompjuterike 817 00:36:29,750 --> 00:36:33,180 janë të njohur me disa nga Google shaka brenda, në qoftë se ju shkoni në Google 818 00:36:33,180 --> 00:36:36,345 dhe ju të kërkoni atë që është Përkufizimi i, të themi, recursion, të hyjë. 819 00:36:36,345 --> 00:36:40,208 820 00:36:40,208 --> 00:36:41,110 Uh-huh. 821 00:36:41,110 --> 00:36:42,670 Si një mënjanë, unë u tërhoq deri disa. 822 00:36:42,670 --> 00:36:45,470 Kjo ishte si 10 minuta zvarritje këtë mëngjes. 823 00:36:45,470 --> 00:36:52,890 Nëse ju gjithashtu Google "shtrembër", njoftimi duke e përkulur kokën slightly-- 824 00:36:52,890 --> 00:36:55,120 dhe atëherë kjo është ndoshta më të egër të të gjitha 825 00:36:55,120 --> 00:36:57,286 që dikush shpenzuar si ditën e tyre zbatimin e kësaj 826 00:36:57,286 --> 00:36:59,880 disa vite ago-- eja. 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 Oh, wait-- kjo është një bug. 829 00:37:04,540 --> 00:37:08,410 830 00:37:08,410 --> 00:37:11,410 >> Pra, kandidon për një nga faqet e internetit më të mëdha botërore 831 00:37:11,410 --> 00:37:13,510 janë këto vezë të vogla idiote Pashkëve. 832 00:37:13,510 --> 00:37:16,690 Ata ndoshta konsumojnë një numër jo banale i linjave të kodit 833 00:37:16,690 --> 00:37:19,280 vetëm në mënyrë që ne mund të kemi pak gjëra zbavitëse si kjo. 834 00:37:19,280 --> 00:37:22,140 Por të paktën tani ju merrni disa nga këto shaka brenda. 835 00:37:22,140 --> 00:37:28,330 >> Tani le të marrin një vështrim në disa nga bardhë shtrihet ne kemi qenë të thënë kohët e fundit, 836 00:37:28,330 --> 00:37:30,707 dhe të fillojnë të zhvishem përsëri disa shtresa teknikisht 837 00:37:30,707 --> 00:37:32,790 në mënyrë që ju të vërtetë kuptojnë çfarë po u ndodh 838 00:37:32,790 --> 00:37:34,860 dhe ju mund të kuptoni disa nga kërcënimet, 839 00:37:34,860 --> 00:37:38,060 si Shellshock, që tani kanë filluar të bëhen 840 00:37:38,060 --> 00:37:41,110 në ballë të gjithëve vëmendje, të paktën në media. 841 00:37:41,110 --> 00:37:45,810 Kështu që këtu është një funksion shumë e thjeshtë se asgjë kthimit, i pavlefshëm. 842 00:37:45,810 --> 00:37:46,790 Emri i tij është swap. 843 00:37:46,790 --> 00:37:50,880 Ajo merr në dy variablave dhe të kthehet asgjë. 844 00:37:50,880 --> 00:37:52,260 Merr në a dhe b. 845 00:37:52,260 --> 00:37:53,337 Pra, një demonstrim të shpejtë. 846 00:37:53,337 --> 00:37:54,170 Kemi sjellë këto deri. 847 00:37:54,170 --> 00:37:56,100 Ne mund edhe të marrë pak thyejnë këtu për vetëm një moment 848 00:37:56,100 --> 00:37:57,250 dhe kanë një diçka të vogël për të pirë. 849 00:37:57,250 --> 00:38:00,120 Nëse dikush nuk do mend bashkuar mua deri këtu për vetëm një moment. 850 00:38:00,120 --> 00:38:01,830 Si për ju në këmishë ngjyrë gështenjë? 851 00:38:01,830 --> 00:38:02,335 Eja lart. 852 00:38:02,335 --> 00:38:04,060 853 00:38:04,060 --> 00:38:05,260 Vetëm një sot. 854 00:38:05,260 --> 00:38:06,251 Faleminderit, edhe pse. 855 00:38:06,251 --> 00:38:08,000 Të gjithë të drejtë, dhe ne kemi vjen që këtu? 856 00:38:08,000 --> 00:38:08,660 Si e keni emrin? 857 00:38:08,660 --> 00:38:09,360 >> Kryetari 4: Laura. 858 00:38:09,360 --> 00:38:09,740 >> Kryetari 1: Laura. 859 00:38:09,740 --> 00:38:10,370 Eja lart. 860 00:38:10,370 --> 00:38:11,460 861 00:38:11,460 --> 00:38:13,850 Pra Laura, sfidë shumë e thjeshtë sot. 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 Gëzohem që u njohëm yo. 864 00:38:15,370 --> 00:38:16,410 865 00:38:16,410 --> 00:38:16,910 Të gjithë të drejtë. 866 00:38:16,910 --> 00:38:21,179 Pra, ne kemi disa qumësht gjatë këtu dhe ne kemi disa lëng portokalli mbi këtu 867 00:38:21,179 --> 00:38:23,345 dhe disa gota që ne huazuar nga Annenberg sot. 868 00:38:23,345 --> 00:38:24,178 >> Kryetari 4: huazuara. 869 00:38:24,178 --> 00:38:27,240 Kryetari 1: Dhe do të shkojë përpara dhe do t'ju japë një gjysmë gotë me këtë. 870 00:38:27,240 --> 00:38:28,250 871 00:38:28,250 --> 00:38:28,800 Të gjithë të drejtë. 872 00:38:28,800 --> 00:38:30,750 Dhe ne do të ju jap gjysmë një gotë qumësht. 873 00:38:30,750 --> 00:38:31,905 874 00:38:31,905 --> 00:38:35,890 Oh, dhe vetëm kështu që ju mund të mbani mend se çfarë kjo ishte si, 875 00:38:35,890 --> 00:38:38,860 Mu kujtua për të sjellë kjo deri dhe sot. 876 00:38:38,860 --> 00:38:42,030 877 00:38:42,030 --> 00:38:42,530 Mirë. 878 00:38:42,530 --> 00:38:45,470 Në qoftë se ju nuk do mend, le të shohim, ne mund të vënë ato mbi syzet tuaja 879 00:38:45,470 --> 00:38:46,560 në qoftë se ju dëshironi. 880 00:38:46,560 --> 00:38:48,710 Kjo do të jetë bota nga sytë e Laura. 881 00:38:48,710 --> 00:38:49,210 Të gjithë të drejtë. 882 00:38:49,210 --> 00:38:53,820 Pra qëllimi juaj, duke pasur parasysh dy gota lëngshme këtu, qumësht dhe lëng portokalli, 883 00:38:53,820 --> 00:38:58,370 është shkëmbim dy përmbajtjen kështu që Lëng portokalli shkon në filxhan qumësht 884 00:38:58,370 --> 00:39:00,710 dhe qumësht shkon në filxhan lëng portokalli. 885 00:39:00,710 --> 00:39:02,359 >> Kryetari 4: A merrni një filxhan? 886 00:39:02,359 --> 00:39:05,650 Kryetari 1: Unë jam aq i kënaqur që ju kërkohet, edhe pse do të kishte qenë shumë më mirë pamjet 887 00:39:05,650 --> 00:39:06,710 në qoftë se ju nuk e kishte pyetur. 888 00:39:06,710 --> 00:39:10,620 Por po, ne mund t'ju ofrojmë një të tretë filxhan që është bosh, natyrisht. 889 00:39:10,620 --> 00:39:11,120 Të gjithë të drejtë. 890 00:39:11,120 --> 00:39:12,300 Pra shkëmbim përmbajtjen atje. 891 00:39:12,300 --> 00:39:16,100 892 00:39:16,100 --> 00:39:17,050 Very nice. 893 00:39:17,050 --> 00:39:20,390 894 00:39:20,390 --> 00:39:21,305 Shumë mirë. 895 00:39:21,305 --> 00:39:23,121 896 00:39:23,121 --> 00:39:24,745 Ju jeni duke e bërë këtë të mrekullueshëm me kujdes. 897 00:39:24,745 --> 00:39:26,970 898 00:39:26,970 --> 00:39:28,655 Dhe hap tre. 899 00:39:28,655 --> 00:39:30,390 900 00:39:30,390 --> 00:39:31,350 Të gjithë të drejtë. 901 00:39:31,350 --> 00:39:31,930 Excellent. 902 00:39:31,930 --> 00:39:33,930 Një raund i madh e duartrokitje do të ishte mirë për Laura. 903 00:39:33,930 --> 00:39:36,500 904 00:39:36,500 --> 00:39:37,000 Të gjithë të drejtë. 905 00:39:37,000 --> 00:39:40,790 Ne kemi një dhuratë të vogël lamtumire për ju, por më lejoni të marrë këto. 906 00:39:40,790 --> 00:39:42,620 Thank you so much. 907 00:39:42,620 --> 00:39:46,170 Pra, një shembull i thjeshtë, edhe pse, për të treguar se në qoftë se ju bëni 908 00:39:46,170 --> 00:39:48,300 doni të bie në ujdi përmbajtjen e dy kontejnerëve, 909 00:39:48,300 --> 00:39:52,360 ose le të thërrasë ata variablave, keni nevojë për disa ruajtje të përkohshme 910 00:39:52,360 --> 00:39:56,710 në skenë një nga përmbajtjet në mënyrë që në fakt mund të bëjë shkëmbim. 911 00:39:56,710 --> 00:40:01,790 Pra me të vërtetë, ky kod burim deri këtu në C është përfaqësues i pikërisht këtë. 912 00:40:01,790 --> 00:40:06,340 Nëse lëng portokalli ishte një dhe qumësht ishte b, dhe kemi dashur të bie në ujdi dy, 913 00:40:06,340 --> 00:40:08,990 ju mund të provoni diçka krijuese me derdhje njëri në tjetrin, 914 00:40:08,990 --> 00:40:11,031 por që ndoshta nuk do të përfundojë veçanërisht mirë. 915 00:40:11,031 --> 00:40:15,260 Dhe kështu që ne përdorim një filxhan të tretë, thirrje ajo tmp, T-M-P nga konventa, 916 00:40:15,260 --> 00:40:19,370 dhe të vënë përmbajtjen e OJ në se, më pas bie në ujdi një filxhan, 917 00:40:19,370 --> 00:40:22,610 pastaj FZ në kupa origjinale, duke 918 00:40:22,610 --> 00:40:25,320 arritjen, pikërisht si Laura bëri, swap-in. 919 00:40:25,320 --> 00:40:26,850 >> Pra, le të bëjë pikërisht këtë. 920 00:40:26,850 --> 00:40:30,110 Më lejoni të shkoj përpara dhe të hapur deri një shembull që është 921 00:40:30,110 --> 00:40:32,720 në të vërtetë quhet "jo bie në ujdi, "sepse kjo nuk është 922 00:40:32,720 --> 00:40:36,180 si thjesht bëhet si ju mund të mendoni. 923 00:40:36,180 --> 00:40:41,190 Pra, në këtë program, njoftim që Unë jam duke përdorur stdio.h, miku ynë i vjetër. 924 00:40:41,190 --> 00:40:43,130 Kam prototip për shkëmbim deri atje, e cila 925 00:40:43,130 --> 00:40:45,450 do të thotë zbatimin e saj ndoshta poshtë më poshtë, 926 00:40:45,450 --> 00:40:48,050 dhe le të shohim se çfarë ky kryesore Programi do të bëjë për mua. 927 00:40:48,050 --> 00:40:52,020 I pari deklaroj int x merr një, dhe int y merr dy. 928 00:40:52,020 --> 00:40:54,930 Pra, mendoj se e atyre si OJ dhe qumësht, respektivisht. 929 00:40:54,930 --> 00:40:57,100 Dhe atëherë unë vetëm kam një printf thënë se x është kjo 930 00:40:57,100 --> 00:41:00,120 dhe y është kjo, vetëm kështu unë mund vizualisht të parë se çfarë po ndodh. 931 00:41:00,120 --> 00:41:03,810 Pastaj unë kam printf pretenduar që unë jam shkëmbejnë dy, 932 00:41:03,810 --> 00:41:07,100 dhe pastaj unë të shtypura nga një pretendojnë se ata janë swapped, 933 00:41:07,100 --> 00:41:09,300 dhe unë të shtypura nga x dhe y përsëri. 934 00:41:09,300 --> 00:41:13,010 Pra, këtu poshtë në swap-i është pikërisht ajo që bëri Laura, 935 00:41:13,010 --> 00:41:16,240 dhe pikërisht ajo që kemi parë në ekran një moment më parë. 936 00:41:16,240 --> 00:41:19,380 >> Pra, le të shkojnë përpara dhe të të zhgënjehet rëndë. 937 00:41:19,380 --> 00:41:24,690 Bëni asnjë shkëmbim, dhe të drejtuar asnjë shkëmbim, zooming në në prodhim këtu. 938 00:41:24,690 --> 00:41:28,320 Hyjë x eshte 1, y eshte 2, shkëmbejnë swapped. 939 00:41:28,320 --> 00:41:32,700 x është ende 1, dhe y është ende 2. 940 00:41:32,700 --> 00:41:37,630 Pra, edhe pse, sinqerisht, kjo duket pikërisht pëlqen, edhe pse më shumë teknikisht, 941 00:41:37,630 --> 00:41:40,730 atë që bëri Laura, nuk duket për të punuar. 942 00:41:40,730 --> 00:41:42,130 Pra, pse është se? 943 00:41:42,130 --> 00:41:46,630 E pra, ajo rezulton se kur kemi shkruar një program si kjo 944 00:41:46,630 --> 00:41:51,590 që ka dy kryesore, theksuar këtu, dhe pastaj një tjetër funksion, si shkëmbim, 945 00:41:51,590 --> 00:41:54,230 theksuar këtu, të cilat ajo e quan, bota 946 00:41:54,230 --> 00:41:57,030 duket një diçka të vogël si këto tabaka një moment më parë. 947 00:41:57,030 --> 00:42:00,440 Kur së pari merr quajtur kryesore, kjo është si të pyesësh sistemit operativ 948 00:42:00,440 --> 00:42:04,030 për një grimë e kujtesës për çdo lokal variabla si x dhe y që ka kryesor, 949 00:42:04,030 --> 00:42:05,660 dhe ata përfundojnë të drejtë atje. 950 00:42:05,660 --> 00:42:10,920 Por në qoftë se thirrjet kryesore bie në ujdi, dhe kryesore kalon të bie në ujdi dy argumente, A dhe B, 951 00:42:10,920 --> 00:42:16,410 lëng portokalli dhe qumësht, kjo nuk është si dorëzimin e lëng portokalli dhe qumësht 952 00:42:16,410 --> 00:42:17,500 të Laura. 953 00:42:17,500 --> 00:42:21,300 Çfarë një kompjuter e bën, është ajo kalon kopjet e lëng portokalli 954 00:42:21,300 --> 00:42:27,110 dhe kopje të qumështit tek Laura, në mënyrë që çfarë është në fund të fundit brenda këtij tabaka 955 00:42:27,110 --> 00:42:32,510 është një vlerë dhe dy, ose OJ dhe qumësht, por kopje të saj, 956 00:42:32,510 --> 00:42:34,790 kështu që në këtë pikë në histori, ka 957 00:42:34,790 --> 00:42:36,930 është OJ dhe qumësht në secilën prej këtyre tabaka. 958 00:42:36,930 --> 00:42:39,260 Ka një një dhe një dy në secilën nga këto tabaka, 959 00:42:39,260 --> 00:42:41,720 dhe funksioni swap është me të vërtetë duke punuar. 960 00:42:41,720 --> 00:42:46,090 Është shkëmbejnë ato brenda e tabaka dytë larti, 961 00:42:46,090 --> 00:42:48,147 por që shkëmbejnë ka asnjë ndikim. 962 00:42:48,147 --> 00:42:49,980 Dhe në bazë të vetëm disa Parimi bazë ne kemi 963 00:42:49,980 --> 00:42:52,970 biseduar rreth më parë, dhe në të vërtetë vetëm disa minuta më parë, çfarë 964 00:42:52,970 --> 00:42:58,770 mund të shpjegojë pse ndryshon a dhe b brenda e swap 965 00:42:58,770 --> 00:43:05,560 nuk ka efekt në x dhe y, edhe pse I kaluar x dhe y të funksionit të shkëmbimit. 966 00:43:05,560 --> 00:43:08,750 Çfarë është fjala kyçe këtu se mund të thjeshtë e shpjegoni? 967 00:43:08,750 --> 00:43:11,250 968 00:43:11,250 --> 00:43:12,627 Unë mendoj se kam dëgjuar këtu? 969 00:43:12,627 --> 00:43:13,335 Audienca: Kthimi. 970 00:43:13,335 --> 00:43:14,085 Kryetari 1: Kthehu? 971 00:43:14,085 --> 00:43:14,590 Jo të kthehen. 972 00:43:14,590 --> 00:43:15,895 Le të shkojë me një tjetër. 973 00:43:15,895 --> 00:43:16,395 Çfarë është ajo? 974 00:43:16,395 --> 00:43:17,080 >> Audienca: [padëgjueshme]. 975 00:43:17,080 --> 00:43:20,000 >> Kryetari 1: OK, kështu që ne mund return-- bëjnë punën e kthimit në histori, 976 00:43:20,000 --> 00:43:21,914 por ka një shpjegim edhe më të thjeshta. 977 00:43:21,914 --> 00:43:22,580 Audienca: Fusha. 978 00:43:22,580 --> 00:43:23,288 Kryetari 1: Fusha. 979 00:43:23,288 --> 00:43:24,300 Unë do të marrë qëllimin. 980 00:43:24,300 --> 00:43:27,290 Pra fushëveprimi, mos harroni ku x tonë dhe y deklaruar. 981 00:43:27,290 --> 00:43:30,840 Ata janë deklaruar brenda i kryesor drejtë deri këtu. 982 00:43:30,840 --> 00:43:33,200 a dhe b, ndërkohë, janë deklaruar në mënyrë efektive 983 00:43:33,200 --> 00:43:35,930 brenda e swap, jo fare në formatimin e teksteve kaçurrel, por ende 984 00:43:35,930 --> 00:43:37,690 në zonën e përgjithshme e shkëmbimit të. 985 00:43:37,690 --> 00:43:40,560 Dhe kështu me të vërtetë, a dhe b ekzistojnë vetëm brenda kësaj tabaka 986 00:43:40,560 --> 00:43:44,850 nga Annenberg, kjo copë e dytë e kodit. 987 00:43:44,850 --> 00:43:49,500 Pra, ne jemi me të vërtetë ndryshuar kopje, por që nuk është e vërtetë të gjithë që të dobishme. 988 00:43:49,500 --> 00:43:52,190 >> Pra, le të marrin një vështrim në ky nivel pak më të ulët. 989 00:43:52,190 --> 00:43:55,430 Unë jam duke shkuar për të shkuar mbrapa në Drejtoria Burimi, 990 00:43:55,430 --> 00:43:58,330 dhe unë jam duke shkuar për të parë zoom në këtu, dhe vetëm 991 00:43:58,330 --> 00:44:02,290 ta konfirmoj që unë jam në këtë dritare më e madhe terminali, 992 00:44:02,290 --> 00:44:04,430 Programi është ende sillet si kjo. 993 00:44:04,430 --> 00:44:06,840 Supozoni tani që kjo nuk është i qëllimshëm. 994 00:44:06,840 --> 00:44:10,090 Është e qartë se unë të kërkuar shkëmbim të punë, kështu që ajo ndihet si një bug. 995 00:44:10,090 --> 00:44:12,780 Tani unë mund të filloni duke shtuar një Shumë printf për kodin tim, 996 00:44:12,780 --> 00:44:16,010 shtypjen nga x gjatë këtu, y mbi këtu, një këtu, b mbi këtu. 997 00:44:16,010 --> 00:44:18,220 Por sinqerisht, kjo është ndoshta ajo që ju keni qenë duke bërë për disa javë 998 00:44:18,220 --> 00:44:20,190 tani, në të orarit të punës dhe në shtëpi kur punojnë 999 00:44:20,190 --> 00:44:22,150 në psets duke u përpjekur për të gjetur disa bugs. 1000 00:44:22,150 --> 00:44:25,560 Por ju do të shihni, në qoftë se ju nuk e keni tashmë, se problemi vendosur tre ju fut 1001 00:44:25,560 --> 00:44:31,630 në një komandë të quajtur Gdb, ku Gdb, Rregullues GNU, 1002 00:44:31,630 --> 00:44:34,040 ka vetë një bandë e tërë e karakteristika që mund të vërtetë 1003 00:44:34,040 --> 00:44:38,160 le të kuptojmë situatat si kjo, por më imponuese, 1004 00:44:38,160 --> 00:44:39,940 zgjidhur problemet dhe për të gjetur mete. 1005 00:44:39,940 --> 00:44:40,940 Kështu që unë jam duke shkuar për të bërë këtë. 1006 00:44:40,940 --> 00:44:44,770 Në vend të ./noswap, unë jam në vend do të kandidojë Gdb ./noswap. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 Me fjalë të tjera, unë jam duke shkuar për të drejtuar tim Programi jo në Bash, miku ynë i ri 1009 00:44:51,200 --> 00:44:51,850 sot. 1010 00:44:51,850 --> 00:44:53,970 Unë jam duke shkuar për të drejtuar tim noswap program brenda 1011 00:44:53,970 --> 00:44:56,900 i këtij programi tjetër të quajtur Gdb, e cila është një debugger, e cila 1012 00:44:56,900 --> 00:45:01,035 është një program që është projektuar për të ndihmuar ju Njerëzit të gjeni dhe për të hequr bugs. 1013 00:45:01,035 --> 00:45:03,410 Pra, nëse unë goditi Run këtu, nuk ka një shumë e tmerrshme e tekstit 1014 00:45:03,410 --> 00:45:04,868 se ju me të vërtetë kurrë nuk keni për të lexuar. 1015 00:45:04,868 --> 00:45:07,290 Kjo është në thelb një zbavitje nga e shpejtë, e cila 1016 00:45:07,290 --> 00:45:10,030 Unë jam duke shkuar për të goditur Kontrollit-L për të marrë në krye atje. 1017 00:45:10,030 --> 00:45:11,800 Kjo është Gdb shpejtë. 1018 00:45:11,800 --> 00:45:15,550 Nëse unë dua të drejtuar këtë program tani, si ky mashtrojnë fletë të vogël në e sotme 1019 00:45:15,550 --> 00:45:21,860 rrëshqitje sugjeron, Run është i pari urdhëron që ne do të thotë për të futur. 1020 00:45:21,860 --> 00:45:25,150 Dhe unë jam vetëm duke shkuar për të llojit drejtuar deri këtu brenda të gdb, 1021 00:45:25,150 --> 00:45:26,811 dhe në të vërtetë ajo u zhvillua programin tim. 1022 00:45:26,811 --> 00:45:29,310 Tani ka disa shtesë Rezultatet e ekranit si kjo, 1023 00:45:29,310 --> 00:45:31,910 por kjo është Gdb vetëm duke u anal dhe duke na thënë se çfarë po ndodh. 1024 00:45:31,910 --> 00:45:34,451 Ju nuk mund të vërtetë kanë për t'u shqetësuar në lidhje me këto detaje të drejtë tani. 1025 00:45:34,451 --> 00:45:36,890 Por ajo që është me të vërtetë e ftohtë në lidhje Gdb, po e bëra këtë again-- 1026 00:45:36,890 --> 00:45:42,100 Kontrolli-L hap screen-- më lejoni të shkoj përpara dhe të tipit "thyejnë kryesore," në këtë mënyrë, 1027 00:45:42,100 --> 00:45:45,743 kur unë hit Enter, duke vendosur se çfarë është quhet një pikë pushim në noswap.c, 1028 00:45:45,743 --> 00:45:51,270 Linja 16, e cila eshte ku Gdb motive nga programin tim në të vërtetë 1029 00:45:51,270 --> 00:45:53,070 është, funksioni im në të vërtetë është. 1030 00:45:53,070 --> 00:45:55,070 Këtë ne do të injorojë për tani por kjo është adresa 1031 00:45:55,070 --> 00:45:57,310 në kujtim në mënyrë specifike të këtij funksioni. 1032 00:45:57,310 --> 00:46:00,240 Deri tani, kur unë lloji drejtuar, njoftim se çfarë është ftohtë këtu. 1033 00:46:00,240 --> 00:46:05,650 Programi im thyen në linjë të I tha Gdb për pushim ekzekutimin në. 1034 00:46:05,650 --> 00:46:09,850 Kështu që unë nuk duhet të ndryshojë tani kodin tim, shtoni disa printf-së, përpiluar atë, përsëritja 1035 00:46:09,850 --> 00:46:13,300 atë, të ndryshojë, shtoni disa printf-së, shpëtuar atë, përpiluar atë, e drejtuar atë. 1036 00:46:13,300 --> 00:46:18,100 Unë vetëm mund të ecin nëpër programin tim hap pas hapi pas hapi me shpejtësi të njeriut, 1037 00:46:18,100 --> 00:46:20,880 jo në lloj Intel-brenda të shpejtësisë. 1038 00:46:20,880 --> 00:46:24,580 >> Deri tani vini re këtë linjë duket këtu, dhe në qoftë se unë kthehem 1039 00:46:24,580 --> 00:46:27,800 në programin tim në gedit, vini re se që është në të vërtetë 1040 00:46:27,800 --> 00:46:29,280 Linja e parë e kodit. 1041 00:46:29,280 --> 00:46:31,240 Ka linjë 16 në gedit. 1042 00:46:31,240 --> 00:46:34,610 Ka linjë 16 brenda Gdb, dhe madje edhe edhe pse këtë ndërfaqe të zezë dhe të bardhë 1043 00:46:34,610 --> 00:46:37,760 nuk është gati si përdorues miqësore, kjo do të thotë 1044 00:46:37,760 --> 00:46:41,680 që linja 16 nuk është ekzekutuar ende, por është gati të jetë. 1045 00:46:41,680 --> 00:46:46,220 Pra, me të vërtetë, nëse unë lloji të shtypura x, jo printf, vetëm të shtypura x, 1046 00:46:46,220 --> 00:46:50,730 Kam marrë disa vlera fals atje e zero, sepse x nuk është nisur ende. 1047 00:46:50,730 --> 00:46:54,760 Kështu që unë jam duke shkuar për të llojit tjetër, ose, në qoftë se ju duan të jenë të dashuroj, vetëm n për të ardhshëm. 1048 00:46:54,760 --> 00:46:59,090 Por, kur unë lloji tjetër të hyjë, tani njoftim që shkon në linjë 17. 1049 00:46:59,090 --> 00:47:02,840 Pra, logjikisht, në qoftë se unë kam ekzekutuar Linja 16 dhe unë tani lloji shtypura x, 1050 00:47:02,840 --> 00:47:03,640 çfarë duhet të shoh? 1051 00:47:03,640 --> 00:47:04,970 1052 00:47:04,970 --> 00:47:05,520 Një. 1053 00:47:05,520 --> 00:47:07,820 >> Dhe tani kjo është pa dyshim konfuze. 1054 00:47:07,820 --> 00:47:11,260 $ 2 është vetëm një mënyrë e sofistikuar për të, në qoftë se ju duan për të referuar në këtë vlerë më vonë, 1055 00:47:11,260 --> 00:47:12,510 ju mund të thoni "dollar të nënshkruajë dy." 1056 00:47:12,510 --> 00:47:13,480 Është si një referencë mbrapa. 1057 00:47:13,480 --> 00:47:14,570 Por tani për tani, vetëm injorojnë atë. 1058 00:47:14,570 --> 00:47:17,070 Ajo që është interesante është ajo që është në të djathtë e shenjë të barabartë. 1059 00:47:17,070 --> 00:47:21,000 Dhe tani, nëse unë lloji tjetër përsëri dhe y të shtypura, unë duhet të shoh 2. 1060 00:47:21,000 --> 00:47:23,870 Unë gjithashtu mund të tani të shtypura x përsëri, dhe sinqerisht, 1061 00:47:23,870 --> 00:47:27,130 në qoftë se unë jam duke marrë një pak të hutuar se ku unë jam, unë mund të shtypni listën për listën 1062 00:47:27,130 --> 00:47:30,590 dhe vetëm shikoni disa kontekst rreth Pika që unë jam në të vërtetë në të. 1063 00:47:30,590 --> 00:47:35,180 Dhe tani unë mund të shtypni ardhshëm, dhe atje x është 1. 1064 00:47:35,180 --> 00:47:36,300 Tani unë lloji tjetër. 1065 00:47:36,300 --> 00:47:37,710 Oh, y është 2. 1066 00:47:37,710 --> 00:47:40,750 Dhe përsëri, kjo është konfuze, sepse prodhimit Gdb-së 1067 00:47:40,750 --> 00:47:43,044 është duke u perziere me prodhim time. 1068 00:47:43,044 --> 00:47:45,710 Por në qoftë se ju mbani në mend, nga glancing mbrapa dhe me radhë në kodin tuaj 1069 00:47:45,710 --> 00:47:47,740 ose hedhjen atë krah nga ana e ndoshta, ju do të 1070 00:47:47,740 --> 00:47:51,020 shihni se me të vërtetë unë jam vetëm shkelën përmes programit tim. 1071 00:47:51,020 --> 00:47:54,620 >> Por, vini re çfarë ndodh më pas, fjalë për fjalë. 1072 00:47:54,620 --> 00:47:56,380 Ja linjë 22. 1073 00:47:56,380 --> 00:48:01,315 Më lejoni të shkoj mbi të, duke lëvizur në deri 23, dhe në qoftë se unë të shtypura x tani, ende një. 1074 00:48:01,315 --> 00:48:03,890 Dhe në qoftë se unë të shtypura y tani, ende një. 1075 00:48:03,890 --> 00:48:05,820 Pra, kjo nuk është një ushtrim i dobishëm. 1076 00:48:05,820 --> 00:48:07,450 Pra, le të bëj sërish këtë. 1077 00:48:07,450 --> 00:48:10,069 Më lejoni të kthehem deri në lartë dhe lloji kandidojë përsëri. 1078 00:48:10,069 --> 00:48:12,110 Dhe kjo e thënë e programit që është duke u debugged 1079 00:48:12,110 --> 00:48:14,109 ka filluar tashmë, filluar nga fillimi. 1080 00:48:14,109 --> 00:48:15,420 Po, le ta bëjmë këtë përsëri. 1081 00:48:15,420 --> 00:48:22,000 Dhe këtë herë le të bëjë tjetër, tjetër, tjetër, tjetër, tjetër, 1082 00:48:22,000 --> 00:48:24,180 por tani gjërat interesante. 1083 00:48:24,180 --> 00:48:27,760 Tani unë dua të futemi në swap, kështu që unë nuk e tipit tjetër. 1084 00:48:27,760 --> 00:48:34,380 Unë lloji hap, dhe tani vërejmë ka kërceu mua në linjë noswap.c 33. 1085 00:48:34,380 --> 00:48:37,240 Nëse unë kthehem në gedit, çfarë është linjë 33? 1086 00:48:37,240 --> 00:48:40,500 Kjo është e para aktuale linjë e kodit brenda shkëmbim. 1087 00:48:40,500 --> 00:48:44,150 E cila është e mirë, sepse tani unë mund të lloj thes rreth dhe për të marrë kurioz 1088 00:48:44,150 --> 00:48:46,052 se çfarë po ndodh me të vërtetë në atje. 1089 00:48:46,052 --> 00:48:46,760 Më lejoni të shtypura tmp. 1090 00:48:46,760 --> 00:48:47,770 1091 00:48:47,770 --> 00:48:48,800 Whoa. 1092 00:48:48,800 --> 00:48:51,438 Pse tmp kanë disa çmendur, vlera fals mbeturinave? 1093 00:48:51,438 --> 00:48:54,579 1094 00:48:54,579 --> 00:48:56,120 Audienca: Ajo nuk është nisur. 1095 00:48:56,120 --> 00:48:57,150 Kryetari 1: Kjo nuk është nisur. 1096 00:48:57,150 --> 00:49:00,270 Dhe me të vërtetë, kur ju drejtuar një program, ju jeni të dhënë një bandë e tërë e kujtesës 1097 00:49:00,270 --> 00:49:03,392 nga sistemi operues, por qe nuk kanë nisur asnjë vlerat, 1098 00:49:03,392 --> 00:49:05,600 kështu që çdo gjë që ju jeni bit duke parë këtu, edhe pse kjo është 1099 00:49:05,600 --> 00:49:07,770 kjo negative çmendur e madhe numër, thjesht do të thotë 1100 00:49:07,770 --> 00:49:10,750 se ata janë mbeturinat nga disa përdorimi i mëparshëm i kësaj RAM, 1101 00:49:10,750 --> 00:49:13,050 edhe pse unë nuk e kanë veten e nevojshme atë ende. 1102 00:49:13,050 --> 00:49:17,086 Deri tani unë jam duke shkuar për të shkuar përpara dhe lloji tjetër, dhe në qoftë se unë tani lloji tmp shtypura, 1103 00:49:17,086 --> 00:49:17,835 çfarë duhet të shoh? 1104 00:49:17,835 --> 00:49:19,570 1105 00:49:19,570 --> 00:49:23,360 Çfarëdo vlera e një ishte, a është argumenti i parë, vetëm 1106 00:49:23,360 --> 00:49:25,550 si x ishte i pari gjë duke kaluar në, 1107 00:49:25,550 --> 00:49:30,450 kështu a dhe x duhet të jetë njëjtë, kështu shtypura tmp duhet të printoni më një të tillë. 1108 00:49:30,450 --> 00:49:36,360 >> Pra, ajo që ju do të shihni në grup e problemeve tre është një tutorial në terezi në Gdb, 1109 00:49:36,360 --> 00:49:40,020 por e kuptojnë se kjo është fillimi e një vështrim në një mjet që do të vërtetë 1110 00:49:40,020 --> 00:49:42,774 të ju ndihmojë zgjidhjen e problemeve shumë më shumë në mënyrë efektive. 1111 00:49:42,774 --> 00:49:44,690 Ajo që ne jemi në fund të fundit do të bëjë të mërkurën 1112 00:49:44,690 --> 00:49:48,180 po fillojnë të zhvishem përsëri disa shtresa dhe për të hequr disa rrota të trajnimit. 1113 00:49:48,180 --> 00:49:50,496 Kjo gjë quhet string që ne kemi përdorur për disa kohë, 1114 00:49:50,496 --> 00:49:53,370 ne do të ngadalë të marrë se larg nga ju dhe të fillojnë të flasin për 1115 00:49:53,370 --> 00:49:55,725 diçka më shumë esoterically i njohur si char *, 1116 00:49:55,725 --> 00:49:59,550 por ne jemi duke shkuar për të bërë këtë të bukur dhe të butë në fillim, edhe pse pointers, 1117 00:49:59,550 --> 00:50:02,730 si ata janë të thirrur, mund të bëjë disa gjëra shumë të këqija, nëse të abuzuar, 1118 00:50:02,730 --> 00:50:06,040 duke shikuar në një claymation të vogël nga miku ynë Nick Parlante nga Stanford 1119 00:50:06,040 --> 00:50:09,670 Universiteti, një profesor në kompjuter shkenca që e vënë së bashku këtë vrojtim 1120 00:50:09,670 --> 00:50:11,075 e ajo që është për të ardhur këtë mërkurën. 1121 00:50:11,075 --> 00:50:12,196 1122 00:50:12,196 --> 00:50:13,400 >> [VIDEO Playback] 1123 00:50:13,400 --> 00:50:13,900 -Hej, Binky. 1124 00:50:13,900 --> 00:50:14,930 1125 00:50:14,930 --> 00:50:15,780 Wake up. 1126 00:50:15,780 --> 00:50:17,240 Është koha për argëtim akrep. 1127 00:50:17,240 --> 00:50:18,260 1128 00:50:18,260 --> 00:50:19,350 >> -Çfarë Është se? 1129 00:50:19,350 --> 00:50:21,150 Mëso për pointers? 1130 00:50:21,150 --> 00:50:22,050 Oh, Goody! 1131 00:50:22,050 --> 00:50:22,897 1132 00:50:22,897 --> 00:50:23,730 [VIDEO END rishikim] 1133 00:50:23,730 --> 00:50:25,396 Kryetari 1: Kjo ju pret të mërkurën. 1134 00:50:25,396 --> 00:50:26,440 Ne do të shohim ju pastaj. 1135 00:50:26,440 --> 00:50:27,106 [VIDEO Playback] 1136 00:50:27,106 --> 00:50:30,420 -Dhe Tani, Thellë Mendime, nga Daven Farnham. 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> -Pse Jemi mësuar C? 1139 00:50:35,900 --> 00:50:36,785 Pse nuk e A +? 1140 00:50:36,785 --> 00:50:38,550 1141 00:50:38,550 --> 00:50:40,910 >> [Qeshura] 1142 00:50:40,910 --> 00:50:42,160 >> [VIDEO END rishikim]