DAVID J. MALAN: Bütün hüququ. Ilk Belə ki, xoş gəlmisiniz Bir viktorina üçün CS50 postmortem. Biz açılışında istədiyiniz fikir Bu ənənə bu il. Bu bir fürsət olacaq vasitəsilə gəzmək viktorina həllər. Və biz sürətləndirmək və ya əsaslanır aşağı yavaş olacaq burada o faiz. Siz etdiyiniz çünki Beləliklə, siz yəqin ki, burada edirik siz ola bilər necə maraqlı və ya bir cavab olmalıdır Bu problemlərin. Belə ki, niyə biz bir nəzər yoxdur ilk bu bölmə? Belə ki, strings əldə. Bu üç müxtəlif versiyaları verdi idi ki, bir proqram, nəticədə, bir istifadəçi bir string almaq üçün nəzərdə. Idi ki, etdi və ya müəyyən etmək üçün sizə üçün sol. Və biz, Sual 0 istədi version 1 Güman tərtib və icra. Niyə proqram segfault bilər? İlk baxışdan, heç bir təklif kimi nə üçün? Bəli. Auditoriya: Mən bu görən xatırlayıram baxaraq bir əvvəlki nümunəsi char * s və s scan görən və bu bir göstərici, necə çünki görən Siz skanerdən nə təsir etdi? S və ya s ünvanı? DAVID J. MALAN: OK. Yaxşı. Belə ki, son nəticədə, hər hansı bir problem qaynağı ehtimalla azaltmaq niyyətindədir ki, dəyişən s. Və bu, həqiqətən bir dəyişən var. Ki, dəyişən data növü char * olan o olacaq deməkdir bir xarakter ünvanını ehtiva edir. Və orada fikir yatır. Bu ünvanını ehtiva olacaq ümumiyyətlə bir xarakter, yaxud ilk xarakterli ünvanı simvol bütün blok. Amma tutmaq olduğunu scan s, məqsədi ilə həyat bir ünvan verilir və verilir bir format kodu,% s kimi, oxumaq yığın bir string bu ünvanda yaddaş. Amma heç bərabər işarəsi əvvəl var, çünki ilk ki nöqtəli vergül kodu xətt, biz, həqiqətən, yoxdur, çünki hər hansı bir yaddaş ayrılması malloc, olmadı, çünki həqiqətən bir ölçüsü bir sıra, bütün ayrılması Siz yapýyorsun istifadəçinin oxumaq bəzi tam daxil klaviatura input zibil dəyəri olan default s edir. Belə ki, odds segfault olacaq əgər ki, ünvanı yalnız belə baş vermir Siz ki, bir dəyər olmaq, əslində, yazın. Ayrılması belə pis deyil orada yaddaş. Belə ki, 1-ci, biz xahiş, version 2 Güman tərtib və icra. Niyə bu proqram segfault bilər? Belə ki, bu bir az arabası deyil. Və yalnız bir həqiqətən var Aşkar yol harada siz Burada bir segfault tetikler. Bu tematik edir. Biz yaddaş c istifadə etdiyiniz istənilən vaxt, nə Bir segfault vadar edə bilər versiya 2? Auditoriya: Əgər ki daxil istifadə edin 49-dən artıq ki, bir string simvol. DAVID J. MALAN: Exactly. Siz müəyyən bir şey uzunluğu hər hansı vaxt bu bir sıra gəldiyi zaman, sizin radar bu ola bilər ki, off getmək lazımdır problemli Siz yoxlanılması deyil edirsinizsə bir sıra sərhədləri. Və burada problem var. Biz hələ scanf istifadə edirik. Biz hələ də cəhd deməkdir,% s istifadə etdiyiniz istifadəçi bir string oxumaq. Ki, olan, s daxil oxumaq olacaq bu nöqtədə, səmərəli edir yaddaş yığın ünvanı və ya ekvivalent var. Bu serialın adı var yaddaş simvol. Amma dəqiq ki, siz bir string oxumaq 49 simvol, 49-dən artıq var Siz backslash üçün otaq lazımdır, çünki 0, siz daşqın olacaq ki, bufer. Və uğurlu almaq və edə bilər bir 51 xarakter, 52-ci, 53-cü yazın. Lakin bəzi nöqtədə, OS demək gedir, no. Bu, mütləq yaddaş deyil Siz toxunmaq icazə edirik. Və proqram segfault gedir. Belə ki, orada heuristics bir olmalıdır Siz sabit uzunluğu var zaman, siz var Siz uzunluğu kontrol edirik etmək bu çalışdığınız olursa olsun onu oxumaq üçün. Auditoriya: Belə ki, siz həll etsin həqiqətən yoxlanılması şərh var uzunluğu böyükdür çox və ya az? DAVID J. MALAN: Absolutely. Siz yalnız bir şərt var deyir, əgər ki, - daha doğrusu siz mütləq bilmirəm əvvəlcədən neçə simvol istifadəçi yazın gedir, çünki Əgər toyuq və yumurta var. Siz scanf ilə oxumaq etdik qədər siz necə uzun anlamaq olar. Amma bu nöqtədə, bu, çox gec deyil Əgər siz artıq oxumaq etdik çünki yaddaş bəzi blok. Bir kənara, CS50 kitabxana yayınır kimi belə bu məsələ tamamilə, geri fgetc istifadə edərək. Və bu, bir zaman bir xarakteri oxuyur tip-toeing bilmədən, birlikdə ki, Bir xarakter əgər daşqın bilməz Siz bir-bir oxuyun. Tutmaq GetString geri ilə deyil biz daim yenidən ölçüsü var yaddaş ki, yığın olan yalnız bir ağrı deyil. Bu xətləri bir çox var bunu kodu. Belə ki, başqa yanaşma olardı əslində bir cousin istifadə, belə ki, scanf, danışmaq. Bu bir çox variantlar var həqiqətən yoxlamaq funksiyaları uzunluğu neçə simvol maksimum oxumaq bilər. Və oxumaq deyil, müəyyən edə bilər 50-dən çox simvol. Belə ki, bir yanaşma ola bilərdi böyük vəsaitlərin uydurmuşdur. Belə ki versiyası güman soruşur, 2 sual 3 tərtib və icra edilir. Niyə proqram segfault bilər? Belə ki, bu həqiqətən eyni , cavab olsa belə bir az meraklısı görünür. Biz kimi hiss malloc istifadə etdiyiniz biz özümüz daha çox seçim ötürür. Və sonra biz azad edirik sonunda yaddaş. Bu hələ yaddaş yalnız 50 bytes var. Belə ki, biz hələ də oxumaq üçün cəhd edə bilərsiniz 51, 52, 1000 bayt. Bu üçün segfault olacaq eyni səbəb. Amma başqa səbəb də var. Başqa qaytarılması malloc bilər nə yaddaş yığın ünvanı? Bu null qayıtmaq bilər. Və biz kontrol deyilik, çünki ki, biz bir şey bunu bilər ki, başqa bir səbəbdən, axmaq biz scanf izah edilə bilər, oxumaq klaviatura istifadəçi input 0 yerini daxil AKA null. Və ki, bu da mütləq bir segfault tetikler. Belə ki, viktorina var məqsədlə, biz ki, kimi o da qəbul üzrlü səbəb. Bir eynidir. Bir az daha ehtiva edir. Nəhayət, proqram ilə əlaqədar yaddaş istifadə, necə versiya 2 və 3 versiyasını fərqlənir? Belə ki, dəyər nə üçün, gördük bir mümkün zahirən sonsuz təchizatı Bu cavablar. Və xalq cavab arasında, biz nə idi ümid, lakin biz digər qəbul şeylər, bəzi oğlu versiya 2 istifadə edir ki, fakt sözdə yığını. Version 3 yığın istifadə edir. Və funksional, bu, həqiqətən deyil bir fərq ki, bütün çox etmək. Günün sonunda, biz hələ istəyirik yalnız yaddaş 50 bytes əldə. Amma bu mümkün cavab biri idi biz axtarır ki,. Siz sınavlar almaq kimi, siz görəcəksiniz geri TFS, biz ki, digər müzakirələr qəbul onların disparate yaddaş istifadə həmçinin. Amma yığın və yığın olardı ilə getmək üçün asan bir cavab. Hər hansı bir sualınız? Mən sizə Rob verir. Rob Bowden: Belə problem 4. Bu doldurmaq üçün olduğu biridir bütün həyata bayt sayı istifadə edilən bu müxtəlif növləri. Görürük Belə ki, ilk şey. 32-bit memarlıq daşımır, Bu CS50 cihaz kimi. Haqqında fundamental şeyi belə bir 32-bit arxitekturaya, bizə deyir ki, tam olaraq necə böyük bir pointer gedir memarlıq olmaq. Belə ki, dərhal, biz bilirik ki, hər hansı bir pointer tipli 32-bit və ya 4 bayt edir. Belə ki, bu masada axtarır, bir node * bir göstərici növüdür. 4 bayt olacaq. Struct node * ki, sözün node ulduz eyni. Və belə ki, 4 bayt olacaq. String, belə ki, bir kimi baxmaq deyil hələ göstərici, lakin typedef, bir string yalnız bir char * olan bir göstərici növüdür. Belə ki, 4 bayt olacaq. Beləliklə, bu üç bütün 4 bayt var. İndi node və tələbə bir az daha mürəkkəb. Belə ki, node və tələbə baxaraq, biz görürük bir tam və bir göstərici kimi node. Və tələbə iki göstəricilərinə Bunun içərisində. Belə ki, ən azı, burada bizim halda, yol biz ölçüsü hesablanması başa ki, Bu struct yalnız hər şeyi qədər əlavə edin ki, struct daxilində. Belə ki node üçün, biz tam var, 4 bayt edir. Biz 4 bayt olan bir göstərici var. Və belə bir node gedir 8 bayt almaq. Və eyni tələbə üçün, biz var 4 bayt və başqa ki pointer 4 bayt var ki pointer. Belə ki, son olacaq 8 bayt olan. Belə ki, node və tələbə 8 bayt var. Və bu üç bütün 4 bayt var. Ki Suallar? Bəli. Auditoriya: bir 64-bit oldu memarlıq, əgər Onların bütün ikiqat? Rob Bowden: Bu ki Onların bütün ikiqat. Belə ki, 64-bit memarlıq, o, yenə, dəyişikliklər fundamental şey ki, bir pointer indi 64 bit edir. Bəli. Belə bir göstərici 8 bayt edir. Belə ki, bu 4 bayt olduğunu 8 bayt olacaq. Iki göstəricilərinə olan şagird, yaxşı, indi olacaq 8 bytes, 8 bayt ola. 16 bayt etmək olacaq. Amma bir node hələ 4 bayt edir. Belə ki, bu göstərici gedir 8 bayt olacaq. Bu 4 bayt edir. Belə ki, bir node yalnız gedir 12 bytes olmalıdır. Ki, bir hər hansı digər suallar? Belə ki, növbəti bir, bunlar HTTP durum kodları. Və halları təsvir idi altında bu hünəri sizə qaytarılır. Mən bəzi tələbələrin eşitdim ki, bir problem onlar etməyə çalışmışıq ki, bu da səhvlər müştərinin sonunda olmaq. Biz tələb etmək üçün cəhd Belə ki, server, bir şey gedir bizim sonunda səhv. Amma ümumiyyətlə, bu kodları var server tərəfindən geri qaytarılır. Beləliklə, biz nə anlamaq istəyirəm yanlış və ya doğru server ki, Bu şeylər qaytarılacaq səbəb olur. Belə ki, niyə bir server returns bilər status kodu 200? Hər hansı bir fikir? Bəli. Belə ki, bir şey haqqında uğurla sorğu yolu ilə getdi. Onlar qayıtmaq edirik Siz xahiş nə. Belə ki, hər şey gözəl idi. 302 haqqında nə tapılmadı? Bəli. Auditoriya: The server axtarır Istədiyiniz nə üçün. Amma onu tapa bilmədi. Belə ki, bir səhv var. Rob Bowden: Belə server idi istəyirdi nə axtarır. Belə ki, yalnız burada axtarır, 302 tapdı onu tapmaq üçün bacardı. Auditoriya: Üzgünüm. Tapılmışdır onu tapa etdi deməkdir. Üzr istəyirik. Rob Bowden: Belə 302 tapmışlar. Bu server tapa istəyirdi nə. Auditoriya: Amma onu tapılanlar deyil? Rob Bowden: arasındakı fərq Bu 302 və 200 bu Istədiyiniz bilir. Amma bu dəqiq deyil Siz soruşmaq istəyirdi. Belə ki, 302 tipik yönlendirme. Belə ki, bir səhifə tələb. Bu oh, mən istəyirəm bilir, Bu qayıtmaq üçün. Lakin bu fərqli URL edir. Belə ki, hey, siz həqiqətən bunu istəyirik. DAVID J. MALAN: O dedi ki, bir parça var biz sizə uşaqlar bir yönlendirme verdi mövzu funksiyası istifadə funksiyası ki, öz növbəsində, yer çap kolon, sonra URL olan Siz istifadəçi rədd etmək istəyirəm. Siz 302 görmədim baxmayaraq açıq-aydın var ki, nə PHP edir magically mövzu kimi daxil olacaq Rob orada tam olaraq nə deyə - tapılmadı. Lakin əvəzinə burada getmək. Rob Bowden: OK. Belə ki, 403 haqqında nə haram etdi? Auditoriya: Mən hesab edirəm ki, server əsasən olduğunu söyləyən müştəri ana səhifə gedə bilməz. Rob Bowden: Belə ki, bəli. Yaxşı, tipik cavab idik gözləyirik bir şey kimi, faylları müvafiq chmodded deyil. Bu yəqin ki, altında hansı şərtlər Əgər siz onları gördüm. Amma bir səbəb var ki, müştəri burada günah ola bilər. Başqa status kodu həqiqətən var - 401. Belə ki, bu çox oxşardır. 401 icazəsiz. Və 403 qadağandır. Və belə icazəsiz Siz yalnız Siz daxil olmamısınız deyilik əgər almaq Lakin giriş demək bilər Əgər səlahiyyətli olunur. Amma artıq daxil və əgər hələ sonra, icazəniz yoxdur siz də qadağan əldə edə bilərsiniz. Belə ki, daxil və yoxsa icazə, qadağan da Siz əldə edə bilərsiniz bir şey. DAVID J. MALAN: Və mexanizmi ilə bu problemlər adətən olan server edir həll nə komanda ilə? Chmod, bu əgər, həqiqətən, bir icazələrin fayl və ya kataloq vermək. Rob Bowden: Sonra 404 tapılmadı. Bəli. Belə ki, 302 fərqli olduğu dəqiq deyil Siz ancaq xahiş olduğunuz nə bilir Siz istəyirsinizsə, bu, yalnız var istədiyiniz nə heç bir fikir. Və tələb olunur etibarlı bir şey. 418 Mən bir çaynik Ben və 500 daxili server. Beləliklə, nə siz ki, ola bilər? Belə ki, segfault - Mən, həqiqətən, grading bilmirəm Bunun üçün standart. Lakin PHP kodu bir şey olsaydı bu səhv nəzəriyyə, bu ola bilər həqiqətən, segfault olan halda, bu 500 daxili server səhv, bir şey Sizin server ilə səhv konfiqurasiya. Və ya bir syntax error var Sizin PHP kodu. Və ya pis bir şey gedir. DAVID J. MALAN: Biz segfault gördünüz bir neçə xalq cavab arasında. Və texniki, bu, ola bilər. Amma bir PHP, proqram olacaq həqiqətən, digər insanlar tərəfindən yazılı segfaulted, yalnız əgər insanların qıfıllar və arabası kodu yazdı onların interpreter ki PHP özü segfault. 500 segfault kimi Belə ki, baxmayaraq ruhunda, demək olar ki, həmişə var bir konfiqurasiya faylı məsələnin nəticə web server və ya, Rob dediyi kimi, sizin kimi bir syntax error, Teklif yaxın etməyib. Və ya haradasa bir nöqtəli vergül itirdi. Auditoriya: Belə Shuttle pset üçün, mən Mən bunu zaman tıklayan dəfə düşünürəm browser, lakin heç bir şey, gündəmə gəldi Onlar ağ səhifə adlı nə. Lakin, çünki kodu idi. Mən JavaScript idi, sağ? Rob Bowden: Bəli. Auditoriya: Kaş ki, səhv hələ gəlib? Rob Bowden: Beləliklə, siz kazanılmış olmazdılar Bu səhv çünki hər şey web server baxımdan tamamilə gözəl idi. Amma index.html tələb. Siz shuttle.js tələb və service.js. Və uğurla qayıtmaq bacardı sizin o şeyi bütün - 200. OK. Bu brauzer üçün cəhd yalnız var JavaScript kodunu şərh edən kimi, gözləyin ki, bu deyil etibarlı JavaScript səhv. Hər hansı digər suallar? Bütün hüquqlar. DAVID J. MALAN: Belə ki, növbəti up sayı 11 oldu. Və 11 scariest idi bir çox insanlar üçün. Belə ki, ən mühüm şey burada qeyd etmək Bu, həqiqətən, haqqında idi ki, bir ikiqat bağlı siyahısı. Amma bu ötən il eyni deyil ikiqat bağlı siyahısı problem, Hansı verirlər vermədi siyahısı, əslində, çeşidlənməmiş ola bilər. Siyahısı çeşidlənməmiş idi ki, fakt və söz idi ki, çatdırmaq üçün var nəzərdə vurğuladı Bu, həqiqətən bir sadələşdirilməsi ki, başqa olardı nə bir daha çətin problem və bir daha. Belə ki, burada bir ümumi səhv qoymaq idi Sizin bir keçən ilki həll çağrı cihazı və sonra yalnız kor-koranə ki, surəti doğru olan cavab kimi aşağı fərqli bir suala cavab ruhda oxşar. Amma burada incəliklərini aşağıdakı kimi olmuşdur. Bir sözlə, biz bir node elan etmiş və burada adi şəkildə müəyyən edilmişdir. Sonra biz siyahısı qlobal müəyyən pointer null başlatılmış. Sonra yəqin, iki funksiyaları var biz burada prototipləri var, insert və aradan qaldırılması. Və sonra biz burada bir neçə nümunə kodu var bir insertions bir dəstə edir. Və sonra biz başa çatdırmaq üçün xahiş belə aşağıda daxil həyata keçirilməsi bu siyahısına daxil n edər ki, bir yol daimi vaxt, həmçinin vurğuladı, hətta artıq varsa. Belə ki, daxil edə olan gözəllik daimi vaxt bu nəzərdə tutur ki, daxil etmək lazımdır ki, yeni node harada? Önünə. Belə ki, təşəkkürlə, aradan qaldırır azı tələb üçün istifadə ki, hallarda bir bu kimi kodu daha xətləri etdi Keçən il və hətta sinif zaman biz şey bu cür vasitəsilə söhbət insanlar və bəzi şifahi yalançı kodu. Belə ki, burada həll, üzərində keçmək bildirin ki, bir vizual var ekran. Biz aşağıdakı edirik ki, görürsünüz. Və başqa sadələşdirilməsi qeyd idi ki, belə artıq indiki, bu deməkdir hətta əgər sayı bilərsiniz, var artıq, yalnız kor-koranə başqa daxil bu surəti. Və ki, bu da, bir olmaq üçün nəzərdə edilmişdir sadələşdirilməsi, ola bilər ki, , daha həqiqətən, bəzi diqqət intellektual maraqlı hissəsi və yoxlanılması bəzi əlavə səhv yalnız məhdud vaxt verilir. Belə ki, bu nümunə həllində, biz ayrılması sol-əl bir pointer bir node burada yan. İndi kimi, pointer həyata Rob bildirib, yalnız 32 bit edir. Və həqiqətən ehtiva etmir sizin qədər ünvanı bu ünvan təyin. Və biz sağ tərəfdən bunu malloc vasitəsilə yan. Yaxşı bir vətəndaş kimi, biz yoxlamaq malloc deyil, əslində, null, belə ki, biz təsadüfən yaratmaq deyil Burada bir segfault. Və heç bir zaman, həyat sizə malloc istifadə deyə, null yoxlanılması edilməlidir bir incə səhv var. Sonra biz ki null başlamaq n və əvvəlki və sonrakı təyin. Və burada bu halda, mən başlatılmış çünki bu yeni, null əvvəlki node yeni olacaq mənim siyahısı başlayan. Belə ki, var olacaq əvvəl heç bir şey. Mən mahiyyətcə əlavə etmək istədiyiniz yeni node mövcud siyahısı özünü siyahısı yanında bərabər yaradılması. Amma yalnız hələ həyata deyiləm. Siyahısını özü artıq mövcud Belə ki, əgər və ən azı bir node var idi artıq yerdə, bu siyahı əgər burada və mən, burada yeni node daxil əmin etmək lazımdır mənim keçmiş node mənim yeni node geri işarə, Bu, yenidən, çünki bir ikiqat bağlı siyahısı. Beləliklə, biz bir ağlı başında olma çek yoxdur. Artıq var, əgər siyahısı, null deyilsə sonra bir və ya daha çox qovşaqlarının, belə danışmaq istinad geri əlavə edin. Və sonra biz lazım olan son şey etmək üçün həqiqətən qlobal yeniləmə edir qeyd etmək dəyişən siyahısını özü ki, yeni node. Bəli. Auditoriya: pointer arrow [Işitilemez] yoxdur, null bərabərdir ki, siyahısı ilə məşğul çünki siyahısı null? DAVID J. MALAN: Xeyr. Ki, fəal olmaq sadəcə mənə Bu mənim əgər ki, ehtiyatlı bəlkə bir daha qovşaqlarının ilə orijinal siyahısı burada və mən daxil alıram mənim burada yeni node, var olacaq burada heç bir şey olacaq. Və mən bu fikri tutmaq istəyirəm əvvəlki qəbulu ilə yeni node null. Və ehtimalla, mənim kodu doğru əgər və daxil başqa heç bir yol var Bu funksiya başqa qovşaqlarının, ehtimalla, hətta siyahısı artıq var bu bir və ya daha çox qovşaqlarının, güman siyahısı, ilk node, olardı null özü əvvəlki göstərici. Auditoriya: Və yalnız bir takip. Siz növbəti bərabər pointer qoyulan səbəbi siyahısı göstərici edirik edir bu işarə ki, siyahı əvvəl növbəti hərhalda - I dəfndə - yalnız siyahıları? DAVID J. MALAN: Exactly. Və belə ki, həqiqətən iki işi hesab edək burada, həqiqətən, baxmayaraq biz onları hesab edəcəyik sifariş deyil kodu kimi çox eyni. Amma yüksək səviyyədə, əgər bu təmsil siyahısı və bu 32-bit edir pointer, sadə ssenari Bu default null edir. Mən əlavə etmək istəyirəm güman edirlər 50 nömrə oldu. Mən irəli getmək və ayrılması gedirəm ehtiva edir bir node, üç sahələri - n, əvvəlki, və növbəti. Mən sayı 50 qoymaq gedirəm burada, bu n olacaq. Bu yanında olacaq. Bu əvvəlki olacaq. Və mən bu halda nə etməliyəm? Yaxşı, mən yalnız burada line 1 etdik. Pointer n n olur. Mən əvvəlki deyərək alıram null almaq lazımdır. Belə ki, bu null olacaq. Sonra növbəti demək gedirəm siyahısını almaq üçün gedir. Və bu, yalnız yaxşı işləyir. Bu null edir. Və mən yeni node növbəti deyərək alıram sahəsində bu nə almaq lazımdır. Belə ki, orada başqa null qoyur. Və sonra son şey Mən burada yoxlamaq edirik. Siyahısı null bərabər deyil, əgər null bərabərdir, belə ki, biz keçmək cəmi. Və mən bütün növbəti siyahısını alır pictorially nəticələnən pointer, kimi bir şəkil. Belə ki, bir ssenari var. Və haqqında xahiş edilmişdir ki, bir xüsusilə bu kimi bir vəziyyət, biz artıq bir-node siyahısını olduğu. Mən orijinal geri getmək əgər problem şərhdə, biz will növbəti yalnız, demək 34 daxil müzakirə naminə. Mən yalnız rahat gedirəm burada ki, cəlb edir. Mən yalnız malloced etdik. Mən null yoxlanılması alıram daşımır. İndi başlamaq üçün gedirəm n 34 olmalıdır. Bu n olacaq. Bu yanında olacaq. Bu əvvəlki olacaq. Nin əmin I etmədi edək geri bu almaq. Əvvəlki birinci gəlir tərifində. Mənə bu düzeltmek bildirin. Bu, əvvəlki deyil. Bu növbəti edir. Bu eynidir, baxmayaraq üzrə ardıcıl qalsın. Əvvəlki. Bu növbəti edir. Mən yalnız yoxlanılır, mənim qeyd malloced etdik null node daxil 34 təyin. Əvvəlki null olur. Belə ki, mənə verir. Next siyahısı olur. Belə ki, siyahı bu. Belə ki, indi eyni rəsm kimi onlar bir işarə ki, arrow eyni. Və sonra mən yoxlanılması alıram siyahısı null bərabər deyil. Və bu vaxt deyil. Sonra siyahısı gedirəm Əvvəlki göstərici olur. Belə ki, əvvəlki siyahısı PTR olur. Belə ki, bu qoyaraq təsiri var Burada bir qrafik arrow. Və bir az əldə dalğalı, xətləri. Və sonra, nəhayət, Mən yeniləmək göstərici qeyd etmək edin. Belə ki, indi bu oğlan göstərir. İndi, bir sürətli edək ağlı başında olma kontrol. Burada siyahısı olan var qlobal dəyişən. İlk node, həqiqətən, 34 çünki Mən arrow aşağıdakı edirəm. Mən istəyirəm, çünki doğru siyahısının əvvəlində daxil bütün yeni qovşaqlarının. Onun növbəti sahəsində bu oğlan mənə gətirib çıxarır. Mən davam, mən növbəti null təşkil edib. Belə ki, artıq siyahı var. Mən əvvəlki hit varsa, mən almaq Mən gözləyirik geri. Belə ki, bir neçə göstəricilər hələ də var, açıq-aydın, manipulyasiya. Amma bunu bildirib ki, Bu daimi vaxt yalnız deməkdir şeyi bir sonlu sayı var Siz icazə edirik. Və ki sayı nə qədərdir? Bu, bir addım ola bilər. Bu iki ola bilər. 1000 addımlar ola bilər. Ancaq bilməz deməkdir ki, məhdud loop hər cür gedən var burada heç recursion, heç bir loops. Bu, yalnız ağır kodlu xətləri var bu nümunə var kodu kimi. Belə ki, növbəti problem 12 etməmizi istədi çıxarırıq həyata keçirilməsini başa Bu rədd ki, belə bir şəkildə aşağıda n xətti vaxt siyahıdan. Beləliklə, siz bir az daha çox rahat durmamak otaq indi. Siz n kəsb edə bilər, əgər bu Siyahıda, hazır olacaq heç bir dəfədən. Və çox viktorina-based olmaq deməkdir sadələşdirilməsi ehtimal ki, ki, siz sayı 50 haradasa tapmaq əgər Siyahıda, siz də yoxdur davam narahat hər cür axtarır, təkrarlamaq yalnız qalmaq olan 50 surəti, Sınırlı bir zaman bəzi minutia daxil. Belə ki, aradan qaldırılması ilə, bu bir mütləq idi daha çətin və daha çox yazmaq kodu. Lakin ilk baxışda, səmimi, güc böyük və bir şey kimi baxmaq siz ola bilər heç bir yol var viktorina ilə gəlmək. Amma biz fərdi addımlar diqqət əgər, ümid edirəm ki, birdən-birə olacaq Siz tətil ki, bu fərdi hər addımlar Aşkar anlamlı retrospect. Belə ki, bir nəzər salaq. Belə ki, birinci, biz göstərici başlamaq özü siyahısı. Mən xətti vaxt istəyirəm, çünki o deməkdir ki Mən bəzi loop üçün gedirəm. Və ortaq bir yol üzərində təkrarlamaq siyahısı strukturu və ya hər hansı bir qovşaqlarının strukturunun iteratively etmək məlumatların qarşısında bir pointer strukturu və sonra yalnız yenilənməsi başlayın bu və yol gəzmək məlumat strukturu vasitəsilə. Mən məhz bunu gedirəm. Pointer, mənim müvəqqəti dəyişən, edək, null bərabər deyil irəli getmək və yoxlamaq. Mən xoşbəxt almaq mı? Hal-hazırda Ben node olan n sahədir Bu bərabər baxaraq sayı I arıyorum? Və əgər, bir şey edək. İndi bu bildiriş əgər vəziyyət hamısını əhatə kod sətirləri. Bu qayğı yalnız bir şey - sual bir sıra tapmaq. Belə ki, heç başqa, asanlaşdırır var konseptual şeylər bir az. Amma indi, mən həyata, və siz ola bilər yalnız düşüncə sonra bu həyata keçirilir bir az vasitəsilə var əslində iki hallar burada. Bu node olduğu biridir bir olan siyahısında başlayan ki, çünki, az annoying bir xüsusi halda, siz məşğul, çünki bu şey, olan yalnız anomaliya deyil. Hər yerdə başqa siyahıda, eyni şey var. Bir əvvəlki node və növbəti var node, əvvəlki node, növbəti node. Amma bu oğlan bir az xüsusi o başında varsa. Belə ki, pointer siyahısını bərabərdir əgər özü, mən başında Ben əgər siyahısı və mən n gördük, mən lazım hər şeyi bir neçə etmək. Bir, mən siyahısını dəyişdirmək lazımdır Növbəti sahəsində, 50 işarə. Mən çalışıram Güman 34 aradan qaldırılması üçün. Belə ki, bu oğlan getmək üçün var üz yalnız bir anda. Mən demək gedirəm, siyahı Növbəti göstərici olur. Bəli, bu göstəricisidir. Next burada işarə edir. Belə ki, bu arrow hüququ dəyişir indi burada bu oğlan qeyd etmək. İndi, biz, xatırlayıram müvəqqəti dəyişən. Belə ki, biz hər hansı bir qovşaqlarının yetim deyil, Mən də bu oğlan var, çünki mənim çıxarırıq həyata keçirilməsi. Belə ki, indi əgər siyahısını özü, null deyil Mən bir az bir şey düzeltmek lazımdır. Mən indi əmin bu arrow etmək lazımdır, əvvəllər işarə edir hansı 34 50-dən, bu, getmək üçün var çünki qurtarmaq üçün çalışıram əgər 34, 50 daha yaxşı bir saxlamaq yox idi kimi ona cür geri istinad arrow irəli sürdü. Mən yalnız bu xətt. Beləliklə mən bitirdim. Bu halda, həqiqətən, olduqca asandır. Siyahısı başını Doğrama nisbətən sadə deyil. Təəssüf ki, bu var başqa annoying blok. Belə ki, indi mən baxılması üçün ortada bir şey var olduğu. Amma bu istisna olmaqla, çox dəhşətli deyil bu kimi sintaksis. Mən başında deyiləm əgər siyahısı, Mən haradasa ortasında deyiləm. Və burada bu xətt, deyib start Siz etdiyiniz hər hansı node at. Əvvəlki node növbəti sahəsində getmək və göstərici işarə. Nin pictorially bunu bildirin. Bu mürəkkəb əldə edilib. Mən burada bir əvvəlki sahələri varsa - Bu nə edək - burada növbəti yataqları. Mən daha çox mənim göstəricilərinə asanlaşdırmaq üçün gedirəm bütün dəstə çəkmək çox geri və irəli şeylər crisscrossing bir-birinə. Və indi, yalnız bu 1, 2 deyək Müzakirə naminə 3, hətta ki sıralamaq deyil, baxmayaraq söz mövzusu problem. Belə ki, burada mənim bağlı siyahı var. Mən bu iki aradan qaldırılması üçün çalışıram hekayə xüsusi versiyası. Belə ki, I pointer yeniləndi etdik bu oğlan işarə etmək. Belə ki, bu PTR edir. O, burada işarə edir. Bu mövcud olan, siyahısı qlobal əvvəlki kimi. O nə olursa olsun burada işarə edir. İndi, mən iki aradan qaldırılması üçün çalışıram. Pointer burada işarə edir, belə ki, mən deyiləm , yəqin, təqib gedir 1 mənə qoyur əvvəlki göstərici. Mən demək gedirəm ki, növbəti Bu mənə üzərində gətirən sahə, burada qutusu, gedir bərabər pointer növbəti. Belə ki, bu göstərici, bu yanında. O deməkdir ki, bu arrow ehtiyacları bu oğlan qeyd etmək. Belə kodu ki, xətt yalnız nə var bu bir az daşıyır. İndi, bu kimi baxır düzgün istiqamətdə addım. Biz mahiyyətcə 2 out snip istəyirəm 1 və 3 orta. Belə ki, biz istəyirik ki, hissi verir onun ətrafında marşrut bu göstərici. Belə ki, bu növbəti line yoxlanılması əgər pointer Növbəti null deyil, var 2 sağ həqiqətən kimsə, ki, biz də nə etmək lazımdır deməkdir bir az burada snip. Mən indi bu göstərici riayət etmək lazımdır və əvvəlki göstərici yeniləmə bir bir az etmək üçün bu oğlan burada burada nöqtə puç. İndi, bu vizual gözəl. Var ki, bu bir az messy var artıq 2 işarə yoxdur. 2 sol işarə edir. Və 2 sağ işarə edir. Lakin, o, istəyir nə edə bilər, çünki o azad almaq haqqında. Və nə etməz bu dəyərlər artıq. Nə vacibdir qalan ki uşaqlar yuxarıda marşrutlaşdırma olunur və indi onu aşağıda. And olsun ki, biz gələn nə var. Biz demək deməkdir biz pulsuz göstərici, əməliyyat sistemi, xoş gəlmisiniz Bu düzəltmək üçün. Və sonra nəhayət, biz qayıtmaq. Else dolayısı, əgər biz hələ geri deyil, biz axtarır saxlamaq üçün var. Belə ki, pointer yalnız növbəti göstərici bərabərdir burada bu oğlan hərəkət deməkdir. Burada bu oğlan keçin. Burada bu oğlan hərəkət əgər, əslində, biz sayı tapmadı biz hələ aradığınız. Belə səmimi, bu, tamamilə görünür böyük, mən ilk, düşünmək nəzər, xüsusilə mübarizə əgər Bu viktorina ərzində sonra bax bu kimi bir şey. Və siz geri özünüz Pat. Bəli, mən ola bilər heç bir yol var viktorina ilə gəlmək. Amma siz, müdafiə edirəm siz qırmaq əgər bu fərdi daxil aşağı yalnız hallar və onun vasitəsilə gəzmək diqqətlə, etiraf, altında olsa da, stres hallar. Təşəkkürlə, şəkil etdi xoşbəxt hər şey. Siz bu cəlb edə bilər yollar bir sıra. Siz crisscrossing etmək yoxdur burada bir şey. Siz düz ilə bunu edə bilər bu kimi xətləri. Amma bu problemin mahiyyət, Ümumiyyətlə, həyata idi ki, sonunda şəkil bir az baxmaq lazımdır bu kimi bir şey, çünki daimi zaman saxlamaq ki, nəzərdə tutulmuş parazit və parazit və parazit burada başında yeni qovşaqlarının siyahısı. Hər hansı bir sualınız? Yəqin ki, ən çətin əlbəttə coding suallar. Auditoriya: Belə oxşar siyahısı əvvəlki nümunələri başı. DAVID J. MALAN: Məhz, dəqiq. Yalnız fərqli bir ad qlobal dəyişən. Dünya geniş nə? Rob Bowden: OK. Belə ki, bu siz biridir Bu paraqraf yazmaq idi. Bəzi insanlar oçerklər yazmışdır Bu sual üçün. Amma yalnız bu altı terminlərdən istifadə etmək lazımdır zaman nə təsvir etmək Siz facebook.com əlaqə üçün cəhd edin. Mən yalnız prosesi vasitəsilə danışmaq lazımdır bütün bu şərtləri istifadə. Belə ki, bizim browser, biz facebook.com yazın və Enter düyməsini basın. Belə ki, bizim browser bir inşa edəcək HTTP göndərmək olacaq ki, tələb Facebook bəzi prosesi Facebook ilə bizə cavab Öz page HTML. Belə ki, prosesi nədir olan HTTP sorğu Facebook həqiqətən olur? Belə ki, birinci, biz tərcümə etmək lazımdır Facebook.com. Belə ki, yalnız adı Facebook.com verilir əslində HTTP isteği yoxdur yerləşir getmək lazımdır? Beləliklə, biz Facebook.com tərcümə etmək lazımdır bir IP ünvan, hansı benzersiz nə maşın biz, həqiqətən, müəyyən Bu sorğu göndərmək istəyirəm. Sizin laptop bir IP ünvanı var. Internetə bağlı bir şey bir IP ünvanı var. Belə ki, DNS, Domain Name System ki, nə tərcümə idarə etmək olacaq facebook.com bir IP ünvan ki, Siz, həqiqətən, müraciət etmək istəyirəm. Beləliklə, biz DNS server əlaqə və demək, facebook.com nədir? Bu oh, bu IP ünvanı 190,212 var, deyir bir şey, bir şey, bir şey. Bütün hüquqlar. İndi nə maşın Mən müraciət etmək istəyirəm. Beləliklə, sizin HTTP sorğu göndərin ki, maşın üzərində. Belə ki, necə ki, maşın almaq deyil? Yaxşı, sorğu gedir router dönen üçün router. Sinfində nümunə saxla, harada biz, həqiqətən marşrutu gördüm ki, biz cəhd zaman paket etdi ünsiyyət. Biz Atlantik üzərində jump gördüm Bir nöqtə və ya hər hansı at Ocean. Belə ki, ötən dövr port. Belə ki, bu kompüter indi. Hal-hazırda çox şeylər ola bilər internet ilə ünsiyyət. Mən, demək, Skype çalışan ola bilər. Mən açıq bir web browser ola bilər. Mən bir şey ola bilər ki, faylları Torrenting. Belə ki, bu şeyi bütün ilə ünsiyyət bir şəkildə internet. Sizin kompüter müəyyən məlumatlar alır zaman internet, necə yoxdur nə proqram həqiqətən məlumat istəyir? Bu olub necə bilir məlumat üçün nəzərdə tutulur qarşı tətbiq Torrenting web browser? Belə ki, bu portların məqsədi Bu applications bütün var bilgisayarınızda bir port iddia etdi. Belə ki, web browser, hey deyir Mən port 1000 dinləmək alıram. Və Torrenting proqram deyib, Mən port 3000 dinləmək alıram. Və Skype I port 4000 istifadə edirəm, deyir. Bəzi məlumatları almaq zaman məxsusdur Bu applications biri məlumatlarına olan port ilə qeyd olunur ki, əslində birlikdə göndərilməlidir. Belə ki, bu oh, mən məxsusdur deyir port 1000. Mən bundan sonra bu irəli lazımdır bilirik mənim web browser boyunca. Belə ki, səbəb burada müvafiq web server edirlər ki, port 80 qulaq asmaq. Mən Facebook.com əlaqə Belə ki, mən deyiləm bəzi maşın ilə ünsiyyət. Amma hansı port demək lazımdır Mən ünsiyyət istəyirəm maşın. Və web server olmaq üçün edirlər port 80 dinləmək. Onlar istəyirdi, onlar müəyyən edə bilər up belə ki port 7000 kimi siyahıları. Və sonra bir web browser, mən bilər üçün 7000: əl Facebook.com yazın port 7000 üçün sorğu göndər Facebook web server. DAVID J. MALAN: Və bu halda, hətta biz tələb etməyib, baxmayaraq ki, insanlar Bu qeyd, bu halda, nə port sorğu həqiqətən getmək istəyirsiniz? Yenidən cəhd edin. Məhz. Bir incelik üçün axtarır, lakin ki heç biri son var. Rob Bowden: Belə HTTPS, bu ildən üçün xüsusi dinləmək şifrelenir, bu port 4430 var. Auditoriya: Və e-poçt 25 var, sağ? DAVID J. MALAN: Giden e-poçt, 25, yep. Rob Bowden: Mən hətta ən bilmirəm - bu aşağı olanları bütün olmaq üçün edirlər şeylər üçün qorunur. Mən hər şey edirəm altında 1024 qorunur. Auditoriya: Niyə dedin 3 yanlış sayı idi? Rob Bowden: Çünki bir IP ünvanı, rəqəm dörd qruplar var. Onlar 0-dan 255 istəyirik. Belə ki, 192.168.2.1 bir ümumi yerli şəbəkə IP ünvanı. O bütün 255-dən azdır edək. Mən 300 ilə başlayan zaman ki, bəlkə ola bilməz nömrələri biri olmuşdur. DAVID J. MALAN: Lakin silly clip - bu onlar bir olduğu CSI idi sayı çox böyük idi IP ünvan üçün. Rob Bowden: Bu hər hansı suallar? Növbəti bir, belə tam dəyişiklik mövzu, lakin biz bu PHP array var Dörd ildə evlər. Və biz bir unordered siyahısı var. Və biz hər elementi çap etmək istəyirəm yalnız ev adı olan. Beləliklə, biz bir foreach loop var. Belə ki, sintaksis foreach unutmayın, array maddə kimi array. Belə ki, loop hər iteration vasitəsilə, ev bir almaq üçün gedir serialın içərisində dəyərlər. Ilk iteration, ev Cabot House olacaq. Ikinci iteration, ev olacaq belə Courier House və. Belə ki, ev kimi hər dörd, biz istəyirik yalnız çap üçün gedir - siz də dəstəklənmişdir bilərdi - sonra siyahısı maddə və ev adı və sonra siyahısı maddə bağlayın. Bu qıvrım aşırma burada isteğe bağlıdır. Və sonra biz də sual etdi özü, yaxın unutmayın Rəqəmsiz siyahı tag. Beləliklə, biz PHP rejimindən çıxmaq lazımdır Bunu etmək üçün. Yoxsa biz dəstəklənmişdir bilərdi Rəqəmsiz siyahı tag yaxın. DAVID J. MALAN: burada da gözəl olardı bir köhnə məktəb istifadə etmək olmuşdur = 0 0 $ i ilə loop və sayar istifadə Bu ray uzunluğu anlamaq. Ümumilikdə gözəl çox, bir az wordier. Auditoriya: Belə ki, üçün gedir, əgər [Işitilemez], sən nə olardı - Mən loop [işitilemez] nə unutmayın. Siz dörd bracket i $ istəyirsiniz? DAVID J. MALAN: Exactly. Bəli, dəqiq. Rob Bowden: Başqa bir şey? DAVID J. MALAN: Bütün hüququ. Ticarət-off. Belə ki, cavab dəstələri var idi Bu hər biri üçün mümkün. Biz, həqiqətən, yalnız aradığınız bir ayaq və məcburedici bir şey bir İşin mənfi tərəfi odur. Və sayı 16 users 'doğrulama, xahiş input klient, JavaScript kimi, əvəzinə server-yan, PHP kimi. Belə ki, nə bir ayaq var bunu klient? Yaxşı, biz təklif şeyi biridir gizlilik azaltmaq ki, siz, çünki əlaqə narahat yoxdur bir neçə bilər server olan ms və ya saniyə hətta bir neçə ki, aradan qaldırılması və yalnız istifadəçilərin giriş klient tərəfindən doğrulama bir on-təqdim handler tetiklemesini və yalnız onlar yazın idi yoxlanılması Ad şey? Onlar bir şey yazın mi e-mail ünvanı üçün? Onlar bir yurt seçdin açılan menyu? Siz onlara ani rəy verə bilər Bu GHz kompüter istifadə edərək, və ya onlar ki, nə olursa olsun həqiqətən onların stolüstü. Belə ki, yalnız daha yaxşı bir istifadəçi var adətən yaşamağa. Amma klient bunu bir İşin mənfi tərəfi odur qiymətləndirmə, siz də olmadan bunu əgər server-side doğrulama edir ki, CS50 gələn ən hər kəs bilir Siz yalnız istədiyiniz məlumat göndərə bilərsiniz ki, bir server yollar bir sıra. Açığı, ən hər hansı bir browser, siz parametrləri və yalnız ətrafında basın JavaScript söndürmək, hansı ki, Buna görə də, hər hansı formada aradan qiymətləndirmə. Amma siz də geri bilər ki, hətta mən istifadə sinif bəzi gizli şeylər etdi telnet və həqiqətən iddia GET göndərməklə browser ola bir server sorğu. Və əlbəttə deyil bir JavaScript istifadə. Yalnız mənə əmrləri yazaraq oldu bir klaviatura. Belə ki, həqiqətən, kifayət qədər hər hansı bir proqramçı web və HTTP ilə rahatlıq o istəyir nə data göndərə bilər qiymətləndirmə olmadan server. Və server də yoxlanılması deyil əgər, onlar mənə bir ad vermək idi ki, Bu, həqiqətən, cari e-mail etdi onlar bir yurt seçmək, son bilər up daxil saxta və ya yalnız boş data Sizin bazasında olan yəqin ki, yaxşı bir şey olacaq deyil əgər Siz orada idi fərz edilmişdir. Belə ki, bu annoying reallıqdır. Lakin general, müştəri tərəfində qiymətləndirmə böyükdür. Amma bu iki dəfə çox iş deməkdir. Müxtəlif mövcud var baxmayaraq üçün kitabxanaların, JavaScript kitabxana Məsələn, bu çox etmək baş ağrısı daha az. Və siz kodu bəzi təkrar edə bilərsiniz server-side, klient. Amma bu adətən olduğunu dərk edirsiniz əlavə iş. Bəli. Auditoriya: Belə ki, biz yalnız az təhlükəsiz bildirib - DAVID J. MALAN: [gülür] Uf. Həmin həmişə çətindir qərar olanlar. Rob Bowden: Bu ki qəbul edilmişdir. DAVID J. MALAN: Nə? Rob Bowden: Mən bu problem yaratdı. Ki, qəbul edərdi. DAVID J. MALAN: Bəli. Auditoriya: Cool. Rob Bowden: Amma biz qəbul etmədi ilk bir - yaxşı, nə biz aradığınız edir sizin kimi bir şey yoxdur server ilə ünsiyyət. Biz yalnız daha sürətli qəbul etmədi. Auditoriya: haqqında səhifə yeniden yoxdur? Rob Bowden: Bəli. Yəni qəbul cavab idi. DAVID J. MALAN: biz hiss Anything Bu ehtimal deyil daha çox ehtimal idi Siz nə bilirdi ki, çətin olan deyərək bəzən çəkmək line. Əvəzinə bağlı siyahısını istifadə edərək qorumaq üçün bir sıra bir integers siyahısı sıralanır. Bağlı ilə belə bir ayaq biz tez-tez istinad onların bütün motivasiya ki, siyahıları giriş siz dinamizm almaq idi. Onlar inkişaf edə bilər. Onlar shrink. Beləliklə, siz hoops vasitəsilə jump yoxdur həqiqətən daha çox yaddaş yaratmaq bir sıra ilə. Yoxsa yoxdur yalnız demək, sorry, istifadəçi. Bu array doldurulur. Siyahısı belə dinamik artım. Bağlı siyahıları olsa İşin mənfi tərəfi odur? Auditoriya: Bu xətti var. Bağlı siyahı axtarış xətti yerine daxil nə DAVID J. MALAN: Exactly. Bir bağlı siyahı axtarış xətti, sıralanır belə, siz, çünki yalnız bu çörək qırıntıları edin, bu göstəricilərinə, siyahının başlanğıc sonuna. Siz təsadüfi giriş və leverage bilməz, beləliklə, ikili axtarış, bu, hətta sıralanır, ola bilər ki, bir sıra ilə. Və bir dəyəri də var. Bəli. Auditoriya: Yaddaş səmərəsiz? DAVID J. MALAN: Bəli. Bəli, mən mütləq deyil ki səmərəsiz deyirlər. Amma bu daha çox yaddaş başa etmir, hər üçün 32 bit lazımdır, çünki əlavə göstərici node, at story bağlı siyahı ən. İndi, yalnız integers saxlanılması edirsinizsə Siz göstərici əlavə edirik ki, var həqiqətən cür qeyri-mənasız. Bu yaddaş həcmini ikiqat oldu. Amma əslində, əgər saxlanılması edirik bir ola bilər ki, structs və əlaqəli siyahısı 8 bytes, 16 bytes, daha çox, bəlkə az marjinal bir dəyəri. Amma bu yenə bir dəyəri var. Belə ki, o ya var ki downsides kimi gözəl olmuşdur. 18. Yazmaq PHP əvəzinə C istifadə bir command-line proqramı. Belə ki, burada istifadə etmək tez-tez sürətli bir PHP və ya Ruby və ya Python kimi dil. Siz yalnız tez açmaq bir mətn redaktoru up. Siz daha çox funksiyaları var sizin üçün. PHP funksiyaları mətbəx sink var, C, halbuki çox, çox az var. Əslində, uşaqlar ağır yol bilirik Siz hash masalar yoxdur. Siz siyahıları bağlıdır yoxdur. Bu istəyirsinizsə, sizə onlara özünüzü həyata. PHP belə bir ayaq və ya, həqiqətən, hər hansı bir şərh dil sürətlilik edir olan Əgər kodunu yaza bilərsiniz. Amma bir İşin mənfi tərəfi odur, biz bu görəndə mən tez bir misspeller qədər çırpılmış PHP istifadə mühazirə təzahürüdür ki, bir şərh dil istifadə adətən gec. Və biz bir ilə aşkar olduğunu gördüm 3 0.3 saniyə zaman artacaq çünki şərh saniyə, ki, həqiqətən olur. Digər ayaq idi ki, siz tərtib etmək yoxdur. Belə ki, bu da inkişaf hızlandırır Yeri gəlmişkən, siz yoxdur, çünki bir proqram çalışan iki addımlar. Siz yalnız bir var. Və belə ki, olduqca çekici həmçinin. Bir SQL verilənlər bazası istifadə edərək əvəzinə məlumat saxlamaq üçün bir CSV faylı. Belə ki, SQL verilənlər bazası pset7 üçün istifadə olunur. CSV faylları çox istifadə etməyib. Amma kimi pset7 dolayı istifadə yaxşı Yahoo Maliyyə söhbət. Amma CSV yalnız bir Excel fayl kimi, lakin super sadə, sütunlar olduğu yalnız daxili vergüllə demarked bir başqa mətn faylı. Və bir SQL verilənlər bazası istifadə edir bir az daha çekici. Siz hər şeyi almaq, çünki bu, bir ayaq var kimi seçin və daxil edin və silin. Və siz, ehtimalla, indekslər almaq MySQL və kimi digər məlumat bazaları, Oracle, yaddaş sizin üçün qurmaq olan Sizin seçin yəqin deyil deməkdir alt xətti üst olacaq. Bu, həqiqətən bir şey olacaq Binar axtarış və ya bir şey kimi ruhda oxşar. Belə ki, onlar ümumiyyətlə daha sürətli istəyirik. Amma bir İşin mənfi tərəfi odur ki, yalnız daha çox iş var. Bu daha çox səy var. Siz verilənlər bazası anlamaq lazımdır. Siz qurmaq lazımdır. Siz çalıştırmak üçün bir server lazımdır ki, verilənlər bazası. Siz anlamaq lazımdır konfiqurasiya. Belə ki, bu yalnız bu ticarət-off növləri. Bir CSV fayl, siz Halbuki gedit ilə yaradır. Və siz getmək iyi. Kənarda heç bir mürəkkəblik var. Əvəzinə hash masa bir trie istifadə edərək saxlamaq üçün ayrı zəncirləmə ilə xatırladan sözlərin lüğət pset5 edir. Belə ki, bir nəzəriyyə, ayaq çalışır ən azı, nədir? Constant zaman, ən azı değilseniz fərdi hər hashing sizin kimi bir söz məktublar, pset5 üçün ola bilər. Beş hashes, altı ola bilər beş və ya altı var əgər hashes söz məktublar. Və olduqca yaxşı. Və bir üst bound var əgər necə uzun sözləri ola bilər ki, var həqiqətən asymptotically daimi vaxt. Halbuki ayrı bir hash table ki orada problem chaining məlumat strukturunun növ ki, Sizin alqoritmlərinin performans adətən şeyi sayından asılıdır artıq data strukturunda. Ki, mütləq ilə işi var zəncirlər, qovuşdurmağımız qoymaq daha stuff bir hash masa daxil, artıq o zəncirlər ən pis deməkdir ki, getmək halda, siz axtarır bilər şey bütün yol bir sonunda o zəncirlər təsirli olan xətti bir şey daxil devolves. İndi, təcrübədə, bu, tamamilə ola bilər ki, bir hash table ilə işi zəncirlər bir müvafiq daha sürətli trie həyata keçirilməsi. Amma arasında, müxtəlif səbəblərə görə çalışır, bir çox istifadə olan yaddaş göstərir ki, əslində, yavaş şeylər aşağı, siz gözəl deyil, çünki caching deyilən bir şey faydaları, birlikdə yaxın olan şeylər yaddaş əldə edə bilərsiniz tez-tez daha tez. Və bəzən ilə gəlmək olar həqiqətən yaxşı hash funksiyası. Siz bir az sərf olsa belə yaddaş, siz, həqiqətən, ola bilər sürətli və şeyi tapmaq kimi pis xətti. Belə ki, qısa, mütləq yox idi bu bir və ya hətta iki hər hansı biz aradığınız xüsusi şeylər. Inandırıcı həqiqətən bir şey bir ayaq və mənfi kimi ümumiyyətlə, bizim göz tutuldu. Rob Bowden: Belə ayaq üçün, biz öz qəbul "sürətli". Siz bu barədə bir şey demək idi. Siz nəzəri sürətli olsa da, biz sizə cür aydın bilirdi ki, Bu 1 0 var ki. Və hash table, nəzəri, 1 0 deyil. Uzunluğu haqqında bir şey qeyd ümumiyyətlə xal var. Amma "sürətli" həllər ən çox çalışır idi ki, böyük board həllər daha obyektiv yavaş ki, hash masalar idi. Belə ki, daha sürətli və özü həqiqətən doğru deyil. DAVID J. MALAN: Dom de dom dom. Mən yəqin ki, həyata keçirir ki, yalnız bir deyiləm ki, ehtimal ne var sağ, elan edilə? Rob Bowden: Mən, həqiqətən yox idi. DAVID J. MALAN: Bu etdi başımda mənada. Rob Bowden: Mən bu yapýyorum. OK. Belə ki, bu heç-heçə olduğu biridir sizə bənzər diagram bilər keçmiş imtahanlarında gördük. Belə ki, yalnız bu baxaq. Belə ki, HTML node, biz iki uşaqlar, baş və bədən. Beləliklə, biz filial - baş və bədən. Başçısı adı tag var. Beləliklə, biz bir adı var. İndi, bir şey bir çox insan unuttum Bu mətn qovşaqlarının ki Bu ağac çərçivəsində elementləri. Belə ki, burada biz oval kimi onlara çəkmək üçün baş Bu onları fərqləndirmək üçün qovşaqlarının növləri. Ancaq xəbərdarlıq, həmçinin burada biz üst var, orta və alt olan qədər başa çatacaq mətn qovşaqlarının. Belə ki, o unutmadan qədər idi bir ümumi səhv. Bədən üç övladı var - Bu üç divs. Belə ki, div, div, div və sonra mətn o DIVS üzvü node uşaqlar. Ki, olduqca çox var ki, suallara. DAVID J. MALAN: Və qeyd dəyər, biz bu dayanmaq yoxdur, baxmayaraq ki, biz sərf vaxt ətraflı Sifariş ki, JavaScript, ildə ki, məsələ texniki. Belə ki, baş bədənə əvvəl gəlir əgər HTML, onda görünür olmalıdır faktiki DOM orqanının buraxdı. Onun yalnız Bilginize, ümumiyyətlə, ki, sənəd üçün deyilən bir şey, burada Bu məsələ yoxdur. Və siz bir parser həyata əgər, binasında HTML deyilir ki, bir proqram yaddaş ağac qədər, vicdanlı olmaq, yəqin ki, daxilən nə siz hər halda bunu - alt üst, sağ. Rob Bowden: Ki Suallar? Mən növbəti bir nə lazımdır? DAVID J. MALAN: Sure. Rob Bowden: OK. Belə ki, bu dağıtmaq bu bufer hücum sual. Burada tanımaq üçün əsas şey, yaxşı, necə ola bilər bir rəqib oyun həyata bu proqram ixtiyari kodu? Belə ki argv1, ilk command line bu proqram dəlil ki, ola bilər özbaşına uzun. Lakin burada biz surəti memcpy istifadə etdiyiniz argv1, burada bar edir. Biz arqument kimi keçən edirik. Və belə ki, adı bar alaraq. Beləliklə, biz bar memcpying edirik Bu bufer c daxil. Biz neçə bytes çıxarmaq olunur? Yaxşı lakin bir çox bytes bar olur ki, dəlil uzunluğu istifadə. Amma c yalnız 12 bytes genişdir. Beləliklə, biz bir command line arqument yazın əgər 12 bayt daha artıq, biz istəyirik Bu daşqın gedir xüsusi bufer. İndi, necə bir rəqib bezemek bilər əsassız kodu icra daxil proqram? Belə ki, burada xatırlamaq əsas foo çağırır. Və sonra əsas zəngləri foo. Bu cəlb edək. Belə ki, biz yığını var. Və əsas bir yığını çərçivəsində var alt. Bir nöqtədə, əsas zəngləri foo. Yaxşı, dərhal, əsas zəngləri foo. Və foo öz yığını çərçivəsində olur. İndi, bir anda, foo geri gedir. Və foo yekunları getdi, biz bilmək lazımdır Əsas biz daxilində nə kodu xətt bilmək üçün olduğu biz əsas davam etməlidir. Biz bütövlükdə foo zəng edə bilərsiniz müxtəlif yerlərdə dəstə. Necə harada qayıtmaq bilirik? Yaxşı, biz ki, haradasa saxlamaq lazımdır. Belə ki, haradasa sağ buralara, biz saxlamaq biz bir dəfə qayıtmaq lazımdır foo qaytarır. Və bu qaytarılması ünvanı. Belə ki, necə bir rəqib faydalana bilər bu faktdır ki, Bu bufer c saxlanılır, edək burada c, demək. Beləliklə, biz c 12 bayt var. Bu c. Və bu foo nin yığını ring edir. Zərərli istifadəçi daxil olur, belə ki, əgər 12-dən çox bayt və ya onlar bir komanda daxil 12 artıq ki line arqument simvol, sonra biz olacaq Bu bufer daşqın. Biz davam edə bilər. Və bir anda, biz uzaq getmək biz başlamaq ki, kifayət qədər bu qaytarılması ünvanı overwriting. Belə ki, bir dəfə biz geri ünvanı üzerine Bu o deməkdir ki, zaman foo qaytarır, biz hər yerdə dönən etdiyiniz Pisniyyətli istifadəçi ilə izah olunur Bu nə ilə daxil nə dəyəri simvol istifadəçi daxil. Və belə zərərli istifadəçi edilir əgər xüsusilə ağıllı, o, bu ola bilər Bu printDef haradasa qayıtmaq funksiyası və ya malloc yerdə funksiyası, yalnız hər yerdə ixtiyari. O nə əgər hətta daha ağıllı deyil istifadəçi burada qayıt. Və sonra həyata başlamaq Bu kodu xətləri kimi. Belə ki nöqtədə, istifadəçi daxil edə bilərsiniz o, bu regiona istəyir nə. O tam nəzarət var proqram üzərində. Ki Suallar? Belə ki, növbəti sual tam deyil belə bir şəkildə foo reimplementation artıq həssas ki. Belə ki, yolları bir neçə var Bunu bilərdi. Biz hələ yalnız c var uzunluğu 12 olan. Bu bilərdi Sizin həll hissəsi kimi. Biz də etmək üçün bir çek əlavə əmin bar null deyildi. Sizə lazım deyil, baxmayaraq tam kredit. Beləliklə, biz ilk yoxlanılması olduğunuz bar simli uzunluğu. Sonra, 12 daha əgər həqiqətən surəti yoxdur. Belə ki, bu təyinat bir yoldur. Təyinat başqa bir yolu əvəzinə c olan yalnız uzunluğu 12 ola, bu, uzunluğu strlen (bar) ola bilər. Təyinat bir yoldur həqiqətən, yalnız qayıtmaq üçün. Belə ki, yalnız bütün xilas kazanılmış əgər Bu, yalnız bütün silindi əgər kodu xətləri, siz kazanılmış olardı tam kredit, bu funksiya bəri həqiqətən bir şey yerinə yetirmək deyil. Bu command line çıxarmaq oldu bəzi array daxil arqument onun yerli yığını çərçivəsində. Və sonra bir şey qayıdır. Və nə bu həyata getdi. Belə ki, geri dönüşü də kifayət qədər idi tam kredit əldə yol. DAVID J. MALAN: Not olduqca ruhunun sual ancaq başına məqbul Buna baxmayaraq spec. Rob Bowden: ki, hər hansı haqqında suallar? Bir şey ki, siz ən azı kodu tərtib etmək lazımdır. Texniki siz deyil ki, baxmayaraq ki, həssas və sizin kodu deyil, əgər tərtib, biz qəbul etmədi. No suallar? OK. DAVID J. MALAN: Siz istəyirsiniz bu mövzu demək? Rob Bowden: Xeyr DAVID J. MALAN: Belə ki, bu bir, bu yaxşı xəbər və ya pis xəbər ya idi. Bu sözün eyni problem deyil ilk viktorina kimi. Və demək olar ki, eyni pset1 kimi problem. Amma bu qəsdən olmaq sadələşdirilmiş edilmişdir sadə piramida, ola bilər ki, bir bir az ilə həll sadə iteration. Və həqiqətən, nə biz əldə edilmişdir burada, çox məntiqi deyil yəqin ki, bu baxımdan, siz istəyirik, çünki idi daha çox rahat loops və ya niyə loops üçün ilə həftə bir, lakin həqiqətən ki, ayrı tease üçün Siz bir az rahat olduğunuzu PHP yalnız nə deyil ki, anlayışı proqramlaşdırma. Bu, həqiqətən bir dil kimi istifadə edilə bilər command line proqramları yazmaq üçün. And olsun ki, biz çalışırıq nə var diqqət çəkmək üçün. Bu command line PHP proqramdır. Belə ki, burada C kodu edərkən doğru C, PHP üçün doğru deyil. Amma kodu həqiqətən eyni. Siz Quiz həllər müqayisə etsək Quiz 1 qarşı 0, siz ki, tapa bilərsiniz Bu istisna olmaqla, demək olar ki, eyni deyil Bəzi dollar əlamətləri və üçün bir veri növü olmaması. Xüsusilə, biz burada bir nəzər, Bu, biz təkrarlamaq ki, görürsünüz halda, 1-dən 7 ilə qədər. Biz bunu 0 index edə bilərdi. Amma bəzən, mən yalnız hesab şeylər haqqında düşünmək əqli asan 1-dən 7. Siz bir blok istəyirsinizsə, sonra iki blokları, sonra üç, sonra nöqtə, nöqtə, yeddi nöqtə. Biz 1 j başlatılmış etdirilir və sonra i qədər hesablanması. Və burada hər şey başqa eyni. Lakin qeyd edilir şeyi bir neçə. Biz bu iki xətləri, bu ilk vermək goofily bir shebang kimi adlı bir, kəskin Bang. Və yalnız yol ifadə etdiyini bir proqram ola bilər qovluq, Siz istifadə etmək istədiyiniz ki, Bu fayl şərh. Və ki, sonra xətti, Əlbəttə ki, PHP rejimində daxil deməkdir. Və çox alt xətt exit PHP rejimi deməkdir. Və bu, ümumiyyətlə, işləyir languages ​​şərh. Yazmaq əgər bu cür annoying bir foo.php adlı bir fayl proqram. Və sonra users üçün yalnız , bu proqram çalıştırmak üçün, OK xatırlayıram, mən yazın "php kosmik foo.php." Cür başqa bir şey varsa annoying. Və bu da göstərir ki, proqram bütün olmayan PHP, yazılı ki, istifadəçi üçün İşıqlandırıcı. Beləliklə, siz tamamilə. Php kaldırabilirsiniz mühazirə xatırlayıram. Və həqiqətən. / Foo edə bilərsiniz əgər Siz edərək onu chmodded etdik çalıştırılabilir. Belə ki, chmod a + x foo ki edərdi. Və siz də shebang burada əlavə edin. Lakin, həqiqətən, problem əldə edilib bu kimi bir şey həyata çap. No HTML, əlbəttə ki, heç C-kodu, yalnız bəzi PHP. Belə ki, Milo sonra problem 25 döndü. Və 25, aşağıdakı verildi bir olan skelet kodu, olduqca sadə web page. Və sulu hissəsi HTML-müdrik aşağı idi burada, biz bədən daxilində var giriş unikal ID edir ki, bir forma içərisində iki giriş, biri idi adı, biri bir fikir düyməsini bir fikir. Ilk, növü, mətn idi tipli ikinci təqdim. Və biz, həqiqətən, daha sizə verdi Siz yalnız belə, lazım çox maddələr Sizlərin olan variantları idi Bu problemi həll etmək. Siz ciddi ehtiyac yoxdur bu kimlikleri bütün. Ancaq həll etməyə imkan verir Bu müxtəlif yollarla. Və üst, qeyd edir ki, obyektiv tetiklemek üçün idi bu kimi bir pəncərə - Hello, Milo - istifadə edərək brauzerinizin açılır əgər super sadə çirkin deyil, siqnalı funksiyası. Və belə ki, nəticədə, bu sonunda aşağı konseptual birtəhər üçün dinləmək formu klient müraciətlərinə , Birtəhər deyil server-side, ki, təqdim cavab istifadəçi yazdığınız dəyəri qənimətçilik adı sahəyə, sonra bir uyarı orqanı tapılanlar. Beləliklə, siz bunu edə bilərsiniz bir yol ilə bir az görünür jQuery, ilk syntactically şaşırtıcı. Siz təmiz DOM kodu ilə bunu edə bilərsiniz - ID document.getelement. Lakin bu versiya bir nəzər salaq. Mən əhəmiyyətli bir neçə var xətləri ilk. Bir sözlə, biz olan bu xətt var Siz görmüşəm bilər nə üçün eynidir Mən inanıram ki,, form2.html Həftə 9 sinif. Və bu, yalnız icra deyib aşağıdakı kodu zaman sənəd hazırdır. Bu əhəmiyyətli olan yalnız çünki HTML pages üst oxunur sağ sol alt. Ona görə də, Siz cəhd əgər bəzi DOM qədər burada kodu şey element, bəzi HTML tag ki, aşağı burada, çox tezliklə bunu edirik, Bu belə deyil, çünki yaddaş daxil oxundu. Belə ki, bu document.ready deyərək line, deyirdik edirik, burada kodu, browser var. Lakin bütövlükdə qədər bu icra etmir sənəd hazır ki, DOM edir ağac yaddaş mövcuddur. Bu bir az daha çox syntactically bir halda, sadə bit müxtəlif, mən deyirəm harada grab onun unikal HTML element identifikator giriş edir. Ki, nə hash tag var , unikal ID bildirir. Və sonra mən zəng edirəm. Təqdim edir. Belə ki,. Burada təqdim bir funksiyası başqa, edir üsulu kimi tanınan, ki sol-əl obyekt daxili Mən qeyd etməyib ki, orada yan. Bir obyekt kimi giriş düşünmək belə əgər yaddaş - və həqiqətən edir. Bu ağac bir node var - . Vasitələrini təqdim zaman bu forma ilə Bu ID təqdim olunur, icra Aşağıdakı kodu. Mən qayğı yoxdur nə adı funksiyası icra edirəm ki,. Belə ki, burada nə kimi əvvəl, istifadə edirəm Bu lambda funksiyası və ya çağırıb anonim funksiyası. Bu, bütün intellektual deyil heç bir adı var maraqlı başqa, yalnız əgər gözəl olan heç bir dəfə zəng etmək üçün gedir. Və içəridə Mən, həqiqətən, idarə şəklində təqdim. Mən ilk bir dəyişən elan dəyəri adlanır. Və sonra bu təsiri nədir burada hissəsi artıq qeyd? Ki, bir at nə Mənim üçün yüksək səviyyəli? Auditoriya: Bu dəyəri olur ki, istifadəçi aşağıdakı HTML etmədi. O ki, ID alır və Bunun qiymətini tapır. DAVID J. MALAN: Exactly. O, unikal, node Polip identifikator adı. Bu, orada dəyər alır deyil, ehtimalla, nə istifadəçi onu və ya özü yazılmış. Və sonra saklar ki, bu dəyişən dəyəri adlanır. Bir kənara kimi, siz də ola bilər bir az fərqli bu işlər. Bir şey etməklə tamamilə məqbul yalan var dəyər alır document.getElementById. Bir az görə və bu jQuery istifadə etmək yorucu. "Adı". Dəyər. Belə ki, tamamilə məqbul. Bunu etmək üçün müxtəlif yolları. jQuery yalnız bir az daha yığcam və olmağa çalışır mütləq daha populyar proqramçılar arasında. İndi bir ağlı başında olma bir az edirəm çünki problem, yoxlamaq Şərhdə biz aydın şəkildə ifadə edərək, əgər istifadəçi hələ tipli deyil onun bir siqnallar göstərmək deyil, ad. Amma sadəcə, bunun üçün kontrol edə bilərsiniz bir boş string üçün yoxlanılması var əgər quote-dırnağı bağlamaq həqiqətən var heç bir şey. Amma bu quote-dırnağı bağlamaq bərabər deyil, əgər, Uyarıları zəng etmək istəyirəm. Və burada maraqlı hissəsi ki, biz plus operator istifadə etdiyiniz hansı JavaScript nə edir? Concatenate. Belə ki, PHPs dot operator kimi. Eyni fikir, az fərqli syntax. Mən yalnız simli yaradılması edirəm ki, Siz ekran shot gördüm - Salam, filan. Və sonra keçən ətraflı bu. Niyə yalan içini qayıtmaq yoxdur bu anonim funksiya? Auditoriya: heç bir dəyəri var. Siz formada qoymaq. Dəyəri, əgər yalnız deyir boş bərabər, sonra bunu. Ki, təqdim boş var idi. DAVID J. MALAN: OK. Baxmayaraq ehtiyatlı. Burada başqa heç bir var. Və qaytarılması yalan xaricində şərtlər əgər. Belə ki, bu, saxta qayıtmaq xətti qeyd nə olursa olsun zaman həyata şəklində təqdim edilir. Bu nə yalan daxilində qaytarılması etmir Bu deyilən kimi, hadisə handler, söz mövzusu hadisə təqdim olan? Auditoriya: Çünki yalnız bir dəfə olur. DAVID J. MALAN: Yalnız bir dəfə olur. Olduqca. Bəli? Auditoriya: Bu formu qarşısını alır , u mənim davranış təqdim səhifə yenidən olardı. DAVID J. MALAN: Exactly. Mən, müddəti burada təqdim həddindən artıq alıram Mən söyləyirəm, çünki forması təqdim edilir. Siz təklif kimi, bu, həqiqətən deyil əsl HTTP şəkildə təqdim edilmişdir. Siz, çünki, tarixi basın zaman bizim onSubmit handler, biz intercepting edirik ki, formada təqdim belə danışmaq. Biz sonra bizim şey yapýyorsun JavaScript kodu ilə. Amma qəsdən yalan qaytarılması alıram Mən nə istəyirəm nə çünki split ikinci sonra bütün forma üçün özü web təqdim olunacaq dəyişdirilməsi ilə əsas dəyər cüt ilə server kimi bir şey olmaq URL q = pişik və ya nə biz, Məsələn, sinif. Hesab edirəm ki, baş istəmirəm, çünki Bu heç bir server dinləmə var təqdim təşkil edir. Bu sırf JavaScript kodu görülən. Mən hətta yox idi ki, var bir hərəkət, mənim formada atribut çünki üçün bu düşünmürük Heç server gedin. Belə ki, təqdim olunur. Amma biz formu ələ edirik təqdim və default qarşısını almaq həqiqətən olan davranış, bütün yol server gedin. Auditoriya: Belə ki, klient saxlanılması. DAVID J. MALAN: saxlayaraq Bu klient. Məhz hüququ. Sonrakı qədər MySQL oh my idi. Rob Bowden: OK. Beləliklə, bu ilk sual ümumiyyətlə idi insanlar üçün kobud. Sonra isə daha yaxşı keçmişdir. Beləliklə, siz düzgün məlumatların seçmək idi Bu sütun üçün növləri. Və bu həm də bəzi var onlar haqqında şeylər seçimi çətinləşdirir. Belə ki, int bir etibarlı deyil sayı yazın. 12-rəqəmli account olan səbəbi sayı, bir int üçün kifayət qədər böyük deyil məlumat rəqəm saxlamayın. Belə ki, cari seçim böyük olardı Siz bilirsiniz ki, nə əgər int. Başqa bir seçim ola bilərdi uzunluğu 12 bir char sahəsində. Belə ki, o ya çalışmışdır olardı. Int deyil. İndi balans geri pset7 düşünürəm. Belə ki, biz xüsusi decimal istifadə səhmlərin və ya dəyəri saxlamaq - DAVID J. MALAN: Cash. Rob Bowden: Cash. Biz məbləğin saxlamaq üçün Ondalık istifadə istifadəçi hazırda var ki, pul. Belə ki, nə səbəb olur xatırlayıram, çünki, üzüb gedirdi. Dəqiq üzən point var. Bu dəqiq pul saxlaya bilməz biz kimi dəyərlər istəyirik. Belə decimal dəqiq mağaza edə , demək bir şey, iki decimal yerlərdə. Balans, biz bunu istəyirik ki float decimal deyil olmalıdır. DAVID J. MALAN: Və həmçinin, çox olsa digər ağıllı ola bilər düşünmək kontekstlərdə, bəlkə bu int üçün bir şansdır. Mən yalnız takip bilərsiniz pennies şeylər. Biz aydın şəkildə default göstərdi, çünki , 100.00 olan dəyəri yalnız bir int ola bilər deməkdir. Və çox sayda başqa incelik o demək deyil ki, bir oyun sual olacaq. Amma geri MySQL bir int, kimi C, ən azı ildə cihaz, 32-bit edir. Və biz sizə gözləmək yoxdur, baxmayaraq ki, dəqiq bilirəm neçə rəqəm ki, vasitələri, geri ki, ən böyük sayı Siz potensial təmsil edə bilər 32-bit sayı təxminən nədir? Biz həmişə nə sayı deyirsiniz? 2 təxminən nə olan 32 üçün? Siz dəqiq bilmək yoxdur. Amma təxminən həyat faydalıdır. Bu təxminən 4 milyard var. Beləliklə, biz bir neçə dəfə bildirib ki etdik. Mən bilirəm Mən bir neçə dəfə demişəm. Və təxminən 4 mlrd. Və yaxşı bir qayda var thumb bilmək. 8 bit, 256 varsa sehrli sayı. Siz 32 bit 4 varsa milyard vermək və ya almaq. Belə ki, yalnız aşağı 4 milyard yazmaq əgər, Siz daha az rəqəm deyil ki, görürsünüz Ki, aydın deyil deməkdir 12, tutmaq üçün kifayət qədər ifadəlilik bir 12-rəqəmli hesab nömrəsi. Rob Bowden: OK. Belə ki, digər olanları daha yaxşı getdi. Belə güman ki, bank $ 20 aylıq qoyur bütün hesabları üzrə xidmət haqqı. Nə SQL sorğu edə bilər bank ilə olsa belə, hər Count $ 20 çıxa bəzi mənfi qalıqlarında nəticələri? Belə ki, əsasən, dörd var sorğu əsas növləri - , daxil seçin, yeniləmə, və silin. Belə ki, biz istəyirik nə düşünürsünüz Burada istifadə etmək niyyətindədir? Update. Belə ki, bir nəzər salaq. Belə ki, burada biz yenilənməsi edirik. Nə masa biz hesabları təzələyirik? Belə ki, hesabları yenilənməsi. Və sonra syntax deyir hesablarında biz yenilənməsi olunur? Yaxşı, biz bərabər balans yaradılması edirik balans minus 20 cari dəyəri. Belə ki, bütün satır yeniləmə olacaq hesablarının, subtracting Balansından 20 $. DAVID J. MALAN: Burada ümumi səhv, biz bəzən bağışladı, baxmayaraq ki, həqiqətən, burada PHP kodu var idi sorğu funksiyası zəng və ya qoyaraq hər şey ətrafında quotes ki, orada olmaq lazım deyildi. Rob Bowden: MySQL olduğunu unutmayın PHP ayrı bir dil. Biz PHP MySQL yazılı üçün baş. Və PHP sonra göndərir MySQL server üzərində. Üçün Amma PHP ehtiyac yoxdur bir MySQL server ilə ünsiyyət. DAVID J. MALAN: Exactly. Dollar əlamətləri ilə belə heç dəyişənlərin bu çərçivədə olmalıdır. Bu, yalnız riyaziyyat bütün edə bilərsiniz verilənlər bazası daxilində. Rob Bowden: OK. Belə ki, növbəti bir. Bu növbəti biridir? Bəli. Nə SQL sorğu edə bilər bank ilə belə onun hesab nömrələri almaq zəngin müştərilər, olanlar 1000 daha çox qalıqlar? Belə ki, dörd əsas növ olan biz burada istədiyiniz gedir? Seçin. Beləliklə, biz seçin istəyirəm. Nə biz seçmək istəyirsiniz? Biz seçin nə sütun istəyirsiniz? Biz xüsusi istəyirəm sayı seçin. Amma ulduz, dedik əgər də qəbul. Belə ki, nə masa sayı seçin? Hesablama. Və sonra biz vəziyyəti istəyirsiniz? Harada 1000 daha çox balans. Biz də böyük qəbul çox və ya bərabər. Son bir. Nə SQL sorğu edə bilər bank ilə yaxın, İ.E., hər hesabı silmək $ 0 balans var? Belə ki, dörd olan biz istifadə etmək istədiyiniz gedir? Silin. Belə ki, üçün sintaksis? Nə masa sil? Hesablama. Və sonra vəziyyəti olan biz silmək istəyirəm - balans sıfır bərabərdir yerləşir. Belə ki, hesabları bütün satır silmək balans sıfır olduğu. Bu hər hansı bir Suallar? Növbə istəyirsiniz? DAVID J. MALAN: Queue guide. Belə ki, bu bir, biz bir qədər verdi Biz tədqiq ki, tanış strukturu Structs yanaşı sinif bit, məlumat olan ruhunda əlaqəli quruluşu. Bir növbə ilə olsa fərq biz elə xatırlamaq idi ki, kim böyük, növbə qarşısında idi biz daha çox ola bilər deyil ki, yaddaş səmərəli istifadə, ən azı biz bir sıra istifadə əgər. Çünki geri, biz bir sıra var, əgər, Məsələn, bu ön Növbədə, mən burada növbə almaq, və sonra kimsə xətt olur arxamda arxamda mənə, və arxasında bir nəfər xəttinin həyata addımlar, siz bilər, biz insan bəzi gördüm kimi sinif könüllüləri, hər kəs Bu yol keçmək. Amma, ümumiyyətlə, hər kəs bunu edərək bir şey zaman ən yaxşı istifadə deyil bir proqramda, çünki o deməkdir sizin alqoritm nə çalışan asimptotik çalışan zaman? Bu xətti var. Bu cür axmaq kimi və mən hiss edirəm. Line növbəti şəxs növbəti əgər daxil getmək üçün nəzərdə şəxs mağaza, onlar bütün yoxdur birlikdə hərəkət etmək. Just şəxs off yoluq imkan zaman, məsələn, gəlir. Belə ki, biz orada vaxt bir az saxlaya bilərsiniz. Və bunu ki, baxmayaraq ki, o deməkdir ki ki, növbə rəhbəri və ya Növbədə ön gedir tədricən dərin və daha dərin hərəkət massivinə və nəticədə güc biz istifadə edirsinizsə, həqiqətən, ətrafında kesmek insanları saxlamaq üçün array bu növbəyə. Beləliklə, siz demək olar ki, hesab edə bilər dairəvi data kimi array o mənada strukturu. Belə ki, elə takip var Bunun ölçüsü və ya bu həqiqətən sonu və sonra başlanğıcı olduğu. Beləliklə, biz bəyan təklif belə bir queue, zəng bu q, yalnız bir məktub. Sonra biz ön olması təklif sıfıra və başlatılmış ölçüsü sıfıra başlatılmış. Belə ki, indi heç bir şey yoxdur ki, növbə daxilində. Və biz başa çatdırmaq üçün xahiş aşağıda enqueue həyata keçirilməsi funksiyası n edir ki, belə bir yol sonra q sonu və doğru qayıdır. Amma q tam və ya mənfi olduqda, funksiyası yerinə saxta qaytarmalıdır. Və biz bir neçə verdi fərziyyələr. Lakin onlar həqiqətən funksional deyilik müvafiq, yalnız bool, mövcud texniki, bool deyil, çünki Siz daxil halda C mövcud bir müəyyən header file. Belə ki, yalnız əmin etmək edilib heç bir bu bir oyun deyil edildi şey sual cür. Belə ki, enqueue, biz nümunə təklif aşağıdakı kimi həllər həyata keçirmək. One, biz ilk rahatlığı kontrol, aşağı asma meyvə. Növbədə tam və ya sayı Əgər Siz daxil çalışdığınız az biz demişdi sıfır, daha problemin dəqiqləşdirilməsi olmalıdır biz yalnız istəyirəm, çünki icazə qeyri-mənfi dəyərlər, sonra olmalıdır yalnız dərhal yalan qaytarın. Belə ki, bəzi nisbətən asan yoxlanılması səhv. Ki, faktiki əlavə etmək istəyirsinizsə olsa əgər sayı, siz bir az etmək idi burada düşünür. Bir az annoying olduğu və bu əqli, Siz, çünki saran idarə etmək üçün necə anlamaq. Amma fikir bakterioloji burada var bizə maraq saran edir tez-tez modul hesab nəzərdə tutur və MOD operator, yüzdə yan, daha böyük bir dəyər getmək bilər sıfır geri və sonra bir və iki və üç və sonra geri ətrafında sıfır, bir və iki və irəli üç və təkrar. Belə ki, biz bunu təklif yoldur biz daxil index istəyirəm ki, ədəd adlı array bizim integers yalan. Amma almaq üçün, biz ilk etmək istəyirəm növbə ölçüsü lakin nə sonra əlavə nə siyahısı ön edir. Və təsiri bizə qoymaq üçün sağ növbə mövqeyi və güman ki line ilk şəxs başında, o, və ya o tamamilə ola bilər, əgər biz də hər kəsi dəyişkən edilmişdir. Amma biz yalnız iş yaratmaq edirik özümüz üçün atdıq əgər ki, xüsusi yol. Belə ki, biz nisbətən sadə saxlaya bilərsiniz. Biz yadda var ki, biz yalnız Növbədə bir int əlavə edib. Və sonra biz yalnız doğru qayıtmaq. Eyni zamanda, dequeue, biz xahiş Siz aşağıdakı etmək. Belə bir şəkildə onu həyata ki dequeues ki, rədd və dönər queue qarşısında da int. Int aradan qaldırılması üçün, bu kifayət onu unutmaq. Siz az yalnış ehtiyac yoxdur. Belə ki, əslində hələ də var. Bir sabit data kimi biz yalnız həqiqəti gözardı edirik orada indi ki. Q boş olduqda, biz olmalıdır əvəzinə mənfi 1 qayıtmaq. Belə ki, bu ixtiyari hiss edir. Niyə mənfi 1 qayıtmaq əvəzinə yalan? Bəli. Auditoriya: Q saxlanılması müsbət dəyərlər. Siz yalnız müsbət dəyərlər saxlaya ildən Bu q, mənfi bir səhv edir. DAVID J. MALAN: OK, doğru. Biz yalnız müsbət saxlanılması edirik, çünki dəyərlər və ya sıfır, sonra bu gözəl var bir keşikçi kimi mənfi dəyər qayıtmaq dəyəri, xüsusi bir simvoludur. Amma, orada tarixi yeniden edirik çünki biz yalnız olmamızın səbəbi qeyri-mənfi dəyərlər qaytarılması biz istəyirik, çünki bir sentinel dəyəri var. Belə ki, daha konkret desək, niyə yalnız səhvlər hallarda saxta qayıtmaq? Bəli. Auditoriya: Siz uğursuz etdik bir tam geri. DAVID J. MALAN: Exactly. C olur və bu burada olduqca sıxıntılı. Siz olacaq deyərək edirsinizsə bir int geri, siz var bir int geri. Siz xülya almaq və qaytarılması başlamaq bilməz bir bool və ya bir float və ya bir string və ya kimi bir şey. İndi isə, JavaScript və PHP və bəzi digər dillərdə bilər, əslində, Müxtəlif qaytarılması var dəyərlərin növləri. Və həqiqətən, faydalı ola bilər Əgər müsbət ints, adet sıfır qayıtmaq bilər, mənfi ints, və ya yanlış və ya null hətta səhv demek. Amma biz yoxdur ki, C. yönlü Belə ki, dequeue ilə, biz heç nə təklif - Rob Bowden: Siz yalan ola bilər. Bu hash yalnız yalan var sıfır yalan müəyyən edir. Belə ki, yalan qayıtmaq, Siz sıfır qaytarılması edirik. Və sıfır, bizim queue etibarlı şey mənfi 1 deyil, halbuki əgər yalan mənfi 1 oldu. Amma hətta lazımdır ki, bilmək lazımdır. DAVID J. MALAN: var Mən bunu niyə demədim. Rob Bowden: Lakin bu doğru deyil Siz yalan geri edə bilər ki. DAVID J. MALAN: Sure. Belə ki, dequeue, biz qəbul bildiriş onun arqument kimi ləğv. Biz deyilik, çünki ki daxil bir şey keçən Biz yalnız element aradan qaldırılması istəyirəm queue qarşısında. Belə ki, necə biz bunu haqqında getmək bilər? Bəli, ilk, bunu edək tez ağlı başında olma çek. Növbənin 0 olduqda, var ediləcək heç bir iş. 1 mənfi qayıt. Done. Belə ki, mənim proqram bir neçə xətləri var. Belə ki, yalnız dörd xətləri qalır. Belə ki, burada azalma qərar ölçüsü. Və səmərəli ölçüsü decrementing unutmadan alıram o deməkdir ki, bir şey deyil. Amma mən də yeniləmə var nömrələri ön var. Belə ki, bunu, mən lazım iki şeyi. Mən ilk nə sayı xatırlamaq lazımdır queue qarşısında deyil, Mən şey qayıtmaq lazımdır, çünki. Mən təsadüfən unutmaq istəmirəm bu barədə və sonra yazmaq. Mən yalnız bir int yadda gedirəm. Və indi mən yeniləmək istəyirəm q.front +1 q.front ediləcək. Bu ilk şəxs idi ki, əgər line, indi mən plus 1 etmək istəyirəm line növbəti şəxs qeyd. Amma saran idarə etmək üçün var. Və gücü qlobal daimi əgər, ki, mənə əmin etmək üçün imkan olacaq Mən son şəxs qeyd kimi xətti, modulo əməliyyat gətirəcək Bu sıfır mənə geri Növbədə ön. Və burada saran yapar. Və sonra mən n qayıtmaq üçün davam. İndi, ciddi desək, mən etmədi n elan var. Mən onu qapmaq və onu saxlamaq üçün yox idi müvəqqəti, dəyəri çünki hələ var. Mən yalnız sağ hesab edə bilər keçmiş baş qayıtmaq Növbədə. Amma yalnız bu daha aydın idi ki, hiss əslində int qamarlamaq üçün, qoyun n, sonra qayıtmaq aydınlıq xatirinə lakin ciddi lazım deyil. Psst. Onlar bütün başımda pronounceable istəyirik. Rob Bowden: Belə ki, ilk sual ikili ağac problem deyil. Belə ki, ilk sual, biz istəyirik ki, bu nömrələri verilir. Və biz birtəhər onları daxil etmək istəyirəm bu qovşaqlarının bu ki, belə bir etibarlı ikili axtarış ağac. Belə ki, bir şey haqqında unutmayın ikili axtarış ağac deyil ki yalnız sol şey daha az və şeydir sağ böyükdür. Bu olmalıdır ki, bütün ağac sol az, və bütün ağac sağ böyükdür. Mən üst burada 34 qoymaq, və əgər Mən burada 20 qoymaq, belə ki etibarlı uzaq, çünki 34 burada. 20 sol gedir. Belə ki, az deyil. Amma sonra, burada 59 qoymaq çünki 59 20 doğru deyil, baxmayaraq 34 sol hələ də var. Nəzərə ki sıxıntı ilə, belə ki, yəqin ki, bu həll en asan yol problem yalnız sort bu nömrələr - , 20, 34, 36, 52, 59, 106. Və sonra o daxil soldan sağa. Belə ki, 20 burada gedir. 34 Burada gedir. 36 Burada gedir. 52, 59, 106. Və siz də fiqurlu ola bilər bəzi sayede və həyata keçirilməsi, oh, mən kifayət qədər nömrələri yoxdur, gözləyin burada bu doldurun. Mən reshift lazımdır nə mənim marşrut qeyd olacaq. Lakin, son üç fark soldan sağa oxumaq, bu edir artan sifariş. Belə ki, indi biz bəyan etmək istəyirəm nə struct üçün olacaq bu ağac qovşaqlarının. Bir ikili ağac Beləliklə, biz nə lazımdır? Beləliklə, biz tipli dəyəri var int, belə ki, bəzi int dəyər. Mən biz adlı nə bilmirəm həllində it - n int. Biz sol uşaq bir pointer lazımdır və sağ uşaq bir göstərici. Belə ki, bu kimi baxmaq olacaq. Və həqiqətən əvvəl baxmaq lazımdır ikiqat bağlı zaman siyahısı stuff, belə bildiriş - Mən hərəkət etmək üçün gedirəm bütün yol geri problem 11. Belə ki, bu eyni görünür fark biz yalnız bu zəng nə istisna olmaqla müxtəlif adlar. Biz hələ tam var dəyəri və iki göstəricilərinə. Əvəzinə müalicə yalnız var növbəti şey işarə kimi göstəricilər və əvvəlki şey, biz müalicə edirik Bu göstəricilər bir sol uşaq qeyd etmək və sağ uşaq. OK. Belə ki, bizim struct node var. İndi, yalnız funksiyası biz lazımdır Bu traverse üçün, həyata olan biz ağac, çap üzərində getmək istəyirəm üçün ağac dəyərləri həyata. Belə ki, burada axtarır, biz çap etmək istəyirəm out 20, 34, 36, 52, 59, və 106. Necə ki, nail olurlar? Belə ki, olduqca oxşar. Əgər ötən imtahan gördüm Əgər problem Siz çap istəyirdi ki, arasında virgül ilə bütün ağac hər şey, hətta həqiqətən idi ki, daha asan. Belə ki, burada həll edir. Bu əhəmiyyətli asan idi Siz recursively bunu əgər. Hər kəs cəhd əgər mən bilmirəm iteratively bunu. Lakin ilk, biz baza halda var. Nə kök null olur? Sonra biz yalnız geri olacaq. Biz bir şey çap etmək istəmirəm. Else biz axır olacaq recursively aşağı. Bütün sol subtree çap. Belə ki, az şeyi çap Mənim cari dəyəri daha. Və sonra mən özümü çap gedirəm. Və sonra mən aşağı recurse gedirəm mənim bütün sağ subtree, belə ki, hər şey Mənim dəyəri daha çox. Bu çap edir üçün hər şey həyata. Necə bu həqiqətən Suallar ki, həyata? Auditoriya: Mən bir sual var Bu [işitilemez] haqqında. Rob Bowden: yaxınlaşan Belə bir yolu bir recursive problem yalnız hesab edir bu kimi haqqında düşünmək lazımdır bütün künc hallarda. Beləliklə, biz istəyirik ki, hesab bütün bu ağac çap. Belə ki, bütün biz diqqət gedir bu node edir - 36. Bu recursive zənglər, biz iddia o yalnız iş. Belə ki, burada bu recursive zəng traverse, biz hətta düşünmədən bu barədə, yalnız sol traversing üç, artıq 20 yazdıran təsəvvür və bizim üçün 34. Və sonra biz nəhayət recursively üzrə Traverse zəng sağ ki, düzgün çap edəcək 52, 59, və bizim üçün 106. Belə ki, bu 20, 34 çap edə bilərsiniz ki, verilmiş, və digər 52, 59, 108 çap edə bilərsiniz biz nə etmək lazımdır bütün çap ki, ortasında özümüz. Belə ki, bizdən əvvəl hər şeyi çap. Özümüz çap, belə ki, cari node print 36, müntəzəm printf, və sonra bizdən sonra hər şeyi çap. DAVID J. MALAN: Bu harada recursion edir həqiqətən gözəl olur. Bu, iman bu gözəl sıçrayış olduğu Siz iş tiniest bit etmək. Və sonra qoy kimsə başqa istirahət edəcəyik. Və başqası Siz istehza edir. Ciddi kek xal üçün, əgər belə Siz suallara üzrə diyirləyin - Rob Bowden: suallarını On? DAVID J. MALAN: Və bir az aşağı burada nömrələri, hər kəs bilir bu nömrələri gəlir? Rob Bowden: Mən sözün heç bir fikrim yoxdur. DAVID J. MALAN: Onlar görünür Viktorina ərzində. Auditoriya: onlar eyni ədəd edirsiniz? DAVID J. MALAN: Həmin nömrələr. Bir az Pasxa yumurta. Belə ki, online izləmək sizin üçün ev, siz e-poçt vasitəsilə bizə deyə bilərsiniz əgər heads@CS50.net nə əhəmiyyəti bu təkrarlanan altı ədəd var Quiz 1 boyunca, biz sizə duş edəcək son gözəl diqqət ilə mühazirə və stress top. Incə, gözəl. Rob Bowden: Any Son suallar viktorina bir şey haqqında?