1 00:00:00,000 --> 00:00:02,750 >> [ნაწილი 9] [უფრო კომფორტული] 2 00:00:02,750 --> 00:00:04,750 [Rob Bowden] [ჰარვარდის უნივერსიტეტის] 3 00:00:04,750 --> 00:00:06,750 [ეს არის CS50.] [CS50.TV] 4 00:00:06,750 --> 00:00:12,130 >> ყველა უფლება. ძირითადად, დღეს ეს ყველაფერი თქვენ ბიჭები ვთხოვო გარკვეული კითხვები. 5 00:00:12,130 --> 00:00:15,070 მე შესაძლოა wander ზოგიერთი თემა 6 00:00:15,070 --> 00:00:17,570 ცოტა თუ არავინ არ აქვს რაიმე კითხვა. 7 00:00:17,570 --> 00:00:20,660 იმედია თქვენ. ვინმეს აქვს რაიმე კითხვა? 8 00:00:20,660 --> 00:00:25,220 შესაძლოა წარსულში ტესტებში, რამ თქვენ არ კომფორტულად გაკეთებული. 9 00:00:34,630 --> 00:00:37,850 >> დიახ. >> [სტუდენტი] შეგიძლიათ წასვლა მეტი ბუფერული overflow თავდასხმები? >> [Rob] რა თქმა უნდა. 10 00:00:37,850 --> 00:00:45,530 მთავარ მაგალითად რეალურად შეიძლება იყოს სწორი აქ. 11 00:00:45,530 --> 00:00:48,720 მთავარი გარიგების უკან ბუფერული overflow თავდასხმები 12 00:00:48,720 --> 00:00:51,540 ჩვენ გვაქვს გარკვეული ბუფერის აქ. 13 00:00:51,540 --> 00:00:54,110 Char c - რომელიც მხოლოდ ზომა 12 - 14 00:00:54,110 --> 00:00:57,580 მაგრამ მაშინ ჩვენ ჩასმა რაღაც რომ ბუფერული 15 00:00:57,580 --> 00:01:00,050 მაგრამ არ შემოწმების ზუსტად რამდენი ვართ ჩასმა. 16 00:01:00,050 --> 00:01:06,740 აქ ჩვენ ჩასმა strlen (ბარი) და C, მაგრამ ვინ იცის, რამდენი ხანი ბარი. 17 00:01:06,740 --> 00:01:11,970 თუ ეს უფრო მეტია, ვიდრე 12 სიმბოლო მაშინ ეს აპირებს overflow ამ ბუფერული. 18 00:01:11,970 --> 00:01:15,830 ეძებს ამ სურათზე - 19 00:01:15,830 --> 00:01:20,840 თუ თქვენ მიიღოს 61 თქვენ მიიღებთ ბევრად უფრო იცნობს ამ სახის განლაგება 20 00:01:20,840 --> 00:01:25,760 და საქმე შენახული კარკასი მაჩვენებელი და დაბრუნების მისამართი და მშობლის რუტინული დასტის 21 00:01:25,760 --> 00:01:27,760 და ეს ყველაფერი რეალური რამ. 22 00:01:27,760 --> 00:01:31,340 მაგრამ აქ თქვენ უბრალოდ უნდა იცოდეს, რომ ჩვენ გვაქვს 23 00:01:31,340 --> 00:01:35,990 ამ პატარა სივრცეში ჩვენი ბუფერული. 24 00:01:35,990 --> 00:01:39,480 აქ ჩვენ გვაქვს c (0) და შემდეგ ჩვენ გ, 1, 2, 3, 4, 5 და ასე შემდეგ. 25 00:01:39,480 --> 00:01:44,810 ნორმალურ პირობებში, რომ ჩვენ შეავსოთ ეს ბუფერული როგორც პოსტი ჩვეულებრივი. 26 00:01:44,810 --> 00:01:50,480 იმ შემთხვევაში, თუ ჩვენ ჩასმული 'მიესალმები' ჩვენ გვინდა h-e-l-l-o / 0, 27 00:01:50,480 --> 00:01:52,900 და შემდეგ მხოლოდ bunch of ცარიელი სივრცე. 28 00:01:52,900 --> 00:01:57,910 განთავსების ჰაკერი - ოჰ, მე ვფიქრობ, ეს არის მაგალითად. 29 00:01:57,910 --> 00:02:02,470 განთავსების ჰაკერი მივიღებთ რაღაც მსგავსი, სადაც 30 00:02:02,470 --> 00:02:04,760 რა ისინი სპეციალურად ცდილობს გააკეთოს არის 31 00:02:04,760 --> 00:02:07,890 ჩვეულებრივ override დაბრუნების მისამართზე. 32 00:02:07,890 --> 00:02:12,510 როდესაც რეკავთ ფუნქცია და თქვენი დასტის ჩარჩო იღებს აიძულა გადატანა დასტის 33 00:02:12,510 --> 00:02:14,690 რომ დასტის ჩარჩო უნდა იცოდეს, როგორ - 34 00:02:14,690 --> 00:02:21,020 ასევე, ფუნქცია, რომელიც ეწოდა უნდა იცოდეს, თუ როგორ უნდა დაუბრუნდეს ფუნქცია, რომელიც მას. 35 00:02:21,020 --> 00:02:23,780 ასე რომ, თუ მთავარ მოუწოდებს foo, foo უნდა დაბრუნდეს ძირითად, 36 00:02:23,780 --> 00:02:26,300 და ისე, რომ ის, რაც ამ დაბრუნების მისამართი აკეთებს. 37 00:02:26,300 --> 00:02:28,800 მაგრამ რა ჰაკერი აპირებს არის 38 00:02:28,800 --> 00:02:30,820 override ის სპეციალური დაბრუნების მისამართი 39 00:02:30,820 --> 00:02:40,090 სადაც კიდევ ერთხელ - Little Indian - ეს არ არის პირდაპირი, მაგრამ თითოეული ბაიტი არის უკან. 40 00:02:40,090 --> 00:02:47,300 ამ დაბრუნების მისამართი რამდენადაც კომპიუტერული შეშფოთებულია 41 00:02:47,300 --> 00:02:51,390 დავბრუნდეთ ამ მისამართზე უდრის დაბრუნების foo ან მთავარი 42 00:02:51,390 --> 00:02:53,850 ან რასაც ფუნქცია მოუწოდა მას. 43 00:02:53,850 --> 00:02:54,800 ასე რომ, ის აპირებს დაბრუნებას ამ მისამართზე 44 00:02:54,800 --> 00:02:58,130 რომელიც უბრალოდ ისე ხდება, რომ ამ მისამართზე 45 00:02:58,130 --> 00:03:04,740 რომელიც არც ზოგჯერ რას აკეთებს აქ არის გამოიყენოს დაბრუნების მისამართი 46 00:03:04,740 --> 00:03:09,150 კონკრეტული ფუნქცია, რომ მათ იციან, უკვე არსებობს. 47 00:03:09,150 --> 00:03:12,630 მე არ მახსოვს რა ფუნქცია მოუწოდა. 48 00:03:12,630 --> 00:03:14,630 მე გამოიყურება ის შემდეგ. 49 00:03:14,630 --> 00:03:17,570 >> აქ რა ისინი აკეთებენ არის ახერხებდნენ დაბრუნების მისამართი 50 00:03:17,570 --> 00:03:26,310 დასტის თავად, და ეს გარკვეულწილად უცნაური, სადაც 51 00:03:26,310 --> 00:03:29,530 არსებობს მაგალითები მეხსიერება, სადაც - 52 00:03:29,530 --> 00:03:34,350 მეხსიერება შეიძლება გაყოფილი up შევიდა წაკითხული მხოლოდ, წაკითხული ჩაწერის და შესრულებადი მეხსიერება 53 00:03:34,350 --> 00:03:38,710 სადაც ვნახეთ წაკითხული მხოლოდ მეხსიერების ადრე, სადაც - 54 00:03:38,710 --> 00:03:43,960 თუ მე ვიტყვი, char * s = მიესალმები მე ვერ ცვლილებები hello. 55 00:03:43,960 --> 00:03:46,200 რომ წაუკითხავი მეხსიერება. 56 00:03:46,200 --> 00:03:49,570 არსებობს ასევე ამ იდეის შემსრულებელი მეხსიერება 57 00:03:49,570 --> 00:03:53,870 სადაც შესრულებადი მეხსიერება იქნება ტექსტის სეგმენტის თქვენს კოდი. 58 00:03:53,870 --> 00:03:57,350 ეძებს თქვენს ჩვეულ მისამართი სივრცეში განლაგება - 59 00:03:57,350 --> 00:04:03,090 მე მჯერა, რომ იქნება კარგი ფოტო - 60 00:04:08,200 --> 00:04:12,170 ეს მუშაობს - სადაც ჩვენ გვაქვს ჩვენი დასტის აქ. მონაცემები გვაქვს მეხსიერებაში. 61 00:04:12,170 --> 00:04:16,360 იგნორირება ამ ძირითადად. ეს არის ჩვენი ბევრი. 62 00:04:16,360 --> 00:04:18,810 და მაშინ ჩვენ ქვემოთ აქ ჩვენი მთავარი პროგრამის კოდი. 63 00:04:18,810 --> 00:04:27,480 ეს არის მსგავსი ადგილი, სადაც ჩვენ დააყენა ჩვენი strings როგორიცაა char * = მიესალმები 64 00:04:27,480 --> 00:04:29,730 და რომ წაიკითხა მხოლოდ. 65 00:04:29,730 --> 00:04:33,590 მაგრამ თქვენ შეიძლება ასევე აღსანიშნავად ამ ძირითადი პროგრამის კოდი, როგორც გაშვება. 66 00:04:33,590 --> 00:04:37,950 და თუ თქვენ აკეთებთ, რომ თუ თქვენი ოპერაციული სისტემა აკეთებს, რომ სწორად 67 00:04:37,950 --> 00:04:40,910 მაშინ ეს უნდა იყოს ერთადერთი ადგილი მეხსიერებაში 68 00:04:40,910 --> 00:04:44,830 რომ კოდი შეიძლება რეალურად შეასრულოს 69 00:04:44,830 --> 00:04:48,550 რაც იმას ნიშნავს, რომ ამ სახის ბუფერული overflow თავდასხმა ჩვენ აქ 70 00:04:48,550 --> 00:04:53,800 იქნება არაეფექტური, რადგან ეს ცდილობს შეასრულოს მეხსიერების აქ ჩვენი Stack. 71 00:04:53,800 --> 00:04:57,230 გაითვალისწინეთ სურათები პირველი. 72 00:04:57,230 --> 00:04:59,270 ჩვენ გვაქვს ჩვენი დასტის იზრდებოდა. 73 00:04:59,270 --> 00:05:01,270 აქ დასტის იზრდება down. 74 00:05:01,270 --> 00:05:03,270 განთავსების CS50 მიზნით დასტის იზრდება. 75 00:05:03,270 --> 00:05:09,520 >> შესაძლებელია circumvent ამ კონკრეტული ტიპის ბუფერული overflow 76 00:05:09,520 --> 00:05:15,110 მიერ, რომელსაც ამ შესრულებადი რეგიონებში მეხსიერების არასამთავრობო შესრულებადი რეგიონებში. 77 00:05:15,110 --> 00:05:21,420 მაგრამ ეს უბრალოდ ისე ხდება, რომ იშვიათად არის შესრულებადი მეხსიერების მონიშნული როგორც შესრულებადი. 78 00:05:21,420 --> 00:05:26,520 უბრალოდ იხრება წაკითხული მხოლოდ და ხელახლა ჩაწერის ერთადერთი რამ, რომ გამოიყენება, 79 00:05:26,520 --> 00:05:28,990 ასე რომ, ეს არის კიდევ ძალიან ეფექტური. 80 00:05:28,990 --> 00:05:31,950 და აქ ჩვენ ვერ დააყენა, რაც ჩვენ გვინდა. 81 00:05:31,950 --> 00:05:35,020 ეს არ იყო რეალურად კეთდება როგორც Pset 61 წელს, 82 00:05:35,020 --> 00:05:38,400 მაგრამ თუ გადავხედავთ შარშანდელ შეთავაზებას ის ან რაიმე წინა წელს 83 00:05:38,400 --> 00:05:44,110 ერთი Pset არის თქვენ კონკრეტულად უნდა ჩაწეროთ აქ კოდი, რომელიც უნდა 84 00:05:44,110 --> 00:05:48,960 ბეჭდვა გარკვეული ღირებულება ან დაბრუნების ღირებულება, რომელიც განსხვავდება 85 00:05:48,960 --> 00:05:51,400 ღირებულება, რომელიც უნდა იყოს დაბეჭდილი. 86 00:05:51,400 --> 00:05:57,770 ან კიდევ უფრო ჭკვიანურად, მას სურს რომ დარეკოთ ან წერა - 87 00:05:57,770 --> 00:06:03,320 ასე რომ, ეს დაბრუნდება მდე აქ და შემდეგ თქვენ შეასრულოს გარკვეული კოდირება აქ, 88 00:06:03,320 --> 00:06:09,720 და ჭკვიანი of overflows შემდეგ დაბრუნდება, რაც ამ დაბრუნების მისამართი გამოყენებული იქნება. 89 00:06:09,720 --> 00:06:11,970 ასე რომ, მიუხედავად იმისა, რომ ჩვენ საჭირო override ამ 90 00:06:11,970 --> 00:06:16,720 ამუშავება, ჩვენ მაინც მახსოვს, რომ დაბრუნების მისამართზე სადღაც 91 00:06:16,720 --> 00:06:18,890 ასე რომ ჩვენ შეგვიძლია დაბრუნდება მთავარ ან რასაც, 92 00:06:18,890 --> 00:06:23,800 და ეს, როგორც ჩვენ არასდროს კი შენიშნა, რომ ყველაფერი წავიდა არასწორი. 93 00:06:23,800 --> 00:06:30,100 მაგრამ ყველაფერი გააკეთა ისე, რომ იმ შემთხვევაში, სადაც შესაძლოა შიგნით აქ gelbroke ჩვენი iPhone. 94 00:06:30,100 --> 00:06:35,670 ყველაფერი, როგორც ჩვეულებრივი - როგორც ჩვენ აწარმოებს რამდენიმე პროგრამა და ყველაფერი დასრულდება მდე დაბრუნების 95 00:06:35,670 --> 00:06:38,540 რაც არ უნდა დაბრუნდეს, მაგრამ ამასობაში 96 00:06:38,540 --> 00:06:41,820 თქვენ მოახერხა განადგურება მთელი ოპერაციული სისტემა. 97 00:06:41,820 --> 00:06:50,950 თქვენ არ უნდა იცოდეთ კოდი დაკავშირებით ბუფერული overflows ან რეალურად უპირატესობების იგი. 98 00:06:50,950 --> 00:06:58,060 თქვენ უნდა იცოდეს ძირითადი იდეები ამ ბუფერული რომ მიმდინარეობს overflowed, 99 00:06:58,060 --> 00:07:02,010 და ეს არის მიზეზი იმისა, რომ ეს შეიძლება იყოს overflowed რადგან ჩვენ არ შემოწმების თუ არა 100 00:07:02,010 --> 00:07:06,110 ჩვენ რეალურად ფარგლებში იგი. 101 00:07:06,110 --> 00:07:09,880 >> [სტუდენტი] გადაწყვეტა თავიდან ასაცილებლად ეს მხოლოდ შემოწმების საზღვრები? 102 00:07:09,880 --> 00:07:13,600 [Rob] დიახ. ამ შემთხვევაში გამოსავალი იქნებოდა 103 00:07:13,600 --> 00:07:20,850 თქვენ შეიძლება არც ვთქვა, თუ strlen ბარი მეტია 12-1 - 104 00:07:20,850 --> 00:07:24,970 რადგან თქვენ უნდა / 0 ბოლოს - 105 00:07:24,970 --> 00:07:34,090 ან თქვენ შეიძლება ხელით გააკეთოს მარყუჟი, რომ მხოლოდ ასლების პირველი 11 პერსონაჟი, 106 00:07:34,090 --> 00:07:39,710 ან უბრალოდ არაფერს, სადაც თქვენ რეალურად შემოწმების დავრწმუნდეთ, რომ თქვენ არ overflow რომ ბუფერული. 107 00:07:45,580 --> 00:07:49,050 >> სხვა კითხვები? დიახ? 108 00:07:49,050 --> 00:07:52,760 [სტუდენტი] შეგიძლიათ საუბრობენ ლელო და იქნებ რაღაც შესახებ პროგრამირების (არ ისმის). 109 00:07:52,760 --> 00:07:58,720 [Rob] რა თქმა უნდა. 110 00:07:58,720 --> 00:08:03,500 ფაქტობრივი პროგრამა - 111 00:08:03,500 --> 00:08:08,190 ჩვენ არასოდეს აკეთებთ განხორციელების trie გამოცდა 112 00:08:08,190 --> 00:08:12,840 იმიტომ, რომ ეს იქნება უსამართლო, ვინც გააკეთა hash მაგიდები. 113 00:08:12,840 --> 00:08:16,030 და ანალოგიურად ჩვენ ვერასოდეს, რომ თქვენ განახორციელოს hash table გამოცდა 114 00:08:16,030 --> 00:08:18,560 იმიტომ, რომ ეს იქნება უსამართლო, ვინც გააკეთა ლელო. 115 00:08:18,560 --> 00:08:25,220 თქვენ უნდა მიუხედავად ამისა, ვიცით struct of trie ან struct of hash მაგიდასთან ან რასაც. 116 00:08:25,220 --> 00:08:30,230 ეს არის ის სინამდვილეში ნებისმიერი სახის მონაცემები სტრუქტურა ჩვენ ვნახეთ. 117 00:08:30,230 --> 00:08:33,559 დაკავშირებული სიები, stacked skews, ორობითი ხე - 118 00:08:33,559 --> 00:08:38,190 თქვენ უნდა შეეძლოს განსაზღვროს იმ structs ზეპირად. 119 00:08:38,190 --> 00:08:44,810 Trie - ეს ნიშნავს, რომ ერთადერთი, რაც თქვენ უნდა გავაკეთოთ არის ის, შესაძლოა, ჩვენ მოგცემთ 120 00:08:44,810 --> 00:08:50,070 ზოგიერთი სიტყვა ან რაღაც და ჩვენ ვიტყვით, მშენებლობა trie, რომ - 121 00:08:50,070 --> 00:08:52,870 ჩვენ მოგცემთ იქნებ კომპლექტი სიტყვა 122 00:08:52,870 --> 00:08:56,280 და ჩვენ, როგორიცაა მშენებლობა trie, რომელიც წარმოადგენს ამ ლექსიკონი. 123 00:08:56,280 --> 00:09:05,980 >> გადავდგათ ჩვენი ლექსიკონი კატა და ძაღლი. 124 00:09:05,980 --> 00:09:10,790 იდეა trie არის, რომ ჩვენ დავიწყოთ ამ მასივი - 125 00:09:10,790 --> 00:09:16,510 26 slots - 126 00:09:16,510 --> 00:09:24,490 და თითოეულ სათამაშო ფაქტობრივი მაჩვენებელი სლოტი შეესაბამება წერილში ჩვენ შეშფოთებული. 127 00:09:24,490 --> 00:09:28,560 ასე რომ აქ, თუ ჩვენ ვცდილობთ ჩასასმელად cat ჩვენს trie 128 00:09:28,560 --> 00:09:35,360 პირველი გმირი არის "გ", რომელიც იქნება ", თუ არის 0, მაშინ b, 1 გ 2. 129 00:09:35,360 --> 00:09:38,090 ჩვენ ვაპირებთ წასვლას მეორე ინდექსი, 130 00:09:38,090 --> 00:09:41,100 და ჩვენ ვაპირებთ, რომ შევქმნათ trie off რომ. 131 00:09:41,100 --> 00:09:47,080 ჩვენ ვაპირებთ აქვს 26 slots. 132 00:09:47,080 --> 00:09:51,140 და მაშინ ჩვენ ვაპირებთ ინდექსი მეორე გმირი კატა. 133 00:09:51,140 --> 00:09:53,340 ეს არის ის, 'a', რომელიც იქნება 0 ადგილზე. 134 00:09:53,340 --> 00:09:56,960 და რომ აპირებს 26 წერტილებით. 135 00:09:56,960 --> 00:10:05,650 მაშინ ჩვენ წავიდეთ 't' და ჩვენ ასევე გვაქვს, რომ მოდის down რომელიც რეალურად ყველა სახის 136 00:10:05,650 --> 00:10:13,990 რადგან - მოდით იგი მოვიდა აქ. აი ჩვენი trie for 't'. 137 00:10:13,990 --> 00:10:23,370 ვთქვათ ეს არის ინდექსი 't' არის 19. 138 00:10:23,370 --> 00:10:31,020 მთავარია გვახსოვდეს ლელო თქვენ შეგიძლიათ არა მხოლოდ ტრეკზე ამ მითითებას. 139 00:10:31,020 --> 00:10:35,470 თქვენ ასევე უნდა ტრეკზე თუ არა ეს არის რეალურად ბოლომდე სიტყვას. 140 00:10:35,470 --> 00:10:38,570 ასე რომ, შიგნით აქ ჩვენ გვჭირდება გარკვეული დროშა, რომელიც ამბობს, 141 00:10:38,570 --> 00:10:41,520 okay, ეს არის რეალურად ბოლომდე სიტყვას. 142 00:10:41,520 --> 00:10:46,830 მიზეზი იმისა, თუ ჩვენ შემდეგ ცდილობენ ჩადეთ კატასტროფული ჩვენი ლექსიკონი 143 00:10:46,830 --> 00:10:49,930 რომელსაც აქვს იგივე დაწყებული 3 სიმბოლო 144 00:10:49,930 --> 00:10:57,250 მაგრამ მიდის შემდგომი ჩვენ უნდა აღიაროს, რომ ეს არის ბოლომდე სიტყვას. 145 00:10:57,250 --> 00:11:01,330 ან ალტერნატიულად, თუ ჩვენ ვცდილობთ ეძებოთ 'ca', რომელიც, შესაძლოა, არ არის სიტყვა 146 00:11:01,330 --> 00:11:06,100 მაგრამ ჩვენ კიდევ ქვევით აქ, მაშინ ჩვენ - 147 00:11:06,100 --> 00:11:10,270 ან უნდა იყოს c და შემდეგ ჩვენ შევხედოთ - 148 00:11:10,270 --> 00:11:13,940 ჩვენ უნდა ვაღიაროთ, რომ მიუხედავად იმისა, რომ მაჩვენებელი გამოდის ამ კვანძის 149 00:11:13,940 --> 00:11:15,940 ეს არ წარმოადგენს დასასრულს სიტყვა. 150 00:11:15,940 --> 00:11:19,430 >> ასე რომ, რას ნიშნავს ეს - რა იყო აპირებთ ამბობენ? 151 00:11:19,430 --> 00:11:22,760 რას ნიშნავს ეს ჩვენი struct ჰგავს? 152 00:11:22,760 --> 00:11:25,760 [სტუდენტური] ეს მასივი მითითებას, რომ 26 ხანგრძლივი და შემდეგ bool იყო ან არ იყო. 153 00:11:25,760 --> 00:11:47,430 [Rob] Yeah. ასე რომ, ჩვენ გვექნება struct trie * პოინტერები - აქ ჩვენ ვიტყვით, [26] ი 154 00:11:47,430 --> 00:11:49,590 და შემდეგ მძიმით აქ. 155 00:11:49,590 --> 00:11:53,210 მაგრამ Pset, ჩვენ ასევე უნდა ანგარიშზე apostrophes, 156 00:11:53,210 --> 00:11:58,170 რაც იმას ნიშნავდა, თქვენ საჭირო მყარი კოდი, რომელიც აპოსტროფი ერთად ინდექსი 27 ან რამე. 157 00:11:58,170 --> 00:12:00,440 მაგრამ აქ ჩვენ მხოლოდ აინტერესებს 26. 158 00:12:00,440 --> 00:12:11,830 და მაშინ ჩვენ გვჭირდება იქნებ char ან bool - მოდით ეძახით არის სიტყვა. 159 00:12:11,830 --> 00:12:18,120 რომ 2 3 რამ, მე ვფიქრობ, თქვენ ოდესმე უნდა ვიცოდეთ ლელო - 160 00:12:18,120 --> 00:12:24,370 მშენებლობის მათ, struct მათ, და ბოლო რაც არის run-time მათ. 161 00:12:24,370 --> 00:12:28,250 >> რა არის runtime of trie - ან lookup წელს trie? 162 00:12:28,250 --> 00:12:47,500 ეს არის სადაც ჩვენ ვამბობთ, რომ ეს o (k), სადაც k არის სიგრძეზე სიტყვა ჩვენ არ უნდა იყოს ეძებს; 163 00:12:47,500 --> 00:12:53,850 მაგრამ, ამავე დროს, ჩვენ ვამბობთ, - მაინც Pset 5 speller გულისთვის - ჩვენ ვამბობთ 164 00:12:53,850 --> 00:12:59,470 გრძელი სიტყვა ლექსიკონი 45 პერსონაჟი, ასე რომ ეს არის, ძირითადად, 165 00:12:59,470 --> 00:13:04,900 O 45, რომელიც არის მუდმივი დრო. 166 00:13:04,900 --> 00:13:09,660 ასე რომ, თუ არ არის ზედა ზღვარი თქვენს გრძელი სიტყვა შემდეგ - 167 00:13:09,660 --> 00:13:15,130 ან თუნდაც, როგორიცაა ინგლისური ლექსიკონი - არ არის ზედა ზღვარი თქვენს გრძელი სიტყვა. 168 00:13:15,130 --> 00:13:19,970 ან რაიმე ლექსიკონი - არსებობს გრძელი შეკრული თქვენი ზედა სიტყვა. 169 00:13:19,970 --> 00:13:25,480 არ აქვს მნიშვნელობა თუ რას აკეთებს არის მუდმივი დრო, 170 00:13:25,480 --> 00:13:33,810 მაგრამ O of k არის ლამაზი, რადგან არ არსებობს რეალურად განსხვავება გაშვებული ამბობენ 171 00:13:33,810 --> 00:13:40,120 45 სიმბოლოიანი სიტყვა წინააღმდეგ ანბანის რომელიც მხოლოდ სიტყვები 3 სიმბოლო. 172 00:13:40,120 --> 00:13:52,870 კიდევ ერთი რამ, რომ ის არის, რომ - 173 00:13:52,870 --> 00:13:57,520 oh, რადგან უბრალოდ ვამბობ, რომ 45 ხდება, რომ ჩვენი გრძელი სიტყვა 174 00:13:57,520 --> 00:14:02,330 სახის სულელური იმიტომ, რომ ამავე დროს, ვთქვათ ალგორითმი O ნ 175 00:14:02,330 --> 00:14:06,510 კარგად okay, რადგან მეხსიერების მხოლოდ მხარს უჭერს up to 2 ^ 32 ბაიტი, 176 00:14:06,510 --> 00:14:11,770 მაშინ N არის საუკეთესო 4 მილიარდი და ეს მუდმივი დრო, რის გამოც რაღაც მომენტში 177 00:14:11,770 --> 00:14:14,870 ეს სულელური ვთქვა ასეთი რამ იქ, სადაც არის ზედა ზღვარი 178 00:14:14,870 --> 00:14:19,540 რომ ჩვენ შეგვიძლია მხოლოდ შეამცირებს მუდმივ დრო რადგან ყველაფერი არის მუდმივი დრო 179 00:14:19,540 --> 00:14:22,320 როცა ფიქრობთ, ის, რომ გზა. 180 00:14:22,320 --> 00:14:25,470 მაგრამ ჩვენ ალბათ მისაღებია ორივე. 181 00:14:25,470 --> 00:14:31,780 ნებისმიერ შემთხვევაში, ახსნას ან რომ O (1) იმას ნიშნავს, თქვენ ზედა ესაზღვრება ხანგრძლივობა სიტყვა; 182 00:14:31,780 --> 00:14:34,070 O (k) ნიშნავს, რომ თქვენი სიგრძეზე სიტყვა - 183 00:14:34,070 --> 00:14:40,900 ასევე, k ნიშნავს სიგრძეზე სიტყვა. 184 00:14:44,060 --> 00:14:47,280 >> Yeah. >> [სტუდენტი] არა bool - რადგან, როდესაც თქვენ გააკეთა თქვენი trie 185 00:14:47,280 --> 00:14:53,220 თითქოს ეს იყო - თქვენ წავიდოდა cat და მაშინ წასვლა მომდევნო მაჩვენებელი 186 00:14:53,220 --> 00:14:59,860 და მაშინ გეტყვით, თუ რომ უდრის მართალია, - რომ თქვენ დააყენა, რომ ჭეშმარიტი, როგორც ხეები? 187 00:14:59,860 --> 00:15:06,560 [Rob] მოდით ვფიქრობ, ეს არის საქმე, სადაც უამრავი მაგალითები შეგიძლიათ უბრალოდ ცდილობენ და ამუშავება 188 00:15:06,560 --> 00:15:12,310 მარტივი და / ან უკიდურესი მაგალითები და რა უნდა იყოს, მოდით ვიფიქროთ, ამ სიტყვის 'a'. 189 00:15:12,310 --> 00:15:21,320 ჩვენს ორიგინალური trie - 190 00:15:21,320 --> 00:15:35,510 გვინდა დააყენა 1 აქ, ან ჩვენ მინდა დააყენოს 1 down აქ. 191 00:15:35,510 --> 00:15:41,350 მე ვიტყოდი, რომ, საბოლოო ჯამში, ეს, ალბათ, ან / ან. 192 00:15:41,350 --> 00:15:46,000 მე არ ვფიქრობ, რომ მიზეზი - ან მართლაც თქვენ wouldn't - 193 00:15:46,000 --> 00:15:51,060 მიზეზი მე არ დააყენა მას იქ იმიტომ, რომ თქვენ კი არ უნდა წავიდეთ, რომ შორს. 194 00:15:51,060 --> 00:15:55,820 ჩვენ არასდროს არ უნდა გამოყოს ამ trie. 195 00:15:55,820 --> 00:15:57,950 ჩვენ უბრალოდ დააყენა 1 up there. 196 00:15:57,950 --> 00:16:03,310 ეს კიდევ მიუთითებს null. 197 00:16:03,310 --> 00:16:09,430 იმ შემთხვევაში, თუ ჩვენ მხოლოდ აპირებს აქვს ერთი სიმბოლო 198 00:16:09,430 --> 00:16:17,220 არ არსებობს მიზეზი, ვრცელდება ქვემოთ კიდევ trie მხოლოდ აღსანიშნავად, რომ წერილში გამოყენებული. 199 00:16:17,220 --> 00:16:21,260 მსგავსად ამისა, თუ ჩვენ დააყენა 'a' ქვემოთ 200 00:16:21,260 --> 00:16:27,860 მაშინ აუცილებლად ყველა ეს იქნებოდა მხოლოდ 0 ნებისმიერ დროს. 201 00:16:27,860 --> 00:16:36,060 >> [სტუდენტი] მაგრამ არ გვჭირდება დაწყებული trie, რომ იქნება აღვნიშნო, რომ ამ "ა"? 202 00:16:36,060 --> 00:16:43,570 [Rob] ჩვენ გვაქვს მსოფლიო ან რაღაც struct trie * t 203 00:16:43,570 --> 00:16:47,270 რომელიც მიუთითებს, მაგრამ ეს მხოლოდ კურსორი. 204 00:16:47,270 --> 00:16:51,500 ეს არ არის სრული გაბერილი trie, რომელიც მიუთითებს, რომ ეს. 205 00:16:51,500 --> 00:17:02,000 [სტუდენტური] Okay. როგორ უნდა მივუთითოთ ასო 'i'- სიტყვა მე? 206 00:17:02,000 --> 00:17:06,380 [Rob] მისი კითხვა შეიძლება პასუხობდა, რომ. ჩატარების შესახებ. 207 00:17:06,380 --> 00:17:15,060 ეს არის საკითხი, სადაც trie და თავად - 208 00:17:15,060 --> 00:17:17,880 მე არ ვიცი გზა Pset არ წერია ეს. 209 00:17:17,880 --> 00:17:19,880 წინა struct იყო ცუდი. 210 00:17:19,880 --> 00:17:41,690 მაგრამ ჩვენ შეგვიძლია ასევე გავაკეთოთ struct კვანძის არის bool - და მომცეთ - 211 00:17:41,690 --> 00:17:46,500 იქ რეალურად მრავალი გზა შეგიძლიათ დაწერა. 212 00:17:46,500 --> 00:18:01,800 გარდა ამისა trie არ უნდა იყოს struct. 213 00:18:01,800 --> 00:18:21,250 ეს შეიძლება იყოს trie - typedef კვანძის * - 214 00:18:21,250 --> 00:18:34,760 კვანძის [26] არის trie და ეს აღარ არის struct. 215 00:18:34,760 --> 00:18:44,270 ახლა იქ იქნება - I'm ცდილობს ვფიქრობ ისე, რომ Pset იქნებოდა მოსალოდნელია თქვენ. 216 00:18:44,270 --> 00:18:47,650 [სტუდენტური] მე გამოყვანილია, რომ განხილვის სხდომაზე და ვფიქრობ, რომ ისინი უბრალოდ წასვლა - 217 00:18:47,650 --> 00:18:50,670 მოსწონს თუ თქვენ გაქვთ მაშინ გადადით შემდეგ - >> [Rob] სწორედ, თუ როგორ გავაკეთოთ ეს? 218 00:18:50,670 --> 00:18:53,750 [სტუდენტი] და მაშინ, თუ არსებობს ჭეშმარიტი იქ არ მუშაობს - 219 00:18:53,750 --> 00:18:58,710 [Rob] Yeah. ეს იმას მუშაობა. ეს ნაბოძები სივრცეში - 220 00:18:58,710 --> 00:19:03,910 თქვენ აუცილებლად უნდა მთელი სხვა დონეზე trie, რომ თქვენ არ უნდა პირველ რიგში. 221 00:19:03,910 --> 00:19:08,410 აქ ის მიღების მახინჯი ყოველ - 222 00:19:08,410 --> 00:19:11,530 ძირითადად რა ვცდილობ აქ არის ასოცირებული - 223 00:19:11,530 --> 00:19:15,000 ნაცვლად იმისა, რომ 26 მითითებას თქვენი ლელო, 224 00:19:15,000 --> 00:19:20,810 ის 26 bool მაჩვენებელი, bool მაჩვენებელი, bool მაჩვენებელი, და ასე შემდეგ. 225 00:19:28,940 --> 00:19:34,410 >> [სტუდენტი] თქვენ არ შეგიძლიათ, რომ 2 კოლექტორები? მასივი bools და მასივი მითითებას? 226 00:19:34,410 --> 00:19:38,060 [Rob] თქვენ შეიძლება, მაგრამ მერე ნეტავ უნდა - 227 00:19:38,060 --> 00:19:41,500 2 კოლექტორები booleans და მითითებები. 228 00:19:41,500 --> 00:19:47,340 თქვენ უნდა შემდეგ ავაშენოთ თქვენი მასივი booleans - 229 00:19:47,340 --> 00:19:51,240 თქვენი მასივი booleans უნდა იყოს, როგორც დიდი, როგორც trie 230 00:19:51,240 --> 00:19:53,200 რადგან თქვენ შეგიძლიათ არა მხოლოდ აქვს 26 booleans. 231 00:19:53,200 --> 00:19:57,010 მას იზრდება ყოველ შესაძლებელია - 232 00:19:57,010 --> 00:20:03,240 როგორც თქვენი trie მეტი 26 ჭეშმარიტი ან მცდარი შესაძლებელია სიტყვები. 233 00:20:03,240 --> 00:20:08,240 ამ დროისთვის ისინი შეიძლება ასევე იყოს მხოლოდ ერთი struct რომ თქვენი trie იზრდება ქვემოთ. 234 00:20:08,240 --> 00:20:15,210 ეს არ ჩანს, უფლება, რადგან - რა მინდა აქ? 235 00:20:15,210 --> 00:20:23,640 ასე რომ, trie * t - 236 00:20:23,640 --> 00:20:30,200 შეგიძლიათ გააკეთოთ typedef (კვანძის *) [26] trie; 237 00:20:30,200 --> 00:20:33,090 რომ შეიძლება იყოს სინტაქსი ვეძებ. 238 00:20:36,740 --> 00:20:41,450 და ეს უნდა იყოს მხოლოდ რეგულარული trie. 239 00:20:44,900 --> 00:20:47,440 მე არ ვარ დარწმუნებული. 240 00:20:47,440 --> 00:20:54,850 მაგრამ ეს არის გზა გავაკეთეთ ის განხილვა, ისე, რომ მუშაობს შესანიშნავად ჯარიმა, ძალიან. 241 00:20:54,850 --> 00:20:57,850 ამ შემთხვევაში, თუ ეს მხოლოდ bool არის სიტყვა და შემდეგ მასივი 26 242 00:20:57,850 --> 00:21:01,750 მაშინ თქვენ უნდა წასვლა მომდევნო დონეზე. 243 00:21:01,750 --> 00:21:05,420 მე ვფიქრობ, რომ გზა მინდა ამის გაკეთება. 244 00:21:07,500 --> 00:21:09,550 >> სხვა კითხვები? 245 00:21:09,550 --> 00:21:12,540 [სტუდენტური] შემიძლია კითხვის დასმის შესახებ რაღაც? >> [Rob] დიახ. 246 00:21:12,540 --> 00:21:19,040 [სტუდენტი] შეგიძლიათ წასვლა მეტი რა განსხვავება არის და როცა მინდა გამოიყენოთ jQuery წინააღმდეგ Ajax? 247 00:21:19,040 --> 00:21:24,550 [Rob] ისინი და თავს სრულიად განსხვავებული. 248 00:21:24,550 --> 00:21:32,720 JQuery არ დაუშვათ Ajax. ეს იმას გვაწვდიან ადვილია გამოყენება Ajax. 249 00:21:32,720 --> 00:21:38,480 მაგრამ Ajax მოდის გაიგზავნება JavaScript. JavaScript აქვს Ajax შესაძლებლობები. 250 00:21:38,480 --> 00:21:47,490 ყველა Ajax ნიშნავს liken მე უკვე გვერდზე და როცა მინდა - 251 00:21:47,490 --> 00:21:52,820 როდესაც მე დააწკაპუნეთ რაღაც მე არ უნდა განაახლეთ გვერდი ჩამოტვირთოთ რომ ახალ ინფორმაციას. 252 00:21:52,820 --> 00:21:55,020 უბრალოდ მოითხოვოს, რომ ახალი ინფორმაცია. 253 00:21:55,020 --> 00:22:01,220 თქვენ შეგიძლიათ შეხედოთ მას Facebook ან რამე. 254 00:22:01,220 --> 00:22:05,580 შეამოწმოს ქსელი. 255 00:22:05,580 --> 00:22:07,460 Shrink ამ. 256 00:22:12,070 --> 00:22:14,940 ქვემოთ აქ ჩვენ ვხედავთ, რომ ჩვენ ვიღებთ ყველა ამ მოთხოვნას. 257 00:22:14,940 --> 00:22:18,990 ახლა, როდესაც მე დააწკაპუნეთ - კარგად, ის აკეთებს Ajax ადრე მე კი დააჭირეთ არაფერი. 258 00:22:18,990 --> 00:22:24,140 მაგრამ თუ მე დააწკაპუნეთ, მაშინ იგი აპირებს მიიღოს bunch of მოთხოვნები ქვემოთ აქ 259 00:22:24,140 --> 00:22:33,530 რომელიც მხოლოდ მიღების ეს მოთხოვნები - oh, ახლა კი აქ. 260 00:22:33,530 --> 00:22:36,590 მოდით ამოცნობა. 261 00:22:36,590 --> 00:22:38,580 ეს კიდევ ერთხელ გავაკეთოთ. 262 00:22:38,580 --> 00:22:42,090 ჩვენ ვხედავთ, რომ ჩვენ ყველა ამ მოთხოვნებს, მაგრამ ეს შეიძლება კვლავ იყოს პროცესში გვერდზე loading. 263 00:22:42,090 --> 00:22:47,400 ყურადღება მიაქციეთ Facebook მიღების ეს მუდმივი მოთხოვნები შემდეგაც კი გვერდზე დატვირთული. 264 00:22:47,400 --> 00:22:51,470 და თუ მე დააწკაპუნეთ აქ, გავაკეთებ კიდევ რამდენიმე მოთხოვნა ზოგიერთი მონაცემები 265 00:22:51,470 --> 00:22:54,990 რომ არის პასუხი, რაც მე უბრალოდ დაწკაპავთ. 266 00:22:54,990 --> 00:23:04,660 ეს მხოლოდ რა Ajax არის. იგი საშუალებას გაძლევთ დახევის მონაცემები, რომ არ იყო გადმოწერილი ერთად გვერდზე თავდაპირველად. 267 00:23:04,660 --> 00:23:12,050 >> JQuery არის ცალკე. JQuery მხოლოდ JavaScript ბიბლიოთეკა, რაც ბევრი რამ ადვილია. 268 00:23:12,050 --> 00:23:28,660 With jQuery ეს ბევრი უპირატესობა ის არის, ეს მხოლოდ - 269 00:23:28,660 --> 00:23:34,030 დოლარის ნიშანი - დოლარის ნიშანი არის სწორი ცვლადი JavaScript. 270 00:23:34,030 --> 00:23:43,460 ასე რომ, jQuery - ყველა ის აკეთებს ამბობს, როგორიცაა var $ = მთელი bunch პერსონალის - 271 00:23:43,460 --> 00:23:46,690 ისევე როგორც ზოგიერთი დიდი ფუნქცია ყველა ამ პერსონალის it - 272 00:23:46,690 --> 00:23:52,650 და მაშინ გამოიყენოს, რომ დოლარის ნიშანი გზები, როგორიცაა 273 00:23:52,650 --> 00:24:23,940 $ ("# Footer"). სტილი ("text-align", "ცენტრი"). 274 00:24:23,940 --> 00:24:32,330 JQuery გვაძლევს ამ სახის სინტაქსური, სადაც დიდი უპირატესობა - 275 00:24:32,330 --> 00:24:35,650 მას აქვს სხვა თვისებები, მაგრამ ის, რაც ჩვენ გვინდა, რომ თქვენ ფოკუსირება საუკეთესო 276 00:24:35,650 --> 00:24:38,760 მხოლოდ მას შეუძლია აირჩიოთ ელემენტები მოსწონს ეს. 277 00:24:38,760 --> 00:24:42,780 ჩვეულებრივ, ჩვეულებრივი წლის JavaScript შეგიძლიათ გააკეთოთ რამ, როგორიცაა, 278 00:24:42,780 --> 00:24:50,490 დოკუმენტის dot მისაღებად ელემენტს ით footer-dot - მე არ ვიცი რა არის, რომ წერტილი - 279 00:24:50,490 --> 00:24:52,790 რაღაც შესახებ CSS ან სტილი ან რაღაც - 280 00:24:52,790 --> 00:24:58,930 მაგრამ შემდეგ ამისა, ვთქვათ გვინდოდა აირჩიეთ კლასი. 281 00:24:58,930 --> 00:25:06,330 ახლა ჩვენ სწავლება ყველაფერი კლასი ძირი ამ სტილში. 282 00:25:06,330 --> 00:25:16,070 მაშინაც კი, თუ გვსურდა სტილი ნებისმიერ პუნქტებში. 283 00:25:16,070 --> 00:25:22,000 ასე რომ, ამ selector - მიმდინარეობს შეუძლია შეარჩიოს რამ dom მოსწონს ეს არის ძალიან მოსახერხებელი 284 00:25:22,000 --> 00:25:29,420 მას შემდეგ, რაც ბარის წლის JavaScript თქვენ უნდა გავაკეთოთ დოკუმენტის dot მისაღებად ელემენტების კლასის სახელი 285 00:25:29,420 --> 00:25:34,260 ან რაც არ არის, ან თუ მინდოდა tag მე უნდა ვთქვა, კიდევ ელემენტების მიერ tag სახელი. 286 00:25:34,260 --> 00:25:37,530 ასე რომ, მე უნდა იცოდეს კონკრეტული გზები, რომ შევიდე ყველა ამ საკითხზე. 287 00:25:37,530 --> 00:25:40,810 ფუნქციები იქნება სხვადასხვა დამოკიდებულია თუ არა მე გამოყენებით კლასის ან ID 288 00:25:40,810 --> 00:25:46,420 ან tag ან რა, ხოლო jQuery უბრალოდ აკეთებს, რომ ჩემთვის. 289 00:25:46,420 --> 00:25:53,120 >> [სტუდენტი] არის jQuery იქნება გამოყენებული, როდესაც თქვენ აკეთებთ პირველადი სტილის გვერდი? 290 00:25:53,120 --> 00:25:56,570 ან შეცვლის მიზნით სტილის შემდეგ უკვე - >> [Rob] შეცვლის. 291 00:25:56,570 --> 00:25:58,440 [სტუდენტური] მას შემდეგ, რაც უკვე დატვირთული. >> [Rob] Yeah. 292 00:25:58,440 --> 00:26:07,020 ყველა თავდაპირველი სტილის - კარგად, კი - 293 00:26:07,020 --> 00:26:09,970 ზოგადად, თქვენ უნდა გამოიყენოთ ამ სახის ცვლილება. 294 00:26:09,970 --> 00:26:14,330 თქვენ არ შეცვლის - ეს იმუშავებს შესანიშნავად ჯარიმა. 295 00:26:14,330 --> 00:26:17,720 მაგრამ, როგორც წესი თქვენ არ შეცვალოს სტილი მოსწონს ეს. 296 00:26:17,720 --> 00:26:20,610 ამის ნაცვლად, თქვენ მინდა მისცეს მას ახალი კლასი ან რამე 297 00:26:20,610 --> 00:26:24,650 ხოლო CSS უკვე განსაზღვრულია, რომ კლასი გარკვეული გზა. 298 00:26:24,650 --> 00:26:28,920 მიერ აძლევდა ეს საკითხი მე შერჩევის ახალი კლასი 299 00:26:28,920 --> 00:26:32,200 მე გამოყენებით სტილი, რომელიც უკვე გადმოწერილი. 300 00:26:32,200 --> 00:26:36,720 [სტუდენტი] ასე რომ თქვენ აირჩიეთ რამოდენიმე checkboxes და რამ, რომ თქვენ არჩეული 301 00:26:36,720 --> 00:26:41,820 შეცვლის ახალი სტილი და დაიწყება ეძებს სხვადასხვა. >> [Rob] Yeah. 302 00:26:41,820 --> 00:26:45,490 სხვა რამ უნდა გვახსოვდეს შესახებ - 303 00:26:45,490 --> 00:26:48,350 ასევე, არსებობს რამდენიმე ფუნქციები, თქვენ უნდა გვახსოვდეს შესახებ jQuery. 304 00:26:48,350 --> 00:26:55,570 მოდით ვთქვათ, რომ ჩვენ შერჩევის რაღაც ID P. 305 00:26:55,570 --> 00:27:00,500 >> [სტუდენტი] Do თქვენ ყოველთვის უნდა გამოვიყენოთ ფუნტი? 306 00:27:00,500 --> 00:27:09,600 [Rob] ეს იმას ნიშნავს, ID. ის ექვივალენტი CSS, ასე რომ CSS სელექციონერები - ის მიერ ინსპირირებული, რომ. 307 00:27:09,600 --> 00:27:12,410 სადაც CSS თუ მინდოდა სტილი ძირი - 308 00:27:12,410 --> 00:27:16,950 ან რაღაც პირადობის ძირი - 309 00:27:16,950 --> 00:27:23,490 ეს იქნება, როგორიც text-align: center; 310 00:27:23,490 --> 00:27:28,820 თქვენ არ უნდა დაწეროთ CSS გამოცდა, მაგრამ თქვენ უნდა იცოდეს სელექციონერები. 311 00:27:28,820 --> 00:27:34,280 თქვენ უნდა იცოდეს, თუ რა - თქვენ უნდა იცოდეს, როგორ წაიკითხავს. 312 00:27:34,280 --> 00:27:36,000 მაგრამ ჩვენ არასოდეს - 313 00:27:36,000 --> 00:27:42,390 თქვენ არ უნდა გვემახსოვრება ყველა სხვადასხვა შესაძლო სტილის რამ. ან რომელიმე მათგანი. 314 00:27:42,390 --> 00:27:50,020 >> JQuery რამ უნდა გვახსოვდეს - 315 00:27:50,020 --> 00:27:58,380 თქვენ უნდა გვახსოვდეს, dot-HTML, და საერთო ნიმუში jQuery - მოდით ხელახლა დაწერა ეს. 316 00:27:58,380 --> 00:28:09,640 საერთო ნიმუში ჩვენ $ ("# ვ"). Html 317 00:28:09,640 --> 00:28:15,650 თუ მე ზუსტად უბრალოდ ფრჩხილებში ეს ნიშნავს, რომ მიიღოთ HTML; 318 00:28:15,650 --> 00:28:23,870 ხოლო თუ ვიტყვი, HTML და ამით რასაც მინდა აქ - ზოგიერთი ბმული რაღაც - 319 00:28:23,870 --> 00:28:30,410 აყენებს რაღაც შიგნით ფრჩხილებში ახლა ადგენს HTML. 320 00:28:30,410 --> 00:28:33,760 ეს საკმაოდ გავრცელებული შორის bunch of ფუნქციები. 321 00:28:33,760 --> 00:28:38,360 იქ იგივე გარიგება ტექსტი. 322 00:28:38,360 --> 00:28:41,720 სხვაობა HTML და ტექსტი არის ის, რომ ტექსტი აპირებს ჩადეთ ამ 323 00:28:41,720 --> 00:28:46,350 როგორც ლიტერატურული ნაკლებად, ვიდრე, უფრო, ვიდრე არა როგორც წამყვანმა ტეგით. 324 00:28:46,350 --> 00:28:53,000 და ტექსტი იქნება იგივე თუ უბრალოდ ამის გაკეთება. 325 00:28:53,000 --> 00:28:55,760 ის აპირებს ვიღებ ტექსტში - არ HTML დოკუმენტი 326 00:28:55,760 --> 00:29:01,810 მაგრამ მხოლოდ ტექსტი ფარგლებში ამ ელემენტს. 327 00:29:01,810 --> 00:29:08,430 კიდევ ერთი არის, თუ "ვ" ხდება, ID განთავსების input, 328 00:29:08,430 --> 00:29:14,250 მაშინ hash-f-dot-val - თუ მინდა, რომ მითითებული შეყვანის რაღაც - 329 00:29:14,250 --> 00:29:17,900 ვთქვათ, მე მოხვდა ჩამრთველი და მინდა ნაგულისხმევი ღირებულება - 330 00:29:17,900 --> 00:29:26,070 dot-val - მე კი არ ვიცი - 3 - ისე, რომ ავტომატურად ჩადეთ ტექსტში ყუთი 3, 331 00:29:26,070 --> 00:29:35,980 მაგრამ თუ მე ვიტყვი, 3-dot-val, რომელიც დაიბრუნებს, რაც ამჟამად ტექსტში ყუთი ჩემთვის. 332 00:29:35,980 --> 00:29:39,690 >> ეს არის სასარგებლო ფორმით დადასტურება, სადაც 333 00:29:39,690 --> 00:29:48,030 თუ უბრალოდ გვინდა დავრწმუნდეთ, რომ ისინი რეალურად შევსებული ყველა რამ. 334 00:29:48,030 --> 00:29:54,710 ერთი გზა აკეთებს, რომ, თუ მას შემდეგ, რაც მე მოხვდა წარუდგინოს ის აუცილებლად გაგზავნილი ზოგიერთი გვერდი სერვერზე - 335 00:29:54,710 --> 00:30:00,190 ისევე როგორც ჩვენთვის ეს იქნება PHP - და რომ შეეცდება გადაამუშავებს მონაცემები და ეს ვიტყოდი 336 00:30:00,190 --> 00:30:03,030 ისინი არ შეავსოთ რაღაც, ასე რომ ახლა გადამისამართებების მათ მეორე გვერდზე, რომელიც ამბობს, 337 00:30:03,030 --> 00:30:05,050 თქვენ არ შეავსოთ ყველაფერს. 338 00:30:05,050 --> 00:30:11,650 ნაცვლად, რომელმაც უნდა გავაკეთოთ, რომ JavaScript / jQuery შეგიძლიათ უბრალოდ თუ val ცარიელია. 339 00:30:11,650 --> 00:30:17,270 ან val - ცარიელი quotes. 340 00:30:17,270 --> 00:30:23,120 რომ აპირებს მხოლოდ - ახლა ჩვენ შეგვიძლია გაფრთხილება, რომ თქვენ არ შეავსოთ ამ სფეროში. 341 00:30:23,120 --> 00:30:26,990 აუცილებლად თქვენ უნდა გავაკეთოთ PHP სერვერული შემოწმების რადგან 342 00:30:26,990 --> 00:30:31,210 შეგიძლიათ უბრალოდ გამორთოთ JavaScript ყველა ბრაუზერებში. 343 00:30:31,210 --> 00:30:36,180 მაგრამ JavaScript ხდის მოსახერხებელი მათთვის, ვისაც არ აქვს, რომ გააქტიურებულია, 344 00:30:36,180 --> 00:30:42,940 და პრაქტიკულად ოთხმოცდაცხრამეტს-point-რაღაც პროცენტი ბრაუზერები იგი დღეს. 345 00:30:42,940 --> 00:30:46,630 ძალიან ცოტა ადამიანი შემობრუნდება JavaScript off. 346 00:30:46,630 --> 00:30:52,850 ეს არის შესახებ მოხერხებულობისთვის. თქვენ უნდა გავაკეთოთ PHP Validation. 347 00:30:52,850 --> 00:30:55,990 თქვენ უნდა გავაკეთოთ JavaScript Validation. 348 00:30:55,990 --> 00:30:57,950 >> [სტუდენტი] რა # f ეხება აქ? 349 00:30:57,950 --> 00:31:00,020 [Rob] რა # f ეხება? 350 00:31:00,020 --> 00:31:04,350 არსებობს რამდენიმე ელემენტს ჩემს დოკუმენტის ID "ვ". 351 00:31:04,350 --> 00:31:09,850 ჩვენ შევხედოთ - ალბათ Facebook უამრავი მაგალითები, სადაც თუ მე მოვედი ელემენტები 352 00:31:09,850 --> 00:31:17,820 ეძებს აქ ფარგლებში ელემენტები tag ვხედავ ამ კონკრეტულ div რომ მიმდინარეობს ხაზგასმით აქ - 353 00:31:17,820 --> 00:31:22,670 თუ მთელი გვერდი - yeah, ის იქ. ეს ID pagelet_bluebar. 354 00:31:22,670 --> 00:31:26,730 კონსოლის მე ვივარაუდოთ, ისინი გამოყენებით jQuery. 355 00:31:26,730 --> 00:31:40,030 ასე რომ, მე ვერ აირჩიოთ pagelet_bluebar ასე რომ ირჩევს, და გავაკეთე რაღაც. 356 00:31:46,470 --> 00:31:52,250 მოდით ცდილობენ - ან იქნებ ისინი არ იყენებს jQuery და რომ ხასიათის ამოცანების რაღაც. 357 00:31:52,250 --> 00:32:04,970 უკეთესი მაგალითი რაღაც ვიცი იყენებს jQuery - 358 00:32:04,970 --> 00:32:10,600 ჯერ კიდევ ეძებს ჩვენი ელემენტები აქ - ჩვენ აქ კლასის შეადგენს navbar. 359 00:32:10,600 --> 00:32:12,330 ეს არის რაღაც კლასის navbar, 360 00:32:12,330 --> 00:32:19,180 ასე შიგნით ჩვენი console ჩვენ შეგვიძლია up ის კლასის navbar. 361 00:32:19,180 --> 00:32:21,770 აქ ჩვენ შეგვიძლია გადახვევა მეტი და ვხედავთ, რომ ის, რასაც ეს. 362 00:32:21,770 --> 00:32:29,850 თუ მინდოდა ამის გაკეთება. ტექსტის ეს არის ტექსტი, რომ ასე ვხედავ პარამეტრების მოხსენებას ზემოთ log out 363 00:32:29,850 --> 00:32:35,760 რომლებიც ყველა აქ, მაგრამ ეს ჯერ კიდევ text ფარგლებში, რომ HTML tag. 364 00:32:35,760 --> 00:32:52,230 მე ვერ მითითებული HTML მხოლოდ რამდენიმე ბმული, 365 00:32:52,230 --> 00:32:56,550 ასე რომ მე მოშორება ჩემი ბარი. ახლა, რომ მოიშორეს header მთლიანად მხოლოდ ამიტომ უკავშირდება YouTube. 366 00:32:56,550 --> 00:32:59,630 >> და არის თუ არა რაიმე ფორმით მაგალითად? 367 00:32:59,630 --> 00:33:01,940 აი ფორმით. 368 00:33:01,940 --> 00:33:05,830 შემიძლია მარჯვენა ღილაკით და გაეცნონ ელემენტი მოვიდა ეს უფლება აქ. 369 00:33:05,830 --> 00:33:08,460 მე ვხედავ, რომ მისი ID არის ტექსტური ძიება, 370 00:33:08,460 --> 00:33:16,910 ასე რომ, აქ ქვემოთ, თუ ID ტექსტში. 371 00:33:16,910 --> 00:33:23,190 მე მოუტანს მას და მე ვხედავ, რომ არის სწორი, რაც მე ეძებდა. 372 00:33:23,190 --> 00:33:27,670 თუ მე მინდა ამის გაკეთება. Val, რომ მომეცი რა მქონდა აკრეფილი არსებობს. 373 00:33:27,670 --> 00:33:36,010 იმ შემთხვევაში, თუ მინდოდა მიესალმები ეს ყველაფერს შეცვლის up აქ მიესალმები - jQuery. 374 00:33:36,010 --> 00:33:45,780 რა თქმა უნდა, მე ვერ გავაკეთებ, სასაცილოა, როგორიც document.get ელემენტს ით - ტექსტის ძებნა - 375 00:33:45,780 --> 00:33:54,000 ისიც კი არ ვიცი რა არის ამ ეტაპზე - dot ღირებულება - არა, დამავიწყდა, რომ ბიჭი. 376 00:33:54,000 --> 00:33:59,110 ასე რომ, hello. მე არ ვიცი, როგორ მინდა მითითებული ეს უდრის რაღაც. 377 00:33:59,110 --> 00:34:00,930 ჰო, ასე რომ შეიცვალა, რომ. 378 00:34:00,930 --> 00:34:07,510 მაგრამ თქვენ არ უნდა გამოიყენოთ ეს და ძალიან ბევრ საიტებზე ამ ეტაპზე გამოყენება jQuery. 379 00:34:07,510 --> 00:34:13,050 მაშინაც კი, ისევე როგორც საბოლოო პროექტი - თუ თქვენ აკეთებთ ვებ - პროექტი პირველ რიგში, 380 00:34:13,050 --> 00:34:20,030 ვურჩევ მხოლოდ მათ jQuery ასე რომ თქვენ შეგიძლიათ ფონდის ყველა ეს ფუნქციები. 381 00:34:22,580 --> 00:34:27,750 >> [სტუდენტი] ვფიქრობ ვნახე განსხვავებული გზა ელემენტის გამოყენებით dom. 382 00:34:27,750 --> 00:34:32,520 ნუ თქვენ უნდა გამოიყენოთ dot და შემდეგ გააგრძელოს აპირებს ქვემოთ? 383 00:34:32,520 --> 00:34:36,630 [Rob] შეგიძლიათ ამის გაკეთება. მე არ ვიცი, თუ ეს იმუშავებს ძალიან კარგად. 384 00:34:36,630 --> 00:34:38,900 ძნელია ნავიგაცია, რომ გზა. 385 00:34:38,900 --> 00:34:43,179 ერთი მაგალითი არის - მე არ ვიცი, თუ ჩვენ რაიმე ფორმით - 386 00:34:43,179 --> 00:34:48,940 მაგრამ document.forms დაბრუნებას აპირებს სიაში ფორმები რომ არის ამ გვერდზე, 387 00:34:48,940 --> 00:34:55,070 მაშინ შემიძლია document.forms 0 აპირებს იყოს პირველი ფორმით. 388 00:34:55,070 --> 00:35:03,070 Dot - მე არ ვიცი, რა ჩვენ მოუწოდა, რომ - ასე კი არ აქვს სახელი, 389 00:35:03,070 --> 00:35:08,050 იქნებ საშუალებებით იმუშავებს. პოსტები 390 00:35:08,050 --> 00:35:11,050 ისიც კი არ ვიცით, თუ როგორ უნდა ამ - მიიღოს ელემენტს-I-tag სახელის შეყვანა. 391 00:35:11,050 --> 00:35:23,630 ჰო, მომცა input, და ახლა მინდა 0 შეყვანის 392 00:35:23,630 --> 00:35:31,320 და მინდა აირჩიოთ მისი ღირებულება, ასე რომ იქნება ტექსტი. 393 00:35:31,320 --> 00:35:33,890 მე უნდა დასრულდება მდე აკეთებს მისაღებად ელემენტების მიერ tag სახელი მაინც. 394 00:35:33,890 --> 00:35:36,210 ამას შეიძლება რამდენიმე გზა აირჩიოთ პირდაპირ 395 00:35:36,210 --> 00:35:43,480 მეშვეობით ფორმა 0, მაგრამ ლამაზი რამ შესახებ ეს არის მაინც მინდა მე მხოლოდ მისაღებად tags მოუწოდა input 396 00:35:43,480 --> 00:35:49,880 რომ იყო ბავშვი, ამ ფორმით, წინააღმდეგ შემთხვევაში, თუ მე უბრალოდ რომ სწორი up წინა 397 00:35:49,880 --> 00:35:56,680 ამ შემთხვევაში აირჩიეთ ყველა ელემენტების მთელ გვერდზე, მთელი დოკუმენტი 398 00:35:56,680 --> 00:36:00,580 ნაცვლად მხოლოდ, რომ ფორმა და ალბათ არც იქნება ერთი მინდა. 399 00:36:00,580 --> 00:36:06,180 მე კი არ ვიცი, რომელიც ერთი ეს არის. მე არ ვიცი. 400 00:36:06,180 --> 00:36:13,450 ვფიქრობ, პირველი შეყვანის ელემენტს ჩვენს გვერდზე არის ამ პატარა ჩამრთველი. 401 00:36:13,450 --> 00:36:20,450 >> [სტუდენტი] ეს არის საკმაოდ unrelated 402 00:36:20,450 --> 00:36:27,420 და შესაძლოა სახის სულელური, მაგრამ პასუხი გასაღები ნათქვამია, რომ PHP - 403 00:36:27,420 --> 00:36:35,660 მე არ ვიცი, არის თუ არა ეს პასუხი გასაღები ან აღნიშნავს, მაგრამ ის ამბობს, PHP არის სერვერული 404 00:36:35,660 --> 00:36:39,590 და JavaScript არის კლიენტის მხარეს. რა არის განსხვავება 2? 405 00:36:39,590 --> 00:36:45,550 [Rob] განსხვავება JavaScript კლიენტის მხარეს და PHP სერვერის მხარეს. 406 00:36:45,550 --> 00:36:51,890 თუ თქვენ არ გამიგია slash / გამოიყენება კვანძის js სანამ თქვენ ფიქრობთ, რომ 407 00:36:51,890 --> 00:36:56,280 JavaScript არ არის მხოლოდ კლიენტის მხარის მაგრამ CS50 მიზნებისათვის ეს არის - 408 00:36:56,280 --> 00:36:59,340 ან თუნდაც ამ ვიქტორინაში განზრახვების ეს არის. 409 00:36:59,340 --> 00:37:03,800 PHP მყოფი სერვერის მხარეს. არარის JavaScript. 410 00:37:03,800 --> 00:37:08,700 როდესაც წერთ თქვენს ვებგვერდზე თქვენ წერილობით PHP სერვერზე. 411 00:37:08,700 --> 00:37:11,670 თქვენ არასოდეს არ იქნება წერა JavaScript სერვერზე. 412 00:37:11,670 --> 00:37:17,190 JavaScript მთავრდება მიღების იგზავნება ბრაუზერის სადაც JavaScript კოდი ახორციელებს. 413 00:37:17,190 --> 00:37:22,250 და JavaScript კოდი უნდა იცხოვრონ ბრაუზერის რადგან, წინააღმდეგ შემთხვევაში, როცა მინდა 414 00:37:22,250 --> 00:37:25,830 უბრალოდ ნებისმიერი სახის JavaScript-y რამ, როგორიცაა დაწკაპვით ამ, 415 00:37:25,830 --> 00:37:31,720 მე არ გამოიძახეთ გვერდი. ეს არის მხოლოდ JavaScript ხელახლა გაფორმებით რამ ჩემთვის. 416 00:37:31,720 --> 00:37:36,490 იმ შემთხვევაში, თუ JavaScript ცხოვრობდა სერვერზე, მაშინ მე უნდა აუცილებლად მოითხოვოს რაღაც 417 00:37:36,490 --> 00:37:39,490 სერვერზე, თუ რა უნდა გააკეთოს. 418 00:37:39,490 --> 00:37:45,380 PHP - არ არსებობს ასეთი რამ, როგორც PHP ბრაუზერში. 419 00:37:45,380 --> 00:37:52,090 როდესაც მე მოითხოვოს გვერდი - ასე ვთქვათ, აქ მოვითხოვე ამ კონკრეტულ გვერდზე. 420 00:37:52,090 --> 00:37:57,270 ეს ნიშნავს, რომ ამ აპირებს მოითხოვოს - 421 00:37:57,270 --> 00:38:04,270 refresh - ის აპირებს ამოცნობა ამ გვერდზე - 422 00:38:04,270 --> 00:38:07,210 ასე რომ, ამ მოთხოვნას გადის ჩვენს სერვერზე. 423 00:38:07,210 --> 00:38:13,190 ის ხედავს, რომ მას სჭირდება დაბრუნების ეს კონკრეტული თემა ამ კონკრეტული ID, 424 00:38:13,190 --> 00:38:23,740 ასე რომ, ახლა რომ იქნება გარკვეული PHP რომ PHP ინტერპრეტატორი აპირებს ინტერპრეტაცია, რომ გვერდი 425 00:38:23,740 --> 00:38:28,680 და გარდაქმნას იგი მხოლოდ HTML, CSS, JavaScript, შესაძლოა, რასაც. 426 00:38:28,680 --> 00:38:36,930 ეს არის PHP, რომელიც გადაამუშავებს ამ მოთხოვნას და retrieves ყველა ტექსტი და პერსონალი 427 00:38:36,930 --> 00:38:39,170 რომ მე რეალურად ეძებს მონაცემთა ბაზიდან. 428 00:38:39,170 --> 00:38:44,750 მაგრამ რა ტოვებს სერვერზე არის მხოლოდ HTML / JS / CSS. 429 00:38:44,750 --> 00:38:48,630 არ არსებობს PHP რომელიც ტოვებს სერვერზე რადგან თუ ეს რეალურად გააკეთა 430 00:38:48,630 --> 00:38:53,890 მაშინ ბრაუზერი, რომ არ ვიცი, რა უნდა გააკეთოს, რადგან ეს არ ვიცი, რა PHP არის. 431 00:38:53,890 --> 00:39:00,250 მაგრამ ამავე აზრის რადგან JavaScript არის კლიენტის მხარეს, 432 00:39:00,250 --> 00:39:02,250 თქვენ ვერ შედიხართ MySQL მისგან. 433 00:39:02,250 --> 00:39:07,430 იმიტომ, რომ PHP არის სერვერული თქვენ შედიხართ MySQL მისგან. 434 00:39:07,430 --> 00:39:12,880 >> [სტუდენტი] შეგიძლიათ წავიდეთ მეტი რამდენიმე უსაფრთხოების შეშფოთება cookies in HTTP? 435 00:39:12,880 --> 00:39:18,390 [Rob] მათ არ რამ ჩვენ ვაპირებთ უნდა იცოდეთ. 436 00:39:18,390 --> 00:39:24,500 ზოგიერთი უსაფრთხოების შეშფოთება cookies in HTTP. 437 00:39:24,500 --> 00:39:28,550 დიდი კითხვა აქ ჩვენ ვხედავთ, რომ აქ ჩემი cookie არის PHP / პირადობის მოწმობა. 438 00:39:28,550 --> 00:39:33,560 ასეთი უნივერსალური PHP თქვენი სესია. 439 00:39:33,560 --> 00:39:39,550 თქვენი სესია არის ის, რომ შიგნით PHP არასოდეს უნდა გადამოწმდა 440 00:39:39,550 --> 00:39:45,690 იმიტომ, რომ სერვერზე რომ აქვს სრული კონტროლი სხდომაზე. 441 00:39:45,690 --> 00:39:47,690 თქვენ არ შეგიძლიათ შეეხოთ მას ყველა. 442 00:39:47,690 --> 00:39:53,120 მაგრამ ამ ფუნთუშას - ეს ერთ - 443 00:39:53,120 --> 00:39:57,500 და ვფიქრობ, რომ თქვენ შეიძლება შეხვიდეთ როგორც მე ახლა თუ თქვენ სურდა გამოიყენოთ, რომ - 444 00:39:57,500 --> 00:40:06,610 მაგრამ ის, რომ ფუნთუშა, რომ - აუცილებლად თქვენ ერთი მოთხოვნა სერვერზე. 445 00:40:06,610 --> 00:40:09,890 სერვერზე ბრუნდება გვერდზე. მოთხოვნით კეთდება. 446 00:40:09,890 --> 00:40:12,580 მას აღარ აქვს რაიმე იდეა ვინ ხარ შენ. 447 00:40:12,580 --> 00:40:17,230 ასე რომ, მომდევნო მოთხოვნით თქვენ აპირებს მოიცავს, რომ cookie ისე, რომ იგი დარწმუნებულია, 448 00:40:17,230 --> 00:40:19,810 ეს არის ადამიანი, რომელმაც ეს მოთხოვნა ადრე. 449 00:40:19,810 --> 00:40:23,830 ეს არის სხდომაზე მონაცემები, რომელიც დაკავშირებულია ამ მომხმარებლის. 450 00:40:23,830 --> 00:40:28,210 ამიტომ თქვენ არ უნდა შეხვიდეთ თითოეული გვერდი თქვენ იყენებთ. 451 00:40:28,210 --> 00:40:33,380 უსაფრთხოების საკითხი აქ არის, რომ ფუნთუშა გააძევეს მეტი ინტერნეტში. 452 00:40:33,380 --> 00:40:41,490 ჩვენ გამოყენებით HTTPS აქ, ასე რომ, ამ შემთხვევაში, რაც იმას ნიშნავს, რომ ჩვენ encrypting ამ პერსონალი. 453 00:40:41,490 --> 00:40:49,870 ვინმე ვერ მოდის და მხოლოდ მოიპაროს ჩემი ფუნთუშა და ახლა სერვერზე ვფიქრობ, რომ ისინი ჩემთვის. 454 00:40:49,870 --> 00:40:52,060 მაგრამ სწორი HTTP მათ შეუძლიათ. 455 00:40:52,060 --> 00:40:57,650 ისევე, როგორც ეს WireShark / Firesheep პერსონალი, შეგიძლიათ უბრალოდ, მოუსმინო ყველა wi-fis ჰაერში 456 00:40:57,650 --> 00:41:01,380 და intercept რაც გაგიხარდებათ, ისე, yeah. 457 00:41:01,380 --> 00:41:12,430 >> [სტუდენტი] სახის მსგავსი უსაფრთხოების რისკი შენახვის შესახებ ID მიერ პოსტ 458 00:41:12,430 --> 00:41:16,860 იმიტომ, რომ შეიძლება თავისუფლად edited გამოყენებით კომპიუტერები და რამ. 459 00:41:16,860 --> 00:41:23,410 [Rob] დიახ. არსებობს უამრავი საკითხი, სადაც, მხოლოდ, რომ არაფერი მოდის შესახებ 460 00:41:23,410 --> 00:41:26,940 თქვენ უნდა შეამოწმოს. 461 00:41:26,940 --> 00:41:37,650 არსებობს უამრავი შემთხვევა, როდესაც ეს იქნება სასარგებლო, როგორიც მე უნდა გააკეთოს ჩანაწერი. 462 00:41:37,650 --> 00:41:39,650 Blah, blah, blah, blah, blah. მერე მოხვდა პასუხი. 463 00:41:39,650 --> 00:41:44,540 ეს იქნება ძალიან სასარგებლო, თუ ჩანაწერებში მოთხოვნა შედის my ID იმიტომ, 464 00:41:44,540 --> 00:41:48,610  მინდა გაერთიანდნენ ამ პოსტის ჩემთან ერთად. 465 00:41:48,610 --> 00:41:54,820 მაგრამ მე ვერ გავაკეთოთ, რომ რადგან მე ვარ თავისუფალი, რათა ჩანაწერის მოთხოვნა - ისევე, როგორც ხელით 466 00:41:54,820 --> 00:41:57,820 ამუშავება საკუთარი ჩანაწერის მოთხოვნა - 467 00:41:57,820 --> 00:42:00,960 რომელიც იყენებს თქვენი მომხმარებლის ID და ახლა ეს პოსტი, როგორც თქვენ. 468 00:42:00,960 --> 00:42:07,440 სწორედ ამიტომ, სერვერული მე ვერ დაეყრდნონ ჩანაწერის მოთხოვნების შემცველი სწორი შესახებ ID. 469 00:42:07,440 --> 00:42:09,720 სწორედ ამიტომ, მას ეკუთვნის, ჩემი სხდომაზე. 470 00:42:09,720 --> 00:42:15,140 ასე რომ, მე ეძებოთ თქვენი მომხმარებლის ID ჩემს სხდომაზე მასივი მე და ჩადეთ, რომ ჩემს მონაცემთა ბაზაში 471 00:42:15,140 --> 00:42:17,580 როგორც მომხმარებელს, რომელიც რეალურად ამ პოსტის. 472 00:42:17,580 --> 00:42:19,580 [სტუდენტი] და რომ ეფუძნება თქვენი ფუნთუშას? 473 00:42:19,580 --> 00:42:24,690 [Rob] Yeah. იგი იყენებს ბმულების ემთხვევა up თქვენ, როგორც მომხმარებელს, რომელიც გააკეთა, რომ მოთხოვნა. 474 00:42:24,690 --> 00:42:30,570 იგი გაიყვანს მომხმარებლის ID, რომ სხდომაზე და რომ მაშინ ჩანართები მონაცემთა ბაზაში 475 00:42:30,570 --> 00:42:32,960 გამოყენებით ამ მომხმარებლის ID. 476 00:42:32,960 --> 00:42:40,330 ეს like button - რა, რომ ის რეალურად აკეთებს არის - 477 00:42:40,330 --> 00:42:43,810 მე არ ვაპირებ, რათა იპოვოს აქ. ეს იქნება Ajax ფუნქცია 478 00:42:43,810 --> 00:42:46,780 რა არის Ajax ფუნქცია? 479 00:42:46,780 --> 00:42:55,500 ნება მომეცით, გაირკვეს, თუ რა ჩემი სკრიპტი არის. 480 00:42:55,500 --> 00:42:59,710 ეს იყო CS50 პროექტი ცოტა ხნის წინ. 481 00:42:59,710 --> 00:43:02,880 მე არ მახსოვს რა არის. 482 00:43:02,880 --> 00:43:12,530 Ajax ფუნქცია - ყველა Ajax ფუნქცია აკეთებს მიღების Ajax თხოვნით გვერდი, რომელზეც ეს ID - 483 00:43:12,530 --> 00:43:15,810 ერთად ID 22453. 484 00:43:15,810 --> 00:43:20,180 ეს არ არის თუნდაც ჩანაწერის მოთხოვნა. ის მისაღებად მოთხოვნა რაც კიდევ უფრო ადვილია. 485 00:43:20,180 --> 00:43:27,860 იმ შემთხვევაში, თუ ვიცოდი, რა URL არის - ის რაღაც მოსწონს ეს / ID = 22453 - 486 00:43:27,860 --> 00:43:33,290 ან? ID = 22453 - 487 00:43:33,290 --> 00:43:40,290 ასე გამოჩენის ამ URL მინდა რომ. 488 00:43:40,290 --> 00:43:44,600 რომელიც არ იქნება, როგორც დიდი პრობლემა, მაგრამ ეს წარმოუდგენლად მარტივი დაწერა loop 489 00:43:44,600 --> 00:43:48,500 რომელიც მხოლოდ ეწვევიან ამ URL უსასრულოდ, რის გამოც ხედავთ 490 00:43:48,500 --> 00:43:51,180 Isawyouharvard დატოვოთ ათასობით რამ. 491 00:43:51,180 --> 00:43:56,960 და ისინი, როგორც წესი, CS50 დაფუძნებული Isawyouharvard შეტყობინება. 492 00:43:56,960 --> 00:44:01,200 როგორ მოვძებნო ყველაზე მომეწონა? 493 00:44:01,200 --> 00:44:03,720 ისინი უნდა წაიშალოს საკმაოდ სწრაფად, ძალიან. 494 00:44:03,720 --> 00:44:06,490 ეს არ არის ყველაზე მომეწონა. იქ ჩვენ წავიდეთ. 495 00:44:06,490 --> 00:44:13,400 Cheaters ყველაზე მოეწონა გვერდი - რომ საკმაოდ აქტუალურია ამ წუთას. 496 00:44:13,400 --> 00:44:21,230 Oh wow. ისინი უკვე წაშლილია ნებისმიერი, ვინც ამ წელს, რომელიც უკვე 497 00:44:21,230 --> 00:44:25,590 მოტყუებული. იმ ყველანი წაშლილია. 498 00:44:25,590 --> 00:44:28,680 არასდროს არ იქნება პოსტი, რომელიც იღებს ამ მაღალი. 499 00:44:28,680 --> 00:44:32,860 ეს ერთი აშკარად მოტყუებული მისაღებად ყველაზე მოეწონა გვერდზე. 500 00:44:36,570 --> 00:44:39,310 >> მეტი შეკითხვები? 501 00:44:39,310 --> 00:44:46,050 [სტუდენტური] რა უნდა იცოდეთ შესახებ XHTML? 502 00:44:46,050 --> 00:44:49,710 [Rob] პრაქტიკულად არაფერი. Just, რა არის. 503 00:44:49,710 --> 00:44:59,220 სხვაობა და HTML იმისა, რომ XML ძალიან ჰგავს გარეგნულად 504 00:44:59,220 --> 00:45:09,080 to HTML გარდა HTML ჩვენ უბრალოდ უნდა ჰქონდეს განსაზღვრული კომპლექტი tags. 505 00:45:09,080 --> 00:45:15,380 მაგრამ XML - XML, ისევე, როგორც ზოგადად ფორმატში სადაც შეგიძლიათ XML დოკუმენტს 506 00:45:15,380 --> 00:45:17,580 სხვადსხვა მიზნებისათვის გსურთ. 507 00:45:17,580 --> 00:45:25,950 ასე, მაგალითად, თუ მინდოდა, მე ვერ ააშენებს XML for კურსები - 508 00:45:25,950 --> 00:45:28,860 და მე რეალურად ვფიქრობ, რომ CS50 აქვს API ამ. 509 00:45:28,860 --> 00:45:31,590 ჩემი XML დოკუმენტი შეიძლება გამოიყურებოდეს ასე - 510 00:45:31,590 --> 00:45:39,330 კურსები და რა თქმა უნდა, საჭიროა გარკვეული ბოლოს კურსები. 511 00:45:39,330 --> 00:45:48,920 მე ვერ აქვს რა თქმა უნდა და მას შეეძლო სახელწოდება შეადგენს CS50. 512 00:45:48,920 --> 00:45:58,080 და შემდეგ ჩემი ბოლოს რა თქმა უნდა, და მე ვერ დააყენა შიგნით აქ სტუდენტები, 513 00:45:58,080 --> 00:46:07,010 და შემდეგ შიგნით სტუდენტები მაქვს სიაში ერთი სტუდენტი რომლის სახელიც არის რასაც. 514 00:46:07,010 --> 00:46:10,180 მე დასრულდება, რომ სტუდენტი და ასე შემდეგ. 515 00:46:10,180 --> 00:46:16,070 მე უბრალოდ არ უნდა აშენდა რამდენიმე თვითნებური XML დოკუმენტი, მაგრამ იგი მოქმედებს XML. 516 00:46:16,070 --> 00:46:23,700 XML - ყველა ეს არის ამ სახის სტრუქტურა და ლამაზი რამ - იმ მიზეზით, რომ ჩვენ კი ეძახით XML 517 00:46:23,700 --> 00:46:26,820 ის არის, რომ ამ სახის რამ არის ძალიან ადვილი გარჩევის. 518 00:46:26,820 --> 00:46:32,580 ძალიან ადვილია მიიღოს ეს დოკუმენტი და მიიღოს მასივი გარეთ. 519 00:46:32,580 --> 00:46:39,370 და ასე XHTML არის მცდელობა მისაღებად HTML მოქმედებს XML. 520 00:46:39,370 --> 00:46:42,580 უკვე ამ გამოიყურება საკმაოდ მსგავსია HTML. 521 00:46:42,580 --> 00:46:52,160 ზოგიერთი განსხვავებები HTML შეგიძლიათ გააკეთოთ რამ, როგორიცაა input იქნებ ტიპის შეადგენს ტექსტი 522 00:46:52,160 --> 00:46:55,550 რომელიც არის default, ასე რომ მე არ უნდა ვთქვა, რომ. 523 00:46:55,550 --> 00:47:00,010 გამორთულია. 524 00:47:00,010 --> 00:47:05,160 >> არსებობს 2 რამ აქ, რომ ეს არასწორია XHTML. 525 00:47:05,160 --> 00:47:08,750 პირველი ის არის, რომ ყველა XML tags უნდა სასრული ტეგი. 526 00:47:08,750 --> 00:47:13,040 ასე რომ, იმ შემთხვევაში, თუ შეყვანის მე უნდა გავაკეთოთ - რაც მიმართულებით slash არის ეს? 527 00:47:13,040 --> 00:47:15,060 ამ მიმართულებით? რომ გამოიყურება არასწორია. 528 00:47:15,060 --> 00:47:19,380 სხვა მიმართულებით. 529 00:47:19,380 --> 00:47:21,960 თვითმმართველობის დახურვის tag. 530 00:47:21,960 --> 00:47:29,560 მეორე ის არის, რომ XML თქვენ უნდა ამ სახის მოსწონს გასაღები ღირებულება წყვილი. 531 00:47:29,560 --> 00:47:32,130 მას სჭირდება ღირებულება ასოცირდება იგი. 532 00:47:32,130 --> 00:47:35,050 ასე რომ, მიუხედავად იმისა, რომ შეზღუდული შესაძლებლობების მქონე და თავისთავად გამოხატავს რა მინდა - 533 00:47:35,050 --> 00:47:37,110 ამ input უნდა გამორთულია - 534 00:47:37,110 --> 00:47:39,110 რომ ის არასწორია XHTML. 535 00:47:39,110 --> 00:47:47,110 ის, რაც მე რეალურად უნდა დაწეროთ გამორთულია შეადგენს გამორთულია. 536 00:47:47,110 --> 00:47:49,620 ახლა კი ძალაშია XHTML. 537 00:47:49,620 --> 00:47:54,850 და ეს მხოლოდ ამ უმნიშვნელო განსხვავებები, რომ გარდაქმნის HTML to XML დაფუძნებული სახის რამ. 538 00:47:54,850 --> 00:48:04,880 >> [სტუდენტი] XML დაახლოებით ისევე, როგორც Pull მეშვეობით თქვენი საკუთარი X საერთოდ, როგორიცაა რატომ არის ის (არ ისმის) 539 00:48:04,880 --> 00:48:19,450 [Rob] რამ, როგორიცაა CSV - CSV თქვენ გაქვთ მხოლოდ ფასეულობები ერთმანეთისგან - 540 00:48:19,450 --> 00:48:23,550 უბრალოდ ვფიქრობ ცხრილების. CSV ძირითადად ცხრილების. 541 00:48:23,550 --> 00:48:26,720 თქვენ შესაძლოა, სვეტები და თქვენ გაქვთ bunch of რიგები, რომ 542 00:48:26,720 --> 00:48:29,600 ასოცირებული მონაცემები იმ სვეტების, მაგრამ ეს არის ის. 543 00:48:29,600 --> 00:48:38,310 XML ბევრად უფრო მრავალმხრივი, რომ თქვენ - თქვენ გაქვთ თვითნებური იერარქიაში მონაცემები. 544 00:48:38,310 --> 00:48:43,200 მე შეიძლება მქონდეს კურსები რომ მქონდეს სტუდენტებისთვის ფარგლებში 545 00:48:43,200 --> 00:48:45,460 სადაც ეს იქნება რთული ვიფიქროთ, ცხრილების, რომ - 546 00:48:45,460 --> 00:48:51,010 უბრალოდ, ერთი ცხრილების - CSV განსაკუთრებით ჰგავს მხოლოდ ერთი ცხრილების - 547 00:48:51,010 --> 00:48:58,760 ისე, რომ ერთი ცხრილების მქონე ყველა CS50, 51, და 61 და შიგნით იმ ყველა 548 00:48:58,760 --> 00:49:03,230 სტუდენტები, რომლებიც დაკავშირებულია იმ დროს, იქნებ შეხვედრის დროს და ყველა რომ სახის რამ. 549 00:49:03,230 --> 00:49:09,140 მეორე ის არის, რომ tag სახელები მისცეს ლამაზი სახელი ყველა ელემენტები 550 00:49:09,140 --> 00:49:13,140 ასე კითხულობს CSV ფაილი შეიძლება იყოს რთული ცდილობენ და გარჩევის რასაც ის რეალურად ხედავს. 551 00:49:13,140 --> 00:49:20,130 XML გაცილებით მეტი ადამიანის იკითხება ისე, რომ ის, თუ რატომ მოსწონს - ამუშავება ზოგიერთი პირი, რომელიც არ 552 00:49:20,130 --> 00:49:26,380 ნამდვილად ვიცი, რა CSV ფაილი ან მინდა არ პროგრამისტი ან რაღაც - 553 00:49:26,380 --> 00:49:30,640 თქვენ შეგიძლიათ მისცეს მათ მსგავსად თარგი XML ფაილი და მათ შეუძლიათ დაიცვას ხაზები და - 554 00:49:30,640 --> 00:49:33,590 oh, მე უნდა ჩაწეროთ ჩემი სახელი აქ. 555 00:49:33,590 --> 00:49:37,440 ეს ბევრად უფრო გამოსადეგი ფორმატში. 556 00:49:37,440 --> 00:49:42,440 CSV უამრავი მიზნებისათვის, მაგრამ XML აქვს სხვადასხვა მიზნებისათვის. 557 00:49:46,050 --> 00:49:49,680 >> მეტი შეკითხვები? 558 00:49:49,680 --> 00:49:51,900 გაქვთ სხვა კითხვები? 559 00:49:56,410 --> 00:50:00,520 [სტუდენტური] წინა ვიქტორინა - ვერტიკალური სკალირების წინააღმდეგ ჰორიზონტალური სკალირების. 560 00:50:00,520 --> 00:50:04,660 [Rob] თქვენ არ უნდა იცოდეთ, რომ. მე არ ვფიქრობ, ჩვენ კი განიხილა, რომ. 561 00:50:04,660 --> 00:50:07,340 მე გამოცნობა ეს იყო მხოლოდ ერთჯერადი კომენტარი. 562 00:50:07,340 --> 00:50:12,660 Oh. ჰორიზონტალური წინააღმდეგ ვერტიკალური სკალირების არ არის რაღაც თქვენ უნდა იცოდეთ. 563 00:50:12,660 --> 00:50:18,570 მე ვფიქრობ, რომ განსხვავება არის, ისევე, როგორც - მე კარგად, პასუხი გასაღები იტყვის განსხვავება. 564 00:50:18,570 --> 00:50:26,030 ვერტიკალური სკალირების არის, ისევე, oh, ჩემი კომპიუტერის აკეთებს ცუდად. მე კიდევ უკეთესი ერთი. 565 00:50:26,030 --> 00:50:29,150 ვინაიდან ჰორიზონტალური სკალირების არის oh, ჩემს კომპიუტერში აკეთებს ცუდად - 566 00:50:29,150 --> 00:50:33,360 ნება მომეცით კიდევ 20 მათ ყველა მუშაობას იგივე ამოცანა. 567 00:50:40,300 --> 00:50:45,520 >> [სტუდენტი] შეგვიძლია წავიდეთ მეტი უკავშირდება სიაში გზა მიღების რიგები. >> [Rob] რა თქმა უნდა. 568 00:50:45,520 --> 00:50:50,000 ეს ადვილია, ვიდრე მასივი გზა. 569 00:50:50,000 --> 00:50:53,140 უკავშირდება სიაში გზა მიღების რიგები. 570 00:50:53,140 --> 00:50:58,350 პირველ რიგში, რა ჩვენი struct განთავსების უკავშირდება სიაში გამოიყურებოდეს? 571 00:50:58,350 --> 00:51:17,060 [სტუდენტური] ვაკეთებთ ეს - >> [Rob] მოდით მისი - yeah. 572 00:51:17,060 --> 00:51:30,000 Int val, შემდეგ struct კვანძის * შემდეგი; 573 00:51:30,000 --> 00:51:34,560 ასე რომ, ის, რაც ჩვენ ვიყენებთ მაგალითად აქ. 574 00:51:34,560 --> 00:51:37,660 მოდით რეალურად აკრიფოთ up ამ პერსონალი. 575 00:51:40,030 --> 00:51:49,600 მოდით linked_list. 576 00:51:51,750 --> 00:51:53,750 ჩვენი struct - 577 00:52:05,360 --> 00:52:13,060 Okay. ახლა ეძებს ჩვენი მდგომ გვაქვს - 578 00:52:13,060 --> 00:52:16,090 მოდით უბრალოდ მიიღოს გლობალური რიგიდან. 579 00:52:16,090 --> 00:52:23,130 ეს იქნება კვანძის * მდგომ და ჩვენ გვაქვს dequeue ფუნქცია. 580 00:52:23,130 --> 00:52:28,330 ვფიქრობ, ეს ყველაფერი შეიძლება ასევე გადატრიალება ჭეშმარიტი ან მცდარი - მოდით გავაკეთოთ, რომ. 581 00:52:28,330 --> 00:52:38,690 Bool dequeue - და ჩვენ dequeueing - oh. Hmm. 582 00:52:38,690 --> 00:52:45,200 Int dequeue - რა გავაკეთოთ ადრე? 583 00:52:45,200 --> 00:52:54,340 Int dequeue და ჩვენ bool enqueue და ჩვენ უნდა enqueue რაღაც საშუალებით ჭეშმარიტი. 584 00:52:54,340 --> 00:53:01,360 მოდით enqueue პირველი. 585 00:53:01,360 --> 00:53:06,520 ჩვენ გვაქვს ჩვენი რიგიდან. გვინდა ჩადეთ რაღაც რიგიდან. 586 00:53:06,520 --> 00:53:12,720 რა არის საუკეთესო გზა ამის გაკეთება? 587 00:53:12,720 --> 00:53:20,270 აქ ჩვენი მდგომ გაკეთებული ჰგავს ჩვენ გვაქვს გლობალური მაჩვენებელი უნდა დაიწყოს. 588 00:53:20,270 --> 00:53:24,910 იქ ჩვენი რიგიდან. 589 00:53:24,910 --> 00:53:30,350 ვთქვათ, რომ ჩვენ dequeue აღების პირველ ელემენტს, 590 00:53:30,350 --> 00:53:36,570 სადაც მივდივართ გვინდა ჩადეთ ჩვენი კვანძის ისე, რომ რიგები მუშაობა, რადგან ისინი უნდა? 591 00:53:36,570 --> 00:53:43,440 [სტუდენტური] At ბოლომდე. >> [Rob] Yeah. რიგები უნდა იყოს პირველი, პირველი გარეთ. 592 00:53:43,440 --> 00:53:48,030 რაც იმას ნიშნავს, რომ ახალი ელემენტი უნდა იყოს ჩასმული აქ. Okay. 593 00:53:48,030 --> 00:53:53,220 >> დაბრუნებას კოდი 594 00:53:53,220 --> 00:53:59,760 ეს ნიშნავს, რომ ჩვენ გვინდა, რომ loop მეტი ჩვენი რიგიდან. 595 00:53:59,760 --> 00:54:10,210 მოდით კვანძის * მიმდინარე = რიგში, ხოლო მიმდინარე არ თანაბარი NULL. 596 00:54:10,210 --> 00:54:16,960 მინდა - ყველა უფლება, მოდით ეს ცალკე. 597 00:54:16,960 --> 00:54:20,460 პირველი, მიმდინარე = რიგიდან. 598 00:54:20,460 --> 00:54:24,660 რა ვქნათ, თუ მიმდინარე იწყება off როგორც NULL? 599 00:54:24,660 --> 00:54:28,410 ჩვენ ყველაფერს გავაკეთებთ ამ 2 გზა. პირველი ამ გზით. 600 00:54:28,410 --> 00:54:31,450 რა ვქნათ, თუ მიმდინარე NULL? 601 00:54:31,450 --> 00:54:34,850 ეს არის ეკვივალენტი თუ მდგომ არის NULL? 602 00:54:38,550 --> 00:54:43,960 [სტუდენტური] ეს დაბრუნებას აპირებს ყალბი. >> [Rob] უნდა დაბრუნდეს ყალბი? 603 00:54:43,960 --> 00:54:47,120 რა არის ცუდი ჩასმა რაღაც შევიდა ცარიელი სიაში? 604 00:54:47,120 --> 00:54:49,080 [სტუდენტური] არაფერი არ არის ცუდი. უკაცრავად. 605 00:54:49,080 --> 00:54:55,980 [Rob] Yeah. ასე რომ, აქ ერთადერთი განსხვავება არის ჩემი გლობალური მდგომ იგზავნება ჩემს ახალ კვანძში. 606 00:54:57,840 --> 00:55:02,880 და მერე უნდა გავაკეთოთ ჩემი ამოწმებს, თუ მდგომ არის NULL. 607 00:55:02,880 --> 00:55:05,960 დაბრუნების ცრუ. 608 00:55:05,960 --> 00:55:20,910 და შემდეგ მდგომ val შეადგენს i; მდგომ შემდეგი უდრის NULL; TRUE. 609 00:55:20,910 --> 00:55:25,890 Okay. მე ვაპირებ ხტომა თოფი უფლება აქ. 610 00:55:25,890 --> 00:55:29,570 მახსოვს რა გავაკეთეთ, რომ ბოლო დროს, 611 00:55:29,570 --> 00:55:35,660 სადაც ჩვენ თქმით, ეს ბევრად უფრო ადვილია მუშაობა კვანძის ** ამ სახის რამ. 612 00:55:35,660 --> 00:55:43,880 ახლა აქტუალური იქნება და მდგომ, და მოდის ქვემოთ აქ - 613 00:55:43,880 --> 00:55:53,010 ხოლო მიმდინარე - ხოლო * მიმდინარე არ თანაბარი NULL - 614 00:55:53,010 --> 00:55:58,230 ნება მომეცით უბრალოდ მიმდინარე - we'll საუბარი ამ მეორე. 615 00:55:58,230 --> 00:56:00,860 აქტუალური მომავალი. Okay. 616 00:56:00,860 --> 00:56:12,910 ეძებს მას ამ გზით, ეს iterating მეტი ყველა ჩემი პოინტერები სანამ მიაღწევს null მაჩვენებელი. 617 00:56:12,910 --> 00:56:17,710 Null მაჩვენებელი იქნება მომცეთ მინდა შეცვალოს ჩემი ახალი კვანძში. 618 00:56:17,710 --> 00:56:21,910 ეძებს iPad ვერსია - 619 00:56:21,910 --> 00:56:27,800 თუ ჩემი ორიგინალური მაჩვენებელი და უკავშირდება სია ცარიელია შემდეგ მიმდინარე აპირებს აღვნიშნო აქ. 620 00:56:27,800 --> 00:56:29,630 ეს აპირებს აღვნიშნო, null, 621 00:56:29,630 --> 00:56:34,440 ასე რომ ეს არის მაჩვენებელი მე დასრულდება მდე მოძრავი აღვნიშნო, რომ ზოგიერთი სხვა ახალი კვანძში. 622 00:56:34,440 --> 00:56:38,150 ხოლო თუ მაგალითი ამ შემთხვევაში აქ 623 00:56:38,150 --> 00:56:42,720 შემდეგ მიმდინარე აპირებს traverse აქ - მე არევა ოდნავ. 624 00:56:42,720 --> 00:56:50,700 სადაც მიმდინარე უნდა იყოს მისამართი მიმდინარე მომავალი. 625 00:56:50,700 --> 00:57:00,200 ის არის, რომ რაც მე მინდა? აქტუალური ასე * მიმდინარე მაძლევს კვანძში. 626 00:57:00,200 --> 00:57:04,440 შემდეგი traverses მომდევნო ერთი. 627 00:57:04,440 --> 00:57:10,700 მე გაკეთებული მიუთითებს აქ. 628 00:57:10,700 --> 00:57:13,720 მოდით წითელი - ამიტომ მე არ მიუთითებს აქ. 629 00:57:13,720 --> 00:57:19,710 მაშინ * მიმდინარე აპირებს მითითებას ამ კვანძში. 630 00:57:19,710 --> 00:57:25,080 და * მიმდინარე მომავალი მითითება ამ კვანძის, მაგრამ ეს არ არის ის რაც მე მინდა. 631 00:57:25,080 --> 00:57:27,700 მინდა ამ მომცეთ რომ კვანძის. 632 00:57:27,700 --> 00:57:40,530 ასე რომ მომცეთ ამ კვანძის არის ampersand (* მიმდინარე) შემდეგ. 633 00:57:47,660 --> 00:57:54,360 >> ამ მომენტში მე ოფიციალურად მიაღწია კვანძის რომ მინდა შეცვლის. 634 00:57:54,360 --> 00:58:13,770 მოდით შეცვლის ყველა ამ რიგები მიმდინარე - და ახლა ჩვენ გავაკეთეთ. 635 00:58:13,770 --> 00:58:21,760 შეიძლება იყოს typos, მაგრამ იდეა არის ის, რომ ჩადეთ ამ სახის გზა 636 00:58:21,760 --> 00:58:28,130 ეს არის ადვილი მუშაობა მითითებას, რომ ჩვენ გვინდა, რომ შეიცვალოს 637 00:58:28,130 --> 00:58:32,780 ნაცვლად სჭირდება ტრეკზე - okay, ჩემი დაწყების NULL? 638 00:58:32,780 --> 00:58:36,430 Oh არის ეს? მაშინ მე უნდა შევქმნათ დაწყების კვანძის უნდა იყოს რაღაც კონკრეტული 639 00:58:36,430 --> 00:58:40,310 სხვაგან მე მინდა iterate სანამ მეორე, რაც მე აღვნიშნო, რომ არის NULL, 640 00:58:40,310 --> 00:58:46,740 და მაშინ მე ნაცვლად, რომ - რა მომავალი რამ არის - ჩემი malloc კვანძის. 641 00:58:46,740 --> 00:58:50,740 იმის ნაცვლად, რომ სჭირდება გამოყოფა იმ შემთხვევაში, მე აქ მხოლოდ გაუმკლავდეთ შემთხვევაში 642 00:58:50,740 --> 00:58:54,990 რა არის მაჩვენებელი, რომ არის NULL, რომ მე აღარ მინდა, რომ იყოს NULL, 643 00:58:54,990 --> 00:59:01,820 და რომ ხდის ცხოვრება ადვილი გარდა ეს უნდა იყოს * მიმდინარე ახლა, რადგან - 644 00:59:01,820 --> 00:59:05,460 [სტუდენტური] ისინი კვლავ ზომის კვანძის? 645 00:59:05,460 --> 00:59:10,480 [Rob] დიახ. მე მაინც mallocing კვანძში. 646 00:59:10,480 --> 00:59:12,980 [სტუდენტური] არის თუ არა იქნება ზომის კვანძის *? 647 00:59:12,980 --> 00:59:20,990 [Rob] დაბრუნებას აქ, ვფიქრობ, რომ იმ შემთხვევაში, თუ ეს არის ჩვენი დაკავშირებული სიაში. 648 00:59:28,330 --> 00:59:33,190 ამ ბიჭს მიუთითებს off to null. 649 00:59:33,190 --> 00:59:36,950 ამის შემდეგ რატომ loop, მიმდინარე ქულა აქ 650 00:59:36,950 --> 00:59:41,510 რადგან ეს არის მაჩვენებელი, რომ არის NULL. 651 00:59:41,510 --> 00:59:50,380 ახლა მინდა, რომ შეიცვალოს ეს მომცეთ აღვნიშნო, რომ ახალი კვანძში. 652 00:59:50,380 --> 00:59:58,390 პირველი მე malloc, რომ ახალი კვანძის - ასე malloc ზომა კვანძში. 653 00:59:58,390 --> 01:00:11,070 და რომ ბრუნდება კვანძის * და ახლა შეცვლის ეს მაჩვენებელი მშენებლობის * მიმდინარე შეადგენს 654 01:00:11,070 --> 01:00:15,780 ამ ახალი კვანძის, რომ მე გამოყოფილი. 655 01:00:15,780 --> 01:00:26,490 ასე რომ, თუ მიმდინარე კვანძის **, მაშინ * მიმდინარე იქნება კვანძის * 656 01:00:26,490 --> 01:00:32,540 და თუ მე mallocing რაღაც ზომის კვანძის მაშინ ეს დაბრუნების მომცეთ კვანძის 657 01:00:32,540 --> 01:00:39,630 ასე რომ ეს არის კვანძის * - ასე ორივე მხარეს სწორად აქვს იგივე ტიპის. 658 01:00:39,630 --> 01:00:46,610 და თუ რა მე უბრალოდ გამოყოფილი იყო NULL, დაბრუნების ცრუ; 659 01:00:46,610 --> 01:00:54,750 სხვა დასრულება მიიღწევა მათ, რაც მე მინდა, რომ იყოს - გარდა ამ უნდა ფრჩხილებში 660 01:00:54,750 --> 01:00:57,730 იმიტომ, რომ ის არ არის, თუ როგორ, რათა რამ მუშაობა. 661 01:00:57,730 --> 01:00:59,690 გარეშე ფრჩხილებში რომ იყო გაგებული, როგორც 662 01:00:59,690 --> 01:01:03,010 მიმდინარე arrow-val dereference რომ. 663 01:01:03,010 --> 01:01:07,010 იმის ნაცვლად, რომ მინდა dereference მიმდინარე რომელიც მოაქვს ჩემთვის კვანძში. 664 01:01:07,010 --> 01:01:10,620 მერე გვინდა ღირებულება ასოცირდება, რომ კვანძის. 665 01:01:10,620 --> 01:01:17,670 >> [სტუდენტი] მეგონა ისრებით საშუალებას გაძლევთ გვერდის ავლით, რომ და წავიდეთ პირდაპირ ღირებულება. 666 01:01:17,670 --> 01:01:22,640 [Rob] ისინი. ეს არის ის, რომ, თუ მაქვს - ვთქვათ მდგომ არის მაგალითი. 667 01:01:22,640 --> 01:01:28,400 მე უფლება არ მდგომ-arrow-val შეადგენს i რადგან მდგომ კვანძის *. 668 01:01:28,400 --> 01:01:39,160 თუ არ იყო ლამაზი სინტაქსი მოსწონს მიმდინარე აღარ arrow-val ან რამე 669 01:01:39,160 --> 01:01:42,540 რომელმაც 2 dereferences, მაშინ ეს იმუშავებს კარგად. 670 01:01:42,540 --> 01:01:44,790 [სტუდენტური] ასე ისარი არის მხოლოდ 1 dereference. >> [Rob] Yeah. 671 01:01:44,790 --> 01:01:53,590 გარდა ამისა, მე ვერ წერენ ეს (** current.val). 672 01:01:53,590 --> 01:02:02,490 ისევე, როგორც მე შეიძლება ასევე წერენ მდგომ როგორც (* მდგომ). Val. 673 01:02:04,430 --> 01:02:09,250 მოდით ჩადეთ. ისე, რომ რიგში ვფიქრობ. 674 01:02:09,250 --> 01:02:12,030 Dequeue იქნება მნიშვნელოვნად მოკლეა. 675 01:02:12,030 --> 01:02:18,280 მოდით დააყენა ბათილად აქ სისუფთავის. 676 01:02:18,280 --> 01:02:22,820 ასე რომ, dequeue. რა ელემენტს მე dequeueing? 677 01:02:22,820 --> 01:02:24,820 [სტუდენტური] პირველი? >> [Rob] Yeah. 678 01:02:24,820 --> 01:02:32,880 თუ ჩემი პირველი NULL - დაბრუნების - არ ვიცი, რა გვინდა დაბრუნდეს - INT_MAX; 679 01:02:32,880 --> 01:02:37,580 და მაშინ უნდა გავაკეთოთ შეამოწმეთ თუ INT_MAX დააბრუნეს. 680 01:02:37,580 --> 01:02:44,090 სწორედ ასეთი რამ რომ მიიღოთ inc ამჯამად სხვაგან ჩვენ გვინდა - 681 01:02:44,090 --> 01:02:54,610 შეგვიძლია უბრალოდ დააბრუნოს მდგომ val? ის არის, რომ ის, რაც ჩვენ გვინდა, რომ გავაკეთოთ? 682 01:02:54,610 --> 01:02:58,010 Dequeue ასევე მინიშნებით შლის ნივთის მდგომ, 683 01:02:58,010 --> 01:03:10,840 მოდით პირველ ამბობენ - მოდით მისაღებად tmp აღვნიშნო, რომ პირველი კვანძის ჩვენი რიგიდან. 684 01:03:10,840 --> 01:03:15,510 ახლა ჩვენ გვინდა განვავითაროთ მდგომ წერტილი მომდევნო რამ რიგიდან. 685 01:03:15,510 --> 01:03:21,450 ახლა ჩვენ გვაქვს tmp მარცხენა. Tmp val არის, რაც ჩვენ გვინდა, რომ დაბრუნდება. 686 01:03:21,450 --> 01:03:24,180 ასე რომ, val = tmp> val; 687 01:03:24,180 --> 01:03:31,190 მაგრამ სანამ დავბრუნდებით, ჩვენ უნდა გავათავისუფლოთ tmp და დაბრუნების val. 688 01:03:31,190 --> 01:03:36,350 ბრძანებით ოპერაციების აქ მნიშვნელოვანია, რომ ჩვენ უნდა დაიბრუნოს tmp 689 01:03:36,350 --> 01:03:40,520 სანამ ჩვენ გადასვლა მდგომ მომდევნო ელემენტს. 690 01:03:40,520 --> 01:03:44,860 ჩვენ უნდა ღირებულება სანამ ჩვენ გასათავისუფლებლად tmp, 691 01:03:44,860 --> 01:03:48,710 და მაშინ ჩვენ შეგვიძლია დაბრუნების val. 692 01:03:48,710 --> 01:03:50,680 >> [სტუდენტი] უნდა შექმნას რიგში მდგომ შემდეგ? 693 01:03:50,680 --> 01:03:57,800 [Rob] დიახ. რომელიც შექმნაში ცუდი loop / რომ ეს არ იმუშავებს შემდეგ ათავისუფლებს მაინც. 694 01:03:57,800 --> 01:03:59,900 Queue = მდგომ> მომავალი. 695 01:03:59,900 --> 01:04:03,230 ჩვენ გვინდა, რომ წინასწარ მდგომ შევიდა მომდევნო ელემენტს არ წინსვლის მომდევნო ელემენტს 696 01:04:03,230 --> 01:04:08,170 რა ელემენტს ამჟამად. 697 01:04:08,170 --> 01:04:17,660 Stacks იქნება მნიშვნელოვნად - როგორც კი ადვილია, რომ dequeue არის ზუსტად იგივე 698 01:04:17,660 --> 01:04:20,190 რადგან ჩვენ უბიძგებენ off წინაშე დასტის. 699 01:04:20,190 --> 01:04:24,030 ბოლოს მდგომ იქნება ძალიან ჰგავს, სადაც ჩვენ უბრალოდ გვინდა გამოყოფს კვანძის 700 01:04:24,030 --> 01:04:27,670 და ჩადეთ შევიდა წინაშე დასტის, ასე რომ, ჩვენ კი არ უნდა loop მეტი არაფერი. 701 01:04:27,670 --> 01:04:31,420 ჩვენ უბრალოდ ჩადეთ პირდაპირ ფრონტზე. 702 01:04:42,500 --> 01:04:44,640 ყველას კარგი რომ? 703 01:04:44,640 --> 01:04:49,760 >> Okay. მეტი შეკითხვები? 704 01:04:49,760 --> 01:04:56,570 [სტუდენტური] რა მნიშვნელოვანი რამ უნდა გვახსოვდეს უახლესი ლექცია? 705 01:04:56,570 --> 01:04:58,730 [Rob] უახლესი ლექცია. 706 01:04:58,730 --> 01:05:01,620 თქვენ არ უნდა იცოდეთ ნებისმიერი კოდი. 707 01:05:01,620 --> 01:05:07,590 თქვენ უნდა იცოდეს, ყოვლისმომცველი იდეები. 708 01:05:07,590 --> 01:05:11,650 Nate ნახევარ არ აქვს არც ერთი კოდი და ისე იმ სლაიდები ონლაინ. 709 01:05:11,650 --> 01:05:15,220 ისინი, ისევე, როგორც შევხედოთ მათ და მათ აქვთ ძირითადი იდეები. 710 01:05:15,220 --> 01:05:28,630 ჩემი ნახევარი - იცის იდეის პირველი ვერ ენდობა არაფერი. 711 01:05:28,630 --> 01:05:38,070 ის ფაქტი, რომ, როგორიც, შესაძლოა, პროცესი შემდგენელი შეიძლება იყოს ცუდი, 712 01:05:38,070 --> 01:05:40,870 მაგრამ ეს იმას კი არ აქვს მნიშვნელობა, რომ კოდის გამოიყურება ჯარიმა. 713 01:05:40,870 --> 01:05:46,390 იმის გამო, რომ შემდგენელი შეიძლება კონკრეტულად შეცვლილი შეცვალოს კოდის 714 01:05:46,390 --> 01:05:50,860  პროცესში შედგენა. 715 01:05:50,860 --> 01:05:58,140 ამავე დროს, ისევე, როგორც - მე ვფიქრობ, რომ ეს არის, როგორც ძირითადი იდეები იგი. 716 01:05:59,560 --> 01:06:09,030 >> [სტუდენტი] იცით თუ ვთქვათ, რომ ჩვენ არ უნდა ვიცოდეთ არაფერი დაკავშირებული Firesheep - 717 01:06:09,030 --> 01:06:13,110 ან ჩვენ უნდა ვიცოდეთ, რომ? 718 01:06:13,110 --> 01:06:18,360 [Rob] With Nate ნახევარ რამ, არაფერი რომ Nate შეეხო - 719 01:06:18,360 --> 01:06:22,760 ისევე როგორც Firesheep, WireShark - მე არ ვფიქრობ, რომ მან Firesheep დეტალურად. 720 01:06:22,760 --> 01:06:28,620 თქვენ ასევე გააკეთა რაღაც, რომ - იყო ეს Firesheep - გასულ კვირას? 721 01:06:28,620 --> 01:06:31,110 იცით თუ შეეხოთ რომ? 722 01:06:31,110 --> 01:06:34,060 [სტუდენტი] ჰო, მე ვფიქრობ, რომ ჩვენ შეიძლება - >> [Rob] Yeah. 723 01:06:34,060 --> 01:06:40,880 ჩვენ არ ვაპირებთ, რომ გადმოგცეთ Firesheep გამომავალი და აცხადებენ, რომ ინტერპრეტაცია ამ. 724 01:06:40,880 --> 01:06:44,960 უბრალოდ იქნება - ეს იქნება კითხვა მოსწონს თუ რა არის Firesheep? 725 01:06:44,960 --> 01:06:47,290 რა არის ეს გამოიყენება? 726 01:06:47,290 --> 01:06:52,120 [სტუდენტური] ვფიქრობ, ეს მუშაობს მხოლოდ მობილური -4 Firefox ან რამე. 727 01:06:52,120 --> 01:06:55,320 [Rob] ეს შეიძლება იყოს გატეხილი არის. 728 01:07:11,430 --> 01:07:14,070 წარმოდგენა არ მაქვს. 729 01:07:14,070 --> 01:07:18,330 ისინი არ ჩანს, არ გამორთოთ იგი ხელით, 730 01:07:18,330 --> 01:07:21,210 მაგრამ იქნებ ეს არ იმუშავებს უახლესი Firefox. 731 01:07:21,210 --> 01:07:24,790 [სტუდენტური] მე მართლაც სცადა დაყენების იმიტომ, რომ განაცხადა, რომ ეს იქნება თავსებადი. 732 01:07:24,790 --> 01:07:28,880 [Rob] ასე რომ, ვფიქრობ, ეს არ იმუშავებს უახლესი Firefox. 733 01:07:28,880 --> 01:07:32,360 მაგრამ იდეა ჯერ კიდევ დგას, თუ რას ნიშნავდა აჩვენებს. 734 01:07:32,360 --> 01:07:39,430 ეს იყო აბსურდული რამდენად მსოფლიოში არ ცხოვრობს HTTPS დროს. 735 01:07:39,430 --> 01:07:43,820 მაშინაც კი, ბოლო 2 წლის ან რასაც, მაინც - არსებობს დრამატული გაუმჯობესება 736 01:07:43,820 --> 01:07:47,210 რაოდენობის საიტებზე რომლებიც იყენებენ HTTPS. 737 01:07:49,920 --> 01:07:52,580 >> [სტუდენტი] Do ჩვენ უნდა წავიდეთ მეტი HTTP? 738 01:07:52,580 --> 01:07:58,050 [Rob] ოქმი ეს? >> [სტუდენტი] ზოგიერთი რამ, რომ ჩვენ უნდა იცოდეს. 739 01:07:58,050 --> 01:08:06,220 [Rob] ყველა უფლება. ძირითადი რამ, ყველაფერი თქვენ შეგიძლიათ ნახოთ თქვენი ქსელის tab. 740 01:08:06,220 --> 01:08:12,160 როდესაც მე მოითხოვოს გვერდი - ბრუნდებოდა მდე დაბრუნება მთავარი რამ. 741 01:08:12,160 --> 01:08:16,090 აქ შეგიძლიათ იხილოთ თხოვნით, რომ მე. 742 01:08:16,090 --> 01:08:19,220 Chrome ხდება დააფორმატე ყველა ლამაზად for us 743 01:08:19,220 --> 01:08:21,970 სადაც მოთხოვნა URL იყო, მოთხოვნა მეთოდი იყო GET, 744 01:08:21,970 --> 01:08:24,800 და სტატუსის კოდი იყო 200 OK. 745 01:08:24,800 --> 01:08:28,279 თუ მე მოხვდა კალენდარი წყაროს, მე ვხედავ პირდაპირ, რომ - 746 01:08:28,279 --> 01:08:35,680 და ეს არის - ჩვენ შეგვიძლია გაჩვენოთ არც ერთ ამ, მაგრამ ეს არ არის ძალიან რთული ინტერპრეტაცია მათ შორის. 747 01:08:35,680 --> 01:08:41,729 აქ არის პირდაპირი მოთხოვნა მივიღე, ასე რომ, ეს იმას ნიშნავს, რომ მივედი 748 01:08:41,729 --> 01:08:48,160 apps.cs50.net/discuss/threads/inbox/all/HTTP/1.1. 749 01:08:48,160 --> 01:08:57,569 და ოქმის გამოყენებული იყო HTTP/1.1 რომელიც პრაქტიკულად - ის ყოველთვის იქნება რომ. 750 01:08:57,569 --> 01:09:01,490 აქ ჩვენ GET, ასე რომ ეს შეიძლება იყოს POST. 751 01:09:01,490 --> 01:09:04,660 და მერე მოდის ქვემოთ - ყველა გზა ქვემოთ საპასუხოდ headers - თუ ჩვენ ნახოთ, რომ წყარო, 752 01:09:04,660 --> 01:09:07,740 ეს არის ის, სადაც ჩვენ ვხედავთ 200 OK. 753 01:09:07,740 --> 01:09:11,069 ვიცი, შესაძლებელია განსხვავებული სტატუსი კოდები ეს. 754 01:09:11,069 --> 01:09:15,520 ვფიქრობ მიმოხილვა ჩვენ არ ამბობენ, რამდენიმე ამ, 755 01:09:15,520 --> 01:09:20,640 ისე, 403, 404 - ის სახის გავრცელებული მიიჩნიეს. 756 01:09:20,640 --> 01:09:26,810 ეს არის ის ძირითადი იდეა მას. 757 01:09:29,990 --> 01:09:35,120 განსხვავება მხოლოდ შორის HTTP და HTTPS ამ კოდირებით. 758 01:09:35,120 --> 01:09:42,319 >> [სტუდენტი] თქვენ გაკეთდეს? >> [Rob] ვფიქრობ ასე. ისე, yep. 759 01:09:42,319 --> 01:09:46,470 [სტუდენტური] თქვენ გაიგო ძალიან ზოგადად იმაზე, თუ როგორ შიფრირების სამუშაოები? 760 01:09:46,470 --> 01:09:49,920 იმის გამო, რომ ჩვენ ვისაუბრეთ მაგალითად, როდესაც compressing Huffman ფაილი 761 01:09:49,920 --> 01:09:54,890 თქვენ იცით, როგორ decompress მათ იმიტომ, რომ თქვენ რეალურად გაგზავნილი hashtable ფარგლებში ფაილი 762 01:09:54,890 --> 01:09:56,950 ასე როგორ აკეთებს კოდირების მუშაობა? 763 01:09:56,950 --> 01:10:00,830 იცით, როგორ უნდა დაშიფვრა ინფორმაციას, თუ თქვენ არ რეალურად გაგზავნილი კლიენტი 764 01:10:00,830 --> 01:10:05,740 გასაღები - და თქვენ შეგიძლიათ რეალურად აითვისებდა, რომ გასაღები -? 765 01:10:05,740 --> 01:10:07,740 რა ზოგადად პროცესი მუშაობს? 766 01:10:07,740 --> 01:10:09,870 [Rob] საერთო პროცესში კოდირებით - 767 01:10:09,870 --> 01:10:15,590 რომ არის წარმოუდგენლად დეტალური კითხვაზე გაგცემთ პასუხს. 768 01:10:15,590 --> 01:10:21,490 არსებობს მოკლე - კარგად, ტომი და მე მივიღე მოკლე. 769 01:10:21,490 --> 01:10:26,060 სამწუხაროდ, ისევე როგორც 26 წუთი, ასე რომ, ეს არ არის მოკლე. ეს არის ხანგრძლივი. 770 01:10:26,060 --> 01:10:31,530 მაგრამ ჩვენი ხანმოკლე იყო RSA რომელიც მხოლოდ ერთი მაგალითი ამ, 771 01:10:31,530 --> 01:10:40,420 და ეს RSA არის ნაწილი საერთო HTTPS ოქმს. 772 01:10:40,420 --> 01:10:46,060 იდეა - RSA არის მაგალითი იმისა, საჯარო გასაღები კრიპტოგრაფიის, 773 01:10:46,060 --> 01:10:49,690 რაც იმას ნიშნავს, რომ თქვენ გაქვთ 2 ცალკე გასაღებები. 774 01:10:49,690 --> 01:10:51,690 თქვენ იყენებთ 1 გასაღები რეალურად დაშიფვრა რამ, 775 01:10:51,690 --> 01:10:54,410 და თქვენ გამოიყენოთ სხვა საკვანძო გაშიფვრა რამ. 776 01:10:54,410 --> 01:10:58,360 ეს გასაღები რომ გამოიყენოთ დაშიფვრა რამ არის ერთი, რომ ის საზოგადოებას. 777 01:10:58,360 --> 01:11:03,500 ნახვა გამოგიგზავნით ამ შიფრირების გასაღებით. 778 01:11:03,500 --> 01:11:08,280 ისინი გამოგიგზავნით რომ დაშიფვრის გასაღები, და როცა გსურთ გააგზავნოთ რაღაც თავში მათ 779 01:11:08,280 --> 01:11:13,550 თქვენ იყენებთ, რომ დაშიფვრის გასაღები დაშიფვრა ყველა თქვენი მონაცემები და გააგზავნეთ მათ. 780 01:11:13,550 --> 01:11:16,110 ასე რომ, ისინი მხოლოდ კერძო გასაღები. 781 01:11:16,110 --> 01:11:22,630 თუ ეს კერძო გასაღები ცნობილი გახდა, მაშინ ვინმე შეძლებს გაშიფვრა თქვენი მონაცემები. 782 01:11:22,630 --> 01:11:27,980 მაგრამ, რომ კერძო გასაღები - რომელიც მათემატიკურად დაკავშირებული საჯარო გასაღები, მაგრამ ვერ 783 01:11:27,980 --> 01:11:33,640 გაერკვნენ, ერთი, მეორე - ისე, რომ კერძო გასაღები შეიძლება გამოყენებულ იქნას გაშიფვრა მონაცემები. 784 01:11:33,640 --> 01:11:36,630 რადგან ისინი მხოლოდ კერძო გასაღები, 785 01:11:36,630 --> 01:11:38,920 ისინი მხოლოდ ვინც წაიკითხოს მონაცემები. 786 01:11:38,920 --> 01:11:44,170 ასე რომ, მიუხედავად იმისა, რომ საჯარო გასაღები არის საჯარო, 787 01:11:44,170 --> 01:11:47,660 მე ვიყენებ იგივე - როდესაც მივდივარ Google.com ან რასაც, 788 01:11:47,660 --> 01:11:50,010 ალბათ მრავალი, მე არ ვიცი, - მაგრამ თუ მე წასვლა Google.com, 789 01:11:50,010 --> 01:11:54,770 ის მიდის Google.com, იგი მიდის Google.com-- 790 01:11:54,770 --> 01:11:59,250 ჩვენ ყველას შეგიძლიათ გამოიყენოთ იგივე საჯარო გასაღები დაშიფვრა ჩვენი ინფორმაციით, თუმცა ჩვენ გვინდა. 791 01:11:59,250 --> 01:12:04,010 მაგრამ არც ერთი ჩვენგანი აპირებს შეძლებს გაერკვნენ - ვაპირებთ შეძლებს გაშიფვრა 792 01:12:04,010 --> 01:12:09,940 მათი ინფორმაციით, ვინაიდან საჯარო გასაღები არ შეუძლია გაშიფვრა. 793 01:12:09,940 --> 01:12:13,050 ეს შეიძლება მხოლოდ დაშიფვრა. 794 01:12:13,050 --> 01:12:23,250 და ეს fun / დაწვრილებითი მათემატიკის - როგორც bunch of module ოპერატორები და exponentials და პერსონალი 795 01:12:23,250 --> 01:12:28,890 რომ ის უბრალოდ მუშაობს, რომ კერძო გასაღები არის ერთადერთი, რაც შეიძლება 796 01:12:28,890 --> 01:12:33,620 გაშიფვრა საჯარო გასაღები შიფრირების მიერ პერსონალი. 797 01:12:33,620 --> 01:12:38,020 ჰო. იხილეთ RSA short უფრო დეტალურად. 798 01:12:38,020 --> 01:12:41,880 [სტუდენტური] არის, რომ ვებ გვერდი? 799 01:12:41,880 --> 01:12:46,210 [Rob] ჰო, მე ვფიქრობ, რომ ამ ეტაპზე. ან თუნდაც YouTube ლინკი ეს იყო განთავსებული. 800 01:12:51,330 --> 01:12:57,190 ვნახოთ. შორტები. მე ვფიქრობ, რომ ეს იქნებოდა week 2 დაკავშირებული. ჰო. RSA. 801 01:12:57,190 --> 01:13:03,780 და ეს არის - we're არ აპირებს ითამაშოს ამ - 24 წუთის განმავლობაში. 802 01:13:03,780 --> 01:13:05,780 ეს ხანგრძლივი ერთი. 803 01:13:07,740 --> 01:13:09,740 >> მეტი შეკითხვები? 804 01:13:09,740 --> 01:13:14,770 [სტუდენტი] იქნებ გაიგო მოკლედ bitmasks? >> [Rob] რა თქმა უნდა. 805 01:13:14,770 --> 01:13:23,090 მოკლედ, იდეა არის, რომ მოსწონს - >> [სტუდენტი] რა არის ეს, რობ? 806 01:13:23,090 --> 01:13:32,760 [Rob] Bitmasks. იდეა არის - მოდით უბრალოდ, ვამბობთ ჩვენ გვაქვს - we're გამოყენებით ზოგიერთი რიცხვი - 807 01:13:32,760 --> 01:13:41,490 int x, - ასე, ჩვენ ვიწყებთ ეს off at 0. 808 01:13:41,490 --> 01:13:47,900 ახლა, ეს რიცხვი არის 32 ბიტი, ასე რომ არც ერთი 1 იმ ბიტი შეიძლება გამოყენებულ იქნას წარმოადგენს 809 01:13:47,900 --> 01:13:50,600 კონკრეტული FLAC. 810 01:13:50,600 --> 01:13:56,210 ეს არის სადაც თუ გადავხედავთ ოპერაციული სისტემის კოდები, ისინი იყენებენ ამ მთელი ადგილი 811 01:13:56,210 --> 01:14:03,900 სადაც შესაძლოა up დაბრუნება სადღაც მათ hash განსაზღვრავს - 812 01:14:03,900 --> 01:14:09,020 ვნახოთ რამდენიმე მაგალითი. 813 01:14:09,020 --> 01:14:22,720 Man-2-ღია - ღია სისტემა დარეკეთ ვხედავთ აქ, რომ მისი არგუმენტები არის int flags - 814 01:14:22,720 --> 01:14:29,120 თუ რას მოელის, როგორც ეს არგუმენტი ზოგიერთი დროშებით. 815 01:14:29,120 --> 01:14:33,030 ჩვენ ვხედავთ O_append, O_ASYNC, O_CLOEXEC, 816 01:14:33,030 --> 01:14:37,130 O_CREAT, და ასე შემდეგ. 817 01:14:37,130 --> 01:14:45,260 O_DIRECT. ამ სახის დროშები hash განსაზღვრული სადღაც. 818 01:14:45,260 --> 01:14:47,260 და ყველა მათგანი ზუსტად 1 bit. 819 01:14:47,260 --> 01:14:57,600 ასე რომ, O_CREAT შეიძლება hash-განისაზღვრება, როგორც 1, მარცხენა ცვლა, 4 (1 << 4). 820 01:14:57,600 --> 01:15:02,280 რომ იქნება - როდესაც გამოვიყენო O_CREAT რომ უბრალოდ იქნება - 821 01:15:02,280 --> 01:15:09,350 ორობითი 1, 0, 0, 0, 30-ish zeros სანამ. 822 01:15:09,350 --> 01:15:13,930 ეს მხოლოდ ერთი bit კომპლექტი, და რომ ცოტა წარმოადგენს ამ დროშით. 823 01:15:13,930 --> 01:15:18,160 და ასე არ არის სხვა flag იქნება მარცხენა გადაინაცვლებს 4. 824 01:15:18,160 --> 01:15:30,390 მე შეუძლია წარმოადგინოს 32 flags ერთი რიცხვი აკეთებს - 825 01:15:30,390 --> 01:15:40,850 x = O_CREAT bit ბრძნული ან O_DIRECT. 826 01:15:40,850 --> 01:15:43,640 თქვენ მხოლოდ კრეფა ნებისმიერი 2 იმ დროშებით. 827 01:15:43,640 --> 01:15:48,600 ახლავე x აპირებს აქვს 2 ბიტი მითითებული, რომელიც შეესაბამება 2 ბიტი 828 01:15:48,600 --> 01:15:53,490 საქართველოს O_CREAT და O_DIRECT. 829 01:15:53,490 --> 01:15:58,740 ისე, რომ შემდეგ - ასეა, მაშინ ჩვენ გავიდა x შევიდა ღია ფუნქცია, 830 01:15:58,740 --> 01:16:02,950 და ღია საჭიროებების დაინახოს, თუ რა flags ფაქტიურად მითითებული. 831 01:16:02,950 --> 01:16:06,480 ასე რომ, სადაც ეს ხდება გავაკეთოთ რამ, როგორიცაა 832 01:16:06,480 --> 01:16:19,340 თუ (x & O_CREAT) რაღაც, 833 01:16:19,340 --> 01:16:27,110 თუ (x და O_DIRECT) რაღაც, 834 01:16:27,110 --> 01:16:30,300 და შემდეგ უკვე შეიძლება flag რომ ჩვენ არ შევქმენი - 835 01:16:30,300 --> 01:16:35,730 თუ (x & O_ - მე არ ვიცი, რა სხვა flags იყო - 836 01:16:35,730 --> 01:16:42,140 (X და O_RDONLY) - რომ განსაკუთრებული პირობა არ იქნება შესრულებული. 837 01:16:42,140 --> 01:16:44,030 ან რომ ბლოკი კოდი არ იქნება შესრულებული, 838 01:16:44,030 --> 01:16:48,030 მაგრამ ეს 2 არის იმის გამო, რომ იმ 2 flags შეიქმნა. 839 01:16:48,030 --> 01:16:57,400 და შენიშნავს, რომ C, ნებისმიერი ღირებულების, რომ არ არის 0 ასეა. 840 01:16:57,400 --> 01:17:05,020 ასე რომ, (x და O_CREAT) იქნება ან 0 ან O_CREAT 841 01:17:05,020 --> 01:17:07,990 რადგან O_CREAT მხოლოდ ერთი bit კომპლექტი. 842 01:17:07,990 --> 01:17:12,800 თუ ეს bit არის მომავალი, მაშინ ეს დაბრუნებას აპირებს O_CREAT - 843 01:17:12,800 --> 01:17:16,640 ორობითი, სადაც მხოლოდ, რომ ცოტა არის. 844 01:17:16,640 --> 01:17:23,400 იმ შემთხვევაში, თუ ცოტა მომავალი არ არის, მაშინ ის დაბრუნებას აპირებს 0, ამ შემთხვევაში ჩვენ ვიცით დროშა არ იყო მითითებული. 845 01:17:23,400 --> 01:17:25,400 ეს არის ის, თუ როგორ გამოიყენოთ bitmasks. 846 01:17:25,400 --> 01:17:29,050 მე ვფიქრობ წინა გამოცდა ან იქნებ კლასში ან რაღაც - 847 01:17:29,050 --> 01:17:35,150 ასევე, შეგიძლიათ გამოიყენოთ bitmasks ამობეჭდოთ ორობითი ცვლადი. 848 01:17:35,150 --> 01:17:46,250 ასე რომ, შემიძლია - looping ზე - 1, მარცხენა ცვლა, 0 - და შემდეგ ამობეჭდოთ თუ x და რომ - 849 01:17:46,250 --> 01:17:52,570 თუ x და 1 დაუტოვებიათ ცვლა, 0 - შემდეგ ამობეჭდოთ 0 ან 1. ან ამობეჭდოთ 1 სხვა ბეჭდვა 0. 850 01:17:52,570 --> 01:18:00,620 და მერე წავიდეთ მეტი კიდევ ერთხელ - თუ x და 1 მარცხენა ცვლა, 2 - მაშინ ეს იმას ნიშნავს, რომ მეორე bit 851 01:18:00,620 --> 01:18:04,450 ცვლადი არის მითითებული, ამიტომ ბეჭდვა 1 სხვაგან მე ბეჭდვა 0. 852 01:18:04,450 --> 01:18:06,860 და მე ვფიქრობ, რომ ჩვენ, შესაძლოა, რეალურად გსურთ ამის გაკეთება, რომ საპირისპირო მიზნით, რადგან 853 01:18:06,860 --> 01:18:10,120 ჩვეულებრივ გსურთ მარცხენა მხარეს უნდა იყოს მაღალი, რათა ბიტი 854 01:18:10,120 --> 01:18:24,510 და მარჯვენა მხარეს უნდა იყოს ყველაზე დაბალი რათა ბიტი, ასე რომ ალბათ loop 4 int i = 31 სანამ მოხვდა 0, 855 01:18:24,510 --> 01:18:32,320 მაშინ, რომ ზუსტი პირობით - თუ x და 1 მარცხენა ცვლა, i; ბეჭდვა 1 სხვა 0. 856 01:18:32,320 --> 01:18:34,320 [სტუდენტი] დიდი მადლობა. 857 01:18:36,280 --> 01:18:38,550 >> [Rob] მე ვფიქრობ, ჩვენ გარეთ დრო. 858 01:18:38,550 --> 01:18:42,840 ნებისმიერი უფრო მეტი შეკითხვა, ბოლო რამდენიმე out-of-time წამში? 859 01:18:42,840 --> 01:18:47,710 ყველა უფლება. წარმატებებს გისურვებთ ხვალ. 860 01:18:47,710 --> 01:18:54,780 ეს იყო ბოლო მონაკვეთზე, სადაც მომავალ კვირას იქნება აუცილებელი. 861 01:18:54,780 --> 01:19:03,770 მე მივცემ უკან ტესტებში და ჩვენ შეგვიძლია წავიდეთ მათზე და იქნებ წავიდეთ მეტი სხვა რამ, 862 01:19:03,770 --> 01:19:09,230 თქვენ აინტერესებდათ, ან საბოლოო პროექტი რამ, ან მომავალი CS კლასების რამ ან - მე არ ვიცი. 863 01:19:09,230 --> 01:19:12,070 მაგრამ ეს არის ბოლო მასალის შევსებული მონაკვეთზე. 864 01:19:12,070 --> 01:19:15,070 Bye! 865 01:19:15,070 --> 01:19:20,970 (ტაში) 866 01:19:22,250 --> 01:19:24,420 >> [CS50.TV]