1 00:00:00,000 --> 00:00:12,040 >> [ΜΟΥΣΙΚΗ ΠΑΙΖΟΝΤΑΣ] 2 00:00:12,040 --> 00:00:16,460 >> ΟΜΙΛΗΤΗΣ 1: Εντάξει, αυτό είναι 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 >> ΟΜΙΛΗΤΗΣ 2: Ασφάλεια εμπειρογνώμονες έχουν προειδοποίησε ότι ένα σοβαρό ελάττωμα θα μπορούσε να 21 00:01:11,250 --> 00:01:15,650 να είναι έτοιμος να επηρεάσει εκατοντάδες τα εκατομμύρια των χρηστών του κόσμου web. 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 bug, το λογισμικό που εκμεταλλεύεται. 25 00:01:28,910 --> 00:01:33,230 Hackers χρησιμοποιούν τον ιό για να σαρώσετε ευάλωτες τα συστήματα που τρέχουν Linux και Unix 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 επιτρέπεται μόνο hackers για να κατασκοπεύει τους υπολογιστές. 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 από όλους τους διακομιστές web είναι σε κινδύνου, συμπεριλαμβανομένων και ορισμένων υπολογιστές Mac. 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 Όποιος μπορεί να αντέξει οικονομικά να πρέπει να εξετάσουμε για την εφαρμογή της παρακολούθησης και τους web 45 00:02:35,390 --> 00:02:37,355 firewalls για να κοιτάξει έξω για τυχόν επιθέσεις. 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 ΟΜΙΛΗΤΗΣ 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 ΟΜΙΛΗΤΗΣ 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: Οπότε όλα αυτά είναι αλήθεια, αλλά το αστείο πράγμα είναι, σχεδόν όλα 60 00:03:15,560 --> 00:03:18,330 από τις εικόνες που μόλις είδατε, εκτός ίσως από το πληκτρολόγιο, 61 00:03:18,330 --> 00:03:20,930 δεν έχει τίποτα να κάνει με η απολύτως bug. 62 00:03:20,930 --> 00:03:23,960 Servers και σύρματα και ούτω καθεξής, αυτό είναι το είδος της εφαπτομενικά που σχετίζονται, 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, Β-Α-Σ-Η. 69 00:03:43,690 --> 00:03:46,890 Αυτό είναι το Bourne-again κέλυφος, η οποία είναι μόνο ένα φανταχτερό τρόπο λέγοντας, 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 Μπορώ να χρησιμοποιήσω πραγματικά σύνταξη που είναι αρκετά όπως C. Δεν είναι ακριβώς το ίδιο, 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, δεν σε Java, 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 OS, 93 00:04:54,010 --> 00:04:55,620 Αυτό είναι ένα πρόγραμμα που ονομάζεται Terminal. 94 00:04:55,620 --> 00:04:58,800 Έρχεται χτισμένο σε κανέναν υπολογιστή που έχει ένα Mac σε αυτό το δωμάτιο, 95 00:04:58,800 --> 00:05:03,640 και μπορείτε να κάνετε κάτι παρόμοιο και σε Mac OS, αλλά μπορείτε να πάτε πιο πέρα ​​από αυτό. 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 >> [AUDIO PLAYBACK] 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: Λοιπόν, για να είμαστε δίκαιοι, δεν ήταν στην πραγματικότητα "γεια". 109 00:05:35,030 --> 00:05:36,894 Ήταν συνήθως κάτι μοιάζει περισσότερο με αυτό-- 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 ΟΜΙΛΗΤΗΣ 1: --that I 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 αγοράσω ένα Mac, κυριολεκτικά τώρα όταν έχετε καπάκι σας ανοικτά, 124 00:06:10,448 --> 00:06:12,940 μπορείτε να δοκιμάσετε την πληκτρολόγηση σε ότι πρόγραμμα που ονομάζεται Terminal. 125 00:06:12,940 --> 00:06:15,410 Terminal είναι κάτω Εφαρμογές Utilities-- 126 00:06:15,410 --> 00:06:18,790 για μια φορά, οι χρήστες των Windows δεν χρειάζεται να ανησυχούν για το συγκεκριμένο threat-- 127 00:06:18,790 --> 00:06:22,310 αλλά όσοι από εσάς με Mac να πληκτρολογήσετε αυτό σε ένα παράθυρο, όπως θα το κάνω εδώ, 128 00:06:22,310 --> 00:06:24,210 και αν έχετε πληκτρολογήσει ότι σε αυτό το πρόγραμμα 129 00:06:24,210 --> 00:06:28,830 ονομάζεται Terminal, όπως θα κάνω τώρα, αν δείτε τη λέξη «ευάλωτα», 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 "Echo ευάλωτες," και, στη συνέχεια, πέρα από αυτό υπάρχει ακόμα περισσότερα. 149 00:07:25,160 --> 00:07:26,530 Ένα άλλο ερωτηματικό, bash -c :. 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 γιατί υπάρχει ένα bug στο Bash οποία παρόλο Bash έπρεπε να σταματήσει 155 00:07:44,290 --> 00:07:48,980 διαβάζοντας τις γραμμές του δικαιώματος εντολών εκεί μετά το κίτρινο κείμενο, 156 00:07:48,980 --> 00:07:52,520 για ένα 20-plus ετών bug, 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 Απλά είπε "echo hello" ή "echo ευάλωτες," 160 00:08:01,340 --> 00:08:05,449 αλλά τι γίνεται αν έκανε κάτι πραγματικά κακόβουλα, όπως rm -rf *, 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 Έτσι είναι το λεγόμενο wild card, οπότε αυτό σημαίνει 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 Force. 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 ή η εντολή Email ή η εντολή Αντιγραφή. 189 00:09:07,810 --> 00:09:11,400 Οτιδήποτε κυριολεκτικά μπορείτε να κάνετε με το υπολογιστή, είτε πρόκειται για τη διαγραφή αρχείων, 190 00:09:11,400 --> 00:09:15,350 δημιουργία αρχείων, spamming κάποιος, επιτίθεται κάποιο εξυπηρετητή εξ αποστάσεως, 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 Πολλοί servers Linux είναι μεταξύ αυτά, καθώς και Unix servers. 197 00:09:30,390 --> 00:09:32,630 Παράθυρα παίρνει και πάλι σχετικά από το γάντζο 198 00:09:32,630 --> 00:09:34,590 εκτός και αν έχετε εγκαταστήσει ειδικό λογισμικό. 199 00:09:34,590 --> 00:09:37,130 Τώρα πολλοί servers, για παράδειγμα, για λειτουργία εξυπηρετητών Ιστού, 200 00:09:37,130 --> 00:09:39,840 και στην πραγματικότητα, το Linux είναι ίσως το πιο δημοφιλές λειτουργικό σύστημα 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 μπορείτε να στείλετε ένα αίτημα από browser-- σας Chrome, 204 00:09:48,470 --> 00:09:50,790 Internet Explorer, whatever-- σε έναν απομακρυσμένο server, 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 σε μια ευάλωτη Mac ή ένα ευάλωτες εξυπηρετητή Linux, 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 Και με αυτή τη λογική, μπορείτε να εξαπατήσει έναν web server, ως εκ τούτου, 217 00:10:33,490 --> 00:10:36,370 αποστέλλοντας κάτι σαν User-Agent, το οποίο συνήθως 218 00:10:36,370 --> 00:10:38,300 υποτίθεται για να πει το το όνομα του browser σας. 219 00:10:38,300 --> 00:10:42,420 User-Agent Chrome, User-Agent Internet Explorer, User-Agent Firefox, αυτό 220 00:10:42,420 --> 00:10:44,590 είναι απλά το πρόγραμμα περιήγησης σας τρόπος για τον προσδιορισμό ίδιας. 221 00:10:44,590 --> 00:10:46,605 Αλλά αν ένας κακός πολύ έξυπνα λέει, mm-mm, είμαι 222 00:10:46,605 --> 00:10:47,930 Δεν πρόκειται να σας πω τι browser μου είναι, 223 00:10:47,930 --> 00:10:50,888 Είμαι αντίθετα πρόκειται να σας στείλουμε αυτό αινιγματικός-πράγμα που ψάχνει με ένα -rf rm 224 00:10:50,888 --> 00:10:55,840 * Σε αυτό, μπορείτε κυριολεκτικά να ξεγελάσουν ένα ευάλωτες web server στο διαδίκτυο 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 αν σας έστειλε αυτό το μήνυμα ολόκληρη τσαμπιά των διακομιστών web 230 00:11:07,030 --> 00:11:10,256 και στη συνέχεια είχε τους όλα κατέβει, για παράδειγμα, για Harvard.edu servers, 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 >> Έτσι, τα πολυλογώ, σχεδόν ο καθένας σε αυτό το δωμάτιο που κατέχει έναν υπολογιστή Mac 234 00:11:18,760 --> 00:11:20,240 είναι ευάλωτες σε αυτό. 235 00:11:20,240 --> 00:11:24,100 Η ασημένια επένδυση είναι ότι αν δεν είσαι τρέχει ένα web server για το laptop σας, 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 Ωστόσο, η Apple σύντομα θα είναι ενημέρωση κώδικα για αυτό. 241 00:11:36,210 --> 00:11:39,660 Ο κόσμος του Linux έχει ήδη κυκλοφορήσει μια σειρά από διορθώσεις για το Fedora και Ubuntu 242 00:11:39,660 --> 00:11:43,790 και άλλες εκδόσεις του Linux, και μάλιστα αν εκτελέσετε ενημέρωση 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 και έκανε το laptop σας δημόσια πρόσβαση στο διαδίκτυο, το οποίο δεν είναι 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 >> Αλλά αυτό είναι ένα ακραίο παράδειγμα ενός bug ότι έχουμε ζήσει για κυριολεκτικά για 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 >> Έτσι, αν θέλετε να μάθετε περισσότερα γι 'αυτό, πηγαίνετε σε αυτό το URL εδώ. 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 Ήταν από τους συναδέλφους που ονομάζεται Ken Thompson, ο οποίος 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 και έχουμε την κατάρτιση τους με Clang. 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 Mario, και άπληστοι, και Credit. 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 είναι περίπου Clang σε ένα compiler. 294 00:14:04,850 --> 00:14:08,360 Γιατί έχουμε ήδη εμπιστευθεί Clang για τις τελευταίες δύο ή τρεις εβδομάδες; 295 00:14:08,360 --> 00:14:12,650 Ποιος μπορεί να πει ότι όποιος έγραψε Clang δεν έχει "αν" κατάσταση εκεί 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 Έχουμε αυτό το είδος του δικαιώματος τιμή του συστήματος τώρα που έχουμε την πεποίθηση ότι Clang είναι legit. 301 00:14:28,350 --> 00:14:30,000 Έχετε εμπιστοσύνη ότι η συσκευή είναι legit. 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 Έτσι Breakout είναι πρόβλημα που τρεις, και Breakout είναι ένα παιχνίδι από χτες 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 σε αντίθεση με εκείνους που είχαν πρόσβαση στο Scratch. 317 00:15:17,800 --> 00:15:20,910 Έτσι, αυτό είναι το προσωπικό του εφαρμογή του Breakout, 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 ήμασταν σε θέση να είναι πολύ γρήγορα με το Scratch, και τώρα με 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 Αλλά να έχετε κατά νου, είναι αρκετά όπως το Scratch. 344 00:16:26,281 --> 00:16:28,780 Οι πιθανότητες είναι εσείς δεν χρησιμοποιείτε όλα τα κομμάτια του παζλ στο Scratch. 345 00:16:28,780 --> 00:16:31,120 Οι πιθανότητες είναι εσείς δεν με ένοιαζε να τυλίξει το μυαλό σας γύρω από όλα αυτά 346 00:16:31,120 --> 00:16:33,617 γιατί το μόνο που χρειάστηκε ήταν μια γρήγορη ματιά για να καταλάβετε, oh, 347 00:16:33,617 --> 00:16:35,450 αυτό είναι ό, τι μπορώ να κάνω με αυτό το κομμάτι του παζλ. 348 00:16:35,450 --> 00:16:38,260 Και πράγματι, το πρόβλημα που 3 spec, θα σας επισημάνω 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 ότι ο κώδικας είναι σχεδόν ένα object-oriented στυλ, 364 00:17:22,154 --> 00:17:24,675 αλλά νόμιζα ότι ήταν ένα C object-oriented πρόγραμμα. 365 00:17:24,675 --> 00:17:26,050 ΟΜΙΛΗΤΗΣ 1: Μια εξαιρετική ερώτηση. 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 μοιάζει να είναι ένα λίγο object-oriented. 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 sort, ταξινόμηση με επιλογή, ταξινόμηση με εισαγωγή. 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 log n; 391 00:18:19,360 --> 00:18:20,819 >> ΟΜΙΛΗΤΗΣ 1: n log n, σωστά. n log 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 και ακόμα κι αν δεν είναι προφανές, γνωρίζουν ότι log n είναι μικρότερο από το η, 397 00:18:34,650 --> 00:18:36,910 οπότε αν το κάνετε 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: Ας υποθέσουμε και πάλι; 406 00:18:54,465 --> 00:18:55,173 ΚΟΙΝΟ: Μνήμη. 407 00:18:55,173 --> 00:18:57,040 ΟΜΙΛΗΤΗΣ 1: Μνήμη, ή χώρο γενικότερα. 408 00:18:57,040 --> 00:18:59,040 Και αυτό δεν ήταν super φανερό με τους ανθρώπους μας, 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 Και ειλικρινά, στον πραγματικό κόσμο διάστημα αυτά days-- RAM, σκληρό δίσκο 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 log n. 421 00:19:30,220 --> 00:19:33,260 Μέχρι εδώ είναι τα οκτώ αριθμούς και το οκτώ εθελοντές που είχαμε την τελευταία φορά. 422 00:19:33,260 --> 00:19:35,718 Και το πρώτο πράγμα που Συγχώνευση Sort μας είπε να κάνουμε ό, τι ήταν; 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: Ας υποθέσουμε και πάλι; 426 00:19:38,663 --> 00:19:39,650 ΚΟΙΝΟ: Διαίρεση σε δύο. 427 00:19:39,650 --> 00:19:40,610 ΟΜΙΛΗΤΗΣ 1: Διαίρεση σε δύο, σωστά. 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 >> Πώς μπορείτε να ταξινομήσετε μια λίστα τώρα, σε κίτρινο, μεγέθους δύο, χρησιμοποιώντας Merge Sort; 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 Λοιπόν, το ίδιο πράγμα, αλλά τώρα ποια ήταν η τρίτο και το βασικό στάδιο Merge Sort; 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 από έναν αλγόριθμο, όπως Merge Ταξινόμηση, rewind στη μνήμη. 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 log 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 αν n <2 επιστροφή; 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 Και τώρα είστε το είδος του punting εδώ και λέγοντας, καλά, απλά ταξινομήσετε το αριστερό μισό, 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 Και τότε αυτό είναι ένα άλλο Τ (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 Και αυτό είναι που τώρα θα punt με το πίσω από μας γυμνασίου μαθηματικά βιβλίο 532 00:24:05,550 --> 00:24:10,290 είμαστε η επανεμφάνιση τελικά καταλήγει να ισοδυναμεί με αυτό, n φορές log 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 Ένα αριθμητικά με ένα hard-coded αντιπροσωπευτικό παράδειγμα 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 >> Οπότε ας πραγματικότητα συντάξει ένα πιο συναρπαστικό take-away από αυτό ως εξής. 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: Τι είναι αυτό; 558 00:25:16,905 --> 00:25:17,800 ΚΟΙΝΟ: Θα το ανακοινώσουμε. 559 00:25:17,800 --> 00:25:18,883 ΟΜΙΛΗΤΗΣ 1: Θα το ανακοινώσουμε. 560 00:25:18,883 --> 00:25:22,290 Έτσι είστε διδασκαλία Clang, hey, δεν είναι στην πραγματικότητα την εφαρμογή αυτή ακόμα, 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 αλλά ερωτηματικό μέσα, mm, θα πάρει γύρω στην εφαρμογή αυτή λίγο αργότερα. 568 00:25:39,900 --> 00:25:40,989 Και πάλι, Clang είναι χαζός. 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, και στη συνέχεια, I ταλαιπωρούν ξανά και ξανά το χρήστη 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 Sigma είναι το όνομα, και παίρνει μια μεταβλητή m αντί 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 έως και σε ένα = m, η οποία είναι όποια και αν είναι ο χρήστης πληκτρολογήσει το, και στη συνέχεια θα 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 >> ΚΟΙΝΟ: Ποτέ δε θα φτάσει m. 618 00:27:51,290 --> 00:27:52,880 >> ΟΜΙΛΗΤΗΣ 1: Ποτέ μην φτάσει m. 619 00:27:52,880 --> 00:27:55,880 Αλλά μ περνά σε, οπότε ας θεωρούν ένα απλό παράδειγμα. 620 00:27:55,880 --> 00:27:58,510 Εάν m περνιέται σε με το χρήστη ως αρνητική. 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 Έτσι, εάν το m είναι αρνητική, κάτι σαν αρνητική. 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 και τότε εγώ πρόκειται να είναι λιγότερο από ή ίσο με m; 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 δεν πρόκειται να συμβεί, διότι i είναι πάντα θα είναι μεγαλύτερη than-- OK, 635 00:28:38,360 --> 00:28:39,871 Θα αποσύρετε αυτό το ερώτημα. 636 00:28:39,871 --> 00:28:40,370 OK. 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 Ανακοίνωση on line 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 ΟΜΙΛΗΤΗΣ 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: Ακριβώς. 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 A Για βρόχο, ένα βρόχο Ενώ, ένα Do Ενώ βρόχο, απλά κάνει και πάλι κάτι 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 Αυτό είναι το είδος της ένα μυαλό-blowing εναλλακτική εφαρμογή. 681 00:30:34,334 --> 00:30:37,250 Εντάξει, ίσως όχι το μυαλό-blowing, αλλά αυτό είναι το είδος των πιο σέξι, εντάξει, 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 Εάν m είναι μικρότερο από ή ίσο με μηδέν, σίγμα δεν έχει κανένα νόημα. 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 έως η, πι ή σε αυτή την περίπτωση, 690 00:30:59,930 --> 00:31:02,630 μπορεί να γίνει με το είδος της αποποιούνται τις ευθύνες. 691 00:31:02,630 --> 00:31:04,947 Λοιπόν, ποιο είναι το άθροισμα των 1 m; 692 00:31:04,947 --> 00:31:05,780 Λοιπόν, ξέρετε τι; 693 00:31:05,780 --> 00:31:11,949 Είναι το ίδιο με το άθροισμα των m συν το ποσό του 1 m μείον 1. 694 00:31:11,949 --> 00:31:12,740 Λοιπόν ξέρετε τι; 695 00:31:12,740 --> 00:31:13,940 Τι είναι σίγμα m μείον 1; 696 00:31:13,940 --> 00:31:17,860 Λοιπόν, εάν είστε το είδος του ακολουθήσετε αυτό λογικά, είναι το ίδιο όπως το m μείον 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 Σας το είδος του απαντήσει με ένα ερώτημα, μπορείτε είδος μπορεί να κρατήσει το πέρασμα του buck. 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, τι είναι σίγμα n μείον 2; 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 κάνουν sigma 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 σε σίγμα m μείον ένα; 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 Πόσοι από εσάς είναι πρόθυμοι να fess μέχρι να δει αυτό; 733 00:33:04,430 --> 00:33:04,950 >> OK. 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: Αχ. 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 Αυτό θα μπορούσε να προκαλέσει υπερχείλιση ακεραίου, όπου τα bits απλά αναποδογυρίστε 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 bits. 757 00:33:55,509 --> 00:33:57,640 Δεν πρόκειται να λάθος να κλέψει ένα κομμάτι 33η. 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 ΟΜΙΛΗΤΗΣ 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 ή Linux, 778 00:34:38,860 --> 00:34:41,920 αρπάζει ένα μάτσο bytes, ίσως μερικά kilobytes, ίσως μερικά megabytes 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 >> Και πράγματι, αν αυτές πράσινο δίσκοι από Annenberg αντιπροσωπεύουν ότι η μνήμη, 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 σαν να ζητάμε από το λειτουργικό σύστημα, ooh, χρειάζεται λίγο περισσότερη μνήμη, 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 αυτό παίρνει κάποιο να χρησιμοποιείται να --Πώς κομψό ή πόσο απλό 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 είναι εξοικειωμένοι με μερικές από της Google μέσα αστεία, αν πάτε στο Google 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 Αν και η Google "στραβό", ανακοίνωση γέρνοντας το κεφάλι σας 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-- ότι είναι ένα bug. 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 Πιθανόν να καταναλώνουν ένα nontrivial αριθμό των γραμμών του κώδικα 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 Το όνομά του είναι swap. 843 00:37:46,790 --> 00:37:50,880 Παίρνει σε δύο μεταβλητές και επιστρέφει τίποτα. 844 00:37:50,880 --> 00:37:52,260 Λαμβάνει σε α και β. 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: Laura. 858 00:38:09,360 --> 00:38:09,740 >> ΟΜΙΛΗΤΗΣ 1: Laura. 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 Έτσι, Laura, πολύ απλή πρόκληση σήμερα. 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 Νίκαια για την κάλυψη yo. 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 και μερικά φλιτζάνια ότι εμείς δανείστηκε από Annenberg σήμερα. 868 00:38:23,345 --> 00:38:24,178 >> ΟΜΙΛΗΤΗΣ 4: Ξένα. 869 00:38:24,178 --> 00:38:27,240 ΟΜΙΛΗΤΗΣ 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 Αυτό θα είναι ο κόσμος από τα μάτια της Laura. 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 >> ΟΜΙΛΗΤΗΣ 4: Μπορώ να έχω άλλο ένα φλιτζάνι; 886 00:39:02,359 --> 00:39:05,650 ΟΜΙΛΗΤΗΣ 1: Είμαι τόσο ευτυχής ότι ρωτήσατε, αν θα ήταν πολύ καλύτερα βίντεο 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 Ένα μεγάλο χειροκρότημα θα ήταν καλό για την Laura. 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 να οργανώσει ένα από τα περιεχόμενα έτσι ότι μπορείτε να κάνετε πραγματικότητα το swap. 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 και να θέσει το περιεχόμενο της ΕΕ σε αυτό, στη συνέχεια, να ανταλλάξουν ένα φλιτζάνι, 917 00:40:19,370 --> 00:40:22,610 στη συνέχεια, τοποθετήστε το στην ΕΕ το αρχική κύπελλο, έτσι 918 00:40:22,610 --> 00:40:25,320 επίτευξη, ακριβώς όπως Laura έκανε, το swap. 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 Θέλω πρώτα να δηλώσει int x παίρνει ένα, και int y παίρνει δύο. 928 00:40:52,020 --> 00:40:54,930 Έτσι σκέφτονται αυτά που ΕΕ και το γάλα, αντίστοιχα. 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 Έτσι, εδώ κάτω σε swap είναι ακριβώς ό, τι έκανε η Laura, 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 Μην κάνετε κανένα swap, και διατρέχουν κανένα swap, μεγεθύνοντας την έξοδο εδώ. 938 00:41:24,690 --> 00:41:28,320 Πληκτρολογήστε το x είναι 1, y είναι 2, swapping ανταλλαχθούν. 939 00:41:28,320 --> 00:41:32,700 χ είναι ακόμη 1, και το γ είναι ακόμη 2. 940 00:41:32,700 --> 00:41:37,630 Έτσι, ακόμη και αν, ειλικρινά, αυτό φαίνεται ήθελε ακριβώς, αν και με πιο τεχνικά, 941 00:41:37,630 --> 00:41:40,730 τι έκανε η Laura, δεν φαίνεται να λειτουργεί. 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 ότι έχει δύο κύρια, τονίζεται εδώ, και, στη συνέχεια, μια άλλη λειτουργία, όπως swap, 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 Αλλά αν ο κύριος κλήσεις ανταλλάξουν, και κύρια περνάει να ανταλλάξουν δύο επιχειρήματα, α και β, 951 00:42:10,920 --> 00:42:16,410 χυμό πορτοκαλιού και το γάλα, δεν είναι σαν παραδίδοντας το χυμό πορτοκαλιού και το γάλα 952 00:42:16,410 --> 00:42:17,500 στο Laura. 953 00:42:17,500 --> 00:42:21,300 Τι κάνει ένας υπολογιστής, είναι περνά αντίγραφα του χυμού πορτοκαλιού 954 00:42:21,300 --> 00:42:27,110 και αντίγραφα του γάλακτος σε Laura, έτσι ώστε να τι είναι τελικά μέσα από αυτό το δίσκο 955 00:42:27,110 --> 00:42:32,510 είναι η μία αξία και δύο, ή ΕΕ και το γάλα, αλλά και αντίγραφα αυτών, 956 00:42:32,510 --> 00:42:34,790 έτσι ώστε σε αυτό το σημείο στην ιστορία, υπάρχει 957 00:42:34,790 --> 00:42:36,930 είναι η ΕΕ και το γάλα σε καθένα από αυτούς τους δίσκους. 958 00:42:36,930 --> 00:42:39,260 Υπάρχει ένα και δύο σε κάθε ένα από αυτούς τους δίσκους, 959 00:42:39,260 --> 00:42:41,720 και η λειτουργία εναλλαγής είναι πράγματι εργάζονται. 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 μπορεί να εξηγήσει γιατί η αλλαγή α και β στο εσωτερικό της ανταλλαγής 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 ΟΜΙΛΗΤΗΣ 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: Εντάξει, έτσι 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 ΟΜΙΛΗΤΗΣ 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 α και β, εν τω μεταξύ, είναι αποτελεσματικά δήλωσε 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 Και έτσι πράγματι, α και β υπάρχουν μόνο μέσα σε αυτό το δίσκο 986 00:43:40,560 --> 00:43:44,850 από Annenberg, αυτό δεύτερο κομμάτι του κώδικα. 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 Πάω να πάει πίσω στο το Directory Πηγή, 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 Σαφώς ήθελα ανταλλαγής με εργασίας, έτσι ώστε να αισθάνεται σαν ένα bug. 995 00:44:10,090 --> 00:44:12,780 Τώρα θα μπορούσα να ξεκινήσω την προσθήκη ενός Πολλοί printf για τον κωδικό μου, 996 00:44:12,780 --> 00:44:16,010 εκτύπωση x εδώ, y πάνω εδώ, μια εδώ, b εδώ. 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, GNU πρόγραμμα εντοπισμού σφαλμάτων, 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 να λύσει τα προβλήματα και να βρει bugs. 1005 00:44:39,940 --> 00:44:40,940 Έτσι, Πάω να το κάνουμε αυτό. 1006 00:44:40,940 --> 00:44:44,770 Αντί ./noswap, είμαι αντί πρόκειται να τρέξει GDB ./noswap. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 Με άλλα λόγια, Πάω να τρέξει μου πρόγραμμα δεν Bash, το νέο μας φίλο 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 Πάω να χτυπήσει Control-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 slide προτείνει, Run είναι η πρώτη εντολές που θα σήμαινε για την εισαγωγή. 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 Control-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 Το πρόγραμμά μου σπάει στη γραμμή I είπε 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, μόνο print 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 και πλέον πληκτρολογήστε print 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 Είναι σαν ένα back reference. 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 Τώρα θέλω να μπω swap, έτσι δεν πληκτρολογείτε την επόμενη. 1084 00:48:27,760 --> 00:48:34,380 I πληκτρολογήστε το βήμα, και σήμερα παρατηρούμε ότι Μου έχει πήδηξε στη γραμμή noswap.c 33. 1085 00:48:34,380 --> 00:48:37,240 Αν πάω πίσω στο gedit, τι γραμμή 33; 1086 00:48:37,240 --> 00:48:40,500 Αυτή είναι η πρώτη πραγματική γραμμή κώδικα στο εσωτερικό του swap. 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: Δεν έχει αρχικοποιηθεί. 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 έτσι ώστε ό, τι bits είστε βλέπουμε εδώ, ακόμα κι αν είναι 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 Όποια και αν είναι η αξία του ενός ήταν, a είναι το πρώτο επιχείρημα, απλά 1106 00:49:23,360 --> 00:49:25,550 όπως x ήταν η πρώτη πράγμα που πέρασε σε, 1107 00:49:25,550 --> 00:49:30,450 έτσι, ένα και το χ θα πρέπει να είναι η ίδια, έτσι εκτύπωση 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 κάτι περισσότερο esoterically γνωστό ως 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 κοιτάζοντας λίγο πλαστελίνης από ο φίλος μας ο Nick Parlante από Stanford 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 >> [VIDEO PLAYBACK] 1123 00:50:13,400 --> 00:50:13,900 Γεια σου, Binky. 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 [ΤΕΛΟΣ VIDEO PLAYBACK] 1133 00:50:23,730 --> 00:50:25,396 ΟΜΙΛΗΤΗΣ 1: Αυτό σας περιμένει την Τετάρτη. 1134 00:50:25,396 --> 00:50:26,440 Θα σας δούμε στη συνέχεια. 1135 00:50:26,440 --> 00:50:27,106 [VIDEO PLAYBACK] 1136 00:50:27,106 --> 00:50:30,420 -Και Τώρα, Deep Σκέψεις, από Daven 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 Γιατί να μην A +; 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 >> [ΤΕΛΟΣ VIDEO PLAYBACK]