1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> დევიდ ჯ Malan: ყველა უფლება. 3 00:00:12,900 --> 00:00:16,790 ასე რომ, კეთილი იყოს პირველი CS50 postmortem განთავსების ვიქტორინა. 4 00:00:16,790 --> 00:00:18,340 გვეგონა ჩვენ ავღნიშნო ინაუგურაცია ამ ტრადიციას წელს. 5 00:00:18,340 --> 00:00:20,960 და ეს იქნება შესაძლებლობა გავლა 6 00:00:20,960 --> 00:00:22,220 გადაწყვეტილებები ვიქტორინა. 7 00:00:22,220 --> 00:00:26,160 და ჩვენ დააჩქაროს ან შენელდება საფუძველზე ინტერესი იმ აქ. 8 00:00:26,160 --> 00:00:29,730 >> ასე რომ, თქვენ ალბათ აქ იმიტომ, რომ თქვენ დაინტერესებული, თუ როგორ შეიძლება ან 9 00:00:29,730 --> 00:00:31,170 უნდა პასუხი ზოგიერთ ეს პრობლემები. 10 00:00:31,170 --> 00:00:33,300 მაშ, რატომ არ უნდა შევხედოთ ამ განყოფილების პირველი? 11 00:00:33,300 --> 00:00:34,450 ასე მიღების სტრიქონები. 12 00:00:34,450 --> 00:00:37,600 ეს მისცა თქვენ სამი სხვადასხვა ვერსია პროგრამა რომ იყო, საბოლოო ჯამში, 13 00:00:37,600 --> 00:00:39,650 იმას ნიშნავდა, რომ მიიღოს სიმებიანი საწყისი მომხმარებელი. 14 00:00:39,650 --> 00:00:42,530 თუ არა ეს, რომ იყო დარჩა, რათა დადგინდეს. 15 00:00:42,530 --> 00:00:45,150 >> და ჩვენ დასმული შეკითხვა 0, ვარაუდობენ, რომ მობილური 1 16 00:00:45,150 --> 00:00:46,400 შედგენილი და დასაჯეს. 17 00:00:46,400 --> 00:00:48,860 რატომ შეიძლება პროგრამის segfault? 18 00:00:48,860 --> 00:00:51,150 ერთი შეხედვით, რაიმე შემოთავაზება რატომ? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 ჰო. 21 00:00:54,489 --> 00:00:59,260 >> აუდიტორია: ასე მახსოვს ხედავს ამ წინა მაგალითი ეძებს 22 00:00:59,260 --> 00:01:05,506 char * s და ხედავს, რომ სკანირების და ხედავს, იმიტომ, რომ ეს მაჩვენებელი, თუ როგორ 23 00:01:05,506 --> 00:01:07,971 არ შეეხება, რაც თქვენ დასკანირებული წელს? 24 00:01:07,971 --> 00:01:10,940 ეს არის ავტორის ან მისამართი s? 25 00:01:10,940 --> 00:01:11,180 >> დევიდ ჯ Malan: OK. 26 00:01:11,180 --> 00:01:11,480 კარგი. 27 00:01:11,480 --> 00:01:14,830 ასე რომ, საბოლოო ჯამში, წყაროს რაიმე პრობლემა სავარაუდოდ შემცირებას აპირებს 28 00:01:14,830 --> 00:01:16,210 რომ ცვლადი s. 29 00:01:16,210 --> 00:01:17,280 და ეს მართლაც განსხვავებულია. 30 00:01:17,280 --> 00:01:19,900 მონაცემები ტიპის რომ ცვლადი არის char *, რაც იმას ნიშნავს, რომ ის აპირებს 31 00:01:19,900 --> 00:01:22,570 შეიცავდეს მისამართი ხასიათი. 32 00:01:22,570 --> 00:01:23,850 და მასში მდგომარეობს ინსაითი. 33 00:01:23,850 --> 00:01:28,330 ის აპირებს შეიცავდეს მისამართი ხასიათი, უფრო ზოგადად, 34 00:01:28,330 --> 00:01:32,110 მისამართი პირველი პერსონაჟი მთელი ბლოკი სიმბოლო. 35 00:01:32,110 --> 00:01:36,680 >> მაგრამ დაჭერა არის, რომ სკანირების s, მიზანი ცხოვრება, ეძლევა მისამართი და მიეცა 36 00:01:36,680 --> 00:01:40,960 ფორმატი კოდი, ისევე როგორც% s, წაკითხული სიმებიანი შევიდა ბლოკი 37 00:01:40,960 --> 00:01:42,330 მეხსიერების იმ მისამართზე. 38 00:01:42,330 --> 00:01:46,040 არამედ იმიტომ, რომ არ არსებობს თანაბარი ნიშანი ადრე რომ მძიმით პირველი 39 00:01:46,040 --> 00:01:49,310 ხაზი კოდი, იმიტომ, რომ ჩვენ არ რეალურად გამოყოფს ნებისმიერი მეხსიერების 40 00:01:49,310 --> 00:01:53,020 malloc, რადგან იგი პრაქტიკულად არ გამოყოფს მასივი ზოგიერთი size, ყველა 41 00:01:53,020 --> 00:01:57,620 თქვენ აკეთებთ კითხულობს მომხმარებლის ანკეტის კლავიატურის input შევიდა ზოგიერთი სრული 42 00:01:57,620 --> 00:02:00,490 ნაგვის ღირებულება, რომელიც არის ნანახია იყოს. 43 00:02:00,490 --> 00:02:04,480 ასე რომ, შანსი თქვენ აპირებს segfault თუ რომ მისამართი არ უბრალოდ ასე მოხდეს 44 00:02:04,480 --> 00:02:08,009 იყოს ღირებულება რომ თქვენ შეგიძლიათ, ფაქტობრივად, ვწერ. 45 00:02:08,009 --> 00:02:10,889 ისე ცუდი არ გამოუყოს თქვენი მეხსიერება არსებობს. 46 00:02:10,889 --> 00:02:13,150 >> ასე რომ, კითხვა 1, ვკითხეთ, ვარაუდობენ, რომ მობილური 2 47 00:02:13,150 --> 00:02:14,230 შედგენილი და დასაჯეს. 48 00:02:14,230 --> 00:02:15,900 რატომ შეიძლება ამ პროგრამის segfault? 49 00:02:15,900 --> 00:02:17,990 ასე რომ, ეს ერთი არის ნაკლები buggy. 50 00:02:17,990 --> 00:02:21,470 და იქ მართლაც მხოლოდ ერთი ნათელი გზა, სადაც შეგიძლიათ 51 00:02:21,470 --> 00:02:22,810 გამოიწვიოს segfault აქ. 52 00:02:22,810 --> 00:02:23,730 და ეს არის თემატური. 53 00:02:23,730 --> 00:02:28,180 ნებისმიერ დროს ჩვენ გამოყენებით c მეხსიერებაში, რა შეგიძლიათ გააკეთოთ, რათა გამოიწვიოს segfault 54 00:02:28,180 --> 00:02:30,718 ერთად ვერსია 2? 55 00:02:30,718 --> 00:02:35,560 >> აუდიტორია: თუ თქვენ იყენებთ, რომ შეყვანის სიმებიანი რომ უმეტეს 49 56 00:02:35,560 --> 00:02:35,975 სიმბოლო. 57 00:02:35,975 --> 00:02:37,260 >> დევიდ ჯ Malan: ზუსტად. 58 00:02:37,260 --> 00:02:41,420 ნებისმიერ დროს ხედავთ რაიმე ფიქსირებული სიგრძის როდესაც საქმე მასივი, თქვენი 59 00:02:41,420 --> 00:02:44,650 რადარის უნდა წავიდეს off რომ ეს შეიძლება იყოს პრობლემატური თუ თქვენ არ შემოწმების 60 00:02:44,650 --> 00:02:45,810 საზღვრების მასივი. 61 00:02:45,810 --> 00:02:46,650 და ეს პრობლემა აქ. 62 00:02:46,650 --> 00:02:47,910 ჩვენ ჯერ კიდევ გამოყენებით scanf. 63 00:02:47,910 --> 00:02:52,200 ჩვენ ჯერ კიდევ გამოყენებით% s, რაც იმას ნიშნავს, ცდილობენ წაკითხვის string საწყისი მომხმარებელს. 64 00:02:52,200 --> 00:02:56,300 ეს იქნება წაიკითხა შევიდა s, რომელიც, ამ ეტაპზე, ეფექტურად 65 00:02:56,300 --> 00:02:58,570 მისამართი ბლოკი მეხსიერება ან ის ექვივალენტი. 66 00:02:58,570 --> 00:03:02,080 ეს სახელწოდება მასივი გმირები მეხსიერება. 67 00:03:02,080 --> 00:03:07,610 >> მაგრამ სწორედ რომ, თუ თქვენ წაიკითხა სიმებიანი რომ ის უფრო მეტია, ვიდრე 49 პერსონაჟი, 49 68 00:03:07,610 --> 00:03:10,440 რადგან თქვენ უნდა ოთახი backslash 0, თქვენ აპირებს overflow 69 00:03:10,440 --> 00:03:11,390 რომ ბუფერული. 70 00:03:11,390 --> 00:03:16,410 და თქვენ შესაძლოა გაუმართლა და შეძლებს დაწერა 51 ხასიათი, 52, 53. 71 00:03:16,410 --> 00:03:18,560 მაგრამ რაღაც მომენტში, OS თქმას, no. 72 00:03:18,560 --> 00:03:21,270 ეს ნამდვილად არ არის მეხსიერების თქვენ საშუალება მისცა შეეხოთ. 73 00:03:21,270 --> 00:03:23,380 და პროგრამა აპირებს segfault. 74 00:03:23,380 --> 00:03:26,650 >> ასე რომ, იქ, heuristics უნდა იყოს დროს, თქვენ მოხვდით ფიქსირებული სიგრძის, თქვენ უნდა 75 00:03:26,650 --> 00:03:30,150 რათა დარწმუნდეთ, რომ თქვენ შემოწმების ხანგრძლივობა რასაც ეს თქვენ ცდილობთ 76 00:03:30,150 --> 00:03:31,090 წაკითხვის მივანიჭო. 77 00:03:31,090 --> 00:03:35,110 >> აუდიტორია: ასე უნდა გადაწყვიტოს, რომ თქვენ შეიძლება არ ჰქონდა განაცხადი შემოწმების რეალურად 78 00:03:35,110 --> 00:03:37,140 არის სიგრძეზე მეტი მეტი ან ნაკლები? 79 00:03:37,140 --> 00:03:37,730 >> დევიდ ჯ Malan: აბსოლუტურად. 80 00:03:37,730 --> 00:03:41,706 თქვენ უბრალოდ უნდა მდგომარეობაშია რომ ამბობს, თუ - 81 00:03:41,706 --> 00:03:46,080 უფრო სწორად, თქვენ არ ემთხვეოდეს ვიცი წინასწარ რამდენი გმირები 82 00:03:46,080 --> 00:03:49,060 მომხმარებლის აპირებს აკრიფოთ, რადგან თქვენ გაქვთ ქათამი და კვერცხი. 83 00:03:49,060 --> 00:03:51,860 , სანამ თქვენ წაიკითხავს ერთად scanf შეგიძლიათ გაერკვნენ, თუ რამდენი ხანი არის. 84 00:03:51,860 --> 00:03:54,500 მაგრამ იმ ეტაპზე, ძალიან გვიან, რადგან თქვენ უკვე წაიკითხა იგი 85 00:03:54,500 --> 00:03:55,710 ზოგიერთი ბლოკი მეხსიერება. 86 00:03:55,710 --> 00:03:59,590 ასე რომ, როგორც განზე, CS50 ბიბლიოთეკა თავს არიდებს ეს საკითხი საერთოდ, გაწვევას 87 00:03:59,590 --> 00:04:01,060 გამოყენებით fgetc. 88 00:04:01,060 --> 00:04:05,390 და ასე ერთი ხასიათი დროს, tip-toeing ერთად, იცის, რომ თქვენ 89 00:04:05,390 --> 00:04:08,060 ვერ overflow ხასიათი თუ წაიკითხოთ ერთ დროს. 90 00:04:08,060 --> 00:04:11,580 >> დაჭერა არის GetString გაწვევას არის რომ ჩვენ მუდმივად ხელახლა ზომა 91 00:04:11,580 --> 00:04:13,590 რომ ბლოკი მეხსიერება, რომელიც მხოლოდ ტკივილი. 92 00:04:13,590 --> 00:04:15,310 ეს ბევრი ხაზები კოდი გაგვაჩნია. 93 00:04:15,310 --> 00:04:18,779 ასე რომ, კიდევ ერთი მიდგომა იქნებოდა რეალურად გამოიყენოს დეიდაშვილი, ასე რომ, 94 00:04:18,779 --> 00:04:19,790 ვთქვათ, scanf. 95 00:04:19,790 --> 00:04:22,820 არსებობს ვარიანტი ბევრი ამ ფუნქციები, რომელიც რეალურად შესამოწმებლად 96 00:04:22,820 --> 00:04:25,870 ხანგრძლივობა რამდენი გმირები თქვენ შეიძლება წაიკითხოთ მაქსიმალურად. 97 00:04:25,870 --> 00:04:29,430 და თქვენ ვერ დააკონკრეტა, არ კითხულობენ 50 ზე მეტი პერსონაჟი. 98 00:04:29,430 --> 00:04:34,110 ასე რომ იქნება კიდევ ერთი მიდგომა, მაგრამ ნაკლებად დამთმობი დიდი საშუალებებით. 99 00:04:34,110 --> 00:04:37,040 >> ასე რომ, კითხვა 2 სთხოვს, ვივარაუდოთ, რომ მობილური 3 შედგენილია და დასაჯეს. 100 00:04:37,040 --> 00:04:39,960 რატომ შეიძლება, რომ პროგრამა segfault? 101 00:04:39,960 --> 00:04:42,650 ასე რომ, ეს არის რეალურად იგივე პასუხის გაცემა, მიუხედავად იმისა, რომ 102 00:04:42,650 --> 00:04:43,590 გამოიყურება პატარა fancier. 103 00:04:43,590 --> 00:04:46,440 ჩვენ გამოყენებით malloc, რომელიც იგრძნობა ჩვენ ვაძლევთ საკუთარ თავს დამატებითი პარამეტრები. 104 00:04:46,440 --> 00:04:48,030 და მაშინ ჩვენ ათავისუფლებს, რომ მეხსიერების დასასრულს. 105 00:04:48,030 --> 00:04:49,580 ეს ჯერ კიდევ მხოლოდ 50 ბაიტი მეხსიერება. 106 00:04:49,580 --> 00:04:53,620 ასე რომ, ჩვენ შეიძლება მაინც ცდილობენ წაიკითხონ 51, 52, 1000 bytes. 107 00:04:53,620 --> 00:04:55,830 ის აპირებს segfault for ზუსტად იგივე მიზეზის გამო. 108 00:04:55,830 --> 00:04:57,530 >> მაგრამ არსებობს კიდევ ერთი მიზეზი იყო. 109 00:04:57,530 --> 00:05:03,890 რა შეიძლება malloc დაბრუნების გარდა, მისამართი ბლოკი მეხსიერება? 110 00:05:03,890 --> 00:05:04,920 ეს შეიძლება დაუბრუნდეს null. 111 00:05:04,920 --> 00:05:07,560 და იმიტომ, რომ ჩვენ არ შემოწმების რომ, ჩვენ შეიძლება თავისსავე 112 00:05:07,560 --> 00:05:11,350 stupid კიდევ ერთი მიზეზი, რომელიც არის ის, რომ ჩვენ შეიძლება ვეუბნებოდი scanf, წაკითხული 113 00:05:11,350 --> 00:05:16,050 მომხმარებლის შეყვანის კლავიატურის თარგმნეს 0 ადგილას, AKA null. 114 00:05:16,050 --> 00:05:18,890 და რომ, ძალიან, აუცილებლად გამოიწვიოს segfault. 115 00:05:18,890 --> 00:05:21,590 ისე ვიქტორინა განზრახვა, რომ ჩვენ არ მიიღება არც იმ, როგორც 116 00:05:21,590 --> 00:05:22,740 მოქმედებს მიზეზი. 117 00:05:22,740 --> 00:05:23,420 ერთი იდენტურია. 118 00:05:23,420 --> 00:05:25,720 ერთი არის ცოტა უფრო რთული. 119 00:05:25,720 --> 00:05:28,975 >> და ბოლოს, დაკავშირებით პროგრამის გამოყენების მეხსიერება, როგორ ვერსია 2 და 120 00:05:28,975 --> 00:05:30,350 ვერსია 3 განსხვავდება? 121 00:05:30,350 --> 00:05:35,070 ასე რომ, თუ რა ღირს, ჩვენ ვნახეთ როგორც ჩანს, გაუთავებელი მიწოდების შესაძლო 122 00:05:35,070 --> 00:05:35,770 პასუხი ამ. 123 00:05:35,770 --> 00:05:39,300 და მათ შორის ხალხის პასუხი, რა ვიყავით იმედი, მაგრამ ჩვენ მიღებული სხვა 124 00:05:39,300 --> 00:05:42,250 რამ, გარკვეული ნახსენები ის ფაქტი, რომ ვერსია 2 გამოყენებით 125 00:05:42,250 --> 00:05:44,560 ე.წ. დასტის. 126 00:05:44,560 --> 00:05:46,710 Version 3 იყენებს ბევრი. 127 00:05:46,710 --> 00:05:50,060 და ფუნქციურად, ეს ნამდვილად არ ყველა რომ ბევრი განსხვავება. 128 00:05:50,060 --> 00:05:54,040 დასასრულს დღეს, ჩვენ ჯერ კიდევ უბრალოდ მიღების 50 ბაიტი მეხსიერება. 129 00:05:54,040 --> 00:05:56,640 >> მაგრამ ეს იყო ერთი შესაძლო პასუხი რომ ჩვენ ეძებს. 130 00:05:56,640 --> 00:05:59,730 მაგრამ თქვენ ნახავთ, როგორც თქვენ თქვენი ტესტებში უკან TFs, რომ ჩვენ გავაკეთეთ 131 00:05:59,730 --> 00:06:04,330 მიიღოს სხვა დისკუსიებში მათი განსხვავებული მიზნებისათვის მეხსიერების ასევე. 132 00:06:04,330 --> 00:06:08,600 მაგრამ დასტის და ბევრი იქნებოდა მარტივი პასუხი წასვლა. 133 00:06:08,600 --> 00:06:11,150 რაიმე შეკითხვა? 134 00:06:11,150 --> 00:06:12,400 მე გაძლევთ Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> რობ Bowden: ასე რომ, პრობლემა 4. 137 00:06:20,210 --> 00:06:21,985 ეს არის, სადაც თქვენ უნდა შეავსოთ რაოდენობის ბაიტი out of ყველა 138 00:06:21,985 --> 00:06:23,460 ამ სხვადასხვა ტიპის გამოყენებული. 139 00:06:23,460 --> 00:06:24,830 ასე რომ, პირველი, რაც ჩვენ ვხედავთ. 140 00:06:24,830 --> 00:06:27,930 ვივარაუდოთ, 32-bit არქიტექტურის, მოსწონს ეს CS50 ელექტრო მოწყობილობების. 141 00:06:27,930 --> 00:06:33,530 ასე რომ, ერთი ფუნდამენტური რამ 32-bit არქიტექტურის, რომელიც გვეუბნება, 142 00:06:33,530 --> 00:06:37,490 ზუსტად რამდენად დიდი მაჩვენებელი აპირებს იყოს არქიტექტურა. 143 00:06:37,490 --> 00:06:43,020 >> ასე რომ, დაუყოვნებლივ, ჩვენ ვიცით, რომ ნებისმიერი მაჩვენებელი ტიპის 32 ბიტი ან 4 ბაიტი. 144 00:06:43,020 --> 00:06:46,010 ასე შევხედავთ ამ მაგიდასთან, კვანძის * მომცეთ ტიპის. 145 00:06:46,010 --> 00:06:47,250 ეს იქნება 4 ბაიტი. 146 00:06:47,250 --> 00:06:51,640 Struct კვანძის *, რომ ფაქტიურად იდენტური კვანძის ვარსკვლავი. 147 00:06:51,640 --> 00:06:53,590 და ისე, რომ იქნება 4 ბაიტი. 148 00:06:53,590 --> 00:06:58,270 სიმებიანი, ასე რომ არ ჰგავს მაჩვენებელი არ არის, მაგრამ typedef, 149 00:06:58,270 --> 00:07:01,590 string მხოლოდ char *, რომელიც არის მაჩვენებელი ტიპის. 150 00:07:01,590 --> 00:07:03,550 ასე რომ იქნება 4 ბაიტი. 151 00:07:03,550 --> 00:07:06,150 >> ასე რომ, ეს სამი არიან 4 ბაიტი. 152 00:07:06,150 --> 00:07:09,350 ახლა კვანძის და სტუდენტი არის ცოტა უფრო რთული. 153 00:07:09,350 --> 00:07:15,160 ასე ეძებს კვანძის და სტუდენტი, ჩვენ ვხედავთ კვანძის, როგორც მთელი რიცხვი და მაჩვენებელი. 154 00:07:15,160 --> 00:07:18,050 და სტუდენტი არის ორი პოინტერები შიგნით მას. 155 00:07:18,050 --> 00:07:23,340 ასე რომ, როგორც მინიმუმ, ჩვენს შემთხვევაში აქ, სხვათა შორის, რომ ჩვენ დასრულდება მდე გაანგარიშების ზომა 156 00:07:23,340 --> 00:07:27,020 ამ struct მხოლოდ დაამატოთ მდე ყველაფერი რომ არის შიგნით struct. 157 00:07:27,020 --> 00:07:30,690 >> ასე რომ, კვანძში, ჩვენ მთელი რიცხვი, რომელიც არის 4 ბაიტი. 158 00:07:30,690 --> 00:07:32,830 ჩვენ მომცეთ, რომელიც 4 ბაიტი. 159 00:07:32,830 --> 00:07:35,820 და ა.შ. ერთი კვანძის აპირებს დასჭირდეს 8 ბაიტი. 160 00:07:35,820 --> 00:07:39,490 და ანალოგიურად სტუდენტი, ჩვენ გვაქვს მაჩვენებელი, რომ 4 ბაიტი და სხვა 161 00:07:39,490 --> 00:07:40,770 მაჩვენებელი, რომ 4 ბაიტი. 162 00:07:40,770 --> 00:07:43,180 ასე რომ აპირებს დასრულდება მდე 8 ბაიტი. 163 00:07:43,180 --> 00:07:45,480 ასე რომ კვანძის და სტუდენტური 8 bytes. 164 00:07:45,480 --> 00:07:48,950 და ეს სამი არიან 4 ბაიტი. 165 00:07:48,950 --> 00:07:50,240 კითხვები რომ? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 დიახ. 168 00:07:54,990 --> 00:07:58,413 >> აუდიტორია: ეს იყო 64-bit არქიტექტურა, იქნებოდა, რომ 169 00:07:58,413 --> 00:07:59,880 გაორმაგება ყველა მათგანი? 170 00:07:59,880 --> 00:08:01,790 >> რობ Bowden: ეს არ გაორმაგება ყველა მათგანი. 171 00:08:01,790 --> 00:08:05,830 ასე რომ, 64-bit არქიტექტურის, ეს, კიდევ ერთხელ, ცვლილებები, რომ ფუნდამენტური რამ, რომ 172 00:08:05,830 --> 00:08:08,910 მაჩვენებელი არის 64 ბიტი. 173 00:08:08,910 --> 00:08:09,290 ჰო. 174 00:08:09,290 --> 00:08:10,930 ასე რომ კურსორი არის 8 ბაიტი. 175 00:08:10,930 --> 00:08:15,420 ასე რომ, ეს რომ იყო 4 bytes იქნება 8 ბაიტი. 176 00:08:15,420 --> 00:08:18,617 სტუდენტი, რომელიც ორ მითითებას, კარგად, ახლა ის აპირებს 177 00:08:18,617 --> 00:08:19,800 იქნება 8 ბაიტი, 8 bytes. 178 00:08:19,800 --> 00:08:21,980 ის აპირებს, რომ 16 bytes. 179 00:08:21,980 --> 00:08:25,710 >> მაგრამ კვანძის ჯერ კიდევ 4 ბაიტი. 180 00:08:25,710 --> 00:08:27,800 ასე რომ, ეს მაჩვენებელი აპირებს უნდა იყოს 8 ბაიტი. 181 00:08:27,800 --> 00:08:28,930 ეს არის 4 ბაიტი. 182 00:08:28,930 --> 00:08:30,870 ასე რომ კვანძის მხოლოდ აპირებს უნდა იყოს 12 ბაიტი. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 ნებისმიერი სხვა სახის კითხვებით, რომ ერთი? 185 00:08:39,280 --> 00:08:44,500 ასე რომ, მომდევნო ერთი, ეს არის HTTP სტატუსის კოდები. 186 00:08:44,500 --> 00:08:48,000 და თქვენ უნდა აღწერს გარემოებები რომლის თანახმადაც, ეს შეიძლება 187 00:08:48,000 --> 00:08:49,810 დაუბრუნდება თქვენ. 188 00:08:49,810 --> 00:08:56,730 ერთი პრობლემა, რომ გავიგე, რომ ზოგიერთი სტუდენტი ის არის, რომ ისინი ცდილობდნენ, რათა 189 00:08:56,730 --> 00:08:58,950 შეცდომები იყოს კლიენტის ბოლომდე. 190 00:08:58,950 --> 00:09:02,320 ასე რომ, როდესაც ჩვენ ვცდილობთ, რათა თხოვნა სერვერზე, რაღაც მიდის 191 00:09:02,320 --> 00:09:03,820 არასწორი ჩვენს ბოლომდე. 192 00:09:03,820 --> 00:09:07,660 მაგრამ ზოგადად, ეს კოდები მიმდინარეობს დაბრუნდა სერვერის მიერ. 193 00:09:07,660 --> 00:09:11,720 ასე რომ ჩვენ გვინდა, რომ გაერკვნენ, თუ რა ხდება არასწორი ან უფლება სერვერზე, 194 00:09:11,720 --> 00:09:14,280 იწვევს ეს ყველაფერი უნდა დაბრუნდნენ. 195 00:09:14,280 --> 00:09:18,670 რატომ შეიძლება სერვერზე ბრუნდება სტატუსის კოდი 200? 196 00:09:18,670 --> 00:09:19,920 ნებისმიერი აზრები? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> ჰო. 199 00:09:23,730 --> 00:09:27,850 ასე რომ, რაღაც შესახებ წარმატებით მოთხოვნის გაიარა. 200 00:09:27,850 --> 00:09:30,260 და ისინი დაიბრუნებენ რასაც თქვენ სთხოვა. 201 00:09:30,260 --> 00:09:32,240 ასე რომ, ყველაფერი იყო ჯარიმა. 202 00:09:32,240 --> 00:09:35,662 რაც შეეხება 302 ვიდეო? 203 00:09:35,662 --> 00:09:36,618 ჰო. 204 00:09:36,618 --> 00:09:39,008 >> აუდიტორია: სერვერის ეძებდა რას მოითხოვა. 205 00:09:39,008 --> 00:09:40,442 მაგრამ ეს ვერ პოულობთ მას. 206 00:09:40,442 --> 00:09:42,850 ასე რომ იქ შეცდომა. 207 00:09:42,850 --> 00:09:47,720 >> რობ Bowden: ასე სერვერი ეძებს რა უნდოდა. 208 00:09:47,720 --> 00:09:51,682 ასე რომ, უბრალოდ ეძებს აქ, 302 ი, ეს იყო მიაგნეს. 209 00:09:51,682 --> 00:09:53,035 >> აუდიტორია: მე უკაცრავად. 210 00:09:53,035 --> 00:09:54,388 ნაპოვნია იმას ნიშნავს, რომ ისინი არ საპოვნელად. 211 00:09:54,388 --> 00:09:55,638 უკაცრავად. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> რობ Bowden: ასე რომ 302 ი. 214 00:10:00,160 --> 00:10:02,350 სერვერზე ვერ პოულობენ რა უნდოდა. 215 00:10:02,350 --> 00:10:04,640 >> აუდიტორია: მაგრამ ეს არ აჩვენებს ეს? 216 00:10:04,640 --> 00:10:08,180 >> რობ Bowden: განსხვავება ამ 302 და 200 არის ის, რომ 217 00:10:08,180 --> 00:10:09,280 იცის, რა გსურთ. 218 00:10:09,280 --> 00:10:12,000 მაგრამ ეს არ არის ზუსტად სადაც თქვენ სურდა ვთხოვო. 219 00:10:12,000 --> 00:10:14,580 ასე რომ 302 არის ტიპიური გადამისამართება. 220 00:10:14,580 --> 00:10:16,510 ასე რომ, თქვენს მიერ მოთხოვნილი გვერდი. 221 00:10:16,510 --> 00:10:19,590 მან იცის, რა, მინდა უკან დაბრუნებას თქვენ ამ. 222 00:10:19,590 --> 00:10:21,070 მაგრამ ეს არის სხვადასხვა URL. 223 00:10:21,070 --> 00:10:23,534 ასე რომ, hey, თქვენ ნამდვილად გინდათ ეს. 224 00:10:23,534 --> 00:10:26,950 >> დევიდ ჯ Malan: ეს ნაჭერი რომ განაცხადა, რომ მივეცით თქვენ ბიჭები გადამისამართება 225 00:10:26,950 --> 00:10:30,830 ფუნქცია, რომელიც გამოიყენება header ფუნქცია რაც, თავის მხრივ, იბეჭდება ადგილმდებარეობა, 226 00:10:30,830 --> 00:10:34,110 მსხვილი ნაწლავის და შემდეგ URL რომლის გსურთ უარყოფს შესახებ. 227 00:10:34,110 --> 00:10:37,480 მიუხედავად იმისა, რომ თქვენ ვერ ვხედავ 302 ღიად არსებობს, რომ არის ის, რაც PHP 228 00:10:37,480 --> 00:10:41,550 რომ magically ჩასმა როგორც header ამბობდა ზუსტად რა რობ განაცხადა, რომ - 229 00:10:41,550 --> 00:10:41,930 ი. 230 00:10:41,930 --> 00:10:43,180 მაგრამ აქ ნაცვლად. 231 00:10:43,180 --> 00:10:45,960 232 00:10:45,960 --> 00:10:46,160 >> რობ Bowden: OK. 233 00:10:46,160 --> 00:10:47,630 ასე რომ, რაც დაახლოებით 403 აკრძალულია? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> აუდიტორია: მე ვფიქრობ, რომ სერვერზე ძირითადად განაცხადა, რომ კლიენტის 236 00:10:57,120 --> 00:10:59,970 ვერ შედიხართ მთავარ გვერდზე. 237 00:10:59,970 --> 00:11:03,260 >> რობ Bowden: ასე რომ, დიახ. 238 00:11:03,260 --> 00:11:07,670 ისე, ტიპიური პასუხი ჩვენ ველოდებით რაღაც, ფაილი 239 00:11:07,670 --> 00:11:08,920 არ chmodded სათანადოდ. 240 00:11:08,920 --> 00:11:11,590 ეს, ალბათ, რა პირობებში თქვენ ხედავთ მათ. 241 00:11:11,590 --> 00:11:18,920 მაგრამ არის მიზეზი იმისა, რომ კლიენტის შეიძლება იყოს დამნაშავე აქ. 242 00:11:18,920 --> 00:11:20,440 იქ რეალურად კიდევ ერთი შემოწმება კოდი - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 ასე რომ, ეს ძალიან ჰგავს. 245 00:11:22,820 --> 00:11:24,590 >> 401 არის არასანქცირებული. 246 00:11:24,590 --> 00:11:26,130 და 403 აკრძალულია. 247 00:11:26,130 --> 00:11:31,890 და ასე არასანქცირებული თქვენ მხოლოდ კიდევ თუ თქვენ არ ხართ შემოსული 248 00:11:31,890 --> 00:11:34,520 მაგრამ შესასვლელად შეიძლება ნიშნავდეს რომ თქვენ უფლება. 249 00:11:34,520 --> 00:11:37,930 მაგრამ თუ თქვენ უკვე სისტემაში ხართ და თქვენ ჯერ კიდევ არ გაქვთ, მაშინ 250 00:11:37,930 --> 00:11:40,140 ასევე შეგიძლიათ აკრძალულია. 251 00:11:40,140 --> 00:11:45,320 ასე რომ, თუ თქვენ ხართ და არ გაქვთ ნებართვის აკრძალულია ასევე 252 00:11:45,320 --> 00:11:47,164 რაღაც შეგიძლიათ მიიღოთ. 253 00:11:47,164 --> 00:11:48,900 >> დევიდ ჯ Malan: და მექანიზმი რომელიც ამ პრობლემების, როგორც წესი, 254 00:11:48,900 --> 00:11:53,100 მოგვარდება სერვერზე არის მეშვეობით რა ბრძანება? 255 00:11:53,100 --> 00:11:57,700 Chmod, თუ ის, რა თქმა უნდა, უფლებები საკითხი ფაილი ან დასტა. 256 00:11:57,700 --> 00:11:59,220 >> რობ Bowden: მაშინ 404 არ არის ნაპოვნი. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 ჰო. 259 00:12:03,470 --> 00:12:10,150 ასე განსხვავებით 302, სადაც ეს არ იყო ზუსტად სადაც თქვენ გეკითხებით, მაგრამ ეს იცის, რა 260 00:12:10,150 --> 00:12:12,710 გსურთ,, ეს უბრალოდ აქვს არ ვიცი, რა გსურთ. 261 00:12:12,710 --> 00:12:15,648 და თქვენ არ ვითხოვთ რაღაც მოქმედებს. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 ვარ ჩაიდანი და შემდეგ 500 შიდა სერვერზე. 264 00:12:22,310 --> 00:12:24,870 რატომ შეიძლება თქვენ, რომ? 265 00:12:24,870 --> 00:12:26,120 >> ასე segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 მე რეალურად არ ვიცი შეფასების სტანდარტული ამ. 268 00:12:30,640 --> 00:12:34,850 მაგრამ თუ თქვენი PHP კოდი ჰქონდა რაღაც არასწორი ის, თეორიულად, ეს შეიძლება 269 00:12:34,850 --> 00:12:39,650 რეალურად segfault, ამ შემთხვევაში, ეს 500 შიდა შეცდომა სერვერზე, რაღაც 270 00:12:39,650 --> 00:12:41,400 არასწორია თქვენი სერვერის კონფიგურაცია. 271 00:12:41,400 --> 00:12:44,320 ან არსებობს სინტაქსური შეცდომა თქვენი PHP კოდი. 272 00:12:44,320 --> 00:12:46,095 ან რაღაც ცუდი ხდება. 273 00:12:46,095 --> 00:12:48,320 >> დევიდ ჯ Malan: ჩვენ არ ვხედავთ segfault შორის რამდენიმე ხალხის პასუხი. 274 00:12:48,320 --> 00:12:49,490 და ტექნიკურად, ეს არ შეიძლება მოხდეს. 275 00:12:49,490 --> 00:12:53,820 მაგრამ ეს იქნება PHP, პროგრამა დაწერილი სხვა ადამიანებს, რეალურად 276 00:12:53,820 --> 00:12:57,790 segfaulted, რომელიც მხოლოდ იმ შემთხვევაში, თუ იმ ხალხს, ბრალია და დაწერა buggy კოდექსი 277 00:12:57,790 --> 00:13:00,680 მათი თარჯიმანის იქნება PHP თავად segfault. 278 00:13:00,680 --> 00:13:06,460 ასე რომ, მიუხედავად იმისა, რომ 500 ჰგავს segfault სული, ის თითქმის ყოველთვის 279 00:13:06,460 --> 00:13:10,490 შედეგი კონფიგურაციის ფაილი საკითხი თქვენი სერვერზე, ან, როგორც Rob განაცხადა, 280 00:13:10,490 --> 00:13:13,200 სინტაქსური შეცდომა, ისევე როგორც თქვენ არ დახუროს გაცემა. 281 00:13:13,200 --> 00:13:16,180 ან თქვენ დაკარგული მძიმით სადღაც. 282 00:13:16,180 --> 00:13:23,677 >> აუდიტორია: ასე რომ Shuttle pset, მე ვფიქრობ, როდესაც მე ეს ერთხელ მე დაწკაპავთ 283 00:13:23,677 --> 00:13:26,300 ბრაუზერი, მაგრამ არაფერი გამოვიდა, იმას, რასაც თეთრი გვერდზე. 284 00:13:26,300 --> 00:13:28,056 მაგრამ ეს იყო, რადგან კოდი. 285 00:13:28,056 --> 00:13:29,440 ვფიქრობ, რომ JavaScript, არა? 286 00:13:29,440 --> 00:13:29,770 >> რობ Bowden: ჰო. 287 00:13:29,770 --> 00:13:31,180 >> აუდიტორია: Would რომ შეცდომა კვლავ ამუშავება? 288 00:13:31,180 --> 00:13:34,290 >> რობ Bowden: ასე რომ, თქვენ არ მიღებული ეს შეცდომა, რადგან ყველაფერი 289 00:13:34,290 --> 00:13:36,930 ეხლა სერვერზე პერსპექტივა სრულიად ჯარიმა. 290 00:13:36,930 --> 00:13:39,090 მაგრამ თქვენ მოითხოვა index.html. 291 00:13:39,090 --> 00:13:42,000 თქვენს მიერ მოთხოვნილი shuttle.js და service.js. 292 00:13:42,000 --> 00:13:44,580 და ეს შეძლო წარმატებით დაბრუნდნენ თქვენ ყველა იმ რამ - 293 00:13:44,580 --> 00:13:44,980 200. 294 00:13:44,980 --> 00:13:45,680 OK. 295 00:13:45,680 --> 00:13:49,330 ეს მხოლოდ მაშინ, როდესაც თქვენს ბრაუზერში ცდილობდა ინტერპრეტაცია JavaScript კოდი, რომელიც 296 00:13:49,330 --> 00:13:51,370 ეს იგივეა, დაველოდოთ, ეს არ არის ძალაშია JavaScript შეცდომა. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 ნებისმიერი სხვა კითხვები? 299 00:13:58,210 --> 00:14:00,750 ყველა უფლება. 300 00:14:00,750 --> 00:14:04,120 >> დევიდ ჯ Malan: ასე რომ, მომავალ up იყო ნომერი 11. 301 00:14:04,120 --> 00:14:07,610 11 იყო scariest ბევრი ადამიანი. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 ასე რომ, ყველაზე მნიშვნელოვანი რამ აღვნიშნო აქ იყო, რომ ეს იყო, რა თქმა უნდა, დაახლოებით 304 00:14:18,570 --> 00:14:19,840 ორმაგად უკავშირდება სიაში. 305 00:14:19,840 --> 00:14:23,160 მაგრამ ეს არ იყო იგივე, რაც გასულ წელს ორმაგად უკავშირდება სიაში პრობლემა, 306 00:14:23,160 --> 00:14:27,170 რომელიც არ მოგცემთ caveat რომ სიაში შეიძლება, ფაქტობრივად, იქნება დაუხარისხებელი. 307 00:14:27,170 --> 00:14:29,640 >> ასე რომ, ის ფაქტი, რომ სიაში იყო დაუხარისხებელი და ის ფაქტი, რომ სიტყვა იყო 308 00:14:29,640 --> 00:14:32,930 ხაზი გაუსვა იქ იყო გათვლილი გადმომეცა რომ ეს არის რეალურად გამარტივება 309 00:14:32,930 --> 00:14:35,430 რა სხვაგვარად იქნებოდა უფრო რთული პრობლემა 310 00:14:35,430 --> 00:14:36,600 და აღარ იყო. 311 00:14:36,600 --> 00:14:40,760 ასე რომ ჩვეულებრივი შეცდომა აქ იყო შეეძლო შარშანდელი გადაწყვეტა თქვენი ერთი 312 00:14:40,760 --> 00:14:45,580 მასალა და შემდეგ უბრალოდ ბრმად კოპირება რომ ქვემოთ, როგორც პასუხი, რომელიც არის სწორი 313 00:14:45,580 --> 00:14:48,520 პასუხი სხვადასხვა კითხვაზე მსგავსი სულისკვეთება. 314 00:14:48,520 --> 00:14:51,340 მაგრამ subtleties აქ იყო შემდეგნაირად. 315 00:14:51,340 --> 00:14:55,200 >> ასე რომ, ერთი, ჩვენ კვანძის განაცხადა და განსაზღვრული ჩვეულ აქ. 316 00:14:55,200 --> 00:14:59,230 მაშინ ჩვენ განსაზღვრული სიაში იყოს გლობალური მაჩვენებელი ინიციალიზაცია to null. 317 00:14:59,230 --> 00:15:02,150 შემდეგ, როგორც ჩანს, არსებობს ორი ფუნქცია ჩვენ პროტოტიპები აქ, insert 318 00:15:02,150 --> 00:15:03,240 და ამოიღონ. 319 00:15:03,240 --> 00:15:06,600 და მაშინ ჩვენ გვაქვს რამოდენიმე ნიმუში კოდი აქ აკეთებს bunch of insertions. 320 00:15:06,600 --> 00:15:09,930 და მაშინ ჩვენ გთხოვთ შეავსოთ განხორციელების insert ქვემოთ ასეთი 321 00:15:09,930 --> 00:15:14,380 ისე, რომ ეს ჩანართები n შეყვანილი მუდმივ დრო, ასევე ხაზი გაუსვა, 322 00:15:14,380 --> 00:15:15,730 მაშინაც კი, თუ უკვე იმყოფება. 323 00:15:15,730 --> 00:15:20,600 >> ასე რომ, სილამაზის, რათა ჩადეთ მუდმივ დრო არის, რომ ეს გულისხმობს 324 00:15:20,600 --> 00:15:23,060 რომ თქვენ უნდა ჩაწეროთ ახალი კვანძის სად? 325 00:15:23,060 --> 00:15:23,690 Into წინ. 326 00:15:23,690 --> 00:15:27,760 ასე რომ, ეს გამორიცხავს, ​​საბედნიეროდ, მაინც ერთ შემთხვევაში, რომელიც მოითხოვს 327 00:15:27,760 --> 00:15:30,520 კიდევ უფრო ხაზი კოდი, როგორც ეს გააკეთა გასულ წელს კი კლასში, როდესაც ჩვენ 328 00:15:30,520 --> 00:15:34,040 ისაუბრა ამ სახის რამ ადამიანები და ზოგიერთი 329 00:15:34,040 --> 00:15:35,250 სიტყვიერი ფსევდო კოდი. 330 00:15:35,250 --> 00:15:39,190 ასე რომ, გამოსავალი აქ, მოდით გამოტოვოთ მეტი რომ მხოლოდ აქვს ვიზუალური on 331 00:15:39,190 --> 00:15:40,480 ეკრანზე. 332 00:15:40,480 --> 00:15:42,230 >> გაითვალისწინეთ, რომ ჩვენ ვაკეთებთ შემდეგ. 333 00:15:42,230 --> 00:15:45,140 ასევე შეამჩნევთ სხვა გამარტივებას იყო ის, რომ თუნდაც ეს 334 00:15:45,140 --> 00:15:48,280 უკვე, ასე რომ, ეს იმას ნიშნავს, მაშინაც კი, თუ ნომერი უკვე არსებობს, თქვენ შეგიძლიათ 335 00:15:48,280 --> 00:15:50,280 უბრალოდ ბრმად ჩადეთ მეორე ასლი. 336 00:15:50,280 --> 00:15:52,560 და რომ, ძალიან, იყო გათვლილი უნდა იყოს გამარტივება, ასე რომ თქვენ შეიძლება 337 00:15:52,560 --> 00:15:54,940 ფოკუსირება, მართლაც, ზოგიერთი უფრო ინტელექტუალურად საინტერესო ნაწილი და 338 00:15:54,940 --> 00:15:58,090 არა მხოლოდ რამდენიმე დამატებითი შეცდომების შემოწმების მოცემული შეზღუდული დრო. 339 00:15:58,090 --> 00:16:02,880 >> ასე რომ, ამ ნიმუში გადაწყვეტა, ჩვენ გამოყოფს მომცეთ მარცხენა ხელი 340 00:16:02,880 --> 00:16:04,510 მხარეს აქ კვანძში. 341 00:16:04,510 --> 00:16:07,190 ახლა, გააცნობიეროს, რომ მაჩვენებელი, როგორც Rob თქმით, მხოლოდ 32 ბიტი. 342 00:16:07,190 --> 00:16:09,060 და ის ფაქტობრივად არ შეიცავს მისამართი, სანამ 343 00:16:09,060 --> 00:16:09,970 მივანიჭოთ მას მისამართზე. 344 00:16:09,970 --> 00:16:13,220 და ჩვენ გავაკეთებთ, რომ მარჯვენა მხარე მეშვეობით malloc. 345 00:16:13,220 --> 00:16:16,550 მსგავსად კარგი მოქალაქე, ჩვენ შეამოწმოთ, რომ malloc არ არის, ფაქტობრივად, null, ისე, რომ 346 00:16:16,550 --> 00:16:18,690 ჩვენ არ შემთხვევით შექმნა segfault აქ. 347 00:16:18,690 --> 00:16:22,840 და ნებისმიერ დროს თქვენ იყენებთ malloc ცხოვრებაში, თქვენ უნდა შემოწმების for null, ნუუკუე 348 00:16:22,840 --> 00:16:24,090 თქვენ გაქვთ დახვეწილი bug. 349 00:16:24,090 --> 00:16:28,460 >> მაშინ ჩვენ ინიციალიზაცია რომ null მიერ მინიჭების n და წინა და მომავალი. 350 00:16:28,460 --> 00:16:32,450 და ამ შემთხვევაში აქ, მე ინიციალიზაცია წინა null, რადგან ამ 351 00:16:32,450 --> 00:16:34,780 კვანძის იქნება ახალი დასაწყისში ჩემს სიაში. 352 00:16:34,780 --> 00:16:37,050 ასე რომ არ იქნება არაფერი სანამ. 353 00:16:37,050 --> 00:16:42,010 და მინდა არსებითად დამატება არსებულ სიას ახალი კვანძის მიერ 354 00:16:42,010 --> 00:16:44,700 შექმნის შემდეგ ტოლია სიაში თავად. 355 00:16:44,700 --> 00:16:47,120 მაგრამ მე არ კეთდება მხოლოდ ამჟამად. 356 00:16:47,120 --> 00:16:51,780 ასე რომ, თუ სიაში თავად უკვე არსებობდა, და იყო მინიმუმ ერთი კვანძის 357 00:16:51,780 --> 00:16:57,070 უკვე ადგილი, თუ ეს სია აქ მე და ჩადეთ ახალი კვანძის აქ, მე 358 00:16:57,070 --> 00:17:01,840 უნდა დავრწმუნდეთ, რომ ჩემი ყოფილი კვანძის მიუთითებს პირდაპირ ჩემს ახალ კვანძში, 359 00:17:01,840 --> 00:17:04,260 რადგან ეს არის, კიდევ ერთხელ, ორმაგად უკავშირდება სიაში. 360 00:17:04,260 --> 00:17:05,460 >> ასე რომ, ჩვენ გავაკეთოთ საღი აზრის ქვითარი. 361 00:17:05,460 --> 00:17:10,109 თუ სია არ null, თუ არსებობს უკვე ერთი ან მეტი კვანძების არსებობს, მაშინ 362 00:17:10,109 --> 00:17:12,470 დავამატებთ, რომ უკან მინიშნება ასე ვთქვათ. 363 00:17:12,470 --> 00:17:15,420 და შემდეგ ძალიან ბოლო რაც ჩვენ გვჭირდება, ამის გაკეთება რეალურად განახლება გლობალურ 364 00:17:15,420 --> 00:17:20,329 ცვლადი სიაში თავად აღვნიშნო რომ ახალი კვანძში. 365 00:17:20,329 --> 00:17:21,790 ჰო. 366 00:17:21,790 --> 00:17:26,579 >> აუდიტორია: In მაჩვენებელი arrow [INAUDIBLE] უტოლდება null, აკეთებს, რომ 367 00:17:26,579 --> 00:17:30,420 გამკლავება სიაში იმიტომ, სიაში null? 368 00:17:30,420 --> 00:17:30,596 >> დევიდ ჯ Malan: Nope. 369 00:17:30,596 --> 00:17:34,500 ეს უბრალოდ ჩემთვის მყოფი პროაქტიულად ფრთხილად, რომ თუ ეს არის ჩემი 370 00:17:34,500 --> 00:17:38,730 ორიგინალური სიაში შესაძლოა, კიდევ რამდენიმე კვანძების მეტი აქ და მე ჩასმა my 371 00:17:38,730 --> 00:17:42,380 ახალი კვანძის აქ, იქ უნდა არაფერი აქ. 372 00:17:42,380 --> 00:17:44,720 და მინდა ხელში ამ იდეის მიიღწევა წინა 373 00:17:44,720 --> 00:17:47,740 null ახალ კვანძში. 374 00:17:47,740 --> 00:17:51,410 და, სავარაუდოდ, იმ შემთხვევაში, თუ ჩემი კოდი სწორია და არ არსებობს სხვა გზა ჩადეთ 375 00:17:51,410 --> 00:17:54,970 კვანძების, გარდა ამ ფუნქციას, სავარაუდოდ, მაშინაც კი, თუ სიაში უკვე აქვს 376 00:17:54,970 --> 00:18:00,090 ერთი ან მეტი კვანძების ის, სავარაუდოდ, სიაში, პირველი კვანძის, ექნება 377 00:18:00,090 --> 00:18:02,750 წინა კურსორი of null თავად. 378 00:18:02,750 --> 00:18:03,550 >> აუდიტორია: და მხოლოდ შემდგომი. 379 00:18:03,550 --> 00:18:08,139 მიზეზი თქვენ დააყენა მაჩვენებელი მომდევნო შეადგენს სია თქვენ მიღების მაჩვენებელი 380 00:18:08,139 --> 00:18:13,579 ადრე სია, რომ ის მიუთითებს მომდევნო, მე ვფიქრობ, - 381 00:18:13,579 --> 00:18:14,980 I don't - 382 00:18:14,980 --> 00:18:15,450 უბრალოდ ჩამოთვლილია? 383 00:18:15,450 --> 00:18:16,400 >> დევიდ ჯ Malan: ზუსტად. 384 00:18:16,400 --> 00:18:19,400 და მოდით რეალურად განვიხილოთ ორი შემთხვევა, აქ ნამდვილად, მიუხედავად იმისა, 385 00:18:19,400 --> 00:18:22,070 იმისათვის, ჩვენ მიგვაჩნია, რომ მათ არ არის საკმაოდ იგივე როგორც კოდი. 386 00:18:22,070 --> 00:18:26,250 მაგრამ მაღალი დონის, თუ ეს წარმოადგენს სიაში და ეს არის 32-bit 387 00:18:26,250 --> 00:18:29,560 მაჩვენებელი, მარტივი სცენარი რომ ეს null იყოს. 388 00:18:29,560 --> 00:18:33,010 და ვარაუდობენ, მინდა ჩადეთ ნომერი 50 იყო პირველი ნომერი. 389 00:18:33,010 --> 00:18:37,640 ამიტომ მე ვაპირებ წავიდეთ წინ და გამოყოფს კვანძში, რომელიც აპირებს შეიცავს 390 00:18:37,640 --> 00:18:38,770 სამი სფეროებში - 391 00:18:38,770 --> 00:18:42,070 n, წინა და მომდევნო. 392 00:18:42,070 --> 00:18:44,580 >> მე ვაპირებ დააყენა ნომერი 50 აქ, რადგან ეს იქნება n. 393 00:18:44,580 --> 00:18:46,130 ეს იქნება მომავალი. 394 00:18:46,130 --> 00:18:48,530 და ეს იქნება წინა. 395 00:18:48,530 --> 00:18:50,910 და მერე რა გავაკეთო ამ შემთხვევაში? 396 00:18:50,910 --> 00:18:53,900 ისე, მე უბრალოდ გაკეთდეს ხაზი 1 აქ. 397 00:18:53,900 --> 00:18:55,400 Pointer n იღებს n. 398 00:18:55,400 --> 00:18:57,740 მე მაშინ ამბობდა, წინა უნდა null. 399 00:18:57,740 --> 00:18:59,470 ასე რომ, ეს იქნება null. 400 00:18:59,470 --> 00:19:01,365 მაშინ მე ვაპირებ ვთქვა შემდეგი აპირებს მიიღოს სიაში. 401 00:19:01,365 --> 00:19:05,150 >> და ეს უბრალოდ მუშაობს კარგად. 402 00:19:05,150 --> 00:19:06,500 ეს არის null. 403 00:19:06,500 --> 00:19:10,620 და ა.შ. მე ვამბობ, რომ ახალი კვანძის მომდევნო სფეროში უნდა მიიღოს, რასაც ეს. 404 00:19:10,620 --> 00:19:12,570 ასე რომ აყენებს სხვა null არსებობს. 405 00:19:12,570 --> 00:19:14,510 და მაშინ ბოლო რამ მე არის გადაამოწმოთ აქ. 406 00:19:14,510 --> 00:19:17,870 თუ სიაში არ არის ტოლი null, მაგრამ ეს უდრის null, ამიტომ ჩვენ გამოტოვოთ, რომ 407 00:19:17,870 --> 00:19:18,470 საერთოდ. 408 00:19:18,470 --> 00:19:23,520 და ა.შ. ყველა გავაკეთო მომავალი სია იღებს მაჩვენებელი, რომელიც pictorially შედეგები 409 00:19:23,520 --> 00:19:25,570 სურათი იგრძნობა. 410 00:19:25,570 --> 00:19:26,620 ასე რომ, ერთი სცენარი. 411 00:19:26,620 --> 00:19:30,490 >> და ერთი, რომ თქვენ გეკითხებით კონკრეტულად არის სიტუაცია მოსწონს, 412 00:19:30,490 --> 00:19:33,190 სადაც ჩვენ უკვე გვაქვს ერთი კვანძის სიაში. 413 00:19:33,190 --> 00:19:36,240 და თუ მე დაბრუნდეს ორიგინალური პრობლემის განაცხადი, შემდეგ ჩვენ გამოგიგზავნით 414 00:19:36,240 --> 00:19:39,320 ჩადეთ ვთქვათ 34, მხოლოდ გულისთვის დისკუსია. 415 00:19:39,320 --> 00:19:46,210 ამიტომ მე ვაპირებ უბრალოდ მოხერხებულად მიაპყროს, რომ მეტი აქ. 416 00:19:46,210 --> 00:19:47,540 მე უბრალოდ malloced. 417 00:19:47,540 --> 00:19:49,310 მოდით ვივარაუდოთ, მე შემოწმების for null. 418 00:19:49,310 --> 00:19:51,870 >> ახლა, მე ვაპირებ ინიციალიზაცია n იყოს 34. 419 00:19:51,870 --> 00:19:53,040 და ეს იქნება n. 420 00:19:53,040 --> 00:19:54,670 ეს იქნება მომავალი. 421 00:19:54,670 --> 00:19:57,100 და ეს იქნება წინა. 422 00:19:57,100 --> 00:19:59,370 მოდით დარწმუნდით მე არ მიიღოს ეს უკან. 423 00:19:59,370 --> 00:20:01,110 წინა მოდის პირველი ამ განმარტებას. 424 00:20:01,110 --> 00:20:03,070 ნება მომეცით დაფიქსირება ამ. 425 00:20:03,070 --> 00:20:04,410 ეს არის წინა. 426 00:20:04,410 --> 00:20:05,780 ეს არის მომავალი. 427 00:20:05,780 --> 00:20:08,620 მიუხედავად იმისა, რომ ეს არის იდენტური, მოდით შენარჩუნება ეს შეესაბამება. 428 00:20:08,620 --> 00:20:09,450 >> წინა. 429 00:20:09,450 --> 00:20:11,030 ეს არის მომავალი. 430 00:20:11,030 --> 00:20:16,310 ასე რომ მე უბრალოდ malloced ჩემი შენიშვნა, შეამოწმეს for null მინიჭებული 34 წუთზე კვანძში. 431 00:20:16,310 --> 00:20:17,570 წინა იღებს null. 432 00:20:17,570 --> 00:20:19,480 ასე რომ მაძლევს, რომ. 433 00:20:19,480 --> 00:20:21,010 შემდეგი იღებს სიაში. 434 00:20:21,010 --> 00:20:22,370 ასე რომ, სიაში არის ეს. 435 00:20:22,370 --> 00:20:26,520 ასე რომ, ეს იგივეა ახლა, როგორც ხატვის ამ arrow, ასე რომ აღვნიშნო, რომ ერთი 436 00:20:26,520 --> 00:20:27,940 იმავე. 437 00:20:27,940 --> 00:20:30,400 და მაშინ მე შემოწმების თუ სიაში არ არის ტოლი null. 438 00:20:30,400 --> 00:20:31,740 და ეს არ არის ამ დროს. 439 00:20:31,740 --> 00:20:35,580 შემდეგ მე ვაპირებ გავაკეთოთ სია წინა იღებს მაჩვენებელი. 440 00:20:35,580 --> 00:20:39,700 >> ასე რომ სიაში previous იღებს PTR. 441 00:20:39,700 --> 00:20:44,300 ასე რომ, ეს ეფექტი აყენებს გრაფიკული arrow აქ. 442 00:20:44,300 --> 00:20:46,930 და ეს სულ ცოტა wavy, ხაზები. 443 00:20:46,930 --> 00:20:50,780 და მერე ბოლოს, მე განახლება სიაში აღვნიშნო კურსორი. 444 00:20:50,780 --> 00:20:55,560 ასე რომ, ახლა ეს მიუთითებს ამ ბიჭს. 445 00:20:55,560 --> 00:20:57,170 და ახლა, მოდით სწრაფი საღი აზრის ქვითარი. 446 00:20:57,170 --> 00:20:59,470 >> აი ჩამონათვალი, რომელიც გლობალური ცვლადი. 447 00:20:59,470 --> 00:21:02,850 პირველი კვანძის არის, რა თქმა უნდა, 34, იმიტომ, მე შემდეგ, რომ arrow. 448 00:21:02,850 --> 00:21:05,210 და ეს სწორია იმიტომ, რომ მინდა ჩადეთ დასაწყისში სიაში 449 00:21:05,210 --> 00:21:06,070 ყველა ახალი კვანძების. 450 00:21:06,070 --> 00:21:08,860 მისი მომავალი ველი გამახსენა ამ ბიჭს. 451 00:21:08,860 --> 00:21:10,710 თუ მე შენარჩუნებას აპირებს, მე მოხვდა მომავალი null. 452 00:21:10,710 --> 00:21:11,760 ასე რომ არ არის უფრო სიაში. 453 00:21:11,760 --> 00:21:14,460 თუ მე მოხვდა წინა, მივიღებ უკან, სადაც მე ველოდოთ. 454 00:21:14,460 --> 00:21:16,435 >> ასე რომ, ჯერ კიდევ არსებობს რამდენიმე მითითებას, ცხადია, მანიპულირება. 455 00:21:16,435 --> 00:21:19,870 მაგრამ ის ფაქტი, რომ თქვენ განუცხადა უნდა გააკეთოს ამ მუდმივ დრო ნიშნავს, რომ თქვენ მხოლოდ 456 00:21:19,870 --> 00:21:22,910 აქვს სასრული რაოდენობის რამ თქვენ უფლება არ. 457 00:21:22,910 --> 00:21:24,290 და რა არის ის, რომ ნომერი? 458 00:21:24,290 --> 00:21:25,185 ეს შეიძლება იყოს ერთი ნაბიჯია. 459 00:21:25,185 --> 00:21:25,700 ეს შეიძლება იყოს ორი. 460 00:21:25,700 --> 00:21:26,820 ეს შეიძლება იყოს 1,000 ნაბიჯი. 461 00:21:26,820 --> 00:21:30,500 მაგრამ სასრული, რაც იმას ნიშნავს, თქვენ არ შეგიძლიათ რაიმე სახის looping მიმდინარეობს 462 00:21:30,500 --> 00:21:32,010 აქ, არ უკან, არ მარყუჟების. 463 00:21:32,010 --> 00:21:37,390 უბრალოდ რაღაც უნდა იყოს მყარი კოდირებული ხაზები კოდი, როგორც ჩვენ ამ ნიმუში. 464 00:21:37,390 --> 00:21:42,330 >> ასე რომ, მომდევნო პრობლემა 12 გვთხოვა შეავსოთ განხორციელების remove 465 00:21:42,330 --> 00:21:46,740 ქვემოთ ისე, რომ ეს ხსნის n სიიდან ხაზოვანი დროს. 466 00:21:46,740 --> 00:21:48,740 ასე, რომ თქვენ გაქვთ ცოტა მეტი wiggle ოთახი არის. 467 00:21:48,740 --> 00:21:52,380 თქვენ შეიძლება ვივარაუდოთ, რომ n, თუ დღემდე სიაში, იქნება წარმოდგენილი 468 00:21:52,380 --> 00:21:53,340 არა უმეტეს ერთხელ. 469 00:21:53,340 --> 00:21:56,770 და რომ ძალიან იგულისხმება იყოს ვიქტორინა დაფუძნებული გამარტივების ვარაუდი, ასე რომ, 470 00:21:56,770 --> 00:21:59,780 იმ შემთხვევაში, თუ თქვენთვის ნომერი 50 სადმე სიაში, თქვენ ასევე არ 471 00:21:59,780 --> 00:22:02,890 უნდა ფიქრი გრძელდება iterate, ეძებს ყველა შესაძლო 472 00:22:02,890 --> 00:22:06,990 ასლი 50, რომელიც მხოლოდ გადაეცემა შევიდა ზოგიერთი minutia შეზღუდული დრო. 473 00:22:06,990 --> 00:22:10,460 >> ასე რომ ამოიღონ, ეს იყო ნამდვილად უფრო რთული და მეტი 474 00:22:10,460 --> 00:22:11,640 კოდი დაწერა. 475 00:22:11,640 --> 00:22:14,990 მაგრამ ერთი შეხედვით, გულწრფელად, შესაძლოა, გამოიყურება დიდი და რაღაც 476 00:22:14,990 --> 00:22:17,060 არ არსებობს გზა, თქვენ შეიძლება ამუშავება on ვიქტორინა. 477 00:22:17,060 --> 00:22:22,450 მაგრამ თუ ჩვენ ფოკუსირება ინდივიდუალური ნაბიჯები, იმედია, ის მოულოდნელად 478 00:22:22,450 --> 00:22:26,060 გაფიცვის თქვენ, რომ თითოეული ეს ინდივიდუალური ნაბიჯები რაც აშკარა აზრი 479 00:22:26,060 --> 00:22:27,080 ამ დროის. 480 00:22:27,080 --> 00:22:28,200 მოდით შევხედოთ. 481 00:22:28,200 --> 00:22:32,570 >> ასე რომ, პირველ რიგში, ჩვენ ინიციალიზაცია მაჩვენებელი უნდა იყოს სიაში თავად. 482 00:22:32,570 --> 00:22:36,040 რადგან მინდა ხაზოვანი დროს, რომ საშუალება მე ვაპირებ გარკვეული loop. 483 00:22:36,040 --> 00:22:39,730 და გავრცელებული გზა iterate მეტი კვანძების სია სტრუქტურის ან რაიმე სახის 484 00:22:39,730 --> 00:22:43,860 სტრუქტურა iteratively არის მიიღოს მომცეთ წინაშე მონაცემები 485 00:22:43,860 --> 00:22:46,990 სტრუქტურა და შემდეგ დავიწყო განახლება და ფეხით თქვენი გზა 486 00:22:46,990 --> 00:22:48,650 მეშვეობით მონაცემთა სტრუქტურას. 487 00:22:48,650 --> 00:22:50,040 ასე რომ, მე ვაპირებ ზუსტად რომ. 488 00:22:50,040 --> 00:22:54,260 >> მიუხედავად იმისა, რომ მაჩვენებელი, ჩემი დროებითი ცვლადი, არ არის ტოლი null, მოდით 489 00:22:54,260 --> 00:22:55,660 წავიდეთ წინ და შეამოწმოთ. 490 00:22:55,660 --> 00:22:56,910 მივიღებ გაუმართლა? 491 00:22:56,910 --> 00:23:01,740 არის n სფეროში კვანძის მე ვარ ამჟამად ეძებს ტოლია 492 00:23:01,740 --> 00:23:03,380 ნომერი ვეძებ? 493 00:23:03,380 --> 00:23:05,410 და თუ ასეა, მოდით რაღაც. 494 00:23:05,410 --> 00:23:10,020 ახლა შეამჩნია ეს თუ მდგომარეობა გარს მთელი 495 00:23:10,020 --> 00:23:11,520 შემდეგ ხაზი კოდი. 496 00:23:11,520 --> 00:23:14,610 ეს არის ერთადერთი, რაც მე აინტერესებს - მოძიებაში ნომერი კითხვა. 497 00:23:14,610 --> 00:23:18,010 ასე რომ არ არის სხვა, რაც ამარტივებს რამ კონცეპტუალურად ცოტა. 498 00:23:18,010 --> 00:23:22,040 >> მაგრამ ახლა მივხვდი, და ალბათ მხოლოდ მიხვდა, შემდეგ ფიქრი 499 00:23:22,040 --> 00:23:24,720 ის მეშვეობით bit, იქ რეალურად ორი შემთხვევა აქ. 500 00:23:24,720 --> 00:23:28,060 ერთი არის, სადაც კვანძის არის დასაწყისში სიაში, რომელიც 501 00:23:28,060 --> 00:23:31,040 პატარა შემაშფოთებელი, რადგან ეს არის ის, განსაკუთრებული შემთხვევა, რადგან თქვენ უნდა გაუმკლავდეთ 502 00:23:31,040 --> 00:23:33,340 ამ რამ, რაც ერთადერთი ანომალიაა. 503 00:23:33,340 --> 00:23:35,720 ყველგან სიაში, ეს არის იგივე. 504 00:23:35,720 --> 00:23:38,050 არსებობს წინა კვანძის და მომდევნო კვანძის წინა კვანძის მომდევნო კვანძის. 505 00:23:38,050 --> 00:23:40,940 მაგრამ ეს ბიჭი არის პატარა სპეციალური თუ ის დასაწყისში. 506 00:23:40,940 --> 00:23:48,710 >> ასე რომ, თუ მაჩვენებელი შეადგენს სიაში თავისთავად, ასე რომ, თუ მე ვარ დასაწყისში 507 00:23:48,710 --> 00:23:53,960 სიაში და მე აღმოვაჩინე n, მე უნდა გავაკეთოთ რამოდენიმე რამ. 508 00:23:53,960 --> 00:23:59,230 ერთი, მე უნდა შეიცვალოს სია აღვნიშნო, რომ მომავალი ველი, 50. 509 00:23:59,230 --> 00:24:01,270 ასე რომ, ვფიქრობ, რომ მე ვცდილობ წაშლა 34. 510 00:24:01,270 --> 00:24:03,560 ასე რომ, ეს ბიჭი წასვლა მოშორებით რაღაც მომენტში. 511 00:24:03,560 --> 00:24:07,210 >> ამიტომ მე ვაპირებ ვთქვა, სია იღებს მაჩვენებელი მომავალი. 512 00:24:07,210 --> 00:24:08,570 ისე, ეს მაჩვენებელი. 513 00:24:08,570 --> 00:24:10,360 შემდეგი მიუთითებს მეტი აქ. 514 00:24:10,360 --> 00:24:17,470 ასე რომ ეს იცვლება ამ ისარს უფლება ახლა აღვნიშნო, რომ ამ ბიჭს აქ. 515 00:24:17,470 --> 00:24:19,580 ახლა, მახსოვს, ჩვენ დროებითი ცვლადი. 516 00:24:19,580 --> 00:24:23,520 ასე რომ, ჩვენ არ ობოლი ნებისმიერი კვანძების, იმიტომ, რომ მე ასევე აქვს ამ ბიჭს ჩემი 517 00:24:23,520 --> 00:24:25,010 განხორციელების ამოიღონ. 518 00:24:25,010 --> 00:24:29,600 ახლა, თუ სიაში თავად არ null, მე უნდა დააფიქსიროს პატარა რაღაც. 519 00:24:29,600 --> 00:24:32,690 >> მე უნდა ახლა დავრწმუნდეთ, რომ ეს ისარი, რომელიც ადრე მიუთითებს 520 00:24:32,690 --> 00:24:36,830 50 34, ამ აქვს მიდიან, იმიტომ, რომ თუ მე ვცდილობ, თავი დაეღწია 521 00:24:36,830 --> 00:24:41,910 34, 50 ჰქონდა უკეთესი არ შენარჩუნება ნებისმიერი სახის უკან მინიშნება, როგორც 522 00:24:41,910 --> 00:24:42,820 arrow შესთავაზა. 523 00:24:42,820 --> 00:24:44,820 ასე რომ მე უბრალოდ ეს ხაზი. 524 00:24:44,820 --> 00:24:46,520 ასე რომ მაშინ მე გაკეთდეს. 525 00:24:46,520 --> 00:24:48,040 ასეთ შემთხვევაში რეალურად საკმაოდ მარტივია. 526 00:24:48,040 --> 00:24:51,010 Chopping off უფროსის სია შედარებით მარტივია. 527 00:24:51,010 --> 00:24:52,980 >> სამწუხაროდ, არ არის ეს შემაშფოთებელი else ბლოკი. 528 00:24:52,980 --> 00:24:56,170 ახლა, მე უნდა განიხილოს საქმე იქ, სადაც არის რაღაც ცენტრიდან. 529 00:24:56,170 --> 00:24:59,880 მაგრამ ეს არ არის ძალიან საშინელი, გარდა განთავსების სინტაქსი მოსწონს ეს. 530 00:24:59,880 --> 00:25:03,080 ასე რომ, თუ მე არ ვარ დასაწყისში სიაში, მე სადღაც შუა. 531 00:25:03,080 --> 00:25:08,160 და ამ ხაზის აქ ამბობს, დასაწყისიდან რასაც კვანძის თქვენ. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 გადასვლა წინა კვანძის მომდევნო სფეროში და აღვნიშნო, რომ მაჩვენებელი. 534 00:25:18,550 --> 00:25:20,390 >> მოდით ეს ხატოვნად. 535 00:25:20,390 --> 00:25:21,640 ეს იყო მიღების რთული. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 ასე რომ, თუ მაქვს დამთვალიერებლები აქ - მოდით ეს - მომავალ სფეროებში აქ. 538 00:25:37,990 --> 00:25:41,200 მე ვაპირებ გამარტივება ჩემი პოინტერები საკმაოდ გარდა მიაპყროს მთელი bunch 539 00:25:41,200 --> 00:25:45,710 ყველაფერი უკან და მეოთხე crisscrossing ერთმანეთს. 540 00:25:45,710 --> 00:25:50,870 და ახლა, მოდით უბრალოდ, ვამბობთ, ეს არის 1, 2, 3 გულისთვის დისკუსია, თუნდაც 541 00:25:50,870 --> 00:25:53,410 მიუხედავად იმისა, რომ არ გამოდიან პრობლემის საკითხი. 542 00:25:53,410 --> 00:25:55,900 >> ასე რომ, აქ არის ჩემი უკავშირდება სიაში. 543 00:25:55,900 --> 00:25:59,300 ვცდილობ ამოიღონ ორი ამ კერძოდ, მობილური ამბავი. 544 00:25:59,300 --> 00:26:01,960 ასე რომ მე განახლებული მომცეთ იქნება მიუთითებს ამ ბიჭს. 545 00:26:01,960 --> 00:26:03,315 ასე რომ, ეს PTR. 546 00:26:03,315 --> 00:26:04,530 ის მიუთითებს აქ. 547 00:26:04,530 --> 00:26:07,170 ეს არის სია, რომელიც არსებობს გლობალურად, როგორც ადრე. 548 00:26:07,170 --> 00:26:09,200 და ის მიუთითებს აქ არ აქვს მნიშვნელობა რა. 549 00:26:09,200 --> 00:26:10,800 და ახლა, ვცდილობ ამოიღონ ორი. 550 00:26:10,800 --> 00:26:13,850 >> ასე რომ, თუ მაჩვენებელი მიუთითებს აქ, სადაც მე ვარ აპირებს დაიცვას, როგორც ჩანს, 551 00:26:13,850 --> 00:26:17,110 წინა მაჩვენებელი, რომელიც აყენებს ჩემთვის 1. 552 00:26:17,110 --> 00:26:22,290 მე მაშინ აპირებს ამბობენ, რომ მომავალი სფეროში, რომელიც მოაქვს ჩემთვის მეტი ამ 553 00:26:22,290 --> 00:26:25,410 ყუთი აქ, აპირებს თანაბარი მაჩვენებელი მომავალი. 554 00:26:25,410 --> 00:26:28,400 ასე რომ, თუ ეს მაჩვენებელი, ეს არის მომავალი. 555 00:26:28,400 --> 00:26:31,840 ეს ნიშნავს, რომ ამ ისარს საჭიროებების აღვნიშნო, რომ ამ ბიჭს. 556 00:26:31,840 --> 00:26:35,140 >> მერე რა, რომ ხაზი კოდი ახლახანს გაკეთდეს ცოტა ეს. 557 00:26:35,140 --> 00:26:37,500 და ახლა, ეს ეძებს მოსწონს ნაბიჯი სწორი მიმართულებით. 558 00:26:37,500 --> 00:26:41,390 ჩვენ არსებითად გსურთ snip 2 out შუა 1 და 3. 559 00:26:41,390 --> 00:26:44,400 ასე რომ აზრი, რომ ჩვენ გვინდა მარშრუტი ეს მაჩვენებელი გარშემო. 560 00:26:44,400 --> 00:26:50,400 ასე რომ, ეს მეორე ხაზი შემოწმების თუ მაჩვენებელი მომავალი არ null, არსებობს 561 00:26:50,400 --> 00:26:54,200 მართლაც ვინმეს უფლება, 2, ეს ნიშნავს, რომ ჩვენ ასევე უნდა გავაკეთოთ 562 00:26:54,200 --> 00:26:55,850 პატარა snip აქ. 563 00:26:55,850 --> 00:27:00,590 >> ასე რომ, მე ახლა უნდა დაიცვას ეს მაჩვენებელი განახლება და წინა მაჩვენებელი წლის 564 00:27:00,590 --> 00:27:05,410 ამ ბიჭს უნდა გავაკეთოთ ცოტა Workaround აქ წერტილი აქ. 565 00:27:05,410 --> 00:27:07,100 და ახლა, ვიზუალურად ეს არის ლამაზი. 566 00:27:07,100 --> 00:27:11,930 ეს პატარა ბინძურ, რომ იქ არავინ მიუთითებს 2 უქმნით. 567 00:27:11,930 --> 00:27:13,600 2 მიუთითებს მარცხენა. 568 00:27:13,600 --> 00:27:14,980 და 2 მიუთითებს უფლება. 569 00:27:14,980 --> 00:27:17,480 მაგრამ მას არ შეუძლია გააკეთოს რაც მას სურს, რადგან ის შესახებ უნდა გათავისუფლდეს. 570 00:27:17,480 --> 00:27:19,480 და არა აქვს მნიშვნელობა, თუ რა იმ ღირებულებები უქმნით. 571 00:27:19,480 --> 00:27:23,040 >> მნიშვნელოვანია, რომ დარჩენილი ბიჭები routing ზემოთ 572 00:27:23,040 --> 00:27:24,280 და ქვემოთ მას ახლა. 573 00:27:24,280 --> 00:27:25,810 და მართლაც, ის, რაც ჩვენ გავაკეთოთ შემდეგი. 574 00:27:25,810 --> 00:27:29,360 ჩვენ თავისუფალი მაჩვენებელი, რაც იმას ნიშნავს, ვუთხრა ოპერაციული სისტემის, თქვენ მივესალმებით 575 00:27:29,360 --> 00:27:30,906 დაბრუნდეს ეს. 576 00:27:30,906 --> 00:27:34,900 და მერე ბოლოს, ჩვენ დაბრუნდება. 577 00:27:34,900 --> 00:27:37,220 Else მინიშნებით, თუ ჩვენ არ დაუბრუნებიათ ჯერ, 578 00:27:37,220 --> 00:27:38,290 გვაქვს შენარჩუნება ეძებს. 579 00:27:38,290 --> 00:27:41,485 ასე მაჩვენებელი შეადგენს მაჩვენებელი მომავალი მხოლოდ ნიშნავს გადაადგილება ამ ბიჭს აქ. 580 00:27:41,485 --> 00:27:42,600 გადაადგილება ამ ბიჭს აქ. 581 00:27:42,600 --> 00:27:45,400 გადაადგილება ამ ბიჭს აქ, თუ, ფაქტობრივად, ჩვენ არ იპოვოს ნომერი 582 00:27:45,400 --> 00:27:46,960 ჩვენ ვეძებთ ამჟამად. 583 00:27:46,960 --> 00:27:49,630 >> ასე რომ, სიმართლე გითხრათ, ეს გამოიყურება სრულიად დიდი, მე ვფიქრობ, პირველ რიგში, 584 00:27:49,630 --> 00:27:52,180 ერთი შეხედვით, განსაკუთრებით თუ ბრძოლა ამ დროს ინტელექტუალური მერე ვნახოთ 585 00:27:52,180 --> 00:27:52,850 რაღაც მსგავსი. 586 00:27:52,850 --> 00:27:55,050 და თქვენ pat თავს უკან. 587 00:27:55,050 --> 00:27:57,080 ასევე, არ არსებობს გზა მე შეიძლება ამუშავება, რომ ვიქტორინა. 588 00:27:57,080 --> 00:28:00,470 მაგრამ მე ვიტყოდი, შეგიძლიათ თუ დაარღვიოს მას down შევიდა ამ ინდივიდუალური 589 00:28:00,470 --> 00:28:04,400 შემთხვევებში და მხოლოდ ფეხით მეშვეობით ფრთხილად, თუმცა, უნდა აღინიშნოს, ქვეშ 590 00:28:04,400 --> 00:28:06,300 სტრესულ ვითარებაში. 591 00:28:06,300 --> 00:28:09,470 >> საბედნიეროდ, სურათზე გააკეთა ყველაფერი ბედნიერი. 592 00:28:09,470 --> 00:28:11,050 თქვენ შეიძლება შევაჩერო ამ ნებისმიერი რაოდენობის გზები. 593 00:28:11,050 --> 00:28:12,760 თქვენ არ უნდა გავაკეთოთ crisscrossing რამ აქ. 594 00:28:12,760 --> 00:28:14,520 თქვენ ეს სწორი ხაზები მოსწონს ეს. 595 00:28:14,520 --> 00:28:18,790 მაგრამ არსი ამ პრობლემა, ზოგადად, იყო ის, რომ გააცნობიეროს, რომ 596 00:28:18,790 --> 00:28:22,060 სურათზე ბოლომდე უნდა გამოიყურებოდეს პატარა რაღაც, რადგან 597 00:28:22,060 --> 00:28:25,030 მუდმივი დრო იგულისხმება, რომ თქვენ გაქვთ jamming და jamming და jamming 598 00:28:25,030 --> 00:28:29,900 ახალი კვანძების დასაწყისში სიაში. 599 00:28:29,900 --> 00:28:31,960 რაიმე შეკითხვა? 600 00:28:31,960 --> 00:28:34,565 ალბათ ყველაზე რთული და რა თქმა უნდა, კოდირების შეკითხვებს. 601 00:28:34,565 --> 00:28:37,690 >> აუდიტორია: ასე სიაში მსგავსი უხელმძღვანელებს წინა მაგალითი. 602 00:28:37,690 --> 00:28:39,640 >> დევიდ ჯ Malan: ზუსტად, ზუსტად. 603 00:28:39,640 --> 00:28:43,130 უბრალოდ სხვადასხვა სახელი გლობალური ცვლადი. 604 00:28:43,130 --> 00:28:44,380 მსოფლიო რა? 605 00:28:44,380 --> 00:28:48,880 606 00:28:48,880 --> 00:28:49,730 >> რობ Bowden: OK. 607 00:28:49,730 --> 00:28:52,020 ასე რომ, ეს არის ის, სადაც თქვენ ჰქონდა დაწერა მე. 608 00:28:52,020 --> 00:28:56,060 ზოგიერთი ადამიანი დაწერა ესეები ამ კითხვაზე. 609 00:28:56,060 --> 00:29:00,230 მაგრამ თქვენ უბრალოდ უნდა გამოვიყენოთ ამ ექვსი თვალსაზრისით აღწერს რა ხდება, როდესაც 610 00:29:00,230 --> 00:29:02,440 თქვენ ცდილობენ დაუკავშირდეთ facebook.com. 611 00:29:02,440 --> 00:29:07,930 ასე რომ მე უბრალოდ გაიგო პროცესში გამოყენებით ამ თვალსაზრისით. 612 00:29:07,930 --> 00:29:11,290 ასე, რომ ჩვენს ბრაუზერში ვწერთ facebook.com და დააჭიროთ. 613 00:29:11,290 --> 00:29:17,280 ასე რომ, ჩვენი ბრაუზერის აპირებს ააშენოს HTTP მოითხოვოს, რომ ის აპირებს გამოაგზავნოს 614 00:29:17,280 --> 00:29:22,220 ზოგიერთი პროცესი Facebook for Facebook უპასუხოს ჩვენს 615 00:29:22,220 --> 00:29:24,450 HTML მისი გვერდზე. 616 00:29:24,450 --> 00:29:28,800 >> რა არის პროცესი, რომელიც HTTP მოთხოვნა 617 00:29:28,800 --> 00:29:30,730 რეალურად იღებს Facebook? 618 00:29:30,730 --> 00:29:32,790 ასე რომ, პირველი, ჩვენ უნდა თარგმნოს Facebook.com. 619 00:29:32,790 --> 00:29:38,780 ასე რომ მხოლოდ სახელს Facebook.com, სადაც რეალურად აკეთებს HTTP მოთხოვნის 620 00:29:38,780 --> 00:29:39,940 უნდა წავიდეთ? 621 00:29:39,940 --> 00:29:44,120 ამიტომ, ჩვენ უნდა თარგმნოს Facebook.com IP მისამართი, რომელიც ცალსახად 622 00:29:44,120 --> 00:29:47,620 განსაზღვრავს, თუ რა მანქანა ჩვენ რეალურად გსურთ გააგზავნოთ ამ მოთხოვნით. 623 00:29:47,620 --> 00:29:49,310 თქვენი ლეპტოპი აქვს IP მისამართი. 624 00:29:49,310 --> 00:29:52,240 არაფერს ინტერნეტთან აქვს IP მისამართი. 625 00:29:52,240 --> 00:29:59,030 >> ასე რომ, DNS, დომენური სახელის სისტემა, რომელიც რა ხდება გაუმკლავდეს თარგმანი 626 00:29:59,030 --> 00:30:03,750 ეხლა facebook.com IP მისამართი, რომელიც თქვენ ნამდვილად გინდათ დაუკავშირდეს. 627 00:30:03,750 --> 00:30:08,075 ასე რომ, ჩვენ დაუკავშირდით DNS სერვერები და ვთქვათ, რა არის facebook.com? 628 00:30:08,075 --> 00:30:16,560 ის ამბობს, oh, ეს IP მისამართი 190,212 რაღაც, რაღაც, რაღაც. 629 00:30:16,560 --> 00:30:16,900 ყველა უფლება. 630 00:30:16,900 --> 00:30:18,850 ახლა, მე ვიცი, რა მანქანა მინდა კონტაქტი. 631 00:30:18,850 --> 00:30:22,360 >> ასე რომ მაშინ გამოაგზავნოთ თქვენი HTTP მოთხოვნის მეტი რომ მანქანა. 632 00:30:22,360 --> 00:30:24,140 ასე რომ, რამდენად შეესაბამება ეს მისაღებად რომ მანქანა? 633 00:30:24,140 --> 00:30:27,200 ასევე, თხოვნით მიდის როუტერი როუტერი bouncing. 634 00:30:27,200 --> 00:30:32,630 მახსოვს მაგალითად კლასში, სადაც ჩვენ რეალურად დაინახა მარშრუტი, რომ 635 00:30:32,630 --> 00:30:35,340 პაკეტი აიღო როდესაც ჩვენ შევეცადეთ კომუნიკაცია. 636 00:30:35,340 --> 00:30:38,460 ჩვენ ვნახეთ, რომ ხტომა მეტი Atlantic Ocean ერთ მომენტში ან რასაც. 637 00:30:38,460 --> 00:30:42,820 >> ასე რომ, ბოლო ვადა პორტი. 638 00:30:42,820 --> 00:30:46,520 ასე რომ, ეს არის თქვენს კომპიუტერში. 639 00:30:46,520 --> 00:30:49,970 თქვენ შეგიძლიათ მრავალი რამ გაკეთებული კომუნიკაციის ინტერნეტში. 640 00:30:49,970 --> 00:30:53,730 ასე, რომ შეიძლება იყოს გაშვებული, ვთქვათ, Skype. 641 00:30:53,730 --> 00:30:55,670 მე შეიძლება ვებ ბრაუზერი ღია. 642 00:30:55,670 --> 00:30:59,010 მე შეიძლება რაღაც რომ torrenting ფაილი. 643 00:30:59,010 --> 00:31:00,880 ასე რომ, ყველა ამ საკითხზე არის ურთიერთობისას 644 00:31:00,880 --> 00:31:02,600 ინტერნეტით რამდენიმე გზა. 645 00:31:02,600 --> 00:31:08,070 >> ასე რომ, როდესაც თქვენს კომპიუტერში იღებს ზოგიერთი მონაცემები ინტერნეტით, როგორ აკეთებს ამას 646 00:31:08,070 --> 00:31:10,130 ვიცი, რა განცხადება, ფაქტობრივად, სურს მონაცემები? 647 00:31:10,130 --> 00:31:12,610 რამდენად შეესაბამება ეს თუ არა ამ კონკრეტულ მონაცემები გათვლილი 648 00:31:12,610 --> 00:31:16,070 torrenting განაცხადის როგორც ეწინააღმდეგებოდა ვებ ბრაუზერის? 649 00:31:16,070 --> 00:31:20,980 ასე რომ, ეს არის მიზანი პორტები, რომ ყველა ამ განაცხადების 650 00:31:20,980 --> 00:31:22,720 ამტკიცებდა პორტი თქვენს კომპიუტერში. 651 00:31:22,720 --> 00:31:27,580 ასე რომ, თქვენს ბრაუზერში ამბობს, hey, მე მოსმენის პორტის 1000. 652 00:31:27,580 --> 00:31:32,240 და თქვენი torrenting პროგრამა ამბობს, მე მოსმენის პორტის 3000. 653 00:31:32,240 --> 00:31:34,770 და Skype ამბობს, მე გამოყენებით პორტში 4000. 654 00:31:34,770 --> 00:31:41,950 >> ასე რომ, როდესაც თქვენ მიიღეთ რაიმე მონაცემები, რომლებიც მიეკუთვნება ერთი ეს პროგრამები, მონაცემები 655 00:31:41,950 --> 00:31:45,510 აღინიშნება, რომლის პორტი ის რეალურად უნდა გაიგზავნოს ერთად. 656 00:31:45,510 --> 00:31:47,950 ასე რომ, ეს ამბობს, oh, მე ეკუთვნის პორტი 1000. 657 00:31:47,950 --> 00:31:50,950 მე ვიცი, მაშინ მე უნდა მიაწოდოს ერთად ჩემს ბრაუზერში. 658 00:31:50,950 --> 00:31:56,440 ასე რომ, იმ მიზეზით, რომ ის შესაბამისი აქ ის არის, რომ ვებ სერვერები ტენდენცია 659 00:31:56,440 --> 00:31:58,240 მოუსმინოს პორტის 80. 660 00:31:58,240 --> 00:32:02,420 ასე რომ, როდესაც მე დაუკავშირდეთ Facebook.com, მე ვარ ურთიერთობისას რამდენიმე მანქანა. 661 00:32:02,420 --> 00:32:06,390 მაგრამ მე უნდა ვთქვა, რომელიც პორტში რომ მანქანა მინდა დაუკავშირდეს. 662 00:32:06,390 --> 00:32:09,160 და ვებ სერვერები, როგორც წესი, მოსმენის პორტის 80. 663 00:32:09,160 --> 00:32:14,010 >> თუ უნდოდათ, ისინი ვერ ვაყენებთ მას ისე ეს ჩამოთვლილია როგორც საპორტო 7000. 664 00:32:14,010 --> 00:32:19,090 და შემდეგ ბრაუზერში, შემეძლო ხელით ჩაწერეთ Facebook.com: 7000 to 665 00:32:19,090 --> 00:32:24,600 გაუგზავნე მოთხოვნით პორტში 7000 Facebook-ის სერვერზე. 666 00:32:24,600 --> 00:32:26,820 >> დევიდ ჯ Malan: და ამ შემთხვევაში, მაშინაც კი, მიუხედავად იმისა, რომ ჩვენ არ მოითხოვს, რომ ადამიანი 667 00:32:26,820 --> 00:32:30,000 აღვნიშნო, რომ ეს, ამ შემთხვევაში, რა port რომ მოთხოვნა რეალურად წასვლა? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 ცადეთ კიდევ ერთხელ. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 ზუსტად. 672 00:32:44,300 --> 00:32:47,960 არ ეძებს, მაგრამ დელიკატურობა რომ იქ არც უკანასკნელი. 673 00:32:47,960 --> 00:32:51,770 >> რობ Bowden: ასე რომ, HTTPS, რადგან მოსმენის სპეციალურად 674 00:32:51,770 --> 00:32:55,180 დაშიფრული, ეს პორტის 4430. 675 00:32:55,180 --> 00:32:57,680 >> აუდიტორია: და წერილებს 25, არა? 676 00:32:57,680 --> 00:33:00,670 >> დევიდ ჯ Malan: Outbound წერილებს, 25, yep. 677 00:33:00,670 --> 00:33:03,760 >> რობ Bowden: მე კი არ იციან ყველაზე - ყველა ქვედა პირობა, როგორც წესი, 678 00:33:03,760 --> 00:33:06,310 დაცულია რამ. 679 00:33:06,310 --> 00:33:09,260 მე ვფიქრობ, რომ ყველაფერი 1024 დაცულია. 680 00:33:09,260 --> 00:33:13,450 >> აუდიტორია: რატომ ამბობთ 3 იყო არასწორი ნომერი? 681 00:33:13,450 --> 00:33:18,820 >> რობ Bowden: იმის გამო, რომ IP მისამართი, არსებობს ოთხი დაჯგუფებების ციფრისგან. 682 00:33:18,820 --> 00:33:21,090 და ისინი from 0 to 255. 683 00:33:21,090 --> 00:33:28,060 ასე რომ 192.168.2.1 არის საერთო ლოკალური ქსელის IP მისამართზე. 684 00:33:28,060 --> 00:33:30,840 ყურადღება მიაქციეთ ყველა იმ ნაკლებია 255. 685 00:33:30,840 --> 00:33:33,570 ასე რომ, როდესაც დავიწყე 300, რომელიც ვერ შესაძლოა აქვს 686 00:33:33,570 --> 00:33:35,210 იყო ერთ ნომრები. 687 00:33:35,210 --> 00:33:38,170 >> დევიდ ჯ Malan: მაგრამ ეს სულელური clip დან: - იყო ეს CSI, სადაც მათ ჰქონდათ 688 00:33:38,170 --> 00:33:39,970 ნომერი, რომელიც იყო ძალიან დიდი იმ IP-მისამართი. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> რობ Bowden: ნებისმიერი კითხვები ამ? 691 00:33:46,110 --> 00:33:51,710 მომდევნო ერთი, ასე რომ სრული ცვლილება თემა, მაგრამ ჩვენ ამ PHP მასივი 692 00:33:51,710 --> 00:33:53,270 სახლების quad. 693 00:33:53,270 --> 00:33:56,360 და ჩვენ გვაქვს უწესრიგო სია. 694 00:33:56,360 --> 00:33:59,550 და ჩვენ გვინდა, რომ ამობეჭდოთ თითოეული სიის ელემენტი უბრალოდ შემცველი სახლის სახელი. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 ამიტომ ჩვენ გვაქვს foreach loop. 697 00:34:11,870 --> 00:34:17,540 ასე მახსოვს, სინტაქსი არის foreach array როგორც საქონლის მასივი. 698 00:34:17,540 --> 00:34:22,360 ასე რომ მეშვეობით თითოეულ iteration of მარყუჟის, სახლში აპირებს ერთი 699 00:34:22,360 --> 00:34:24,060 ღირებულებები შიგნით მასივი. 700 00:34:24,060 --> 00:34:26,530 >> პირველ iteration, სახლი იქნება Cabot სახლი. 701 00:34:26,530 --> 00:34:30,370 მეორე iteration, სახლი იყოს კურიერი სახლი და ასე შემდეგ. 702 00:34:30,370 --> 00:34:34,370 ასე რომ, თითოეული quad როგორც სახლში, ჩვენ უბრალოდ აპირებს ბეჭდვა - 703 00:34:34,370 --> 00:34:37,250 თქვენ ასევე შეეძლო გაიმეორა - 704 00:34:37,250 --> 00:34:42,199 სიაში ნივთი და შემდეგ სახლში სახელი და შემდეგ დახურეთ სია ერთეულზე. 705 00:34:42,199 --> 00:34:45,210 Curly აფრთხილებს სურვილისამებრ აქ. 706 00:34:45,210 --> 00:34:49,480 >> და მაშინ ჩვენ ასევე განაცხადა, კითხვა თავისთავად, მახსოვს დახურვა 707 00:34:49,480 --> 00:34:50,770 უწესრიგო სია აქვს. 708 00:34:50,770 --> 00:34:53,949 ამიტომ, ჩვენ უნდა გამოხვიდეთ PHP რეჟიმი იმისათვის, რომ ამის გაკეთება. 709 00:34:53,949 --> 00:35:00,280 ან ჩვენ შეეძლო გამოეხმაურა დახურვა უწესრიგო სია აქვს. 710 00:35:00,280 --> 00:35:02,380 >> დევიდ ჯ Malan: ასევე ჯარიმა აქ იქნება უკვე გამოიყენოს ძველი სკოლა 711 00:35:02,380 --> 00:35:07,340 loop ერთად $ i = 0 0 და გამოყენებით ითვლის to გაერკვნენ სიგრძეზე ray. 712 00:35:07,340 --> 00:35:09,240 მთლიანად ჯარიმა ძალიან, უბრალოდ პატარა wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> აუდიტორია: ასე რომ, თუ თქვენ აპირებს [INAUDIBLE], რომ თქვენ ამის გაკეთება - 715 00:35:14,742 --> 00:35:16,734 მე დაგვავიწყდეს, თუ რა loop [INAUDIBLE] არის. 716 00:35:16,734 --> 00:35:21,380 გსურთ $ quad bracket i? 717 00:35:21,380 --> 00:35:21,850 >> დევიდ ჯ Malan: ზუსტად. 718 00:35:21,850 --> 00:35:23,100 ჰო, ზუსტად. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> რობ Bowden: არაფერი? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> დევიდ ჯ Malan: ყველა უფლება. 723 00:35:32,010 --> 00:35:32,300 ვაჭრობის ღ. 724 00:35:32,300 --> 00:35:38,290 ასე იყო bunches პასუხი შესაძლებელია თითოეული მათგანი. 725 00:35:38,290 --> 00:35:40,510 ჩვენ მართლაც მხოლოდ ეძებს რაღაც მყარი განთავსების upside და 726 00:35:40,510 --> 00:35:41,100 downside. 727 00:35:41,100 --> 00:35:44,830 და ნომერი 16 სთხოვეს, Validating მომხმარებლების input კლიენტის მხარის, როგორც JavaScript, 728 00:35:44,830 --> 00:35:47,280 ნაცვლად სერვერის მხარეს, როგორც PHP. 729 00:35:47,280 --> 00:35:49,450 რა upside of აკეთებს კლიენტის მხარის? 730 00:35:49,450 --> 00:35:53,780 >> ისე, ერთი რამ შევთავაზეთ არის რომ თქვენ შეამციროს შეყოვნება, რადგან თქვენ 731 00:35:53,780 --> 00:35:56,750 არ გადაიტვირთოთ საკონტაკტო სერვერზე, რომელიც შეიძლება რამდენიმე 732 00:35:56,750 --> 00:36:00,390 მილიწამებში ან თუნდაც რამდენიმე წამში ავლით, და მხოლოდ 733 00:36:00,390 --> 00:36:04,670 წევრები მომხმარებლების input კლიენტის მხარის მიერ გამშვები on წარადგინოს კურატორმა და 734 00:36:04,670 --> 00:36:06,650 უბრალოდ შემოწმების, ისინი აკრიფოთ რაღაც განთავსების სახელი? 735 00:36:06,650 --> 00:36:08,080 ისინი აკრიფოთ რაღაც in ფოსტის მისამართი? 736 00:36:08,080 --> 00:36:10,950 ისინი აირჩიოს dorm დან ჩამოსაშლელი მენიუ? 737 00:36:10,950 --> 00:36:14,360 >> თქვენ შეგიძლიათ მივცეთ გამდინარე კავშირი გამოყენებით gigahertz კომპიუტერი 738 00:36:14,360 --> 00:36:16,770 ან რასაც მათ აქვთ, რომ რეალურად მათ მაგიდასთან. 739 00:36:16,770 --> 00:36:19,310 ასე რომ, ეს უბრალოდ უკეთესი შესახებ განიცდიან, როგორც წესი. 740 00:36:19,310 --> 00:36:24,460 მაგრამ downside აკეთებს კლიენტის მხარის დადასტურება, თუ თქვენ ამის გარეშე ასევე 741 00:36:24,460 --> 00:36:29,860 აკეთებს სერვერის მხარეს დადასტურება ის არის, რომ საუკეთესო ვინმეს გამოდის CS50 იცის 742 00:36:29,860 --> 00:36:33,980 რომ თქვენ შეგიძლიათ უბრალოდ გამოგვიგზავნეთ ნებისმიერი მონაცემების გსურთ სერვერზე ნებისმიერი რაოდენობის გზები. 743 00:36:33,980 --> 00:36:37,030 სიმართლე, უმეტეს ნებისმიერი ბრაუზერი, შეგიძლიათ დააჭირეთ გარშემო პარამეტრების და მხოლოდ 744 00:36:37,030 --> 00:36:40,110 გამორთეთ JavaScript, რაც, შესაბამისად, გაუქმდება ნებისმიერი ფორმით 745 00:36:40,110 --> 00:36:41,080 ძალადაკარგულია. 746 00:36:41,080 --> 00:36:44,460 >> მაგრამ თქვენ ასევე შეიძლება გავიხსენოთ, რომ ჯერ კიდევ მე გარკვეული arcane რამ კლასში გამოყენებით 747 00:36:44,460 --> 00:36:47,790 telnet და რეალურად თითქოს იყოს ბრაუზერის გაგზავნით მისაღებად 748 00:36:47,790 --> 00:36:49,240 ითხოვს სერვერზე. 749 00:36:49,240 --> 00:36:51,030 და ეს რა თქმა უნდა არ გამოყენებით JavaScript. 750 00:36:51,030 --> 00:36:53,290 ეს მხოლოდ მე აკრეფით ბრძანებები დროს კლავიატურაზე. 751 00:36:53,290 --> 00:36:57,410 ასე რომ, რეალურად, ნებისმიერი პროგრამისტი შიგნით საკმარისი კომფორტი ინტერნეტში და HTTP 752 00:36:57,410 --> 00:37:01,690 შეიძლება გაგზავნას რასაც მონაცემები მას სურს სერვერზე შემოწმების გარეშე. 753 00:37:01,690 --> 00:37:05,470 და თუ თქვენს სერვერზე არ არის, ასევე შემოწმების, მომცეს სახელი, არის 754 00:37:05,470 --> 00:37:08,930 ეს რეალურად მოქმედი ელექტრონული ფოსტის მისამართი, გააკეთა ისინი აირჩიოს dorm, თქვენ შეიძლება დასრულდება 755 00:37:08,930 --> 00:37:12,800 up ჩასმა ყალბი ან უბრალოდ ცარიელი მონაცემები თქვენი მონაცემთა ბაზა, რომელიც, სავარაუდოდ, 756 00:37:12,800 --> 00:37:15,450 არ იქნება კარგია თუ თქვენ ვთქვათ, რომ ეს იყო. 757 00:37:15,450 --> 00:37:16,770 >> ასე რომ ეს არის შემაშფოთებელი რეალობა. 758 00:37:16,770 --> 00:37:19,890 მაგრამ ზოგადად, კლიენტის მხარის დადასტურება არის დიდი. 759 00:37:19,890 --> 00:37:21,810 მაგრამ ეს იმას ნიშნავს ორჯერ მეტი მუშაობა. 760 00:37:21,810 --> 00:37:25,970 მიუხედავად იმისა, რომ გავაკეთოთ, არსებობს სხვადასხვა ბიბლიოთეკების, JavaScript ბიბლიოთეკა 761 00:37:25,970 --> 00:37:28,830 მაგალითად, რომ ეს ბევრად, გაცილებით ნაკლები თავის ტკივილი. 762 00:37:28,830 --> 00:37:31,940 და თქვენ შეგიძლიათ reuse ზოგიერთი კოდი სერვერის მხარეს, კლიენტის მხარეს. 763 00:37:31,940 --> 00:37:35,980 მაგრამ გვესმის, რომ ეს არის, როგორც წესი, დამატებითი სამუშაო. 764 00:37:35,980 --> 00:37:36,415 ჰო. 765 00:37:36,415 --> 00:37:37,792 >> აუდიტორია: ასე რომ, თუ ჩვენ მხოლოდ განაცხადა, ნაკლებად უსაფრთხო - 766 00:37:37,792 --> 00:37:39,205 >> დევიდ ჯ Malan: [იცინის] 767 00:37:39,205 --> 00:37:39,680 Ugh. 768 00:37:39,680 --> 00:37:43,105 ეს არის ყოველთვის რთული ვინც განიხილავს. 769 00:37:43,105 --> 00:37:44,480 >> რობ Bowden: რომ უკვე მიღებულია. 770 00:37:44,480 --> 00:37:44,810 >> დევიდ ჯ Malan: What? 771 00:37:44,810 --> 00:37:45,810 >> რობ Bowden: მე შექმნილი ეს პრობლემა. 772 00:37:45,810 --> 00:37:46,735 რომ იქნებოდა მიღებული. 773 00:37:46,735 --> 00:37:47,220 >> დევიდ ჯ Malan: ჰო. 774 00:37:47,220 --> 00:37:47,830 >> აუდიტორია: Cool. 775 00:37:47,830 --> 00:37:51,770 >> რობ Bowden: მაგრამ ჩვენ არ მიიღოს პირველად ერთ - 776 00:37:51,770 --> 00:37:53,630 კარგად, რასაც ჩვენ ვეძებთ არის რაღაც არ უნდა 777 00:37:53,630 --> 00:37:55,270 დაუკავშირდეს სერვერს. 778 00:37:55,270 --> 00:37:58,355 ჩვენ არ მიიღოს მხოლოდ სწრაფად. 779 00:37:58,355 --> 00:38:00,080 >> აუდიტორია: რა არ განაახლეთ გვერდი? 780 00:38:00,080 --> 00:38:00,430 >> რობ Bowden: დიახ. 781 00:38:00,430 --> 00:38:03,000 ეს იყო მიღებული პასუხი. 782 00:38:03,000 --> 00:38:06,300 >> დევიდ ჯ Malan: არაფერი სადაც ჩვენ იგრძნო ეს უფრო სავარაუდოა, ვიდრე არ სჩანს 783 00:38:06,300 --> 00:38:09,780 რომ იცოდნენ, რას განაცხადა, რომ, რომელიც მკაცრი 784 00:38:09,780 --> 00:38:13,500 ონლაინ მიაპყროს ხანდახან. 785 00:38:13,500 --> 00:38:16,000 გამოყენება უკავშირდება სიაში ნაცვლად მასივი შენარჩუნება 786 00:38:16,000 --> 00:38:17,590 დახარისხებული სია რიცხვებით. 787 00:38:17,590 --> 00:38:21,000 ასე upside ჩვენ ხშირად მოჰყავთ უკავშირდება სიები, მოტივირებული მთელი 788 00:38:21,000 --> 00:38:22,370 შესავალი იყო, თქვენ მიიღებთ დინამიკას. 789 00:38:22,370 --> 00:38:23,030 მათ შეუძლიათ იზრდება. 790 00:38:23,030 --> 00:38:23,950 მათ შეუძლიათ შემცირება. 791 00:38:23,950 --> 00:38:27,370 ასე რომ თქვენ არ უნდა ხტომა მეშვეობით hoops რეალურად შევქმნათ მეტი მეხსიერების 792 00:38:27,370 --> 00:38:28,140 მასივი. 793 00:38:28,140 --> 00:38:30,310 ან თქვენ არ უნდა უბრალოდ ამბობენ, უკაცრავად, შესახებ. 794 00:38:30,310 --> 00:38:31,410 მასივი ივსება. 795 00:38:31,410 --> 00:38:35,850 იმდენად დინამიური ზრდა სიაში. 796 00:38:35,850 --> 00:38:37,210 Downside თუმცა უკავშირდება სიები? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> აუდიტორია: ეს არის სწორხაზოვანი. 799 00:38:43,356 --> 00:38:45,800 ძიება უკავშირდება სია წრფივი ნაცვლად იმისა, რასაც თქვენ შეხვიდეთ სისტემაში 800 00:38:45,800 --> 00:38:46,360 >> დევიდ ჯ Malan: ზუსტად. 801 00:38:46,360 --> 00:38:50,160 ძიება უკავშირდება სიაში არის წრფივი, მაშინაც კი, თუ ეს დახარისხებული, რადგან თქვენ შეგიძლიათ 802 00:38:50,160 --> 00:38:53,170 მხოლოდ დაიცვას ეს პური crumbs, ამ პოინტერები, დაწყების სიაში 803 00:38:53,170 --> 00:38:53,570 ბოლომდე. 804 00:38:53,570 --> 00:38:57,970 თქვენ არ შეგიძლიათ ბერკეტები წვდომის და, ამდენად, ორობითი ძებნა, მაშინაც კი, თუ ის 805 00:38:57,970 --> 00:39:00,740 დახარისხებული, რომ შეიძლება ვუყოთ მასივი. 806 00:39:00,740 --> 00:39:02,390 და არსებობს კიდევ ერთი ღირებულება. 807 00:39:02,390 --> 00:39:02,966 ჰო. 808 00:39:02,966 --> 00:39:03,800 >> აუდიტორია: Memory არაეფექტური? 809 00:39:03,800 --> 00:39:04,130 >> დევიდ ჯ Malan: ჰო. 810 00:39:04,130 --> 00:39:06,940 ისე, მე არ ემთხვეოდეს ამბობენ, არაეფექტური. 811 00:39:06,940 --> 00:39:10,110 მაგრამ ეს არ დაგიჯდებათ მეტი მეხსიერების, რადგან თქვენ უნდა 32 ბიტი ყველა 812 00:39:10,110 --> 00:39:13,400 კვანძის დამატებითი მაჩვენებელი, at მაინც საგნით უკავშირდება სიაში. 813 00:39:13,400 --> 00:39:16,660 ახლა, თუ თქვენ მხოლოდ შენახვის რიცხვებით და თქვენ დასძინა მაჩვენებელი, რომ 814 00:39:16,660 --> 00:39:17,830 რეალურად სახის არასამთავრობო ტრივიალური. 815 00:39:17,830 --> 00:39:19,340 ის გააორმაგოს თანხის მეხსიერება. 816 00:39:19,340 --> 00:39:22,330 მაგრამ სინამდვილეში, თუ თქვენ შენახვა უკავშირდება სიაში structs რომ შესაძლოა 817 00:39:22,330 --> 00:39:25,540 8 ბაიტი, 16 ბაიტი, კიდევ უფრო გარდა ამისა, შესაძლოა, ეს ნაკლებად 818 00:39:25,540 --> 00:39:26,500 ზღვრული ღირებულება. 819 00:39:26,500 --> 00:39:28,320 მაგრამ ეს ღირებულება მაინც. 820 00:39:28,320 --> 00:39:31,880 ასე რომ, არც იმ იქნებოდა ეგ ყოფილა ჯარიმა, როგორც downsides. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 გამოყენება PHP ნაცვლად C დაწერა ბრძანების ხაზი პროგრამა. 823 00:39:36,100 --> 00:39:41,890 ასე რომ, აქ, ეს ხშირად უფრო სწრაფად გამოიყენოს ენა, როგორიცაა PHP ან Ruby ან Python. 824 00:39:41,890 --> 00:39:43,700 უბრალოდ სწრაფად გახსნა მდე ტექსტური რედაქტორი. 825 00:39:43,700 --> 00:39:45,900 თქვენ კიდევ ბევრი ფუნქციები ხელმისაწვდომი. 826 00:39:45,900 --> 00:39:49,325 PHP აქვს სამზარეულო რადიატორის ფუნქციები, ხოლო C, თქვენ 827 00:39:49,325 --> 00:39:50,420 ძალიან, ძალიან ცოტა. 828 00:39:50,420 --> 00:39:53,820 ფაქტობრივად, ბიჭები ვიცი რთული გზა რომ თქვენ არ უნდა hash მაგიდები. 829 00:39:53,820 --> 00:39:55,000 თქვენ არ უკავშირდება სიები. 830 00:39:55,000 --> 00:39:57,470 თუ გსურთ ის, რაც თქვენ უნდა განახორციელოს მათ თავს. 831 00:39:57,470 --> 00:40:00,950 >> ასე რომ ერთი თავდაყირა of PHP ან მართლაც ნებისმიერ ინტერპრეტირებული ენა არის rapidity 832 00:40:00,950 --> 00:40:02,920 რომელიც შეგიძლიათ დაწეროთ კოდი. 833 00:40:02,920 --> 00:40:06,660 მაგრამ downside, ჩვენ ვნახეთ, როდესაც მე სწრაფად whipped მდე misspeller 834 00:40:06,660 --> 00:40:11,780 შესრულების ლექცია გამოყენებით PHP, არის რომ გამოყენებით ინტერპრეტირებული ენა 835 00:40:11,780 --> 00:40:13,570 ჩვეულებრივ ნელი. 836 00:40:13,570 --> 00:40:18,420 და ჩვენ ვნახეთ, რომ demonstrably ერთად ზრდის დროს 0.3 წამში 3 837 00:40:18,420 --> 00:40:24,440 წამი, იმის გამო, რომ განმარტების რომ რეალურად ხდება. 838 00:40:24,440 --> 00:40:27,060 >> სხვა upside იყო, რომ თქვენ არ უნდა შეადგინოს. 839 00:40:27,060 --> 00:40:30,130 ასე რომ, ეს ასევე სიჩქარის განვითარება სხვათა შორის, იმის გამო, რომ თქვენ არ გაქვთ 840 00:40:30,130 --> 00:40:31,360 ორი ნაბიჯი გაშვებული პროგრამა. 841 00:40:31,360 --> 00:40:32,140 თქვენ უბრალოდ უნდა ერთი. 842 00:40:32,140 --> 00:40:35,260 და ისე, რომ საკმაოდ მყარი, როგორც კარგად. 843 00:40:35,260 --> 00:40:38,450 გამოყენება SQL მონაცემთა ბაზის ნაცვლად CSV ფაილი შესანახად მონაცემები. 844 00:40:38,450 --> 00:40:40,230 ასე რომ SQL მონაცემთა ბაზაში გამოიყენება pset7. 845 00:40:40,230 --> 00:40:42,060 CSV ფაილი თქვენ არ გამოიყენოს ბევრი. 846 00:40:42,060 --> 00:40:45,960 მაგრამ თქვენ გამოიყენება მას ირიბად pset7 როგორც ასევე საუბარი Yahoo ფინანსები. 847 00:40:45,960 --> 00:40:49,330 >> მაგრამ CSV ისევე Excel ფაილის მაგრამ სუპერ მარტივი, სადაც სვეტების 848 00:40:49,330 --> 00:40:54,010 უბრალოდ მკაცრ დემარკაციას ასახელებს მიერ მძიმეები შიგნით სხვაგვარად ტექსტური ფაილი. 849 00:40:54,010 --> 00:40:56,740 და გამოყენებით SQL მონაცემთა ბაზა ცოტა უფრო მყარი. 850 00:40:56,740 --> 00:41:00,060 ის upside, რადგან თქვენ კიდევ რამ ისევე როგორც შერჩევა და ჩადეთ და წაშლა. 851 00:41:00,060 --> 00:41:03,790 და თქვენ, სავარაუდოდ, ინდექსები, რომ MySQL და სხვა მონაცემთა ბაზები, როგორიცაა 852 00:41:03,790 --> 00:41:07,510 Oracle, აშენება თქვენთვის მეხსიერება, რომელიც ნიშნავს, რომ თქვენი არჩევა, ალბათ, არ 853 00:41:07,510 --> 00:41:09,000 იქნება ხაზოვანი ზემოდან. 854 00:41:09,000 --> 00:41:11,300 ეს რეალურად იქნება რაღაც ისევე, როგორც ორობითი ძებნა ან რამე 855 00:41:11,300 --> 00:41:12,520 მსგავსი სულისკვეთება. 856 00:41:12,520 --> 00:41:13,930 ასე რომ, ისინი ზოგადად უფრო სწრაფად. 857 00:41:13,930 --> 00:41:16,040 >> მაგრამ downside არის, რომ უბრალოდ უფრო მეტი მუშაობა. 858 00:41:16,040 --> 00:41:16,730 ეს არის უფრო მეტი ძალისხმევა. 859 00:41:16,730 --> 00:41:18,140 თქვენ უნდა გვესმოდეს ბაზაში. 860 00:41:18,140 --> 00:41:18,940 თქვენ უნდა მითითებული it up. 861 00:41:18,940 --> 00:41:20,840 თქვენ უნდა სერვერის გასაშვებად რომ მონაცემთა ბაზაში. 862 00:41:20,840 --> 00:41:22,750 თქვენ უნდა გვესმოდეს როგორ უნდა დააკონფიგურიროთ იგი. 863 00:41:22,750 --> 00:41:24,930 ასე რომ ეს არის მხოლოდ ამ სახის ვაჭრობის ღ. 864 00:41:24,930 --> 00:41:27,860 ვინაიდან CSV ფაილი, თქვენ შეგიძლიათ შექმნა იგი gedit. 865 00:41:27,860 --> 00:41:28,770 და თქვენ კარგი წასვლა. 866 00:41:28,770 --> 00:41:31,550 არ არსებობს სირთულის მიღმა. 867 00:41:31,550 --> 00:41:34,870 >> გამოყენება trie ნაცვლად hash table ცალკე chaining შესანახად 868 00:41:34,870 --> 00:41:37,490 ლექსიკონი სიტყვები თქვენში საქართველოს pset5. 869 00:41:37,490 --> 00:41:42,480 ამიტომ ცდილობს upside, თეორიულად მაინც, რა არის? 870 00:41:42,480 --> 00:41:46,380 მუდმივი დროს, მინიმუმ, თუ თქვენ hashing თითოეულ ინდივიდუალური 871 00:41:46,380 --> 00:41:48,990 ასო ერთი სიტყვით, როგორც თქვენ შეიძლება ჰქონდეს pset5. 872 00:41:48,990 --> 00:41:52,720 რომ შეიძლება იყოს ხუთი ჰეშები, ექვსი ჰეშები თუ არსებობს ხუთი ან ექვსი 873 00:41:52,720 --> 00:41:53,900 ასო სიტყვა. 874 00:41:53,900 --> 00:41:54,580 და ეს საკმაოდ კარგი. 875 00:41:54,580 --> 00:41:56,910 და თუ არსებობს ზედა ზღვარი, თუ როგორ ხანგრძლივი თქვენი სიტყვა შეიძლება იყოს, რომ 876 00:41:56,910 --> 00:41:59,320 მართლაც asymptotically მუდმივი დრო. 877 00:41:59,320 --> 00:42:05,180 >> ხოლო hash table ცალკე chaining, პრობლემა არ არსებობს, რომ 878 00:42:05,180 --> 00:42:09,070 სახის მონაცემები სტრუქტურა არის ის, რომ შესრულება თქვენი ალგორითმები, როგორც წესი, 879 00:42:09,070 --> 00:42:12,700 დამოკიდებულია რამ უკვე მონაცემები სტრუქტურა. 880 00:42:12,700 --> 00:42:15,660 და რომ ნამდვილად საქმე ჯაჭვები, რომლის დროსაც უფრო პერსონალის თქვენ დააყენა 881 00:42:15,660 --> 00:42:18,800 შევიდა hash table, აღარ იმ ჯაჭვების წასვლა, რაც იმას ნიშნავს, უარეს 882 00:42:18,800 --> 00:42:21,960 შემთხვევაში, რაც თქვენ შეიძლება ეძებს არის ყველა გზა ბოლოს ერთი 883 00:42:21,960 --> 00:42:26,000 იმ ჯაჭვების, რომელიც ეფექტურად devolves შევიდა რაღაც სწორხაზოვანი. 884 00:42:26,000 --> 00:42:29,450 >> ახლა, პრაქტიკულად, ეს შეიძლება აბსოლუტურად იმ შემთხვევაში, რომ hash მაგიდა 885 00:42:29,450 --> 00:42:32,820 ჯაჭვებით არის სწრაფად, ვიდრე შესაბამისი trie განხორციელება. 886 00:42:32,820 --> 00:42:35,570 მაგრამ ეს სხვადასხვა მიზეზების გამო, მათ შორის, რომელიც ცდილობს გამოიყენოს მთელი ბევრი 887 00:42:35,570 --> 00:42:39,240 მეხსიერება, რომელიც შეიძლება, ფაქტობრივად, ნელი რამ down, იმიტომ, რომ თქვენ არ მიიღოს nice 888 00:42:39,240 --> 00:42:42,410 სარგებელი რაღაც მოუწოდა ქეშირების, სადაც ყველაფერი, რომ ახლოს ვართ ერთად 889 00:42:42,410 --> 00:42:45,420 მეხსიერების შესაძლებელია ხშირად უფრო სწრაფად. 890 00:42:45,420 --> 00:42:48,180 და ზოგჯერ შეგიძლიათ ამუშავება ნამდვილად კარგი ქეშირების ფუნქცია. 891 00:42:48,180 --> 00:42:51,060 მაშინაც კი, თუ თქვენ გაქვთ დაგვრჩა ცოტა მეხსიერება, ალბათ, მართლაც, შეძლებს 892 00:42:51,060 --> 00:42:54,430 რამ სწრაფად და არ როგორც ცუდი ხაზოვანი. 893 00:42:54,430 --> 00:42:58,410 >> ასე მოკლედ, არ იყო აუცილებელი ნებისმიერი ამ ერთი ან თუნდაც ორი 894 00:42:58,410 --> 00:43:00,050 კონკრეტული რამ, ჩვენ ეძებდნენ. 895 00:43:00,050 --> 00:43:03,080 ნამდვილად არაფერი დამაჯერებელი როგორც upside და downside 896 00:43:03,080 --> 00:43:04,800 ზოგადად დაიჭირეს ჩვენი თვალი. 897 00:43:04,800 --> 00:43:11,840 >> რობ Bowden: ასე რომ upside, ჩვენ არ მიიღოს საკუთარი "სწრაფად". თქვენ 898 00:43:11,840 --> 00:43:14,540 უნდა ვთქვა რამე ამის შესახებ. 899 00:43:14,540 --> 00:43:17,910 მაშინაც კი, თუ თქვენ თქვით, თეორიულად უფრო სწრაფად, ვიცოდით, რომ თქვენ სახის გაგებული 900 00:43:17,910 --> 00:43:19,470 ის, რომ 0 და 1. 901 00:43:19,470 --> 00:43:22,820 და hash table, თეორიულად, არ არის 0 და 1. 902 00:43:22,820 --> 00:43:26,550 მოხსენიების შესახებ არაფერი runtime ზოგადად მივიღე თქვენ რაოდენობა. 903 00:43:26,550 --> 00:43:32,640 მაგრამ "სწრაფად", ყველაზე გადაწყვეტილებები დიდი board, რომ ლელო იყო 904 00:43:32,640 --> 00:43:34,990 ობიექტურად ნელა, ვიდრე გადაწყვეტილებები რომ იყო hash მაგიდები. 905 00:43:34,990 --> 00:43:37,250 ასე სწრაფად და თავისთავად არ არის ჭეშმარიტი. 906 00:43:37,250 --> 00:43:41,550 907 00:43:41,550 --> 00:43:44,380 >> დევიდ ჯ Malan: Dom de dom dom. 908 00:43:44,380 --> 00:43:46,686 მე ალბათ მხოლოდ ერთი, რომ ხვდება, ასე რომ უნდა 909 00:43:46,686 --> 00:43:47,500 ცხადდება, არა? 910 00:43:47,500 --> 00:43:50,400 >> რობ Bowden: მე მქონდა რეალურად არ ვიცი. 911 00:43:50,400 --> 00:43:51,650 >> დევიდ ჯ Malan: ეს გააკეთა გრძნობა ჩემი უფროსი. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> რობ Bowden: მე ვაკეთებ ეს ერთი. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 ასე რომ, ეს არის ის, სადაც თქვენ უნდა დახაზოთ გრაფიკაზე მსგავსი ალბათ 916 00:44:04,243 --> 00:44:06,040 მინახავს გასული გამოცდები. 917 00:44:06,040 --> 00:44:12,200 მოდით შევჩერდეთ ამ. 918 00:44:12,200 --> 00:44:18,170 ასე რომ HTML კვანძის, ჩვენ გვაქვს ორი ბავშვები, ხელმძღვანელი და სხეულის. 919 00:44:18,170 --> 00:44:20,570 ასე რომ, ჩვენ ფილიალი - ხელმძღვანელი და სხეულის. 920 00:44:20,570 --> 00:44:22,280 უფროსი აქვს სათაური აქვს. 921 00:44:22,280 --> 00:44:23,710 ამიტომ ჩვენ გვაქვს ტიტული. 922 00:44:23,710 --> 00:44:28,450 >> ახლა ერთი რამ, ბევრი ადამიანი დაავიწყდა, რომ ეს ტექსტური კვანძების 923 00:44:28,450 --> 00:44:30,430 ელემენტების ფარგლებში ამ ხეს. 924 00:44:30,430 --> 00:44:36,260 ასე რომ, აქ ჩვენ არ უნდა დავხატოთ მათ ovals დიფერენცირება მათ ამ 925 00:44:36,260 --> 00:44:37,380 სახის კვანძების. 926 00:44:37,380 --> 00:44:41,450 მაგრამ ცნობა აქ ჩვენ ზედა, შუა და ქვედა დასრულდება მდე მიმდინარეობს 927 00:44:41,450 --> 00:44:42,560 ტექსტური კვანძების. 928 00:44:42,560 --> 00:44:46,250 ასე რომ ივიწყებს იმ გარკვეულწილად საერთო შეცდომა. 929 00:44:46,250 --> 00:44:48,770 >> ორგანოს სამი შვილი ჰყავს - ამ სამი divs. 930 00:44:48,770 --> 00:44:53,340 ასე რომ, div, div, div, შემდეგ კი ტექსტი კვანძის ბავშვები იმ divs. 931 00:44:53,340 --> 00:44:55,900 რომ საკმაოდ ბევრი ეს რომ შეკითხვებს. 932 00:44:55,900 --> 00:44:57,860 >> დევიდ ჯ Malan: და ეს უნდა აღინიშნოს, მიუხედავად იმისა, რომ ჩვენ არ შევჩერდებით ამ 933 00:44:57,860 --> 00:45:01,040 ვრცლად დროს ვხარჯავთ JavaScript, რომ იმისათვის აკეთებს, 934 00:45:01,040 --> 00:45:02,290 ფაქტია, რომ ამ საკითხზე ტექნიკურად. 935 00:45:02,290 --> 00:45:06,330 ასე რომ, თუ ხელმძღვანელი მოდის ადრე ორგანოს HTML, მაშინ იგი უნდა როგორც ჩანს, 936 00:45:06,330 --> 00:45:08,860 მარცხენა სხეულის ფაქტობრივი DOM. 937 00:45:08,860 --> 00:45:12,265 რომ მისი, ზოგადად, უბრალოდ შეგახსენებთ, რაღაც მოუწოდა დოკუმენტი, რათა, სადაც 938 00:45:12,265 --> 00:45:13,260 მას არ აქვს მნიშვნელობა. 939 00:45:13,260 --> 00:45:17,470 და თუ თქვენ ახორციელებს parser, პროგრამა, რომელიც ნათქვამია HTML შენობაში 940 00:45:17,470 --> 00:45:20,960 up ხე მეხსიერებაში, რომ იყოს პატიოსანი, რომ არის ინტუიციურად ალბათ ის, რაც თქვენ 941 00:45:20,960 --> 00:45:24,720 ამის გაკეთება მაინც - ყველაზე ქვედა, მარცხნიდან მარჯვნივ. 942 00:45:24,720 --> 00:45:26,116 >> რობ Bowden: კითხვები რომ? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 უნდა გავაკეთოთ მომდევნო ერთი? 945 00:45:30,000 --> 00:45:32,380 >> დევიდ ჯ Malan: რა თქმა უნდა. 946 00:45:32,380 --> 00:45:33,810 >> რობ Bowden: OK. 947 00:45:33,810 --> 00:45:39,320 ასე რომ, ეს ბუფერული გაუსწრო თავდასხმის საკითხი. 948 00:45:39,320 --> 00:45:43,740 მთავარია აღიაროს აქ არის, ისევე, როგორ შეიძლება მოწინააღმდეგის შეასრულა 949 00:45:43,740 --> 00:45:46,170 ამ პროგრამის თარგმნეს შესრულებაში თვითნებური კოდი? 950 00:45:46,170 --> 00:45:51,860 ასე argv1, პირველი ბრძანების არგუმენტი ამ პროგრამის, რომელიც შეიძლება იყოს 951 00:45:51,860 --> 00:45:53,920 თვითნებურად ხანგრძლივი. 952 00:45:53,920 --> 00:45:59,160 მაგრამ აქ ჩვენ გამოყენებით memcpy კოპირება argv1, რომელიც აქ არის ბარი. 953 00:45:59,160 --> 00:46:00,165 ჩვენ ავლით მას, როგორც არგუმენტი. 954 00:46:00,165 --> 00:46:02,050 და ასე აღების სახელწოდების ბარი. 955 00:46:02,050 --> 00:46:08,040 >> ასე რომ ჩვენ memcpying ბარი ამ ბუფერული გ. 956 00:46:08,040 --> 00:46:09,400 რამდენი ბაიტი ჩვენ გადაწერა? 957 00:46:09,400 --> 00:46:14,040 კარგად, მაგრამ ბევრი bytes ბარი ხდება გამოყენებით, სიგრძით, რომ არგუმენტი. 958 00:46:14,040 --> 00:46:17,930 მაგრამ c მხოლოდ 12 ბაიტი კარს. 959 00:46:17,930 --> 00:46:22,280 ასე რომ, თუ ჩვენ აკრიფოთ ბრძანება ხაზი არგუმენტი რომ ის უფრო მეტია, ვიდრე 12 ბაიტი, ჩვენ 960 00:46:22,280 --> 00:46:25,470 აპირებს overflow ამ კერძოდ ბუფერული. 961 00:46:25,470 --> 00:46:31,000 ახლა, როგორ შეიძლება მოწინააღმდეგის შეასრულა პროგრამა შევიდა შესრულებაში თვითნებური კოდი? 962 00:46:31,000 --> 00:46:34,910 >> ასე მახსოვს, რომ აქ მთავარ მოუწოდებს foo. 963 00:46:34,910 --> 00:46:37,340 და ასე შემდეგ მთავარ მოუწოდებს foo. 964 00:46:37,340 --> 00:46:40,408 მოდით დავხატოთ ეს. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 ასე რომ, ჩვენ გვაქვს ჩვენი Stack. 967 00:46:46,990 --> 00:46:49,090 და ძირითადი აქვს დასტის ჩარჩო ბოლოში. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 რაღაც მომენტში, მთავარ მოუწოდებს foo. 970 00:46:53,250 --> 00:46:55,390 ასევე, დაუყოვნებლივ, მთავარ მოუწოდებს foo. 971 00:46:55,390 --> 00:46:57,130 და ასე foo იღებს საკუთარი დასტის ჩარჩო. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> ახლა, რაღაც მომენტში, foo დაბრუნებას აპირებს. 974 00:47:02,220 --> 00:47:06,810 და წავიდა foo ბრუნდება, ჩვენ უნდა ვიცოდეთ at რა ხაზი კოდი შიგნით ძირითადი ჩვენ 975 00:47:06,810 --> 00:47:10,610 იყო იმისათვის, რომ ვიცი, სადაც ჩვენ უნდა განაახლონ მთავარ. 976 00:47:10,610 --> 00:47:13,100 ჩვენ შეგვიძლია მოვუწოდებთ foo ეხლა მთელი bunch სხვადასხვა ადგილებში. 977 00:47:13,100 --> 00:47:14,620 ვიცით, სად უნდა დაბრუნდნენ? 978 00:47:14,620 --> 00:47:16,460 კარგად, ჩვენ გვჭირდება შესანახად რომ სადღაც. 979 00:47:16,460 --> 00:47:23,010 >> ასე რომ სადღაც უფლება გარშემო აქ, ჩვენ ვინახავთ სადაც ჩვენ უნდა დაუბრუნდეს ერთხელ 980 00:47:23,010 --> 00:47:24,070 foo ბრუნდება. 981 00:47:24,070 --> 00:47:26,350 და ეს არის დაბრუნების მისამართზე. 982 00:47:26,350 --> 00:47:30,490 ასე რომ, თუ მოწინააღმდეგე შეიძლება ისარგებლოს ეს არის ის ფაქტი, რომ 983 00:47:30,490 --> 00:47:37,550 ამ ბუფერული c ინახება, მოდით ამბობენ, სწორედ აქ არის გ. 984 00:47:37,550 --> 00:47:39,690 ამიტომ, ჩვენ მივიღეთ 12 ბაიტი გ. 985 00:47:39,690 --> 00:47:40,540 ეს არის გ. 986 00:47:40,540 --> 00:47:43,030 და ეს არის foo-ს დასტის ბეჭედი. 987 00:47:43,030 --> 00:47:49,970 ასე რომ, თუ მუქარის მომხმარებლის შემოდის მეტი ბაიტი, ვიდრე 12 ან ისინი შეიყვანოთ ბრძანება 988 00:47:49,970 --> 00:47:54,570 ხაზი არგუმენტი, რომ ის უფრო მეტია, ვიდრე 12 პერსონაჟი, მაშინ ჩვენ ვაპირებთ 989 00:47:54,570 --> 00:47:57,540 overflow ამ ბუფერული. 990 00:47:57,540 --> 00:47:59,910 >> ჩვენ შეგვიძლია შევინარჩუნოთ აპირებს. 991 00:47:59,910 --> 00:48:02,220 და რაღაც მომენტში, ჩვენ შორს საკმარისი, რომ ჩვენ ვიწყებთ 992 00:48:02,220 --> 00:48:05,120 overwriting ამ დაბრუნების მისამართზე. 993 00:48:05,120 --> 00:48:08,310 ასე რომ ერთხელ ჩვენ გადავაწერო დაბრუნების მისამართი, ეს იმას ნიშნავს, რომ როდესაც foo 994 00:48:08,310 --> 00:48:14,220 ბრუნდება, ჩვენ ბრუნდება იქ, სადაც მუქარის შესახებ ეუბნება ის მიერ 995 00:48:14,220 --> 00:48:19,490 რასაც ღირებულება შევიდა, რასაც გმირები პროფაილი შევიდა. 996 00:48:19,490 --> 00:48:24,320 და ასე თუ მუქარის შესახებ მიმდინარეობს განსაკუთრებით ჭკვიანი, მას შეუძლია ჰქონდეს ამ 997 00:48:24,320 --> 00:48:29,255 დაბრუნდება სადღაც printDef ფუნქცია ან სადღაც malloc 998 00:48:29,255 --> 00:48:31,830 ფუნქცია, მხოლოდ სადმე თვითნებური. 999 00:48:31,830 --> 00:48:38,420 >> მაგრამ კიდევ უფრო ჭკვიანი არის ის, რაც, თუ მას აქვს მომხმარებლის დაბრუნების უფლება აქ. 1000 00:48:38,420 --> 00:48:41,920 და მაშინ იწყება შესრულებაში ეს როგორც ხაზების კოდი. 1001 00:48:41,920 --> 00:48:46,610 ასე რომ, იმ ეტაპზე, მომხმარებელს შეუძლია შევიდეს რასაც მას სურს ამ რეგიონში. 1002 00:48:46,610 --> 00:48:52,210 და მას აქვს სრული კონტროლი თქვენი პროგრამა. 1003 00:48:52,210 --> 00:48:53,460 კითხვები რომ? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 ასე რომ, შემდეგი კითხვა არის სრული reimplementation of foo იმგვარად 1006 00:49:00,970 --> 00:49:02,620 რომ ის აღარ არის დაუცველი. 1007 00:49:02,620 --> 00:49:03,870 >> ასე რომ არსებობს რამდენიმე გზა თქვენ შეიძლება გაკეთდეს ეს. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 ჩვენ ჯერ კიდევ გვაქვს c მხოლოდ მიმდინარეობს სიგრძე 12. 1010 00:49:13,330 --> 00:49:16,480 თქვენ შეიძლება შეიცვალა ამ როგორც ნაწილი თქვენი გადაწყვეტა. 1011 00:49:16,480 --> 00:49:18,930 ჩვენ ასევე დასძინა, გამშვები, რათა დარწმუნებული ვარ, ბარი არ იყო null. 1012 00:49:18,930 --> 00:49:24,460 მიუხედავად იმისა, რომ თქვენ არ უნდა რომ სრული საკრედიტო. 1013 00:49:24,460 --> 00:49:27,690 ასე რომ, ჩვენ შემოწმების პირველი სიმებიანი სიგრძე ბარი. 1014 00:49:27,690 --> 00:49:31,650 თუ ის მეტია, ვიდრე 12, მაშინ რეალურად არ გავაკეთოთ ასლი. 1015 00:49:31,650 --> 00:49:33,010 ასე რომ ერთი გზა აფიქსირებს მას. 1016 00:49:33,010 --> 00:49:36,750 >> სხვა გზა აფიქსირებს ის ნაცვლად მქონე c მხოლოდ სიგრძის 12, აქვს ეს 1017 00:49:36,750 --> 00:49:39,310 იყოს სიგრძით strlen (ბარი). 1018 00:49:39,310 --> 00:49:43,370 სხვა გზა აფიქსირებს, რომ ეს არის რეალურად უბრალოდ დააბრუნოს. 1019 00:49:43,370 --> 00:49:46,690 ასე რომ, თუ თქვენ ახლახანს მიღებული მოშორება ყველა , თუ თქვენ ახლახანს წაშლილია ყველა 1020 00:49:46,690 --> 00:49:51,830 ხაზი კოდი, თქვენ მიღებული სრული საკრედიტო, რადგან ეს ფუნქცია 1021 00:49:51,830 --> 00:49:54,150 ფაქტობრივად არ მიდის. 1022 00:49:54,150 --> 00:49:57,650 ის გადაწერა command line არგუმენტი შევიდა ზოგიერთი მასივი 1023 00:49:57,650 --> 00:49:59,960 მისი ადგილობრივი დასტის ჩარჩო. 1024 00:49:59,960 --> 00:50:01,310 და შემდეგ ის ბრუნდება. 1025 00:50:01,310 --> 00:50:04,020 და რაც დასრულებული გაქრა. 1026 00:50:04,020 --> 00:50:09,740 ასე რომ, დაბრუნების, ასევე, საკმარისი გზა მიღების სრული საკრედიტო. 1027 00:50:09,740 --> 00:50:13,425 >> დევიდ ჯ Malan: არ არის საკმაოდ სულისკვეთებით კითხვაზე, მაგრამ მისაღებია პოსტი 1028 00:50:13,425 --> 00:50:15,580 სპეც მაინც. 1029 00:50:15,580 --> 00:50:18,260 >> რობ Bowden: კითხვები ნებისმიერ, რომ? 1030 00:50:18,260 --> 00:50:22,270 ერთი რამ, რომ თქვენ, სულ ცოტა, საჭიროა არ შედგენის კოდი. 1031 00:50:22,270 --> 00:50:24,810 ასე რომ, მიუხედავად იმისა, რომ ტექნიკურად არ ხართ სოციალურად დაუცველი თუ თქვენი კოდი არ 1032 00:50:24,810 --> 00:50:29,130 შედგენა, ჩვენ არ მიიღოს, რომ. 1033 00:50:29,130 --> 00:50:31,350 კითხვები? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> დევიდ ჯ Malan: გნებავთ ამბობენ, რომ ეს სათაური? 1036 00:50:34,580 --> 00:50:37,230 >> რობ Bowden: არა 1037 00:50:37,230 --> 00:50:40,470 >> დევიდ ჯ Malan: ასე რომ, ამ ერთი, ამ იყო ან კარგი ამბავია და ცუდი ამბავი. 1038 00:50:40,470 --> 00:50:43,870 ეს არის ფაქტიურად იგივე პრობლემა როგორც პირველი ვიქტორინა. 1039 00:50:43,870 --> 00:50:46,140 და ეს თითქმის იგივე პრობლემა pset1. 1040 00:50:46,140 --> 00:50:49,980 მაგრამ ეს იყო შეგნებულად გამარტივებული იყოს მარტივი პირამიდის, რომელიც შეიძლება იყოს 1041 00:50:49,980 --> 00:50:52,330 გადაწყდეს ოდნავ მარტივი iteration. 1042 00:50:52,330 --> 00:50:55,680 და მართლაც, რა ჩვენ მიღების დროს აქ იყო არა იმდენად ლოგიკით, 1043 00:50:55,680 --> 00:50:58,100 იმიტომ, რომ, ალბათ, ამ ეტაპზე, თქვენ უფრო კომფორტული ვიდრე იყავით 1044 00:50:58,100 --> 00:51:01,850 კვირაში ერთი მარყუჟების ან რატომ მარყუჟების, მაგრამ ნამდვილად აჯავრებენ გარდა, რომ 1045 00:51:01,850 --> 00:51:04,790 თქვენ ცოტა კომფორტულად მოსაზრება, რომ PHP არ არის მხოლოდ იმაზე, თუ რა 1046 00:51:04,790 --> 00:51:05,290 პროგრამირების. 1047 00:51:05,290 --> 00:51:07,820 მას შეუძლია რეალურად გამოყენებულ იქნას როგორც ენის დაწერა command line პროგრამები. 1048 00:51:07,820 --> 00:51:10,060 >> და მართლაც, ის, რაც ჩვენ ცდილობდნენ გავამახვილო თქვენი ყურადღება. 1049 00:51:10,060 --> 00:51:12,060 ეს არის command line PHP პროგრამა. 1050 00:51:12,060 --> 00:51:16,690 ასე რომ, C კოდი აქ, ხოლო სწორი დო, არ არის სწორი PHP. 1051 00:51:16,690 --> 00:51:17,940 მაგრამ კოდი ნამდვილად არ არის იგივე. 1052 00:51:17,940 --> 00:51:21,720 თუ შევადარებთ გადაწყვეტილებები Quiz 0 წინააღმდეგ Quiz 1, თქვენ ნახავთ, რომ 1053 00:51:21,720 --> 00:51:25,630 ის თითქმის იდენტურია, გარდა ზოგიერთი დოლარის ნიშნები და 1054 00:51:25,630 --> 00:51:27,250 არ არსებობს მონაცემები ტიპის. 1055 00:51:27,250 --> 00:51:31,720 კერძოდ, თუ გადავხედავთ აქ, თქვენ ნახავთ, რომ ჩვენ iterate, ამ 1056 00:51:31,720 --> 00:51:33,730 შემთხვევაში, 1 მეშვეობით 7. 1057 00:51:33,730 --> 00:51:34,910 >> ჩვენ შეგვეძლო გავაკეთეთ 0 ინდექსი. 1058 00:51:34,910 --> 00:51:37,320 მაგრამ ზოგჯერ, მე ვფიქრობ, რომ ეს მხოლოდ გონებრივი ადვილია ვიფიქროთ რამ 1059 00:51:37,320 --> 00:51:38,200 1 დან 7. 1060 00:51:38,200 --> 00:51:40,300 თუ გსურთ ერთი ბლოკი, მაშინ განიხილება ორი ბლოკები, შემდეგ სამი, მაშინ 1061 00:51:40,300 --> 00:51:41,770 dot, dot, dot შვიდი. 1062 00:51:41,770 --> 00:51:45,960 ჩვენ j მიმდინარეობს ინიციალიზაცია 1 და შემდეგ იმედი მდე i. 1063 00:51:45,960 --> 00:51:48,150 და ყველაფერი აქ არის წინააღმდეგ შემთხვევაში იდენტურია. 1064 00:51:48,150 --> 00:51:49,790 მაგრამ აღსანიშნავია, რამდენიმე რამ. 1065 00:51:49,790 --> 00:51:53,230 ჩვენ მოგაწვდით ამ ორ წყებას, ეს პირველი ერთი, goofily ასახელებენ shebang 1066 00:51:53,230 --> 00:51:54,560 მკვეთრი bang. 1067 00:51:54,560 --> 00:51:58,770 და რომ მხოლოდ განსაზღვრავს გზა, საქაღალდეში, რომელშიც პროგრამა შეიძლება 1068 00:51:58,770 --> 00:52:02,160 აღმოჩნდა, რომ გსურთ გამოიყენოთ ინტერპრეტაცია ამ ფაილის. 1069 00:52:02,160 --> 00:52:04,710 >> და მაშინ ხაზის შემდეგ, რომ, რა თქმა უნდა, იმას ნიშნავს, შეიყვანოთ PHP რეჟიმში. 1070 00:52:04,710 --> 00:52:07,740 და ხაზი ძალიან ბოლოში ნიშნავს გასასვლელში PHP რეჟიმში. 1071 00:52:07,740 --> 00:52:09,740 და ეს სამუშაოები, საერთოდ, ინტერპრეტირებული ენებზე. 1072 00:52:09,740 --> 00:52:14,370 ეს არის სახის შემაშფოთებელი თუ წერთ პროგრამის ფაილი სახელად foo.php. 1073 00:52:14,370 --> 00:52:17,320 და შემდეგ თქვენი წევრებს უნდა, ისევე, მახსოვს, OK, აწარმოებს ამ პროგრამის მე 1074 00:52:17,320 --> 00:52:22,320 უნდა აკრიფოთ "php ფართი foo.php". კეთილი შემაშფოთებელი თუ სხვა არაფერი. 1075 00:52:22,320 --> 00:52:25,270 და ის ასევე ცხადყოფს, რომ თქვენი პროგრამა დაწერილი PHP, რომელიც არ არის 1076 00:52:25,270 --> 00:52:27,060 რომ გასანათებელი შესახებ. 1077 00:52:27,060 --> 00:52:30,100 >> ასე რომ თქვენ შეგიძლიათ ამოიღონ. Php საერთოდ გავიხსენოთ ლექცია. 1078 00:52:30,100 --> 00:52:35,690 და თქვენ შეგიძლიათ რეალურად გავაკეთოთ. / Foo თუ თქვენ chmodded ის მიერ მიღების იგი 1079 00:52:35,690 --> 00:52:36,500 გაშვება. 1080 00:52:36,500 --> 00:52:39,630 ასე რომ chmod + x foo არ კეთდება, რომ. 1081 00:52:39,630 --> 00:52:41,460 და თუ ასევე shebang აქ. 1082 00:52:41,460 --> 00:52:45,320 მაგრამ რეალურად, პრობლემა მიღების დროს დაბეჭდვისას რაღაც მსგავსი. 1083 00:52:45,320 --> 00:52:51,100 არარის HTML, არ C-კოდი რა თქმა უნდა, რამოდენიმე PHP. 1084 00:52:51,100 --> 00:52:54,100 ასე Milo შემდეგ დაბრუნდა პრობლემა 25. 1085 00:52:54,100 --> 00:52:58,050 და 25 თქვენ გადაეცათ შემდეგ ჩონჩხის კოდი, რომელიც 1086 00:52:58,050 --> 00:52:59,730 საკმაოდ მარტივი ვებ გვერდი. 1087 00:52:59,730 --> 00:53:04,230 და წვნიანი ნაწილი HTML ბრძენი იყო ქვემოთ აქ, სადაც ჩვენ შიგნით ორგანო 1088 00:53:04,230 --> 00:53:09,160 ფორმა, რომელიც აქვს უნიკალური ID საშუალებებით შიგნით რაც იყო ორი საშუალებებით, ერთი 1089 00:53:09,160 --> 00:53:11,950 იდეა სახელწოდება, ერთი იდეა ღილაკს. 1090 00:53:11,950 --> 00:53:14,240 >> პირველი ტიპის ტექსტი, მეორე ტიპის წარუდგინოს. 1091 00:53:14,240 --> 00:53:16,930 ასე რომ, ჩვენ მისცა თქვენ, ფაქტობრივად, უფრო ინგრედიენტები, ვიდრე თქვენ საჭირო, მხოლოდ ისე, 1092 00:53:16,930 --> 00:53:19,230 თქვენ ბიჭები ჰქონდა ვარიანტი, რომელიც ამ პრობლემის მოგვარებას. 1093 00:53:19,230 --> 00:53:21,130 თქვენ არ მკაცრად უნდა ყველა ამ პირადობის მოწმობა. 1094 00:53:21,130 --> 00:53:23,580 მაგრამ ეს საშუალებას გაძლევთ გადაწყვიტოს ის სხვადასხვა გზით. 1095 00:53:23,580 --> 00:53:27,050 და ზედა შეამჩნევთ, რომ მიზანი იყო გამოწვევა 1096 00:53:27,050 --> 00:53:27,960 ფანჯარა მსგავსი - 1097 00:53:27,960 --> 00:53:28,780 Hello, Milo, - 1098 00:53:28,780 --> 00:53:31,270 პოპ up ბრაუზერის გამოყენებით სუპერ მარტივია, თუ 1099 00:53:31,270 --> 00:53:33,190 არა მახინჯი, alert ფუნქცია. 1100 00:53:33,190 --> 00:53:37,480 ასე რომ, საბოლოო ჯამში, ამ დაყვანა კონცეპტუალურად, რათა როგორმე მოსმენის 1101 00:53:37,480 --> 00:53:41,290 წარდგინება ფორმის კლიენტის მხარის არა სერვერის მხარეს, რატომღაც 1102 00:53:41,290 --> 00:53:45,640 რეაგირებს, რომ წარდგენის grabbing ღირებულება, რომ მომხმარებლის აკრეფილი 1103 00:53:45,640 --> 00:53:50,120 ამ სახელს ველი, და შემდეგ აჩვენებს მას სხეულის alert. 1104 00:53:50,120 --> 00:53:53,460 >> ასე რომ ერთი გზა ამისათვის არის jQuery, რომელიც გამოიყურება პატარა 1105 00:53:53,460 --> 00:53:56,880 syntactically perplexing პირველი. 1106 00:53:56,880 --> 00:54:00,760 შეგიძლიათ გააკეთოთ ეს სუფთა DOM კოდი - document.getelement ით. 1107 00:54:00,760 --> 00:54:02,530 მაგრამ მოდით შევხედოთ ამ ვერსიაში. 1108 00:54:02,530 --> 00:54:05,110 მე მაქვს რამდენიმე მნიშვნელოვანი ხაზები პირველი. 1109 00:54:05,110 --> 00:54:09,460 ასე რომ, ერთი, ჩვენ ამ ხაზის, რომელიც იდენტური, თუ რა შეიძლება მინახავს 1110 00:54:09,460 --> 00:54:13,830 წელს, მე მჯერა, form2.html ეხლა კლასის week 9. 1111 00:54:13,830 --> 00:54:16,960 და ეს უბრალოდ ვამბობ, შეასრულოს შემდეგი კოდი, როდესაც 1112 00:54:16,960 --> 00:54:18,430 დოკუმენტი მზად არის. 1113 00:54:18,430 --> 00:54:21,770 ეს მიმდინარეობს მნიშვნელოვანი მხოლოდ იმიტომ, HTML გვერდები წაკითხვის დაბრუნება 1114 00:54:21,770 --> 00:54:23,280 ბოლოში, მარცხნიდან მარჯვნივ. 1115 00:54:23,280 --> 00:54:27,910 >> და ამიტომ, თუ თქვენ ცდილობენ გააკეთონ რაღაც კოდი აქ ზოგიერთი DOM 1116 00:54:27,910 --> 00:54:31,560 ელემენტი, ზოგიერთი HTML tag, რომ ქვემოთ აქ, თქვენ ამის გაკეთება ძალიან მალე, 1117 00:54:31,560 --> 00:54:34,220 იმიტომ, რომ ეს არც კი უკვე წაიკითხა მეხსიერებაში. 1118 00:54:34,220 --> 00:54:37,740 ასე რომ ამ document.ready ხაზი, ჩვენ ვამბობთ, 1119 00:54:37,740 --> 00:54:39,040 აქ არის რამდენიმე კოდი, ბრაუზერში. 1120 00:54:39,040 --> 00:54:42,440 მაგრამ არ შეასრულოს ეს სანამ მთელი დოკუმენტი მზად არის, რომ არის DOM 1121 00:54:42,440 --> 00:54:44,320 ხე არსებობს მეხსიერებაში. 1122 00:54:44,320 --> 00:54:47,110 ეს ერთი არის ცოტა მეტი მარტივია, თუ syntactically 1123 00:54:47,110 --> 00:54:51,890 ცოტა განსხვავებული, სადაც მე ვამბობ, დაიბრუნოს HTML-ის ელემენტი, რომელთა უნიკალური 1124 00:54:51,890 --> 00:54:53,560 მაიდენტიფიცირებელი საშუალებებით. 1125 00:54:53,560 --> 00:54:56,220 სწორედ hash tag აღნიშნავს, უნიკალური ID. 1126 00:54:56,220 --> 00:54:58,070 და შემდეგ მე მოუწოდებდა. წარუდგინოს. 1127 00:54:58,070 --> 00:55:01,660 >> ასე. წარმოადგინონ აქ არის ფუნქცია, წინააღმდეგ შემთხვევაში, ცნობილია, როგორც საშუალებას, რომ 1128 00:55:01,660 --> 00:55:05,850 შიგნით ობიექტის მარცხენა მხარეს, რომ არ გააშუქებს. 1129 00:55:05,850 --> 00:55:08,990 ასე რომ, თუ ფიქრობთ საშუალებებით როგორც ობიექტი მეხსიერება - და მართლაც ეს არის. 1130 00:55:08,990 --> 00:55:10,440 ის კვანძის ხე - 1131 00:55:10,440 --> 00:55:16,580 . წარმოადგინონ საშუალებით, როდესაც ეს ფორმა ამ ID წარედგინება, შეასრულოს 1132 00:55:16,580 --> 00:55:17,700 შემდეგი კოდი. 1133 00:55:17,700 --> 00:55:20,290 მე არ მაინტერესებს რა სახელი ფუნქცია მე შესრულებაში. 1134 00:55:20,290 --> 00:55:23,760 ასე რომ აქ მე გამოყენებით, როგორც ადრე, რა არის მოუწოდა ლამბდა ფუნქცია ან 1135 00:55:23,760 --> 00:55:24,720 ანონიმური ფუნქცია. 1136 00:55:24,720 --> 00:55:27,640 ეს არ არის ყველა ინტელექტუალურად საინტერესო გარდა მას არა აქვს სახელი, 1137 00:55:27,640 --> 00:55:30,220 რომელიც არის ჯარიმა, თუ თქვენ მხოლოდ ოდესმე აპირებს ეძახით ერთხელ. 1138 00:55:30,220 --> 00:55:34,490 და შიგნით არსებობს მე რეალურად უმკლავდება წარდგენის ფორმით. 1139 00:55:34,490 --> 00:55:36,810 მე პირველად განაცხადოს ცვლადი ე.წ. ღირებულება. 1140 00:55:36,810 --> 00:55:40,610 და მაშინ რა არის ეფექტი ამ ხაზგასმით ნაწილი აქ არის? 1141 00:55:40,610 --> 00:55:44,755 რას აკეთებთ მაღალი დონის ჩემთვის? 1142 00:55:44,755 --> 00:55:48,539 >> აუდიტორია: იგი იღებს ღირებულება, რომელიც შესახებ არ შეუძლიათ HTML ქვემოთ. 1143 00:55:48,539 --> 00:55:50,920 იგი იღებს, რომ ID და შემდეგ აღმოაჩენს ღირებულება მას. 1144 00:55:50,920 --> 00:55:51,590 >> დევიდ ჯ Malan: ზუსტად. 1145 00:55:51,590 --> 00:55:54,300 ის grabs კვანძის, რომლის უნიკალურ მაიდენტიფიცირებელი სახელი. 1146 00:55:54,300 --> 00:55:56,900 იგი იღებს ღირებულება მასში, რომელიც არის, სავარაუდოდ, რა შესახებ 1147 00:55:56,900 --> 00:55:58,190 აკრეფილი მას თავად. 1148 00:55:58,190 --> 00:56:01,020 და შემდეგ იგი ინახავს რომ ცვლადში ღირებულება. 1149 00:56:01,020 --> 00:56:03,720 როგორც განზე, თქვენ შეიძლება ასევე გაკეთდეს ამ პატარა განსხვავებულად. 1150 00:56:03,720 --> 00:56:09,250 სრულიად მისაღები თავისსავე ტყუილი var ღირებულება იღებს 1151 00:56:09,250 --> 00:56:10,500 document.getElementById. 1152 00:56:10,500 --> 00:56:12,860 1153 00:56:12,860 --> 00:56:15,460 და ამიტომ ეს პატარა tedious არ გამოიყენოთ jQuery. 1154 00:56:15,460 --> 00:56:16,710 "სახელი". ღირებულება. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 ასე რომ, სრულიად მისაღებია. 1157 00:56:19,620 --> 00:56:22,770 სხვადასხვა გზა ამის გაკეთება. jQuery მხოლოდ იხრება უფრო ლაკონური და 1158 00:56:22,770 --> 00:56:25,230 ნამდვილად უფრო პოპულარული მათ შორის პროგრამისტები. 1159 00:56:25,230 --> 00:56:27,590 >> ახლა, მე ვაკეთებ ცოტა საღი აზრის შემოწმება, რადგან პრობლემა 1160 00:56:27,590 --> 00:56:30,820 განცხადებაში ჩვენ მკაფიოდ განაცხადა, იმ შემთხვევაში, თუ მომხმარებელს ჯერ არ აკრეფილი მისი 1161 00:56:30,820 --> 00:56:32,580 სახელი, არ ჩანს შეტყობინებები. 1162 00:56:32,580 --> 00:56:35,390 მაგრამ შეგიძლიათ შეამოწმოთ, რომ მხოლოდ შემოწმების ცარიელი სიმებიანი 1163 00:56:35,390 --> 00:56:37,850 ციტირებით-unquote, თუ არსებობს არაფერი რეალურად არსებობს. 1164 00:56:37,850 --> 00:56:40,880 მაგრამ თუ ეს არ არის ტოლი ციტირებით-unquote, მინდა მოვუწოდო შეტყობინებები. 1165 00:56:40,880 --> 00:56:45,610 და საინტერესო ის არის, რომ ჩვენ გამოყენებით პლუს ოპერატორი, რომელიც 1166 00:56:45,610 --> 00:56:48,130 აკეთებს რა JavaScript? 1167 00:56:48,130 --> 00:56:48,740 Concatenate. 1168 00:56:48,740 --> 00:56:50,690 ასე რომ, ეს როგორც PHPs dot ოპერატორი. 1169 00:56:50,690 --> 00:56:52,820 იგივე იდეა, ოდნავ განსხვავებული სინტაქსი. 1170 00:56:52,820 --> 00:56:55,280 და მე უბრალოდ შექმნაში სიმებიანი რომ თქვენ ხედავთ ეკრანზე shot - 1171 00:56:55,280 --> 00:56:57,750 Hello, ასე და ასე. 1172 00:56:57,750 --> 00:56:59,200 >> და მერე ბოლო დეტალი არის ამ. 1173 00:56:59,200 --> 00:57:04,970 რატომ დაბრუნების ცრუ შიგნით ამ ანონიმური ფუნქცია? 1174 00:57:04,970 --> 00:57:07,420 >> აუდიტორია: არ არსებობს ღირებულება. 1175 00:57:07,420 --> 00:57:09,380 თქვენ ამას ფორმით. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 უბრალოდ ამბობს, თუ ღირებულება არ არის ტოლი ცარიელი, მაშინ ამის გაკეთება. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 არ იყო ცარიელი, რომ წარდგენის. 1180 00:57:20,940 --> 00:57:21,170 >> დევიდ ჯ Malan: OK. 1181 00:57:21,170 --> 00:57:21,640 ფრთხილად, თუმცა. 1182 00:57:21,640 --> 00:57:22,830 იქ არავინ აქ. 1183 00:57:22,830 --> 00:57:25,510 და რომ დაბრუნების ცრუ გარეთ იმ შემთხვევაში, თუ პირობები. 1184 00:57:25,510 --> 00:57:29,470 ასე რომ, ეს ხაზი გაუსვა ხაზი, დაბრუნების ცრუ, ახორციელებს არა აქვს მნიშვნელობა რა, როდესაც 1185 00:57:29,470 --> 00:57:32,310 სახით წარმოდგენილი. 1186 00:57:32,310 --> 00:57:36,810 რას დაბრუნების ცრუ შიგნით ამ ღონისძიება დამმუშავებლის, როგორც მას უწოდებენ, 1187 00:57:36,810 --> 00:57:38,450 ღონისძიება კითხვა მიმდინარეობს წარდგენა? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> აუდიტორია: იმიტომ, რომ მხოლოდ ერთხელ არის. 1190 00:57:44,470 --> 00:57:45,320 >> დევიდ ჯ Malan: მხოლოდ ერთხელ ხდება. 1191 00:57:45,320 --> 00:57:46,821 არა საკმაოდ. 1192 00:57:46,821 --> 00:57:47,292 ჰო? 1193 00:57:47,292 --> 00:57:50,589 >> აუდიტორია: ეს ხელს უშლის ფორმა წარუდგინოს ნაგულისხმევი ქცევის, 1194 00:57:50,589 --> 00:57:52,480 რომელიც გახდის გვერდზე განახლება. 1195 00:57:52,480 --> 00:57:53,110 >> დევიდ ჯ Malan: ზუსტად. 1196 00:57:53,110 --> 00:57:56,490 ამიტომ მე გადატვირთვის ტერმინი წარდგენა აქ, იმიტომ, რომ მე ვამბობ, ფორმა 1197 00:57:56,490 --> 00:57:57,670 მიმდინარეობს წარმოდგენილი. 1198 00:57:57,670 --> 00:58:02,240 მაგრამ, როგორც თქვენ ვარაუდობენ, რომ ეს რეალურად არ არის წარედგინა ნამდვილი HTTP გზა. 1199 00:58:02,240 --> 00:58:06,870 როდესაც თქვენ დააჭირეთ შეტანა, რადგან ჩვენი onSubmit კურატორმა, ჩვენ მოსმენებისა 1200 00:58:06,870 --> 00:58:09,040 რომ ფორმა წარდგენის ასე ვთქვათ. 1201 00:58:09,040 --> 00:58:11,290 ჩვენ მაშინ ვაკეთებთ რამ და JavaScript კოდი. 1202 00:58:11,290 --> 00:58:14,070 მაგრამ მე შეგნებულად დაბრუნების ცრუ, რადგან ის, რაც მე არ მინდა, რომ მოხდეს 1203 00:58:14,070 --> 00:58:18,430 გაყოფილი მეორე მოგვიანებით მთელი ფორმა თავად წარსადგენი ვებგვერდი 1204 00:58:18,430 --> 00:58:22,800 სერვერზე გასაღები ღირებულება წყვილი შეცვლით URL უნდა იყოს რაღაც 1205 00:58:22,800 --> 00:58:26,180 q = cats ან რასაც ჩვენ გავაკეთეთ, მაგალითად, კლასში. 1206 00:58:26,180 --> 00:58:29,640 მე არ მინდა, რომ მოხდეს, რადგან არ არსებობს სერვერზე მოსმენის ამ 1207 00:58:29,640 --> 00:58:30,690 შექმნას წარდგენა. 1208 00:58:30,690 --> 00:58:32,320 ის მხოლოდ გაკეთდეს JavaScript კოდი. 1209 00:58:32,320 --> 00:58:35,760 და ამიტომ მე კი არ აქვს action ატრიბუტის ჩემი სახით, იმიტომ, რომ მე 1210 00:58:35,760 --> 00:58:38,870 არ ვაპირებთ, რომ ეს ოდესმე წასვლა სერვერზე. 1211 00:58:38,870 --> 00:58:40,780 >> ასე რომ, ეს ხდება წარმოდგენილი. 1212 00:58:40,780 --> 00:58:44,340 მაგრამ ჩვენ მოსმენებისა, რომ ფორმა წარდგენის და თავიდან აცილების ნაგულისხმევი 1213 00:58:44,340 --> 00:58:47,477 ქცევა, რომელიც რეალურად წავიდეთ ყველა გზა სერვერზე. 1214 00:58:47,477 --> 00:58:48,730 >> აუდიტორია: ასე რომ, შენახვის კლიენტის მხარეს. 1215 00:58:48,730 --> 00:58:49,780 >> დევიდ ჯ Malan: Keeping ის კლიენტის მხარეს. 1216 00:58:49,780 --> 00:58:51,030 სწორედ. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 შემდეგი up იყო ჩემი oh MySQL. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> რობ Bowden: OK. 1221 00:59:00,430 --> 00:59:04,990 ასე რომ, ეს პირველი კითხვა იყო ზოგადად უხეში ადამიანი. 1222 00:59:04,990 --> 00:59:07,270 თუმცა მოგვიანებით პირობა წავიდა უკეთესი. 1223 00:59:07,270 --> 00:59:12,260 ასე, რომ თქვენ უნდა აირჩიოს სწორი მონაცემები სახის ორივე სვეტით. 1224 00:59:12,260 --> 00:59:17,750 და ორივე აქვს გარკვეული რამ, რომ 1225 00:59:17,750 --> 00:59:20,620 არჩევანი რთულია. 1226 00:59:20,620 --> 00:59:24,430 ასე int არ იყო სწორი ტიპის ნომერი. 1227 00:59:24,430 --> 00:59:29,410 მიზეზი იმისა, რომ 12 ციფრი ანგარიში ნომერი, int არ არის დიდი საკმარისი 1228 00:59:29,410 --> 00:59:31,070 შესანახად სულ თანრიგისაგან. 1229 00:59:31,070 --> 00:59:36,570 ასე რომ, სწორი არჩევანი იქნებოდა დიდი int თუ მოხდება არა რომ. 1230 00:59:36,570 --> 00:59:42,090 სხვა არჩევანი იქნებოდა char სფეროში სიგრძე 12. 1231 00:59:42,090 --> 00:59:44,560 ასე რომ, არც იმ იქნებოდა მუშაობდა. 1232 00:59:44,560 --> 00:59:46,100 Int არა. 1233 00:59:46,100 --> 00:59:50,170 >> ახლა, ბალანსი, ვფიქრობ, უკან pset7. 1234 00:59:50,170 --> 00:59:59,540 ასე რომ, ჩვენ სპეციალურად გამოიყენება ათწილადის შენახვის ღირებულება აქციების ან - 1235 00:59:59,540 --> 01:00:00,550 >> დევიდ ჯ Malan: Cash. 1236 01:00:00,550 --> 01:00:01,060 >> რობ Bowden: Cash. 1237 01:00:01,060 --> 01:00:05,710 ჩვენ გამოიყენება ათობითი შესანახად თანხის ნაღდი, რომ მომხმარებელს გაკეთებული აქვს. 1238 01:00:05,710 --> 01:00:10,950 ასე რომ, მიზეზი ჩვენ გავაკეთებთ, რომ არის რადგან, გახსოვდეთ, მოძრავი. 1239 01:00:10,950 --> 01:00:12,480 არსებობს მცურავი პუნქტიანი სიზუსტით. 1240 01:00:12,480 --> 01:00:18,200 მას არ შეუძლია ზუსტად შესანახად ფულადი ღირებულებები როგორც ჩვენ გვინდა აქ. 1241 01:00:18,200 --> 01:00:23,630 ასე ათობითი შეუძლია ზუსტად მაღაზია რაღაც, ვთქვათ, ორი ათობითი ადგილებში. 1242 01:00:23,630 --> 01:00:27,630 ამიტომაც ბალანსი, ჩვენ გვსურს უნდა იყოს ათობითი და არა ათწილადი. 1243 01:00:27,630 --> 01:00:30,230 >> დევიდ ჯ Malan: და ასევე, ძალიან, თუმცა ეს შეიძლება ყოფილიყო ჭკვიანი სხვა 1244 01:00:30,230 --> 01:00:32,760 კონტექსტში ვფიქრობ, იქნებ ამ არის შანსი int. 1245 01:00:32,760 --> 01:00:34,420 მე უბრალოდ ტრეკზე რამ pennies. 1246 01:00:34,420 --> 01:00:38,670 იმიტომ, რომ ჩვენ მკაფიოდ აჩვენა რა ღირებულება მყოფი 100.00, რომელიც 1247 01:00:38,670 --> 01:00:40,380 იმას ნიშნავს, რომ შეიძლება მხოლოდ int. 1248 01:00:40,380 --> 01:00:45,310 და კიდევ ერთი სინატიფით ძალიან ნომრით იყო, რომ იგი არ გულისხმობს 1249 01:00:45,310 --> 01:00:46,180 უნდა იყოს შეასრულა კითხვაზე. 1250 01:00:46,180 --> 01:00:49,860 მაგრამ გავიხსენოთ, რომ int in MySQL, როგორც C, მაინც 1251 01:00:49,860 --> 01:00:51,440 მოწყობილობების, 32-bit. 1252 01:00:51,440 --> 01:00:53,960 და მიუხედავად იმისა, რომ ჩვენ არ ველით, რომ თქვენ ვიცი ზუსტად რამდენი ციფრები, 1253 01:00:53,960 --> 01:00:56,910 საშუალება, არ გავიხსენოთ, რომ ყველაზე თქვენ შეგიძლიათ წარმოადგენს პოტენციურად 1254 01:00:56,910 --> 01:01:00,710 ერთად 32-bit ნომერი დაახლოებით რა? 1255 01:01:00,710 --> 01:01:02,760 >> რა რაოდენობის ჩვენ ყოველთვის ვამბობ? 1256 01:01:02,760 --> 01:01:04,530 2 დან 32, რომელიც არის ის, რაც დაახლოებით? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 თქვენ არ უნდა იცოდეთ ზუსტად. 1259 01:01:08,780 --> 01:01:10,580 მაგრამ დაახლოებით სასარგებლოა ცხოვრებაში. 1260 01:01:10,580 --> 01:01:12,200 ეს დაახლოებით 4 მილიარდი. 1261 01:01:12,200 --> 01:01:14,430 ამიტომ ჩვენ განაცხადა, რომ რამდენჯერმე. 1262 01:01:14,430 --> 01:01:16,360 მე ვიცი, მე ვთქვი, რომ რამდენიმე ჯერ. 1263 01:01:16,360 --> 01:01:17,670 და ეს არის დაახლოებით 4 მილიარდი. 1264 01:01:17,670 --> 01:01:19,710 და ეს კარგი წესი ცერის ვიცი. 1265 01:01:19,710 --> 01:01:21,880 თუ თქვენ გაქვთ 8 ბიტი, 256 არის ჯადოსნური ნომერი. 1266 01:01:21,880 --> 01:01:24,160 თუ თქვენ გაქვთ 32 ბიტი, 4 მილიარდი მისცეს ან მიიღოს. 1267 01:01:24,160 --> 01:01:27,140 ასე რომ, თუ თქვენ უბრალოდ დაწერეთ 4 მილიარდი, თქვენ ნახავთ, რომ ეს ნაკლები ციფრისგან ვიდრე 1268 01:01:27,140 --> 01:01:30,970 12, რაც იმას ნიშნავს, რომ აშკარად არ საკმარისი გამომსახველობა ხელში 1269 01:01:30,970 --> 01:01:34,220 12 ციფრი ანგარიშის ნომერი. 1270 01:01:34,220 --> 01:01:34,940 >> რობ Bowden: OK. 1271 01:01:34,940 --> 01:01:38,520 ასე რომ, სხვა პირობა წავიდა უკეთესი. 1272 01:01:38,520 --> 01:01:40,900 ასე რომ, ვფიქრობ, რომ ბანკი აკისრებს $ 20 თვეში 1273 01:01:40,900 --> 01:01:42,400 მომსახურების საკომისიო ყველა ანგარიშები. 1274 01:01:42,400 --> 01:01:45,506 რა SQL შეკითხვაზე შეეძლო ბანკის ჩამოჭრა $ 20 ყოველი რაოდენობა, თუნდაც 1275 01:01:45,506 --> 01:01:47,520 ეს იწვევს უარყოფით ნაშთები? 1276 01:01:47,520 --> 01:01:50,380 ასე რომ, ძირითადად, არის ოთხი ძირითადი ტიპის queries - 1277 01:01:50,380 --> 01:01:52,840 ჩასასმელად, აირჩიეთ, განახლება და წაშლა. 1278 01:01:52,840 --> 01:01:56,080 ასე რომ, რას ვფიქრობთ ჩვენ აპირებს გამოიყენოს აქ? 1279 01:01:56,080 --> 01:01:57,000 განახლება. 1280 01:01:57,000 --> 01:01:58,260 >> მოდით შევხედოთ. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 ასე რომ აქ ჩვენ განახლებაზე. 1283 01:02:05,870 --> 01:02:09,900 რა მაგიდასთან ჩვენ განახლებაზე ანგარიშები? 1284 01:02:09,900 --> 01:02:11,670 ასე განახლებაზე ანგარიშები. 1285 01:02:11,670 --> 01:02:15,390 და შემდეგ სინტაქსი ამბობს, რა ანგარიშების ჩვენ განახლებაზე? 1286 01:02:15,390 --> 01:02:19,520 ისე, ჩვენ შექმნის ბალანსი უდრის მიმდინარე ღირებულება ბალანსი მინუს 20. 1287 01:02:19,520 --> 01:02:22,860 ასე რომ, ეს განაახლებს ყველა რიგები ანგარიშები, გამოკლება 1288 01:02:22,860 --> 01:02:26,250 20 $ დან ბალანსი. 1289 01:02:26,250 --> 01:02:29,260 >> დევიდ ჯ Malan: ჩვეულებრივი შეცდომა აქ, მიუხედავად იმისა, რომ ზოგჯერ აპატია ის, 1290 01:02:29,260 --> 01:02:32,990 იყო რეალურად PHP კოდი აქ მოუწოდებდა შეკითხვის ფუნქცია ან აყენებს 1291 01:02:32,990 --> 01:02:35,460 შეთავაზებები გარშემო ყველაფერი, რაც არ უნდა იყოს იქ. 1292 01:02:35,460 --> 01:02:39,780 >> რობ Bowden: გახსოვდეთ, რომ MySQL არის ცალკე ენა PHP. 1293 01:02:39,780 --> 01:02:42,410 ჩვენ არ უნდა იყოს წერილობით MySQL PHP. 1294 01:02:42,410 --> 01:02:46,180 და PHP მაშინ გაგზავნის მას მეტი MySQL სერვერზე. 1295 01:02:46,180 --> 01:02:51,120 მაგრამ თქვენ არ უნდა PHP, რათა ურთიერთობა MySQL სერვერზე. 1296 01:02:51,120 --> 01:02:51,730 >> დევიდ ჯ Malan: ზუსტად. 1297 01:02:51,730 --> 01:02:54,240 ასე რომ არ ცვლადს დოლარის ნიშნები უნდა იყოს ამ კონტექსტში. 1298 01:02:54,240 --> 01:02:59,550 ეს შეიძლება უბრალოდ ყველა math ფარგლებში მონაცემთა ბაზის თავად. 1299 01:02:59,550 --> 01:03:00,080 >> რობ Bowden: OK. 1300 01:03:00,080 --> 01:03:01,300 ასე რომ, მომდევნო ერთი. 1301 01:03:01,300 --> 01:03:02,731 ეს არის მომდევნო ერთი? 1302 01:03:02,731 --> 01:03:03,210 ჰო. 1303 01:03:03,210 --> 01:03:06,570 ასე რომ, რა SQL შეკითხვაზე შეეძლო ბანკის ვიღებ ანგარიშის ნომერი და მისი 1304 01:03:06,570 --> 01:03:09,300 მდიდარი მომხმარებელს, ვისაც ნაშთების მეტია 1.000? 1305 01:03:09,300 --> 01:03:13,280 ასე რომ რაც ოთხი ძირითადი ტიპი ჩვენ ვაპირებთ გინდათ აქ? 1306 01:03:13,280 --> 01:03:14,430 შერჩევა. 1307 01:03:14,430 --> 01:03:16,650 ამიტომ, ჩვენ უნდა აირჩიოთ. 1308 01:03:16,650 --> 01:03:17,610 რას უნდა აირჩიოთ? 1309 01:03:17,610 --> 01:03:19,380 რა სვეტი გვინდა აირჩიოთ? 1310 01:03:19,380 --> 01:03:20,970 ჩვენ კონკრეტულად მინდა აირჩიოთ ნომერი. 1311 01:03:20,970 --> 01:03:23,910 მაგრამ თუ თქვენ თქვით, ვარსკვლავი, ჩვენ ასევე დაადასტურა, რომ. 1312 01:03:23,910 --> 01:03:25,820 >> ასე რომ, აირჩიეთ ნომერი რა მაგიდა? 1313 01:03:25,820 --> 01:03:26,640 ანგარიშები. 1314 01:03:26,640 --> 01:03:28,370 და შემდეგ იმ პირობით, ჩვენ გვინდა? 1315 01:03:28,370 --> 01:03:30,140 სადაც ბალანსი აღემატება 1000. 1316 01:03:30,140 --> 01:03:31,720 ჩვენ ასევე დაადასტურა მეტი მეტი ან ტოლი. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 ბოლო ერთი. 1319 01:03:36,190 --> 01:03:42,940 რა SQL შეკითხვაზე შეეძლო ბანკის ახლოს, ანუ, წაშლის, ყველა ანგარიში, რომელიც 1320 01:03:42,940 --> 01:03:44,480 აქვს ბალანსი $ 0? 1321 01:03:44,480 --> 01:03:47,620 ასე რომ რაც ოთხი ვართ ჩვენ აპირებს გინდათ გამოიყენოთ? 1322 01:03:47,620 --> 01:03:48,320 წაშლა. 1323 01:03:48,320 --> 01:03:50,180 ასე რომ, სინტაქსი, რომ? 1324 01:03:50,180 --> 01:03:51,890 წაშალე რა მაგიდა? 1325 01:03:51,890 --> 01:03:53,550 ანგარიშები. 1326 01:03:53,550 --> 01:03:55,790 და შემდეგ იმ პირობით, რომელიც ჩვენ გვინდა წაშლა - 1327 01:03:55,790 --> 01:03:57,280 სადაც ბალანსი ნულის ტოლი. 1328 01:03:57,280 --> 01:04:03,050 ასე რომ, წაშლა ყველა რიგები ანგარიშები სადაც ბალანსი არის ნული. 1329 01:04:03,050 --> 01:04:04,300 კითხვები ნებისმიერ ამ? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 მინდა მდგომ? 1332 01:04:10,260 --> 01:04:11,200 >> დევიდ ჯ Malan: Queue სახელმძღვანელო. 1333 01:04:11,200 --> 01:04:17,110 ასე რომ, ამ ერთი, მივეცით თქვენ გარკვეულწილად ნაცნობი სტრუქტურა, რომელიც ჩვენ შესწავლილი 1334 01:04:17,110 --> 01:04:20,450 ცოტა კლასში ერთად of structs, რომელიც მონაცემები 1335 01:04:20,450 --> 01:04:21,910 სტრუქტურა დაკავშირებული სული. 1336 01:04:21,910 --> 01:04:24,670 განსხვავება თუმცა მდგომ რომ ჩვენ უნდა რატომღაც მახსოვს ვინ 1337 01:04:24,670 --> 01:04:27,900 იყო წინაშე მდგომ, დიდი ნაწილი ისე, რომ ჩვენ შეგვიძლია უფრო მეტი 1338 01:04:27,900 --> 01:04:30,530 ეფექტური გამოყენება მეხსიერება, მინიმუმ თუ ჩვენ გამოყენებით მასივი. 1339 01:04:30,530 --> 01:04:35,460 >> იმის გამო, რომ გავიხსენოთ, თუ ჩვენ გვაქვს მასივი, თუ, მაგალითად, ეს არის თვალწინ 1340 01:04:35,460 --> 01:04:38,470 მდგომ, თუ მე შეღწევას მდგომ აქ, და მერე ვინმე იღებს ხაზი 1341 01:04:38,470 --> 01:04:42,710 ჩემს უკან, ჩემს უკან, ჩემს უკან, და ერთი ადამიანი ნაბიჯები out of ხაზი, თქვენ 1342 01:04:42,710 --> 01:04:45,930 შეიძლება, როგორც დავინახეთ, ჩვენი ზოგიერთი ადამიანის მოხალისეები კლასში, ყველას 1343 01:04:45,930 --> 01:04:47,100 გადაიტანოს ამ გზით. 1344 01:04:47,100 --> 01:04:50,880 მაგრამ ზოგადად, რომელმაც ყველას გაკეთება რაღაც არ არის საუკეთესო გამოყენების დროს 1345 01:04:50,880 --> 01:04:54,600 პროგრამა, რადგან ეს ნიშნავს, რომ თქვენი ალგორითმი არის გაშვებული რა 1346 01:04:54,600 --> 01:04:56,520 ასიმპტოტური ქრონომეტრაჟი? 1347 01:04:56,520 --> 01:04:57,420 ეს არის სწორხაზოვანი. 1348 01:04:57,420 --> 01:04:59,600 >> და ვგრძნობ, როგორიცაა, რომ სახის სულელური. 1349 01:04:59,600 --> 01:05:02,890 იმ შემთხვევაში, თუ მომდევნო ხაზი არის შემდეგი პირი, რომელიც უნდა წასვლას 1350 01:05:02,890 --> 01:05:04,660 მაღაზია, მათ არ აქვთ გადატანა ერთად. 1351 01:05:04,660 --> 01:05:08,200 უბრალოდ ნება, რომ ადამიანი უნდა plucked off როცა დრო მოდის, მაგალითად. 1352 01:05:08,200 --> 01:05:09,870 ასე რომ ჩვენ შეგვიძლია გადარჩენა ცოტა დრო იყო. 1353 01:05:09,870 --> 01:05:14,840 და ასე უნდა გავაკეთოთ, რომ მიუხედავად იმისა, რომ საშუალება რომ ხელმძღვანელი მდგომ ან 1354 01:05:14,840 --> 01:05:18,060 წინაშე მდგომ აპირებს თანდათანობით გადავიდეს უფრო და უფრო ღრმად 1355 01:05:18,060 --> 01:05:23,340 შევიდა მასივი და საბოლოოდ შეიძლება რეალურად გადაიტანოთ გარშემო, თუ ჩვენ გამოყენებით 1356 01:05:23,340 --> 01:05:25,790 array შესანახად ადამიანი ამ რიგიდან. 1357 01:05:25,790 --> 01:05:28,390 ასე რომ თქვენ შეგიძლიათ თითქმის ვფიქრობ array როგორც წრიული მონაცემები 1358 01:05:28,390 --> 01:05:29,880 სტრუქტურა ამ თვალსაზრისით. 1359 01:05:29,880 --> 01:05:33,970 >> ასე, რომ თქვენ როგორღაც უნდა ტრეკზე ზომა, ან მართლაც ბოლომდე მას 1360 01:05:33,970 --> 01:05:36,250 და მაშინ, სადაც დასაწყისში ეს არის. 1361 01:05:36,250 --> 01:05:39,490 ამიტომ ჩვენ გთავაზობთ, რომ თქვენ გამოაცხადოს ერთი ასეთი რიგში, მოწოდება 1362 01:05:39,490 --> 01:05:41,330 ეს q, მხოლოდ ერთი წერილი. 1363 01:05:41,330 --> 01:05:44,570 მაშინ ჩვენ ვთავაზობთ, რომ წინა უნდა იყოს ინიციალიზაცია ნულოვანი და რომ ზომა 1364 01:05:44,570 --> 01:05:45,470 ინიციალიზდება ნულოვანი. 1365 01:05:45,470 --> 01:05:47,770 >> ასე რომ, ახლა, არაფერი შიგნით რომ რიგიდან. 1366 01:05:47,770 --> 01:05:50,910 და ჩვენ ვთხოვთ თქვენ დასრულებას განხორციელების enqueue ქვემოთ 1367 01:05:50,910 --> 01:05:55,250 ისე, რომ ფუნქცია დასძენს n to ბოლოს q და შემდეგ ბრუნდება ნამდვილი. 1368 01:05:55,250 --> 01:05:58,690 მაგრამ თუ q სავსეა ან უარყოფითი, ფუნქცია უნდა ნაცვლად დაბრუნების ცრუ. 1369 01:05:58,690 --> 01:06:01,060 და მივეცით თქვენ რამდენიმე ვარაუდები. 1370 01:06:01,060 --> 01:06:04,320 მაგრამ ისინი ნამდვილად არ ფუნქციურად შესაბამისი, უბრალოდ, რომ bool არსებობს, 1371 01:06:04,320 --> 01:06:06,690 იმიტომ, რომ ტექნიკურად, bool არ არსებობს C თუ არ არის 1372 01:06:06,690 --> 01:06:07,310 გარკვეული header ფაილი. 1373 01:06:07,310 --> 01:06:09,350 ასე რომ, უბრალოდ დარწმუნდით, რომ არ არსებობს არცერთი ეს ხრიკი 1374 01:06:09,350 --> 01:06:10,940 კითხვა სახის რამ. 1375 01:06:10,940 --> 01:06:16,280 >> ასე რომ enqueue, ჩვენ შეთავაზებული ნიმუში გადაწყვეტილებების განსახორციელებლად ასეთია. 1376 01:06:16,280 --> 01:06:20,420 ერთი, ჩვენ პირველად შემოწმება მარტივია, დაბალი ჩამოკიდებული ხილი. 1377 01:06:20,420 --> 01:06:23,820 იმ შემთხვევაში, თუ მდგომ არის სრული ან ნომერი, რომელიც თქვენ ცდილობთ ჩადეთ ნაკლებია, 1378 01:06:23,820 --> 01:06:26,380 ვიდრე ნულოვანი, რაც ჩვენ განაცხადა, დაზუსტება პრობლემა უნდა 1379 01:06:26,380 --> 01:06:30,320 არ დაიშვება, რადგან ჩვენ მხოლოდ გვინდა არასამთავრობო უარყოფით ღირებულებებს, მაშინ უნდა 1380 01:06:30,320 --> 01:06:31,640 უბრალოდ დააბრუნოს ყალბი დაუყოვნებლივ. 1381 01:06:31,640 --> 01:06:33,820 ასე რომ ზოგიერთი შედარებით ადვილი შეცდომა შემოწმებისას. 1382 01:06:33,820 --> 01:06:38,720 იმ შემთხვევაში, თუ იმისა, რომ თქვენ გსურთ დაამატოთ, რომ ფაქტობრივი ნომერი, თქვენ უნდა გაეკეთებინათ ცოტა 1383 01:06:38,720 --> 01:06:39,440 ფიქრი აქ. 1384 01:06:39,440 --> 01:06:41,330 და ეს არის, სადაც ეს პატარა შემაშფოთებელი გონებრივად, რადგან თქვენ უნდა 1385 01:06:41,330 --> 01:06:43,000 გაერკვნენ, თუ როგორ უნდა გაუმკლავდეს wraparound. 1386 01:06:43,000 --> 01:06:46,870 >> მაგრამ ჩანასახები იდეა აქ რომ საქართველოს ჩვენთვის საინტერესო ის არის, რომ wraparound 1387 01:06:46,870 --> 01:06:51,480 ხშირად გულისხმობს მოდულარული არითმეტიკა და mod ოპერატორი, პროცენტი მხარეს, 1388 01:06:51,480 --> 01:06:55,140 სადაც შეგიძლიათ წასვლა უფრო დიდი ღირებულება უკან ნულის და მერე ერთი და ორი და 1389 01:06:55,140 --> 01:06:58,650 სამი და შემდეგ უკან გარშემო ნულის, ერთი და ორი და სამი და ა.შ. 1390 01:06:58,650 --> 01:06:59,380 ისევ და ისევ. 1391 01:06:59,380 --> 01:07:02,880 ასე რომ გზა ჩვენ ვთავაზობთ ამით არის რომ ჩვენ გვინდა ინდექსი შევიდა 1392 01:07:02,880 --> 01:07:05,850 array მოუწოდა ნომრები, საიდანაც ჩვენი რიცხვებით სიცრუეა. 1393 01:07:05,850 --> 01:07:10,740 მაგრამ იქ, ჩვენ პირველად გსურთ რაც არ უნდა ზომა მდგომ არის, მაგრამ 1394 01:07:10,740 --> 01:07:14,080 შემდეგ დავამატოთ, რომ რასაც თვალწინ სიაში. 1395 01:07:14,080 --> 01:07:17,880 და ეფექტი, რომელიც დააყენა ჩვენთვის სწორი პოზიცია მდგომ და 1396 01:07:17,880 --> 01:07:20,970 არ ვივარაუდოთ, რომ პირველი პირი ონლაინ არის დასაწყისში, რომელიც მან ან 1397 01:07:20,970 --> 01:07:24,130 იგი აბსოლუტურად შეიძლება თუ ჩვენ ასევე გადავიდა ყველას. 1398 01:07:24,130 --> 01:07:26,710 მაგრამ ჩვენ უბრალოდ შექმნაში მუშაობა საკუთარ თავს თუ ავიღეთ 1399 01:07:26,710 --> 01:07:27,800 რომ კონკრეტული გზა. 1400 01:07:27,800 --> 01:07:29,330 >> ასე რომ ჩვენ შეგვიძლია შევინარჩუნოთ ის შედარებით მარტივი. 1401 01:07:29,330 --> 01:07:32,180 ჩვენ უნდა გვახსოვდეს, რომ ჩვენ მხოლოდ დამატებული int მდგომ. 1402 01:07:32,180 --> 01:07:35,850 და მაშინ ჩვენ უბრალოდ დააბრუნოს ჭეშმარიტი. 1403 01:07:35,850 --> 01:07:38,560 იმავდროულად, dequeue, ჩვენ ვთხოვეთ თქვენ უნდა გავაკეთოთ შემდეგი. 1404 01:07:38,560 --> 01:07:42,260 განახორციელოს იგი იმგვარად, რომ dequeues, რომელიც შლის და ანაზღაურება, 1405 01:07:42,260 --> 01:07:44,190 int წინაშე მდგომ. 1406 01:07:44,190 --> 01:07:46,410 ამოიღონ int, საკმარისია დაივიწყებს. 1407 01:07:46,410 --> 01:07:47,650 თქვენ არ უნდა გადაფაროს მისი bit. 1408 01:07:47,650 --> 01:07:48,820 ასე რომ ჯერ კიდევ რეალურად არსებობს. 1409 01:07:48,820 --> 01:07:51,930 ისევე, როგორც მონაცემების მყარ დისკზე, ჩვენ უბრალოდ იგნორირება იმისა, 1410 01:07:51,930 --> 01:07:52,970 ის, რომ ახლა იქ. 1411 01:07:52,970 --> 01:07:55,520 და თუ q არის ცარიელი, ჩვენ უნდა ნაცვლად დაბრუნების უარყოფითი 1. 1412 01:07:55,520 --> 01:07:56,750 ასე რომ, ეს გრძნობს თვითნებური. 1413 01:07:56,750 --> 01:08:01,640 რატომ დაბრუნდნენ -1 ნაცვლად ყალბი? 1414 01:08:01,640 --> 01:08:02,620 ჰო. 1415 01:08:02,620 --> 01:08:05,070 >> აუდიტორია: Q შენახვის დადებითი ღირებულებებს. 1416 01:08:05,070 --> 01:08:10,950 მას შემდეგ, რაც თქვენ მხოლოდ შესანახად დადებითი მნიშვნელობები ამ q, უარყოფითი არის შეცდომა. 1417 01:08:10,950 --> 01:08:11,510 >> დევიდ ჯ Malan: OK, მართალია. 1418 01:08:11,510 --> 01:08:14,850 ასე რომ, რადგან ჩვენ მხოლოდ შენახვის დადებითი ღირებულებები ან ნულოვანი, მაშინ ეს ჯარიმა 1419 01:08:14,850 --> 01:08:18,050 დაბრუნების უარყოფითი ღირებულება, როგორც Sentinel ღირებულება, სპეციალური სიმბოლო. 1420 01:08:18,050 --> 01:08:21,630 მაგრამ თქვენ გადაწერა ისტორიაში არსებობს, რადგან იმ მიზეზით, ჩვენ მხოლოდ 1421 01:08:21,630 --> 01:08:25,890 დაბრუნების არასამთავრობო უარყოფით ღირებულებებს იმიტომ, რომ ჩვენ გვინდა 1422 01:08:25,890 --> 01:08:27,670 აქვს Sentinel ღირებულება. 1423 01:08:27,670 --> 01:08:32,617 ასე რომ, უფრო კონკრეტულად კი, რატომ არა მხოლოდ დაბრუნების ცრუ შემთხვევებში შეცდომები? 1424 01:08:32,617 --> 01:08:33,099 ჰო. 1425 01:08:33,099 --> 01:08:35,510 >> აუდიტორია: თქვენ ვერ დაბრუნების რიცხვი. 1426 01:08:35,510 --> 01:08:36,630 >> დევიდ ჯ Malan: ზუსტად. 1427 01:08:36,630 --> 01:08:38,569 და ეს არის სადაც C იღებს საკმაოდ შეზღუდულია. 1428 01:08:38,569 --> 01:08:40,590 თუ თქვენ ამბობდა თქვენ აპირებს დაბრუნების int, თქვენ მოხვდით 1429 01:08:40,590 --> 01:08:41,279 დაბრუნებას int. 1430 01:08:41,279 --> 01:08:43,689 თქვენ არ შეგიძლიათ მიიღოთ ლამაზი და დაიწყოს დაბრუნების bool ან float ან 1431 01:08:43,689 --> 01:08:45,040 სიმებიანი ან რამე მაგდაგვარს. 1432 01:08:45,040 --> 01:08:49,370 ახლა კი, JavaScript და PHP და ზოგიერთი სხვა ენებზე სისტემაში, ფაქტობრივად, 1433 01:08:49,370 --> 01:08:51,310 თქვენ დაბრუნების სხვადასხვა ტიპის ფასეულობები. 1434 01:08:51,310 --> 01:08:54,819 და რომ შეიძლება რეალურად იყოს სასარგებლო, სადაც თქვენ შეიძლება დაბრუნდეს დადებითი ints, zeros, 1435 01:08:54,819 --> 01:08:59,439 უარყოფითი ints, ან ცრუ ან null კი ნიშნავდეს შეცდომა. 1436 01:08:59,439 --> 01:09:01,890 მაგრამ ჩვენ არ გვაქვს, რომ versatility in C. 1437 01:09:01,890 --> 01:09:04,569 >> ასე რომ dequeue, რასაც ჩვენ ვთავაზობ, რომ გააკეთოთ, არის - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> რობ Bowden: თქვენ შეგიძლიათ დაბრუნების ცრუ. 1440 01:09:09,830 --> 01:09:13,189 უბრალოდ, ცრუ არის hash განსაზღვრავს ცრუ ნულოვანი. 1441 01:09:13,189 --> 01:09:16,000 ასე რომ, თუ დაბრუნების ცრუ, თქვენ დაბრუნების ნულოვანი. 1442 01:09:16,000 --> 01:09:25,470 და ნულოვანი არის სწორი, რაც ჩვენი მდგომ, ხოლო უარყოფითი 1 არ არის, თუ 1443 01:09:25,470 --> 01:09:27,000 ცრუ მოხდა იყოს უარყოფითი 1. 1444 01:09:27,000 --> 01:09:29,972 მაგრამ თქვენ არ უნდა უნდა ვიცოდეთ, რომ. 1445 01:09:29,972 --> 01:09:32,399 >> დევიდ ჯ Malan: ეს რატომ არ ვთქვათ. 1446 01:09:32,399 --> 01:09:36,450 >> რობ Bowden: მაგრამ ეს არ იყო ნამდვილი რომ თქვენ ვერ დაბრუნების ცრუ. 1447 01:09:36,450 --> 01:09:37,700 >> დევიდ ჯ Malan: რა თქმა უნდა. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 ასე რომ dequeue შეამჩნევთ, ჩვენ ვიღებთ ბათილად, როგორც მისი არგუმენტი. 1450 01:09:44,240 --> 01:09:45,479 და ეს იმიტომ, რომ ჩვენ არ ვართ გავლის არაფერს შემოსული 1451 01:09:45,479 --> 01:09:48,359 ჩვენ გვსურს მხოლოდ ამოიღონ ელემენტს წინაშე მდგომ. 1452 01:09:48,359 --> 01:09:49,819 ასე რომ, როგორ შეგვიძლია წავიდეთ შესახებ ამით? 1453 01:09:49,819 --> 01:09:51,290 ისე, პირველ რიგში, მოდით ეს სწრაფი საღი აზრის ქვითარი. 1454 01:09:51,290 --> 01:09:53,350 იმ შემთხვევაში, თუ მდგომ ზომა არის 0, არსებობს სამუშაო უნდა გაკეთდეს. 1455 01:09:53,350 --> 01:09:54,210 დაბრუნება უარყოფითი 1. 1456 01:09:54,210 --> 01:09:54,800 შესრულებულია. 1457 01:09:54,800 --> 01:09:56,340 ასე რომ, რამდენიმე ხაზი ჩემი პროგრამა. 1458 01:09:56,340 --> 01:09:58,180 ასე რომ, მხოლოდ ოთხი ხაზები რჩება. 1459 01:09:58,180 --> 01:10:01,310 >> ასე რომ აქ მე ვწყვიტავ decrement ზომა. 1460 01:10:01,310 --> 01:10:04,620 და decrementing ზომა ეფექტურად იმას ნიშნავს, რომ მე დავიწყება 1461 01:10:04,620 --> 01:10:06,010 რაღაც არსებობს. 1462 01:10:06,010 --> 01:10:09,910 მაგრამ მე ასევე უნდა განახლდეს, სადაც თვალწინ ნომრები. 1463 01:10:09,910 --> 01:10:11,620 ასე უნდა გავაკეთოთ, რომ, მე უნდა გააკეთოს ორი რამ. 1464 01:10:11,620 --> 01:10:16,390 მე პირველად უნდა გვახსოვდეს, რა რაოდენობის არის წინაშე მდგომ, 1465 01:10:16,390 --> 01:10:17,860 იმიტომ, რომ მე უნდა დაბრუნდეს რომ რამ. 1466 01:10:17,860 --> 01:10:20,910 ასე რომ, მე არ მინდა, რომ შემთხვევით დაგვავიწყდეს ამის შესახებ და მერე გადაწერა იგი. 1467 01:10:20,910 --> 01:10:22,840 მე უბრალოდ აპირებს მახსოვს int. 1468 01:10:22,840 --> 01:10:27,310 >> და ახლა, მინდა განახლება q.front უნდა q.front +1. 1469 01:10:27,310 --> 01:10:30,070 ასე რომ, თუ ეს იყო პირველი პირი ხაზი, ახლა, მინდა plus 1 1470 01:10:30,070 --> 01:10:31,930 აღვნიშნო მომდევნო ხაზი. 1471 01:10:31,930 --> 01:10:33,420 მაგრამ უნდა გაუმკლავდეს, რომ wraparound. 1472 01:10:33,420 --> 01:10:37,270 და თუ მოცულობა არის გლობალური მუდმივი, რომ აპირებს ნება მიბოძეთ დარწმუნდით 1473 01:10:37,270 --> 01:10:41,140 როგორც მე აღვნიშნო, რომ ძალიან ბოლო პირი ხაზი, modulo ოპერაცია მოუტანს 1474 01:10:41,140 --> 01:10:43,840 ჩემს უკან ნულოვანი წინაშე მდგომ. 1475 01:10:43,840 --> 01:10:46,050 და რომ ამუშავებს wraparound აქ. 1476 01:10:46,050 --> 01:10:48,950 და მერე გაგრძელება დაბრუნებას n. 1477 01:10:48,950 --> 01:10:51,530 >> ახლა, მკაცრად რომ ვთქვათ, მე არ უნდა განაცხადოს n. 1478 01:10:51,530 --> 01:10:53,880 მე არ უნდა დაიბრუნოს ის და ჩაწეროთ იგი დროებით, რადგან ღირებულება 1479 01:10:53,880 --> 01:10:54,740 ჯერ კიდევ არსებობს. 1480 01:10:54,740 --> 01:10:57,490 მე ვერ უბრალოდ უფლება არითმეტიკული დაბრუნებას ყოფილი ხელმძღვანელი 1481 01:10:57,490 --> 01:10:58,450 რიგიდან. 1482 01:10:58,450 --> 01:11:01,850 მაგრამ მე უბრალოდ იგრძნო, რომ ეს იყო უფრო ნათელი რეალურად დაიბრუნოს int, დაუსვან მას 1483 01:11:01,850 --> 01:11:04,320 in n, და შემდეგ დაბრუნდნენ, რომ სიცხადე გულისთვის, მაგრამ 1484 01:11:04,320 --> 01:11:05,735 არ არის მკაცრად აუცილებელია. 1485 01:11:05,735 --> 01:11:09,313 1486 01:11:09,313 --> 01:11:12,130 Psst. 1487 01:11:12,130 --> 01:11:13,410 ისინი ყველა pronounceable ჩემი უფროსი. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> რობ Bowden: ასე რომ, პირველი კითხვა, არის ორობითი ხე პრობლემა. 1490 01:11:19,110 --> 01:11:22,140 ასე რომ, პირველი კითხვა, ჩვენ მოცემულია ამ ნომრებზე. 1491 01:11:22,140 --> 01:11:27,160 და ჩვენ გვინდა, რომ როგორმე ჩადეთ მათ ამ კვანძების ასეთი, რომ ეს არის 1492 01:11:27,160 --> 01:11:30,110 მოქმედებს ორობითი ძებნა ხე. 1493 01:11:30,110 --> 01:11:36,260 ასე რომ, ერთი რამ უნდა გვახსოვდეს შესახებ ორობითი ძებნა ხეები არის, რომ ეს არ არის 1494 01:11:36,260 --> 01:11:39,800 მხოლოდ, რომ ის მარცხენა ნაკლებია და, რაც უნდა 1495 01:11:39,800 --> 01:11:41,120 მარჯვენა არის უფრო დიდი. 1496 01:11:41,120 --> 01:11:44,580 ეს უნდა იყოს, რომ მთელი ხე მარცხენა არის ნაკლები, და მთელი ხე 1497 01:11:44,580 --> 01:11:45,740 მარჯვნივ არის დიდი. 1498 01:11:45,740 --> 01:11:55,260 >> ასე რომ, თუ მე ზუსტად 34 აქ ზედა, და შემდეგ მე ზუსტად 20 აქ, ასე რომ მოქმედებს ისე, 1499 01:11:55,260 --> 01:11:56,970 შორს, რადგან 34 აქ. 1500 01:11:56,970 --> 01:11:57,920 20 აპირებს მარცხნივ. 1501 01:11:57,920 --> 01:11:58,950 ასე რომ ნაკლებია. 1502 01:11:58,950 --> 01:12:03,640 მაგრამ მე ვერ მაშინ 59 აქ, რადგან მიუხედავად იმისა, რომ 59 არის მარჯვენა 20, 1503 01:12:03,640 --> 01:12:06,140 ეს ჯერ კიდევ მარცხენა 34. 1504 01:12:06,140 --> 01:12:10,760 ასე რომ შეზღუდვა გათვალისწინებით, უმარტივეს გზას, ალბათ, პრობლემის 1505 01:12:10,760 --> 01:12:14,330 პრობლემა ის არის, რომ მხოლოდ ერთგვარი ამ ნომრებზე - 1506 01:12:14,330 --> 01:12:18,720 ასე რომ, 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 და შემდეგ ჩადეთ იმ მარცხნიდან მარჯვნივ. 1508 01:12:21,640 --> 01:12:23,390 >> ასე რომ, 20 მიდის აქ. 1509 01:12:23,390 --> 01:12:24,630 34 მიდის აქ. 1510 01:12:24,630 --> 01:12:25,830 36 მიდის აქ. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 და ასევე შეიძლება არ figured out ერთად ზოგიერთი ჩართვის და ხვდებიან, 1513 01:12:34,730 --> 01:12:38,830 oh, დაველოდოთ, მე არ მაქვს საკმარისი ნომერი შეავსოთ ეს მეტი აქ. 1514 01:12:38,830 --> 01:12:42,170 ასე რომ, მე უნდა reshift რა ჩემი მარშრუტი შენიშვნა იქნება. 1515 01:12:42,170 --> 01:12:47,490 მაგრამ შეამჩნია, რომ ბოლო სამი, თუ წაიკითხოთ მარცხნიდან მარჯვნივ, ეს 1516 01:12:47,490 --> 01:12:48,740 გაზრდის მიზნით. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> ახლა, ჩვენ გვინდა, რომ გამოაცხადოს, თუ რა struct იქნება, რომ 1519 01:12:56,540 --> 01:12:58,300 კვანძების ამ ხეს. 1520 01:12:58,300 --> 01:13:02,720 ასე რომ, რა გვჭირდება in ორობითი ხე? 1521 01:13:02,720 --> 01:13:05,830 ამიტომ ჩვენ გვაქვს ღირებულება ტიპი int, ამიტომ ზოგიერთი int ღირებულება. 1522 01:13:05,830 --> 01:13:07,220 მე არ ვიცი, რასაც ჩვენ მოუწოდა ეს გადაწყვეტა - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 ჩვენ უნდა მომცეთ მარცხენა ბავშვის და მომცეთ უფლება შვილი. 1525 01:13:13,570 --> 01:13:17,540 ასე რომ, ის აპირებს გამოიყურებოდეს. 1526 01:13:17,540 --> 01:13:20,510 და ეს კიდე რეალურად გამოიყურება ადრე როდის ორმაგად დაკავშირებული 1527 01:13:20,510 --> 01:13:25,090 სიაში პერსონალი, ასე რომ ცნობა - 1528 01:13:25,090 --> 01:13:27,860 მე ვაპირებ უნდა გადახვევა ყველა გზა უკან ქვემოთ პრობლემა 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> ასე რომ შეამჩნია ეს გამოიყურება იდენტურია ამ, გარდა ჩვენ უბრალოდ არ უნდა მოვუწოდებთ ამ 1531 01:13:36,390 --> 01:13:38,590 სხვადასხვა სახელები. 1532 01:13:38,590 --> 01:13:41,440 ჩვენ ჯერ კიდევ მთელი რიცხვი ღირებულება და ორი პოინტერები. 1533 01:13:41,440 --> 01:13:44,850 უბრალოდ, იმის ნაცვლად, მკურნალობის მითითებები, როგორც მიუთითებს შემდეგი რამ 1534 01:13:44,850 --> 01:13:47,955 და წინა რამ, ჩვენ სამკურნალოდ პოინტერები აღვნიშნო, მარცხენა ბავშვი 1535 01:13:47,955 --> 01:13:49,205 მარჯვენა და ბავშვი. 1536 01:13:49,205 --> 01:13:57,372 1537 01:13:57,372 --> 01:13:57,860 OK. 1538 01:13:57,860 --> 01:13:59,650 ასე რომ ჩვენი struct კვანძში. 1539 01:13:59,650 --> 01:14:03,920 და ახლა, ერთადერთი ფუნქცია, ჩვენ უნდა განახორციელოს ეს არის ტრავერსზე, რომელიც 1540 01:14:03,920 --> 01:14:08,320 ჩვენ გვინდა წავიდეთ მეტი ხე, ბეჭდვა out ღირებულებების ხე მიზნით. 1541 01:14:08,320 --> 01:14:15,241 >> ასე ეძებს აქ, ჩვენ გვინდა ბეჭდვა out 20, 34, 36, 52, 59 და 106. 1542 01:14:15,241 --> 01:14:17,970 როგორ შეგვიძლია მიზნის მისაღწევად, რომ? 1543 01:14:17,970 --> 01:14:18,890 ასე რომ საკმაოდ მსგავსია. 1544 01:14:18,890 --> 01:14:22,910 თუ დაინახა წარსულში გამოცდა პრობლემა რომ თქვენ სურდა ამობეჭდოთ 1545 01:14:22,910 --> 01:14:25,940 მთელი ხე მძიმეები შორის ყველაფერი, ეს იყო რეალურად კი 1546 01:14:25,940 --> 01:14:27,320 უფრო ადვილია, ვიდრე, რომ. 1547 01:14:27,320 --> 01:14:30,950 ასე რომ, აქ არის გამოსავალი. 1548 01:14:30,950 --> 01:14:33,110 ეს მნიშვნელოვნად ადვილი თუ ეს რეკურსიული. 1549 01:14:33,110 --> 01:14:36,650 მე არ ვიცი, თუ ვინმეს სცადა ამის გაკეთება iteratively. 1550 01:14:36,650 --> 01:14:38,340 >> მაგრამ პირველი, ჩვენ ჩვენი ბაზის შემთხვევაში. 1551 01:14:38,340 --> 01:14:39,660 რა მოხდება, თუ root არის null? 1552 01:14:39,660 --> 01:14:40,610 მაშინ ჩვენ უბრალოდ აპირებს დაბრუნებას. 1553 01:14:40,610 --> 01:14:42,300 ჩვენ არ გვინდა ბეჭდვა არაფერი. 1554 01:14:42,300 --> 01:14:45,940 Else ჩვენ ვაპირებთ traverse რეკურსიული ქვემოთ. 1555 01:14:45,940 --> 01:14:48,140 ბეჭდვა მთელი მარცხენა subtree. 1556 01:14:48,140 --> 01:14:51,440 ასე რომ, ბეჭდვა ყველაფერი ნაკლები ვიდრე ჩემი დღევანდელი ღირებულება. 1557 01:14:51,440 --> 01:14:53,930 და შემდეგ მე ვაპირებ ბეჭდვა თავს. 1558 01:14:53,930 --> 01:14:57,310 და შემდეგ მე ვაპირებ recurse ქვემოთ ჩემი მთელი მარჯვენა subtree, ყველაფერი 1559 01:14:57,310 --> 01:14:58,810 უფრო მეტი, ვიდრე ჩემს ღირებულება. 1560 01:14:58,810 --> 01:15:03,870 და ეს აპირებს ბეჭდვა ყველაფერი წესრიგშია. 1561 01:15:03,870 --> 01:15:05,860 კითხვები, თუ როგორ ეს რეალურად ახორციელებს, რომ? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> აუდიტორია: მე მაქვს შეკითხვა წლის [INAUDIBLE]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> რობ Bowden: ასე რომ ერთი გზა უახლოვდება ნებისმიერი რეკურსიული პრობლემა ის არის, უბრალოდ ვფიქრობ 1566 01:15:23,550 --> 01:15:26,275 ამის შესახებ მინდა თქვენ უნდა ვიფიქროთ ყველა კუთხეში შემთხვევაში. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 ასე მიიჩნევენ, რომ ჩვენ გვინდა ბეჭდვა ეს მთელი ხე. 1569 01:15:38,110 --> 01:15:42,030 ასე რომ, ყველა ჩვენ ვაპირებთ ფოკუსირება არის ამ კონკრეტულ კვანძის - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 რეკურსიული ზარი, ჩვენ ვითომ იმ უბრალოდ მუშაობა. 1572 01:15:47,420 --> 01:15:54,000 ასე რომ აქ, ამ რეკურსიული ზარი ტრავერსზე, ჩვენ გარეშე კი ფიქრობდა 1573 01:15:54,000 --> 01:15:58,640 ამის შესახებ, უბრალოდ გამავალი მარცხენა სამი, წარმოიდგინეთ, რომ უკვე ბეჭდავს 20 1574 01:15:58,640 --> 01:16:00,730 34 ჩვენთვის. 1575 01:16:00,730 --> 01:16:03,350 და მაშინ, როდესაც ჩვენ საბოლოოდ რეკურსიული დარეკეთ ტრავერსზე შესახებ 1576 01:16:03,350 --> 01:16:07,890 უფლება, რომელიც სწორად ბეჭდვა 52, 59, და 106 ჩვენთვის. 1577 01:16:07,890 --> 01:16:13,620 >> ასე რომ, იმის გათვალისწინებით, რომ ეს შეიძლება ბეჭდვა 20, 34, და სხვა შეგიძლიათ ამობეჭდოთ 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 ყველა ჩვენ უნდა გამოუვა არის ბეჭდვის ourself შუა რომ. 1579 01:16:17,180 --> 01:16:21,250 ასე რომ ამობეჭდოთ ყველაფერი ჩვენს წინაშე. 1580 01:16:21,250 --> 01:16:27,710 ბეჭდვა ourself, ისე მიმდინარე კვანძის print 36, რეგულარული printf და შემდეგ 1581 01:16:27,710 --> 01:16:31,170 ბეჭდვა ყველაფერი ჩვენს შემდეგ. 1582 01:16:31,170 --> 01:16:32,730 >> დევიდ ჯ Malan: ეს არის სადაც უკან იღებს მართლაც ლამაზი. 1583 01:16:32,730 --> 01:16:36,270 ის ამ საოცარი ნახტომი რწმენის, სადაც თქვენ აკეთებთ tiniest ცოტა მუშაობა. 1584 01:16:36,270 --> 01:16:38,460 და მაშინ მოდით ვინმე სხვაგან არ დანარჩენი. 1585 01:16:38,460 --> 01:16:40,180 და, რომ ვინმე არის, ირონიულად, თქვენ. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 ასე რომ, სერიოზული brownie ქულა, თუ თქვენ გადახვევა up on კითხვა - 1588 01:16:48,360 --> 01:16:50,530 >> რობ Bowden: On კითხვებს? 1589 01:16:50,530 --> 01:16:53,490 >> დევიდ ჯ Malan: და ქვემოთ პატარა ციფრები, ვინმეს იცით, სადაც 1590 01:16:53,490 --> 01:16:55,190 ეს ციფრები მოდის? 1591 01:16:55,190 --> 01:16:56,610 >> რობ Bowden: მე არ სიტყვასიტყვით არ ვიცი. 1592 01:16:56,610 --> 01:16:59,794 >> დევიდ ჯ Malan: ისინი, როგორც ჩანს, მთელი ვიქტორინა. 1593 01:16:59,794 --> 01:17:01,150 >> აუდიტორია: არიან ისინი იგივე ნომრები? 1594 01:17:01,150 --> 01:17:01,910 >> დევიდ ჯ Malan: ეს ნომრები. 1595 01:17:01,910 --> 01:17:03,260 პატარა აღდგომის კვერცხი. 1596 01:17:03,260 --> 01:17:08,100 ასე რომ, იმ თქვენ თვალს ონლაინ მთავარი, თუ შეგიძლიათ გვითხრათ ფოსტით 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net რა მნიშვნელობა ეს განმეორებადი ექვსი ნომრები 1598 01:17:12,680 --> 01:17:18,560 მთელი Quiz 1, ჩვენ საშხაპე თქვენ საოცარი ყურადღება საბოლოო 1599 01:17:18,560 --> 01:17:21,610 ლექცია და სტრესი დაადასტურა. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 ლამაზი, დახვეწილი. 1602 01:17:27,790 --> 01:17:29,570 >> რობ Bowden: ნებისმიერი ბოლო შეკითხვები არაფერი on ვიქტორინა? 1603 01:17:29,570 --> 01:17:32,608