1 00:00:00,000 --> 00:00:12,040 >> [השמעת מוסיקה] 2 00:00:12,040 --> 00:00:16,460 >> 1 SPEAKER: בסדר, זה CS50, וזה הוא ההתחלה של שבוע ארבעה, 3 00:00:16,460 --> 00:00:20,420 וכפי שאולי שמעו או לקרוא, העולם כבר הסתיים. 4 00:00:20,420 --> 00:00:23,520 הולך בכל רחבי האינטרנט יש לו ידע ומודעות היו 5 00:00:23,520 --> 00:00:27,100 של באג בתכנית, שפת תכנות בשם Bash. 6 00:00:27,100 --> 00:00:32,729 זה כבר ממותג להפליא כShellshock, או דלת Bash, 7 00:00:32,729 --> 00:00:35,485 אבל מאמרים כמו אלה לא היה נדיר. 8 00:00:35,485 --> 00:00:38,807 ואכן, רבים מהם להביא זכרונות האחוריים של Heartbleed, 9 00:00:38,807 --> 00:00:41,640 שאולי שמתו לב ב לחץ חזרה באביב האחרון, ש 10 00:00:41,640 --> 00:00:43,980 היה דומה למדי דרמטי. 11 00:00:43,980 --> 00:00:47,110 עכשיו של אלו מכם כאן היום, כמה מכם יש לי, 12 00:00:47,110 --> 00:00:50,330 גם אם אתה לא מבין את מה ש זה הכול העניין של, שמע על Shellshock? 13 00:00:50,330 --> 00:00:51,370 14 00:00:51,370 --> 00:00:54,245 בסדר, וכמה מכם יש להם מחשבים שהם פגיעים? 15 00:00:54,245 --> 00:00:55,680 16 00:00:55,680 --> 00:01:00,250 אישור, לא צריך להיות הרבה, הרבה יותר ידיים עד עכשיו, מסיבות שנראה. 17 00:01:00,250 --> 00:01:02,580 >> בואו נסתכל על מה נמשך בתקשורת 18 00:01:02,580 --> 00:01:05,304 ולאחר מכן להסביר את זה קצת כאן לנו מבחינה טכנית. 19 00:01:05,304 --> 00:01:07,670 20 00:01:07,670 --> 00:01:11,250 >> SPEAKER 2: יש לי מומחי אבטחה הזהיר כי יכל פגם חמור 21 00:01:11,250 --> 00:01:15,650 להיות על מנת להשפיע על מאות מיליון של משתמשי האינטרנט בעולם. 22 00:01:15,650 --> 00:01:20,600 אז מה הוא באג שהיה בדיוק כינוי Shellshock, ומה הוא עושה? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 ובכן, Shellshock ידוע גם בשם באג Bash, תוכנה זה מנצל. 25 00:01:28,910 --> 00:01:33,230 האקרים משתמשים הווירוס לסריקה פגיע מערכות הפעלה לינוקס ויוניקס 26 00:01:33,230 --> 00:01:36,300 מערכות הפעלה ולאחר מכן להדביק אותם. 27 00:01:36,300 --> 00:01:38,730 Bash הוא מעטפת שורת הפקודה. 28 00:01:38,730 --> 00:01:43,460 זה מאפשר לי נושא משתמשי פקודות להשיק תוכניות ותכונות בתוכנה 29 00:01:43,460 --> 00:01:45,250 על ידי הקלדת טקסט. 30 00:01:45,250 --> 00:01:49,980 זה משמש בדרך כלל על ידי מתכנתים, ו לא צריך להיות פתוח לעולם הרחב יותר, 31 00:01:49,980 --> 00:01:51,590 למרות Shellshock משנה ש. 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> ובכן, worringly, כמה אנליסטים להזהיר שזה יכול להיות איום גדול יותר, 34 00:01:57,910 --> 00:02:01,580 בגלל Shellshock מאפשר מלא שליטה של ​​מכונה נגועה, 35 00:02:01,580 --> 00:02:06,030 ואילו Heartbleed מותר רק האקרים כדי לרגל במחשבים. 36 00:02:06,030 --> 00:02:09,130 זה כל כך רציני, זה דורג 10 מתוך 10 37 00:02:09,130 --> 00:02:11,900 לחומרה על ידי הלאומי מסד נתוני פגיעות. 38 00:02:11,900 --> 00:02:15,530 39 00:02:15,530 --> 00:02:20,015 2/3 של כל שרתי האינטרנט נמצא ב סיכון, כולל כמה מחשבי מק. 40 00:02:20,015 --> 00:02:22,760 41 00:02:22,760 --> 00:02:25,600 ובכן, לוודא שאתה תיקון המערכות שלך עכשיו. 42 00:02:25,600 --> 00:02:29,330 כל אחד אירוח ריצת אתר מערכות הפעלה המושפעות 43 00:02:29,330 --> 00:02:31,800 צריך לנקוט בפעולה בהקדם האפשרי. 44 00:02:31,800 --> 00:02:35,390 כל מי שיכול להרשות לעצמו את זה צריך להיראות ליישום הניטור ואינטרנט שלהם 45 00:02:35,390 --> 00:02:37,355 חומות אש כדי להשגיח על כל התקפות. 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 SPEAKER 3: הדבר הגרוע ביותר שיכול לקרות הוא 48 00:02:41,770 --> 00:02:45,080 שמישהו היה כותב קוד ש באופן אוטומטי הייתי הולך ולסרוק 49 00:02:45,080 --> 00:02:48,280 האינטרנט וישפיע כל המחשבים האלה. 50 00:02:48,280 --> 00:02:50,710 וברגע שהם עושים את זה, גם, הדבר הגרוע ביותר שהם יכולים לעשות 51 00:02:50,710 --> 00:02:53,300 הוא פשוט למחוק הכל, או לסגור את האתרים. 52 00:02:53,300 --> 00:02:55,360 כדי שנוכל לראות נזק מנקודת מבט זו, 53 00:02:55,360 --> 00:02:58,300 שבו תהיה לנו אנשים זדוניים שרק תחליט לגרום הרס 54 00:02:58,300 --> 00:03:02,534 על ידי הבאת מערכות למטה או מחיקה קבצים, וכל מיני דברים כאלה. 55 00:03:02,534 --> 00:03:05,200 SPEAKER 2: יש כאלה שאומרים שזה אחד הקשים ביותר למדידה 56 00:03:05,200 --> 00:03:08,080 באגים בשנים, וזה יכול לקחת שבועות או אפילו 57 00:03:08,080 --> 00:03:10,820 חודשים כדי לקבוע את ההשפעה האולטימטיבית שלה. 58 00:03:10,820 --> 00:03:12,180 59 00:03:12,180 --> 00:03:15,560 >> 1 SPEAKER: אז כל זה נכון, אבל הדבר המצחיק כמעט בכל הוא, 60 00:03:15,560 --> 00:03:18,330 של הדימויים שראית, מלבד אולי המקלדת, 61 00:03:18,330 --> 00:03:20,930 יש מה לעשות עם באג כלשהו. 62 00:03:20,930 --> 00:03:23,960 שרתים וחוטי חשמל וכן הלאה, זה קשור סוג של נקודת השקה, 63 00:03:23,960 --> 00:03:27,410 אבל בליבה זה בעצם די מכיר את מה שקורה כאן. 64 00:03:27,410 --> 00:03:30,050 למעשה, תן לי ללכת ל מכשיר CS50 שלנו. 65 00:03:30,050 --> 00:03:32,910 תן לי ללכת קדימה ולמקסם חלון המסוף כאן. 66 00:03:32,910 --> 00:03:36,020 אתם וכבר משתמשים זו, או משובץ גרסתו, 67 00:03:36,020 --> 00:03:39,460 בgedit כדי לכתוב תוכניות, להקליד פקודות, וכן הלאה, 68 00:03:39,460 --> 00:03:43,690 וזה בעצם, ויש לו כבר שבועות, Bash, B-A-S-H. 69 00:03:43,690 --> 00:03:46,890 זה Bourne-שוב להפגיז, וזה רק דרך מפוארת לומר, 70 00:03:46,890 --> 00:03:50,220 זו היא תכנית שיש לי מהבהב הפקודה, ביעילות, 71 00:03:50,220 --> 00:03:51,970 שיושב שם ומחכה עבור קלט בשבילך. 72 00:03:51,970 --> 00:03:53,920 וזה את הפקודה ממשק שורה שדרכו 73 00:03:53,920 --> 00:03:57,650 אתם כבר פועלים פקודות ו סופו של דבר להרכיב ולאחר מכן פועל 74 00:03:57,650 --> 00:03:58,400 תוכניות. 75 00:03:58,400 --> 00:04:01,320 >> אבל Bash הוא גם תכנות שפה במובן הבא. 76 00:04:01,320 --> 00:04:05,460 אתה יודע שיש פקודות כמו cd וls וגם מצרימות ואחרים, 77 00:04:05,460 --> 00:04:09,580 אבל אתה יכול להגדיר פקודות משלך על ידי יישומם בBash. 78 00:04:09,580 --> 00:04:11,420 עכשיו אנחנו לא הולכים להיכנס לפירוט רב 79 00:04:11,420 --> 00:04:16,089 כלBash שפת תכנות, אבל יודע, למשל, שברגע, 80 00:04:16,089 --> 00:04:17,607 אין פקודה בשם "שלום". 81 00:04:17,607 --> 00:04:19,440 אז ניתן למצוא אותו ב אחד מהחבילות אלה. 82 00:04:19,440 --> 00:04:20,856 זה לא מותקן במחשב שלי. 83 00:04:20,856 --> 00:04:21,870 שאל את המנהל שלך. 84 00:04:21,870 --> 00:04:26,030 אבל אם אני רוצה שיהיה תכנית בשם "שלום" בBash או בהפקודה, 85 00:04:26,030 --> 00:04:30,810 אני באמת יכול להשתמש בתחביר זה ממש כמו ג זה לא בדיוק אותו הדבר, 86 00:04:30,810 --> 00:04:35,020 אבל זה נראה די דומה ל פונקציה, אם כי חסר כמה פרטים. 87 00:04:35,020 --> 00:04:38,090 לא קורים כלום, אבל עכשיו, אם אני מקליד "שלום," 88 00:04:38,090 --> 00:04:40,960 למעשה אתה יכול לכתוב תכנית, לא בC, לא בג'אווה, 89 00:04:40,960 --> 00:04:44,280 לא בתכנות אחר שפה, אבל בBash עצמו. 90 00:04:44,280 --> 00:04:47,630 >> עכשיו המפתח כאן הוא שכתבתי שם רציתי לתת פקודה חדשה זו, 91 00:04:47,630 --> 00:04:50,820 והסוגריים הם גם סמלי של זה להיות פונקציה. 92 00:04:50,820 --> 00:04:54,010 במאמר מוסגר, אתה יכול גם לעשות כיף דברים, ולמעשה, אפילו על מערכת ההפעלה Mac, 93 00:04:54,010 --> 00:04:55,620 זו היא תכנית בשם מסוף. 94 00:04:55,620 --> 00:04:58,800 זה מגיע מובנה בתוך כל אחד אחר מחשב שיש לו מק בחדר הזה, 95 00:04:58,800 --> 00:05:03,640 ואתה יכול לעשות דברים דומים בMac מערכת הפעלה, אבל אתה יכול ללכת יותר מעבר לזה. 96 00:05:03,640 --> 00:05:07,110 וזה קצת משיק, אבל זה סוג של כיף. 97 00:05:07,110 --> 00:05:09,715 נזכרתי הבוקר, כאשר חושבים זה דרך, 98 00:05:09,715 --> 00:05:13,279 של משחק קטן נהגתי לשחק עם אחד TFS לשעבר של CS50 99 00:05:13,279 --> 00:05:16,570 לפי כל פעם שהוא היה קם מ המקלדת שלו עם המסך שלו לא נעולה, 100 00:05:16,570 --> 00:05:23,611 הייתי לבצע פקודה כמו זה- "להגיד שלום." 101 00:05:23,611 --> 00:05:26,610 ועכשיו כל פעם שהוא חזר לו מקלדת אחרי שפיניתי את המסך 102 00:05:26,610 --> 00:05:27,985 והוא היה מתיישב, תנסה לעשות קצת עבודה, 103 00:05:27,985 --> 00:05:29,250 רשימה של התוכן directory-- 104 00:05:29,250 --> 00:05:29,510 >> [אודיו השמעה] 105 00:05:29,510 --> 00:05:30,010 >> -שלום. 106 00:05:30,010 --> 00:05:31,621 107 00:05:31,621 --> 00:05:32,120 שלום. 108 00:05:32,120 --> 00:05:35,030 >> 1 SPEAKER: אז, בהגינות, זה לא היה ממש "שלום". 109 00:05:35,030 --> 00:05:36,894 בדרך כלל זה היה משהו דומה יותר לthat-- 110 00:05:36,894 --> 00:05:37,560 [אודיו השמעה] 111 00:05:37,560 --> 00:05:37,750 -Beep. 112 00:05:37,750 --> 00:05:39,320 1 SPEAKER: --that אני would-- כך המחשב שלו היית 113 00:05:39,320 --> 00:05:42,170 לקלל אותו כל פעם שהוא למעשה התיישב ליד המקלדת שלו. 114 00:05:42,170 --> 00:05:46,265 ומהר מאוד הוא הבין לא לעזוב את המסך שלו נעול. 115 00:05:46,265 --> 00:05:48,730 אבל זה מצביע על הסוג כיף מטופש שאתה 116 00:05:48,730 --> 00:05:50,210 יכול להיות עם משהו כמו Bash. 117 00:05:50,210 --> 00:05:52,770 אבל זה קצת יותר רציני, כדי להיות בטוח, יותר מזה. 118 00:05:52,770 --> 00:05:57,235 ולמעשה, זו אחת רוב החרקים מסוכנים וארוך טווח 119 00:05:57,235 --> 00:05:58,860 זה באמת פגע בעולם גלובלי. 120 00:05:58,860 --> 00:06:02,060 באג זה קיים כבר עבור חלק 20 שנים, 121 00:06:02,060 --> 00:06:05,780 ואתה תהיה פגע בסתם בכל רגע והפשטות היחסית שלה. 122 00:06:05,780 --> 00:06:07,990 >> אז זה נציג הפקודה שאם אתה 123 00:06:07,990 --> 00:06:10,448 בעלי מק, פשוטו כמשמעו, ברגע זה ממש כאשר יש לך המכסה שלך פתוח, 124 00:06:10,448 --> 00:06:12,940 אתה יכול לנסות להקליד שב תכנית בשם מסוף. 125 00:06:12,940 --> 00:06:15,410 מסוף נמצא תחת יישומי Utilities-- 126 00:06:15,410 --> 00:06:18,790 לשם שינוי, אין לי למשתמשי Windows לדאוג threat-- המסוים הזה 127 00:06:18,790 --> 00:06:22,310 אבל אלו מכם עם מחשבי מקינטוש יכולים להקליד זה לחלון כמו שאני אעשה כאן, 128 00:06:22,310 --> 00:06:24,210 ואם אתה מקליד כי לתכנית זו 129 00:06:24,210 --> 00:06:28,830 נקרא מסוף, כמו שאני אעשה עכשיו, אם אתה רואה את המילה "פגיע" 130 00:06:28,830 --> 00:06:32,200 המחשב שלך הוא פגיע לניצול. 131 00:06:32,200 --> 00:06:33,850 >> עכשיו מה זה אומר בעצם? 132 00:06:33,850 --> 00:06:35,870 ואת זה הוא אמנם כמה תחביר די מטורף, 133 00:06:35,870 --> 00:06:39,050 אבל בואו לפחות להוציא חלק מההיבטים המעניינים. 134 00:06:39,050 --> 00:06:42,567 אז יש כמה תחביר שנראה קצת מוכר, לפחות מC 135 00:06:42,567 --> 00:06:43,950 ותכנות באופן כללי יותר. 136 00:06:43,950 --> 00:06:47,550 אני רואה כמה סוגריים, פסיק, סוגריים מסולסלים, וכאלה, 137 00:06:47,550 --> 00:06:50,820 אבל מתברר שזה דבר טיפשי כאן בצהוב 138 00:06:50,820 --> 00:06:53,580 היא למעשה פונקציה שלא עושה כלום. 139 00:06:53,580 --> 00:06:57,840 אמצעי המעי הגס לא לעשות כלום, ו פסיק אומר להפסיק לעשות שום דבר. 140 00:06:57,840 --> 00:07:00,250 אז בתוך אלה סוגריים מסולסלים, העובדה 141 00:07:00,250 --> 00:07:02,440 שיש לי שווה לחתום לצד שמאל, זה 142 00:07:02,440 --> 00:07:05,500 הוא למעשה יצירת הפקודה, או משתנה, 143 00:07:05,500 --> 00:07:09,520 בשם x, והקצאה את שצהוב קצת קוד שם. 144 00:07:09,520 --> 00:07:14,040 זה יכול להיות משהו כמו "הד שלום "או" אומר צפצוף "או משהו 145 00:07:14,040 --> 00:07:15,120 דומה לזה. 146 00:07:15,120 --> 00:07:17,780 אבל שים לב, אם העיניים שלך לנדוד יותר ימינה, 147 00:07:17,780 --> 00:07:22,150 יש עוד הקו הזה מאשר רק בסוף פסיק ש. 148 00:07:22,150 --> 00:07:25,160 "הד פגיע," ולאחר מכן מעבר לכך יש אפילו יותר. 149 00:07:25,160 --> 00:07:26,530 עוד נקודה ופסיק, -c bash :. 150 00:07:26,530 --> 00:07:28,120 151 00:07:28,120 --> 00:07:34,050 >> אז סיפור ארוך קצר, הקו הזה של קוד הוא 152 00:07:34,050 --> 00:07:36,660 מספיק למשכנע מחשב זה 153 00:07:36,660 --> 00:07:39,830 פגיע לעושה משהו שאתה רוצה לעשות את זה, 154 00:07:39,830 --> 00:07:44,290 בגלל שיש באג בפיו Bash למרות Bash היה אמור להפסיק 155 00:07:44,290 --> 00:07:48,980 קווי קריאה של ימין הפקודה שם אחרי הטקסט הצהוב, 156 00:07:48,980 --> 00:07:52,520 לבאג בן 20 פלוס, Bash למעשה היה קריאה 157 00:07:52,520 --> 00:07:56,780 מעבר לפסיק ושדי הרבה עושה את מה שהוא אמר לי. 158 00:07:56,780 --> 00:07:59,070 >> אז מה המשמעות של שסופו של דבר? 159 00:07:59,070 --> 00:08:01,340 אני רק אמרתי "הד שלום" או "הד פגיע," 160 00:08:01,340 --> 00:08:05,449 אבל מה אם עשה משהו למעשה זדוני, כמו * -rf rm, 161 00:08:05,449 --> 00:08:07,240 שלא אתה עלול אי פעם שהקלדת לפני, 162 00:08:07,240 --> 00:08:08,920 ולמען אמת אתה כנראה לא צריך מוקדם מדי, 163 00:08:08,920 --> 00:08:10,700 כי אתה יכול לעשות הרבה נזק עם זה. 164 00:08:10,700 --> 00:08:11,210 למה? 165 00:08:11,210 --> 00:08:12,990 rm עושה מה, כמובן? 166 00:08:12,990 --> 00:08:14,270 מסיר. 167 00:08:14,270 --> 00:08:15,930 * אומר מה? 168 00:08:15,930 --> 00:08:16,430 כל. 169 00:08:16,430 --> 00:08:18,180 אז זה מה שנקרא קלף פראי, אז זה אומר 170 00:08:18,180 --> 00:08:20,410 למחוק את כל מה ב הספרייה הנוכחית. 171 00:08:20,410 --> 00:08:23,379 -r קורה למתכוון רקורסיבית, מה שאומר שאם מה שאתה מוחק 172 00:08:23,379 --> 00:08:26,420 היא ספרייה, ובתוך משם הוא קבצים אחרים וספריות אחרות, 173 00:08:26,420 --> 00:08:28,950 באופן רקורסיבי לצלול לתוך שם ולמחוק את כל זה. 174 00:08:28,950 --> 00:08:31,040 ו-f הוא הגרוע מכולם. 175 00:08:31,040 --> 00:08:32,580 מישהו יודע מה -f אומר כאן? 176 00:08:32,580 --> 00:08:33,690 177 00:08:33,690 --> 00:08:34,360 חיל. 178 00:08:34,360 --> 00:08:37,830 אז תכריח את האמצעים, אפילו אם זה רעיון רע, 179 00:08:37,830 --> 00:08:40,939 לעשות את זה מבלי להציג הודעתי לאישור נוסף. 180 00:08:40,939 --> 00:08:43,230 אז, אתה יודע, אנחנו צוחקים על זה, אבל בכנות, אני כנראה 181 00:08:43,230 --> 00:08:44,972 הקלד מספר פעמים זה יום, כי המציאות 182 00:08:44,972 --> 00:08:47,210 הוא שזו הדרך המהירה ביותר ל למחוק כל מיני דברים שלמים. 183 00:08:47,210 --> 00:08:48,590 אבל גם אני עשיתי קצת נזק. 184 00:08:48,590 --> 00:08:53,100 >> אבל אם היית להערים על מחשב להגדרה כמה משתנים טיפש 185 00:08:53,100 --> 00:08:56,810 או פונקציה שנקראת x, אבל אז הטעיית המחשב לביצוע 186 00:08:56,810 --> 00:09:00,030 מעבר לגבולות ש פונקציה, מעבר לנקודה ופסיק ש, 187 00:09:00,030 --> 00:09:04,430 אכן אתה יכול להערים מחשב לביצוע משהו כמו rm -rf 188 00:09:04,430 --> 00:09:07,810 או פקודת דוא"ל או פקודת ההעתקה. 189 00:09:07,810 --> 00:09:11,400 כל דבר שאתה ממש יכול לעשות עם מחשב, בין אם מדובר במחיקת קבצים, 190 00:09:11,400 --> 00:09:15,350 יצירת קבצים, דואר זבל מישהו, תוקף כמה שרת מרחוק, 191 00:09:15,350 --> 00:09:17,190 אם אתה יכול לבטא את זה עם הפקודה, אתה 192 00:09:17,190 --> 00:09:19,120 יכול להערים מחשב לתוך עושה את זה. 193 00:09:19,120 --> 00:09:21,510 >> עכשיו מה דוגמא של איך אתה יכול לעשות את זה? 194 00:09:21,510 --> 00:09:24,300 ובכן, יש הרבה של מחשבים על Bash ריצת האינטרנט. 195 00:09:24,300 --> 00:09:26,390 כל משתמשים שלנו Mac הם ביניהם. 196 00:09:26,390 --> 00:09:30,390 הרבה שרתי Linux הם בין גם אותם, ושרתי יוניקס. 197 00:09:30,390 --> 00:09:32,630 Windows מקבלת שוב יחסית מהקרס 198 00:09:32,630 --> 00:09:34,590 אלא אם כן התקנת תוכנה מיוחדת. 199 00:09:34,590 --> 00:09:37,130 עכשיו הרבה שרתים, עבור למשל, שרתי אינטרנט מנוהלים, 200 00:09:37,130 --> 00:09:39,840 ולמעשה לינוקס היא אולי רוב מערכת הפעלה הפופולרית 201 00:09:39,840 --> 00:09:43,060 לרוץ על מחשבים באינטרנט שמשרתים את דפי אינטרנט. 202 00:09:43,060 --> 00:09:44,910 עכשיו כפי שנראה מאוחר יותר בסמסטר, כאשר 203 00:09:44,910 --> 00:09:48,470 אתה שולח בקשה מ Chrome browser-- שלך, 204 00:09:48,470 --> 00:09:50,790 Internet Explorer, whatever-- לשרת מרוחק, 205 00:09:50,790 --> 00:09:53,730 מתברר שלמרות ש שזה עתה הקליד www.example.com, 206 00:09:53,730 --> 00:09:59,590 הדפדפן שלך שולח הודעה זה קצת יותר מסתורי, כמו זה. 207 00:09:59,590 --> 00:10:01,239 >> אבל שים לב קצת משהו מוזר. 208 00:10:01,239 --> 00:10:03,030 שתי השורות הראשונות אף פעם לא ראיתי לפני, 209 00:10:03,030 --> 00:10:04,904 אבל הם לא נראים במיוחד מאיים. 210 00:10:04,904 --> 00:10:08,030 אבל שים לב למה שנגנבתי לשורה השלישית כאן. 211 00:10:08,030 --> 00:10:13,390 אם בחור רע היה לשלוח הודעה כמו זה מהמחשב שלו או שלה 212 00:10:13,390 --> 00:10:17,270 למקינטוש או פגיעים פגיע שרת לינוקס, 213 00:10:17,270 --> 00:10:21,580 הדבר המצחיק הוא שBash, כי הפקודה קטנה הפקודה פשוטה, 214 00:10:21,580 --> 00:10:27,450 הוא בכל מקום ולעתים קרובות משמש לביצוע במהות 215 00:10:27,450 --> 00:10:30,020 את התוכן של מסר שהוא מקבל. 216 00:10:30,020 --> 00:10:33,490 ולפי היגיון זה, אתה יכול טריק שרת אינטרנט, ולכן, 217 00:10:33,490 --> 00:10:36,370 על ידי שליחת משהו כמו User-Agent, אשר בדרך כלל 218 00:10:36,370 --> 00:10:38,300 צריך לומר: שמו של הדפדפן שלך. 219 00:10:38,300 --> 00:10:42,420 User-Agent Chrome, User-Agent אינטרנט Explorer, User-Agent פיירפוקס, זה 220 00:10:42,420 --> 00:10:44,590 רק הדפדפן שלך של דרך לזהות את עצמו. 221 00:10:44,590 --> 00:10:46,605 אבל אם בחור רע מאוד חוכמה אומרת, מ"מ מ"מ, אני 222 00:10:46,605 --> 00:10:47,930 לא הולך לספר לכם מה הדפדפן שלי הוא, 223 00:10:47,930 --> 00:10:50,888 אני במקום שאני הולך לשלוח לך את זה נסתר עתיד דבר עם -rf rm 224 00:10:50,888 --> 00:10:55,840 * בזה, אתה יכול, פשוטו כמשמעו, להערים שרת אינטרנט פגיע באינטרנט 225 00:10:55,840 --> 00:10:59,055 לביצוע בדיוק את זה ב יש למחיקה כל הקבצים. 226 00:10:59,055 --> 00:11:00,930 ולמען אמת, זה לא אפילו הגרוע ביותר שלה. 227 00:11:00,930 --> 00:11:01,763 אתה יכול לעשות כל דבר. 228 00:11:01,763 --> 00:11:04,480 אתה יכול להתחיל מופץ התקפות מסוג מניעת שירות 229 00:11:04,480 --> 00:11:07,030 אם שלח הודעה ל אשכולות של שרתי אינטרנט כולו 230 00:11:07,030 --> 00:11:10,256 ולאחר מכן היה לי כולם לרדת, ל למשל, על שרתי Harvard.edu, 231 00:11:10,256 --> 00:11:12,130 ואתה יכול למיין של מפץ לעזאזל מחוץ להם 232 00:11:12,130 --> 00:11:15,490 על ידי תנועה ברשת שהייתה מופעל אחרת על ידי האיש הרע הזה. 233 00:11:15,490 --> 00:11:18,760 >> אז, סיפור ארוך קצר, כמעט כולם בחדר הזה שבבעלותו מק 234 00:11:18,760 --> 00:11:20,240 הוא פגיע לזה. 235 00:11:20,240 --> 00:11:24,100 כסף הבטנה היא שאם אתה פועל בשרת אינטרנט במחשב הנייד שלך, 236 00:11:24,100 --> 00:11:27,780 ואלא אם כן יש בעצם מוגדר זה כדי לאפשר למשהו כמו SSH לתוכו, 237 00:11:27,780 --> 00:11:28,670 אתה בטוח בעצם. 238 00:11:28,670 --> 00:11:31,710 זה פגיע, אבל אין אחד מנסה להיכנס למחשב הנייד שלך, 239 00:11:31,710 --> 00:11:33,290 כך שאתה יכול סוג של להיות סמוך ובטוח. 240 00:11:33,290 --> 00:11:36,210 עם זאת, אפל בקרוב להיות עדכון לתקן את זה. 241 00:11:36,210 --> 00:11:39,660 העולם של לינוקס כבר שוחרר מספר התיקונים לפדורה ואובונטו 242 00:11:39,660 --> 00:11:43,790 וגרסאות אחרות של לינוקס, ואכן אם אתה מפעיל עדכון 50 במכשיר, 243 00:11:43,790 --> 00:11:45,930 אפילו שגם יהיה מעודכן ומתוקן. 244 00:11:45,930 --> 00:11:47,764 אבל שיש לו גם לא באמת היה פגיע, 245 00:11:47,764 --> 00:11:49,804 כי אלא אם כן יש לך התעסק קצת עם המכשיר 246 00:11:49,804 --> 00:11:52,770 ועשה את המחשב הנייד שלך בפומבי נגיש באינטרנט, שאינו 247 00:11:52,770 --> 00:11:54,910 כברירת מחדל, יש לך היה ממש בסדר כי 248 00:11:54,910 --> 00:11:56,890 של firewalling וטכניקות אחרות. 249 00:11:56,890 --> 00:12:01,000 >> אבל זה דוגמא קיצונית של באג שחיינו לפשוטו כמשמעו 20 250 00:12:01,000 --> 00:12:04,050 שנים, ומי יודע אם מישהו כל הזמן הזה ידע על זה? 251 00:12:04,050 --> 00:12:06,300 ולמעשה, זו אחת האתגרים הבסיסיים 252 00:12:06,300 --> 00:12:08,690 שנראה מאוחר יותר ב סמסטר על אבטחה, 253 00:12:08,690 --> 00:12:13,020 הוא שבדיוק כמו בעולם האמיתי, החבר 'ה הטוב נמצא בעמדת הנחיתות. 254 00:12:13,020 --> 00:12:16,500 כדי לשמור את הרעים החוצה, יש לנו ל לוודא שכל דלת נעולה, 255 00:12:16,500 --> 00:12:20,340 שכל חלון הוא מאובטח, ש כל נקודת הכניסה לבית 256 00:12:20,340 --> 00:12:21,980 הוא מאובטח כדי לשמור את הרעים החוצה. 257 00:12:21,980 --> 00:12:26,870 אבל מה עושה האיש הרע צריך לעשות בעצם להתפשר הבית שלך 258 00:12:26,870 --> 00:12:28,200 ולגנוב ממך? 259 00:12:28,200 --> 00:12:32,574 הוא או הוא פשוט צריך למצוא אחד נעול דלת, חלון אחד שבור, או משהו 260 00:12:32,574 --> 00:12:35,240 לאורך שורות אלה, וזה אותו דבר באבטחת מחשב. 261 00:12:35,240 --> 00:12:37,660 אנחנו יכולים לכתוב מיליונים שורות של קוד תכנות 262 00:12:37,660 --> 00:12:40,570 ולהוציא מאות או אלפים שעות מנסות לקבל את זה נכון, 263 00:12:40,570 --> 00:12:43,370 אבל אם אתה עושה רק אחד טעות בנכונותו, 264 00:12:43,370 --> 00:12:47,030 אתה יכול לשים את המערכת כולה ו אכן במקרה זה, את כל האינטרנט 265 00:12:47,030 --> 00:12:48,660 ועולם בסיכון. 266 00:12:48,660 --> 00:12:51,950 >> אז אם אתם רוצים ללמוד עוד על זה, ללכת לכתובת אתר זו כאן. 267 00:12:51,950 --> 00:12:54,450 אין צורך בפעולה הלילה אלא אם כן אתה 268 00:12:54,450 --> 00:12:57,116 בין אלה נוחים יותר ש כבר פועל באינטרנט שלך 269 00:12:57,116 --> 00:12:59,810 שרת, ובמקרה כזה אתה צריך, למעשה, לעדכן את התוכנה שלך. 270 00:12:59,810 --> 00:13:03,244 >> וגם את זה הוא הכותרת של דיבור, ועכשיו נייר, 271 00:13:03,244 --> 00:13:05,410 שאנחנו כבר קשורים ב באתר קורס להיום. 272 00:13:05,410 --> 00:13:07,600 זה היה על ידי בחור קן תומפסון שם, ש 273 00:13:07,600 --> 00:13:10,120 היה קבלה מפורסמת מאוד הפרס במדעי מחשב, 274 00:13:10,120 --> 00:13:13,495 והוא נשא את הנאום הזה כמה שנים לפני, במהות באותו נושא זה. 275 00:13:13,495 --> 00:13:18,250 276 00:13:18,250 --> 00:13:20,520 שואלת אנשים את השאלה, כדאי לך באמת 277 00:13:20,520 --> 00:13:23,480 אמון, סופו של דבר, תוכנה שניתן לכם? 278 00:13:23,480 --> 00:13:26,100 לדוגמא, יש לנו את כל כבר בכתיבת תוכניות, 279 00:13:26,100 --> 00:13:27,820 ואנחנו כבר קומפילציה שלהם עם קלאנג. 280 00:13:27,820 --> 00:13:31,830 והידע שלך, יש לך בכתב תוכניות בשום צורה לCS50 בו יש 281 00:13:31,830 --> 00:13:35,310 דלת אחורית של מיני, שיש דרך כי איש רע, אם להפעיל את תכנית, 282 00:13:35,310 --> 00:13:37,410 יכול להשתלט על המחשב שלך? 283 00:13:37,410 --> 00:13:38,310 כנראה שלא, נכון? 284 00:13:38,310 --> 00:13:40,180 מריו, וחמדן, ואשראי. 285 00:13:40,180 --> 00:13:41,680 כל אלה הם התוכניות הקטנות למדי. 286 00:13:41,680 --> 00:13:43,910 היית צריך להיות די רע אם אתה באמת 287 00:13:43,910 --> 00:13:47,310 עשה את כל המחשב שלך פגיע לאחר כתיבת 10 או 20 שורות קוד, 288 00:13:47,310 --> 00:13:49,690 או לפחות לא מודע לכמה של ההשלכות הביטחוניות. 289 00:13:49,690 --> 00:13:52,023 עכשיו אני אומר שבדיחות דעת, אבל אנחנו הולכים לראות היום 290 00:13:52,023 --> 00:13:54,600 והשבוע זה בעצם באמת, באמת קל 291 00:13:54,600 --> 00:13:57,980 להיות רע ולעשות את זה אפילו תוכניות קצרות פגיעות. 292 00:13:57,980 --> 00:14:02,880 >> אבל לעת עתה, לפחות, מבין כי השאלה נשאלת כאן 293 00:14:02,880 --> 00:14:04,850 הוא על קלאנג במהדר. 294 00:14:04,850 --> 00:14:08,360 למה יש לנו כבר לבטוח קלאנג לשתיים או שלושה השבועות האחרונים? 295 00:14:08,360 --> 00:14:12,650 מי יכול לומר שכל מי שכתב קלאנג לא היה לי מצב "אם" לשם 296 00:14:12,650 --> 00:14:17,680 שבעצם הזריק כמה אפסים ואלה לכל תכנית זה הידור 297 00:14:17,680 --> 00:14:21,180 שאתן לו או לה גישה המחשב שלך כאשר אתה ישן 298 00:14:21,180 --> 00:14:23,580 ומכסה המחשב הנייד שלך הוא פתוח והמחשב שלך פועל? 299 00:14:23,580 --> 00:14:24,080 נכון? 300 00:14:24,080 --> 00:14:28,350 יש לנו סוג כזה של ימין מערכת הכבוד אנחנו עכשיו שבו בוטחים שקלאנג הוא לגיטימי. 301 00:14:28,350 --> 00:14:30,000 אתה בוטח שהמכשיר הוא חוקי. 302 00:14:30,000 --> 00:14:34,430 אתה בוטח שפשוטו כמשמעו כל תכנית על Mac או PC שלך הוא אמין. 303 00:14:34,430 --> 00:14:37,510 וכמו באג פשוט זה מרמז, גם אם זה לא זדוני, 304 00:14:37,510 --> 00:14:40,580 זה בהחלט לא עשוי להיות המקרה. 305 00:14:40,580 --> 00:14:42,350 >> אז אתם צריכים לפחד כמו גיהינום. 306 00:14:42,350 --> 00:14:45,560 למען האמת, אין פשוט פתרון לזה אחר 307 00:14:45,560 --> 00:14:48,185 מ סוג של מודעות חברתיות של המורכבות הגוברים 308 00:14:48,185 --> 00:14:50,310 כי אנחנו בונים על גבי מערכות המחשב שלנו, 309 00:14:50,310 --> 00:14:53,740 ואיך יותר ויותר פגיע אנו עשויים להיות טובים מאוד. 310 00:14:53,740 --> 00:14:55,570 >> כעת, עם שאמרו, בריחה. 311 00:14:55,570 --> 00:14:59,889 אז הפריצה היא בעיה להגדיר שלוש, ו פריצה היא משחק מפעם 312 00:14:59,889 --> 00:15:02,180 שאולי אתה זוכר, אבל לנו בבעיה להגדיר שלוש, 313 00:15:02,180 --> 00:15:04,450 זה מאפשר לנו לקחת דברים לגבות חריץ 314 00:15:04,450 --> 00:15:08,880 כך שכאשר אנו כותבים תוכניות, אפילו בחלון מסוף כזה, 315 00:15:08,880 --> 00:15:14,670 אנחנו באמת יכולים לרוץ, סופו של דבר, תוכניות גרפיות לא 316 00:15:14,670 --> 00:15:17,800 בניגוד לאלה שהיו לנו גישה בגרד. 317 00:15:17,800 --> 00:15:20,910 אז זה צוות של יישום של בריחה, 318 00:15:20,910 --> 00:15:23,930 וזה רק זה לבנים שביר משחק, שאתה להזיז ההנעה שלך בחזרה 319 00:15:23,930 --> 00:15:27,590 ושוב, ואתה מכה את הכדור נגד לבנים צבעוניים אלה למעלה. 320 00:15:27,590 --> 00:15:30,020 אז זה מביא אותנו סוג של חזרה למקום שבי 321 00:15:30,020 --> 00:15:33,180 היינו יכול להיות מהר מאוד עם סריטות, ועכשיו עם C, 322 00:15:33,180 --> 00:15:35,800 יישום שלנו ממשקי משתמש גרפיים. 323 00:15:35,800 --> 00:15:38,960 >> אבל יותר מזה, זה סט בעיה מייצג הראשון 324 00:15:38,960 --> 00:15:41,000 שבו אנחנו נותנים לך חבורה של קוד. 325 00:15:41,000 --> 00:15:43,940 ואכן, אני מביא מפורש תשומת לב לכך, כי במיוחד 326 00:15:43,940 --> 00:15:47,090 עבור אלה פחות נוחים, זה בעיה להגדיר, לפחות במבט ראשון, 327 00:15:47,090 --> 00:15:49,170 הוא הולך להרגיש כמו אנחנו כבר לקחנו את זה צעד אחד קדימה. 328 00:15:49,170 --> 00:15:51,540 כי אנחנו כבר נתנו לך, עבור חלק מהחיפוש 329 00:15:51,540 --> 00:15:54,930 ומיון בעיות בpset, חבורה של קוד שכתבנו, 330 00:15:54,930 --> 00:15:56,680 וכמה הערות שאומר "לעשות", 331 00:15:56,680 --> 00:15:58,221 בו אתה צריך למלא את החסר. 332 00:15:58,221 --> 00:16:00,020 אז לא יותר מדי מפחיד, אבל זה הפעם הראשונה 333 00:16:00,020 --> 00:16:03,370 אנחנו מושיט לך קוד שאתה צריך לקרוא ראשון, להבין, ולאחר מכן להוסיף ל 334 00:16:03,370 --> 00:16:04,290 ולהשלים אותה. 335 00:16:04,290 --> 00:16:05,940 >> ולאחר מכן עם בריחה, אנחנו הולכים לעשות את אותו הדבר, 336 00:16:05,940 --> 00:16:08,740 נותן לך עוד כמה עשרות קווים קוד ש, בכנות, ייתן לך 337 00:16:08,740 --> 00:16:11,490 הרבה מסגרת ל את המשחק אבל להפסיק קצר 338 00:16:11,490 --> 00:16:14,304 יישום הלבנים ואת הכדור וההנעה, 339 00:16:14,304 --> 00:16:15,970 אבל אנחנו עושים ליישם כמה תכונות אחרות. 340 00:16:15,970 --> 00:16:18,280 ואפילו שבמבט ראשון, שוב, במיוחד אם פחות נוח, 341 00:16:18,280 --> 00:16:21,480 אולי נראה במיוחד מרתיע ו אתה חושב שיש כל כך הרבה פונקציות חדשות 342 00:16:21,480 --> 00:16:24,070 אתה צריך לעטוף את דעתך מסביב, וזה נכון. 343 00:16:24,070 --> 00:16:26,281 אבל יש לזכור, שזה ממש כמו גירוד. 344 00:16:26,281 --> 00:16:28,780 רוב הסיכויים הם שאתה לא משתמש בכל חלקי הפאזל בגרד. 345 00:16:28,780 --> 00:16:31,120 רוב הסיכויים הם שלא אכפת לך לעטוף המוח שלך סביב כולם 346 00:16:31,120 --> 00:16:33,617 משום שכל מה שנדרש היה מבט מהיר להבין, הו, 347 00:16:33,617 --> 00:16:35,450 זה מה שאני יכול לעשות עם זה פיסת הפאזל. 348 00:16:35,450 --> 00:16:38,260 ואכן, בבעיה להגדיר 3 מפרט, אנחנו נצביע לך 349 00:16:38,260 --> 00:16:41,370 בתיעוד שיהיה להכיר לך כמה פונקציות חדשות, 350 00:16:41,370 --> 00:16:43,570 וסופו של דבר תכנות בונה לך להשתמש. 351 00:16:43,570 --> 00:16:47,610 תנאים, לולאות, משתנים ופונקציות 352 00:16:47,610 --> 00:16:50,720 יהיה זהה ל מה שראינו עד כה. 353 00:16:50,720 --> 00:16:53,560 >> אז אכן, מה שאנחנו ייתנו לי אתה הוא כמה דוגמאות קוד ש 354 00:16:53,560 --> 00:16:56,110 מאפשר לך ליצור חלון זה נראה לא כמו זו, 355 00:16:56,110 --> 00:16:59,540 וסופו של דבר להפוך אותו ל משהו דומה לזה. 356 00:16:59,540 --> 00:17:02,250 אז לנצל את CS50, לדון שעות במשרד ועוד, 357 00:17:02,250 --> 00:17:05,290 ולהתנחם בעובדה ש כמות הקוד שאתה צריך לכתוב 358 00:17:05,290 --> 00:17:06,760 הוא למעשה לא כל כך הרבה. 359 00:17:06,760 --> 00:17:10,359 האתגר הראשון הוא פשוט להסתגל את עצמך לאיזה קוד שכתבנו. 360 00:17:10,359 --> 00:17:11,450 361 00:17:11,450 --> 00:17:15,810 >> כל שאלות על pset3, Shellshock, או בדרך אחרת? 362 00:17:15,810 --> 00:17:19,226 >> קהל: זה נראה כמו עובר עם בריחה 363 00:17:19,226 --> 00:17:22,154 כי הקוד הוא כמעט סגנון מונחה עצמים, 364 00:17:22,154 --> 00:17:24,675 אבל חשבתי שC היה תכנית מונחת עצמים. 365 00:17:24,675 --> 00:17:26,050 1 SPEAKER: שאלה מצוינת. 366 00:17:26,050 --> 00:17:28,258 אז במחפש דרך קוד הפצה, הקוד 367 00:17:28,258 --> 00:17:30,180 כתבנו לpset3, למוכר אלה, זה 368 00:17:30,180 --> 00:17:32,230 נראה כמו זה קטנים מונחה עצמים. 369 00:17:32,230 --> 00:17:33,800 תשובה קצרה היא, זה הוא. 370 00:17:33,800 --> 00:17:38,130 זה קירוב של איך אתה אולי לעשות קוד מונחה עצמים באמצעות 371 00:17:38,130 --> 00:17:41,850 שפה כמו C, אבל זה עדיין סופו של דבר פרוצדורלי. 372 00:17:41,850 --> 00:17:44,900 אין שיטות הפנימיים של המשתנים, כפי שתראו. 373 00:17:44,900 --> 00:17:46,180 אבל זה מזכיר ש. 374 00:17:46,180 --> 00:17:48,780 ואנו רואים תכונה ששוב כשנגיע לPHP וJavaScript 375 00:17:48,780 --> 00:17:49,946 לקראת סוף הסמסטר. 376 00:17:49,946 --> 00:17:53,667 אבל לעת עתה, לחשוב על זה כ רמז של מה לבוא. 377 00:17:53,667 --> 00:17:54,250 שאלה טובה. 378 00:17:54,250 --> 00:17:56,051 379 00:17:56,051 --> 00:17:56,550 בסדר. 380 00:17:56,550 --> 00:17:59,730 אז למזג סוג היה איך אנחנו דברים שמאל בפעם האחרונה. 381 00:17:59,730 --> 00:18:03,250 ולמזג סוג היה מגניב ב מובן שזה היה כל כך הרבה יותר מהר, 382 00:18:03,250 --> 00:18:07,100 לפחות על סמך הבדיקות שטחיות שעשינו בשבוע שעבר, מאשר, למשל, בועה 383 00:18:07,100 --> 00:18:08,710 סוג, מיון בחירה, מיון הכנסה. 384 00:18:08,710 --> 00:18:11,780 ומה שהיה מסודר מדי הוא פשוט איך באופן תמציתי ונקי 385 00:18:11,780 --> 00:18:12,810 אתה יכול לבטא את זה. 386 00:18:12,810 --> 00:18:15,840 ומה שאנחנו לא אומרים שזה היה עליון מחויב בזמן הריצה של מיזוג 387 00:18:15,840 --> 00:18:16,340 למיין? 388 00:18:16,340 --> 00:18:17,633 389 00:18:17,633 --> 00:18:18,495 כן? 390 00:18:18,495 --> 00:18:19,360 >> קהל: n להתחבר n? 391 00:18:19,360 --> 00:18:20,819 >> 1 SPEAKER: n להתחבר n, תקין. n להתחבר n. 392 00:18:20,819 --> 00:18:23,776 ואנחנו נחזור למה ש באמת אומר או איפה שמגיע מ, 393 00:18:23,776 --> 00:18:25,570 אבל זה היה טוב יותר ממה שזמן ריצה 394 00:18:25,570 --> 00:18:28,440 שראינו לבועה בחירה וסוג ההכנסה? 395 00:18:28,440 --> 00:18:30,610 אז n בריבוע. n בריבוע גדול יותר מזה, 396 00:18:30,610 --> 00:18:34,650 וגם אם זה לא די ברור, יודע שn היומן הוא קטן יותר מאשר n, 397 00:18:34,650 --> 00:18:36,910 כך שאם אתה עושה פעמים n משהו קטן יותר מאשר n, 398 00:18:36,910 --> 00:18:38,680 זה הולך להיות פחות מ בריבוע n. 399 00:18:38,680 --> 00:18:40,130 זה קצת אינטואיציה יש. 400 00:18:40,130 --> 00:18:42,190 אבל שילמנו מחיר על זה. 401 00:18:42,190 --> 00:18:47,000 זה היה מהיר יותר, אבל נושא שהתחיל לצאת בשבוע שעבר היה איזון זה. 402 00:18:47,000 --> 00:18:49,804 יש לי את ביצועים טובים יותר זמן חכם, אבל מה 403 00:18:49,804 --> 00:18:52,470 הייתי צריך להוציא על אחרים יד, על מנת להשיג את זה? 404 00:18:52,470 --> 00:18:53,591 >> קהל: זיכרון. 405 00:18:53,591 --> 00:18:54,465 1 SPEAKER: תגיד את זה שוב? 406 00:18:54,465 --> 00:18:55,173 קהל: זיכרון. 407 00:18:55,173 --> 00:18:57,040 1 SPEAKER: זיכרון, או חלל באופן כללי יותר. 408 00:18:57,040 --> 00:18:59,040 וזה לא היה סופר ברור עם בני האדם שלנו, 409 00:18:59,040 --> 00:19:02,240 אבל תזכור שהמתנדבים שלנו היו צעד קדימה ודריכה 410 00:19:02,240 --> 00:19:04,780 בחזרה כאילו יש מערך כאן, וכאילו יש 411 00:19:04,780 --> 00:19:07,130 מערך שני כאן ש הם יכולים להשתמש, כי אנחנו 412 00:19:07,130 --> 00:19:09,080 מקום הדרוש כדי למזג את האנשים האלה. 413 00:19:09,080 --> 00:19:11,480 אנחנו לא יכולים פשוט להחליף אותם במקום. 414 00:19:11,480 --> 00:19:13,800 אז למזג מינוף סוג יותר מקום, ש 415 00:19:13,800 --> 00:19:15,620 אנחנו לא צריכים עם אלגוריתמים האחרים, 416 00:19:15,620 --> 00:19:17,410 אבל היתרון הוא שזה הרבה יותר מהר. 417 00:19:17,410 --> 00:19:20,780 ולמען אמת, בחלל העולם האמיתי זיכרון RAM days-- אלה, דיסק קשיח space-- 418 00:19:20,780 --> 00:19:25,030 הוא יחסית זול, ואז זה לא בהכרח דבר רע. 419 00:19:25,030 --> 00:19:28,320 >> אז בואו נעיף מבט מהיר, קטן יותר באופן שיטתי, על מה שעשינו 420 00:19:28,320 --> 00:19:30,220 ולמה אמר שזה n היה להיכנס n. 421 00:19:30,220 --> 00:19:33,260 אז הנה שמונה המספרים ו שמונה מתנדב שהיו לנו בפעם האחרונה. 422 00:19:33,260 --> 00:19:35,718 והדבר הראשון שמיזוג מיין אמר לנו לעשות היה מה? 423 00:19:35,718 --> 00:19:37,010 424 00:19:37,010 --> 00:19:38,010 קהל: הפרד בשני. 425 00:19:38,010 --> 00:19:38,663 1 SPEAKER: תגיד את זה שוב? 426 00:19:38,663 --> 00:19:39,650 קהל: הפרד בשני. 427 00:19:39,650 --> 00:19:40,610 1 SPEAKER: הפרד בשני, תקין. 428 00:19:40,610 --> 00:19:42,818 זה מזכיר מאוד ספר טלפונים, של הפרד 429 00:19:42,818 --> 00:19:44,220 ולכבוש באופן כללי יותר. 430 00:19:44,220 --> 00:19:45,640 אז הסתכלנו על החצי השמאלי. 431 00:19:45,640 --> 00:19:48,700 ואז ברגע שאמרנו, סוג המחצית השמאלית של האלמנטים, 432 00:19:48,700 --> 00:19:49,690 מה היה לנו הבא אומרים? 433 00:19:49,690 --> 00:19:51,210 434 00:19:51,210 --> 00:19:54,860 למיין את המחצית השמאלית של השמאל המחצית, אשר אפשר לנו, 435 00:19:54,860 --> 00:19:57,570 לאחר החלוקה לשתיים, תתמקד בארבעה ושני. 436 00:19:57,570 --> 00:20:01,280 >> איך אתה למיין את רשימה עכשיו, ב צהוב, בגודל שני, באמצעות מיזוג מיין? 437 00:20:01,280 --> 00:20:02,330 438 00:20:02,330 --> 00:20:04,580 ובכן לחלק אותו לשתיים, ולמיין את המחצית השמאלית. 439 00:20:04,580 --> 00:20:07,100 וזה מקום שבי דברים הגיע לרגע קטן ומטופש. 440 00:20:07,100 --> 00:20:10,720 איך אתה למיין את רשימה זה של גודל אחד, כמו מספר זה ארבעה כאן? 441 00:20:10,720 --> 00:20:12,330 442 00:20:12,330 --> 00:20:13,210 זה מסודרים. 443 00:20:13,210 --> 00:20:14,200 תסיים. 444 00:20:14,200 --> 00:20:17,300 >> אבל אז איך אתה למיין את רשימה גודל אחד כאשר זה המספר שתיים? 445 00:20:17,300 --> 00:20:21,640 ובכן, אותו דבר, אבל עכשיו מה שהיה שלישי וצעד מפתח במיינו מיזוג? 446 00:20:21,640 --> 00:20:24,020 אתה הייתי צריך למזג את השמאל מחצית ובמחצית הימנית. 447 00:20:24,020 --> 00:20:26,580 וברגע שעשינו את זה, אנחנו נראים בשעה ארבע, הסתכלנו על שתי. 448 00:20:26,580 --> 00:20:28,750 החלטנו בסדר, ברור ששתי מגיע ראשון, 449 00:20:28,750 --> 00:20:31,840 לכן אנחנו שמים שני בה מקום, ואחריו ארבעה. 450 00:20:31,840 --> 00:20:35,010 ועכשיו אתה צריך כדי להריץ אחורה סוג של, וזה סוג של מאפיין 451 00:20:35,010 --> 00:20:37,570 של אלגוריתם כמו מיזוג מיין, אחורה בזיכרון. 452 00:20:37,570 --> 00:20:40,240 מה הייתה השורה הבאה של הסיפור? 453 00:20:40,240 --> 00:20:41,780 מה שאני צריך להתמקד בשלב הבא? 454 00:20:41,780 --> 00:20:43,110 455 00:20:43,110 --> 00:20:47,350 המחצית הימנית של השמאל מחצית, וזה שישה ושמונה. 456 00:20:47,350 --> 00:20:50,320 >> אז תן לי רק צעד דרך זה בלי להמשיך ולהציק לנקודה יותר מדי. 457 00:20:50,320 --> 00:20:53,330 שש ושמונה, אז שישה הוא מסודרים, שמונה ממוינים. 458 00:20:53,330 --> 00:20:57,190 מיזוג יחד אותם כמו ש, ועכשיו הצעד הגדול הבא 459 00:20:57,190 --> 00:21:00,990 הוא, כמובן, למיין את החצי ימני מ הצעד הראשון של אלגוריתם זה. 460 00:21:00,990 --> 00:21:02,870 אז אנחנו מתמקדים באחד, שלוש, שבע, חמש. 461 00:21:02,870 --> 00:21:04,540 לאחר מכן, אנו מתמקדים במחצית השמאלית. 462 00:21:04,540 --> 00:21:09,400 המחצית השמאלית של ש, המחצית הימנית של כי, ולאחר מכן למזג באחד ושלוש. 463 00:21:09,400 --> 00:21:13,100 ואז חצי הנכון, אז עזב את המחצית שלו, ולאחר מכן את המחצית הימנית שלו. 464 00:21:13,100 --> 00:21:15,985 מיזוג זה ב, ועכשיו מה שנשאר צעד? 465 00:21:15,985 --> 00:21:18,040 466 00:21:18,040 --> 00:21:22,460 מיזוג המחצית השמאלית הגדולה וגדולה נכון מחצית, כך אחד הולכת שם למטה, 467 00:21:22,460 --> 00:21:27,330 אז שתיים, ואז שלוש, ארבעה, ואז חמש, אז שישה, שבע ושמונה. 468 00:21:27,330 --> 00:21:31,990 >> אז עכשיו למה זה חושף סופו של דבר, במיוחד אם n ולוגריתמים יותר 469 00:21:31,990 --> 00:21:35,487 בדרך כלל ולא לברוח לך, לפחות בזיכרון האחרון? 470 00:21:35,487 --> 00:21:37,070 ובכן, שים לב לגובה של הדבר הזה. 471 00:21:37,070 --> 00:21:41,230 היו לנו שמונה אלמנטים, ואנחנו חילק אותה על ידי שתי, על ידי שתי, על ידי שתי. 472 00:21:41,230 --> 00:21:44,590 אז להיכנס בסיס שתיים משמונה נותן לנו שלוש. 473 00:21:44,590 --> 00:21:45,640 474 00:21:45,640 --> 00:21:48,540 ותאמין לי על שאם מעורפל קצת על זה. 475 00:21:48,540 --> 00:21:54,710 אבל להיכנס בסיס שניים משמונה הוא שלוש, כך עשינו שלוש שכבות של מיזוג. 476 00:21:54,710 --> 00:21:57,170 וכאשר אנו מוזגו אלמנטים, אלמנטים כמה 477 00:21:57,170 --> 00:21:58,950 לא שאנחנו מסתכלים על כל אחד משורות אלה? 478 00:21:58,950 --> 00:22:00,212 479 00:22:00,212 --> 00:22:01,437 כולל של n, נכון? 480 00:22:01,437 --> 00:22:04,020 בגלל למזג השורה העליונה, למרות שאנחנו עשינו את זה טיפין טיפין, 481 00:22:04,020 --> 00:22:05,990 אנו סופו של הדבר נגעו בכל מספר פעם אחת. 482 00:22:05,990 --> 00:22:09,054 ובשורה השנייה, ל מיזוג רשימות אלה של גודל שני, 483 00:22:09,054 --> 00:22:10,470 היו לנו לגעת זה באלמנט פעם אחת. 484 00:22:10,470 --> 00:22:12,690 ואז כאן באמת ברור בשורה האחרונה, 485 00:22:12,690 --> 00:22:15,430 היו לנו לגעת כל אחד מאלה אלמנטים פעם אחת, אבל רק פעם אחת, 486 00:22:15,430 --> 00:22:18,400 כך כאן טמון, אם כן, n n היומן שלנו. 487 00:22:18,400 --> 00:22:21,780 >> ועכשיו רק כדי לעשות דברים קצת יותר רשמי רק לרגע, אם אתה 488 00:22:21,780 --> 00:22:24,260 היו לנתח את זה עכשיו בסוג של רמה גבוהה יותר 489 00:22:24,260 --> 00:22:28,340 ולנסות להחליט, גם איך אולי אתה הולך על להביע 490 00:22:28,340 --> 00:22:31,780 זמן הריצה של אלגוריתם זה רק מלהסתכל על זה ולא 491 00:22:31,780 --> 00:22:33,590 על ידי שימוש בדוגמה מאולצת? 492 00:22:33,590 --> 00:22:36,590 ובכן, כמה זמן היית אומר צעד כזה בצהוב היה לוקח, 493 00:22:36,590 --> 00:22:37,173 אם <2 תמורת n? 494 00:22:37,173 --> 00:22:38,840 495 00:22:38,840 --> 00:22:39,830 זה O גדול של מה? 496 00:22:39,830 --> 00:22:41,450 497 00:22:41,450 --> 00:22:44,540 אז אני רואה אחד, ולכן צעד אחד, אולי שני צעדים כי זה אם 498 00:22:44,540 --> 00:22:47,110 ואז לחזור, אבל זה זמן קבוע, נכון? 499 00:22:47,110 --> 00:22:49,960 אז אמר O (1), וזה איך אני להביע את זה. 500 00:22:49,960 --> 00:22:51,480 T, פשוט להיות זמן ריצה. 501 00:22:51,480 --> 00:22:54,150 n הוא בגודל של הקלט, כך T (n), רק דרך מפוארת 502 00:22:54,150 --> 00:22:56,330 לומר הריצה קלט נתון זמן בגודל n 503 00:22:56,330 --> 00:23:00,220 הולך להיות על הסדר זמן קבוע, בO (1). 504 00:23:00,220 --> 00:23:01,970 >> אבל חוץ מזה, מה עם זה? 505 00:23:01,970 --> 00:23:05,660 איך היית מבטא את זמן ריצה של הקו הצהוב הזה? 506 00:23:05,660 --> 00:23:06,250 T של מה? 507 00:23:06,250 --> 00:23:09,440 508 00:23:09,440 --> 00:23:12,665 סוג של אתה יכול לרמות כאן ו לענות על השאלה שלי באופן מחזורי. 509 00:23:12,665 --> 00:23:14,770 510 00:23:14,770 --> 00:23:17,900 אז אם זמן הריצה ב כללי רק שאנחנו אומרים הוא T (n). 511 00:23:17,900 --> 00:23:18,950 512 00:23:18,950 --> 00:23:22,490 ועכשיו אתה סוג של חתירה לכאן ו אומר, גם, רק למיין את החצי השמאלי, 513 00:23:22,490 --> 00:23:23,920 ולאחר מכן למיין את החצי הימני. 514 00:23:23,920 --> 00:23:27,520 איך ייתכן שאנחנו באופן סמלי מייצגים זמן הריצה של הקו הצהוב הזה? 515 00:23:27,520 --> 00:23:28,020 T של מה? 516 00:23:28,020 --> 00:23:29,360 מה הגודל של הקלט? 517 00:23:29,360 --> 00:23:30,510 518 00:23:30,510 --> 00:23:31,057 n על שתי. 519 00:23:31,057 --> 00:23:32,140 למה אני לא רק אומר את זה? 520 00:23:32,140 --> 00:23:36,449 ואז זה T אחר (n / 2) ולאחר מכן שוב, אם אני למזג את שני חצאים ממוינים, 521 00:23:36,449 --> 00:23:38,615 כמה אלמנטים אני הולך יש לגעת בסך הכל? 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 אז אני יכול לבטא את זה, רק כדי להיות סוג של אשליה, 525 00:23:42,790 --> 00:23:44,430 כזמן הריצה באופן כללי. 526 00:23:44,430 --> 00:23:51,140 T (n) הוא בדיוק בזמן הריצה של T (n / 2), בתוספת T (n / 2), עזב את המחצית ותקין חצי, 527 00:23:51,140 --> 00:23:55,360 בתוספת O (n), שהוא כנראה n צעדים, אבל אולי, אם אני משתמש בשתי אצבעות, 528 00:23:55,360 --> 00:23:57,960 זה כפליים צעדים, אבל זה ליניארי. 529 00:23:57,960 --> 00:24:00,440 זה חלק ממספר הצעדים זה גורם של n, 530 00:24:00,440 --> 00:24:02,270 כך אנו עשויים לבטא את זה כמו זה. 531 00:24:02,270 --> 00:24:05,550 וזה מקום שבי עכשיו אנחנו דוגית ל אחורי של ספר לימוד המתמטיקה בתיכון שלנו 532 00:24:05,550 --> 00:24:10,290 אנחנו שהישנות סופו של דבר בסופו של שווה את זה, n פעמים להיכנס n, 533 00:24:10,290 --> 00:24:12,530 אם אתה באמת עושה את זה מתוך המתמטיקה יותר באופן רשמי. 534 00:24:12,530 --> 00:24:13,950 >> אז זה רק שתי נקודות מבט. 535 00:24:13,950 --> 00:24:17,500 מבחינה מספרית אחד עם בקידוד קשיח דוגמא מייצגת 536 00:24:17,500 --> 00:24:21,140 באמצעות שמונה מספרים, ועוד מבט כללי על איך שהגענו לשם. 537 00:24:21,140 --> 00:24:25,670 אבל מה שבאמת מעניין כאן הוא, שוב, הרעיון הזה של רכיבה על אופניים. 538 00:24:25,670 --> 00:24:26,900 אני לא משתמש ללולאות. 539 00:24:26,900 --> 00:24:29,860 אני סוג של הגדרה משהו במונחים של עצמו, 540 00:24:29,860 --> 00:24:31,950 לא רק עם זה פונקציה מתמטית, 541 00:24:31,950 --> 00:24:34,860 אלא גם במונחים של קוד פסאודו זה. 542 00:24:34,860 --> 00:24:38,260 קוד פסאודו זה רקורסיבית בשני שקוויה 543 00:24:38,260 --> 00:24:42,310 הוא למעשה אומר לו ללכת להשתמש עצמו כדי לפתור קטן יותר 544 00:24:42,310 --> 00:24:45,400 בעיה של גודל קטן יותר, ולאחר מכן שוב ושוב 545 00:24:45,400 --> 00:24:48,820 ושוב עד לשייף ואנו עד למקרה בסיס זה מה שנקרא. 546 00:24:48,820 --> 00:24:52,810 >> אז בואו ממש לצייר משכנע יותר לקחת משם מזה כדלקמן. 547 00:24:52,810 --> 00:24:58,420 תן לי ללכת לgedit ולקחת תסתכל על כמה קוד המקור של היום, 548 00:24:58,420 --> 00:24:59,930 בפרט דוגמא זו כאן. 549 00:24:59,930 --> 00:25:03,709 Sigma 0, אשר מוסיף כנראה המספרים אחד עד n. 550 00:25:03,709 --> 00:25:05,750 אז בואו לראות מה מוכר ולא מוכר כאן. 551 00:25:05,750 --> 00:25:08,690 ראשית יש לנו כמה כולל, כך ששום דבר חדש שם. 552 00:25:08,690 --> 00:25:09,190 אב טיפוס. 553 00:25:09,190 --> 00:25:11,370 אני מעורפל מעט על זה אחרי כמה ימים, 554 00:25:11,370 --> 00:25:13,790 אבל מה שאנחנו אומרים אב טיפוס של פונקציה הוא? 555 00:25:13,790 --> 00:25:15,099 556 00:25:15,099 --> 00:25:16,015 קהל: [לא ברור]. 557 00:25:16,015 --> 00:25:16,905 1 SPEAKER: מה זה? 558 00:25:16,905 --> 00:25:17,800 קהל: אנחנו מכריזים את זה. 559 00:25:17,800 --> 00:25:18,883 1 SPEAKER: אנחנו מכריזים את זה. 560 00:25:18,883 --> 00:25:22,290 אז אתה מלמד קלאנג, היי, לא ממש מיישם את זה עדיין, 561 00:25:22,290 --> 00:25:25,740 אבל אי שם בקובץ זה, ככל הנראה, הוא הולך להיקרא פונקציה מה? 562 00:25:25,740 --> 00:25:26,930 563 00:25:26,930 --> 00:25:27,540 סיגמא. 564 00:25:27,540 --> 00:25:30,540 וזו רק הבטחה ש זה הולך להיראות כך. 565 00:25:30,540 --> 00:25:33,720 זה הולך לקחת מספר שלם כ input-- ואני יכול להיות מפורש יותר 566 00:25:33,720 --> 00:25:36,570 ואומר int n --and זה הולך להחזיר int, 567 00:25:36,570 --> 00:25:39,900 אבל אמצעי פסיק, מ"מ, אני לעקוף ליישום זה קצת יותר מאוחר. 568 00:25:39,900 --> 00:25:40,989 שוב, קלאנג הוא מטומטם. 569 00:25:40,989 --> 00:25:43,280 זה הולך רק כדי לדעת מה אתה אומר את זה מלמעלה למטה, 570 00:25:43,280 --> 00:25:45,765 ולכן אנחנו צריכים לפחות לתת לי רמז של מה לבואו. 571 00:25:45,765 --> 00:25:47,330 >> עכשיו בואו נסתכל על עיקרי כאן. 572 00:25:47,330 --> 00:25:50,040 בואו לגלול למטה כאן ו לראות מה ראשי עושה. 573 00:25:50,040 --> 00:25:53,780 זה לא כל כך הרבה זמן של פונקציה, ו למעשה המבנה כאן הוא מוכר. 574 00:25:53,780 --> 00:25:57,590 אני מצהיר n משתנה, ולאחר מכן אני להציק למשתמש שוב ושוב 575 00:25:57,590 --> 00:26:01,880 עבור מספר שלם חיובי באמצעות getInt, ויציאה של לולאה זו רק 576 00:26:01,880 --> 00:26:03,280 ברגע שהמשתמש נענה. 577 00:26:03,280 --> 00:26:05,670 האם בעוד, אנחנו כבר רגילים להציק למשתמש בדרך. 578 00:26:05,670 --> 00:26:06,670 עכשיו זה מעניין. 579 00:26:06,670 --> 00:26:08,510 אני מצהיר int בשם "תשובה". 580 00:26:08,510 --> 00:26:11,420 אני להקצות את ערך ההחזרה של פונקציה שנקראת "סיגמא". 581 00:26:11,420 --> 00:26:15,200 אני לא יודע מה זה עושה, אבל אני זוכר שהכריז אותו לפני רגע. 582 00:26:15,200 --> 00:26:18,310 ואז אני מעביר ב ערך שהמשתמש הקליד ב, n, 583 00:26:18,310 --> 00:26:20,420 ולאחר מכן אני מדווח התשובה. 584 00:26:20,420 --> 00:26:22,260 ובכן בואו לגלול אחורה רק לרגע. 585 00:26:22,260 --> 00:26:28,620 בואו נלך קדימה לספרייה זו, להפוך את סיגמא 0, ובעצם להפעיל את התכנית 586 00:26:28,620 --> 00:26:30,490 ולראות מה קורה. 587 00:26:30,490 --> 00:26:35,930 אז אם אני הולך קדימה ולרוץ תכנית זו, ./sigma-0, 588 00:26:35,930 --> 00:26:40,139 ואני מקליד בצורה חיובית מספר שלם כמו שתי, Sigma, 589 00:26:40,139 --> 00:26:43,180 כסמל היווני מרמז, הוא רק הולך להוסיף את כל המספרים מ 590 00:26:43,180 --> 00:26:44,320 אפס בעד שתי. 591 00:26:44,320 --> 00:26:46,560 אז 0 בתוספת 1 ועוד 2. 592 00:26:46,560 --> 00:26:48,830 כך זה צריך בתקווה לתת לי 3. 593 00:26:48,830 --> 00:26:49,750 זה כל מה שהוא עושה. 594 00:26:49,750 --> 00:26:52,690 ובאופן דומה, אם אני מפעיל את זה שוב ואני נותן לה את המספר שלוש, 595 00:26:52,690 --> 00:26:56,721 זה 3 ועוד 2, אז זה 5, בתוספת 1 צריכים לתת לי 6. 596 00:26:56,721 --> 00:26:59,470 ואז אם אני מקבל באמת מטורף ו התחל להקליד במספרים גדולים יותר, 597 00:26:59,470 --> 00:27:01,290 זה צריך לתת לי גדולים יותר ויותר סכומים. 598 00:27:01,290 --> 00:27:02,250 אז זה כל מה. 599 00:27:02,250 --> 00:27:04,010 >> אז מה עושה סיגמא נראה? 600 00:27:04,010 --> 00:27:05,430 ובכן, זה די פשוט. 601 00:27:05,430 --> 00:27:08,940 זה איך אנחנו יכולים להיות מיושמים זה לבני הזוג של שבועות האחרונים. 602 00:27:08,940 --> 00:27:11,120 "Int" הולך להיות סוג ההחזרה. 603 00:27:11,120 --> 00:27:14,330 סיגמא היא שם, וזה לוקח מ 'משתנה במקום n. 604 00:27:14,330 --> 00:27:15,940 אני תשנה את זה למעלה. 605 00:27:15,940 --> 00:27:17,340 אז זה רק בדיקת שפיות. 606 00:27:17,340 --> 00:27:18,430 607 00:27:18,430 --> 00:27:19,950 אנחנו תראו למה ברגע. 608 00:27:19,950 --> 00:27:24,220 עכשיו אני מצהיר משתנה אחרת, סכום, לאתחל אותו לאפס. 609 00:27:24,220 --> 00:27:28,140 אז יש לי את זה ללולאה חוזר ונשנה, כנראה לבהירות, 610 00:27:28,140 --> 00:27:33,810 מi = 1 בעד = מ ', שהוא כל מה שמשתמש הקליד ב, ולאחר מכן אני 611 00:27:33,810 --> 00:27:35,690 להגדיל את הסכום כזה. 612 00:27:35,690 --> 00:27:37,360 ולאחר מכן להחזיר את הסכום. 613 00:27:37,360 --> 00:27:38,440 >> אז כמה שאלות. 614 00:27:38,440 --> 00:27:42,370 אחד, אני טוען בתגובה שלי שזה נמנע סיכון של לולאה אינסופית. 615 00:27:42,370 --> 00:27:45,620 למה שעובר במספר שלילי לגרום, באופן פוטנציאלי, לולאה אינסופית? 616 00:27:45,620 --> 00:27:49,396 617 00:27:49,396 --> 00:27:51,290 >> קהל: אתה לעולם לא תגיע מ '. 618 00:27:51,290 --> 00:27:52,880 >> 1 SPEAKER: אף פעם להגיע מ '. 619 00:27:52,880 --> 00:27:55,880 אבל מ 'הוא עבר ב, אז בואו תחשוב על דוגמא פשוטה. 620 00:27:55,880 --> 00:27:58,510 אם מ 'הוא עבר בידי משתמש כשלילי אחד. 621 00:27:58,510 --> 00:28:00,059 ללא קשר לעיקרי. 622 00:28:00,059 --> 00:28:01,850 ראשי מגן עלינו מפני זה יותר מדי, אז אני פשוט 623 00:28:01,850 --> 00:28:04,680 להיות ממש אנאלי עם סיגמא לעשות גם בטוח 624 00:28:04,680 --> 00:28:06,540 שהקלט לא יכול להיות שלילי. 625 00:28:06,540 --> 00:28:10,130 אז אם מ 'הוא שלילי, משהו כמו שלילי אחד. 626 00:28:10,130 --> 00:28:11,930 מה הולך לקרות? 627 00:28:11,930 --> 00:28:14,390 ובכן, אני הולך לקבל אותחל לאחד, 628 00:28:14,390 --> 00:28:19,060 ואז אני הולך להיות קטן או שווה למ '? 629 00:28:19,060 --> 00:28:24,130 630 00:28:24,130 --> 00:28:24,765 >> Stand by. 631 00:28:24,765 --> 00:28:26,930 632 00:28:26,930 --> 00:28:29,370 שwas-- בוא לא, בואו nix הסיפור הזה. 633 00:28:29,370 --> 00:28:32,780 אני לא שואל את השאלה הזאת, משום ש הסיכון שאני מרמז 634 00:28:32,780 --> 00:28:38,360 לא הולך לקרות, כי אני הוא תמיד הולך להיות בסדר than-- גדול יותר, 635 00:28:38,360 --> 00:28:39,871 אני חוזר בי את השאלה הזאת. 636 00:28:39,871 --> 00:28:40,370 אישור. 637 00:28:40,370 --> 00:28:42,030 בואו נתמקד רק בחלק הזה כאן. 638 00:28:42,030 --> 00:28:44,210 639 00:28:44,210 --> 00:28:48,830 מדוע אני מצהיר כמה מחוץ ללולאה? 640 00:28:48,830 --> 00:28:52,010 הודעה על קו 49 לי הכריז אני פנימי של הלולאה, 641 00:28:52,010 --> 00:28:54,950 אבל באינטרנט 48 לי הכריז כמה בחוץ. 642 00:28:54,950 --> 00:28:55,695 כן. 643 00:28:55,695 --> 00:28:56,611 קהל: [לא ברור]. 644 00:28:56,611 --> 00:28:58,734 645 00:28:58,734 --> 00:28:59,400 SPEAKER 1: בטח. 646 00:28:59,400 --> 00:29:03,360 בראש ואני בהחלט לעשות אז קודם כל לא רוצה להכריז ולאתחל סכום 647 00:29:03,360 --> 00:29:06,130 לאפס בתוך לולאה בכל איטרציה, 648 00:29:06,130 --> 00:29:09,370 כי זה ברור יביס מטרה מסכם את המספרים. 649 00:29:09,370 --> 00:29:11,770 הייתי משתנה כל זמן הערך חזרה לאפס. 650 00:29:11,770 --> 00:29:17,992 וגם, מה עוד מסתורי יותר סיבה לאותה החלטת עיצוב? 651 00:29:17,992 --> 00:29:18,954 כן. 652 00:29:18,954 --> 00:29:20,279 >> קהל: [לא ברור]. 653 00:29:20,279 --> 00:29:21,070 1 SPEAKER: בדיוק. 654 00:29:21,070 --> 00:29:24,060 אני רוצה לגשת אליו מחוץ של הלולאה מדי על מה קו? 655 00:29:24,060 --> 00:29:25,390 656 00:29:25,390 --> 00:29:26,400 על 53. 657 00:29:26,400 --> 00:29:29,910 ובהתבסס על כלל האצבע שלנו מלפני כמה הרצאות, 658 00:29:29,910 --> 00:29:33,680 משתני scoped, באמת, ל סוגריים מסולסלים המקיפים אותם. 659 00:29:33,680 --> 00:29:38,190 אז אם אני לא מצהיר סכום בתוך של סוגריים המסולסלים החיצוניים אלה, 660 00:29:38,190 --> 00:29:40,250 אני לא יכול להשתמש בו בשורה 53. 661 00:29:40,250 --> 00:29:43,160 במילים אחרת, אם אני הכריז סכום בכאן, או אפילו בתוך 662 00:29:43,160 --> 00:29:45,410 ללולאה, לא יכולתי לגשת אליו ב53. 663 00:29:45,410 --> 00:29:47,150 משתנה יהיו יעיל ייעלם. 664 00:29:47,150 --> 00:29:48,579 אז כמה סיבות יש. 665 00:29:48,579 --> 00:29:50,370 אבל עכשיו בואו נחזור ולראות מה קורה. 666 00:29:50,370 --> 00:29:51,730 אז סיגמא נקרא. 667 00:29:51,730 --> 00:29:55,640 זה מוסיף עד 1 ועוד 2, או 1 ועוד 2 בתוספת 3, ולאחר מכן מחזיר את הערך, 668 00:29:55,640 --> 00:29:59,660 מאחסן אותו בתשובה, וprintf כאן לכן אני רואה על המסך. 669 00:29:59,660 --> 00:30:03,079 אז זה מה שאנחנו קוראים לאיטרטיבי גישה, שבי איטרציה רק 670 00:30:03,079 --> 00:30:03,870 משמעות הדבר היא באמצעות לולאה. 671 00:30:03,870 --> 00:30:06,900 ללולאה, לולאה בזמן, לעשות בזמן לולאה, פשוט עושה משהו שוב 672 00:30:06,900 --> 00:30:08,380 ושוב ושוב. 673 00:30:08,380 --> 00:30:13,505 >> אבל סיגמא הוא סוג של פונקציה מסודרת ב שאני יכול ליישם אותה באופן שונה. 674 00:30:13,505 --> 00:30:14,620 675 00:30:14,620 --> 00:30:19,120 מה לגבי זה, ש רק כדי להיות די מגניב, 676 00:30:19,120 --> 00:30:21,880 תן לי באמת להיפטר של הרבה הסחת דעת 677 00:30:21,880 --> 00:30:24,380 כי פונקציה זו הוא באמת די פשוט. 678 00:30:24,380 --> 00:30:27,780 לגלף אותו בואו פשוט לארבעת קווי הליבה שלה 679 00:30:27,780 --> 00:30:30,410 כדי להיפטר מכל הערות וסוגריים מסולסלים. 680 00:30:30,410 --> 00:30:34,334 זהו סוג של פיצוצים יישום חלופה. 681 00:30:34,334 --> 00:30:37,250 בסדר, אולי לא אכפת לי-נושבת, אבל זה סוג של סקסי, בסדר, 682 00:30:37,250 --> 00:30:39,920 להסתכל על זה כל כך הרבה יותר בתמציתיות. 683 00:30:39,920 --> 00:30:43,120 עם רק ארבעה שורות של קוד, יש לי צק לשפיות זו. 684 00:30:43,120 --> 00:30:45,732 אם מ 'הוא פחות או שווה ל אפס, סיגמא לא הגיוני. 685 00:30:45,732 --> 00:30:48,190 זה אמור רק להיות ב מקרה זה למספרים חיוביים, 686 00:30:48,190 --> 00:30:50,340 אז אני פשוט הולך לחזור אפס באופן שרירותי 687 00:30:50,340 --> 00:30:53,210 כך שלפחות יש לנו כמה מה שנקרא מקרה בסיס. 688 00:30:53,210 --> 00:30:54,430 >> אבל כאן זה היופי. 689 00:30:54,430 --> 00:30:59,930 שלמותו של רעיון זה, והוסיף מספרים מ -1 עד n, או מ 'במקרה זה, 690 00:30:59,930 --> 00:31:02,630 ניתן לעשות זאת על ידי סוג של גלגול האחריות. 691 00:31:02,630 --> 00:31:04,947 ובכן, מה הוא הסכום של 1 עד מ '? 692 00:31:04,947 --> 00:31:05,780 ובכן, אתה יודע מה? 693 00:31:05,780 --> 00:31:11,949 זה אותו הדבר כסכום מ ' בתוספת הסכום של 1 עד מ 'מינוס 1. 694 00:31:11,949 --> 00:31:12,740 טוב אתה יודע מה? 695 00:31:12,740 --> 00:31:13,940 מה סיגמא של 1 מינוס מ '? 696 00:31:13,940 --> 00:31:17,860 ובכן, אם אתה סוג של מעקב זה באופן הגיוני, שזה אותו הדבר כמו מ 'מינוס 1 697 00:31:17,860 --> 00:31:21,415 בתוספת סיגמא של מ 'מינוס 2. 698 00:31:21,415 --> 00:31:22,480 699 00:31:22,480 --> 00:31:26,012 אז אתה יכול סוג של פשוט- זה כמו, אם אתה רק 700 00:31:26,012 --> 00:31:28,220 מנסה לעצבן את החבר והם שואלים אותך שאלה, 701 00:31:28,220 --> 00:31:31,344 אתה סוג של להגיב בשאלה, סוג של אתה יכול לשמור להעביר את האחריות. 702 00:31:31,344 --> 00:31:34,560 אבל מה מפתח הוא שאם אתה שומר מה שהופך את השאלה קטנה יותר ויותר 703 00:31:34,560 --> 00:31:36,910 וקטן יותר, אתה לא שואל מה זה סיגמא 704 00:31:36,910 --> 00:31:39,116 של n, מה סיגמא של n, מה סיגמא של n? 705 00:31:39,116 --> 00:31:40,990 אתה שואל מה סיגמא של n, מה סיגמא 706 00:31:40,990 --> 00:31:42,839 של n מינוס 1, מה סיגמא של 2 מינוס n? 707 00:31:42,839 --> 00:31:44,880 סופו של דבר השאלה שלך הולך להיות מה? 708 00:31:44,880 --> 00:31:50,250 מה הוא סיגמא של אחד או אפס, ערך כלשהו קטן מאוד, 709 00:31:50,250 --> 00:31:52,220 וברגע שאתה לקבל את זה, חבר שלך, 710 00:31:52,220 --> 00:31:54,350 אתה לא הולך לשאול את אותה השאלה שוב, 711 00:31:54,350 --> 00:31:55,975 אתה פשוט הולך להגיד, אה זה אפס. 712 00:31:55,975 --> 00:31:58,490 אנחנו סיימנו לשחק סוג זה של משחק מחזורי טיפש. 713 00:31:58,490 --> 00:32:02,950 >> אז רקורסיה היא הפעולה בתכנות של פונקציה שקורא לעצמו. 714 00:32:02,950 --> 00:32:06,630 תכנית זו, כאשר לוקט ולרוץ, היא הולך להתנהג בדיוק באותה הצורה, 715 00:32:06,630 --> 00:32:09,620 אבל מה מפתח הוא שבתוך של פונקציה שנקראת סיגמא, 716 00:32:09,620 --> 00:32:13,150 יש שורת קוד שבה אנחנו קוראים לעצמנו, 717 00:32:13,150 --> 00:32:14,980 אשר בדרך כלל להיות רע. 718 00:32:14,980 --> 00:32:21,160 לדוגמא, מה אם אני ראשון הידור זה, אז ודא sigma-- 719 00:32:21,160 --> 00:32:22,710 להפוך את סיגמא 1 ./sigma-1. 720 00:32:22,710 --> 00:32:25,050 721 00:32:25,050 --> 00:32:27,690 מספר שלם חיובי, אנא, 50 1275. 722 00:32:27,690 --> 00:32:30,810 אז מה שנראה הפונקציה להיות, המבוסס על מבחן אחד, נכון. 723 00:32:30,810 --> 00:32:34,917 אבל מה אם אני מקבל קצת מסוכן ולמחוק את מקרה הבסיס מה שנקרא, 724 00:32:34,917 --> 00:32:37,750 ורק אומר, גם אני רק עושה זה יותר מסובך ממה שהיא. 725 00:32:37,750 --> 00:32:42,450 בואו פשוט לחשב את סיגמא על ידי לקיחה מ 'ולאחר מכן הוספה 726 00:32:42,450 --> 00:32:44,564 בסיגמא של מינוס מ 'אחד? 727 00:32:44,564 --> 00:32:45,980 ובכן, מה שהולך לקרות כאן? 728 00:32:45,980 --> 00:32:47,140 בואו להקטין את התצוגה. 729 00:32:47,140 --> 00:32:52,920 בואו להדר מחדש את התכנית, לשמור אותו, להדר מחדש את התכנית, 730 00:32:52,920 --> 00:33:00,450 ולאחר מכן ./sigma-1 מוכן התקרבות, הכנס מספר שלם חיובי בבקשה 50,. 731 00:33:00,450 --> 00:33:02,180 732 00:33:02,180 --> 00:33:04,430 כמה מכם מוכנים לתודה לראות את זה? 733 00:33:04,430 --> 00:33:04,950 >> אישור. 734 00:33:04,950 --> 00:33:06,690 אז זה יכול לקרות ל מספר הסיבות, 735 00:33:06,690 --> 00:33:09,148 ולמען אמת זה שבוע אנחנו עומד לתת לך יותר מהם. 736 00:33:09,148 --> 00:33:11,780 אבל במקרה הזה, לנסות על דעת לאחור 737 00:33:11,780 --> 00:33:14,430 מה היה קורה כאן? 738 00:33:14,430 --> 00:33:17,400 אשמת פילוח, אמרנו אחרון זמן, מתייחס לקטע של זיכרון. 739 00:33:17,400 --> 00:33:18,690 קרה משהו רע. 740 00:33:18,690 --> 00:33:21,550 אבל מה זה היה מכאני שהשתבש 741 00:33:21,550 --> 00:33:25,000 כאן בגלל ההסרה שלי של שמקרה הבסיס מה שנקרא, 742 00:33:25,000 --> 00:33:26,870 שבו חזרתי ערך בקידוד קשיח? 743 00:33:26,870 --> 00:33:28,970 744 00:33:28,970 --> 00:33:30,460 מה אתה חושב השתבש? 745 00:33:30,460 --> 00:33:31,219 כן. 746 00:33:31,219 --> 00:33:32,135 >> קהל: [לא ברור]. 747 00:33:32,135 --> 00:33:36,387 748 00:33:36,387 --> 00:33:36,970 1 SPEAKER: אה. 749 00:33:36,970 --> 00:33:37,550 שאלה טובה. 750 00:33:37,550 --> 00:33:39,508 אז בגודל של המספר שאני מסכם את 751 00:33:39,508 --> 00:33:41,920 קיבלתי כל כך גדול שהוא חרג גודלו של שטח הזיכרון. 752 00:33:41,920 --> 00:33:44,640 רעיון טוב, אבל לא משהו מהותי הולך לגרום התרסקות. 753 00:33:44,640 --> 00:33:48,230 שעלול לגרום להצפה מספר שלם, שבו הפיסות רק להתהפך 754 00:33:48,230 --> 00:33:51,760 ואז אנחנו טועים גדולים באמת מספר לכמו מספר שלילי, 755 00:33:51,760 --> 00:33:53,260 אבל זה עצמו לא יגרום להתרסקות. 756 00:33:53,260 --> 00:33:55,509 כי בסופו של יום int הוא עדיין 32 סיביות. 757 00:33:55,509 --> 00:33:57,640 אתה לא הולך ל לגנוב בטעות קצת 33rd. 758 00:33:57,640 --> 00:33:58,431 אבל מחשבה טובה. 759 00:33:58,431 --> 00:33:58,984 כן. 760 00:33:58,984 --> 00:33:59,900 >> קהל: [לא ברור]. 761 00:33:59,900 --> 00:34:00,551 762 00:34:00,551 --> 00:34:02,300 SPEAKER 1: השיטה אף פעם לא מפסיק לרוץ, 763 00:34:02,300 --> 00:34:06,658 ואכן זה קורא לעצמו שוב ושוב ושוב ושוב 764 00:34:06,658 --> 00:34:08,449 ושוב, ואף אחד מן אלה פונקציות אי פעם 765 00:34:08,449 --> 00:34:13,310 לסיים בגלל השורה היחידה שלהם קוד קורא עצמם אחרי שוב ושוב 766 00:34:13,310 --> 00:34:14,219 ושוב. 767 00:34:14,219 --> 00:34:16,080 ומה באמת קורה כאן, ועכשיו אנחנו 768 00:34:16,080 --> 00:34:18,100 סוג של יכול לצייר ציורי הזה. 769 00:34:18,100 --> 00:34:20,899 תן לי ללכת אל תמונה רק לרגע. 770 00:34:20,899 --> 00:34:22,940 זוהי תמונה, ש סופו של דבר בשר את 771 00:34:22,940 --> 00:34:26,336 בפירוט רב יותר, ממה שקורה בתוך הזיכרון של המחשב שלך. 772 00:34:26,336 --> 00:34:28,460 ומתברר שעל החלק התחתון של התמונה הזאת 773 00:34:28,460 --> 00:34:29,709 הוא משהו שנקרא הערימה. 774 00:34:29,709 --> 00:34:31,920 זהו נתח של זיכרון, נתח של זיכרון RAM, 775 00:34:31,920 --> 00:34:33,920 זה פשוט השתמש בכל זמן פונקציה נקראת. 776 00:34:33,920 --> 00:34:36,239 כל פעם שאתה, המתכנת, לקרוא לפונקציה, 777 00:34:36,239 --> 00:34:38,860 מערכת ההפעלה, כמו Mac OS, Windows, או לינוקס, 778 00:34:38,860 --> 00:34:41,920 תופס חבורה של בתים, אולי כמה קילובייט, כמה מגה בייט אולי 779 00:34:41,920 --> 00:34:44,590 של זיכרון, מוסר אותם לך, ולאחר מכן מאפשרים לי 780 00:34:44,590 --> 00:34:47,650 אתה מפעיל הפונקציה שלך באמצעות כל מה שמשתנה שאתה צריך. 781 00:34:47,650 --> 00:34:50,699 ואם לאחר מכן לקרוא עוד פונקציה ופונקציה אחרת, 782 00:34:50,699 --> 00:34:53,590 אתה מקבל פרוסה נוספת של זיכרון ופרוסה נוספת של זיכרון. 783 00:34:53,590 --> 00:34:57,090 >> ואכן, אם מגשים הירוקים אלה מאננברג מייצג זיכרון ש, 784 00:34:57,090 --> 00:34:59,870 הנה מה שקורה הראשון פעם שאתה קורא סיגמא פונקציה. 785 00:34:59,870 --> 00:35:04,510 זה כמו לשים את מגש כמו זה על מה בתחילה ערימה ריקה. 786 00:35:04,510 --> 00:35:07,142 אבל אז אם מגש ש קורא לעצמו, אם אפשר לומר כך, 787 00:35:07,142 --> 00:35:08,850 קורא מקרה אחר של סיגמא, שזה 788 00:35:08,850 --> 00:35:11,640 כמו לשאול את מערכת ההפעלה, אוו, צריך זיכרון יותר קטן, 789 00:35:11,640 --> 00:35:12,520 תן לי את זה. 790 00:35:12,520 --> 00:35:14,840 ולאחר מכן הוא מקבל נערם על על גבי. 791 00:35:14,840 --> 00:35:18,030 אבל מה מפתח כאן הוא ש המגש הראשון הוא עדיין שם, 792 00:35:18,030 --> 00:35:20,620 משום שהוא מופעל מגש שני זה. 793 00:35:20,620 --> 00:35:23,500 עכשיו בינתיים, סיגמא קורא סיגמא, זה כמו לשאול ליותר זיכרון. 794 00:35:23,500 --> 00:35:25,830 מקבל נערם על כאן. 795 00:35:25,830 --> 00:35:29,350 סיגמא קורא סיגמא, שעוד מגש שמקבל נערם על כאן. 796 00:35:29,350 --> 00:35:32,942 ואם אתה ממשיך לעשות את זה, סופו של דבר, סוג של המפה זו חזותית 797 00:35:32,942 --> 00:35:35,525 לתרשים ש, מה קורה ל יקרה עם הערימה של מגשים? 798 00:35:35,525 --> 00:35:37,480 799 00:35:37,480 --> 00:35:41,160 זה הולך יעלה על הסכום של זיכרון המחשב שלך יש. 800 00:35:41,160 --> 00:35:45,790 וברגע שהמגש הירוק הזה עולה על הקו האופקי 801 00:35:45,790 --> 00:35:49,410 מעל ערימה ומעל זה מילת ערימה, שאנחנו נחזור בעתיד, 802 00:35:49,410 --> 00:35:50,410 שזה דבר רע. 803 00:35:50,410 --> 00:35:52,810 הערימה היא שונה קטע של זיכרון, 804 00:35:52,810 --> 00:35:55,190 ואם אתה נותן להם ערימת מגשים וערימה על, 805 00:35:55,190 --> 00:35:57,800 אתה הולך תעלה קטע משלך של זיכרון, 806 00:35:57,800 --> 00:36:00,420 ותכנית אכן הולכת להתרסק. 807 00:36:00,420 --> 00:36:02,930 >> עכשיו במאמר מוסגר, את הרעיון הזה של רקורסיה, ולכן, 808 00:36:02,930 --> 00:36:06,500 בבירור יכול להוביל לבעיות, אבל זה לא בהכרח דבר רע. 809 00:36:06,500 --> 00:36:08,840 בגלל לשקול, לאחר כל, how-- ואולי 810 00:36:08,840 --> 00:36:11,700 זה לוקח קצת זמן להתרגל ל--how אלגנטי או כמה פשוט 811 00:36:11,700 --> 00:36:14,890 יישום זה של סיגמא היה. 812 00:36:14,890 --> 00:36:17,440 ואנחנו לא מתכוונים להשתמש רקורסיה כל כך הרבה בCS50, 813 00:36:17,440 --> 00:36:20,780 אבל בCS51, ובאמת כל כיתה שבו אתה לתפעל מבני נתונים 814 00:36:20,780 --> 00:36:23,640 כמו עצים, או עצי משפחה, כי יש כמה היררכיה, 815 00:36:23,640 --> 00:36:26,000 הוא סופר, סופר שימושי. 816 00:36:26,000 --> 00:36:29,750 עכשיו, במאמר מוסגר, כך שאתה כשאפתן מדעני מחשב 817 00:36:29,750 --> 00:36:33,180 מכיר חלק מגוגל בדיחות פנימיים, אם אתה הולך לגוגל 818 00:36:33,180 --> 00:36:36,345 ואתה מסתכל על מה שהוא הגדרה של, נניח, רקורסיה, להיכנס. 819 00:36:36,345 --> 00:36:40,208 820 00:36:40,208 --> 00:36:41,110 אה-הא. 821 00:36:41,110 --> 00:36:42,670 במאמר מוסגר, אני עצרתי כמה. 822 00:36:42,670 --> 00:36:45,470 זה היה כמו 10 דקות של סחבת הבוקר. 823 00:36:45,470 --> 00:36:52,890 הודעה אם אתה גם גוגל "באלכסון", על ידי הטיית הראש שלך slightly-- 824 00:36:52,890 --> 00:36:55,120 ואז זה אחד הוא אולי הזוועתי ביותר של כל 825 00:36:55,120 --> 00:36:57,286 מאז שמישהו בילה כמו היום שלהם ביישום זה 826 00:36:57,286 --> 00:36:59,880 כמה שנות ago-- לבוא על. 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 אה, wait-- זה באג. 829 00:37:04,540 --> 00:37:08,410 830 00:37:08,410 --> 00:37:11,410 >> אז הפועל באחד מ אתרים הגדולים ביותר בעולם 831 00:37:11,410 --> 00:37:13,510 ביצים הקטנות טפשים אלה הפסחא. 832 00:37:13,510 --> 00:37:16,690 הם כנראה צורכים מספר לא טריוויאלי של שורות קוד 833 00:37:16,690 --> 00:37:19,280 רק כדי שנהיה לנו דברים קצת כיף כמו ש. 834 00:37:19,280 --> 00:37:22,140 אבל לפחות עכשיו אתה מקבל חלק מהבדיחות הפנימיים אלה. 835 00:37:22,140 --> 00:37:28,330 >> עכשיו בואו נסתכל על כמה מן שקרים לבנים אנחנו כבר אומרים לי של מנוח, 836 00:37:28,330 --> 00:37:30,707 ולהתחיל לקלף כמה שכבות מבחינה טכנית 837 00:37:30,707 --> 00:37:32,790 כך שאתה באמת מבין מה שקורה 838 00:37:32,790 --> 00:37:34,860 ואתה יכול להבין חלק מהאיומים, 839 00:37:34,860 --> 00:37:38,060 כמו Shellshock, ש עכשיו התחיל להיות 840 00:37:38,060 --> 00:37:41,110 על החזית של כולם תשומת לב, לפחות בתקשורת. 841 00:37:41,110 --> 00:37:45,810 אז הנה היא פונקציה פשוטה מאוד שמחזיר שום דבר, חלל. 842 00:37:45,810 --> 00:37:46,790 שמו הוא החלפה. 843 00:37:46,790 --> 00:37:50,880 זה לוקח בשני משתנים וזה מחזיר שום דבר. 844 00:37:50,880 --> 00:37:52,260 לוקח ובb. 845 00:37:52,260 --> 00:37:53,337 אז הפגנה מהירה. 846 00:37:53,337 --> 00:37:54,170 אנחנו הבאנו את אלה עד. 847 00:37:54,170 --> 00:37:56,100 אנחנו יכולים גם לקחת קצת לשבור כאן רק לרגע 848 00:37:56,100 --> 00:37:57,250 ויש לי משהו קטן לשתות. 849 00:37:57,250 --> 00:38:00,120 אם מישהו לא הייתי מתנגד להצטרף אותי כאן רק לרגע. 850 00:38:00,120 --> 00:38:01,830 מה הדעה עליך בחולצה בצבע החום? 851 00:38:01,830 --> 00:38:02,335 בואו למעלה. 852 00:38:02,335 --> 00:38:04,060 853 00:38:04,060 --> 00:38:05,260 רק היום אחד. 854 00:38:05,260 --> 00:38:06,251 תודה לך, אם כי. 855 00:38:06,251 --> 00:38:08,000 בסדר, ויש לנו עולה שכאן? 856 00:38:08,000 --> 00:38:08,660 מה שמך? 857 00:38:08,660 --> 00:38:09,360 >> 4 SPEAKER: לורה. 858 00:38:09,360 --> 00:38:09,740 >> 1 SPEAKER: לורה. 859 00:38:09,740 --> 00:38:10,370 בואו למעלה. 860 00:38:10,370 --> 00:38:11,460 861 00:38:11,460 --> 00:38:13,850 אז לורה, היום אתגר מאוד פשוט. 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 נחמד לפגוש את יו. 864 00:38:15,370 --> 00:38:16,410 865 00:38:16,410 --> 00:38:16,910 בסדר. 866 00:38:16,910 --> 00:38:21,179 אז יש לנו קצת חלב לכאן ו יש לנו כמה מיץ תפוזים כאן 867 00:38:21,179 --> 00:38:23,345 וכמה כוסות ש בהשאלה מאננברג היום. 868 00:38:23,345 --> 00:38:24,178 >> SPEAKER 4: Borrowed. 869 00:38:24,178 --> 00:38:27,240 SPEAKER 1: והולכים קדימה ואתן לך חצי כוס של זה. 870 00:38:27,240 --> 00:38:28,250 871 00:38:28,250 --> 00:38:28,800 בסדר. 872 00:38:28,800 --> 00:38:30,750 ואנחנו אתן לך חצי כוס חלב. 873 00:38:30,750 --> 00:38:31,905 874 00:38:31,905 --> 00:38:35,890 אה, ורק כדי שאתה יכול זוכר מה זה היה כמו, 875 00:38:35,890 --> 00:38:38,860 נזכרתי להביא זה למעלה ועל היום. 876 00:38:38,860 --> 00:38:42,030 877 00:38:42,030 --> 00:38:42,530 אוקיי. 878 00:38:42,530 --> 00:38:45,470 אם לא אכפת לך, בואו נראה, אנחנו יכול לשים אותם על המשקפיים שלך 879 00:38:45,470 --> 00:38:46,560 אם אתה רוצה. 880 00:38:46,560 --> 00:38:48,710 זה יהיה העולם מהעיניים של לורה. 881 00:38:48,710 --> 00:38:49,210 בסדר. 882 00:38:49,210 --> 00:38:53,820 אז המטרה שלך, קבלה שתי כוסות נוזל כאן, חלב ומיץ תפוזים, 883 00:38:53,820 --> 00:38:58,370 הוא להחליף שני את התוכן כך ש מיץ תפוזים הולך לתוך כוס חלב 884 00:38:58,370 --> 00:39:00,710 והחלב נכנס כוס מיץ תפוזים. 885 00:39:00,710 --> 00:39:02,359 >> SPEAKER 4: האם אני מקבל עוד כוס? 886 00:39:02,359 --> 00:39:05,650 1 SPEAKER: אני אף אני כל כך שמח שהשאלה, זה היה מדה הרבה יותר טוב 887 00:39:05,650 --> 00:39:06,710 אם אתה לא ביקש. 888 00:39:06,710 --> 00:39:10,620 אבל כן, אנחנו יכולים להציע לך שליש כוס זה ריק, כמובן. 889 00:39:10,620 --> 00:39:11,120 בסדר. 890 00:39:11,120 --> 00:39:12,300 אז להחליף את התוכן שם. 891 00:39:12,300 --> 00:39:16,100 892 00:39:16,100 --> 00:39:17,050 נחמד מאוד. 893 00:39:17,050 --> 00:39:20,390 894 00:39:20,390 --> 00:39:21,305 טוב מאוד. 895 00:39:21,305 --> 00:39:23,121 896 00:39:23,121 --> 00:39:24,745 אתה עושה את זה בזהירות ראויה לציון. 897 00:39:24,745 --> 00:39:26,970 898 00:39:26,970 --> 00:39:28,655 ושלב שלישי. 899 00:39:28,655 --> 00:39:30,390 900 00:39:30,390 --> 00:39:31,350 בסדר. 901 00:39:31,350 --> 00:39:31,930 מצוין. 902 00:39:31,930 --> 00:39:33,930 מחיאות כפות גדולות יהיה טוב ללורה. 903 00:39:33,930 --> 00:39:36,500 904 00:39:36,500 --> 00:39:37,000 בסדר. 905 00:39:37,000 --> 00:39:40,790 יש לנו מתנת פרידה קטנה בשבילך, אבל תנו לי לקחת את אלה. 906 00:39:40,790 --> 00:39:42,620 תודה רבה לך. 907 00:39:42,620 --> 00:39:46,170 אז דוגמא פשוטה, אם כי, על מנת להוכיח כי אם אתה עושה 908 00:39:46,170 --> 00:39:48,300 רוצה להחליף את התוכן של שתי מכולות, 909 00:39:48,300 --> 00:39:52,360 או בואו קוראים להם משתנה, אתה צריך קצת אחסון זמני 910 00:39:52,360 --> 00:39:56,710 לביים אחד מתוכן כל כך שאתה באמת יכול לעשות החלפה. 911 00:39:56,710 --> 00:40:01,790 אז אכן, קוד מקור זה עד כאן ב C הוא נציג בדיוק את זה. 912 00:40:01,790 --> 00:40:06,340 אם מיץ התפוזים היה והחלב היה ב, ואנחנו רוצים להחליף את שני, 913 00:40:06,340 --> 00:40:08,990 אתה יכול לנסות משהו יצירתי על ידי שפיכה אחד לתוך השני, 914 00:40:08,990 --> 00:40:11,031 אבל זה כנראה לא היית בסופו של טוב במיוחד. 915 00:40:11,031 --> 00:40:15,260 וכך אנו משתמשים כוס, שיחה שלישית זה TMP, T-M-P על ידי אמנה, 916 00:40:15,260 --> 00:40:19,370 ולשים את התוכן של OJ שב, לאחר מכן להחליף כוס אחת, 917 00:40:19,370 --> 00:40:22,610 לאחר מכן הניח את OJ לתוך כוס מקורית, ובכך 918 00:40:22,610 --> 00:40:25,320 השגת, בדיוק כפי ש לורה עשתה, ההחלפה. 919 00:40:25,320 --> 00:40:26,850 >> אז בואו לעשות בדיוק את זה. 920 00:40:26,850 --> 00:40:30,110 תן לי ללכת קדימה ולפתוח עד דוגמא זה 921 00:40:30,110 --> 00:40:32,720 נקרא למעשה "לא להחליף, "בגלל זה הוא לא 922 00:40:32,720 --> 00:40:36,180 כפשוט עשה כפי שאתה עלול לחשוב. 923 00:40:36,180 --> 00:40:41,190 אז בתכנית זו, תבחין ש אני משתמש stdio.h, חבר הוותיק שלנו. 924 00:40:41,190 --> 00:40:43,130 יש לי אב הטיפוס עבור החלפה שם למעלה, ש 925 00:40:43,130 --> 00:40:45,450 משמעות הדבר היא היישום שלה כנראה למטה, 926 00:40:45,450 --> 00:40:48,050 ובואו נראה מה זה עיקרי תכנית הולכת לעשות לי. 927 00:40:48,050 --> 00:40:52,020 אני מצהיר ראשון x int מקבל אחד, וint y מקבל שני. 928 00:40:52,020 --> 00:40:54,930 אז תחשוב על אלה כOJ וחלב, בהתאמה. 929 00:40:54,930 --> 00:40:57,100 ואז יש לי רק printf אומר x הוא זה 930 00:40:57,100 --> 00:41:00,120 וy הוא זה, רק כדי שאוכל מבחינה ויזואלית לראות מה קורה. 931 00:41:00,120 --> 00:41:03,810 אז יש לי printf בטענה שאני מחליף שני, 932 00:41:03,810 --> 00:41:07,100 ולאחר מכן אני מדפיס את טוען שהם החליפו, 933 00:41:07,100 --> 00:41:09,300 ואני להדפיס את x, y שוב. 934 00:41:09,300 --> 00:41:13,010 אז כאן למטה בהחלפה היא בדיוק מה שעשה לורה, 935 00:41:13,010 --> 00:41:16,240 ובדיוק את מה שראינו על המסך לפני רגע. 936 00:41:16,240 --> 00:41:19,380 >> אז בואו נלך קדימה ו יהיה מאוד מאוכזב. 937 00:41:19,380 --> 00:41:24,690 לא עושה שום החלפה, ולהפעיל לא החלפה, התקרבות על הפלט כאן. 938 00:41:24,690 --> 00:41:28,320 הזן x הוא 1, y הוא 2, החלפה החליף. 939 00:41:28,320 --> 00:41:32,700 x הוא עדיין 1, וy הוא עדיין 2. 940 00:41:32,700 --> 00:41:37,630 אז למרות שלמען אמת, זה נראה בדיוק כמו, אם כי יותר מבחינה טכנית, 941 00:41:37,630 --> 00:41:40,730 מה לורה עשתה, לא נראה לי לעבוד. 942 00:41:40,730 --> 00:41:42,130 אז מדוע זה כך? 943 00:41:42,130 --> 00:41:46,630 ובכן, מתברר שכאשר אנו כותבים תכנית כזאת 944 00:41:46,630 --> 00:41:51,590 ששניהם עיקריים, מודגשים כאן, ולאחר מכן פונקציה אחרת, כמו החלפה, 945 00:41:51,590 --> 00:41:54,230 מודגש כאן, ש הוא קורא, העולם 946 00:41:54,230 --> 00:41:57,030 נראה קצת משהו כמו מגשים אלה לפני רגע. 947 00:41:57,030 --> 00:42:00,440 כאשר עיקרי ראשון מקבל נקרא, זה כמו לשאול את מערכת הפעלה 948 00:42:00,440 --> 00:42:04,030 בשביל קצת זיכרון לכל מקומי משתנים כמו x ו y שיש עיקריים, 949 00:42:04,030 --> 00:42:05,660 והם בסופו ממש שם. 950 00:42:05,660 --> 00:42:10,920 אבל אם שיחות עיקריות להחליף, ועיקרי עובר להחליף שני טיעונים, וb, 951 00:42:10,920 --> 00:42:16,410 מיץ תפוזים וחלב, זה לא כמו ש מסירת מיץ התפוזים והחלב 952 00:42:16,410 --> 00:42:17,500 ללורה. 953 00:42:17,500 --> 00:42:21,300 מה מחשב עושה, זה עובר עותקים של מיץ התפוזים 954 00:42:21,300 --> 00:42:27,110 ועותקים של חלב ללורה, כך ש מה סופו של דבר בתוך מגש זה 955 00:42:27,110 --> 00:42:32,510 הוא ערך אחד ושני, או OJ וחלב, אך עותקים שלהם, 956 00:42:32,510 --> 00:42:34,790 כך שבשלב זה בסיפור, יש 957 00:42:34,790 --> 00:42:36,930 הוא OJ וחלב בכל אחד ממגשים אלה. 958 00:42:36,930 --> 00:42:39,260 יש אחד ושני בכל אחד ממגשים אלה, 959 00:42:39,260 --> 00:42:41,720 ופונקצית swap אכן פועלת. 960 00:42:41,720 --> 00:42:46,090 זה החלפתם בתוך של המגש השני העליון, 961 00:42:46,090 --> 00:42:48,147 אבל יש החלפה שלא היה השפעה. 962 00:42:48,147 --> 00:42:49,980 ועל סמך רק חלק עיקרון בסיסי שיש לנו 963 00:42:49,980 --> 00:42:52,970 דיבר על לפני, ואכן רק לפני כמה דקות, מה ש 964 00:42:52,970 --> 00:42:58,770 עשוי להסביר מדוע שינוי וb הפנימית של החלפה 965 00:42:58,770 --> 00:43:05,560 אין כל השפעה על x, y, אף על פי ש עברתי x ו y לפונקצית swap. 966 00:43:05,560 --> 00:43:08,750 מה מילת המפתח כאן ש אולי פשטני להסביר? 967 00:43:08,750 --> 00:43:11,250 968 00:43:11,250 --> 00:43:12,627 אני חושב ששמעתי את זה כאן? 969 00:43:12,627 --> 00:43:13,335 קהל: חזור. 970 00:43:13,335 --> 00:43:14,085 SPEAKER 1: חזור? 971 00:43:14,085 --> 00:43:14,590 לא יחזור. 972 00:43:14,590 --> 00:43:15,895 בואו נלך עם אחד אחר. 973 00:43:15,895 --> 00:43:16,395 מה זה? 974 00:43:16,395 --> 00:43:17,080 >> קהל: [לא ברור]. 975 00:43:17,080 --> 00:43:20,000 >> 1 SPEAKER: אוקיי, אז return-- שיכולנו לעשות את עבודת שיבה בסיפור, 976 00:43:20,000 --> 00:43:21,914 אבל יש הסבר פשוט יותר. 977 00:43:21,914 --> 00:43:22,580 קהל: היקף. 978 00:43:22,580 --> 00:43:23,288 SPEAKER 1: היקף. 979 00:43:23,288 --> 00:43:24,300 אני אקח את ההיקף. 980 00:43:24,300 --> 00:43:27,290 אז היקף, זוכר איפה x, y שלנו הכריזו. 981 00:43:27,290 --> 00:43:30,840 הם הכריזו בתוך של עיקרי ממש עד כאן. 982 00:43:30,840 --> 00:43:33,200 וb, בינתיים, הם הכריז ביעילות 983 00:43:33,200 --> 00:43:35,930 בתוך ההחלפה, לא די ב הפלטה אבל עדיין מתולתלת 984 00:43:35,930 --> 00:43:37,690 באזור הכללי של החלפה. 985 00:43:37,690 --> 00:43:40,560 וכך אכן, וb קיימים רק בתוך מגש זה 986 00:43:40,560 --> 00:43:44,850 מאננברג, זה נתח שני של קוד. 987 00:43:44,850 --> 00:43:49,500 אז אנחנו אכן משתנים העותק, אבל זה לא באמת כל כך מועיל. 988 00:43:49,500 --> 00:43:52,190 >> אז בואו נסתכל על רמה מעט נמוכה יותר זה. 989 00:43:52,190 --> 00:43:55,430 אני הולך לחזור אל ספריית המקור, 990 00:43:55,430 --> 00:43:58,330 ואני הולך ראשון להתקרב לכאן, ורק 991 00:43:58,330 --> 00:44:02,290 כדי לאשר שאני בזה חלון מסוף גדול יותר, 992 00:44:02,290 --> 00:44:04,430 התכנית עדיין מתנהגת ככה. 993 00:44:04,430 --> 00:44:06,840 נניח עכשיו שזה לא מכוון. 994 00:44:06,840 --> 00:44:10,090 ברור שאני רוצה להחליף ל עבודה, כך שזה מרגיש כמו באג. 995 00:44:10,090 --> 00:44:12,780 עכשיו אני יכול להתחיל להוסיף הרבה printf של לקוד שלי, 996 00:44:12,780 --> 00:44:16,010 להדפיס את x לכאן, y מעל כאן, כאן, ב כאן. 997 00:44:16,010 --> 00:44:18,220 אבל בכנות, זה כנראה מה ש אתה כבר עושה במשך כמה שבועות 998 00:44:18,220 --> 00:44:20,190 עכשיו, בשעתי עבודה ובבית בעת עבודה 999 00:44:20,190 --> 00:44:22,150 על psets מנסה למצוא כמה באגים. 1000 00:44:22,150 --> 00:44:25,560 אבל תראה, אם יש לך כבר, הבעיה שהציבה שלוש מציגה לך 1001 00:44:25,560 --> 00:44:31,630 לפקודה הנקראת GDB, שבו GDB, הבאגים גנו, 1002 00:44:31,630 --> 00:44:34,040 יש עצמו חבורה של שלמה תכונות שלמעשה יכול 1003 00:44:34,040 --> 00:44:38,160 נתת לנו להבין מצבים כמו זה, אבל יותר משכנע, 1004 00:44:38,160 --> 00:44:39,940 לפתור בעיות ולמצוא באגים. 1005 00:44:39,940 --> 00:44:40,940 אז אני הולך לעשות את זה. 1006 00:44:40,940 --> 00:44:44,770 במקום ./noswap, אני במקום הולך לרוץ ./noswap GDB. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 במילים אחרות, אני הולך לרוץ שלי לא בש, החבר החדש שלנו התכנית 1009 00:44:51,200 --> 00:44:51,850 היום. 1010 00:44:51,850 --> 00:44:53,970 אני הולך לרוץ שלי noswap תכנית בתוך 1011 00:44:53,970 --> 00:44:56,900 של תכנית אחרת זה נקרא GDB, אשר הוא הבאגים, ש 1012 00:44:56,900 --> 00:45:01,035 היא תכנית שנועדה לסייע אתם בני האדם למצוא ולהסיר באגים. 1013 00:45:01,035 --> 00:45:03,410 אז אם אני מכה הפעל כאן, יש סכום זוועתי של טקסט 1014 00:45:03,410 --> 00:45:04,868 כי אתה באמת לא צריך לקרוא. 1015 00:45:04,868 --> 00:45:07,290 זה בעצם הסחת דעת משורת הפקודה של, אשר 1016 00:45:07,290 --> 00:45:10,030 אני הולך להכות בקרה-L לקום בחלק העליון יש. 1017 00:45:10,030 --> 00:45:11,800 זוהי הפקודה GDB. 1018 00:45:11,800 --> 00:45:15,550 אם אני רוצה להפעיל את התכנית עכשיו, כגיליון לרמות קטן על של היום 1019 00:45:15,550 --> 00:45:21,860 שקופית מרמזת, הפעלה היא ראשונה פקודות שנועדנו להציג. 1020 00:45:21,860 --> 00:45:25,150 ואני רק הולך להקליד רץ עד לכאן בתוך GDB, 1021 00:45:25,150 --> 00:45:26,811 ואכן זה רץ התכנית שלי. 1022 00:45:26,811 --> 00:45:29,310 עכשיו יש כמה נוסף תפוקות של המסך כזה, 1023 00:45:29,310 --> 00:45:31,910 אבל זה אנאלי פשוט להיות GDB ואומר לנו מה קורה. 1024 00:45:31,910 --> 00:45:34,451 אתה לא באמת צריך לדאוג על פרטים האישיים של עכשיו. 1025 00:45:34,451 --> 00:45:36,890 אבל מה שבאמת מגניב על GDB, אם אני עושה את זה again-- 1026 00:45:36,890 --> 00:45:42,100 בקרה-L מנקה את screen-- תן לי ללכת קדימה וסוג "לשבור ראשי," ובכך, 1027 00:45:42,100 --> 00:45:45,743 כשאני מקיש Enter, הגדרה מה נקרא נקודת הפסקה בnoswap.c, 1028 00:45:45,743 --> 00:45:51,270 שורה 16, המקום שבו GDB הבין את התכנית שלי למעשה 1029 00:45:51,270 --> 00:45:53,070 הוא, הפונקציה שלי היא בעצם. 1030 00:45:53,070 --> 00:45:55,070 זו אנו להתעלם לעת עתה אבל זה את הכתובת 1031 00:45:55,070 --> 00:45:57,310 בזיכרון במיוחד של פונקציה זו. 1032 00:45:57,310 --> 00:46:00,240 אז עכשיו כשאני מקליד לרוץ, שים לב למה זה מגניב כאן. 1033 00:46:00,240 --> 00:46:05,650 התכנית שלי שוברת בי השורה אמר לי GDB כדי להשהות ביצוע ב. 1034 00:46:05,650 --> 00:46:09,850 אז אני לא צריך עכשיו לשנות את הקוד שלי, להוסיף קצת printf של, הדר מחדש את זה, שידור חוזר 1035 00:46:09,850 --> 00:46:13,300 זה, לשנות, להוסיף קצת printf של, לשמור אותו, להדר מחדש את זה, להפעיל אותו. 1036 00:46:13,300 --> 00:46:18,100 אני רק יכול ללכת דרך התכנית שלי צעד אחר צעד אחר צעד במהירות אנושית, 1037 00:46:18,100 --> 00:46:20,880 לא בסוג Intel-פנימי של מהירות. 1038 00:46:20,880 --> 00:46:24,580 >> אז עכשיו שם לב הקו הזה מופיע כאן, ואם אני חוזר 1039 00:46:24,580 --> 00:46:27,800 לתכנית שלי בgedit, שם לב שזה בעצם 1040 00:46:27,800 --> 00:46:29,280 השורה הראשונה של קוד. 1041 00:46:29,280 --> 00:46:31,240 יש שורה 16 ​​בgedit. 1042 00:46:31,240 --> 00:46:34,610 יש שורה 16 ​​בתוך GDB, ואפילו למרות שממשק שחור ולבן זה 1043 00:46:34,610 --> 00:46:37,760 אינו כמעט כמשתמש ידידותי, שזה אומר 1044 00:46:37,760 --> 00:46:41,680 16 קו שלא בוצעו עדיין, אבל זה עומד להיות. 1045 00:46:41,680 --> 00:46:46,220 אז אכן, אם אני מקליד הדפסה x, לא printf, רק x הדפסה, 1046 00:46:46,220 --> 00:46:50,730 אני מקבל ערך כלשהו מזויף יש אפס, כי x לא אותחל עדיין. 1047 00:46:50,730 --> 00:46:54,760 אז אני הולך להקליד הבא, או, אם אתה רוצה להיות מפואר, רק n לבא. 1048 00:46:54,760 --> 00:46:59,090 אבל כאשר אני מקליד הבא להיכנס, עכשיו שמתי לב שהוא נע על קו 17. 1049 00:46:59,090 --> 00:47:02,840 אז מבחינה לוגית, אם אני כבר בוצע שורת 16 ועכשיו אני מקליד x הדפסה, 1050 00:47:02,840 --> 00:47:03,640 מה אני צריך לראות? 1051 00:47:03,640 --> 00:47:04,970 1052 00:47:04,970 --> 00:47:05,520 אחת. 1053 00:47:05,520 --> 00:47:07,820 >> ועכשיו זה הוא אף מבלבל. 1054 00:47:07,820 --> 00:47:11,260 2 $ הוא רק דרך מפוארת של, אם אתה רוצה להתייחס לשווי שמאוחר יותר, 1055 00:47:11,260 --> 00:47:12,510 אתה יכול להגיד "דולר לחתום על שני." 1056 00:47:12,510 --> 00:47:13,480 זה כמו חזרה התייחסות. 1057 00:47:13,480 --> 00:47:14,570 אבל לעת עתה, פשוט להתעלם מזה. 1058 00:47:14,570 --> 00:47:17,070 מה שמעניין הוא מה בצד ימין של סימן השוויון. 1059 00:47:17,070 --> 00:47:21,000 ועכשיו, אם אני מקליד הבא שוב וy הדפסה, אני צריך לראות 2. 1060 00:47:21,000 --> 00:47:23,870 אני גם יכול כעת להדפיס x שוב, ולמען אמת, 1061 00:47:23,870 --> 00:47:27,130 אם אני מקבל קצת מבולבל לגבי איפה אני, אני יכול להקליד רשימה לרשימה 1062 00:47:27,130 --> 00:47:30,590 ורק לראות כמה הקשר סביב הנקודה אני בעצם ב. 1063 00:47:30,590 --> 00:47:35,180 ועכשיו אני יכול להקליד הבא, וx יש 1. 1064 00:47:35,180 --> 00:47:36,300 עכשיו אני מקליד הבא. 1065 00:47:36,300 --> 00:47:37,710 אה, y הוא 2. 1066 00:47:37,710 --> 00:47:40,750 ושוב, זה מבלבל, כי התפוקה של GDB 1067 00:47:40,750 --> 00:47:43,044 הוא להיות מעורבב עם התפוקה שלי. 1068 00:47:43,044 --> 00:47:45,710 אבל אם אתה לזכור, על ידי מציץ קדימה ואחורה בקוד שלך 1069 00:47:45,710 --> 00:47:47,740 או להנחתו צד על ידי צד אולי, אתה תמצאו 1070 00:47:47,740 --> 00:47:51,020 רואה שבאמת אני רק דריכה דרך התכנית שלי. 1071 00:47:51,020 --> 00:47:54,620 >> אבל שים לב מה קורה בהמשך, פשוטו כמשמעו. 1072 00:47:54,620 --> 00:47:56,380 הנה שורה 22. 1073 00:47:56,380 --> 00:48:01,315 תן לי ללכת על זה, וכך הלאה ל23, ואם אני מדפיס x עכשיו, עדיין אחד. 1074 00:48:01,315 --> 00:48:03,890 ואם אני מדפיס y עכשיו, עדיין אחד. 1075 00:48:03,890 --> 00:48:05,820 אז זה לא תרגיל שימושי. 1076 00:48:05,820 --> 00:48:07,450 אז בואו לעשות שוב זה. 1077 00:48:07,450 --> 00:48:10,069 תן לי לחזור עד עליונה וסוג ריצה שוב. 1078 00:48:10,069 --> 00:48:12,110 וזה אומר תכנית זה להיות מדובג 1079 00:48:12,110 --> 00:48:14,109 החל כבר, התחיל מההתחלה. 1080 00:48:14,109 --> 00:48:15,420 כן, בואו נעשיתי את זה שוב. 1081 00:48:15,420 --> 00:48:22,000 והפעם בואו נעשה הבא, הבא, הבא, הבא, הבא, 1082 00:48:22,000 --> 00:48:24,180 אבל עכשיו תתחיל להיות מעניין. 1083 00:48:24,180 --> 00:48:27,760 עכשיו אני רוצה להיכנס החלפה, כך שאני לא להקליד הבא. 1084 00:48:27,760 --> 00:48:34,380 אני מקליד צעד, ועכשיו שמתי לב לזה קפץ לי לשורת noswap.c 33. 1085 00:48:34,380 --> 00:48:37,240 אם אני חוזר לgedit, מה שורת 33? 1086 00:48:37,240 --> 00:48:40,500 זה הראשון בפועל שורת קוד הפנימי של החלפה. 1087 00:48:40,500 --> 00:48:44,150 וזה נחמד, כי עכשיו אני יכול סוג של לחטט ולקבל סקרן 1088 00:48:44,150 --> 00:48:46,052 על מה שקורה באמת שם. 1089 00:48:46,052 --> 00:48:46,760 תן לי להדפיס tmp. 1090 00:48:46,760 --> 00:48:47,770 1091 00:48:47,770 --> 00:48:48,800 וואו. 1092 00:48:48,800 --> 00:48:51,438 מדוע tmp יש לי כמה ערך מטורף, מזויף אשפה? 1093 00:48:51,438 --> 00:48:54,579 1094 00:48:54,579 --> 00:48:56,120 קהל: זה לא אותחל. 1095 00:48:56,120 --> 00:48:57,150 1 SPEAKER: זה לא אותחל. 1096 00:48:57,150 --> 00:49:00,270 ואכן, בעת הפעלת תכנית, אתה נתון חבורה של זיכרון שלמה 1097 00:49:00,270 --> 00:49:03,392 על ידי מערכת ההפעלה, אבל אתה לא אותחל כל ערכים, 1098 00:49:03,392 --> 00:49:05,600 לכן כל מה שפיסות אתה רואה כאן, למרות שזה 1099 00:49:05,600 --> 00:49:07,770 שלילי הגדול המטורף הזה מספר, רק אומר 1100 00:49:07,770 --> 00:49:10,750 כי אלה הם השרידים מ כמה שימוש קודם של זיכרון RAM ש, 1101 00:49:10,750 --> 00:49:13,050 אף על פי שיש לי לא את עצמי זקוק לו עדיין. 1102 00:49:13,050 --> 00:49:17,086 אז עכשיו אני הולך קדימה וסוג הבא, ואם אני עכשיו הקלד tmp הדפסה, 1103 00:49:17,086 --> 00:49:17,835 מה אני צריך לראות? 1104 00:49:17,835 --> 00:49:19,570 1105 00:49:19,570 --> 00:49:23,360 לא משנה מה הערך של היה, הוא הטיעון הראשון, רק 1106 00:49:23,360 --> 00:49:25,550 כמו x היה הראשון דבר שעבר ב, 1107 00:49:25,550 --> 00:49:30,450 כך וx צריך להיות זהה, כך להדפיס tmp צריך להדפיס לי אחד. 1108 00:49:30,450 --> 00:49:36,360 >> אז מה תראה בסט בעיה שלוש היא הדרכה של מיני על GDB, 1109 00:49:36,360 --> 00:49:40,020 אבל מבין שזה הוא ההתחלה של מבט על כלי זה בעצם 1110 00:49:40,020 --> 00:49:42,774 לעזור לך לפתור את הבעיות כל כך הרבה יותר ביעילות. 1111 00:49:42,774 --> 00:49:44,690 מה אנחנו בסופו של הולך לעשות ביום רביעי 1112 00:49:44,690 --> 00:49:48,180 הוא מתחיל לקלף כמה שכבות ולהסיר כמה גלגלים עזר. 1113 00:49:48,180 --> 00:49:50,496 שמחרוזת הדבר שנקרא ש אנחנו השתמשנו במשך זמן מה, 1114 00:49:50,496 --> 00:49:53,370 אנחנו הולכים לקחת לאט כי משם ממך ולהתחיל לדבר על 1115 00:49:53,370 --> 00:49:55,725 משהו יותר אזוטרי הידועה בשם * char, 1116 00:49:55,725 --> 00:49:59,550 אבל אנחנו הולכים לעשות זה נחמד ו בעדינות בהתחלה, למרות שמצביעים, 1117 00:49:59,550 --> 00:50:02,730 כפי שהם נקראים, יכול לעשות כמה דברים רעים מאוד אם התעללו, 1118 00:50:02,730 --> 00:50:06,040 על ידי התבוננות בקצת פלסטלינה מ ידידנו ניק Parlante מאוניברסיטת סטנפורד 1119 00:50:06,040 --> 00:50:09,670 אוניברסיטה, פרופסור במחשב מדע מי להרכיב תצוגה זו 1120 00:50:09,670 --> 00:50:11,075 של מה לבוא ביום רביעי. 1121 00:50:11,075 --> 00:50:12,196 1122 00:50:12,196 --> 00:50:13,400 >> [וידאו השמעה] 1123 00:50:13,400 --> 00:50:13,900 היי, בינקי. 1124 00:50:13,900 --> 00:50:14,930 1125 00:50:14,930 --> 00:50:15,780 יתעורר. 1126 00:50:15,780 --> 00:50:17,240 זה זמן בשביל כיף מצביע. 1127 00:50:17,240 --> 00:50:18,260 1128 00:50:18,260 --> 00:50:19,350 >> 'מה זה? 1129 00:50:19,350 --> 00:50:21,150 למד על מצביעים? 1130 00:50:21,150 --> 00:50:22,050 אה, טופי! 1131 00:50:22,050 --> 00:50:22,897 1132 00:50:22,897 --> 00:50:23,730 [END הפעלת וידאו] 1133 00:50:23,730 --> 00:50:25,396 1 SPEAKER: זה מחכה לכם ביום רביעי. 1134 00:50:25,396 --> 00:50:26,440 אנחנו אראה אותך אז. 1135 00:50:26,440 --> 00:50:27,106 [וידאו השמעה] 1136 00:50:27,106 --> 00:50:30,420 -ואז עכשיו, מחשבות עמוקות, על ידי ךייבן Farnham. 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> "למה אנחנו לומדים C? 1139 00:50:35,900 --> 00:50:36,785 למה לא +? 1140 00:50:36,785 --> 00:50:38,550 1141 00:50:38,550 --> 00:50:40,910 >> [שחוק] 1142 00:50:40,910 --> 00:50:42,160 >> [END הפעלת וידאו]