1 00:00:00,000 --> 00:00:02,270 >> [Review: Quiz 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Πανεπιστήμιο Χάρβαρντ] 3 00:00:04,620 --> 00:00:07,660 [Αυτό είναι CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Καλώς ήρθατε όλοι. Αυτή είναι η κριτική για το κουίζ 1. 5 00:00:11,610 --> 00:00:15,040 Ακριβώς όπως μια αποκήρυξη, αυτό - εννοώ, θα πάμε να προσπαθήσουμε να καλύψουμε 6 00:00:15,040 --> 00:00:17,770 όσο το δυνατόν περισσότερο υλικό, αλλά αυτό δεν σημαίνει ότι 7 00:00:17,770 --> 00:00:20,780 θα πάμε για να καλύψει όλα τα πράγματα που μπορεί να είναι σε κουίζ 1. 8 00:00:20,780 --> 00:00:25,270 Έτσι να είστε βέβαιος επίσης να λάβει μια ματιά σε διάλεξη, τμήματα, ό, τι μπορείς. 9 00:00:25,270 --> 00:00:28,240 Quiz 1 θα είναι την Τετάρτη, την επόμενη Τετάρτη. 10 00:00:28,240 --> 00:00:33,800 Έτσι να είστε βέβαιος να μελετήσει. Είναι πρόκειται να είναι, λίγο πολύ, όπως και το πρώτο κουίζ 11 00:00:33,800 --> 00:00:36,390 σχετικά με τη μορφή του, αλλά κατά πάσα πιθανότητα θα είναι πολύ πιο δύσκολο. 12 00:00:36,390 --> 00:00:39,600 Τουλάχιστον, πέρυσι, όταν πήρα 50, σκέφτηκα ότι ήταν πολύ πιο δύσκολο. 13 00:00:39,600 --> 00:00:42,410 Έτσι μελετήσει πολύ. 14 00:00:42,410 --> 00:00:45,190 >> Πάω να καλύψει τις δομές δεδομένων και η κωδικοποίηση Huffman. 15 00:00:45,190 --> 00:00:47,910 Αυτό είναι κάτι που πολλοί άνθρωποι πιστεύουν ότι είναι πολύπλοκη, 16 00:00:47,910 --> 00:00:51,930 αλλά Πάω να προσπαθήσουμε να το κάνουμε όσο πιο εύκολη γίνεται. 17 00:00:51,930 --> 00:00:56,330 Πρώτα απ 'όλα, αυτό που θέλουμε εσείς να ξέρετε για το κουίζ 1 είναι 18 00:00:56,330 --> 00:01:00,970 κατανοήσει τις εννοιολογικές περιγραφές καθενός των δομών δεδομένων που θα πάω να παρουσιάσει. 19 00:01:00,970 --> 00:01:03,960 Αυτό σημαίνει ότι δεν έχετε πραγματικά να 20 00:01:03,960 --> 00:01:07,020 εφαρμόσουν ένα πίνακα κατακερματισμού στο κουίζ σας 1. 21 00:01:07,020 --> 00:01:10,250 Δεν θέλουμε να εφαρμόσει ένα ολόκληρο πίνακα κατακερματισμού? Ίσως θα προσπαθήσουμε 22 00:01:10,250 --> 00:01:13,090 να σας κάνει να εφαρμόσουν κάποιες λειτουργίες, 23 00:01:13,090 --> 00:01:16,940 οι πιο κοινές λειτουργίες, αλλά εμείς δεν πρόκειται να σας κάνει να εφαρμόσουν τα πάντα. 24 00:01:16,940 --> 00:01:21,010 Γι 'αυτό είναι σημαντικό να καταλάβετε την έννοια πίσω από κάθε δομή δεδομένων 25 00:01:21,010 --> 00:01:23,510 και, επίσης, ότι είστε σε θέση να κωδικοποιήσουν σε C, 26 00:01:23,510 --> 00:01:27,880 μόνο οι πιο κοινές λειτουργίες που έχουν για κάθε δομή δεδομένων. 27 00:01:27,880 --> 00:01:30,090 Και, επίσης, να είναι σε θέση να εξετάσει τους δείκτες και structs, 28 00:01:30,090 --> 00:01:33,470 επειδή φαίνεται πολύ σε αυτές τις δομές δεδομένων. 29 00:01:33,470 --> 00:01:37,380 >> Πρώτον, συνδεδεμένες λίστες. Συνδεδεμένες λίστες είναι στην πραγματικότητα πολύ παρόμοια με συστοιχίες, 30 00:01:37,380 --> 00:01:39,930 αλλά η διαφορά ανάμεσα σε μια συνδεδεμένη λίστα και μία συστοιχία, 31 00:01:39,930 --> 00:01:45,160 Πρώτα απ 'όλα, είναι ότι μία συνδεδεμένη λίστα έχει ένα πολύ ευέλικτο μέγεθος, 32 00:01:45,160 --> 00:01:50,060 ενώ σε συστοιχίες που έχετε να επιλέξετε είτε ένα πολύ μεγάλο μέγεθος για τον πίνακα, 33 00:01:50,060 --> 00:01:53,710 ώστε να γνωρίζετε ότι θα πάμε να είναι σε θέση να αποθηκεύουν όλα τα δεδομένα σας σε αυτόν τον πίνακα, 34 00:01:53,710 --> 00:01:59,370 ή θα πρέπει να χρησιμοποιήσετε malloc για να έχουν ένα ευέλικτο μήκος του πίνακα. 35 00:01:59,370 --> 00:02:03,680 Σε συνδεδεμένες λίστες είναι πολύ εύκολο να πάρει ακριβώς περισσότερα στοιχεία, 36 00:02:03,680 --> 00:02:07,210 βάλει περισσότερα στοιχεία στη συνδεδεμένη λίστα ή να καταργήσετε στοιχεία. 37 00:02:07,210 --> 00:02:09,370 Και στην πραγματικότητα, αν δεν θέλετε η συνδεδεμένη λίστα να διευθετηθεί, 38 00:02:09,370 --> 00:02:13,950 μπορείτε να αναζητήσετε και να καταργήσετε στοιχεία σε συνεχή χρόνο, 39 00:02:13,950 --> 00:02:16,800 έτσι O (1) χρόνο, γι 'αυτό είναι πολύ βολικό. 40 00:02:16,800 --> 00:02:20,660 Απλά πρέπει να είμαστε προσεκτικοί για να θυμάστε πάντα να malloc και δωρεάν οι κόμβοι, 41 00:02:20,660 --> 00:02:25,510 μόνο και μόνο επειδή αν δεν το κάνετε, θα έχετε διαρροές μνήμης. 42 00:02:25,510 --> 00:02:31,480 Έτσι, συνδεδεμένες λίστες - ο ορισμός ενός κόμβου είναι ακριβώς όπως αυτό που έχουμε εκεί. 43 00:02:31,480 --> 00:02:35,110 Έβαλα int n, αλλά μπορείτε να αποθηκεύσετε τα δεδομένα που θέλετε. 44 00:02:35,110 --> 00:02:37,280 Έτσι, αν θέλετε να αποθηκεύσετε μια σειρά, είναι μια χαρά. 45 00:02:37,280 --> 00:02:41,690 Εάν θέλετε να αποθηκεύσετε ένα struct, είναι μια χαρά, ένα διπλό, ό, τι θέλετε. 46 00:02:41,690 --> 00:02:44,630 Έβαλα μόνο int n για τα παραδείγματα εδώ. 47 00:02:44,630 --> 00:02:46,800 Και έχετε ένα δείκτη στον επόμενο κόμβο. 48 00:02:46,800 --> 00:02:51,940 Έτσι, βασικά, μία συνδεδεμένη λίστα έχει κάποια δεδομένα, και στη συνέχεια επισημαίνει στον επόμενο κόμβο. 49 00:02:51,940 --> 00:02:56,710 Αν είναι το τελευταίο στοιχείο της συνδεδεμένης λίστας, πρόκειται να επισημάνω στην τιμή NULL. 50 00:02:56,710 --> 00:02:59,060 Έτσι, αυτό είναι ένα παράδειγμα μιας συνδεδεμένης λίστας. 51 00:02:59,250 --> 00:03:05,960 >> Εντάξει, τώρα ας δούμε τι πρέπει να κάνω αν θέλω να εισαγάγετε ένα στοιχείο σε μια συνδεδεμένη λίστα. 52 00:03:05,960 --> 00:03:08,810 Κατ 'αρχάς, ένα ένθετο λειτουργία θα είναι τύπου void 53 00:03:08,810 --> 00:03:11,350 γιατί δεν θέλω να επιστρέψει τίποτα. 54 00:03:11,350 --> 00:03:14,200 Και Πάω να λάβει int ως επιχείρημα, 55 00:03:14,200 --> 00:03:17,090 επειδή θέλω να ξέρω τι θέλετε να εισαγάγετε. 56 00:03:17,090 --> 00:03:21,840 Έτσι, ποιο είναι το πρώτο πράγμα που πρέπει να κάνω; Λοιπόν, θα ήθελα να malloc για newnode, 57 00:03:21,840 --> 00:03:24,240 έτσι ώστε η πρώτη γραμμή. 58 00:03:24,240 --> 00:03:27,580 Είμαι απλά δημιουργώντας ένα νέο κόμβο για να βάλει σε μια συνδεδεμένη λίστα. 59 00:03:27,580 --> 00:03:32,360 Λοιπόν, τι μπορώ να κάνω; Λοιπόν, γνωρίζουμε ότι στις εφαρμογές μας συνδεδεμένες λίστες 60 00:03:32,360 --> 00:03:38,180 στην τάξη, βάζουμε πάντα το κεφάλι ως global μεταβλητή. 61 00:03:38,180 --> 00:03:41,800 Έτσι, αυτό που μπορούμε να κάνουμε είναι να αλλάξουμε το κεφάλι. 62 00:03:41,800 --> 00:03:44,300 Μπορώ να κάνω αυτό το νέο κόμβο είναι ο νέος επικεφαλής, 63 00:03:44,300 --> 00:03:46,670 και πρόκειται να επισημάνω και το προηγούμενο. 64 00:03:46,670 --> 00:03:50,390 Πώς μπορούμε να το κάνουμε αυτό; Το πρώτο πράγμα που πρέπει να κάνετε 65 00:03:50,390 --> 00:03:54,770 είναι να αλλάξετε το «ν» στο νέο κόμβο σε αξία, 66 00:03:54,770 --> 00:03:57,530 το οποίο διαβιβάστηκε στη συνάρτηση. 67 00:03:57,530 --> 00:04:01,050 Στη συνέχεια newnode δίπλα πρόκειται να είναι η κεφαλή. 68 00:04:01,050 --> 00:04:05,800 Η κεφαλή πρόκειται να newnode. Έτσι, είναι αρκετά απλό. 69 00:04:05,800 --> 00:04:10,090 Για τη διαγραφή ενός κόμβου, μπορούμε να το κάνουμε, όπως - 70 00:04:10,090 --> 00:04:14,790 Ένας τρόπος θα μπορούσαμε να κάνουμε δηλαδή, 71 00:04:14,790 --> 00:04:18,160 εντάξει, αν ήθελα να διαγράψει, για παράδειγμα, 3, 72 00:04:18,160 --> 00:04:24,850 τι θα μπορούσα να κάνω είναι να επισημάνω απλώς το προηγούμενο κόμβο 73 00:04:24,850 --> 00:04:27,580 στον επόμενο κόμβο του 3. 74 00:04:27,580 --> 00:04:29,400 Θα ήθελα λοιπόν να κάνει ακριβώς κάτι τέτοιο. 75 00:04:29,400 --> 00:04:33,400 Αλλά ποιο είναι το πρόβλημα με τον τρόπο αυτό; 76 00:04:33,400 --> 00:04:37,400 Έχω μια διαρροή μνήμης, οπότε δεν έχω πρόσβαση στον αριθμό 3 πια. 77 00:04:37,400 --> 00:04:42,480 Το πρόβλημα με αυτό είναι ότι εγώ δεν πρόκειται να είναι σε θέση να απελευθερώσει ότι ο κόμβος. 78 00:04:42,480 --> 00:04:45,360 Πάω να έχει διαρροή μνήμης και (ακατάληπτο) θα με μισούν. 79 00:04:45,360 --> 00:04:49,370 Έτσι, αντί να το κάνουμε αυτό, θα πρέπει να έχετε πιθανώς ένα προσωρινό δείκτη. 80 00:04:49,370 --> 00:04:53,210 Έτσι έβαλα temp. Δεν πρόκειται να επισημάνω στον κόμβο που θέλετε να διαγράψετε. 81 00:04:53,210 --> 00:04:58,170 Και τότε μπορεί να κινηθεί τα προηγούμενα κόμβους με το σημείο στον επόμενο κόμβο 82 00:04:58,170 --> 00:05:00,390 του κόμβου που θέλετε να διαγράψετε. 83 00:05:00,390 --> 00:05:02,730 Και τέλος, μπορώ να ελευθερώσει το δείκτη. 84 00:05:02,730 --> 00:05:07,480 Έχω να ελευθερώσει το δείκτη που δημιουργήθηκε εκεί; 85 00:05:07,480 --> 00:05:09,560 Δεν έχω να, μόνο και μόνο επειδή - 86 00:05:09,560 --> 00:05:13,430 η διαφορά είναι ότι αυτός ο κόμβος δημιουργήθηκε με τη χρήση malloc, 87 00:05:13,430 --> 00:05:17,280 έτσι είναι στο σωρό, ενώ αυτή ήταν μόλις κηρυχθεί ως διακόπτης NULL στη στοίβα. 88 00:05:17,280 --> 00:05:20,000 Γι 'αυτό και δεν χρειάζεται να το απελευθερώσει. 89 00:05:20,000 --> 00:05:22,030 >> Εντάξει. Έτσι τώρα ας μιλήσουμε για στοίβες. 90 00:05:22,030 --> 00:05:24,680 Στοίβες είναι αρκετά απλή. 91 00:05:24,680 --> 00:05:29,540 Κάναμε στοίβες και ουρές στην τάξη μόνο με τη χρήση πινάκων, 92 00:05:29,540 --> 00:05:32,820 αλλά πρέπει να είστε εξοικειωμένοι - απλά να γνωρίζουν 93 00:05:32,820 --> 00:05:40,740 ότι μπορείτε επίσης να κάνετε στοίβες στις ουρές χρησιμοποιώντας συνδεδεμένες λίστες, καθώς και. 94 00:05:40,740 --> 00:05:44,460 Έτσι, εάν έχετε μια σειρά, τι θα ήταν μια στοίβα; 95 00:05:44,460 --> 00:05:46,810 Μια στοίβα, πρώτον, θα πρέπει να έχουν ένα μέγεθος. 96 00:05:46,810 --> 00:05:49,950 Θα πρέπει να αποθηκεύσετε ποιο είναι το μέγεθος της στοίβας που έχετε τώρα. 97 00:05:49,950 --> 00:05:52,980 Και επίσης θα έχουν μια σειρά, σε αυτή την περίπτωση των αριθμών, 98 00:05:52,980 --> 00:05:55,120 αλλά αν θέλετε, μπορεί να είναι ένας πίνακας 99 00:05:55,120 --> 00:06:00,380 χορδές, μια σειρά από struct, κάτι που θέλετε να αποθηκεύσετε. 100 00:06:00,380 --> 00:06:03,240 Σχετικά με τη στοίβα: Η διαφορά ανάμεσα σε ένα σωρό και μια συνδεδεμένη λίστα 101 00:06:03,240 --> 00:06:08,590 είναι ότι στη στοίβα έχετε πρόσβαση μόνο στο τελευταίο στοιχείο που τέθηκε στη στοίβα. 102 00:06:08,590 --> 00:06:11,770 Λέγεται τελευταία in, first out. 103 00:06:11,770 --> 00:06:15,090 Ακριβώς όπως έχετε μια στοίβα των δίσκων, 104 00:06:15,090 --> 00:06:17,670 αν βάλετε ένα δίσκο στην κορυφή της στοίβας, 105 00:06:17,670 --> 00:06:22,670 θα πρέπει να καταργήσετε αυτό το δίσκο πρώτα για να έχετε πρόσβαση σε άλλους δίσκους. 106 00:06:22,670 --> 00:06:26,310 Είναι το ίδιο πράγμα με στοίβες. 107 00:06:26,310 --> 00:06:31,220 Έτσι, αν θέλω να, για παράδειγμα, να προσθέσετε ένα στοιχείο σε μια στοίβα, τι πρέπει να κάνω; 108 00:06:31,220 --> 00:06:34,070 Λέγεται ώθηση, και αυτό είναι αρκετά απλή. 109 00:06:34,070 --> 00:06:37,130 Το πρώτο πράγμα που έχετε να κάνετε είναι να ελέγξετε εάν το μέγεθος της στοίβας 110 00:06:37,130 --> 00:06:40,150 δεν είναι μεγαλύτερη ή ίση με την χωρητικότητα της στοίβας. 111 00:06:40,150 --> 00:06:45,810 Διότι, αν είστε ήδη σε πλήρη παραγωγική ικανότητα, δεν μπορείτε να προσθέσετε κάτι άλλο. 112 00:06:45,810 --> 00:06:51,140 Και τότε, αν όχι, απλά πρέπει να προσθέσετε το στοιχείο στη στοίβα. 113 00:06:51,140 --> 00:06:54,530 Και τέλος, αυξήσετε το μέγεθος. Γι 'αυτό είναι αρκετά απλή. 114 00:06:54,530 --> 00:06:57,140 Γι 'αυτό ακριβώς προσθέστε τον αριθμό 2. 115 00:06:57,140 --> 00:07:00,350 Και αν θέλω να σκάσει, πράγμα που σημαίνει ότι θέλω να αφαιρέσω 116 00:07:00,350 --> 00:07:03,870 Το τελευταίο στοιχείο που προστέθηκε και επιστρέφει την τιμή του στοιχείου, 117 00:07:03,870 --> 00:07:09,180 το πρώτο πράγμα που πρέπει να ελέγξετε είναι ότι η στοίβα δεν είναι κενή. 118 00:07:09,180 --> 00:07:11,510 Διότι αν είναι άδειο, δεν μπορώ να επιστρέψει τίποτα. 119 00:07:11,510 --> 00:07:14,820 Σε αυτή την περίπτωση, είμαι επιστρέφουν -1. 120 00:07:14,820 --> 00:07:18,960 Διαφορετικά, θα πάω για να μειώσετε το μέγεθος του spec, 121 00:07:18,960 --> 00:07:22,510 και να επιστρέψει αριθμούς (s.size). 122 00:07:22,510 --> 00:07:27,230 Γιατί έχω ελαττώσει το μέγεθος και στη συνέχεια επιστρέφουν s.size; 123 00:07:27,230 --> 00:07:30,930 Είναι επειδή, σε αυτή την περίπτωση, το spec έχει μέγεθος 4, 124 00:07:30,930 --> 00:07:33,810 και θέλω να επιστρέψει το τέταρτο στοιχείο, έτσι δεν είναι; 125 00:07:33,810 --> 00:07:36,030 Αλλά τι είναι ο δείκτης του τέταρτου στοιχείου; Τρία. 126 00:07:36,030 --> 00:07:44,510 Επειδή κάνω μέγεθος - θα είναι 3, s.numbers μπορώ να επιστρέψω μόνο (s.size) 127 00:07:44,510 --> 00:07:48,410 επειδή είναι 3. Έτσι είναι απλά ο δείκτης. 128 00:07:48,410 --> 00:07:50,380 >> Τώρα ουρές. Ουρές είναι λίγο πολύ το ίδιο πράγμα. 129 00:07:50,380 --> 00:07:54,950 Η μόνη διαφορά είναι ότι αντί να έχουμε τελευταία in, first out, 130 00:07:54,950 --> 00:07:57,480 έχετε first in, first out. 131 00:07:57,480 --> 00:07:59,460 Πιθανώς, αν είστε σε αναμονή για να πάμε σε μια συναυλία, 132 00:07:59,460 --> 00:08:04,260 δεν θα είναι ευτυχής εάν είχε μια στοίβα αντί για μια ουρά. 133 00:08:04,260 --> 00:08:07,730 Όντας το τελευταίο πρόσωπο για να έρθει θα είναι το πρώτο πρόσωπο για να εισέλθουν στην συναυλία. 134 00:08:07,730 --> 00:08:09,760 Πιθανότατα δεν θα είναι ευτυχισμένος. 135 00:08:09,760 --> 00:08:15,020 Στην ουρά, το πρώτο πρόσωπο για να πάρει το είναι επίσης το πρώτο πρόσωπο για να βγούμε. 136 00:08:15,020 --> 00:08:18,720 Έτσι στον ορισμό του μια ουρά, πέραν του ότι έχει το μέγεθος της συστοιχίας, 137 00:08:18,720 --> 00:08:23,360 θα πρέπει επίσης να έχουν το κεφάλι, το οποίο είναι ο δείκτης με τον επικεφαλής της στοίβας. 138 00:08:23,360 --> 00:08:29,000 Έτσι, το πρώτο στοιχείο αυτή τη στιγμή. 139 00:08:29,000 --> 00:08:32,710 Τοποθέτηση στην ουρά είναι το ίδιο πράγμα με ώθηση για στοίβες. 140 00:08:32,710 --> 00:08:34,980 Αν ήταν πολύ αφελής, θα ήθελα απλώς να πω, 141 00:08:34,980 --> 00:08:39,289 καλά, μπορώ να κάνω ακριβώς ακριβώς το ίδιο πράγμα όπως έκανα για την ώθηση. 142 00:08:39,289 --> 00:08:44,030 Δεν μπορώ ακριβώς να ελέγξετε αν δεν είναι πέρα ​​από την ικανότητα. 143 00:08:44,030 --> 00:08:48,760 Αν είναι, θα επιστρέψει false, αλλιώς μπορώ να εξαγάγετε μόνο την νέα τιμή 144 00:08:48,760 --> 00:08:50,630 και μετά αύξησε το μέγεθος. 145 00:08:50,630 --> 00:08:52,750 Αλλά γιατί είναι αυτό το λάθος; 146 00:08:52,750 --> 00:08:55,010 Ας δούμε το παράδειγμα αυτό. 147 00:08:55,010 --> 00:08:57,020 Προσπαθώ να enqueue ένα σωρό πράγματα, 148 00:08:57,020 --> 00:08:58,390 και, στη συνέχεια, Πάω να dequeue και enqueue. 149 00:08:58,390 --> 00:09:00,550 Υπάρχει πολλή των εντολών, αλλά είναι πολύ απλό. 150 00:09:00,550 --> 00:09:04,790 Πάω να enqueue 5, πρέπει να προστεθούν 5, 7 και, στη συνέχεια, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, και τότε θέλω να dequeue κάτι, 152 00:09:09,310 --> 00:09:12,000 πράγμα που σημαίνει ότι θα πάω να αφαιρέσετε το πρώτο στοιχείο. 153 00:09:12,000 --> 00:09:14,640 Έτσι, Πάω να αφαιρέσετε τον αριθμό 3, σωστά; 154 00:09:14,640 --> 00:09:17,320 Το πρώτο στοιχείο. Εντάξει. 155 00:09:17,320 --> 00:09:21,450 Τώρα, αν θα προσπαθήσουν να enqueue κάτι άλλο, τι πρόκειται να συμβεί; 156 00:09:21,450 --> 00:09:24,290 Σύμφωνα με την εφαρμογή μου, 157 00:09:24,290 --> 00:09:31,040 Ήμουν έτοιμος να θέσει τον επόμενο αριθμό στην q.size δείκτη. 158 00:09:31,040 --> 00:09:35,140 Σε αυτή την περίπτωση, το μέγεθος είναι 8, 159 00:09:35,140 --> 00:09:38,640 έτσι ώστε ο δείκτης 8 θα είναι εδώ στην τελευταία θέση. 160 00:09:38,640 --> 00:09:43,900 Αν προσπαθήσω να enqueue 1 δεξιά εδώ, θα ήθελα να αντικαταστήσετε την τελευταία θέση 161 00:09:43,900 --> 00:09:45,870 με τον αριθμό 1, η οποία είναι εντελώς λανθασμένη. 162 00:09:45,870 --> 00:09:49,870 Αυτό που θέλω να κάνετε είναι να τυλίξετε γύρω και να πάει στην πρώτη θέση. 163 00:09:49,870 --> 00:09:52,870 Ίσως θα σας πω απλά, καλά, απλά πρέπει να ελέγξετε 164 00:09:52,870 --> 00:09:55,600 αν μπορώ να βάλω πραγματικά κάτι εκεί. 165 00:09:55,600 --> 00:09:58,560 Αν όχι, θα ήθελα απλώς να πω, OH, το νέο πλήρες δυναμικό 166 00:09:58,560 --> 00:10:02,010 είναι στην πραγματικότητα ικανότητα - 1, και δεν μπορείτε να βάλετε ένα στοιχείο εκεί. 167 00:10:02,010 --> 00:10:06,150 Αλλά ποιο είναι το πρόβλημα; Το πρόβλημα είναι ότι αν απλά dequeue πάντα εδώ 168 00:10:06,150 --> 00:10:08,240 και τότε θα προσπαθήσω να προσθέσω κάτι άλλο, θα ήθελα απλώς να πω, 169 00:10:08,240 --> 00:10:11,210 καλά, θα ήταν σε πλήρη δυναμικότητα, η οποία είναι 0. 170 00:10:11,210 --> 00:10:13,620 Έτσι ουρά σας έχει φύγει. 171 00:10:13,620 --> 00:10:16,990 Μπορείτε να τυλίξετε γύρω, και ένας τρόπος για την περιτύλιξη 172 00:10:16,990 --> 00:10:22,040 ότι εσείς έμαθε οραματιστής και άλλα psets χρησιμοποιούσε mod. 173 00:10:22,040 --> 00:10:29,090 Μπορείτε να το δοκιμάσετε στο σπίτι για να καταλάβετε γιατί θα κάνετε q.size + q.head 174 00:10:29,090 --> 00:10:31,080 mod ικανότητα, αλλά αν έχετε ελέγξει εδώ, 175 00:10:31,080 --> 00:10:34,760 μπορούμε να δούμε ότι λειτουργεί. 176 00:10:34,760 --> 00:10:37,760 Έτσι, στο τελευταίο παράδειγμα, ήταν q.size 8 177 00:10:37,760 --> 00:10:47,590 και η κεφαλή ήταν 1, επειδή ήταν η θέση εδώ της συστοιχίας. 178 00:10:47,590 --> 00:10:51,970 Έτσι θα είναι 8 + 1, 9. Mod χωρητικότητα 9 θα είναι 0. 179 00:10:51,970 --> 00:10:56,640 Θα πάει στο δείκτη 0. Θα είναι στη σωστή θέση. 180 00:10:56,640 --> 00:10:59,750 Και στη συνέχεια, δοκιμάστε την ουρά στο σπίτι. 181 00:10:59,750 --> 00:11:04,950 Μερικά σημαντικά πράγματα: να προσπαθήσουμε να κατανοήσουμε τη διαφορά ανάμεσα σε μια στοίβα και ουρά. 182 00:11:04,950 --> 00:11:11,620 Στο σπίτι, προσπαθήστε να πάρετε πολύ εξοικειωμένοι με την εφαρμογή enqueue, dequeue, ώθησης και ποπ. 183 00:11:11,620 --> 00:11:16,560 Και επίσης να καταλάβουμε πότε θα χρησιμοποιήσει κάθε ένα από αυτά. 184 00:11:16,560 --> 00:11:22,830 >> Ας χαλαρώστε για 10 δευτερόλεπτα με μια δέσμη των Pokemons. 185 00:11:22,830 --> 00:11:26,080 Και τώρα ας πάμε πίσω στις δομές δεδομένων. 186 00:11:26,080 --> 00:11:29,770 Hash πίνακες. Πολλοί άνθρωποι ήταν φοβισμένοι από πίνακες κατακερματισμού. 187 00:11:29,770 --> 00:11:33,650 στο πρόβλημα που 6, Spell Checker. 188 00:11:33,650 --> 00:11:35,980 Hash πίνακες και προσπαθεί, πολλοί άνθρωποι φοβούνται τους. 189 00:11:35,980 --> 00:11:38,540 Νομίζουν ότι είναι τόσο δύσκολο να κατανοηθεί. Ναι; 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Πρόβλημα σετ 5. >> Πρόβλημα σετ 5, ναι. Ευχαριστώ Rob. 191 00:11:41,490 --> 00:11:43,370 Ναι. Έξι ήταν Huff n 'Puff, ναι. 192 00:11:43,370 --> 00:11:49,340 Πρόβλημα που ήταν 5 Spell Checker, και θα έπρεπε να χρησιμοποιήσετε είτε ένα πίνακα κατακερματισμού ή μια δοκιμή. 193 00:11:49,340 --> 00:11:55,360 Πολλοί άνθρωποι νόμιζαν ότι ήταν εξαιρετικά δύσκολο να κατανοηθεί, αλλά είναι πραγματικά αρκετά απλή. 194 00:11:55,360 --> 00:12:01,290 Τι είναι ένας πίνακας κατακερματισμού, βασικά; Ένας πίνακας hash είναι μια σειρά από συνδεδεμένες λίστες. 195 00:12:01,290 --> 00:12:06,730 Η μόνη διαφορά μεταξύ ενός πίνακα και ένα πίνακα κατακερματισμού 196 00:12:06,730 --> 00:12:09,730 είναι ότι στον πίνακα κατακερματισμού έχετε κάτι που ονομάζεται συνάρτηση κατακερματισμού. 197 00:12:09,730 --> 00:12:12,080 Τι είναι μια συνάρτηση κατακερματισμού; 198 00:12:12,080 --> 00:12:13,970 Δεν ξέρω αν εσείς μπορείτε να διαβάσετε εδώ. 199 00:12:13,970 --> 00:12:16,090 Αυτό είναι ένα παράδειγμα ενός πίνακα κατακερματισμού. 200 00:12:16,090 --> 00:12:19,220 Έτσι μπορείτε να δείτε ότι έχετε έναν πίνακα με 31 στοιχεία. 201 00:12:19,220 --> 00:12:22,440 Και τι κάνουμε σε έναν πίνακα κατακερματισμού έχει μια συνάρτηση κατακερματισμού 202 00:12:22,440 --> 00:12:26,660 ότι πρόκειται να μεταφράσει ένα κλειδί, κάθε int με ένα δείκτη. 203 00:12:26,660 --> 00:12:31,740 Αν, για παράδειγμα, εάν θέλετε να επιλέξετε για τον Β. Harrison, 204 00:12:31,740 --> 00:12:34,190 Θα ήθελα να θέσω B. Harrison σε συναρτήσεις κατακερματισμού μου, 205 00:12:34,190 --> 00:12:36,960 και η συνάρτηση κατακερματισμού θα επιστρέψει 24. 206 00:12:36,960 --> 00:12:40,930 Έτσι, ξέρω ότι θέλετε να αποθηκεύσετε B. Harrison σε 24. 207 00:12:40,930 --> 00:12:46,580 Έτσι, αυτή είναι η διαφορά μεταξύ έχοντας μόλις μία συστοιχία και πίνακα κατακερματισμού. 208 00:12:46,580 --> 00:12:48,740 Στον πίνακα κατακερματισμού θα έχετε μια λειτουργία που πρόκειται να σας πω 209 00:12:48,740 --> 00:12:54,740 πού να αποθηκεύσετε τα δεδομένα που θέλετε να αποθηκεύσετε. 210 00:12:54,740 --> 00:12:57,040 Για τη συνάρτηση κατακερματισμού, που θέλετε να αναζητήσετε για μια συνάρτηση κατακερματισμού 211 00:12:57,040 --> 00:13:00,600 ότι είναι προσδιοριστική και καλά κατανεμημένη. 212 00:13:00,600 --> 00:13:07,810 Όπως μπορείτε να δείτε εδώ, θα δείτε ότι πολλά από τα στοιχεία που ήθελα να κατάστημα ήταν στην πραγματικότητα 19 213 00:13:07,810 --> 00:13:12,470 αντί να χρησιμοποιεί 31 και 30 και 29, τα οποία ήταν όλα δωρεάν. 214 00:13:12,470 --> 00:13:16,920 Έτσι, η συνάρτηση κατακερματισμού που χρησιμοποιήθηκε δεν ήταν πολύ καλά κατανεμημένη. 215 00:13:16,920 --> 00:13:20,710 Όταν λέμε καλά κατανεμημένη, αυτό σημαίνει ότι θέλουμε να έχουμε, 216 00:13:20,710 --> 00:13:26,520 περίπου, τουλάχιστον 1 ή 2 για κάθε ένα από τα - 217 00:13:26,520 --> 00:13:32,190 παρόμοια, μία διαφορά 1 ή 2 για κάθε ένα από τους δείκτες στις συστοιχίες. 218 00:13:32,190 --> 00:13:43,950 Θέλετε να έχετε, περίπου, τον ίδιο αριθμό των στοιχείων σε κάθε συνδεδεμένη λίστα στον πίνακα. 219 00:13:43,950 --> 00:13:48,600 Και είναι εύκολο να ελέγξετε αν είναι έγκυρο στον πίνακα κατακερματισμού, βλέπουν ως πίνακες κατακερματισμού. 220 00:13:48,600 --> 00:13:51,770 >> Τότε δέντρα. Αυτό είναι ένα δέντρο. 221 00:13:51,770 --> 00:13:56,400 Δέντρα στην επιστήμη των υπολογιστών είναι ανάποδα για κάποιο λόγο. 222 00:13:56,400 --> 00:14:00,150 Έτσι, εδώ έχετε τη ρίζα του δέντρου και στη συνέχεια τα φύλλα. 223 00:14:00,150 --> 00:14:05,630 Θα πρέπει να ξέρετε ακριβώς την ονοματολογία για τους γονείς και το παιδί. 224 00:14:05,630 --> 00:14:12,880 Κάθε κόμβος έχει τα παιδιά της, που είναι οι κόμβοι που βρίσκονται κάτω από τη μητρική εταιρεία. 225 00:14:12,880 --> 00:14:19,660 Έτσι, για παράδειγμα, 2 πρόκειται να είναι ο γονέας για 3 και για το άλλο παιδί εκεί, 226 00:14:19,660 --> 00:14:25,290 ενώ 3 πρόκειται να είναι ο γονέας για 1 και τα άλλα παιδιά που είναι εκεί. 227 00:14:25,290 --> 00:14:29,990 Και 1 πρόκειται να είναι το παιδί 3 του, και ούτω καθεξής. 228 00:14:29,990 --> 00:14:34,610 Έχουμε κάτι πολύ πιο ενδιαφέρον, ονομάζεται ένα δυαδικό δένδρο αναζήτησης, 229 00:14:34,610 --> 00:14:39,040 κατά την οποία όλες οι τιμές στα δεξιά του κόμβου 230 00:14:39,040 --> 00:14:41,660 πρόκειται να είναι στα δεξιά, ακριβώς εδώ - σχετικά με το δικαίωμα, 231 00:14:41,660 --> 00:14:46,780 πρόκειται να είναι μεγαλύτερο από το στοιχείο στη ρίζα. 232 00:14:46,780 --> 00:14:49,780 Έτσι, αν έχω τον αριθμό 5 εδώ, όλα τα στοιχεία σχετικά με το δικαίωμα 233 00:14:49,780 --> 00:14:51,940 πρόκειται να είναι μεγαλύτερος από 5, και στην αριστερή 234 00:14:51,940 --> 00:14:56,770 όλα τα στοιχεία που πρόκειται να είναι μικρότερη από 5. 235 00:14:56,770 --> 00:14:58,780 Γιατί είναι αυτό χρήσιμο; 236 00:14:58,780 --> 00:15:01,660 Λοιπόν, αν θέλετε να ελέγξετε εάν ο αριθμός 7 είναι εδώ, για παράδειγμα, 237 00:15:01,660 --> 00:15:05,960 Απλά πηγαίνετε στο 5 πρώτη και πάω να δω, είναι 7 μεγαλύτερη ή μικρότερη από 5; 238 00:15:05,960 --> 00:15:09,540 Είναι μεγαλύτερο, έτσι ξέρω ότι πρόκειται να πρέπει να είναι στα δεξιά του δέντρου. 239 00:15:09,540 --> 00:15:13,980 Γι 'αυτό και έχουν πολύ λιγότερα πράγματα να δούμε. 240 00:15:13,980 --> 00:15:19,520 Σε εφαρμογή ενός δυαδικού δέντρου αναζήτησης, τον κόμβο, είμαι απλώς πρόκειται να πρέπει να έχουν τα δεδομένα, 241 00:15:19,520 --> 00:15:21,750 έτσι int n? θα μπορούσε επίσης να έχει ένα string 242 00:15:21,750 --> 00:15:23,630 ή ό, τι ήθελε. 243 00:15:23,630 --> 00:15:28,100 Απλά πρέπει να είμαστε προσεκτικοί σχετικά με τον καθορισμό ποια είναι μεγαλύτερη, αυτό που είναι λιγότερο. 244 00:15:28,100 --> 00:15:30,390 Έτσι, αν είχε χορδές, για παράδειγμα, θα μπορούσατε να ορίσετε 245 00:15:30,390 --> 00:15:34,690 ότι όλα αυτά τα πράγματα σχετικά με το δικαίωμα θα έχουν μεγαλύτερο μήκος, 246 00:15:34,690 --> 00:15:40,940 το αριστερό πρόκειται να έχουν χαμηλότερα μήκη, έτσι είναι πραγματικά μέχρι σας. 247 00:15:40,940 --> 00:15:44,930 >> Πώς μπορώ να εφαρμόσω για να βρει BST; 248 00:15:44,930 --> 00:15:47,840 Το πρώτο πράγμα που θα έχετε να κάνετε είναι να ελέγξετε εάν η ρίζα είναι NULL. 249 00:15:47,840 --> 00:15:50,920 Αν είναι NULL, αυτό σημαίνει ότι το πράγμα δεν υπάρχει 250 00:15:50,920 --> 00:15:53,330 γιατί δεν έχουν καν ένα δέντρο, έτσι δεν είναι; 251 00:15:53,330 --> 00:15:55,790 Γι 'αυτό και επιστρέφει false. 252 00:15:55,790 --> 00:15:58,740 Διαφορετικά, θα πάω για να ελέγξετε αν ο αριθμός είναι μεγαλύτερος 253 00:15:58,740 --> 00:16:01,720 από την τιμή στη ρίζα. 254 00:16:01,720 --> 00:16:04,250 Πάω να προσπαθήσουμε να βρούμε το στοιχείο σχετικά με το δικαίωμα 255 00:16:04,250 --> 00:16:08,590 του δέντρου. 256 00:16:08,590 --> 00:16:11,310 Θα δείτε ότι είμαι με τη χρήση της αναδρομής εδώ. 257 00:16:11,310 --> 00:16:14,150 Και στη συνέχεια, αν είναι λιγότερο, είμαι πρόκειται να δούμε στα αριστερά. 258 00:16:14,150 --> 00:16:18,330 Και τέλος, αλλιώς, αν δεν είναι μικρότερη ή όχι μεγαλύτερη, 259 00:16:18,330 --> 00:16:20,660 αυτό σημαίνει ότι είναι και η αξία του. 260 00:16:20,660 --> 00:16:23,010 Γι 'αυτό ακριβώς το return true. 261 00:16:23,010 --> 00:16:26,360 Μπορείτε να δείτε εδώ ότι χρησιμοποιείται εάν, εάν, εάν. 262 00:16:26,360 --> 00:16:30,820 Και να θυμάστε, στο κουίζ 0, είχαμε ένα πρόβλημα που είχε, αν, αν, αν, 263 00:16:30,820 --> 00:16:32,780 και θα έπρεπε να βρει την αναποτελεσματικότητα, 264 00:16:32,780 --> 00:16:35,180 και η αναποτελεσματικότητα ήταν ότι θα χρησιμοποιηθεί εάν. 265 00:16:35,180 --> 00:16:39,060 Θα πρέπει να χρησιμοποιήσετε if, else if, else, αν και αλλού. 266 00:16:39,060 --> 00:16:44,240 Έτσι, θα πρέπει να χρησιμοποιήσω άλλο αν και αλλιώς αν και άλλος εδώ; 267 00:16:44,240 --> 00:16:46,200 Υπάρχει κάποιος που - ναι; 268 00:16:46,200 --> 00:16:51,140 [Φοιτητής μιλώντας, δεν ακούγεται] 269 00:16:51,140 --> 00:16:53,480 Τέλειο. Έτσι, η ίδια λέει ότι δεν έχει σημασία, 270 00:16:53,480 --> 00:16:55,930 μόνο και μόνο επειδή η αναποτελεσματικότητα που είχαμε πριν 271 00:16:55,930 --> 00:16:59,550 ήταν ότι επειδή, ίσως αν είχε ικανοποιηθεί κάποια συνθήκη, 272 00:16:59,550 --> 00:17:03,570 έτσι ώστε να έχουν πραγματοποιηθεί μια ενέργεια, αλλά στη συνέχεια επρόκειτο να ελέγξει όλες τις άλλες προϋποθέσεις. 273 00:17:03,570 --> 00:17:06,319 Αλλά στην περίπτωση αυτή, επέστρεψε αμέσως, γι 'αυτό δεν έχει σημασία. 274 00:17:06,319 --> 00:17:09,220 Έτσι, δεν χρειάζεται να χρησιμοποιήσετε άλλο αν. 275 00:17:09,220 --> 00:17:11,740 >> Και τέλος, ας μιλήσουμε για χώρες, 276 00:17:11,740 --> 00:17:13,800 το οποίο είναι το αγαπημένο όλων. 277 00:17:13,800 --> 00:17:15,980 Μια δοκιμή είναι ένα δέντρο συστοιχιών. 278 00:17:15,980 --> 00:17:20,369 Είναι πολύ γρήγορα για να κοιτάζω προς τα πάνω τις τιμές, αλλά χρησιμοποιεί πολλή μνήμη. 279 00:17:20,369 --> 00:17:22,530 Και είναι συνήθως για να φιλτράρετε τα λόγια, έτσι ώστε όταν 280 00:17:22,530 --> 00:17:27,920 θέλει να εφαρμόσει, για παράδειγμα, δεν ξέρω, όπως ένα τηλεφωνικό κατάλογο του τηλεφώνου σας 281 00:17:27,920 --> 00:17:30,440 και θέλετε να είστε σε θέση να τύπου Β 282 00:17:30,440 --> 00:17:32,510 και να έχουμε μόνο τα ονόματα των ανθρώπων που έχουν B. 283 00:17:32,510 --> 00:17:37,960 Είναι πολύ εύκολο να εφαρμόσει ότι χρησιμοποιώντας μια δοκιμή, για παράδειγμα. 284 00:17:37,960 --> 00:17:39,820 Πώς μπορείτε να ορίσετε έναν κόμβο σε μια δοκιμή; 285 00:17:39,820 --> 00:17:43,910 Απλά πρέπει να έχουν μια bool που πρόκειται να is_word. 286 00:17:43,910 --> 00:17:48,660 Αυτό αντιπροσωπεύει ότι η χρήση όλων των χαρακτήρων πριν από αυτόν τον κόμβο, 287 00:17:48,660 --> 00:17:51,920 θα ήταν σε θέση να σχηματίσει μία λέξη, 288 00:17:51,920 --> 00:17:57,230 και, στη συνέχεια, θα έχετε μια σειρά από δείκτες σε κόμβους. 289 00:17:57,230 --> 00:18:03,120 Μπορείτε να δείτε ότι έχουμε μια σειρά μητρικών κόμβων, έτσι ώστε ο κόμβος * array; Ναι; 290 00:18:03,120 --> 00:18:06,050 Έτσι, ας δούμε πώς θα λειτουργήσει αυτό. Για τον ορθογραφικό έλεγχο, 291 00:18:06,050 --> 00:18:08,230 έχουμε μια σειρά από 27 στοιχεία, 292 00:18:08,230 --> 00:18:12,150 γιατί έχουμε όλες τις επιστολές συν την απόστροφο. 293 00:18:12,150 --> 00:18:17,800 Πριν από εδώ είμαι απλώς πρόκειται να χρησιμοποιήσετε 2 γιατί θέλω να είναι σε θέση να γράψει στον πίνακα. 294 00:18:17,800 --> 00:18:20,230 Εντάξει. Έτσι, αυτό είναι ένα παράδειγμα μια δοκιμή. 295 00:18:20,230 --> 00:18:25,600 Αν μπορώ να προσδιορίσω ακριβώς το πρώτο κόμβο, θα έχει μια σειρά από 2 στοιχεία 296 00:18:25,600 --> 00:18:29,290 που είναι 2 δείκτες σε NULL, οπότε έβαλα ακριβώς «α» και «β». 297 00:18:29,290 --> 00:18:32,430 Και Πάω να έχουν μια bool που λέει is_word. 298 00:18:32,430 --> 00:18:34,420 Είναι πρόκειται να είναι ψευδής για το πρώτο, 299 00:18:34,420 --> 00:18:37,370 μόνο και μόνο επειδή, πριν από αυτό δεν έχει χαρακτήρες. 300 00:18:37,370 --> 00:18:40,900 Έτσι, μια κενή λέξη, δεν είναι μια λέξη. Έτσι είναι ψευδείς. 301 00:18:40,900 --> 00:18:46,320 Αν θέλω να προσθέσω «α» σε αυτό το λεξικό, τι θα πρέπει να κάνω; 302 00:18:46,320 --> 00:18:49,760 Θα πρέπει ακριβώς να malloc ένα νέο κόμβο για «α», 303 00:18:49,760 --> 00:18:54,630 και στη συνέχεια προσθέστε το λόγο του για να είναι αληθινό. 304 00:18:54,630 --> 00:19:00,180 Γι 'αυτό αντιπροσωπεύει ακριβώς αυτό που «α» πρόκειται να είναι αληθινό. Νόημα; 305 00:19:00,180 --> 00:19:04,120 Στη συνέχεια, αν θέλω να προσθέσω «βα», εγώ θα πρέπει να malloc 1 για «β», 306 00:19:04,120 --> 00:19:07,550 και, στη συνέχεια, Πάω να δημιουργήσει το boolean σε ψευδείς, 307 00:19:07,550 --> 00:19:10,160 επειδή «β» από μόνη της δεν είναι μια λέξη. 308 00:19:10,160 --> 00:19:13,010 Στη συνέχεια, Πάω να malloc ένα άλλο για «α», έτσι ώστε «βα», 309 00:19:13,010 --> 00:19:16,290 και, στη συνέχεια, Πάω να δημιουργήσει είναι μια λέξη για να είναι αληθινό. 310 00:19:16,290 --> 00:19:18,950 Επειδή «βα» είναι μια λέξη. 311 00:19:18,950 --> 00:19:21,910 Και τότε, αν θέλω να δω αν «β» είναι σε αυτό το λεξικό, 312 00:19:21,910 --> 00:19:26,730 Δεν μπορώ ακριβώς να πάτε με το πρώτο, «β». Έχω πάει κάτω, και κοιτάω είναι η λέξη, και λέει ψευδής. 313 00:19:26,730 --> 00:19:30,110 Έτσι δεν είναι μια λέξη. Αν θέλω να ελέγξετε «βα», 314 00:19:30,110 --> 00:19:38,010 Πηγαίνω στην πρώτη, «β», και στη συνέχεια πηγαίνετε στο «α», και βλέπω αλήθεια, γι 'αυτό είναι μια λέξη. Νόημα; 315 00:19:38,010 --> 00:19:41,950 Πολλοί άνθρωποι μπερδεύονται από προσπάθειες. Όχι; 316 00:19:41,950 --> 00:19:44,740 >> Τέλος, η κωδικοποίηση Huffman. Huffman κωδικοποίηση είναι πολύ χρήσιμο 317 00:19:44,740 --> 00:19:47,550 για να εξοικονομήσετε μνήμη και να συμπιέσετε αρχεία κειμένου, 318 00:19:47,550 --> 00:19:52,270 μόνο και μόνο επειδή πολλές φορές που θα χρησιμοποιήσετε «a» και «e», για παράδειγμα, 319 00:19:52,270 --> 00:19:57,710 στα έγγραφά σας, αλλά δεν ξέρω αν εσείς χρησιμοποιείτε «q» ή «z», όπως πολύ. 320 00:19:57,710 --> 00:20:02,040 Έχοντας μόλις 1 byte για κάθε χαρακτήρα, 321 00:20:02,040 --> 00:20:08,520 κάθε - οι 256 χαρακτήρες που έχουμε στον πίνακα ASCII δεν είναι πολύ βέλτιστη, 322 00:20:08,520 --> 00:20:11,410 μόνο και μόνο επειδή υπάρχουν κάποιοι χαρακτήρες που χρησιμοποιούν πολύ περισσότερο, 323 00:20:11,410 --> 00:20:15,180 οπότε μάλλον θα πρέπει να χρησιμοποιούν λιγότερη μνήμη για εκείνους. 324 00:20:15,180 --> 00:20:17,560 Πώς μπορώ να χρησιμοποιήσω Huffman κωδικοποίηση; 325 00:20:17,560 --> 00:20:20,010 Πρέπει να κάνουμε μια Huffman δέντρο. 326 00:20:20,010 --> 00:20:23,370  Μια Huffman δέντρο έχει κόμβους 327 00:20:23,370 --> 00:20:27,760 που έχουν ένα σύμβολο που πρόκειται να είναι όπως, «a», «b», «c», το γράμμα, 328 00:20:27,760 --> 00:20:32,990 ό, τι e-mail που έχετε, μια συχνότητα που είναι η συχνότητα που εμφανίζεται η λέξη στο κείμενο, 329 00:20:32,990 --> 00:20:36,280 ότι έφτιαχνες το δέντρο Huffman για, 330 00:20:36,280 --> 00:20:41,800 και, στη συνέχεια, ένας κόμβος που πρόκειται να επισημαίνουν την αριστερά του δέντρου Huffman 331 00:20:41,800 --> 00:20:47,210 και άλλος κόμβος που πρόκειται να υποδείξει τη σωστή. Έτσι ακριβώς όπως ένα δέντρο. 332 00:20:47,210 --> 00:20:49,440 Πώς να οικοδομήσουμε μια Huffman δέντρο; 333 00:20:49,440 --> 00:20:54,020 Θα πάμε για να πάρει τους 2 κόμβους που έχουν τις χαμηλότερες συχνότητες. 334 00:20:54,020 --> 00:20:56,490 Εάν έχετε μια γραβάτα θα πάμε για να πάρει τους 2 κόμβους 335 00:20:56,490 --> 00:20:59,870 που έχουν τις χαμηλότερες τιμές ASCII, καθώς και. 336 00:20:59,870 --> 00:21:02,420 Στη συνέχεια θα πάμε να δημιουργήσουμε ένα νέο δέντρο έξω από αυτά τα 2 κόμβοι 337 00:21:02,420 --> 00:21:08,030 που πρόκειται να έχει το συνδυασμένο συχνότητα στο μητρικό κόμβο. 338 00:21:08,030 --> 00:21:13,240 Και τότε θα πάμε να αφαιρέσετε τα 2 παιδιά από το δάσος 339 00:21:13,240 --> 00:21:15,570 και την αντικατάστασή τους με την μητρική. 340 00:21:15,570 --> 00:21:18,930 Και θα πάμε να επαναλάβω ότι έως ότου έχετε μόνο 1 δέντρο στο δάσος. 341 00:21:18,930 --> 00:21:23,840 Ας δούμε λοιπόν πώς θα κάνετε μια Huffman δέντρο για ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Μπορείτε να δείτε εδώ ότι όλα τα γράμματα έχουν συχνότητα 1 εκτός από την «Α»? Που έχει συχνότητα 2. 343 00:21:29,220 --> 00:21:34,090 Γι 'αυτό και δημιούργησε κόμβων για όλα τα γράμματα έβαλα κατά σειρά αξίας ASCII και συχνότητα. 344 00:21:34,090 --> 00:21:40,090 Έτσι, εάν θέλετε να δημιουργήσετε το πρώτο δέντρο, θα είναι με το «L» και «M». 345 00:21:40,090 --> 00:21:43,100 Γι 'αυτό είναι εδώ. Η συχνότητα του ζεύγους θα είναι 2 346 00:21:43,100 --> 00:21:49,470 επειδή είναι 1 + 1, τότε το επόμενο 2 με τις χαμηλότερες συχνότητες είναι «Υ» και «Ζ». 347 00:21:49,470 --> 00:21:53,180 Και τότε έχω όλα αυτά είναι - έχουν συχνότητα 2. 348 00:21:53,180 --> 00:22:00,470 Έτσι, ποιες είναι οι αυτοί που έχουν τη χαμηλότερη τιμή ASCII για την επόμενη; 349 00:22:00,470 --> 00:22:04,830 «Α» και «L». Γι 'αυτό να δημιουργήσετε το νέο κόμβο, 350 00:22:04,830 --> 00:22:09,930 και, τέλος, είναι 4 και 2, οπότε 2 πρόκειται να είναι στα αριστερά. 351 00:22:09,930 --> 00:22:12,430 Και αυτό είναι το Huffman δέντρο. 352 00:22:12,430 --> 00:22:16,060 Στη συνέχεια, αν θέλω να γράψω κάποιο κείμενο, 353 00:22:16,060 --> 00:22:24,440 όπως σε δυαδική να μετατρέψετε σε κείμενο, χρησιμοποιώντας τη Huffman δέντρο είναι πολύ εύκολο. 354 00:22:24,440 --> 00:22:30,220 Για παράδειγμα, αν πω ότι κινείται προς τα αριστερά είναι 0 και κινείται προς τα δεξιά είναι 1, 355 00:22:30,220 --> 00:22:32,410 Τι είναι αυτό πρόκειται να εκπροσωπήσει; 356 00:22:32,410 --> 00:22:35,530 Έτσι όπως το 1, 1, τόσο δεξιά, δεξιά, 357 00:22:35,530 --> 00:22:40,370 και στη συνέχεια 0, οπότε θα ήταν αριστερά L, και στη συνέχεια 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Έτσι, 1, 0, έτσι ακριβώς 1, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 Και στη συνέχεια 0, 1, έτσι ώστε «Ζ». 360 00:22:47,540 --> 00:22:52,170 Και στη συνέχεια 1, 0, 0 - δεν υπάρχει. 361 00:22:52,170 --> 00:22:56,780 0, 0 θα είναι «Υ», έτσι Lazy. 362 00:22:56,780 --> 00:23:06,060 Έτσι, αυτό είναι όλο για μένα, του Rob πρόκειται να αναλάβει. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Έτσι, την εβδομάδα 7 πράγματα. 364 00:23:08,400 --> 00:23:11,390 Έχουμε πολλά να πάει πέρα ​​από πολύ γρήγορα. 365 00:23:11,390 --> 00:23:13,430 Δυαδικούς τελεστές, υπερχείλιση, 366 00:23:13,430 --> 00:23:16,760 Βιβλιοθήκη CS50, στη συνέχεια, HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Όλοι σαν 15 έως 20 λεπτά. 368 00:23:20,990 --> 00:23:24,330 Δυαδικούς τελεστές. Υπάρχουν 6 από αυτά που πρέπει να ξέρετε. 369 00:23:24,330 --> 00:23:31,200 Δυαδικό και bitwise ή, XOR, αριστερή στροφή, δεξιά στροφή, και όχι. 370 00:23:31,200 --> 00:23:35,420 Δεξιά στροφή και να μην σας μόλις είδε στη διάλεξη καθόλου. 371 00:23:35,420 --> 00:23:40,480 Θα πάμε πέρα ​​από το γρήγορα εδώ, αλλά είναι καλό να γνωρίζουμε ότι αυτά είναι τα 6 που υπάρχουν. 372 00:23:40,480 --> 00:23:45,070 Να θυμάστε ότι οι φορείς εκμετάλλευσης bitwise είναι όπως όταν κάνεις 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Δεν ασχολούνται με το δυαδικό του 3 και 4. 374 00:23:49,420 --> 00:23:56,550 Με bitwise φορείς που είναι στην πραγματικότητα ασχολούνται με τα επιμέρους κομμάτια από τους αριθμούς 3 και 4. 375 00:23:56,550 --> 00:23:59,120 >> Έτσι, το πρώτο που θα πω είναι bitwise όχι, 376 00:23:59,120 --> 00:24:02,340 και το μόνο που κάνει είναι να αναστρέψετε όλα τα κομμάτια. 377 00:24:02,340 --> 00:24:05,500 Μέχρι εδώ, αν είστε γραπτώς αυτό σε C, δεν θα το γράψω 378 00:24:05,500 --> 00:24:09,380 ως ~ 11011 ή οτιδήποτε άλλο, θα πρέπει να γράφεις αρέσει ~ 4, 379 00:24:09,380 --> 00:24:12,970 και στη συνέχεια θα αναστρέψετε την δυαδική αναπαράσταση του 4. 380 00:24:12,970 --> 00:24:24,800 Έτσι, εδώ, ~ κάποιου δυαδικό αριθμό 1101101 πρόκειται να αναστρέψετε ακριβώς όλα 1 στο 0 και όλα τα 0 στα 1 του. 381 00:24:24,800 --> 00:24:27,600 Όπως είπα εκεί, η συχνή χρήση αυτής, 382 00:24:27,600 --> 00:24:30,830 και θα το δούμε σε λίγο, είναι σαν να θέλουμε να καταλήξουμε σε κάποιο αριθμό 383 00:24:30,830 --> 00:24:35,460 όπου όλα τα bits είναι 1, εκτός από ένα από αυτά. 384 00:24:35,460 --> 00:24:38,560 Έτσι είναι συνήθως πιο εύκολο να εκφράσουν τον αριθμό 385 00:24:38,560 --> 00:24:40,630 όπου ακριβώς ότι και μόνο bit έχει οριστεί, 386 00:24:40,630 --> 00:24:44,650 και στη συνέχεια να λάβει την ~ του, έτσι ώστε κάθε άλλο κομμάτι έχει οριστεί, εκτός από εκείνο το ένα. 387 00:24:44,650 --> 00:24:50,300 Οπότε αυτό είναι που θα πάμε να χρησιμοποιούν περισσότερο σε λίγο. 388 00:24:50,300 --> 00:24:58,220 >> Bitwise ή. Εδώ είναι 2 δυαδικούς αριθμούς, και αυτά τα 2 αριθμούς 389 00:24:58,220 --> 00:25:00,780 είναι αρκετά αντιπροσωπευτικό, δεδομένου ότι αντιπροσωπεύουν κάθε δυνατή 390 00:25:00,780 --> 00:25:07,290 συνδυασμός των bit που θα μπορούσε να χρειαστεί να λειτουργήσει. 391 00:25:07,290 --> 00:25:13,540 Εδώ, όταν or'd κάθε λίγο, είμαστε ακριβώς πρόκειται να συγκριθούν κατ 'ευθείαν κάτω. 392 00:25:13,540 --> 00:25:15,410 Έτσι, στην αριστερή πλευρά έχουμε μια 1 και 1. 393 00:25:15,410 --> 00:25:20,510 Όταν bitwise | εκείνων, τι είμαι πρόκειται να πάρει; Ένα. 394 00:25:20,510 --> 00:25:25,320 Στη συνέχεια bitwise | 0 και 1 δεν πρόκειται να μου δώσει; Ένα. 395 00:25:25,320 --> 00:25:27,840 Bitwise 1 και 0 πρόκειται να είναι το ίδιο πράγμα, ένα. 396 00:25:27,840 --> 00:25:31,880 Bitwise 0 | 0 πρόκειται να μου δώσει 0. 397 00:25:31,880 --> 00:25:37,300 Έτσι, η μόνη περίπτωση όπου παίρνω το 0 είναι το 0 | 0 υπόθεσης. 398 00:25:37,300 --> 00:25:40,020 Και μπορείτε να σκεφτείτε ότι όπως ακριβώς λογική ΙΑΠ σας. 399 00:25:40,020 --> 00:25:44,830 Έτσι, αν νομίζετε ότι από 1 ως αληθινή και 0 false, το ίδιο ισχύει και εδώ. 400 00:25:44,830 --> 00:25:50,040 Έτσι αλήθεια ή αλήθεια είναι αλήθεια? Αληθής ή ψευδής είναι αλήθεια. 401 00:25:50,040 --> 00:25:57,150 Ψευδείς ή αλήθεια είναι αλήθεια? Ψευδής ή ψευδής είναι το μόνο πράγμα που είναι πραγματικά λάθος. 402 00:25:57,150 --> 00:26:00,100 Εδώ είναι το παράδειγμα που πρέπει να ξέρετε 403 00:26:00,100 --> 00:26:05,160 ως ένα πολύ καλό παράδειγμα του όταν bitwise τελεστές που χρησιμοποιούνται. 404 00:26:05,160 --> 00:26:08,660 Εδώ αν θέλουμε ή του κεφαλαίου «Α» με OX20, 405 00:26:08,660 --> 00:26:11,830 και θα δούμε αυτά σε ένα δεύτερο, παίρνουμε κάτι. 406 00:26:11,830 --> 00:26:16,020 Και αν εμείς ή πεζό «α» με OX20, έχουμε πάρει κάτι. 407 00:26:16,020 --> 00:26:26,750 Οπότε ας σηκώσει τον πίνακα ASCII. 408 00:26:26,750 --> 00:26:34,000 Εντάξει. Εδώ βλέπουμε ότι «Α» είναι - 409 00:26:34,000 --> 00:26:36,920 εδώ έχουμε «Α» είναι δεκαδικός 65. 410 00:26:36,920 --> 00:26:45,120 Αλλά εγώ θα πάω με το δεκαεξαδικό, η οποία είναι Ox41. 411 00:26:45,120 --> 00:26:48,280 Αρκετά σίγουρος είδαμε στην τάξη. Νομίζω ότι είδαμε στην τάξη 412 00:26:48,280 --> 00:26:52,730 ότι είναι αρκετά εύκολο να μετατρέψετε από δεκαεξαδικό σε δυαδικό. 413 00:26:52,730 --> 00:26:55,280 Έτσι, εδώ, αν θέλετε να βάλετε 4 σε δυαδικό, 414 00:26:55,280 --> 00:26:59,550 αυτό είναι ακριβώς πρόκειται να είναι 0100. 415 00:26:59,550 --> 00:27:03,620 Αυτό είναι 1 του θέση, τη θέση 2, τον τόπο 4, οπότε αυτό είναι 4. 416 00:27:03,620 --> 00:27:08,550 Τότε μπορώ να χωριστεί 1 σε δυαδικό, το οποίο πρόκειται να είναι το 0001. 417 00:27:08,550 --> 00:27:14,280 Και έτσι αυτό πρόκειται να είναι η αναπαράσταση της «Α» σε δυαδική. 418 00:27:14,280 --> 00:27:22,720 Λαμβάνοντας πεζά γράμματα «α», είναι τώρα πρόκειται να είναι Ox61, 419 00:27:22,720 --> 00:27:27,050 όπου, διάσπαση αυτών επάνω σε δυαδικό του, έτσι, ένα 6 - 420 00:27:27,050 --> 00:27:37,830 Ας το κάνουμε πραγματικότητα - δεν είναι γόμα εκεί; Eraser. 421 00:27:37,830 --> 00:27:48,220 Ox61. Έτσι, ο διαχωρισμός 6 σε δυαδικό πρόκειται να είναι 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 Και σχισίματος 1 θα είναι 0001. 423 00:27:54,610 --> 00:27:56,520 Κοιτάζοντας τη διαφορά μεταξύ αυτών των 2, 424 00:27:56,520 --> 00:28:04,250 βλέπουμε ότι η μόνη διαφορά ανάμεσα σε ένα πεζό και κεφαλαίο «Α» είναι το ενιαίο κομμάτι. 425 00:28:04,250 --> 00:28:11,810 Έτσι, επιστρέφουν εδώ - εντάξει. 426 00:28:11,810 --> 00:28:15,920 Επιστρέφοντας εδώ, αν κοιτάξουμε τι το bit OX20 είναι, 427 00:28:15,920 --> 00:28:22,210 επομένως ο διαχωρισμός του OX20 σε δυαδικό του, 428 00:28:22,210 --> 00:28:27,310 είναι 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 OX20, το μόνο κομμάτι που έχει οριστεί είναι το κομμάτι που μας απασχολεί, 430 00:28:33,470 --> 00:28:38,210 με την εναλλαγή μεταξύ κεφαλαίων και πεζών «ένα». 431 00:28:38,210 --> 00:28:47,610 Αν ήμουν ή «Α», το οποίο είναι αυτό, «Α», 432 00:28:47,610 --> 00:28:50,580 αν ή 'A' με OX20, 433 00:28:50,580 --> 00:28:53,490 τι είμαι πρόκειται να πάρει; 434 00:28:53,490 --> 00:28:58,960 [Student, δεν ακούγεται] >> Πεζά «α», επειδή πρόκειται να αναστρέψετε αυτό το κομμάτι σε ένα 1. 435 00:28:58,960 --> 00:29:04,170 Και αν εγώ ή «a» με OX20, τι είμαι πρόκειται να πάρει; 436 00:29:04,170 --> 00:29:08,780 Πεζά ένα, επειδή ακριβώς oring «α» με OX20, 437 00:29:08,780 --> 00:29:14,580 Είμαι ακριβώς πρόκειται να oring αυτό το μοναδικό κομμάτι σε 1? Είναι ήδη 1, οπότε δεν έχει σημασία. 438 00:29:14,580 --> 00:29:17,960 Έτσι έχουμε «α» και «a». 439 00:29:17,960 --> 00:29:24,820 >> Bitwise και. Και πάλι, μπορούμε να σκεφτούμε αυτό ως λογικό και μας ομόλογό του. 440 00:29:24,820 --> 00:29:28,180 Από την αριστερή πλευρά έχουμε πραγματική και αληθινή. 441 00:29:28,180 --> 00:29:31,160 Είναι πρόκειται να είναι αληθινό, και για όλες τις περιπτώσεις, 442 00:29:31,160 --> 00:29:36,270 ψευδείς και αληθινή ή αλήθεια και ψευδείς, ή ψευδής και ψευδής, 443 00:29:36,270 --> 00:29:38,550 κανένα από αυτά τα πράγματα είναι αλήθεια. 444 00:29:38,550 --> 00:29:44,170 Έτσι, αυτό που καταλήγουμε να πάρει είναι το 1000. 445 00:29:44,170 --> 00:29:48,830 Έτσι, τώρα, εδώ, εδώ είναι που έχω χρησιμοποιήσει το έμπιστος bitwise όχι, 446 00:29:48,830 --> 00:29:52,230 όπου είχαμε OX20. 447 00:29:52,230 --> 00:29:54,350 Έτσι, αυτό είναι OX20. 448 00:29:54,350 --> 00:29:59,570 Τώρα αυτό που θέλω να κάνω, bitwise ~ του OX20. 449 00:29:59,570 --> 00:30:03,600 Αυτό πρόκειται να αναστρέψετε όλα τα κομμάτια. 450 00:30:03,600 --> 00:30:09,330 Έτσι έχω 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 Και έτσι «Α» anded με ~ OX20 πρόκειται να μου δώσει ό, τι; 452 00:30:18,940 --> 00:30:22,430 Το μόνο κομμάτι που πρέπει πραγματικά να σκεφτούμε είναι αυτό, 453 00:30:22,430 --> 00:30:26,020 δεδομένου ότι, εάν όλα αυτά τα δυαδικά ψηφία έχουν οριστεί σε 1, 454 00:30:26,020 --> 00:30:29,000 Στη συνέχεια θα πάμε για να πάρει ακριβώς αυτό που «Α» ήταν, 455 00:30:29,000 --> 00:30:31,260 εκτός, ενδεχομένως, αυτό το bit αυτό είναι. 456 00:30:31,260 --> 00:30:34,460 Γιατί αν ήταν 1, τώρα πρόκειται να τεθεί σε 0, 457 00:30:34,460 --> 00:30:39,810 γιατί ό, τι είναι αυτό, anded με αυτό πρόκειται να είναι 0. 458 00:30:39,810 --> 00:30:43,280 Έτσι τι είναι «Α» & ~ OX20 πρόκειται να μου δώσει; 459 00:30:43,280 --> 00:30:48,200 [Φοιτητές απαντήσει, δεν ακούγεται] >> Και τι είναι «a» και - είναι «Α». 460 00:30:48,200 --> 00:30:52,170 Και τι είναι «a» & ~ OX20 πρόκειται να μου δώσει; 461 00:30:52,170 --> 00:30:56,720 «Α.» Επειδή αυτό είναι σήμερα μια 1. 462 00:30:56,720 --> 00:30:59,570 Anding με αυτό 0 πρόκειται να κάνουν ένα 0, 463 00:30:59,570 --> 00:31:02,530 και τώρα θα πάμε να πάρετε ένα «Α». 464 00:31:02,530 --> 00:31:06,600 >> Και οι δύο είναι «Α», και τελευταίο αλλά όχι λιγότερο από αυτού του τύπου, 465 00:31:06,600 --> 00:31:10,830 έχουμε XOR. Είναι πολύ παρόμοια ή, 466 00:31:10,830 --> 00:31:14,400 εκτός από αυτό σημαίνει αποκλειστικά ή. 467 00:31:14,400 --> 00:31:18,420 Αυτό είναι σαν αυτό που συνήθως σκέφτονται όπως και στον πραγματικό κόσμο. 468 00:31:18,420 --> 00:31:23,190 Έτσι, μπορείτε να κάνετε είτε «x» ή «y», αλλά όχι και τα δύο. 469 00:31:23,190 --> 00:31:28,700 Εδώ 1 ^ 1 θα είναι 0. 470 00:31:28,700 --> 00:31:33,650 Επειδή η αλήθεια, αυτό είναι - δεν λειτουργεί τόσο καλά με τη λογική αληθινό και το ψεύτικο 471 00:31:33,650 --> 00:31:37,150 όπως bitwise & ή να κάνετε, 472 00:31:37,150 --> 00:31:40,100 αλλά αληθινό ^ αλήθεια είναι ψευδής. 473 00:31:40,100 --> 00:31:44,810 Επειδή θέλουμε μόνο να επιστρέψει true αν μόνο ένα από αυτά είναι αλήθεια. 474 00:31:44,810 --> 00:31:50,950 Έτσι, 1 ^ 1 είναι 0. Τι γίνεται με 0 ^ 1; 475 00:31:50,950 --> 00:31:56,010 Είναι 1. 1 ^ 0 είναι 1, 0 ^ 0 είναι 0. 476 00:31:56,010 --> 00:32:03,890 Έτσι, κάτω από όλες τις συνθήκες, 0 0 bitwise κάτι πρόκειται να είναι 0. 477 00:32:03,890 --> 00:32:10,270 1 bitwise κάτι 0 ή 0 bitwise 1, 478 00:32:10,270 --> 00:32:14,660 αν είναι | ή ^, αυτό θα είναι ένα 1, και αν είναι και θα είναι 0. 479 00:32:14,660 --> 00:32:20,850 Και η μόνη περίπτωση όπου 1 bitwise 1 δεν είναι η 1η είναι με αποκλειστική ή. 480 00:32:20,850 --> 00:32:24,580 Αυτό είναι 0110. 481 00:32:24,580 --> 00:32:36,520 Έτσι, εδώ και τώρα, με τη χρήση XOR - έτσι είμαστε πίσω στο 20. 482 00:32:36,520 --> 00:32:43,480 «Α» ^ OX20 είναι αυτά τα 2 bits εμείς συγκρίνουμε. 483 00:32:43,480 --> 00:32:50,020 Έτσι, ένα 1 ^ 0 πρόκειται να μου δώσει ένα τι; Μια μοναδική. 484 00:32:50,020 --> 00:32:58,430 ^ OX20 πρόκειται «Α» για να μου δώσει; Πεζά ένα. 485 00:32:58,430 --> 00:33:04,010 «Α» ^ OX20 πρόκειται να μου δώσει; Κεφαλαίου Α. 486 00:33:04,010 --> 00:33:09,310 Επειδή ό, τι αυτό που κάνει, αυτό XORing με OX20 487 00:33:09,310 --> 00:33:15,380 αποτελεσματικά ρίχνεις ό, τι αυτό το bit. 488 00:33:15,380 --> 00:33:21,240 Εάν αυτό είναι ένα 0, είναι τώρα πρόκειται να γίνει 1. 489 00:33:21,240 --> 00:33:26,160 Δεδομένου ότι αυτό είναι ένα 1, 1 ^ 1 είναι 0. 490 00:33:26,160 --> 00:33:33,280 Έτσι μας «α» έχει γίνει «Α» και μας «Α» έχει γίνει «ένα». 491 00:33:33,280 --> 00:33:36,910 Έτσι XOR είναι ένα πολύ βολικό τρόπο μόνο αλλάζουμε την υπόθεση. 492 00:33:36,910 --> 00:33:39,960 Μπορείτε απλά θέλετε να μετακινηθείτε σε μια σειρά από επιστολές 493 00:33:39,960 --> 00:33:44,330 και εναλλάσσονται την περίπτωση του κάθε χαρακτήρα, 494 00:33:44,330 --> 00:33:50,680 απλά XOR πάντα με OX20. 495 00:33:50,680 --> 00:33:55,220 >> Τώρα έχουμε αριστερή στροφή. Αριστερή στροφή είναι ακριβώς πρόκειται να, βασικά, 496 00:33:55,220 --> 00:34:01,250 ωθήσει όλους τους αριθμούς σε ή προς τα αριστερά, και τοποθετήστε 0 πίσω τους. 497 00:34:01,250 --> 00:34:05,550 Έτσι, εδώ έχουμε 00001101. 498 00:34:05,550 --> 00:34:08,560 Εμείς πάμε για να ωθήσει 3 σε 0 από τα δεξιά, 499 00:34:08,560 --> 00:34:13,580 και παίρνουμε 01101000. 500 00:34:13,580 --> 00:34:16,380 Σε μη δυαδικές όρους, 501 00:34:16,380 --> 00:34:24,699 θα δούμε ότι αυτό είναι πραγματικά ασχολούνται 13 αριστερά-μετατοπίστηκε με 3, η οποία μας δίνει 104. 502 00:34:24,699 --> 00:34:32,530 Έτσι αριστερή στροφή, βλέπουμε εδώ, x << y είναι βασικά x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 είναι 8, οπότε 13 * 8 είναι 104. 504 00:34:40,139 --> 00:34:45,679 Αν απλά σκεφτείτε δυαδικό σε γενικές γραμμές, πώς κάθε ψηφίο, 505 00:34:45,679 --> 00:34:49,530 αν αρχίσουμε από τα δεξιά, είναι η 1η του θέση, τότε η θέση του 2, τότε η θέση του είναι 4. 506 00:34:49,530 --> 00:34:51,330 Έτσι, πιέζοντας 0 από τα δεξιά, 507 00:34:51,330 --> 00:34:55,080 είμαστε απλά πιέζοντας τα πράγματα που ήταν στη θέση του 4 στην θέση του 8, το 508 00:34:55,080 --> 00:34:57,920 και πράγματα που ήταν στη θέση του 8 στην θέση του 16 του. 509 00:34:57,920 --> 00:35:01,280 Κάθε στροφή πολλαπλασιάζει μόνο με 2. Ναι; 510 00:35:01,280 --> 00:35:05,210 [Φοιτητής] Τι θα συμβεί αν μετατοπιστεί από 5; 511 00:35:05,210 --> 00:35:10,790 [Bowden] Αν μετατοπιστεί κατά 5 θα χάσει μόνο ψηφία. 512 00:35:10,790 --> 00:35:15,410 Αναπόφευκτα, αυτό είναι το ίδιο πράγμα. Όπως, ακέραιοι αριθμοί είναι μόνο 32 bits, 513 00:35:15,410 --> 00:35:20,750 οπότε αν μπορείτε να προσθέσετε 2 πραγματικά μεγάλα ακέραιοι, απλά δεν ταιριάζει σε έναν ακέραιο. 514 00:35:20,750 --> 00:35:23,660 Έτσι είναι το ίδιο πράγμα εδώ. Αν μετατοπιστεί από 5, 515 00:35:23,660 --> 00:35:25,650 θα χάσει μόνο το ένα. 516 00:35:25,650 --> 00:35:28,820 Και αυτό είναι το είδος του τι εννοώ με "περίπου" 517 00:35:28,820 --> 00:35:37,470 όπου κι αν αλλάξει πάρα πολύ μακριά, θα χάσετε bits. 518 00:35:37,470 --> 00:35:39,830 Δεξιά στροφή >> πρόκειται να είναι το αντίθετο, 519 00:35:39,830 --> 00:35:43,090 όπου θα πάμε για να σπρώξουν τα 0 από το τέλος, 520 00:35:43,090 --> 00:35:48,400 και για τους σκοπούς μας, συμπληρώστε 0 από τα αριστερά. 521 00:35:48,400 --> 00:35:52,910 Έτσι, για να γίνει αυτό, είμαστε ουσιαστικά αναιρώντας όσα είχαμε ήδη κάνει. 522 00:35:52,910 --> 00:35:57,780 Και βλέπουμε ότι οι τρεις 0 σχετικά με το δικαίωμα που μόλις πέσει, 523 00:35:57,780 --> 00:36:02,020 και έχουμε ωθήσει το 1101 σε όλη τη διαδρομή προς τα δεξιά. 524 00:36:02,020 --> 00:36:08,380 Αυτό κάνει 104 >> 3, η οποία είναι, ουσιαστικά, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Έτσι, τώρα, εδώ, είναι μια παρόμοια ιδέα. 526 00:36:11,200 --> 00:36:18,720 Γιατί είναι ακριβώς περίπου x / 2 ^ y, και όχι πραγματικά x / 2 ^ y; 527 00:36:18,720 --> 00:36:22,240 Γιατί αν είχε μετατοπιστεί από 4, θα είχα χάσει ένα 1. 528 00:36:22,240 --> 00:36:25,950 Βασικά, αυτό που σκέφτεστε, απλά σκεφτείτε διαίρεσης σε γενικές γραμμές. 529 00:36:25,950 --> 00:36:31,070 Έτσι, όπως το 5/2 2. Δεν είναι 2.5. 530 00:36:31,070 --> 00:36:35,000 Είναι η ίδια ιδέα εδώ. Όταν χωρίζουν από 2, 531 00:36:35,000 --> 00:36:39,910 μπορούμε να χάσουμε περίεργα κομμάτια κατά μήκος του τρόπου. 532 00:36:39,910 --> 00:36:43,870 Έτσι τώρα - αυτό είναι για bitwise. Αυτό είναι όλα όσα χρειάζεται να ξέρετε. 533 00:36:43,870 --> 00:36:46,340 Θυμηθείτε τις περιπτώσεις χρήσης που είδαμε στην τάξη, 534 00:36:46,340 --> 00:36:49,340 όπως μια μάσκα bit είναι χρήσιμο για bitwise φορείς, 535 00:36:49,340 --> 00:36:53,220 ή μπορείτε να τα χρησιμοποιήσετε για μάσκες bit. 536 00:36:53,220 --> 00:36:58,620 Κεφαλαία και πεζά γράμματα, μετατροπές είναι μια αρκετά πρωτότυπη παράδειγμα. 537 00:36:58,620 --> 00:37:01,640 >> Εντάξει, έτσι buffer overflow επιθέσεις. 538 00:37:01,640 --> 00:37:05,110 Όποιος θυμάται τι ήταν λάθος με αυτή τη λειτουργία; 539 00:37:05,110 --> 00:37:10,140 Ανακοίνωση δηλώσαμε μια σειρά από 12 bytes, 12 χαρακτήρες, 540 00:37:10,140 --> 00:37:18,510 και στη συνέχεια να αντιγράψετε σε ρυθμιστικό μας από 12 χαρακτήρες ολόκληρη η μπάρα χορδή. 541 00:37:18,510 --> 00:37:25,080 Έτσι, ποιο είναι το πρόβλημα εδώ; 542 00:37:25,080 --> 00:37:32,270 Ο μαγικός αριθμός 12 θα πρέπει να εμφανιστεί λίγο πολύ αμέσως ως - γιατί 12; 543 00:37:32,270 --> 00:37:35,050 Τι θα συμβεί αν bar συμβαίνει να είναι περισσότερο από 12 χαρακτήρες; 544 00:37:35,050 --> 00:37:41,200 Τι θα συμβεί αν το μπαρ είναι τα εκατομμύρια των χαρακτήρων; 545 00:37:41,200 --> 00:37:46,010 Εδώ το θέμα είναι memcpy. Εάν η γραμμή είναι αρκετά μεγάλο χρονικό διάστημα, 546 00:37:46,010 --> 00:37:50,330 θα είναι ακριβώς τελείως - «c», «c» δεν με νοιάζει ότι ήταν μόνο 12 χαρακτήρες? 547 00:37:50,330 --> 00:37:53,280 «C» δεν νοιάζεται ότι δεν μπορεί να χωρέσει ότι πολλές bytes. 548 00:37:53,280 --> 00:37:58,250 Θα αντικαταστήσει μόνο εντελώς χαρακτηριστικά, τα 12 bytes έχουμε διατίθενται γι 'αυτό, 549 00:37:58,250 --> 00:38:01,830 και ό, τι το παρελθόν στη μνήμη που στην πραγματικότητα δεν ανήκουν σε αυτό το ρυθμιστικό 550 00:38:01,830 --> 00:38:06,520 με ό, τι η γραμμή string είναι. 551 00:38:06,520 --> 00:38:09,780 Έτσι, αυτή ήταν η εικόνα που είδαμε στην τάξη 552 00:38:09,780 --> 00:38:12,220 όπου έχουμε stack μας μεγαλώνουν. 553 00:38:12,220 --> 00:38:16,040 Θα πρέπει να χρησιμοποιείται σε αυτές τις εικόνες ή να εξοικειωθεί μαζί τους και πάλι. 554 00:38:16,040 --> 00:38:21,260 Έχουμε stack μας μεγαλώνουν, διευθύνσεις μνήμης ξεκινούν από το 0 στην κορυφή 555 00:38:21,260 --> 00:38:26,270 και μεγαλώνει προς τα κάτω για να αρέσει 4 δισ. στο κάτω μέρος. 556 00:38:26,270 --> 00:38:28,820 Έχουμε σειρά μας «c» κάπου στη μνήμη, 557 00:38:28,820 --> 00:38:32,260 τότε έχουμε το δείκτη μας να απαγορεύσει το δικαίωμα κάτω από αυτό, 558 00:38:32,260 --> 00:38:38,720 και στη συνέχεια να έχουμε αυτήν την αποθηκευμένη δείκτη πλαισίου σε διεύθυνση επιστροφής μας και στοίβα μητρική μας ρουτίνα του. 559 00:38:38,720 --> 00:38:40,800 Θυμηθείτε τι η διεύθυνση επιστροφής είναι; 560 00:38:40,800 --> 00:38:45,360 Είναι κατά κύριο καλεί μια συνάρτηση foo, καλεί μια γραμμή λειτουργιών, 561 00:38:45,360 --> 00:38:48,100 αναπόφευκτα, μπαρ αποδόσεις. 562 00:38:48,100 --> 00:38:52,610 Έτσι, όταν επιστρέφει bar, πρέπει να ξέρουν ότι πρόκειται πίσω στο foo που ονομάζεται. 563 00:38:52,610 --> 00:39:01,360 Έτσι, η διεύθυνση του αποστολέα είναι η διεύθυνση της συνάρτησης που πρέπει να επιστρέψει, όταν οι αποδόσεις λειτουργίας. 564 00:39:01,360 --> 00:39:05,830 Ο λόγος που είναι σημαντικό για τις επιθέσεις υπερχείλισης buffer είναι επειδή, βολικά, 565 00:39:05,830 --> 00:39:09,580 hackers θέλατε να αλλάξετε αυτήν τη διεύθυνση επιστροφής. 566 00:39:09,580 --> 00:39:14,950 Αντί να πηγαίνουν πίσω στο foo, Πάω να πάει πίσω όπου ο χάκερ θέλει να πάει πίσω. 567 00:39:14,950 --> 00:39:17,760 Και, βολικά, όπου ο χάκερ θέλει συχνά να πάει πίσω στο 568 00:39:17,760 --> 00:39:22,400 είναι η αρχή του buffer που είχε αρχικά. 569 00:39:22,400 --> 00:39:26,170 Έτσι παρατηρούμε, και πάλι, Little Indian. 570 00:39:26,170 --> 00:39:28,490 Η συσκευή είναι ένα παράδειγμα ενός συστήματος Little Indian, 571 00:39:28,490 --> 00:39:34,140 έτσι ώστε ένας ακέραιος ή ένας δείκτης αποθηκεύεται με τις ψηφιολέξεις αντιστραφεί. 572 00:39:34,140 --> 00:39:38,980 Έτσι, εδώ βλέπουμε - είναι αυτό; Ναι. 573 00:39:38,980 --> 00:39:45,660 Βλέπουμε Ox80, OxC0, ΟΧ35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Θυμηθείτε τα δεκαεξαδικά ψηφία; 575 00:39:48,250 --> 00:39:50,640 Εμείς δεν μπορούν να ανατρέψουν τα δεκαεξαδικά ψηφία σε Little Indian, 576 00:39:50,640 --> 00:39:56,110 γιατί 2 δεκαεξαδικά ψηφία συνθέτουν ένα byte, και να αναστρέψει τα bytes. 577 00:39:56,110 --> 00:40:00,300 Αυτός είναι ο λόγος για τον οποίο δεν αποθηκεύουν, όπως, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Εμείς αποθηκεύουν, αντ 'αυτού, κάθε ζεύγος 2 ψηφία, αρχίζοντας από τα δεξιά. 579 00:40:07,520 --> 00:40:10,880 Αυτή η διεύθυνση αναφέρεται στη διεύθυνση της έναρξης 580 00:40:10,880 --> 00:40:15,190 ρυθμιστικού μας που πραγματικά ήθελε να αντιγράψετε στην πρώτη θέση. 581 00:40:15,190 --> 00:40:19,230 Ο λόγος που είναι χρήσιμο είναι γιατί, τι και αν ο εισβολέας 582 00:40:19,230 --> 00:40:24,100 συνέβη, αντί να έχουν ένα string που μόλις 583 00:40:24,100 --> 00:40:27,060 ένα αβλαβές σειρά, όπως, το όνομα τους ή κάτι τέτοιο, 584 00:40:27,060 --> 00:40:33,900 τι θα γινόταν αν, αντίθετα, ότι η σειρά ήταν μερικά μόνο αυθαίρετου κώδικα 585 00:40:33,900 --> 00:40:38,610 που έκανε ό, τι ήθελε να κάνει; 586 00:40:38,610 --> 00:40:45,630 Έτσι, θα μπορούσαν - Δεν μπορώ να σκεφτώ κάποιο δροσερό κώδικα. 587 00:40:45,630 --> 00:40:47,780 Θα μπορούσε να είναι οτιδήποτε, όμως. Κάθε καταστροφικό κώδικα. 588 00:40:47,780 --> 00:40:51,440 Αν ήθελαν, θα μπορούσαν να κάνουν ακριβώς κάτι σε seg ελαττώματα, αλλά αυτό θα ήταν άσκοπο. 589 00:40:51,440 --> 00:40:54,950 Συνήθως το κάνουν για να χαράξει το σύστημά σας. 590 00:40:54,950 --> 00:40:59,930 >> Εντάξει. Βιβλιοθήκη CS50. 591 00:40:59,930 --> 00:41:04,800 Αυτό είναι, κατά βάση, getInt, GetString, όλες αυτές οι λειτουργίες που παρέχονται για σας. 592 00:41:04,800 --> 00:41:10,630 Έτσι έχουμε char * string, και αυτή είναι η αφαίρεση που φύσηξε μακριά 593 00:41:10,630 --> 00:41:12,450 σε κάποιο σημείο κατά τη διάρκεια του εξαμήνου. 594 00:41:12,450 --> 00:41:18,220 Να θυμάστε ότι ένα string είναι απλά μια σειρά από χαρακτήρες. 595 00:41:18,220 --> 00:41:23,240 Έτσι, εδώ βλέπουμε μια συντομευμένη έκδοση του GetString. 596 00:41:23,240 --> 00:41:25,920 Θα πρέπει να κοιτάξουμε πίσω σε αυτό για να θυμηθούμε πώς είναι στην πραγματικότητα. 597 00:41:25,920 --> 00:41:30,950 Βασικά στοιχεία είναι, να παρατηρήσετε έχουμε σε ένα ενιαίο χαρακτήρα, σε μια εποχή 598 00:41:30,950 --> 00:41:34,570 από πρότυπο, το οποίο είναι ακριβώς όπως μας πληκτρολογώντας στο πληκτρολόγιο. 599 00:41:34,570 --> 00:41:37,890 Έτσι, ένας χαρακτήρας σε έναν χρόνο, και αν έχουμε πάρα πολλούς χαρακτήρες, 600 00:41:37,890 --> 00:41:40,580 οπότε αν n + 1 είναι μεγαλύτερη από την ικανότητα, 601 00:41:40,580 --> 00:41:44,140 τότε θα πρέπει να αυξήσουν την ικανότητα του ρυθμιστικού μας. 602 00:41:44,140 --> 00:41:47,780 Έτσι, εδώ είμαστε διπλασιάζοντας το μέγεθος της προσωρινής μνήμης μας. 603 00:41:47,780 --> 00:41:51,840 Και αυτό συνεχίζει να πηγαίνει? Εισάγουμε το χαρακτήρα σε ρυθμιστικό μας 604 00:41:51,840 --> 00:41:56,220 μέχρι να λάβουμε μια νέα γραμμή ή στο τέλος του αρχείου ή οτιδήποτε άλλο, 605 00:41:56,220 --> 00:41:59,380 στην οποία περίπτωση, τελειώσαμε με κορδόνι και στη συνέχεια το πραγματικό GetString 606 00:41:59,380 --> 00:42:05,120 συρρικνώνει τη μνήμη, όπως και αν έχει χορηγηθεί πάρα πολύ μνήμη θα πάει πίσω και να συρρικνωθεί λίγο. 607 00:42:05,120 --> 00:42:08,830 Γι 'αυτό και δεν αποδεικνύουν ότι, αλλά η βασική ιδέα είναι 608 00:42:08,830 --> 00:42:11,960 πρέπει να διαβαστεί σε ένα μόνο χαρακτήρα σε μια στιγμή. 609 00:42:11,960 --> 00:42:17,140 Δεν μπορούμε έτσι απλά να διαβάσετε σε ένα όλο θέμα με τη μία, 610 00:42:17,140 --> 00:42:19,550 επειδή ρυθμιστικό τους είναι μόνο από ένα ορισμένο μέγεθος. 611 00:42:19,550 --> 00:42:26,590 Έτσι, αν το string που προσπαθεί να εισαγάγει σε buffer είναι πολύ μεγάλο, τότε θα ξεχειλίσει. 612 00:42:26,590 --> 00:42:28,940 Έτσι, εδώ έχουμε εμποδίσει το μόνο ανάγνωση σε ένα ενιαίο χαρακτήρα 613 00:42:28,940 --> 00:42:33,750 σε έναν χρόνο και αυξάνεται κάθε φορά που το χρειάζεστε. 614 00:42:33,750 --> 00:42:40,270 Έτσι getInt και οι άλλες λειτουργίες της βιβλιοθήκης CS50 τείνουν να χρησιμοποιούν GetString 615 00:42:40,270 --> 00:42:42,310 στις εφαρμογές τους. 616 00:42:42,310 --> 00:42:45,370 Γι 'αυτό και τόνισε τα σημαντικά πράγματα εδώ. 617 00:42:45,370 --> 00:42:49,460 Καλεί GetString να πάρετε ένα string. 618 00:42:49,460 --> 00:42:51,710 Αν GetString απέτυχε να επιστρέψει μνήμη, 619 00:42:51,710 --> 00:42:54,270 να θυμάστε ότι GetString mallocs κάτι, έτσι ώστε κάθε φορά που θα καλέσετε GetString 620 00:42:54,270 --> 00:42:57,820 δεν θα πρέπει να (ακατάληπτο) δωρεάν αυτό το αλφαριθμητικό που έχεις. 621 00:42:57,820 --> 00:43:02,870 Τόσο εδώ, αν δεν malloc κάτι, επιστρέφουμε INT_MAX ως απλά μια σημαία που, 622 00:43:02,870 --> 00:43:05,650 hey, δεν ήταν πραγματικά σε θέση να πάρετε έναν ακέραιο. 623 00:43:05,650 --> 00:43:10,830 Θα πρέπει να αγνοήσουμε ό, τι έχω επιστρέψει σε εσάς, ή 624 00:43:10,830 --> 00:43:15,540 δεν θα πρέπει να θεωρήσει ότι πρόκειται για ένα έγκυρο εισόδου. 625 00:43:15,540 --> 00:43:21,360 Τέλος, αν υποτεθεί ότι τα κατάφερε, χρησιμοποιούμε sscanf με το εν λόγω ειδικό σημαία, 626 00:43:21,360 --> 00:43:23,820 πράγμα που σημαίνει, πρώτα ταιριάζει έναν ακέραιο, 627 00:43:23,820 --> 00:43:26,770 στη συνέχεια να ταιριάζουν χαρακτήρες μετά την ακέραιος. 628 00:43:26,770 --> 00:43:29,070 Έτσι παρατηρήσετε θέλουμε να ισούται με 1. 629 00:43:29,070 --> 00:43:32,940 Έτσι sscanf αποδόσεις πόσα παιχνίδια, αν γίνει με επιτυχία; 630 00:43:32,940 --> 00:43:37,010 Θα επιστρέψει 1 αν συνδυάζεται με επιτυχία έναν ακέραιο, 631 00:43:37,010 --> 00:43:40,890 θα επιστρέψει 0 αν δεν ταιριάζει με έναν ακέραιο, και θα επιστρέψει 2 632 00:43:40,890 --> 00:43:45,920 αν συνδυάζεται ένας ακέραιος που ακολουθείται από κάποιο χαρακτήρα. 633 00:43:45,920 --> 00:43:49,780 Έτσι θα παρατηρήσετε επαναλάβετε αν ταιριάζει με τίποτα, αλλά 1. 634 00:43:49,780 --> 00:43:55,230 Έτσι, αν μπήκαμε 1, 2, 3, C, ή 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 τότε 1, 2, 3 θα πάρει αποθηκεύονται στο ακέραιο, 636 00:43:57,400 --> 00:43:59,620 X θα πάρει αποθηκεύονται στο χαρακτήρα, 637 00:43:59,620 --> 00:44:06,410 sscanf θα επιστρέψει 2, και θα επαναλάβετε, γιατί θέλουμε μόνο έναν ακέραιο. 638 00:44:06,410 --> 00:44:09,810 >> Γρήγορα φυσά μέσω HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 HyperText Markup Language είναι η δομή και τη σημασιολογία του web. 640 00:44:15,340 --> 00:44:19,960 Εδώ είναι το παράδειγμα από διάλεξη όπου έχουμε HTML tags. 641 00:44:19,960 --> 00:44:22,110 Έχουμε ετικέτες κεφάλι, ετικέτες σώματος, 642 00:44:22,110 --> 00:44:27,770 έχουμε παραδείγματα κενές ετικέτες όπου στην πραγματικότητα δεν έχουν μια αρχή και σε tag κλεισίματος, 643 00:44:27,770 --> 00:44:30,820 έχουμε μόνο σύνδεση και την εικόνα. 644 00:44:30,820 --> 00:44:38,480 Δεν υπάρχει ετικέτα εικόνας κλεισίματος? Υπάρχει μόνο μια ενιαία ετικέτα που θα επιτυγχάνει πάντα η ετικέτα πρέπει να κάνει. 645 00:44:38,480 --> 00:44:41,950 Ο σύνδεσμος είναι ένα παράδειγμα? Θα δούμε πώς θα συνδεθούν με CSS, 646 00:44:41,950 --> 00:44:45,910 το σενάριο είναι ένα παράδειγμα του πώς θα συνδέσετε σε μια εξωτερική JavaScript. 647 00:44:45,910 --> 00:44:53,100 Είναι αρκετά απλό, και να θυμάστε, HTML δεν είναι μια γλώσσα προγραμματισμού. 648 00:44:53,100 --> 00:44:58,250 Εδώ, θυμάστε πώς θα ορίσετε μια φόρμα ή τουλάχιστον ό, τι αυτό θα κάνουμε; 649 00:44:58,250 --> 00:45:01,740 Μια τέτοια μορφή έχει μια δράση και μια μέθοδο. 650 00:45:01,740 --> 00:45:06,210 Οι μέθοδοι που θα δείτε μόνο ποτέ είναι GET και POST. 651 00:45:06,210 --> 00:45:09,040 Έτσι GET είναι η έκδοση, όπου το πράγμα παίρνει θέσει στη διεύθυνση URL. 652 00:45:09,040 --> 00:45:11,680 POST είναι όταν δεν έχει τεθεί στη διεύθυνση URL. 653 00:45:11,680 --> 00:45:18,520 Αντ 'αυτού, όλα τα δεδομένα από τη φόρμα εισάγεται πιο κρυφά στην αίτηση HTTP. 654 00:45:18,520 --> 00:45:22,390 Μέχρι εδώ, η δράση καθορίζει όταν η αίτηση HTTP πηγαίνει. 655 00:45:22,390 --> 00:45:27,490 Όταν πρόκειται είναι google.com / search. 656 00:45:27,490 --> 00:45:32,890 Μέθοδος. Θυμηθείτε τις διαφορές μεταξύ GET και POST, 657 00:45:32,890 --> 00:45:37,200 και, απλώς να πω ως παράδειγμα, αν θέλετε να προσθέσετε κάτι. 658 00:45:37,200 --> 00:45:40,660 Ποτέ δεν θα είναι σε θέση να σελιδοδείκτη μια διεύθυνση URL POST 659 00:45:40,660 --> 00:45:44,970 επειδή τα δεδομένα δεν περιλαμβάνεται στη διεύθυνση URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, τώρα, είναι το πρωτόκολλο μεταφοράς υπερκειμένου. 661 00:45:49,790 --> 00:45:54,080 Η το Hypertext Transfer Protocol, θα περίμενε κανείς να μεταφέρει 662 00:45:54,080 --> 00:45:57,710 HyperText Markup Language, και το κάνει. 663 00:45:57,710 --> 00:46:00,170 Αλλά μεταφέρει επίσης τις εικόνες μπορείτε να βρείτε στο διαδίκτυο, 664 00:46:00,170 --> 00:46:05,400 τυχόν λήψεις σας κάνει να ξεκινήσει ως ένα αίτημα HTTP. 665 00:46:05,400 --> 00:46:10,350 Έτσι HTTP είναι μόνο η γλώσσα του World Wide Web. 666 00:46:10,350 --> 00:46:15,610 Και εδώ θα πρέπει να αναγνωρίσει αυτό το είδος της αίτησης HTTP. 667 00:46:15,610 --> 00:46:19,300 Εδώ HTTP/1.1 από την πλευρά απλά λέει ότι είναι η έκδοση 668 00:46:19,300 --> 00:46:21,570 του πρωτοκόλλου είμαι με τη χρήση. 669 00:46:21,570 --> 00:46:25,770 Είναι λίγο πολύ πάντα θα είναι HTTP/1.1, όπως θα το δείτε. 670 00:46:25,770 --> 00:46:30,110 Στη συνέχεια, θα δούμε ότι αυτό ήταν GET, η εναλλακτική λύση είναι POST, που μπορείτε να δείτε. 671 00:46:30,110 --> 00:46:40,790 Και η διεύθυνση URL που προσπαθούσα να επισκεφθείτε ήταν www.google.com/search?q = μπλα, μπλα, μπλα. 672 00:46:40,790 --> 00:46:44,240 Έτσι, να θυμάστε ότι αυτό, το q ερωτηματικό = μπλα μπλα μπλα, 673 00:46:44,240 --> 00:46:49,040 είναι το είδος της ουσίας που υποβάλλεται από μια φόρμα. 674 00:46:49,040 --> 00:46:51,830 Η απάντηση θα μπορούσε να επιστρέψει σε μένα, θα δούμε κάτι σαν αυτό. 675 00:46:51,830 --> 00:46:54,050 Ξανά, ξεκινώντας με το πρωτόκολλο, η οποία πρόκειται να είναι ότι, 676 00:46:54,050 --> 00:46:59,190 ακολουθούμενο από τον κωδικό κατάστασης. Εδώ είναι 200 ​​OK. 677 00:46:59,190 --> 00:47:05,060 Και τέλος, η ιστοσελίδα που έχω πραγματικά ζητήσει θα ακολουθήσει. 678 00:47:05,060 --> 00:47:08,210 Η πιθανή κωδικός κατάστασης μπορείτε να δείτε, και θα πρέπει να γνωρίζετε αρκετά από αυτά. 679 00:47:08,210 --> 00:47:12,770 200 OK πιθανότατα έχετε δει πριν. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 Not Found, Σφάλμα 500 Internal Server 681 00:47:17,830 --> 00:47:22,140 είναι συνήθως, αν πάτε σε μια ιστοσελίδα και κάτι σπασμένα ή διακόπτεται η λειτουργία PHP κώδικα τους, 682 00:47:22,140 --> 00:47:24,930 λαμβάνοντας υπόψη ότι στη συσκευή που έχουμε τόσο μεγάλο πορτοκαλί κουτί 683 00:47:24,930 --> 00:47:27,830 που έρχεται και λέει, όπως, κάτι δεν πάει καλά, αυτός ο κώδικας δεν λειτουργεί 684 00:47:27,830 --> 00:47:30,380 ή αυτής της συνάρτησης κακό. 685 00:47:30,380 --> 00:47:33,230 Συνήθως ιστοσελίδες δεν θέλουν να γνωρίζουν ποιες λειτουργίες θα είναι πραγματικά κακό, 686 00:47:33,230 --> 00:47:37,880 έτσι ώστε αντί να σας δώσω μόνο 500 Εσωτερικό Λάθη Server. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP είναι 1 στρώμα κάτω από το HTTP. 688 00:47:43,050 --> 00:47:47,550 Να θυμάστε ότι δεν υπάρχει στο Διαδίκτυο έξω από το World Wide Web. 689 00:47:47,550 --> 00:47:52,270 Όπως και αν μπορείτε να παίξετε ένα online παιχνίδι που δεν περνούν HTTP, 690 00:47:52,270 --> 00:47:55,740 πρόκειται μέσα από μια διαφορετική - είναι ακόμα χρησιμοποιούν το Διαδίκτυο, 691 00:47:55,740 --> 00:47:58,900 αλλά δεν χρησιμοποιούν το πρωτόκολλο HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP είναι ένα μόνο παράδειγμα του πρωτοκόλλου χτισμένο σε TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP κυριολεκτικά σημαίνει Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Κάθε υπολογιστής έχει μια διεύθυνση IP? Είναι αυτά τα 4-ψήφιο πράγματα 695 00:48:11,500 --> 00:48:16,510 όπως 192.168.2.1, ή οτιδήποτε άλλο? που τείνει να είναι ένα τοπικό μία. 696 00:48:16,510 --> 00:48:23,390 Αλλά αυτό είναι το πρότυπο μιας διεύθυνσης IP. 697 00:48:23,390 --> 00:48:29,060 Έτσι, το DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 αυτό είναι που μεταφράζει τα πράγματα όπως google.com σε μια πραγματική διεύθυνση IP. 699 00:48:33,410 --> 00:48:37,700 Έτσι, αν πληκτρολογήσετε ότι η διεύθυνση IP σε μια διεύθυνση URL, 700 00:48:37,700 --> 00:48:40,850 που θα σας φέρει στο Google, αλλά έχετε την τάση να μην θυμόμαστε αυτά τα πράγματα. 701 00:48:40,850 --> 00:48:45,470 Έχετε την τάση να θυμόμαστε google.com αντ 'αυτού. 702 00:48:45,470 --> 00:48:51,560 Το τελευταίο πράγμα που έχουμε είναι τα λιμάνια, όπου αυτό είναι το μέρος του TCP IP. 703 00:48:51,560 --> 00:48:54,880 TCP κάνει περισσότερα. Σκεφτείτε, όπως, έχετε web browser σας λειτουργία. 704 00:48:54,880 --> 00:48:58,670 Ίσως έχετε κάποια εφαρμογή που τρέχει email? 705 00:48:58,670 --> 00:49:02,150 ίσως έχετε κάποιο άλλο πρόγραμμα που χρησιμοποιεί τη λειτουργία του Διαδικτύου. 706 00:49:02,150 --> 00:49:05,090 Όλοι πρέπει να έχουν πρόσβαση στο Διαδίκτυο, 707 00:49:05,090 --> 00:49:08,100 αλλά ο υπολογιστής σας έχει μόνο 1 κάρτα WiFi ή οτιδήποτε άλλο. 708 00:49:08,100 --> 00:49:10,780 Έτσι, τα λιμάνια είναι ο τρόπος που είμαστε σε θέση να χωρίσουν 709 00:49:10,780 --> 00:49:13,550 πώς αυτές οι εφαρμογές είναι σε θέση να χρησιμοποιούν το Διαδίκτυο. 710 00:49:13,550 --> 00:49:17,230 Κάθε αίτηση παίρνει 1 συγκεκριμένη θύρα που μπορεί να ακούσετε για, 711 00:49:17,230 --> 00:49:19,670 και από προεπιλογή, HTTP χρησιμοποιεί τη θύρα 80. 712 00:49:19,670 --> 00:49:22,410 Ορισμένες υπηρεσίες ηλεκτρονικού ταχυδρομείου χρησιμοποιούν 25. 713 00:49:22,410 --> 00:49:24,490 Οι χαμηλές αριθμημένα αυτά τείνουν να διατηρούνται. 714 00:49:24,490 --> 00:49:29,270 Είστε συνήθως σε θέση να πάρει υψηλότερη αρίθμηση αυτά για τον εαυτό σας. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheets. 716 00:49:32,010 --> 00:49:36,030 Ιστοσελίδες Εμείς στυλ με CSS, όχι με HTML. 717 00:49:36,030 --> 00:49:38,440 Υπάρχουν 3 μέρη που μπορείτε να βάλετε CSS σας. 718 00:49:38,440 --> 00:49:46,300 Μπορεί να είναι inline, μεταξύ ετικέτες στυλ, ή σε ένα εντελώς ξεχωριστό αρχείο και στη συνέχεια συνδέονται μέσα 719 00:49:46,300 --> 00:49:48,470 Και εδώ είναι μόνο ένα παράδειγμα του CSS. 720 00:49:48,470 --> 00:49:50,450 Θα πρέπει να αναγνωρίσουμε αυτό το μοτίβο, 721 00:49:50,450 --> 00:49:54,310 όπου το πρώτο παράδειγμα είναι ότι πλέον έχουμε να ταιριάζουν με την ετικέτα του σώματος, 722 00:49:54,310 --> 00:49:56,680 και εδώ είμαστε κεντράρισμα της ετικέτας του σώματος. 723 00:49:56,680 --> 00:50:00,420 Το δεύτερο παράδειγμα, που ταιριάζουν με το θέμα 724 00:50:00,420 --> 00:50:04,740 με ID υποσέλιδο, και είμαστε σε εφαρμογή ορισμένα στυλ για αυτό. 725 00:50:04,740 --> 00:50:07,310 Παρατηρήστε ότι ID footer κείμενο ευθυγραμμίζεται προς τα αριστερά, 726 00:50:07,310 --> 00:50:09,840 ενώ το σώμα κειμένου ευθυγραμμίζεται κέντρο. 727 00:50:09,840 --> 00:50:13,180 Τελικοί είναι μέσα στο σώμα. 728 00:50:13,180 --> 00:50:16,470 Θα Αντίθετα, text-align αριστερά, ακόμα και αν το σώμα λέει κέντρο text-align. 729 00:50:16,470 --> 00:50:18,880 Αυτό είναι όλο το μέρος υπερχείλιση του. 730 00:50:18,880 --> 00:50:22,110 Μπορείτε να έχετε - μπορείτε να καθορίσετε τα στυλ για το σώμα, 731 00:50:22,110 --> 00:50:25,320 και τότε τα πράγματα στο σώμα σας να καθορίσετε πιο συγκεκριμένες μορφές, 732 00:50:25,320 --> 00:50:28,160 και τα πράγματα λειτουργούν όπως θα περιμένατε. 733 00:50:28,160 --> 00:50:34,420 Πιο συγκεκριμένα προσδιοριστικά CSS υπερισχύει. 734 00:50:34,420 --> 00:50:46,140 Νομίζω ότι είναι. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Γεια σε όλους. Αν θα μπορούσα να πάρω μόνο την προσοχή σας. 736 00:50:49,260 --> 00:50:53,990 Είμαι Ali και είμαι πρόκειται να πάει μέσω της PHP και SQL πολύ γρήγορα. 737 00:50:53,990 --> 00:51:00,310 Έτσι, μπορούμε να αρχίσουμε. PHP είναι μικρή για PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 Και όπως όλοι πρέπει να γνωρίζουν, είναι ένα server-side scripting γλώσσα, 739 00:51:03,730 --> 00:51:06,800 και το χρησιμοποιούμε για το πίσω άκρο των δικτυακών τόπων, 740 00:51:06,800 --> 00:51:12,540 και πώς το κάνει πολύ τους υπολογισμούς, το τμήμα πίσω από τα παρασκήνια. 741 00:51:12,540 --> 00:51:17,510 Σύνταξη. Δεν είναι όπως C, τι έκπληξη. 742 00:51:17,510 --> 00:51:22,060 Πρέπει πάντα να ξεκινήσω με την, αν μπορείτε να δείτε, το - δεν μπορώ να προχωρήσουμε. 743 00:51:22,060 --> 00:51:31,340 Μπορείτε να δείτε θα πρέπει να έχετε τα νέα είδη τιράντες και, στη συνέχεια, θα πρέπει να έχετε επίσης την php?. 744 00:51:31,340 --> 00:51:35,780 Αυτό είναι πάντα το πώς θα πρέπει να πλαισιώσει PHP κειμένου σας, ο κώδικας της PHP. 745 00:51:35,780 --> 00:51:39,180 Έτσι, δεν μπορεί απλώς να είναι όπως C, όπου μπορείτε να το είδος του να θέσει σε πρώτη. 746 00:51:39,180 --> 00:51:42,290 Θα πρέπει να το περιβάλλουν πάντα. 747 00:51:42,290 --> 00:51:47,610 Και τώρα, η κύρια σύνταξη είναι ότι όλες οι μεταβλητές πρέπει να ξεκινήσει με το χαρακτήρα $. 748 00:51:47,610 --> 00:51:49,490 Θα πρέπει να το κάνετε όταν τα ορισμό? Θα πρέπει να το κάνουμε 749 00:51:49,490 --> 00:51:51,860 όταν αναφέρεται σε αυτά αργότερα. 750 00:51:51,860 --> 00:51:56,510 Θα πρέπει να έχετε πάντα αυτό το $. Είναι ο καλύτερός σας φίλος, λίγο πολύ. 751 00:51:56,510 --> 00:52:01,690 Μπορείτε να το κάνετε όχι - σε αντίθεση με C, δεν χρειάζεται να βάλει το είδος της μεταβλητής τύπου είναι. 752 00:52:01,690 --> 00:52:04,940 Έτσι, ενώ χρειάζεστε το $, δεν χρειάζεται να θέσει, όπως, 753 00:52:04,940 --> 00:52:09,470 int x ή y εγχόρδων, και τα λοιπά, και τα λοιπά. 754 00:52:09,470 --> 00:52:11,490 Έτσι, μια μικρή διαφορά. 755 00:52:11,490 --> 00:52:15,590 Ως αποτέλεσμα αυτού, αυτό σημαίνει ότι η PHP είναι ένα ασθενώς τύπου. 756 00:52:15,590 --> 00:52:19,310 PHP είναι μια γλώσσα ασθενώς τύπου, και έχει ασθενώς πληκτρολογήσει μεταβλητές. 757 00:52:19,310 --> 00:52:24,020 Με άλλα λόγια, αυτό σημαίνει ότι μπορείτε να κάνετε εναλλαγή μεταξύ των διαφόρων ειδών των τύπων μεταβλητών. 758 00:52:24,020 --> 00:52:27,230 Μπορείτε να αποθηκεύσετε τον αριθμό σας 1 ως int, 759 00:52:27,230 --> 00:52:29,650 μπορείτε να το αποθηκεύσετε ως ένα string, και μπορείτε να το αποθηκεύσετε ως float, 760 00:52:29,650 --> 00:52:33,550 και όλα θα είναι ο αριθμός 1. 761 00:52:33,550 --> 00:52:36,080 Ακόμα κι αν είστε αποθήκευση σε διάφορες μορφές, 762 00:52:36,080 --> 00:52:39,120 είναι ακόμα - οι τύποι μεταβλητών εξακολουθούν να κατέχουν στο τέλος. 763 00:52:39,120 --> 00:52:41,540 Έτσι, αν δείτε εδώ, αν θυμάστε από το chipset 7, 764 00:52:41,540 --> 00:52:43,500 πολλοί από εσάς ίσως να είχε προβλήματα με αυτό. 765 00:52:43,500 --> 00:52:47,280 Δύο σύμβολα ισότητας, 3 ίσες σημάδια, 4 ίσα σημάδια. 766 00:52:47,280 --> 00:52:49,990 Εντάξει, υπάρχουν 4 σύμβολα ισότητας, αλλά υπάρχουν 2 και 3. 767 00:52:49,990 --> 00:52:53,320 Μπορείτε να χρησιμοποιήσετε 2 ίσες σημάδια για να ελέγξετε τις τιμές. 768 00:52:53,320 --> 00:52:55,830 Μπορεί να ελέγξει σε όλους τους τύπους. 769 00:52:55,830 --> 00:52:58,770 Έτσι, εάν μπορείτε να δείτε στο πρώτο παράδειγμα, 770 00:52:58,770 --> 00:53:02,210 Έχω num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Έτσι int σας και κορδόνι σας είναι τεχνικώς, 1, 772 00:53:06,710 --> 00:53:10,790 αλλά είναι διαφορετικών τύπων. Αλλά για το διπλό ίσον, αυτό θα εξακολουθεί να περάσει. 773 00:53:10,790 --> 00:53:15,510 Ωστόσο, για τα τριπλά ίσων, ελέγχει αξίας καθώς και τα διάφορα είδη. 774 00:53:15,510 --> 00:53:18,760 Αυτό σημαίνει ότι δεν πρόκειται να περάσει στην δεύτερη αυτή υπόθεση εδώ, 775 00:53:18,760 --> 00:53:22,350 Όπου και αν χρησιμοποιείτε 3 ίσες σημάδια αντ 'αυτού. 776 00:53:22,350 --> 00:53:26,590 Έτσι, αυτό είναι μια σημαντική διαφορά που θα πρέπει όλοι να έχουν δείξει τώρα. 777 00:53:26,590 --> 00:53:31,570 >> String συνένωση είναι ένα άλλο ισχυρό πράγμα που μπορείτε να χρησιμοποιήσετε σε PHP. 778 00:53:31,570 --> 00:53:34,080 Είναι βασικά ακριβώς αυτό το εύχρηστο συμβολισμό με την τελεία, 779 00:53:34,080 --> 00:53:36,230 και αυτό είναι το πώς μπορείτε να συνδέσετε χορδές μαζί. 780 00:53:36,230 --> 00:53:40,800 Έτσι, εάν έχετε γάτα και έχετε το σκυλί και θέλετε να βάλετε τις 2 σειρές από κοινού, 781 00:53:40,800 --> 00:53:44,080 μπορείτε να χρησιμοποιήσετε την περίοδο, και αυτό είναι το είδος του πώς λειτουργεί. 782 00:53:44,080 --> 00:53:46,660 Μπορείτε επίσης να τα τοποθετήσετε δίπλα στο άλλο, 783 00:53:46,660 --> 00:53:49,030 όπως μπορείτε να δείτε εδώ στο κάτω μέρος παράδειγμα, 784 00:53:49,030 --> 00:53:51,610 όπου έχω echo σειρά 1, χώρου συμβολοσειράς 2. 785 00:53:51,610 --> 00:53:56,930 PHP θα ξέρει για να τους αντικαταστήσουν ως τέτοια. 786 00:53:56,930 --> 00:53:59,780 Πίνακες. Τώρα, σε PHP, υπάρχουν 2 διαφορετικά είδη των συστοιχιών. 787 00:53:59,780 --> 00:54:03,180 Μπορείτε να έχετε τακτική συστοιχίες, και μπορείτε επίσης να έχετε συνειρμική συστοιχίες, 788 00:54:03,180 --> 00:54:06,040 και θα πάμε για να πάει μέσα από αυτά τώρα. 789 00:54:06,040 --> 00:54:08,280 Η τακτική συστοιχίες είναι ακριβώς αυτό στο C, 790 00:54:08,280 --> 00:54:11,240 και έτσι έχετε δείκτες που είναι αριθμημένες. 791 00:54:11,240 --> 00:54:13,160 Αυτή τη στιγμή είμαστε ακριβώς πρόκειται να δημιουργήσει και να θέσει ένα - 792 00:54:13,160 --> 00:54:15,500 έτσι αυτό είναι πώς θα δημιουργήσουμε έναν άδειο πίνακα, στη συνέχεια, θα πάμε να 793 00:54:15,500 --> 00:54:17,310 τεθούν σε αριθμό δείκτη 0. 794 00:54:17,310 --> 00:54:19,200 Εμείς πάμε για να βάλετε τον αριθμό 6, η τιμή 6. 795 00:54:19,200 --> 00:54:21,500 Μπορείτε να το δείτε στο κάτω μέρος εδώ. 796 00:54:21,500 --> 00:54:24,240 Where's - σε αριθμό 1 θα πάμε να θέσει τον αριθμό αξίας 4, 797 00:54:24,240 --> 00:54:26,720 και έτσι μπορείτε να δείτε υπάρχει ένα 6, υπάρχει ένα 4, 798 00:54:26,720 --> 00:54:29,160 και στη συνέχεια, όπως είμαστε εκτύπωση πράγματα, 799 00:54:29,160 --> 00:54:33,550 όταν προσπαθούμε και να εκτυπώσετε την τιμή που είναι αποθηκευμένη στον αριθμό δείκτη 0, 800 00:54:33,550 --> 00:54:36,900 Στη συνέχεια θα δούμε την τιμή 6 να εκτυπωθεί. Cool; 801 00:54:36,900 --> 00:54:40,160 Έτσι ώστε να είναι τακτική συστοιχίες για σας. 802 00:54:40,160 --> 00:54:42,750 Ένας άλλος τρόπος που μπορείτε επίσης να προσθέσετε τα πράγματα στην τακτική συστοιχίες τώρα 803 00:54:42,750 --> 00:54:44,780 είναι ότι μπορείτε να τους προσαρτήσετε μόνο στο τέλος. 804 00:54:44,780 --> 00:54:47,240 Αυτό σημαίνει ότι δεν χρειάζεται να καθορίσετε το συγκεκριμένο δείκτη. 805 00:54:47,240 --> 00:54:51,000 Μπορείτε να δείτε τον αριθμό, και στη συνέχεια, στις αγκύλες δεν υπάρχει δείκτης που ορίζεται. 806 00:54:51,000 --> 00:54:56,270 Και θα ξέρετε - PHP θα ξέρει για να το προσθέσετε ακριβώς στο τέλος της λίστας, το επόμενο ελεύθερο σημείο. 807 00:54:56,270 --> 00:54:59,190 Έτσι, μπορείτε να δείτε το 1 εκεί σε εκείνο το σημείο 0, 808 00:54:59,190 --> 00:55:02,690 το 2 πήγε εκεί στην πρώτη θέση. 809 00:55:02,690 --> 00:55:04,690 Το 3 πηγαίνει - προστίθεται εκεί. 810 00:55:04,690 --> 00:55:06,720 Έτσι, αυτό το είδος της νόημα. Είστε ακριβώς συνεχώς προσθέτοντας ότι, 811 00:55:06,720 --> 00:55:09,360 και στη συνέχεια, όταν κάνουμε τις ίδιες το δείκτη του αριθμού 1, 812 00:55:09,360 --> 00:55:13,080 θα εκτυπώνει την τιμή 2. 813 00:55:13,080 --> 00:55:16,800 >> Στη συνέχεια έχουμε πίνακες που είναι συνειρμική συστοιχίες. 814 00:55:16,800 --> 00:55:19,370 Associative arrays, αντί να έχουν αριθμητικές τιμές, 815 00:55:19,370 --> 00:55:23,630 αυτό που κάνουν είναι, έχουν δείκτες που είναι από κορδόνι. 816 00:55:23,630 --> 00:55:25,670 Μπορείτε να δείτε, αντί - Πήρα απαλλαγούμε από όλους αυτούς τους δείκτες αριθμό, 817 00:55:25,670 --> 00:55:32,140 και τώρα είναι key1, key2, key3, και είναι σε διπλά εισαγωγικά για να δηλώσει ότι είναι όλες οι χορδές. 818 00:55:32,140 --> 00:55:34,470 Έτσι, μπορούμε να έχουμε ένα παράδειγμα για αυτό. 819 00:55:34,470 --> 00:55:38,790 Το παράδειγμα αυτό είναι ότι έχουμε την tf, και αυτό είναι το όνομα του ευρετηρίου. 820 00:55:38,790 --> 00:55:42,030 Εμείς πάμε για να βάλει "Ali", όπως το όνομα, στο δείκτη, τις θερμίδες που καταναλώνονται, 821 00:55:42,030 --> 00:55:47,640 μπορούμε να βάλουμε ένα int αυτή τη φορά αντί για ένα string, 822 00:55:47,640 --> 00:55:52,240 και στη συνέχεια στους ομοίους του δείκτη, μπορούμε να βάλουμε μια ολόκληρη σειρά μέσα από αυτό. 823 00:55:52,240 --> 00:55:55,490 Έτσι, αυτό είναι το είδος της - είναι μια παρόμοια ιδέα για το πώς θα έπρεπε 824 00:55:55,490 --> 00:55:58,930 δείκτες με αριθμούς, αλλά τώρα μπορούμε να αλλάξουμε τους δείκτες γύρω 825 00:55:58,930 --> 00:56:03,890 να τους έχουν ως χορδές αντ 'αυτού. 826 00:56:03,890 --> 00:56:06,070 Μπορείτε επίσης να το κάνετε αυτό, εκτός από απλά να το κάνει μεμονωμένα, 827 00:56:06,070 --> 00:56:09,400 μπορείτε να κάνετε όλα σε ένα κομμάτι. Έτσι μπορείτε να δείτε ότι tf μέρους αυτής της διάταξης, 828 00:56:09,400 --> 00:56:13,350 και στη συνέχεια όλα αυτά που σε μια γιγάντια πλατεία σύνολο βραχίονα. 829 00:56:13,350 --> 00:56:15,220 Έτσι ώστε να επιταχυνθούν τα πράγματα. 830 00:56:15,220 --> 00:56:19,730 Είναι κάτι περισσότερο από ένα στυλιστικό επιλογή από όχι. 831 00:56:19,730 --> 00:56:21,550 Έχουμε επίσης βρόχους. 832 00:56:21,550 --> 00:56:26,020 Στη C έχουμε βρόχους που λειτουργούν σαν αυτό. 833 00:56:26,020 --> 00:56:29,690 Είχαμε σειρά μας, και πήγαμε από το δείκτη 0 στο τέλος της λίστας, 834 00:56:29,690 --> 00:56:31,740 και θα το εκτυπώσετε όλα, έτσι δεν είναι; 835 00:56:31,740 --> 00:56:33,880 Εκτός από το πρόβλημα είναι, για συστοιχίες συνειρμική, 836 00:56:33,880 --> 00:56:36,610 δεν ξέρουμε κατ 'ανάγκη τους αριθμητικούς δείκτες 837 00:56:36,610 --> 00:56:39,610 γιατί τώρα έχουμε τα string ευρετήρια. 838 00:56:39,610 --> 00:56:44,800 Τώρα χρησιμοποιούμε βρόχους foreach, η οποία, και πάλι, θα χρησιμοποιείται ελπίζουμε σε 7 από το chipset. 839 00:56:44,800 --> 00:56:48,930 Βρόχους foreach θα γνωρίζουν ακριβώς κάθε μέρος της λίστας. 840 00:56:48,930 --> 00:56:52,450 Και δεν πρέπει να γνωρίζουμε ακριβώς την αριθμητική δείκτη που έχετε. 841 00:56:52,450 --> 00:56:56,490 Έτσι έχετε τη σύνταξη foreach, γι 'αυτό είναι foreach, βάζετε τον πίνακα. 842 00:56:56,490 --> 00:57:00,430 Έτσι σειρά μου ονομάζεται το chipset, και στη συνέχεια, όπως η λέξη, όπως, 843 00:57:00,430 --> 00:57:04,530 και στη συνέχεια βάζετε αυτό το τοπικό προσωρινή μεταβλητή που πρόκειται να χρησιμοποιήσετε 844 00:57:04,530 --> 00:57:10,690 μόνο για το συγκεκριμένο πράγμα που πρόκειται να κρατήσει το συγκεκριμένο - 845 00:57:10,690 --> 00:57:14,770 ένα παράδειγμα ή ένα τμήμα του πίνακα. 846 00:57:14,770 --> 00:57:18,350 Το chipset της αναμέτρησης θα κρατήσει 1, και τότε ίσως θα κρατήσει τον αριθμό 6, 847 00:57:18,350 --> 00:57:20,410 και στη συνέχεια θα κρατήσει τον αριθμό 2. 848 00:57:20,410 --> 00:57:26,630 Αλλά αυτό είναι εγγυημένη για να περάσει μέσα από κάθε τιμή που είναι στον πίνακα. 849 00:57:26,630 --> 00:57:30,530 Χρήσιμες λειτουργίες που πρέπει να ξέρετε σε PHP είναι το απαιτούν, 850 00:57:30,530 --> 00:57:35,880 έτσι ώστε να εξασφαλίζει ότι είστε συμπεριλαμβανομένων ορισμένων αρχείων, ηχώ, την έξοδο, άδειο. 851 00:57:35,880 --> 00:57:40,490 I Συστήνουμε ιδιαίτερα να δούμε το chipset 7 και να δούμε αυτές τις λειτουργίες. 852 00:57:40,490 --> 00:57:42,810 Ίσως πρέπει να γνωρίζουν εκείνοι, 853 00:57:42,810 --> 00:57:47,060 έτσι σίγουρα θα ξέρω τι, ακριβώς, αυτά είναι όλα τα κάνει. 854 00:57:47,060 --> 00:57:50,080 >> Και τώρα θα πάμε να περάσουν από το πεδίο εφαρμογής πολύ γρήγορα. 855 00:57:50,080 --> 00:57:53,490 Στο πεδίο εφαρμογής, η PHP είναι το είδος της μια funky πράγμα, σε αντίθεση με C, 856 00:57:53,490 --> 00:57:56,170 και έτσι είμαστε ακριβώς πρόκειται να περάσει μέσα από αυτό γρήγορα. 857 00:57:56,170 --> 00:57:58,930 Ας πούμε ότι ξεκινάμε σε αυτό το βέλος που έχουμε εκεί. 858 00:57:58,930 --> 00:58:02,900 Και θα πάμε να ξεκινήσει με $ i. Έτσι, η μεταβλητή «i» πρόκειται να είναι 0, 859 00:58:02,900 --> 00:58:06,730 και είμαστε ακριβώς πρόκειται να κρατήσει το εκτυπώσετε σε αυτό το μεγάλο άσπρο κουτί εκεί. 860 00:58:06,730 --> 00:58:09,220 Εμείς πάμε για να ξεκινήσει με i0, και στη συνέχεια θα πάμε να το επαναλάβω. 861 00:58:09,220 --> 00:58:12,670 Έτσι, υπάρχει το 0. 862 00:58:12,670 --> 00:58:15,210 Και μετά θα πάμε για να αυξήσετε το βρόχο for, 863 00:58:15,210 --> 00:58:17,810 και στη συνέχεια πρόκειται να είναι η αξία του 1. 864 00:58:17,810 --> 00:58:20,070 Ένα είναι μικρότερο από 3, γι 'αυτό πρόκειται να περάσει μέσα από αυτό για το βρόχο, 865 00:58:20,070 --> 00:58:23,230 και στη συνέχεια θα πάμε να το δούμε να εκτυπωθεί ξανά. 866 00:58:23,230 --> 00:58:25,520 Εμείς πάμε για να την αυξήσετε και πάλι στο 2, 867 00:58:25,520 --> 00:58:29,860 και 2 είναι μικρότερο από 3, έτσι θα περάσει ο βρόχος for, και αυτό θα εκτυπώσετε το 2. 868 00:58:29,860 --> 00:58:35,100 Στη συνέχεια, θα σημειώσετε ότι το 3 δεν είναι μικρότερο από 3, οπότε θα βγούμε από το βρόχο for. 869 00:58:35,100 --> 00:58:40,050 Έτσι τώρα έχουμε φθάσει, και στη συνέχεια θα πάμε για να πάει σε aFunction. 870 00:58:40,050 --> 00:58:45,010 Εντάξει. Έτσι, θα πρέπει να σημειωθεί ότι αυτή η μεταβλητή που έχουμε δημιουργήσει, 871 00:58:45,010 --> 00:58:48,270 το «i» μεταβλητή, δεν είναι τοπικά πεδία. 872 00:58:48,270 --> 00:58:50,280 Αυτό σημαίνει ότι δεν είναι το τοπικό έως το βρόχο, 873 00:58:50,280 --> 00:58:58,060 και ότι η μεταβλητή που εξακολουθούν να έχουν πρόσβαση και να αλλάξει στη συνέχεια, και θα εξακολουθεί να είναι αποτελεσματική. 874 00:58:58,060 --> 00:59:02,160 Έτσι, αν πάτε σε λειτουργία τώρα, θα δείτε ότι μπορούμε επίσης να χρησιμοποιήσετε το «i» μεταβλητή, 875 00:59:02,160 --> 00:59:05,320 και θα πάμε για να αυξήσετε 'i' + +. 876 00:59:05,320 --> 00:59:09,410 Θα πίστευε κανείς ότι, σε πρώτη φάση, με βάση C, ότι αυτό είναι ένα αντίγραφο του «i» μεταβλητή. 877 00:59:09,410 --> 00:59:12,830 Είναι ένα εντελώς διαφορετικό πράγμα, το οποίο είναι σωστό. 878 00:59:12,830 --> 00:59:16,560 Έτσι, όταν το εκτυπώσετε, θα πάμε για να εκτυπώσετε το «i» + +, η οποία πρόκειται να εκτυπώσετε ότι το 4, 879 00:59:16,560 --> 00:59:19,640 και στη συνέχεια θα πάμε να - συγγνώμη. 880 00:59:19,640 --> 00:59:22,030 Στη συνέχεια θα πάμε στο τέλος από αυτή τη λειτουργία, 881 00:59:22,030 --> 00:59:24,820 και θα πάμε να είναι όταν η βέλος είναι τώρα. 882 00:59:24,820 --> 00:59:29,190 Αυτό σημαίνει ότι, στη συνέχεια, ωστόσο, ακόμη και αν η συνάρτηση αλλάξει την τιμή του «i», 883 00:59:29,190 --> 00:59:32,620 δεν αλλάζει εκτός της συνάρτησης, 884 00:59:32,620 --> 00:59:35,060 επειδή η συνάρτηση έχει ένα ξεχωριστό πεδίο. 885 00:59:35,060 --> 00:59:38,960 Αυτό σημαίνει ότι όταν έχουμε echo 'i', δεν έχει αλλάξει στο πεδίο της λειτουργίας, 886 00:59:38,960 --> 00:59:43,660 και έτσι τότε θα πάμε να εκτυπώσετε και πάλι 3. 887 00:59:43,660 --> 00:59:47,520 Διαφορετικά τα πράγματα σχετικά με το πεδίο εφαρμογής σε σχέση με το PHP C. 888 00:59:47,520 --> 00:59:51,130 >> Τώρα σε PHP και HTML. 889 00:59:51,130 --> 00:59:53,510 PHP χρησιμοποιείται για να κάνει δυναμικές ιστοσελίδες. 890 00:59:53,510 --> 00:59:58,660 Είναι το είδος της κάνει τα πράγματα διαφορετικά. 891 00:59:58,660 --> 01:00:02,090 Έχουμε διαφορετικό από HTML. 892 01:00:02,090 --> 01:00:05,230 Με την HTML, έχουμε πάντα ακριβώς το ίδιο στατικό πράγμα, όπως το πώς Rob έδειξε, 893 01:00:05,230 --> 01:00:09,370 λαμβάνοντας υπόψη ότι η PHP, μπορείτε να αλλάξετε τα πράγματα με βάση το ποιος είναι ο χρήστης. 894 01:00:09,370 --> 01:00:11,830 Έτσι, αν έχω αυτό, έχω, "Έχετε συνδεθεί ως -" και, στη συνέχεια, το όνομα, 895 01:00:11,830 --> 01:00:14,420 και μπορώ να αλλάξω το όνομα. Έτσι, αυτή τη στιγμή το όνομα Ιωσήφ, 896 01:00:14,420 --> 01:00:18,880 και έχει το "για μένα", αλλά στη συνέχεια μπορεί επίσης να αλλάξει το όνομα για να έχουν Tommy. 897 01:00:18,880 --> 01:00:21,700 Και αυτό θα είναι ένα διαφορετικό πράγμα. 898 01:00:21,700 --> 01:00:23,840 Έτσι, τότε μπορούμε να αλλάξουμε διαφορετικά πράγματα γι 'αυτόν, 899 01:00:23,840 --> 01:00:27,070 και θα δείξει διαφορετικό περιεχόμενο με βάση το όνομα. 900 01:00:27,070 --> 01:00:31,430 Έτσι, η PHP μπορεί να αλλάξει το είδος του τι συμβαίνει στην ιστοσελίδα σας. 901 01:00:31,430 --> 01:00:33,540 Το ίδιο κι εδώ. Ακόμα, σημειώστε ότι έχουν διαφορετικό περιεχόμενο, 902 01:00:33,540 --> 01:00:38,870 ακόμα κι αν είναι τεχνικά συνεχίζει να έχει πρόσβαση το ίδιο ιστοσελίδα στην επιφάνεια. 903 01:00:38,870 --> 01:00:43,450 Παραγωγή HTML. Υπάρχουν 2 διαφορετικοί τρόποι που μπορείτε να το κάνετε αυτό. 904 01:00:43,450 --> 01:00:48,980 Έτσι θα πάμε μέσα από αυτό το δικαίωμα τώρα. Ο πρώτος τρόπος είναι, έχετε - Ναι, συγγνώμη. 905 01:00:48,980 --> 01:00:51,150 Έτσι, μόλις έχετε τακτικές σας για βρόχο σε PHP, 906 01:00:51,150 --> 01:00:56,270 και τότε θα αντηχούν σε PHP και θα επαναλάβω έξω HTML. 907 01:00:56,270 --> 01:00:58,720 Χρησιμοποιώντας αυτό που σας έδειξα Rob της HTML script 908 01:00:58,720 --> 01:01:04,030 και στη συνέχεια, χρησιμοποιώντας την PHP εκτύπωσης για να εκτυπώσετε μόνο από την ιστοσελίδα. 909 01:01:04,030 --> 01:01:09,520 Ο εναλλακτικός τρόπος είναι να το κάνουμε σαν να διαχωριστούν από την PHP και την HTML. 910 01:01:09,520 --> 01:01:11,940 Έτσι μπορείτε να έχετε μια σειρά από PHP που ξεκινά ο βρόχος for, 911 01:01:11,940 --> 01:01:16,020 τότε μπορείτε να έχετε τη γραμμή του HTML σε ένα ξεχωριστό πράγμα, 912 01:01:16,020 --> 01:01:19,700 και τότε θα καταλήξουμε το βρόχο, και πάλι, με την PHP. 913 01:01:19,700 --> 01:01:21,800 Έτσι είναι το είδος του να διαχωρισμό. 914 01:01:21,800 --> 01:01:24,020 Στην αριστερή πλευρά, μπορείτε να έχετε όλα τα - 915 01:01:24,020 --> 01:01:26,360 Είναι μόλις 1 κομμάτι της PHP. 916 01:01:26,360 --> 01:01:28,510 Στα δεξιά μπορείτε να δείτε ότι έχετε μια σειρά από PHP, 917 01:01:28,510 --> 01:01:32,540 έχετε μια σειρά από HTML, και έχετε και πάλι μια σειρά από PHP. 918 01:01:32,540 --> 01:01:36,870 Έτσι, διαχωρίζοντας σε αυτό που κάνουν. 919 01:01:36,870 --> 01:01:39,330 Και θα σημειώσετε ότι σε κάθε περίπτωση, για οποιοδήποτε από αυτά, 920 01:01:39,330 --> 01:01:41,980 εξακολουθούν να εκτυπώσετε την εικόνα, η εικόνα, η εικόνα, 921 01:01:41,980 --> 01:01:44,540 έτσι ώστε HTML εξακολουθεί να είναι τυπωμένο με τον ίδιο τρόπο. 922 01:01:44,540 --> 01:01:49,870 Και τότε θα δείτε ακόμα τα 3 εικόνες εμφανίζονται στην ιστοσελίδα σας. 923 01:01:49,870 --> 01:01:52,820 Έτσι είναι 2 διαφορετικούς τρόπους για να κάνει το ίδιο πράγμα. 924 01:01:52,820 --> 01:01:55,060 >> Τώρα έχουμε τις μορφές και τα αιτήματα. Όπως Rob σας έδειξα, 925 01:01:55,060 --> 01:01:59,400 υπάρχουν μορφές HTML, και εμείς θα αεράκι μόνο μέσα από αυτό. 926 01:01:59,400 --> 01:02:02,040 Έχετε μια δράση και έχετε μια μέθοδο, και η δράση σας 927 01:02:02,040 --> 01:02:04,350 ευγενικό εκ μέρους σας, όπου θα πάμε για να το στείλετε δείχνει, και η μέθοδος είναι κατά πόσον 928 01:02:04,350 --> 01:02:06,960 πρόκειται να είναι ένα GET ή POST. 929 01:02:06,960 --> 01:02:11,220 Και μια αίτηση GET, όπως δήλωσε ο Rob, σημαίνει ότι θα πάμε για να το θέσω σε μια μορφή 930 01:02:11,220 --> 01:02:15,760 και θα το δείτε ως μια διεύθυνση URL, ενώ μια αίτηση POST δεν θα δείτε σε μια διεύθυνση URL. 931 01:02:15,760 --> 01:02:17,840 Έτσι, μια μικρή διαφορά. 932 01:02:17,840 --> 01:02:19,950 Ωστόσο, ένα πράγμα που είναι ένα παρόμοιο πράγμα 933 01:02:19,950 --> 01:02:22,560 είναι ότι POST και GET είναι εξίσου ανασφαλής. 934 01:02:22,560 --> 01:02:26,430 Έτσι, μπορείτε να σκεφτείτε ότι μόνο και μόνο επειδή εσείς δεν το βλέπετε στο URL, 935 01:02:26,430 --> 01:02:28,790 αυτό σημαίνει ότι το POST είναι πιο ασφαλής, 936 01:02:28,790 --> 01:02:34,420 αλλά μπορείτε να το δείτε στα cookies στις πληροφορίες που σας στέλνουμε. 937 01:02:34,420 --> 01:02:38,260 Έτσι, δεν νομίζω ότι περίπου το ένα ή το άλλο. 938 01:02:38,260 --> 01:02:42,160 Ένα άλλο πράγμα που πρέπει να σημειωθεί είναι ότι έχετε επίσης το τμήμα μεταβλητές. 939 01:02:42,160 --> 01:02:45,850 Εσείς που χρησιμοποιούνται σε αυτό το chipset 7 για να πάρει πληροφορίες για το όνομα χρήστη σας. 940 01:02:45,850 --> 01:02:48,550 Αυτό που συνέβη ήταν ότι μπορείτε να χρησιμοποιήσετε αυτό το associative πίνακα, 941 01:02:48,550 --> 01:02:53,310 το $ _SESSION, και τότε θα είστε σε θέση να έχουν πρόσβαση σε διαφορετικά πράγματα 942 01:02:53,310 --> 01:02:57,720 και να αποθηκεύουν διαφορετικά πράγματα σε όλες τις σελίδες. 943 01:02:57,720 --> 01:03:00,750 Τελευταία >> πράγμα είναι ότι έχουμε SQL, Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 και αυτό είναι μια γλώσσα προγραμματισμού για τη διαχείριση των βάσεων δεδομένων. 945 01:03:04,360 --> 01:03:08,220 Τι, ακριβώς, είναι οι βάσεις δεδομένων; Είναι συλλογές πινάκων, 946 01:03:08,220 --> 01:03:10,630 και κάθε πίνακας μπορεί να έχει παρόμοια είδη αντικειμένων. 947 01:03:10,630 --> 01:03:14,990 Έτσι, είχαμε ένα τραπέζι των χρηστών όσον αφορά τη χρηματοδότηση από το chipset σας. 948 01:03:14,990 --> 01:03:20,610 Και γιατί είναι χρήσιμες; Επειδή είναι ένας τρόπος για την αποθήκευση πληροφοριών σε μόνιμη βάση. 949 01:03:20,610 --> 01:03:22,840 Είναι ένας τρόπος παρακολούθησης των πραγμάτων και τη διαχείριση των πραγμάτων 950 01:03:22,840 --> 01:03:25,890 και πραγματικά να δει σε διαφορετικές σελίδες και την τήρηση κομμάτι. 951 01:03:25,890 --> 01:03:29,930 Ότι, αν αποθηκεύετε ακριβώς εκείνη τη στιγμή ένα άμεσο 952 01:03:29,930 --> 01:03:33,720 και στη συνέχεια να το χρησιμοποιήσετε αργότερα, δεν θα είναι σε θέση να έχουν πρόσβαση σε κάτι που έχετε αποθηκεύσει. 953 01:03:33,720 --> 01:03:37,660 Έχουμε 4 σημαντικότερα πράγματα που χρησιμοποιούμε για τις εντολές SQL. 954 01:03:37,660 --> 01:03:40,190 Έχουμε select, insert, delete και update. 955 01:03:40,190 --> 01:03:42,880 Αυτά είναι πραγματικά σημαντικό για σας παιδιά να γνωρίζουν για το κουίζ σας. 956 01:03:42,880 --> 01:03:45,990 >> Θα μεταβείτε γρήγορα πάνω επιλέξτε αυτή τη στιγμή. 957 01:03:45,990 --> 01:03:48,540 Βασικά, εσείς την επιλογή γραμμών από μια βάση δεδομένων. 958 01:03:48,540 --> 01:03:52,400 Έτσι, εάν έχετε, ακριβώς εδώ - 959 01:03:52,400 --> 01:03:56,740 έχουμε αυτά τα 2 διαφορετικά πράγματα, και θέλουμε να επιλέξετε από τον πίνακα τάξεις 960 01:03:56,740 --> 01:04:01,480 όπου φοβερό - όπου το φοβερό στήλη η τιμή είναι 1. 961 01:04:01,480 --> 01:04:04,460 Έτσι, μπορείτε να δείτε εδώ, έχουμε αυτά τα 2 πράγματα από το όνομα της κλάσης, 962 01:04:04,460 --> 01:04:08,490 CS50 και Stat110, και έχουμε τα αναγνωριστικά κατηγορίας και το σύνθημα. 963 01:04:08,490 --> 01:04:13,150 Έτσι, θέλουμε να επιλέξετε όλες αυτές τις πληροφορίες. 964 01:04:13,150 --> 01:04:17,480 Στη συνέχεια, μπορείτε να δείτε εδώ ότι είναι το είδος του να πάρει από αυτό το φοβερό στήλης, 965 01:04:17,480 --> 01:04:25,170 όπου όλα τα πράγματα είναι 1, και στη συνέχεια να έχει την κλάση ID, το όνομα της κλάσης και το σύνθημα που μπορεί να ξεχωρίσω. 966 01:04:25,170 --> 01:04:28,100 Πώς ακριβώς το κάνεις αυτό στον κώδικα; Θα πρέπει να χρησιμοποιήσετε το PHP. 967 01:04:28,100 --> 01:04:33,830 Έτσι, αυτό είναι το είδος του τρόπου με PHP και SQL σχετίζονται μεταξύ τους. 968 01:04:33,830 --> 01:04:38,130 Τώρα έχουμε τον κωδικό μας, και θα πάμε να χρησιμοποιήσετε τη λειτουργία των ερωτημάτων μας 969 01:04:38,130 --> 01:04:41,370 όπως κάναμε στο 7 από το chipset, και θα πάμε να εκτελέσετε το ερώτημα SQL. 970 01:04:41,370 --> 01:04:43,870 Στη συνέχεια, θα πάμε να έχουν - 971 01:04:43,870 --> 01:04:46,280 πρέπει πάντα να ελέγξετε αν τριπλή σειρά ίση εάν ψευδείς. 972 01:04:46,280 --> 01:04:49,010 Έτσι και πάλι, θέλετε να ελέγξετε το είδος και την αξία, 973 01:04:49,010 --> 01:04:53,880 και στη συνέχεια, αν αυτό δεν λειτουργήσει, τότε θα ήθελα να ζητήσω συγνώμη, ως συνήθως, όπως κάναμε και στο 7 από το chipset. 974 01:04:53,880 --> 01:04:55,870 Σε αντίθετη περίπτωση, θέλετε να βρόχο μέσω πάντα με αυτά τα εύχρηστα 975 01:04:55,870 --> 01:04:59,410 foreach βρόχους που μόλις πήγε πάνω. 976 01:04:59,410 --> 01:05:01,280 Τώρα που είμαστε μέσα looping και το κάναμε παρελθόν, 977 01:05:01,280 --> 01:05:05,080 ας υποθέσουμε ότι το ερώτημα μας πέρασε, τώρα έχουμε βρόχο foreach μας. 978 01:05:05,080 --> 01:05:11,050 Και η πρώτη σειρά που έχει, τόσο εδώ είναι η γραμμή, ακριβώς εδώ? Είναι εγκλωβιστούμε. 979 01:05:11,050 --> 01:05:14,010 Είναι πρόκειται να εκτυπώσετε όλες τις πληροφορίες που έχει πάρει. 980 01:05:14,010 --> 01:05:18,070 Έτσι πρόκειται να εκτυπώσετε στο κάτω μέρος "Θέλετε να μάθετε HTML;" 981 01:05:18,070 --> 01:05:23,370 Στη συνέχεια, πρόκειται να πάνε στην επόμενη σειρά, γιατί έχει ολοκληρώσει το πρώτο για το βρόχο, 982 01:05:23,370 --> 01:05:26,510 και έτσι τότε πρόκειται να εκτυπώσετε τη δεύτερη γραμμή του, 983 01:05:26,510 --> 01:05:32,120 η οποία πρόκειται να είναι STAT110, Βρείτε όλες τις στιγμές. 984 01:05:32,120 --> 01:05:34,290 >> Ένα τελευταίο πράγμα που είναι στο SQL ευπάθειας. 985 01:05:34,290 --> 01:05:37,300 Ξέρω ότι ο Δαβίδ άγγιξε σε αυτό λίγο στη διάλεξη. 986 01:05:37,300 --> 01:05:40,730 Μπορείτε να διαβάσετε αυτό αργότερα. Είναι πραγματικά αστείο. 987 01:05:40,730 --> 01:05:45,320 SQL Injection είναι ένα είδος δύσκολο πράγμα. 988 01:05:45,320 --> 01:05:49,890 Ας πούμε ότι έχετε κολλήσει ακριβώς αυτές τις μεταβλητές δεξιά στο ερώτημά σας, 989 01:05:49,890 --> 01:05:52,290 όπως μπορείτε να δείτε σε αυτή την πρώτη γραμμή. 990 01:05:52,290 --> 01:05:54,520 Γι 'αυτό φαίνεται μια χαρά, έτσι δεν είναι; Είσαι απλά βάζοντας το όνομα χρήστη 991 01:05:54,520 --> 01:05:58,820 και τον κωδικό πρόσβασης στο ερώτημα SQL σας και θέλετε να τα μεταφέρει μακριά και να πάρει ό, τι είναι στον πίνακα των δεδομένων σας. 992 01:05:58,820 --> 01:06:01,450 Αυτό φαίνεται αρκετά απλή. Έτσι, ας πούμε κάποιος βάζει μέσα, 993 01:06:01,450 --> 01:06:04,910 για τον κωδικό πρόσβασης, αυτό Ή το κείμενο εδώ - 994 01:06:04,910 --> 01:06:06,780 θα πρέπει πραγματικά να είναι στο κόκκινο κουτί. 995 01:06:06,780 --> 01:06:11,920 Ας πούμε ότι βάζουν αυτόν τον κωδικό σε - αυτό είναι που αρχίζει. 996 01:06:11,920 --> 01:06:16,520 Έτσι βάζουν Ή "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Το είδος της μια ανόητη κωδικό πρόσβασης για να έχουν. 998 01:06:20,880 --> 01:06:25,070 Τώρα ας το αντικαταστήσει, και θα σημειώσετε ότι σε αυτό το ερώτημα SQL τώρα, 999 01:06:25,070 --> 01:06:29,090 αξιολογεί να είναι πάντα αλήθεια, γιατί θα σημειώσετε ότι 1000 01:06:29,090 --> 01:06:32,240 μπορείτε να επιλέξετε το ερώτημα SQL όλες αυτές τις πληροφορίες 1001 01:06:32,240 --> 01:06:35,420 ή μπορείτε να έχετε μόνο 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Έτσι ώστε να είναι πάντα πρόκειται να αξιολογήσει την τιμή true. 1003 01:06:41,030 --> 01:06:46,610 Αυτό δεν πρόκειται να λειτουργήσει πραγματικά, γιατί αυτό σημαίνει ότι ο χάκερ μπορεί να σπάσει στο σύστημά σας. 1004 01:06:46,610 --> 01:06:49,300 Η λύση σε αυτό είναι ότι θα πρέπει να χρησιμοποιήσετε το σύστημα ΠΟΠ, 1005 01:06:49,300 --> 01:06:51,360 πράγμα που σημαίνει ότι θα πρέπει να χρησιμοποιήσετε ερωτηματικά, 1006 01:06:51,360 --> 01:06:53,350 το οποίο είναι ό, τι εσείς που χρησιμοποιούνται σε 7 από το chipset, 1007 01:06:53,350 --> 01:06:57,620 όπου θα πάμε να χρησιμοποιήσετε ένα ερωτηματικό στη θέση όπου θέλετε να βάλετε κάτι, 1008 01:06:57,620 --> 01:07:01,430 και στη συνέχεια θα πάμε να έχουν ένα κόμμα, και στη συνέχεια, θα έχετε στη συνέχεια, 1009 01:07:01,430 --> 01:07:07,610 μετά από σειρά σας, οι διαφορετικές μεταβλητές που θέλετε να αντικαταστήσετε στο ερωτηματικό σας. 1010 01:07:07,610 --> 01:07:10,330 Έτσι θα σημειώσουμε εδώ ότι τώρα έχω αυτά τα κόκκινα ερωτηματικά. 1011 01:07:10,330 --> 01:07:15,420 Στη συνέχεια έβαλα τις μεταβλητές, μετά χορδές μου, οπότε ξέρω να τους αντικαταστήσουν με αυτή τη σειρά μετά. 1012 01:07:15,420 --> 01:07:18,470 Αυτό θα βεβαιωθείτε ότι αν κάποιος το κάνει σαν αυτό, 1013 01:07:18,470 --> 01:07:24,050 και έχουν την ή 1 = 1 κατάσταση, η οποία θα βεβαιωθείτε ότι, 1014 01:07:24,050 --> 01:07:30,490 στο πίσω άκρο, βεβαιωθείτε ότι δεν θα σπάσει στην πραγματικότητα το ερώτημα SQL. 1015 01:07:30,490 --> 01:07:33,660 Εντάξει, έτσι ώστε να είναι λίγο πολύ αυτό, ένας ανεμοστρόβιλος της PHP και SQL. 1016 01:07:33,660 --> 01:07:41,520 Καλή τύχη σε όλους σας, και τώρα στο Όρεγκον 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Εντάξει ο καθένας. Ώρα να πάει πέρα ​​από κάποια JavaScript 1018 01:07:44,270 --> 01:07:48,840 και κάποια άλλα πράγματα πολύ γρήγορα, ώστε να μην κρατάτε μέχρι απόψε. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Ναι. JavaScript είναι είδος δροσερό πράγμα, υποτίθεται. 1020 01:07:56,930 --> 01:07:59,090 Τα πράγματα που πραγματικά πρέπει να ξέρετε για το JavaScript, είναι περίπου όπως 1021 01:07:59,090 --> 01:08:03,810 το client-side τέλος τι το web app σας πρόκειται να κάνει. 1022 01:08:03,810 --> 01:08:08,280 Υπάρχουν μερικά πράγματα που απλά δεν θέλουν να ασχοληθούν με όλη την ώρα στην πλευρά του διακομιστή. 1023 01:08:08,280 --> 01:08:12,880 Όλες οι μικρές αλληλεπιδράσεις, τονίζοντας ένα πράγμα, κάνει κάτι εξαφανίζονται. 1024 01:08:12,880 --> 01:08:15,340 Μπορείτε πραγματικά δεν θέλουν να πρέπει να μιλήσετε με το διακομιστή σας όλη την ώρα γι 'αυτό. 1025 01:08:15,340 --> 01:08:18,069 Και μερικά από τα οποία δεν είναι ακόμη δυνατό να γίνει από την πλευρά του διακομιστή. 1026 01:08:18,069 --> 01:08:21,899 Αυτός είναι ο λόγος που χρειαζόμαστε κάτι σαν το JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Cool πράγματα σχετικά με JavaScript: Είναι δυναμικά πληκτρολογήσει. 1028 01:08:24,359 --> 01:08:27,149 Τι αυτό σημαίνει είναι ότι το πρόγραμμά σας δεν χρειάζεται να ξέρετε 1029 01:08:27,149 --> 01:08:30,970 τι, ακριβώς, οι μεταβλητές είναι όταν το γράψει. 1030 01:08:30,970 --> 01:08:34,510 Θα ακριβώς το είδος του να το καταλάβω, δεδομένου ότι τρέχει. 1031 01:08:34,510 --> 01:08:37,520 Άλλα πράγματα που είναι δροσερό γι 'αυτό: Είναι μια γλώσσα σγουρά στήριγμα, 1032 01:08:37,520 --> 01:08:41,359 το οποίο σημαίνει ότι η σύνταξη είναι παρόμοια με C και PHP. 1033 01:08:41,359 --> 01:08:47,050 Δεν χρειάζεται να κάνει πολλά επαναλάβει όταν μαθαίνετε JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Εδώ έχουμε ένα μικρό κομμάτι της JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Ενδιαφέρον πράγμα εδώ είναι ότι, αν το δει κανείς, 1036 01:08:52,560 --> 01:08:56,330 έχουμε ένα κομμάτι της JavaScript εκεί στην ετικέτα της κεφαλής. 1037 01:08:56,330 --> 01:08:59,479 Τι είναι δεν είναι βασικά ακριβώς περιλαμβάνει ένα αρχείο JavaScript. 1038 01:08:59,479 --> 01:09:02,260 Αυτός είναι ένας τρόπος που μπορείτε να συμπεριλάβετε JavaScript στο πρόγραμμα σας. 1039 01:09:02,260 --> 01:09:06,910 Στη συνέχεια, η δεύτερη λίγο είναι στην πραγματικότητα κάποια inline JavaScript, 1040 01:09:06,910 --> 01:09:10,790 πολύ παρόμοιο με ένα ενσωματωμένο στυλ με CSS, 1041 01:09:10,790 --> 01:09:16,180 και είστε ακριβώς γράφει κάποιο κώδικα πολύ γρήγορα εκεί. 1042 01:09:16,180 --> 01:09:18,120 JavaScript έχει συστοιχίες. 1043 01:09:18,120 --> 01:09:20,850 Ακριβώς ένας άλλος τρόπος για να διατηρήσετε τα δεδομένα γύρω, πολύ χρήσιμο. 1044 01:09:20,850 --> 01:09:25,180 Πολύ ωραία και εύκολη σύνταξη. 1045 01:09:25,180 --> 01:09:29,870 Μπορείτε να χρησιμοποιήσετε αγκύλες για να αποκτήσετε πρόσβαση σε ό, τι και να κρατήσει τα πάντα μαζί. 1046 01:09:29,870 --> 01:09:35,020 Τίποτα δεν είναι πολύ περίπλοκο. 1047 01:09:35,020 --> 01:09:38,630 Το δροσερό πράγμα για JavaScript και scripting γλωσσών γενικότερα 1048 01:09:38,630 --> 01:09:40,920 είναι ότι δεν έχετε να ανησυχείτε για τα μεγέθη του πίνακα. 1049 01:09:40,920 --> 01:09:43,880 Μπορείτε να χρησιμοποιήσετε μόνο array.length και να παρακολουθείτε αυτό, 1050 01:09:43,880 --> 01:09:46,960 καθώς επίσης και η σειρά μπορεί να αυξηθεί ή να συρρικνωθεί όσο χρειάζεστε για να. 1051 01:09:46,960 --> 01:09:49,279 Έτσι, δεν χρειάζεται καν να ανησυχείτε για κάθε είδος, 1052 01:09:49,279 --> 01:09:57,050 Ω, όχι, εγώ πρέπει να διαθέσουν περισσότερα πράγματα, ή κάτι τέτοιο. 1053 01:09:57,050 --> 01:10:00,090 >> Το δροσερό πράγμα εδώ είναι ότι η JavaScript έχει κάτι που ονομάζεται αντικείμενα. 1054 01:10:00,090 --> 01:10:04,800 Είναι μια αντικειμενοστραφής γλώσσα, έτσι ώστε ό, τι έχει είναι, κατ 'ουσίαν, 1055 01:10:04,800 --> 01:10:10,100 ένας τρόπος για να μπορείτε να ομαδοποιήσετε τα δεδομένα μαζί, κάπως παρόμοιο με ένα struct, 1056 01:10:10,100 --> 01:10:17,280 αλλά μπορείτε να έχετε πρόσβαση σαν ένα struct ή ένα συνδυαστικό σύνταξη array. 1057 01:10:17,280 --> 01:10:22,520 Είναι αρκετά απλό και τι μπορείτε να κάνετε με αυτό είναι τα δεδομένα της ομάδας μαζί 1058 01:10:22,520 --> 01:10:24,810 εάν έχετε μια δέσμη των στοιχείων που είναι σχετικές. 1059 01:10:24,810 --> 01:10:26,850 Επειδή είναι όλα τα πράγματα που χρειάζεστε για να περιγράψει ένα αυτοκίνητο, 1060 01:10:26,850 --> 01:10:29,050 δεν χρειάζεται να το έχετε σε ένα σωρό διαφορετικές θέσεις. 1061 01:10:29,050 --> 01:10:35,300 Μπορείτε να κολλήσετε μόνο σε 1 αντικείμενο στο JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Όπως ίσως γνωρίζετε, την επανάληψη είναι μία από αυτές τις κουραστικές εργασίες. 1063 01:10:39,090 --> 01:10:43,810 Μπορείτε απλά να το κάνετε πάνω από ένα ξανά. Θα πρέπει να μιλήσετε με κάθε αντικείμενο μέσα στο αυτοκίνητο, 1064 01:10:43,810 --> 01:10:47,340 ή θα πρέπει να περάσει μέσα από κάθε στοιχείο σε μια λίστα ή κάτι τέτοιο. 1065 01:10:47,340 --> 01:10:51,770 Έτσι JavaScript έχει, παρόμοια με την PHP, μια σύνταξη foreach. 1066 01:10:51,770 --> 01:10:54,590 Σε αυτή την περίπτωση, είναι ένα από το βρόχο. 1067 01:10:54,590 --> 01:10:57,300 Θέλετε να χρησιμοποιήσετε αυτό μόνο σε αντικείμενα. 1068 01:10:57,300 --> 01:11:01,030 Υπάρχουν κάποια προβλήματα που προκύπτουν, εάν χρησιμοποιήσετε αυτό σε συστοιχίες. 1069 01:11:01,030 --> 01:11:03,750 Είναι γενικά είναι ένα από εκείνα τα πράγματα, όμως, ότι είναι πολύ χρήσιμο, 1070 01:11:03,750 --> 01:11:06,590 επειδή θα εξαλείψει πολλές υπερυψωμένες 1071 01:11:06,590 --> 01:11:10,270 επειδή δεν έχετε να σηκώσει τα πάντα στο αντικείμενό σας από τον εαυτό σας. 1072 01:11:10,270 --> 01:11:12,300 Δεν χρειάζεται να θυμάστε όλα τα βασικά ονόματα. 1073 01:11:12,300 --> 01:11:18,270 Μπορείτε ακριβώς το είδος του να πάρει πίσω σε αυτή τη σύνταξη. 1074 01:11:18,270 --> 01:11:21,500 Σε αυτό, με, μπορείτε απλά θέλετε να θυμάστε 1075 01:11:21,500 --> 01:11:27,180 ότι παίρνετε πίσω όλα τα πλήκτρα, με πολύ παρόμοιο τρόπο με hash πίνακα. 1076 01:11:27,180 --> 01:11:30,880 Αν θυμάστε από αυτό, όταν θα τεθεί σε μια σειρά που θα μπορούσε να πάρει κάτι από 1077 01:11:30,880 --> 01:11:33,840 ότι θα έχουν μια σχετική αξία με αυτό. 1078 01:11:33,840 --> 01:11:36,360 Τι μπορείτε να κάνετε με αυτό είναι ότι μπορείτε να πείτε, εντάξει, 1079 01:11:36,360 --> 01:11:42,120 Έβαλα σε ένα αυτοκίνητο, και μου ζήτησε μια Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Έτσι, μπορείτε να βάλετε στο αλφαριθμητικό Ferrari και πάλι αργότερα, και μπορείτε να πάρετε ότι έξω. 1081 01:11:45,290 --> 01:11:50,000 Και μπορείτε να το κάνετε αυτό σε έναν βρόχο, με την στο βρόχο. 1082 01:11:50,000 --> 01:11:53,320 Έτσι απλά περισσότερα για τα αντικείμενα. Το βασικό πράγμα από αυτό που πρέπει να θυμάστε 1083 01:11:53,320 --> 01:12:00,340 είναι ότι μπορείτε να χρησιμοποιήσετε το struct αντικείμενο, όπως σύνταξη όποτε θέλετε με αυτά, 1084 01:12:00,340 --> 01:12:04,590 εκτός αν αυτό σας πρόκειται να χρησιμοποιηθεί ως ένα string δεν είναι ένα έγκυρο όνομα μεταβλητής. 1085 01:12:04,590 --> 01:12:07,650 Έτσι, αν δούμε ότι εκεί, έχουμε το κλειδί με κενά. 1086 01:12:07,650 --> 01:12:12,500 Λοιπόν, αν ήταν να βάλει object.key, το διάστημα, με, χώρο, τους χώρους, 1087 01:12:12,500 --> 01:12:15,320 ότι απλά δεν θα είχε νόημα συντακτικά. 1088 01:12:15,320 --> 01:12:22,730 Έτσι, το μόνο που μπορεί να κάνει ότι με αυτό το είδος της σύνταξης βραχίονα. 1089 01:12:22,730 --> 01:12:26,520 >> Επίσης, είναι πολύ JavaScript πεδίο-σοφό να PHP. 1090 01:12:26,520 --> 01:12:29,050 Έχετε 2 τρόπους αντιμετώπισης πεδίο. 1091 01:12:29,050 --> 01:12:31,960 Δεν μπορείτε να έχετε το var μπροστά από μια μεταβλητή, 1092 01:12:31,960 --> 01:12:34,060 και αυτό ακριβώς σημαίνει αυτό είναι παγκόσμιο. 1093 01:12:34,060 --> 01:12:37,050 Μπορείτε να το δείτε από οπουδήποτε. Ακόμα κι αν επρόκειτο να τεθεί αυτό σε μια δήλωση if, 1094 01:12:37,050 --> 01:12:42,430 οπουδήποτε αλλού στον κώδικά σας μετά από αυτό το σημείο μπορείτε να δείτε αυτή τη μεταβλητή. 1095 01:12:42,430 --> 01:12:46,730 Ένα άλλο πράγμα, όμως, είναι με το var, είναι περιορισμένη σε ό, τι λειτουργία είστε μέσα 1096 01:12:46,730 --> 01:12:48,870 Εάν δεν είστε σε μια λειτουργία, καλά, είναι παγκόσμια. 1097 01:12:48,870 --> 01:12:53,900 Αλλά εάν είστε σε μια λειτουργία που είναι ορατό μόνο εντός αυτής της λειτουργίας. 1098 01:12:53,900 --> 01:12:56,420 Δεν έχω ένα παράδειγμα, αλλά, ναι. Είναι ένα από εκείνα τα πράγματα που 1099 01:12:56,420 --> 01:12:59,900 μπορείτε να διαχειριστείτε ποιες μεταβλητές που θέλετε να είναι παγκόσμια, 1100 01:12:59,900 --> 01:13:03,810 τι μεταβλητές που θέλετε να είναι τοπικές, αλλά εσείς πρέπει να είστε προσεκτικοί σχετικά με αυτό, 1101 01:13:03,810 --> 01:13:06,890 επειδή δεν έχετε τον τύπο του προστίμου ελέγχου σιτηρών κάνετε σε C, 1102 01:13:06,890 --> 01:13:15,820 όπου αν κάτι έχει δηλωθεί σε ένα βρόχο, πρόκειται να μείνετε σε αυτό για το βρόχο. 1103 01:13:15,820 --> 01:13:18,790 Το πράγμα που πραγματικά νοιάζονται για τη χρήση JavaScript για το χειρισμό ιστοσελίδες, έτσι δεν είναι; 1104 01:13:18,790 --> 01:13:21,800 Θέλω να πω, γι 'αυτό κάνουμε αυτό. 1105 01:13:21,800 --> 01:13:23,840 >> Για να το κάνουμε αυτό, χρησιμοποιούμε κάτι που ονομάζεται DOM. 1106 01:13:23,840 --> 01:13:25,850 Το Document Object Model. 1107 01:13:25,850 --> 01:13:29,430 Βασικά, αυτό που κάνει είναι να παίρνει όλα τα HTML σας 1108 01:13:29,430 --> 01:13:34,110 και τα μοντέλα έξω σε ένα σωρό αντικείμενα που εμφωλιασμένα. 1109 01:13:34,110 --> 01:13:37,080 Μπορείτε να ξεκινήσετε με κάτι σαν αυτό. 1110 01:13:37,080 --> 01:13:44,770 Έχετε, σχετικά με το δικαίωμα για μένα, ένα μάτσο κώδικα εκεί έξω αυτό είναι το είδος της - 1111 01:13:44,770 --> 01:13:46,640 Θα νόμιζε κανείς ότι θα ήταν πολύ δύσκολο να χειραγωγήσουν, 1112 01:13:46,640 --> 01:13:48,700 γιατί θα πρέπει να parsing μέσα από μια δέσμη του κειμένου 1113 01:13:48,700 --> 01:13:52,080 και χρειάζεται να κομμάτι χώρια τα πράγματα. Και τι θα γινόταν αν δεν έχει διαμορφωθεί σωστά; 1114 01:13:52,080 --> 01:13:54,880 Κακά πράγματα θα συμβούν. 1115 01:13:54,880 --> 01:13:58,140 Έτσι JavaScript φροντίζει γι 'αυτό για σας, και μπορείτε να πάρετε μια ωραία δομή δεδομένων, 1116 01:13:58,140 --> 01:14:01,390 όπως αυτό στα αριστερά μου, όπου έχετε μόνο ένα έγγραφο, 1117 01:14:01,390 --> 01:14:03,530 και στο εσωτερικό ότι έχετε κάτι που ονομάζεται HTML, 1118 01:14:03,530 --> 01:14:05,600 και στο εσωτερικό ότι έχετε ένα κεφάλι και ένα σώμα, 1119 01:14:05,600 --> 01:14:08,420 και μέσα σε αυτό το κεφάλι σας έχει έναν τίτλο, και τα λοιπά, και τα λοιπά, και τα λοιπά. 1120 01:14:08,420 --> 01:14:11,810 Αυτό απλοποιεί το χειρισμό μιας ιστοσελίδας έτσι ώστε να είναι απλά, 1121 01:14:11,810 --> 01:14:14,190 Ω, θέλω απλώς να μιλήσω σε αυτό το αντικείμενο. 1122 01:14:14,190 --> 01:14:21,340 Ταξινόμηση από ένα πολύ παρόμοιο τρόπο θα απευθυνθείτε σε ένα άλλο αντικείμενο που ο ίδιος έκανε. 1123 01:14:21,340 --> 01:14:25,980 Όπως είπα, όλα τα DOM είναι το αντικείμενο του εγγράφου. 1124 01:14:25,980 --> 01:14:29,290 Είτε αυτό είναι μόνο ένα μέρος και, στη συνέχεια, μπορείτε να πάτε μέσα να βρείτε τα πράγματα, 1125 01:14:29,290 --> 01:14:33,880 και μπορείτε να το κάνετε - αυτό είναι το παλιό στυλ του για να γίνει αυτό, εκεί πάνω, 1126 01:14:33,880 --> 01:14:38,130 όπου μπορείτε να κάνετε document.getElementById, και στη συνέχεια το όνομα, 1127 01:14:38,130 --> 01:14:42,420 και όπως μπορείτε να πείτε ίσως, αυτό παίρνει πολύ δυσκίνητο μετά από λίγο. 1128 01:14:42,420 --> 01:14:44,480 Έτσι, ίσως δεν θέλετε να το κάνετε αυτό. Αυτός είναι ο λόγος για τον οποίο έχουμε 1129 01:14:44,480 --> 01:14:48,760 το επόμενο πράγμα που θα πάμε να μιλήσουμε για μετά από αυτό. 1130 01:14:48,760 --> 01:14:52,510 Το βασικό πράγμα εδώ είναι ότι, εντάξει, έχετε όλα αυτά τα στοιχεία, έτσι δεν είναι; 1131 01:14:52,510 --> 01:14:56,400 Έτσι, ίσως μπορώ να αλλάξω το χρώμα του κάτι, όταν η σελίδα φορτώνει. 1132 01:14:56,400 --> 01:14:58,380 Και τι έγινε; Τι εάν ο χρήστης κάνει κλικ κάτι μου; 1133 01:14:58,380 --> 01:15:00,540 Θέλω να κάνεις κάτι ενδιαφέρον, όταν κάνετε κλικ σε κάτι. 1134 01:15:00,540 --> 01:15:02,600 Αυτός είναι ο λόγος που έχουμε γεγονότα. 1135 01:15:02,600 --> 01:15:05,330 Μπορείτε, ουσιαστικά, να βρουν οποιοδήποτε στοιχείο στο DOM σας, 1136 01:15:05,330 --> 01:15:08,560 και στη συνέχεια να πω, hey. Όταν αυτό φορτώνει ή κάποιος κάνει κλικ, 1137 01:15:08,560 --> 01:15:11,410 ή όταν το ποντίκι πάνω του, να κάνει κάτι με αυτό. 1138 01:15:11,410 --> 01:15:15,330 Και τι έχετε είναι, έχετε λειτουργίες που χειρίζονται αυτό για σας. 1139 01:15:15,330 --> 01:15:17,980 Αυτές οι λειτουργίες είναι χειριστές συμβάντων. 1140 01:15:17,980 --> 01:15:20,440 Τι επιλέγουν να φτιάξουν - είναι ακριβώς ένα φανταχτερό τρόπο λέγοντας, 1141 01:15:20,440 --> 01:15:23,500 η λειτουργία αυτή εκτελείται μόνο όταν αυτό το γεγονός θα συμβεί. 1142 01:15:23,500 --> 01:15:28,070 Έτσι, τον οποίο χειρίζεται το γεγονός που συμβαίνει. 1143 01:15:28,070 --> 01:15:30,810 Αυτό είναι το πώς θα τοποθετήσετε ένα πρόγραμμα χειρισμού συμβάντων. 1144 01:15:30,810 --> 01:15:34,750 Έχω κάποιο κουμπί, και όταν κάνετε κλικ, θα εκραγεί. 1145 01:15:34,750 --> 01:15:40,560 Έτσι, μην κάνετε κλικ στο κουμπί. 1146 01:15:40,560 --> 01:15:42,910 Αυτός είναι ένας τρόπος προσέγγισης, σωστά; 1147 01:15:42,910 --> 01:15:46,430 Έχετε μια ετικέτα κουμπιού, και κάντε κλικ έχετε ένα string που λέει, 1148 01:15:46,430 --> 01:15:50,460 Ω, από τον τρόπο, να κάνω αυτή την έκρηξη πράγμα για μένα. 1149 01:15:50,460 --> 01:15:53,990 Διαφορετικά, είναι ακριβώς όπως ένα κανονικό κουμπί που μόλις κάνατε. 1150 01:15:53,990 --> 01:15:56,550 Μπορείτε επίσης να κάνετε αυτό με άλλο τρόπο, 1151 01:15:56,550 --> 01:16:02,770 με την αρπαγή του στοιχείου DOM, αλλά θα σώσει ότι μετά μιλάμε για jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Είναι μια βιβλιοθήκη που είναι cross-browser. 1153 01:16:07,580 --> 01:16:09,580 Μπορείτε να το χρησιμοποιήσετε σε σχεδόν τίποτα. 1154 01:16:09,580 --> 01:16:12,090 Και απλά σου δίνει πολλά εργαλεία για να εργαστεί με. 1155 01:16:12,090 --> 01:16:15,850 Επειδή JavaScript, ενώ οι ισχυροί, δεν έχουν όλα τα εργαλεία που χρειάζεστε 1156 01:16:15,850 --> 01:16:20,550 έξω από το κουτί για να αντιμετωπίσουμε πραγματικά ένα web app μπορεί να θέλετε να κάνετε. 1157 01:16:20,550 --> 01:16:24,650 Γι 'αυτό απλοποιεί πολλά πράγματα, σας δίνει πολλές λειτουργίες 1158 01:16:24,650 --> 01:16:28,760 έξω από το κουτί που θα έπρεπε κανονικά να σας γράψω, ξανά και ξανά και ξανά. 1159 01:16:28,760 --> 01:16:31,600 Και απλά κάνει τα πράγματα πολύ απλά. 1160 01:16:31,600 --> 01:16:35,780 Μπορείτε επίσης να έχουν επιλογείς, τα οποία σας επιτρέπουν να λαμβάνουν όλα εκείνα τα στοιχεία 1161 01:16:35,780 --> 01:16:42,800 DOM από σας πολύ πιο απλά, αντί να χρειάζεται να χρησιμοποιούν αυτές τις πολύ μεγάλες κλήσεις λειτουργίας. 1162 01:16:42,800 --> 01:16:46,630 Περισσότερα για αυτά τα επιλογείς. Θα πρέπει, εκεί που έχετε, ας πούμε, 1163 01:16:46,630 --> 01:16:49,800 Θέλω να πάρω ένα στοιχείο με το αναγνωριστικό "ροκ". 1164 01:16:49,800 --> 01:16:56,450 Λοιπόν, σε jQuery, είναι μόλις $ και, στη συνέχεια, μια σειρά που έχει ένα κιλό, και στη συνέχεια "ροκ". 1165 01:16:56,450 --> 01:17:01,960 Είναι πολύ απλό και πολύ πιο γρήγορα από ό, τι το παραδοσιακό JavaScript τρόπος αντιμετώπισης αυτού του προβλήματος. 1166 01:17:01,960 --> 01:17:06,120 Και έχετε παρόμοια πράγματα για τις κατηγορίες και τους τύπους στοιχείων. 1167 01:17:06,120 --> 01:17:08,140 jQuery είναι - ένα από τα δροσερά χαρακτηριστικά γνωρίσματα είναι ότι μπορείτε κάπως να συμπιέσει 1168 01:17:08,140 --> 01:17:14,350 κάτω από τις απορίες σας σχετικά με DOM σας πολύ, πολύ γρήγορα. 1169 01:17:14,350 --> 01:17:18,980 Τώρα είμαστε πίσω στο χειρισμό εκδήλωση, και αυτό είναι το πώς θα χειριστεί μια εκδήλωση στο jQuery. 1170 01:17:18,980 --> 01:17:23,090 Έτσι, αυτό που θα πάμε εδώ είναι που λέμε, εντάξει. Έχω μια ετικέτα script, έτσι δεν είναι; 1171 01:17:23,090 --> 01:17:25,400 Έτσι, δεν έχω αυτό το inline JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Τι θα πάμε να κάνουμε είναι να πάμε να πούμε, εντάξει. 1173 01:17:27,750 --> 01:17:30,860 Όταν το έγγραφο είναι έτοιμο, το οποίο σημαίνει ότι έχει φορτωθεί το έγγραφο, 1174 01:17:30,860 --> 01:17:34,660 πρόκειται να πάει σε αυτή τη λειτουργία, και θα πάμε να πούμε, εντάξει, 1175 01:17:34,660 --> 01:17:37,060 αυτή η λειτουργία είναι πραγματικά να κάνει κάτι άλλο. 1176 01:17:37,060 --> 01:17:42,320 Είναι σαν να λέει, εντάξει, μου πάρει το στοιχείο με το αναγνωριστικό "MyID." 1177 01:17:42,320 --> 01:17:47,960 Και στη συνέχεια να δώσει σε αυτό μια λειτουργία χειρισμού που εκτελεί όταν κάνετε κλικ. 1178 01:17:47,960 --> 01:17:49,820 Ουσιαστικά αυτό που κάνει είναι, λέει, εντάξει. 1179 01:17:49,820 --> 01:17:52,630 Η σελίδα φορτώνεται, έτσι είμαι πρόκειται να το, βρείτε το στοιχείο αυτό, 1180 01:17:52,630 --> 01:17:56,420 δώσει αυτό το πρόγραμμα χειρισμού συμβάντων, και θέτει ουσιαστικά τη σελίδα σας για σας. 1181 01:17:56,420 --> 01:18:00,520 Και αυτό είναι το πώς θέλετε να σκεφτείτε για το χειρισμό εκδήλωση. 1182 01:18:00,520 --> 01:18:06,310 Απλά θέλω να το σκέφτομαι, εντάξει, όταν κάτι συμβαίνει, αυτό που θέλω να συμβεί αυτό; 1183 01:18:06,310 --> 01:18:10,520 Δεν θέλω να το σκέφτομαι, εντάξει, θα πρέπει να βεβαιωθείτε ότι οι συνομιλίες αυτό το πράγμα σε αυτό το πράγμα, 1184 01:18:10,520 --> 01:18:14,660 αυτό το πράγμα μπλα μπλα μπλα, επειδή απλά θέλετε να μιλήσετε πράγμα από την άποψη των γεγονότων. 1185 01:18:14,660 --> 01:18:17,650 Όταν συμβαίνει αυτό, αυτό συμβαίνει. Όταν συμβαίνει αυτό, συμβαίνει αυτό. 1186 01:18:17,650 --> 01:18:20,240 Και αν τα πράγματα και να προκαλέσει άλλα πράγματα, αυτό είναι υπέροχο. 1187 01:18:20,240 --> 01:18:22,150 Αλλά δεν θέλετε να προσπαθήσουμε και να κάνουμε πολύπλοκο κώδικα 1188 01:18:22,150 --> 01:18:24,130 Όπου και αν προκαλώντας πολλαπλά πράγματα ταυτόχρονα, 1189 01:18:24,130 --> 01:18:28,860 επειδή είστε ακριβώς πρόκειται να δώσετε στον εαυτό σας έναν πονοκέφαλο. 1190 01:18:28,860 --> 01:18:32,340 >> Εντάξει. Τώρα μπορούμε να πάρουμε τη σελίδα μας για να χειριστεί τα γεγονότα, 1191 01:18:32,340 --> 01:18:35,640 αλλά ας πούμε χρήστη μου κάνει κλικ σε ένα κουμπί. 1192 01:18:35,640 --> 01:18:38,040 Τι γίνεται αν θέλω να στείλω αυτό το αίτημα πίσω στο διακομιστή, 1193 01:18:38,040 --> 01:18:41,100 αλλά δεν θέλω να ξαναφορτώσετε την σελίδα, γιατί να χρειάζεται να φορτώσετε μια νέα σελίδα 1194 01:18:41,100 --> 01:18:44,390 κάθε φορά που παίρνει το είδος της κουραστική, και γιατί πρέπει να κάνω 1195 01:18:44,390 --> 01:18:47,430 να γκρεμίσει την επικεφαλίδα και πάλι, και το υποσέλιδο και πάλι, 1196 01:18:47,430 --> 01:18:49,670 και όλα τα στοιχεία της σελίδας και πάλι 1197 01:18:49,670 --> 01:18:53,180 απλά για να ανανεώσετε το χαιρετισμό ή το χρόνο; 1198 01:18:53,180 --> 01:18:55,290 Έτσι, γι 'αυτό έχουμε κάτι σαν Ajax. 1199 01:18:55,290 --> 01:18:59,150 Τι μπορούμε να κάνουμε εδώ με τον Άγιαξ είναι μπορούμε να πούμε, εντάξει, 1200 01:18:59,150 --> 01:19:01,290 Θέλω να στείλω κάποια στοιχεία στο διακομιστή, 1201 01:19:01,290 --> 01:19:04,010 και θέλω να πάρω μια απάντηση πίσω ώστε να μπορώ να ενημερώσετε τη σελίδα μου, 1202 01:19:04,010 --> 01:19:12,120 ή ίσως απλά να κάνετε κάποια αλγοριθμική υπολογισμού που δεν δείχνει απαραίτητα κάτι για το χρήστη. 1203 01:19:12,120 --> 01:19:15,500 Τι χρειάζεστε για να το κάνετε αυτό; Λοιπόν, θα πρέπει να έχετε μια διεύθυνση URL θα πρέπει να μιλήσει. 1204 01:19:15,500 --> 01:19:18,650 Ο διακομιστής σας δεν μπορεί ακριβώς μαγικά να ακούσετε από πουθενά. 1205 01:19:18,650 --> 01:19:21,960 Θα πρέπει να έχουν ένα συγκεκριμένο μέρος που θα στείλει τα δεδομένα σε. 1206 01:19:21,960 --> 01:19:26,240 Και θα πρέπει επίσης κάποια στοιχεία για την αποστολή, ή ίσως είναι ένα ερώτημα dataless. 1207 01:19:26,240 --> 01:19:31,380 Απλά θέλετε να κάνετε ping στο διακομιστή και να πω, hey, είμαι ζωντανός, ή κάτι τέτοιο. 1208 01:19:31,380 --> 01:19:35,150 Και τότε θα θέλετε μια λειτουργία που χειρίζεται ουσιαστικά με επιτυχία. 1209 01:19:35,150 --> 01:19:38,250 Ας πούμε ότι έχετε πάρει πίσω κάποιες πληροφορίες από το διακομιστή σας, 1210 01:19:38,250 --> 01:19:42,960 και θέλετε να αλλάξετε τον τίτλο του χρήστη στη σελίδα τους. 1211 01:19:42,960 --> 01:19:44,930 Έτσι θα πάρετε τις πληροφορίες πίσω, 1212 01:19:44,930 --> 01:19:48,860 και θα ωθήσει ότι στην οθόνη. 1213 01:19:48,860 --> 01:19:51,170 Αυτό που συμβαίνει είναι, όταν είναι έτοιμη η σελίδα, 1214 01:19:51,170 --> 01:19:56,500 μπορείτε να δημιουργήσετε ένα στη λειτουργία click για αυτό το κουμπί ονομάζεται greeter. 1215 01:19:56,500 --> 01:19:58,810 Τότε, αυτό που κάνει είναι, όταν το κουμπί πιέζεται, 1216 01:19:58,810 --> 01:20:03,700 μιλάτε για greetings.php, κάνετε μια αίτηση POST, 1217 01:20:03,700 --> 01:20:07,290 και λέτε, hey, μου πάρει κάτι από τη σελίδα σας. 1218 01:20:07,290 --> 01:20:09,890 Δεν χρειάζεται πραγματικά να περιγράψει αυτό, αλλά greetings.php, 1219 01:20:09,890 --> 01:20:12,480 ας πούμε, δίνει πίσω "hello world." 1220 01:20:12,480 --> 01:20:15,650 Έτσι παίρνουμε πίσω αυτό το "hello world", και για την επιτυχία αυτού του γεγονότος, 1221 01:20:15,650 --> 01:20:20,730 υποθέτοντας ότι τίποτα δεν πάει στραβά, τότε απλά πηγαίνετε σε αυτό τον τόπο-στόχο 1222 01:20:20,730 --> 01:20:25,720 ότι καθορίζονται και εμείς απλά να κολλήσει την απάντηση εκεί. 1223 01:20:25,720 --> 01:20:31,560 Και αυτό είναι ένα πολύ απλό τρόπο για τη δημιουργία ενός ερωτήματος Ajax. 1224 01:20:31,560 --> 01:20:34,340 >> Πολύ γρήγορα, Rob αναφέρθηκε είδος αυτό ήδη, 1225 01:20:34,340 --> 01:20:37,170 τα πράγματα μπορούν να πάνε στραβά, κακά πράγματα μπορούν να συμβούν, 1226 01:20:37,170 --> 01:20:42,660 έτσι θέλετε να εξοικειωθείτε με αυτούς τους κωδικούς απόκρισης HTTP. 1227 01:20:42,660 --> 01:20:46,030 Τι είναι αυτά είναι απλά, όπως, 200, όλα πήγαν καλά. 1228 01:20:46,030 --> 01:20:48,670 Κάτι άλλο, κακά πράγματα συνέβησαν. 1229 01:20:48,670 --> 01:20:50,790 Είναι γενικά το πράγμα που θέλετε να θυμάστε. 1230 01:20:50,790 --> 01:20:53,440 Αλλά είναι καλό να γνωρίζουμε όλα αυτά. 1231 01:20:53,440 --> 01:20:55,970 Και τέλος, αφού έχουμε περάσει από όλα αυτά, 1232 01:20:55,970 --> 01:20:58,680 πρέπει να μιλήσουμε πολύ γρήγορα σχετικά με το σχεδιασμό, 1233 01:20:58,680 --> 01:21:00,620 και στη συνέχεια μπορούμε να αφήσουμε όλοι φύγει. 1234 01:21:00,620 --> 01:21:03,410 Σχεδιασμός. Πράγματα που θέλετε να θυμάστε. 1235 01:21:03,410 --> 01:21:06,950 Ρωτήστε τον εαυτό σας αυτές τις ερωτήσεις: Ποιος θα πρέπει να χρησιμοποιούν αυτό; 1236 01:21:06,950 --> 01:21:09,580 Τι θα πρέπει να το χρησιμοποιεί για; Τι βλέπουν οι χρήστες μου νοιάζει; 1237 01:21:09,580 --> 01:21:11,750 Τι δεν νοιάζονται; 1238 01:21:11,750 --> 01:21:14,500 Απλά δεν θέλουν να κάνουν μια εφαρμογή και αφήστε το απλά μεγαλώνουν 1239 01:21:14,500 --> 01:21:18,270 και να γίνει αυτός ο γίγαντας, όλα τα καταναλώνουν πράγμα που δεν μπορείτε καν να τελειώσει. 1240 01:21:18,270 --> 01:21:23,900 Θέλετε να έχετε διακριτές στόχους και τα σχέδια και τα πράγματα που θέλετε να αντιμετωπίσει. 1241 01:21:23,900 --> 01:21:29,000 Καθιστούν πολύ εύκολη. Όλα αυτά, λέει, ουσιαστικά, 1242 01:21:29,000 --> 01:21:34,950 να είναι εύκολο για τον χρήστη να το χρησιμοποιήσει? δεν πρόκειται για ένα γιγαντιαίο σταγόνα του κειμένου όπως αυτό slide είναι να κάνει, στην πραγματικότητα. 1243 01:21:34,950 --> 01:21:38,020 Απλά θέλουν να είναι κάτι για το οποίο είναι πολύ εύκολο για κάποιον να πάει στο 1244 01:21:38,020 --> 01:21:40,800 και να κάνουν ό, τι θέλουν να κάνουν. 1245 01:21:40,800 --> 01:21:42,920 Δεν θέλετε να πρέπει να πλοηγηθείτε 5 σελίδες 1246 01:21:42,920 --> 01:21:45,460 για να φτάσουμε στην πρωταρχική σας λειτουργία του site σας. 1247 01:21:45,460 --> 01:21:49,290 Αν η Google είχε 5 σελίδες πριν θα μπορούσε ακόμη και να αναζητήσετε κάτι, 1248 01:21:49,290 --> 01:21:53,080 κανείς δεν θα το χρησιμοποιήσει. 1249 01:21:53,080 --> 01:21:55,890 Και τέλος, το πρωτότυπο έγγραφο, ομάδα εστίασης. 1250 01:21:55,890 --> 01:21:59,220 Έχετε καλό σχεδιασμό και τις πρακτικές δοκιμές. 1251 01:21:59,220 --> 01:22:00,730 Ακριβώς επειδή νομίζετε ότι λειτουργεί για σας, 1252 01:22:00,730 --> 01:22:04,860 δεν σημαίνει ότι κάποιος άλλος νομίζει ότι δουλεύει. 1253 01:22:04,860 --> 01:22:14,490 Αλλά ναι, αυτό είναι όλο. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]