DAVID J. Malan: Pob hawl. Felly, croeso i'r cyntaf erioed Post-mortem CS50 ar gyfer cwis. Rydym yn meddwl y bydden ni'n inaugurate traddodiad hwn eleni. A bydd hyn yn gyfle i gerdded trwy'r atebion i'r cwis. A byddwn yn gyflymu neu arafu i lawr yn seiliedig ar ar log o'r rhai yma. Felly, mae'n debyg eich bod yma am eich bod yn diddordeb mewn sut y gallech gael neu Dylai wedi ateb rhai o'r problemau hyn. Felly, pam nad ydym yn edrych yn yr adran hon yn gyntaf? Felly mae cael llinynnau. Rhoddodd hyn yn eich tri fersiwn gwahanol o raglen a oedd, yn y pen draw, i fod i gael llinyn gan ddefnyddiwr. P'un ai peidio i wneud hyn oedd chwith i chi benderfynu. Ac rydym yn gofyn yng Nghwestiwn 0, debyg bod fersiwn 1 yn llunio a'i ddienyddio. Pam y gallai'r rhaglen segfault? Ar yr olwg gyntaf, unrhyw awgrymiadau ynghylch pam? Yeah. GYNULLEIDFA: Felly, yr wyf yn cofio gweld hyn mewn enghraifft blaenorol o edrych ar y torgoch * s a gweld y sgan y s a gweld oherwydd ei fod yn pwyntydd, sut oedd yn effeithio ar yr hyn yr ydych sganio i mewn? A yw'n s neu gyfeiriad s? DAVID J. Malan: OK. Da. Felly yn y pen draw, ffynhonnell unrhyw broblem yn ôl pob tebyg yn mynd i leihau i'r newidyn s. Ac mae'n wir yn amrywiol. Y math data y newidyn cols *, sy'n golygu ei fod yn mynd i yn cynnwys cyfeiriad cymeriad. Ac yno yn gorwedd y mewnwelediad. Mae'n mynd i gynnwys cyfeiriad cymeriad neu, yn fwy cyffredinol, mae'r cyfeiriad y cymeriad cyntaf yn bloc cyfan o gymeriadau. Ond mae'r dal yw bod sgan s, pwrpas yn bywyd, yn cael ei rhoi cyfeiriad a roddir cod fformat, fel% s, darllen llinyn i mewn i'r darn o cof yn y cyfeiriad hwnnw. Ond oherwydd does dim arwydd gyfartal gerbron y colon ar y cyntaf llinell o god, oherwydd nid ydym yn ei wneud mewn gwirionedd yn dyrannu unrhyw cof gyda malloc, oherwydd nad oedd mewn gwirionedd yn dyrannu amrywiaeth o rai maint, pob rydych chi'n ei wneud yn darllen y defnyddiwr mewnbwn bysellfwrdd i rai cyflawn gwerth garbage, a oedd yn yn s yn ddiofyn. Felly groes yr ydych yn mynd i segfault os nad yw cyfeiriad yn jyst mor digwydd i fod yn werth eich bod yn gallu, mewn gwirionedd, ysgrifennwch at. Mor wael fel na i ddyrannu eich cof yno. Felly, yng nghwestiwn 1, rydym yn gofyn, debyg bod fersiwn 2 yn llunio a'i ddienyddio. Pam y gallai rhaglen hon segfault? Felly, mae hyn mae un yn llai buggy. Ac mae mewn gwirionedd dim ond un ffordd amlwg lle y gallwch sbarduno segfault yma. Ac mae hyn yn thematig. Unrhyw amser rydym yn defnyddio c mewn cof, yr hyn gallech ei wneud i gymell segfault gyda fersiwn 2? GYNULLEIDFA: Os ydych yn defnyddio y mewnbwn yn llinyn sy'n hirach na 49 cymeriadau. DAVID J. Malan: Yn union. Unrhyw bryd y byddwch yn gweld rhywbeth sefydlog hyd pan ddaw i amrywiaeth, bydd eich Dylai radar yn mynd i ffwrdd y gallai hyn fod yn problemau os nad ydych yn edrych ar y ffiniau arae. A dyna yw'r broblem yma. Rydym yn dal i ddefnyddio scanf. Rydym yn dal i ddefnyddio% s, sy'n golygu ceisio i ddarllen llinyn gan y defnyddiwr. Mae hynny'n mynd i gael ei ddarllen i mewn s, sydd, yn y fan hon, yn effeithiol y cyfeiriad darn o gof neu ei gyfwerth. Mae'n enw o fyrdd o gymeriadau o gof. Ond yn union hynny, os ydych yn darllen llinyn sy'n hirach na 49 cymeriadau, 49 oherwydd eich bod angen lle i'r slaes 0, rydych yn mynd i orlifo y byffer. Ac efallai y byddwch yn cael lwcus a gallu ysgrifennu gymeriad 51fed, 52ain, 53ain. Ond ar ryw bwynt, yr AO yn mynd i ddweud, dim. Mae hyn yn bendant nid yw'n cof yn caniatáu i chi i gyffwrdd. Ac mae'r rhaglen yn mynd i segfault. Felly mae, dylai'r heuristics fod yn unrhyw tro y byddwch wedi cael hyd penodol, mae gennych i wneud yn siŵr eich bod yn gwirio hyd o ba bynnag yr ydych yn ceisio i ddarllen i mewn iddo. GYNULLEIDFA: Felly, i ddatrys hynny, gallech wedi cael datganiad gwirio mewn gwirionedd yw'r mwyaf hyd na neu'n lai na? DAVID J. Malan: Yn hollol. Rydych yn unig gennych gyflwr sy'n dweud, os yw'r - neu yn hytrach nad ydych o reidrwydd yn gwybod ymlaen llaw faint o gymeriadau y defnyddiwr yn mynd i deipio, oherwydd gennych cyw iâr a'r wy. Nid tan eich bod wedi ei ddarllen yn â scanf gallwch chyfrif i maes pa mor hir ydyw. Ond ar y pwynt hwnnw, mae'n rhy hwyr, oherwydd eich bod eisoes wedi ei ddarllen i mewn i rhai bloc o cof. Felly, wrth fynd heibio, mae'r llyfrgell yn osgoi CS50 y mater hwn yn gyfan gwbl, galw i gof drwy ddefnyddio fgetc. Ac mae'n darllen un cymeriad ar y tro, tip-bysedd traed ar hyd, gan wybod eich bod yn Ni all gorlifo cymeriad os eich bod yn darllen un ar y tro. Mae'r dal yw gyda adalw getstring yn bod yn rhaid i ail-faint yn gyson bod darn o gof, a oedd yn yn unig yn boen. Mae'n llawer o linellau o cod i wneud hynny. Felly, byddai'r dull arall fyddai mewn gwirionedd yn defnyddio gefnder, felly i siarad, o scanf. Mae amrywiadau o lawer o'r rhain swyddogaethau bod yn edrych mewn gwirionedd yn y hyd faint o gymeriadau efallai y byddwch yn darllen maximally. A gallech nodi, nid ydynt yn darllen mwy na 50 nod. Felly byddai hynny'n ffordd arall, ond llai hyblyg o fewnbynnau mwy. Felly, cwestiwn 2 yn gofyn, mae'n debyg y fersiwn 3 yn cael ei llunio a'i ddienyddio. Pam y gallai fod rhaglen segfault? Felly, mae hyn yn un mewn gwirionedd yr un fath ateb, er ei fod yn yn edrych ychydig yn ffansi. Rydym yn defnyddio malloc, sy'n teimlo fel rydym yn rhoi mwy o opsiynau ein hunain. Ac yna rydym yn rhyddhau bod cof ar y diwedd. Mae'n dal i fod dim ond 50 bytes o gof. Felly, efallai y byddwn yn dal i geisio i ddarllen mewn 51, 52, 1,000 bytes. Mae'n mynd i segfault am yn union yr un rheswm. Ond mae rheswm arall hefyd. Beth arall allai malloc dychwelyd ar wahân cyfeiriad darn o gof? Gallai ddychwelyd null. Ac oherwydd nad ydym yn gwirio am hynny, efallai y byddwn yn gwneud rhywbeth dwp am reswm arall, sef bod efallai y byddwn yn dweud wrth scanf, darllen cyfraniad y defnyddiwr o'r bysellfwrdd i 0 lleoliad, AKA null. A dyna, hefyd, bydd yn bendant sbarduno segfault. Felly, ar gyfer y diben y cwis, a byddem yn wedi derbyn naill neu'r llall o'r rheini fel reswm dilys. Mae un yn union yr un fath. Mae un yn ychydig yn fwy cynnil. Yn olaf, o ran y rhaglen defnydd o gof, sut fersiwn 2 a fersiwn 3 yn wahanol? Felly, ar gyfer beth mae'n werth, gwelsom cyflenwad ymddangos yn ddiddiwedd o bosibl atebion i hyn. Ac ymhlith atebion pobl, yr hyn yr ydym yn gobeithio amdano, ond yr ydym yn derbyn eraill pethau, roedd rhywfaint o sôn am y ffaith bod fersiwn 2 yn defnyddio y pentwr fel y'u gelwir. Fersiwn 3 yn defnyddio'r domen. Ac yn swyddogaethol, nid yw hyn yn wir yn gwneud pob llawer y o wahaniaeth. Ar ddiwedd y dydd, rydym yn dal i dim ond yn cael 50 bytes o gof. Ond dyna oedd un o'r atebion posibl ein bod yn edrych ar. Ond byddwch yn gweld, wrth i chi gael eich cwisiau yn ôl o'r TFS, ein bod yn gwneud dderbyn trafodaethau eraill ar eu defnydd amrywiol o gof yn ogystal. Ond stacio a byddai domen wedi bod yn ateb hawdd i fynd gyda. Unrhyw gwestiynau? Yr wyf yn rhoi i chi Rob. ROB BOWDEN: Felly broblem 4. Mae hwn yn un lle bu'n rhaid i chi lenwi yn y nifer o bytes o'r holl y gwahanol fathau a ddefnyddiwyd. Peth Felly cyntaf i ni ei weld. Tybiwch 32-bit pensaernïaeth, fel hyn peiriant CS50. Felly, un o'r pethau sylfaenol ynghylch Saernïaeth 32-bit, sy'n dweud wrthym sut yn union fawr pwyntydd yn mynd i fod yn y pensaernïaeth. Hynny ar unwaith, rydym yn gwybod bod unrhyw pwyntydd fath yw 32-darnau neu 4 bytes. Felly, yn edrych ar y tabl hwn, mae nod * yn fath pwyntydd. Mae hynny'n mynd i fod yn 4 bytes. Nod strwythur *, dyna llythrennol union yr un fath i seren nod. Ac felly mae hynny'n mynd i fod yn 4 bytes. Llinynnol, felly nid yw'n edrych fel Pointer eto, ond mae'r typedef, a llinyn yn unig yw golosg *, sy'n yn fath pwyntydd. Felly mae hynny'n mynd i fod yn 4 bytes. Felly, y tri hyn i gyd yn 4 bytes. Nawr, nod a myfyrwyr yn ychydig yn fwy cymhleth. Felly, yn edrych ar nod a myfyrwyr, gwelwn nod fel cyfanrif a pwyntydd. Ac myfyriwr dau awgrymiadau tu mewn iddo. Felly, o leiaf ar gyfer ein hachos yma, y ​​ffordd ein bod yn y pen draw yn cyfrifo maint y strwythur hwn yn cael ei ychwanegu i fyny bopeth dyna y tu mewn i'r strwythur. Felly, ar gyfer nod, mae gennym cyfanrif, sydd 4 bytes. Mae gennym pwyntydd, sydd 4 bytes. Ac felly un nod yn mynd i fanteisio ar 8 bytes. Ac yn yr un modd i'r myfyriwr, mae gennym pwyntydd sy'n 4 bytes ac un arall pwyntydd sy'n 4 bytes. Felly, mae hynny'n mynd i ben fyny yn cael ei 8 bytes. Felly, nod a myfyrwyr 8 bytes. A thair mae'r rhain i gyd 4 bytes. Cwestiynau ar hynny? Ie. GYNULLEIDFA: A yw ei fod yn 64-bit pensaernïaeth, byddai hynny'n dyblu pob un ohonynt? ROB BOWDEN: Ni fyddai'n dyblu pob un ohonynt. Felly, pensaernïaeth 64-bit, mae'n, unwaith eto, newidiadau y peth sylfaenol y byddai pwyntydd yw 64 darnau nawr. Yeah. Felly pwyntydd yw 8 bytes. Felly hyn a oedd yn 4 bytes yn mynd i fod yn 8 bytes. Mae myfyriwr, a oedd dau awgrymiadau, yn dda, erbyn hyn mae'n mynd i fod yn 8 bytes, 8 bytes. Mae'n mynd i wneud 16 bytes. , Ond yn nod yn dal i fod 4 bytes. Felly pwyntydd hyn yn mynd i fod yn 8 bytes. Mae hyn yn 4 bytes. Felly nod yn mynd yn unig i fod yn 12 bytes. Unrhyw gwestiynau eraill ar hynny un? Felly, yr un nesaf, mae'r rhain yn codau statws HTTP. Ac bu'n rhaid i chi yn disgrifio amgylchiadau lle y gallai cael eu dychwelyd atoch. un broblem a glywais rhai myfyrwyr rhaid yw eu bod yn ceisio gwneud y camgymeriadau fod ar ben y cleient. Felly, pan fyddwn yn ceisio gwneud y cais at 'r gweinyddwr, bydd rhywbeth yn mynd anghywir ar ein diwedd. Ond yn gyffredinol, mae'r codau hyn yn cael eu dychwelyd gan y gweinydd. Felly, rydym am i chyfrif i maes beth sy'n mynd anghywir neu hawl ar y gweinydd sy'n achosi pethau hyn gael eu dychwelyd. Felly pam y gallai gweinydd ffurflenni Statws cod 200? Unrhyw syniadau? Yeah. Felly, rhywbeth am llwyddiannus y cais yn mynd trwy. Ac maent yn gallu dychwelyd beth bynnag yr ydych yn gofyn am. Felly, popeth yn iawn. Beth am 302 o hyd? Yeah. GYNULLEIDFA: Mae'r gweinydd yn edrych am yr hyn roeddech yn chwilio amdani. , Ond ni allai ddod o hyd iddo. Felly mae 'na gwall. ROB BOWDEN: Felly mae'r gweinydd yn chwilio am yr hyn yr ydych ei eisiau. Felly, dim ond edrych yma, 302 o hyd, roedd yn gallu ddod o hyd iddo. GYNULLEIDFA: Mae'n ddrwg gen i. Wedi dod o hyd yn golygu eu bod yn ei chael yn. Mae'n ddrwg gennym. ROB BOWDEN: Felly 302 a ganfuwyd. Mae'r gweinydd yn gallu dod o hyd i yr hyn yr ydych ei eisiau. GYNULLEIDFA: Ond nid yw'n ei arddangos? ROB BOWDEN: Y gwahaniaeth rhwng hwn 302 a 200 yw ei fod yn yn gwybod beth rydych ei eisiau. Ond nid yw'n union lle chi am ei ofyn. Felly, 302 yn ailgyfeirio nodweddiadol. Felly yr ydych yn gofyn am dudalen. Mae'n gwybod, oh, yr wyf am i ddychwelyd i chi yma. Ond mae hyn yn ar URL gwahanol. Felly hey, chi mewn gwirionedd yn dymuno hyn. DAVID J. Malan: Mae'n ddarn a ddywedodd ein bod yn rhoi i chi guys yn ailgyfeirio swyddogaeth sy'n defnyddio'r swyddogaeth pennawd hynny, yn ei dro, argraffu leoliad, colon, ac yna'r URL y ydych am wrthod y defnyddiwr. Hyd yn oed er nad oeddech yn gweld 302 benodol yno, dyna beth PHP Byddai hudol mewnosoder fel pennawd yn dweud yn union yr hyn a ddywedodd Rob yno - dod o hyd. Ond ewch yma yn lle hynny. ROB BOWDEN: OK. Felly, beth am 403 gwahardd? GYNULLEIDFA: Yr wyf yn meddwl ei fod yn bod y gweinydd yn ei ddweud yn y bôn bod y cleient Ni all gael mynediad i'r dudalen gartref. ROB BOWDEN: Felly ie. Wel, yr ateb nodweddiadol roeddem yn disgwyl yn rhywbeth fel, y ffeiliau yn cael eu chmodded briodol. Dyna mae'n debyg o dan ba amgylchiadau i chi eu gweld. Ond mae rheswm bod y cleient Gallai fod ar fai yma. Mae mewn gwirionedd cod statws arall - 401. Felly mae'r rhain yn debyg iawn. 401 yn anawdurdodedig. A 403 yn cael ei wahardd. Ac felly heb awdurdod i chi yn unig gael os nad ydych yn mewngofnodi Ond efallai logio i mewn yn golygu eich bod yn cael eu hawdurdodi. Ond os ydych chi eisoes yn logio i mewn ac rydych yn dal heb gael caniatâd, yna gallwch hefyd gael wahardd. Felly, os ydych wedi logio i mewn ac nid oes caniatâd, gwahardd hefyd yn rhywbeth y gallwch ei gael. DAVID J. Malan: A mecanwaith pa broblemau mae'r rhain fel arfer yn datrys ar y gweinydd yn trwy yr hyn y gorchymyn? Chmod, os yw'n, yn wir, mae caniatâd cyhoeddi ar y ffeil neu cyfeiriadur. ROB BOWDEN: Yna 404 heb ei ganfod. Yeah. Felly, yn wahanol i 302 lle nad oedd yn union lle rydych yn gofyn, ond mae'n gwybod beth ydych chi eisiau, mae hyn yn, 'i jyst wedi ddim syniad beth rydych ei eisiau. Ac nad ydych yn gofyn am rhywbeth dilys. 418 Rwy'n tebot ac yna 500 gweinydd mewnol. Felly pam y gallech gael hynny? Felly segfault - Fi 'n weithredol yn gwybod y graddio safon ar gyfer hyn. Ond os yw eich cod PHP wedi cael rhywbeth anghywir ynddo, mewn theori, gallai mewn gwirionedd segfault, ac os felly, mae hyn yn 500 gwall gweinydd mewnol, rhywbeth sydd o'i le ar eich gweinydd cyfluniad. Neu mae 'na gwall cystrawen yn eich cod PHP. Neu rhywbeth gwael yn mynd ymlaen. DAVID J. Malan: Yr ydym yn gweld segfault ymhlith atebion ychydig o bobl. Ac yn dechnegol, gallai ddigwydd. Ond byddai hynny'n PHP, mae'r rhaglen ysgrifennwyd gan bobl eraill, mewn gwirionedd segfaulted, a dim ond os yw pobl hynny sgriwio i fyny ac ysgrifennodd cod bygi mewn eu cyfieithydd byddai PHP ei hun segfault. Felly, er bod 500 yn debyg i segfault yn yr ysbryd, mae bron yn bob amser yn ganlyniad i fater ffeil ffurfweddu gyda eich gweinydd gwe neu, fel y dywedodd Rob, gwall cystrawen, fel chi Nid oedd cau dyfynbris. Neu os ydych yn colli hanner colon yn rhywle. GYNULLEIDFA: Felly, ar gyfer y pset Shuttle, yr wyf yn meddwl pan fyddaf yn gwneud hynny ar ôl i mi glicio y porwr, ond dim byd yn dod i fyny, yr hyn y maent yn galw dudalen gwyn. Ond yr oedd oherwydd y cod. Credaf fod yn JavaScript, dde? ROB BOWDEN: Yeah. GYNULLEIDFA: A fyddai'r fod gwall yn dal i ddod i fyny? ROB BOWDEN: Felly fyddech chi ddim wedi gotten gwall hwn gan fod popeth o safbwynt y gweinydd gwe yn gwbl iawn. Ond byddwch yn gofyn am index.html. Eich cais shuttle.js a service.js. Ac yr oedd gallu dychwelyd yn llwyddiannus i chi i gyd o'r pethau hynny - 200. OK. Dim ond pan fydd eich porwr yn ceisio dehongli y cod JavaScript sy'n mae'n debyg, aros, nid yw hyn yn Gwall JavaScript dilys. Unrhyw gwestiynau eraill? Mae pob hawl. DAVID J. Malan: Felly nesaf i fyny yn rhif 11. A 11 oedd y mwyaf dychrynllyd i lawer o bobl. Felly, y peth pwysicaf i'w nodi yma oedd bod hyn yn, yn wir, am rhestr cysylltiedig ddwbl. Ond nid yw hyn yr un fath â'r llynedd problem rhestr gysylltiedig ddwbl, nad oedd yn rhoi cafeat eich bod yn gallai'r rhestr, mewn gwirionedd, fod heb eu didoli. Felly, y ffaith bod y rhestr yn heb eu didoli a'r ffaith bod y gair hwnnw yn thanlinellu yno oedd i fod i gyfleu bod hyn mewn gwirionedd yn symleiddio o'r hyn a fyddai fel arall wedi bod yn yn broblem fwy heriol a hwy un. Felly, yn gamgymeriad cyffredin yma oedd wedi rhoi ateb y llynedd ar eich un peiriant galw ac yna dim ond blindly copi y i lawr fel yr ateb, sef yr hawl ateb i gwestiwn gwahanol debyg o ran ysbryd. Ond mae'r cynnil yma fel a ganlyn. Felly un, yr ydym wedi datgan yn nod a a ddiffinnir yn y ffordd arferol yma. Yna rydym yn diffinio rhestr o fod yn fyd-eang pwyntydd ymgychwyn i null. Yna, mae'n debyg, mae ddwy swyddogaeth rydym wedi prototeipiau ar gyfer yma, mewnosoder a chael gwared. Ac yna rydym yn cael rhywfaint o cod sampl yma o wneud criw o ychwanegiadau. Ac yna rydym yn gofyn i chi gwblhau'r gweithredu y mewnosodiad yn is yn y fath ffordd y mae'n mewnosod n i mewn i'r rhestr mewn amser cyson, tanlinellu hefyd, hyd yn oed os eisoes yn bresennol. Felly, y harddwch o fod yn gallu mewnosod mewn amser cyson yw ei fod yn awgrymu bod yn rhaid i chi osod y nod newydd lle? I mewn i'r tu blaen. Felly mae'n cael gwared ar, diolch byth, o leiaf un o'r achosion a oedd yn arfer gwneud yn ofynnol i hyd yn oed mwy o god linellau, fel y gwnaeth y flwyddyn ddiwethaf a hyd yn oed yn y dosbarth pan fyddwn yn siarad trwy y math hwn o beth gyda phobl a gyda rhai cod ffug llafar. Felly, yn yr ateb yma, gadewch i hepgor i mai dim ond i gael ar gweledol y sgrin. Sylwch ein bod yn gwneud y canlynol. A hefyd yn sylwi ar y symleiddio arall Roedd hyd yn oed os yw'n eisoes yn bresennol, felly mae hyn yn golygu hyd yn oed os y nifer eisoes yno, gallwch dim ond blindly mewnosod un arall copi ohono. A dyna, hefyd, oedd i fod i fod yn symleiddio, er mwyn i chi gallai canolbwyntio ar, mewn gwirionedd, mae rhai o'r mwy rhan ddeallusol ddiddorol ac nid dim ond rhyw wall ychwanegol yn gwirio o ystyried yr amser cyfyngedig. Felly, mewn hydoddiant sampl hon, rydym yn dyrannu pwyntydd ar y llaw chwith- ochr yma i nod. Nawr, yn sylweddoli bod pwyntydd, fel Dywedodd Rob, dim ond 32 o ddarnau. Ac nid yw'n cynnwys mewn gwirionedd yn cyfeiriad nes i chi aseinio y cyfeiriad. Ac rydym yn gwneud hynny ar y dde-law ochr trwy malloc. Fel yn ddinesydd da, rydym yn gwirio bod Nid malloc yw, mewn gwirionedd, null, fel bod nid ydym yn ddamweiniol yn creu yn segfault yma. Ac unrhyw tro y byddwch yn defnyddio malloc mewn bywyd, yr ydych yn Dylid gwirio ar gyfer null, rhag gennych nam cynnil. Yna, rydym yn ymgychwyn y null gan pennu n a blaenorol ac nesaf. Ac yn yr achos hwn yma, yr wyf yn ymgychwyn blaenorol i null, gan fod hyn yn newydd nod yn mynd i fod yn newydd ddechrau fy rhestr. Felly, mae mynd i fod yn dim ger ei fron. Ac yr wyf yn awyddus i atodi yn y bôn rhestr bresennol at y nod newydd trwy gosod nesaf cyfartal i restru ei hun. Ond dydw i ddim yn ei wneud eto. Felly, os y rhestr ei hun eisoes yn bodoli, ac roedd o leiaf un nod eisoes yn eu lle, os yw hyn yn y rhestr yma ac yr wyf yn mewnosod nod yn newydd yma, yr wyf yn angen i ni wneud yn siŵr bod fy nghyn nod yn cyfeirio yn ôl at fy nod newydd, oherwydd mae hyn yn, unwaith eto, rhestr cysylltiedig ddwbl. Felly, rydym yn gwneud gwiriad bwyll. Os nad yw'r rhestr yn null, os oes eisoes un neu fwy o nodau yno, yna ychwanegu bod yn ôl cyfeiriad fel petai. Ac yna y peth olaf un, mae angen ei wneud yw mewn gwirionedd yn diweddaru'r byd-eang rhestr amrywiol ei hun i dynnu sylw i'r nod newydd. Yeah. GYNULLEIDFA: Yn y saeth pwyntydd [Anghlywadwy] hafal null, a yw hynny'n ymdrin â'r rhestr oherwydd mae'r rhestr yn null? DAVID J. Malan: Na. Mae hynny'n syml i mi fod yn rhagweithiol yn ofalus, gan fod os yw hyn yn fy rhestr gwreiddiol gyda efallai mwy o nodau dros yma ac rwy'n gosod fy nod newydd dros yma, mae mynd i fod yn unrhyw beth dros yma. Ac yr wyf yn awyddus i ddal y syniad hwnnw drwy osod blaenorol i null ar y nod newydd. Ac yn ôl pob tebyg, os bydd fy cod yn gywir ac nid oes ffordd arall i fewnosod nodau ar wahân i swyddogaeth hon, yn ôl pob tebyg, hyd yn oed os y rhestr eisoes wedi un neu fwy o nodau ynddo, yn ôl pob tebyg y rhestr, y nod cyntaf, byddai'n rhaid i pwyntydd blaenorol null hun. GYNULLEIDFA: A dim ond dilyniant. Y rheswm i chi roi pwyntydd hafal nesaf rhestr yn cael ei ydych yn gwneud y pwyntydd cyn y rhestr gan ei fod yn ei pwyntio i'r nesaf, yr wyf yn dyfalu - Yr wyf Peidio â - dim ond rhestru? DAVID J. Malan: Yn union. Ac felly gadewch i ni mewn gwirionedd yn ystyried dau achos yma mewn gwirionedd, er bod y Nid yw gorchymyn byddwn yn eu hystyried yn union yr un fath â'r cod. Ond ar lefel uchel, os yw hyn yn cynrychioli rhestru ac mae hyn yn 32-bit pwyntydd, y senario symlaf yw bod hyn yn null yn ddiofyn. Ac yn siŵr fy mod yn awyddus i mewnosoder y rhif 50 oedd y rhif cyntaf. Felly, yr wyf i'n mynd i fynd yn ei flaen a dyrannu yn nod, sydd yn mynd i gynnwys tri chae - n, blaenorol, a'r flwyddyn nesaf. Rydw i'n mynd i roi'r rhif 50 yma, oherwydd bydd hyn yn n. Bydd hyn yn nesaf. A bydd hyn yn flaenorol. Ac felly beth ddylwn i ei wneud yn yr achos hwn? Wel, rydw i wedi newydd wneud llinell 1 yma. Pointer n cael n. Yna i ddim yn dweud, blaenorol ddylai gael null. Felly, mae hyn yn mynd i fod null. Yna mi i'n mynd i ddweud nesaf yn mynd i gael rhestr. Ac mae hyn dim ond yn gweithio allan yn dda. Mae hyn yn null. Ac felly yr wyf ddim yn dweud, y nod newydd yn nesaf Dylai cae gael beth bynnag mae hyn yn. Felly, sy'n rhoi null arall yno. Ac yna y peth olaf Yr wyf yn ei wneud yw gwirio yma. Os nad yw'r rhestr yn hafal i null, ond mae'n yn hafal i null, felly rydym sgip bod yn gyfan gwbl. Ac felly y cyfan yr wyf yn ei wneud nesaf mae rhestr yn cael pwyntydd, sydd ar ffurf lluniau yn arwain at darlun fel 'na. Felly dyna un senario. A'r un yr ydych yn gofyn am yn benodol sefyllfa fel hon, lle mae gennym eisoes restr un-nod. Ac os wyf yn mynd yn ôl i fyny yn y gwreiddiol Datganiad o'r broblem, nesaf byddwn ni mewnosoder dweud yn 34, dim ond ar gyfer mwyn drafodaeth. Felly, yr wyf i'n mynd i ychydig gyfleus dynnu hynny dros yma. Rwyf wedi malloced yn unig. Gadewch i ni dybio fy mod yn gwirio am null. Nawr, dw i'n mynd i ymgychwyn n i fod yn 34. A bydd hyn yn n. Bydd hyn yn nesaf. A bydd hyn yn flaenorol. Gadewch i ni wneud yn siwr nad i ddim cael hwn yn ôl. Yn dod blaenorol yn gyntaf yn y diffiniad. Gadewch i mi atgyweiria hon. Mae hyn yn flaenorol. Mae hyn yn nesaf. Er bod y rhain yn union yr un fath, gadewch i ni gadw'n gyson. Blaenorol. Mae hyn yn nesaf. Felly, yr wyf wedi newydd malloced fy nodyn, gwirio ar gyfer null, a bennwyd 34 i mewn i'r nod. Blaenorol yn cael null. Felly mae hynny'n ei roi i mi hynny. Nesaf yn cael rhestr. Felly, rhestr yw hyn. Felly, mae hyn yr un fath yn awr ag dynnu hyn saeth, fel eu bod yn cyfeirio at un yn yr un. Ac yna dwi'n gwirio os restr Nid yn hafal i null. Ac nid yw'n hyn o bryd. Yna mi i'n mynd i wneud rhestr blaenorol yn cael pwyntydd. Felly rhestru blaenorol yn cael PTR. Felly, mae hyn yn cael yr effaith o roi saeth graffigol yma. Ac mae hynny'n cael ychydig yn tonnog, y llinellau. Ac yna, yn olaf, yr wyf yn diweddaru rhestr i bwyntio at pwyntydd. Felly, yn awr mae hyn yn cyfeirio at y boi. Ac yn awr, gadewch i ni wneud yn gyflym gwiriad bwyll. Dyma'r rhestr, sy'n y newidyn byd-eang. Y nod cyntaf yw, yn wir, 34, oherwydd Im 'yn dilyn y saeth. Ac mae hynny'n gywir oherwydd yr wyf am i mewnosoder ar y dechrau y rhestr pob nodau newydd. Ei cae nesaf yn fy arwain at y boi. Os wyf yn dal i fynd, wnes i daro nesaf yw null. Felly does dim rhestr mwy. Os byddaf yn taro blaenorol, i mi gael yn ôl lle yr wyf yn ei ddisgwyl. Felly, mae rhai awgrymiadau o hyd, yn amlwg, i drin. Ond mae'r ffaith eich bod yn dweud wrthych am wneud hyn mewn amser yn gyson i chi golygu mai dim ond gennym nifer cyfyngedig o bethau caniatáu eich bod yn ei wneud. A beth yw y rhif hwnnw? Gallai fod yn un cam. Gallai fod yn dau. Gallai fod yn 1,000 o gamau. Ond mae'n gyfyngedig, sy'n golygu na allwch wedi unrhyw fath o dolennu yn mynd ymlaen yma, nid oes unrhyw recursion, dim dolenni. 'I' got yn unig i fod yn llinellau caled-godio o god fel yr ydym wedi yn y sampl hon. Felly, y broblem nesaf 12 gofyn i ni cwblhau'r broses o weithredu'r dileu isod mewn modd fel ei fod yn cael gwared ar n o'r rhestr yn amser llinol. Felly, mae gennych ychydig yn fwy ystafell wiggle nawr. Efallai y byddwch yn cymryd yn ganiataol y n, os yw'n bresennol yn y rhestr, yn bresennol dim mwy nag unwaith. A bod yn rhy i fod i fod yn seiliedig ar gwis symleiddio rhagdybiaeth, felly os ydych yn dod o hyd i'r rhif 50 yn rhywle yn y rhestr, nad ydych hefyd yn rhaid i chi boeni am barhau i ailadrodd, yn chwilio am bob posibl gopi o 50, a fyddai'n dim ond datganoli i mewn i rai minutia mewn amser cyfyngedig. Felly, gyda dileu, roedd hyn yn un bendant mwy heriol a mwy cod i ysgrifennu. Ond ar yr olwg gyntaf, a dweud y gwir, y gallai edrych rhywbeth llethol ac fel does dim ffordd y gallech gael dod o hyd i ar chwis. Ond os ydym yn canolbwyntio ar y camau unigol, gobeithio, bydd yn sydyn taro chi bod pob un o'r rhain yn unigolyn camau yn gwneud synnwyr amlwg o edrych yn ôl. Felly, gadewch i ni edrych. Felly yn gyntaf, rydym yn ymgychwyn pwyntydd i fod yn rhestru ei hun. Oherwydd yr wyf am amser llinol, mae hynny'n ei olygu Rydw i'n mynd i gael rhywfaint o ddolen. Ac yn ffordd gyffredin i ailadrodd dros y nodau mewn strwythur rhestr neu unrhyw fath strwythur iteraidd yw cymryd pwyntydd i flaen y data strwythur ac yna dim ond yn dechrau diweddaru ac cherdded eich ffordd drwy'r strwythur data. Felly, yr wyf i'n mynd i wneud yn union hynny. Er pwyntydd, fy amrywio dros dro, Nid yw cyfartal i null, gadewch i ni mynd yn ei flaen a gwirio. Oeddwn i'n cael lwcus? A yw'r maes n yn y nod ar hyn o bryd rwy'n edrych ar hafal i'r nifer Rwy'n edrych am? Ac os felly, gadewch i ni wneud rhywbeth. Yn awr, sylwi ar hyn os bydd cyflwr amgylchynu'r cyfan llinellau canlynol o god. Dyma'r unig beth yr wyf yn poeni am - dod o hyd i nifer o dan sylw. Felly, does dim arall, sy'n symleiddio pethau gysyniadol ychydig. Ond yn awr, yr wyf yn sylweddoli, a allai fod gennych dim ond yn sylweddoli hyn ar ôl meddwl drwy ychydig, mae mewn gwirionedd dau achos yma. Un yw lle y nod ar y ddechrau'r rhestr, sydd yn ychydig yn blino, oherwydd mae hynny'n achos arbennig, gan fod yn rhaid i chi ddelio gyda y peth hyn, a oedd yn yw'r unig anghysondeb. Ym mhob man arall yn y rhestr, 'i' yr un peth. Mae yna nod flaenorol a nesaf nod, nod blaenorol, nod nesaf. Ond mae hyn guy ychydig yn arbennig os ei fod ar y dechrau. Felly, os bydd y pwyntydd hafal i rhestr ei hun, felly os wyf ar ddechrau y rhestr ac yr wyf wedi dod o hyd n, mae angen imi i wneud un neu ddau o bethau. Un, mae angen i mi newid y rhestr i cyfeirio at y cae nesaf, 50. Felly, mae'n debyg fy mod yn ceisio i gael gwared ar 34. Felly, yn cael y boi i fynd i ffwrdd mewn dim ond hyn o bryd. Felly, yr wyf i'n mynd i ddweud, rhestr cael pwyntydd nesaf. Wel, mae hyn yn pwyntydd. Nesaf yn pwyntio dros yma. Felly, mae hyn yn newid saeth hawl hon nawr i dynnu sylw at y dyn yma. Yn awr, cofiwch, rydym wedi newidyn dros dro. Felly, nid ydym wedi amddifad unrhyw nodau, oherwydd fy mod hefyd yn cael y boi yn fy gweithredu'r dileu. Felly nawr, os nad rhestr ei hun yn null, Angen i mi at atgyweiria rhywbeth bach. Angen i mi nawr yn gwneud yn siŵr bod saeth hwn, sydd yn pwyntio yn flaenorol 50-34, mae hyn wedi mynd i fynd i ffwrdd, oherwydd os Im 'yn ceisio i gael gwared o 34, roedd gan 50 well peidio cynnal unrhyw fath o ôl cyfeirio ato fel y Awgrymodd saeth. Felly, Fi jyst yn gwneud y llinell hon. Felly, yna dwi'n ei wneud. Yr achos hwnnw yw eithaf hawdd mewn gwirionedd. Torri oddi ar y pennaeth y rhestr yn gymharol syml. Yn anffodus, mae hyn yn bloc blino arall. Felly nawr, rhaid i mi ystyried yr achos lle mae rhywbeth yn y canol. Ond nid yw'n rhy ofnadwy, ac eithrio ar gyfer cystrawen fel hyn. Felly, os nad wyf ar ddechrau'r rhestr, Im 'rhywle yn y canol. Ac mae hyn yn llinell yma yn ei ddweud, dechrau ar ba bynnag nod byddwch chi yn. Ewch i'r cae nesaf y nod flaenorol ac yn nodi hynny yn y pwyntydd. Gadewch i ni wneud hyn mewn lluniau. Yr oedd hynny'n mynd yn gymhleth. Felly, os oes gennyf gaeau blaenorol yma - gadewch i ni wneud hyn - caeau nesaf yma. Rydw i'n mynd i symleiddio fy awgrymiadau yn hytrach na tynnu criw cyfan o pethau yn ôl ac ymlaen crisscrossing ei gilydd. Ac yn awr, gadewch i ni ddweud hyn yn unig yw 1, 2, 3 er mwyn trafod, hyd yn oed er nad yw'n llinell i fyny gyda y broblem dan sylw. Felly dyma fy rhestr gysylltiedig. Yr wyf yn ceisio cael gwared dau yn y fersiwn arbennig o'r stori. Felly, yr wyf wedi diweddaru pwyntydd i fod yn pwyntio at y boi. Felly mae hyn yn PTR. Mae'n pwyntio yma. Mae hyn yn y rhestr, sy'n bodoli yn fyd-eang fel o'r blaen. Ac mae'n pwyntio yma waeth beth. Ac yn awr, Im 'yn ceisio i gael gwared dau. Felly, os pwyntydd yn pwyntio yma, rwy'n mynd i ddilyn, mae'n debyg, y pwyntydd blaenorol, sy'n fy rhoi yn 1. Yna yr wyf i'n mynd i ddweud bod y nesaf maes, sy'n dod â mi drosodd i hyn blwch yma, yn mynd i pwyntydd gyfartal nesaf. Felly, os pwyntydd hwn, mae hyn yn nesaf. Mae hynny'n golygu bod hyn anghenion arrow i dynnu sylw at y boi. Felly beth yw'r llinell o god wedi dim ond wneud yw ychydig o hyn. Ac yn awr, mae hyn yn edrych fel gam yn y cyfeiriad cywir. Rydym yn y bôn yn awyddus i snip 2 allan y canol 1 a 3. Felly mae'n gwneud synnwyr ein bod am llwybr pwyntydd hwn o'i amgylch. Felly, mae hyn llinell nesaf yn gwirio os pwyntydd nesaf ddim yn null, mae yn wir rhywun i'r dde o 2, sy'n golygu ein bod rhaid i ni wneud hefyd ychydig snip yma. Felly mae angen i mi ddilyn pwyntydd hwn yn awr ac yn diweddaru'r pwyntydd blaenorol ar y boi i wneud ychydig bach o datrysiad dros dro yma y pwynt yma. Ac yn awr, yn weledol hon yn braf. Mae'n ychydig yn anniben yn bod yna nad oes neb yn pwyntio at y 2 anymore. 2 yn pwyntio i'r chwith. A 2 yn pwyntio i'r dde. Ond gall ei wneud beth bynnag y mae am, oherwydd ei fod ar fin cael ei ryddhau. Ac nid dim ots pa gwerthoedd hynny yn anymore. Yr hyn sy'n bwysig yw bod y gweddill guys yn llwybro uwchben ac o dan ef nawr. Ac yn wir, dyna beth rydym yn ei wneud nesaf. Rydym pwyntydd rhad ac am ddim, sy'n golygu ein bod yn dweud wrth y system weithredu, mae croeso i chi i adennill hyn. Ac yna yn olaf, byddwn yn dychwelyd. Arall ymhlyg, os ydym Nid yw wedi dychwelyd eto, mae'n rhaid i ni gadw edrych. Felly pwyntydd yn dychwelyd pwyntydd nesaf yn unig yn golygu symud y boi yma. Symud y boi yma. Symud y boi yma os, mewn gwirionedd, ni wnaethom ddod o hyd i'r nifer rydym yn chwilio am hyd yn hyn. Felly dweud y gwir, mae'n edrych yn gyfan gwbl llethol, yr wyf yn meddwl, ar y dechrau yr olwg, yn enwedig os ydych yn ei chael yn anodd gyda hyn wedyn yn gweld yn ystod y cwis rhywbeth fel hyn. A ydych yn pat eich hun ar y cefn. Wel, does dim ffordd y gallwn gael dod o hyd i hwnnw ar y cwis. Ond byddwn yn dadlau, gallwch wneud hynny os byddwch yn torri i lawr i mewn i'r unigolyn achosion a dim ond cerdded drwyddo yn ofalus, er, rhaid cyfaddef, o dan amgylchiadau anodd. Diolch i'r drefn, mae'r darlun a wnaed popeth yn hapusach. Gallech dynnu hyn yn unrhyw nifer o ffyrdd. Nid oes rhaid i chi wneud y crisscrossing beth yma. Gallech wneud hynny gyda syth llinellau fel hyn. Ond mae'r hanfod y broblem hon, yn gyffredinol, oedd sylweddoli bod y Dylai llun yn y diwedd edrych ychydig yn rhywbeth fel hyn, oherwydd gysonyn amser yn awgrymu eich bod yn cadw jamio a jamio a jamio y nodau newydd ar ddechrau y rhestr. Unrhyw gwestiynau? Mae'n debyg mai'r mwyaf heriol yn sicr y cwestiynau codio. GYNULLEIDFA: Felly mae rhestr debyg i pen mewn enghreifftiau blaenorol. DAVID J. Malan: Yn union, yn union. Dim ond enw gwahanol ar gyfer newidyn byd-eang. Ledled y byd beth? ROB BOWDEN: OK. Felly, mae hyn yw'r un lle rydych yn roedd yn rhaid i ysgrifennu paragraff. Mae rhai pobl yn ysgrifennu traethodau gyfer y cwestiwn hwn. Ond dim ond angen i chi ddefnyddio'r rhain chwe thymor i ddisgrifio beth sy'n digwydd pan byddwch yn ceisio cysylltu â facebook.com. Felly, 'n annhymerus' jyst yn siarad drwy'r broses defnyddio'r holl dermau hyn. Felly, yn ein porwr, rydym deipio facebook.com a daro Chofnoda. Felly mae ein porwr yn mynd i adeiladu HTTP yn gofyn ei fod yn mynd i anfon drwy ryw broses i Facebook i Facebook er mwyn ymateb i ni gyda'r HTML ei dudalen. Felly beth yw'r broses y mae'r cais HTTP mewn gwirionedd yn cael i Facebook? Felly yn gyntaf, mae angen i ni gyfieithu Facebook.com. Felly dim ond rhoi enw Facebook.com, lle mewn gwirionedd yn gwneud y cais HTTP angen i chi fynd? Felly mae angen i gyfieithu Facebook.com i gyfeiriad IP, sy'n unigryw nodi'r hyn peiriant rydym yn ei am anfon y cais hwn i. Mae gan eich gliniadur gyfeiriad IP. Unrhyw beth yn ymwneud â'r rhyngrwyd Mae cyfeiriad IP. Felly DNS, Enw Parth System, hynny yw beth sy'n mynd i drin y cyfieithiad o facebook.com i gyfeiriad IP y chi mewn gwirionedd yn awyddus i gysylltu â hwy. Felly, byddwn yn cysylltu â'r gweinyddwyr DNS a dweud, beth yw facebook.com? Mae'n dweud, oh, mae'n gyfeiriad IP 190.212 rhywbeth, rhywbeth, rhywbeth. Mae pob hawl. Nawr, rwy'n gwybod pa peiriant Yr wyf am i gysylltu â hwy. Felly, yna rydych yn anfon eich cais HTTP draw at y peiriant. Felly, sut mae'n cyrraedd y peiriant? Wel, mae'r cais yn mynd o llwybrydd i bownsio llwybrydd. Cofiwch yr enghraifft yn y dosbarth, lle rydym mewn gwirionedd yn gweld y llwybr y mae'r Cymerodd pecynnau pan fyddwn yn ceisio i gyfathrebu. Rydym yn ei weld yn neidio dros yr Iwerydd Ocean ar un adeg neu beth bynnag. Felly mae'r porthladd tymor diwethaf. Felly, mae hyn yn awr ar eich cyfrifiadur. Gallwch gael pethau lluosog ar hyn o bryd cyfathrebu â'r rhyngrwyd. Felly, gallaf fod yn rhedeg, dyweder, Skype. Efallai fy mod yn cael borwr gwe agored. Efallai fy mod wedi rhywbeth y torrenting ffeiliau. Felly yr holl bethau hyn yn cyfathrebu â'r rhyngrwyd mewn rhyw ffordd. Felly, pan fydd eich cyfrifiadur yn cael rhywfaint o ddata oddi ar y rhyngrwyd, sut mae'n gwybod pa cais mewn gwirionedd am i'r data? Sut mae'n gwybod a yw hyn yn benodol data yn cael ei golygu ar gyfer y torrenting cais yn hytrach na i'r porwr gwe? Felly, mae hyn yw pwrpas porthladdoedd yn y bob un o'r ceisiadau hyn hawlio porthladd ar eich cyfrifiadur. Felly eich porwr gwe yn dweud, hey, Dw i'n gwrando ar borth 1000. Ac yn eich rhaglen torrenting yn ei ddweud, Dw i'n gwrando ar borth 3000. Ac Skype yn dweud, rwy'n ei ddefnyddio porthladd 4000. Felly, pan fyddwch yn cael rhywfaint o ddata sy'n perthyn i un o'r ceisiadau hyn, y data ei farcio â hwy porthladd mewn gwirionedd Dylid anfon draw i. Felly, mae hyn yn dweud, oh, yr wyf yn perthyn i borthladd 1000. Yr wyf yn gwybod, yna mae angen i mi anfon hwn draw i fy porwr gwe. Felly, y rheswm ei fod yn berthnasol yma yw bod gweinyddwyr gwe yn tueddu i gwrando ar borth 80. Felly, pan fyddaf yn cysylltu â Facebook.com, rwy'n cyfathrebu gyda rhywfaint o peiriant. Ond mae angen i mi ddweud pa borthladd o hynny peiriant Rwyf am i gyfathrebu â nhw. A gweinyddwyr gwe yn tueddu i fod gwrando ar borth 80. Os ydynt yn dymuno, gallent osod i fyny felly mae'n rhestru fel ar borth 7000. Ac yna mewn porwr gwe, gallwn llaw deipio Facebook.com: 7000 i anfon y cais i borthladd 7000 o Facebook yn weinydd y we. DAVID J. Malan: Ac yn yr achos hwn, hyd yn oed er nad oeddem yn ei gwneud yn ofynnol bod pobl sôn am hyn, yn yr achos hwn, pa borthladd byddai'r cais mewn gwirionedd yn mynd i? Ceisiwch eto. Yn union. Nad ydynt yn chwilio am hynny, ond mae cynildeb bod yno serch diwethaf. ROB BOWDEN: Felly, y HTTPS, gan ei fod yn gwrando yn benodol ar gyfer y amgryptio, mae'n ar borth 4430. GYNULLEIDFA: A negeseuon e-bost yn 25 oed, dde? DAVID J. Malan: Allan negeseuon e-bost, 25, yep. ROB BOWDEN: Nid wyf yn hyd yn oed yn gwybod y rhan fwyaf o y - pob un o'r rhai sydd â'r lleiaf yn tueddu i fod neilltuo ar gyfer pethau. Rwy'n credu popeth o dan 1024 wedi'i gadw. GYNULLEIDFA: Pam wnaethoch chi ei ddweud 3 oedd y rhif anghywir? ROB BOWDEN: Oherwydd yn gyfeiriad IP, mae pedwar grwpiau o ddigidau. Ac maen nhw'n 0-255. Felly 192.168.2.1 yn gyffredin gyfeiriad IP rhwydwaith lleol. Sylwch pawb yn llai na 255. Felly, pan fyddaf yn dechrau gyda 300, bod Ni allai o bosibl gael bod yn un o'r rhifau. DAVID J. Malan: Ond y clip gwirion o - oedd DPC, lle'r oedd ganddynt nifer a oedd yn rhy fawr ar gyfer y cyfeiriad IP. ROB BOWDEN: Unrhyw gwestiynau am hyn? Yr un nesaf, newid mor gyflawn yn pwnc, ond mae gennym amrywiaeth hwn PHP ar gyfer y tai yn y cwad. Ac mae gennym restr di-drefn. Ac rydym am i argraffu pob eitem rhestr dim ond yn cynnwys enw'r tŷ. Felly mae gennym dolen foreach. Felly cofiwch, mae'r gystrawen yn foreach amrywiaeth fel eitem yn y casgliad. Felly, drwy bob fersiwn y ddolen, tŷ yn mynd i gymryd ar un o'r gwerthoedd y tu mewn y rhesi. Ar y iteriad cyntaf, tŷ fydd Cabot House. Ar iteriad ail, tŷ yn fod Courier House ac yn y blaen. Felly, ar gyfer pob quad fel y ty, rydym yn jyst yn mynd i argraffu - byddwch hefyd fod wedi adleisio - yr eitem y rhestr ac yna enw'r tŷ ac yna cau'r eitem rhestr. Mae'r braces cyrliog yn ddewisol yma. Ac yna rydym hefyd yn dweud yn y cwestiwn ei hun, cofiwch gau'r tag rhestr di-drefn. Felly mae angen i adael modd PHP er mwyn gwneud hyn. Neu gallem fod wedi adleisio cau tag rhestr di-drefn. DAVID J. Malan: Hefyd iawn yma byddai wedi bod yn defnyddio hen ysgol ar gyfer dolen gyda $ i = 0 0 a defnyddio cyfrif i chyfrif i maes hyd y pelydr. Hollol iawn hefyd, dim ond ychydig o wordier. GYNULLEIDFA: Felly, os ydych yn mynd i [Anghlywadwy], fyddech chi'n ei wneud - Yr wyf yn anghofio beth y ddolen [Anghlywadwy] yn. A fyddech yn $ braced cwad i? DAVID J. Malan: Yn union. Yeah, yn union. ROB BOWDEN: Unrhyw beth arall? DAVID J. Malan: Pob hawl. Masnach-offs. Felly roedd tusw o atebion posibl ar gyfer pob un o'r rhain. Roeddem yn wir yn unig yn chwilio am rhywbeth gymhellol ar gyfer upside a anfantais. A rhif 16 Gofynnodd, dilysu defnyddwyr ar ochr cleientiaid mewnbwn, fel gyda JavaScript, yn hytrach na-ochr y gweinydd, fel gyda PHP. Felly beth yn upside o wneud ar ochr cleientiaid? Wel, un o'r pethau yr ydym arfaethedig yn eich bod yn lleihau latency, oherwydd eich bod Nid oes rhaid i drafferthu cysylltu â'r Efallai y gweinydd, sy'n cymryd ychydig milieiliadau neu hyd yn oed ychydig o eiliadau drwy osgoi hynny, a dim ond dilysu mewnbwn ar ochr cleientiaid defnyddwyr gan sbarduno trafodwr ar-gyflwyno a dim ond gwirio, wnaethon nhw deipio rhywbeth i mewn am enw? A oeddent yn teipio rhywbeth mewn ar gyfer cyfeiriad e-bost? Oedden nhw'n dewis dorm gan ddewislen i lawr? Gallwch roi adborth iddynt ar y pryd ddefnyddio'r cyfrifiadur gigahertz neu beth bynnag y maent wedi bod yn mewn gwirionedd ar eu desg. Felly, dim ond yn well defnyddiwr profi fel arfer. Ond mae anfantais o wneud ar ochr cleientiaid dilysu, os ydych yn ei wneud heb hefyd gwneud dilysu ochr y gweinydd yw bod y rhan fwyaf o unrhyw un sy'n dod allan o CS50 yn gwybod y gallwch anfon unrhyw ddata rydych am i weinydd unrhyw nifer o ffyrdd. A dweud y gwir, yn y rhan fwyaf o unrhyw borwr, gallwch cliciwch o gwmpas yn y lleoliadau a dim ond trowch oddi ar JavaScript, a fyddai, Felly, analluogi unrhyw fath o dilysu. Ond rydych hefyd a allai cofio bod hyd yn oed i mi oedd rhai pethau dirgel yn y dosbarth gan ddefnyddio telnet ac mewn gwirionedd yn esgus bod fod yn porwr drwy anfon get ceisiadau i weinydd. A dyna yn sicr nid ddefnyddio unrhyw JavaScript. Dyna dim ond fi teipio gorchmynion mewn bysellfwrdd. Felly mewn gwirionedd, unrhyw rhaglennydd fewn digon cysur â'r we a HTTP Gallai anfon pa bynnag ddata ef neu hi eisiau i weinydd heb dilysu. Ac os nad yw eich gweinydd yn hefyd yn gwirio, oeddent yn rhoi enw i mi, yw mae hyn mewn gwirionedd yn gyfeiriad e-bost dilys, a wnaeth yn dewis dorm, efallai y byddwch yn dod i ben i fyny mewnosod ffug neu dim ond data yn wag i mewn i'ch cronfa ddata, a oedd yn ôl pob tebyg nid yw'n mynd i fod yn beth da os oeddech yn tybio ei fod yn yno. Felly, mae hyn yn realiti blino. Ond yn, ar ochr cleientiaid cyffredinol dilysu yn wych. Ond mae'n golygu dwywaith cymaint o waith. Er bod yn bodoli amrywiol llyfrgelloedd, llyfrgelloedd JavaScript ar gyfer enghraifft, bod gwneud hyn yn llawer, llawer llai o gur pen. A gallwch ailddefnyddio rhai y cod ochr y gweinydd, ar ochr cleientiaid. Ond yn sylweddoli ei fod yn nodweddiadol gwaith ychwanegol. Yeah. GYNULLEIDFA: Felly, os ydym yn unig Dywedodd llai diogel - DAVID J. Malan: [Chwerthin] Ych. Dyna'r bob amser yn fwy anodd rhai i feirniadu. ROB BOWDEN: Byddai hynny'n wedi cael eu derbyn. DAVID J. Malan: Beth? ROB BOWDEN: yr wyf yn creu y broblem hon. Byddai hynny wedi cael eu derbyn. DAVID J. Malan: Yeah. GYNULLEIDFA: Cool. ROB BOWDEN: Ond nid ydym yn derbyn am yr un cyntaf - yn dda, yr hyn yr ydym yn chwilio amdano yw Nid oes rhaid rhywbeth fel chi i gyfathrebu gyda'r gweinydd. Nid ydym yn derbyn dim ond yn gyflymach. GYNULLEIDFA: Beth am nid ydynt yn ail-lwytho'r dudalen? ROB BOWDEN: Ydw. Yr oedd hwnnw'n ateb derbyn. DAVID J. Malan: Unrhyw beth lle rydym yn teimlo ei fod yn fwy tebygol na pheidio yn debygol eich bod yn gwybod yr hyn yr ydych yn gan ddywedyd, sy'n anodd lein i dynnu weithiau. Gan ddefnyddio rhestr gysylltiedig yn lle hynny o fyrdd i gynnal rhestr o gyfanrifau didoli. Felly mae upside rydym yn aml yn dyfynnu gyda cysylltiedig rhestrau y cymell eu cyfan cyflwyniad oedd chi gael egni. Gallant dyfu. Maent yn gallu crebachu. Felly nid oes rhaid i chi neidio drwy gylchoedd i mewn gwirionedd yn creu mwy o gof gydag amrywiaeth. Neu nid oes rhaid i chi yn unig dweud, mae'n ddrwg gennyf, y defnyddiwr. Mae'r amrywiaeth yn cael ei lenwi. Twf Felly deinamig y rhestr. Mae anfantais er ei fod o restrau cysylltiedig? GYNULLEIDFA: Mae'n LandLine llinol. Chwilio ar rhestr gysylltiedig yn llinol yn hytrach na'r hyn y byddwch yn mewngofnodi i mewn DAVID J. Malan: Yn union. Chwilio ar restr cysylltiedig yn llinol, hyd yn oed os caiff ei datrys, oherwydd eich bod yn gallu Dim ond yn dilyn briwsion bara hyn, mae'r rhain yn awgrymiadau, o ddechrau'r y rhestr hyd y diwedd. Ni allwch trosoledd mynediad ar hap ac, felly, chwilio deuaidd, hyd yn oed os yw'n didoli, y gallech ei wneud gydag amrywiaeth. Ac mae hefyd cost arall. Yeah. GYNULLEIDFA: Cof aneffeithlon? DAVID J. Malan: Yeah. Wel, ni fyddwn o reidrwydd yn dweud yn aneffeithlon. Ond mae'n costio mwy cof i chi, oherwydd eich bod angen 32 darnau ar gyfer pob nod ar gyfer y pwyntydd ychwanegol, yn leiaf am rhestr gysylltiedig yn unigol. Yn awr, os ydych yn unig yn storio cyfanrifau a eich bod yn ychwanegu'r pwyntydd, dyna mewn gwirionedd yn fath o heb fod yn ddibwys. Mae'n dyblu faint o gof. Ond mewn gwirionedd, os ydych yn storio rhestr gysylltiedig o structs a allai gael 8 bytes, 16 bytes, hyd yn oed yn fwy na hynny, efallai ei bod yn llai o gost ymylol. Ond mae'n gost serch hynny. Felly, byddai unrhyw un o'r rhai i wedi bod yn iawn fel anfanteision. 18. Gan ddefnyddio PHP yn hytrach na C i ysgrifennu rhaglen gorchymyn-lein. Felly dyma, mae'n aml yn gyflymach i ddefnyddio iaith fel PHP neu Ruby neu Python. Rydych yn unig yn agor yn gyflym i fyny golygydd testun. Mae gennych lawer mwy o swyddogaethau ar gael i chi. PHP Mae gan sinc y gegin o swyddogaethau, tra yn C, yr ydych yn cael iawn, ychydig iawn. Yn wir, guys y gwybod y ffordd galed nad oes gennych tablau hash. Nid ydych yn wedi cysylltu rhestrau. Os ydych chi am hynny, rhaid i chi gweithredu eich hun. Felly, un peth gorau am PHP neu, mewn gwirionedd unrhyw iaith dehongli yw'r mor gyflym gallwch ysgrifennu cod â hi. Ond mae ochr negyddol, rydym yn gweld hyn pan fyddaf yn chwipio yn gyflym i fyny misspeller gweithredu yn y ddarlith gan ddefnyddio PHP, yn bod defnyddio iaith dehongli fel arfer yn arafach. A gwelsom hynny amlwg gyda cynnydd mewn amser o 0.3 eiliad i 3 eiliad, oherwydd y dehongliad hynny'n digwydd mewn gwirionedd. Upside arall oedd bod chi Nid oes rhaid i lunio. Felly, mae hefyd yn cyflymu'r datblygiad gyda llaw, oherwydd nad oes gennych dau gam i redeg rhaglen. Os oes gen ti un. Ac felly dyna 'n bert cymhellol yn ogystal. Gan ddefnyddio cronfa ddata SQL yn hytrach na ffeil CSV i storio data. Cronfa ddata Felly SQL yn cael ei ddefnyddio ar gyfer pset7. Ffeiliau CSV nad ydych yn defnyddio llawer. Ond a ydych yn ei ddefnyddio yn anuniongyrchol yn pset7 fel yn dda trwy siarad â Yahoo Cyllid. Ond mae CSV yn union fel ffeil Excel, ond super syml, lle mae'r colofnau yn dim ond demarked gan atalnodau tu mewn o ffeil testun fel arall. A defnyddio cronfa ddata SQL yn ychydig yn fwy cymhellol. Mae'n upside, oherwydd eich bod yn cael pethau'n fel yn dewis ac yn mewnosod a dileu. A byddwch yn cael, yn ôl pob tebyg, mynegeion y MySQL a chronfeydd data eraill, fel Oracle, yn adeiladu ar eich cyfer yn y cof, a oedd yn golygu bod eich dewis yn ôl pob tebyg nid mynd i fod yn top llinellol i'r gwaelod. Mae'n mewn gwirionedd yn mynd i fod yn rhywbeth fel chwiliad deuaidd neu rywbeth debyg o ran ysbryd. Felly, maent yn gyffredinol yn gyflymach. Ond anfantais yw y 'i' jyst mwy o waith. Mae'n fwy o ymdrech. Mae'n rhaid i chi ddeall cronfeydd data. Rhaid i chi osod i fyny. Mae angen i chi gweinydd i redeg y gronfa ddata ar. Mae angen i chi ddeall sut i ffurfweddu. Felly mae'r rhain yn unig y rhain math o fasnach-offs. Tra bod ffeil CSV, gallwch greu gyda gedit. Ac rydych yn dda i fynd. Does dim cymhlethdod y tu hwnt i hynny. Gan ddefnyddio trie yn hytrach na tabl hash gyda gadwyno ar wahân i storio Geiriadur o eiriau sy'n atgoffa rhywun o pset5. Felly yn ceisio upside, mewn theori o leiaf, yw beth? Gysonyn amser, o leiaf os ydych yn stwnsio ar bob un o'r unigolyn llythrennau mewn gair, fel chi ei gael ar gyfer pset5. Gallai hynny fod pum hashes, chwech hashes os oes pump neu chwe llythyrau yn y gair. A dyna 'n bert da. Ac os oes uchaf yn rhwymo ar sut hir y gallai eich geiriau fod, dyna amser yn wir asymptotically gyson. Tra tabl hash â ar wahân gadwyno, y broblem yno gyda hynny fath o strwythur data yw bod y perfformiad eich algorithmau fel arfer yn dibynnu ar nifer o bethau eisoes yn y strwythur data. A dyna yn bendant yn achos cadwyni, lle mae'r mwy o bethau i chi roi mewn tabl hash, yr hiraf y rhai cadwyni fynd, sy'n golygu yn y gwaethaf achos, y peth efallai y byddwch yn chwilio am yn yr holl ffordd ar ddiwedd un o gadwyni hynny, sy'n effeithiol datganoli i fod yn rhywbeth llinol. Yn awr, yn ymarferol, gallai gwbl yn wir fod tabl hash gyda cadwyni yn gyflymach na cyfatebol gweithredu trie. Ond mae hynny'n am wahanol resymau, ymhlith sy'n cael eu ceisiau yn defnyddio llawer gyfan o cof y gall, mewn gwirionedd, pethau araf i lawr, oherwydd nad ydych yn cael 'n glws manteision rhywbeth o'r enw caching, lle mae pethau sy'n agos at ei gilydd Gellir gweld er cof aml yn fwy cyflym. Ac weithiau gallwch ddod o hyd i swyddogaeth hash dda iawn. Hyd yn oed os oes rhaid i wastraff ychydig o cof, efallai y byddwch, yn wir, yn gallu dod o hyd i bethau yn gyflym ac nid mor ddrwg ag llinol. Felly, yn fyr, nid oedd o reidrwydd yn gydag unrhyw un o'r un neu hyd yn oed ddau pethau penodol yr oeddem yn chwilio amdano. Really unrhyw beth perswadiol fel upside ac anfantais dal ein llygaid yn gyffredinol. ROB BOWDEN: Felly, ar gyfer y upside, fe wnaethom yn derbyn ar ei ben ei hun "cyflymach." Rydych yn roedd yn rhaid i ddweud rhywbeth am y peth. Hyd yn oed os ydych yn dweud yn ddamcaniaethol yn gyflymach, rydym yn gwybod eich bod yn fath o deall ei fod yn 0 o 1. A bwrdd hash, mewn theori, Nid yw 0 o 1. Sôn am unrhyw beth am runtime cael y cyfan y pwyntiau. Ond "cyflymach," y rhan fwyaf o'r atebion ar y bwrdd mawr a oedd cais yn wrthrychol arafach nag atebion a oedd tablau hash. Felly gyflymach mewn ac o ei hun nid yw'n wir yn wir. DAVID J. Malan: Dom de dom dom. Rwy'n fwy na thebyg yr unig un sy'n sylweddoli dyna sut y mae hynny'n ei fod i yn cael ei ynganu, dde? ROB BOWDEN: gen i ddim syniad mewn gwirionedd. DAVID J. Malan: Mae'n gwneud synnwyr yn fy mhen. ROB BOWDEN: Rwy'n gwneud hyn yn un. OK. Felly, mae hyn yn un lle bu'n rhaid i chi dynnu y diagram tebyg i chi efallai wedi gweld ar arholiadau gorffennol. Felly, gadewch i ni dim ond yn edrych ar hyn. Felly, oddi wrth y nod HTML, mae gennym ddau plant, y pennaeth a'r corff. Felly rydym cangen - pennaeth a'r corff. Mae gan y pennaeth tag teitl. Felly mae gennym teitl. Yn awr, yr un peth mae llawer o bobl yn anghofio yw bod nodau destun hyn yn elfennau o fewn y goeden hon. Felly dyma ni yn digwydd i dynnu arnynt fel siapiau hirgrwn i'w gwahaniaethu o'r rhain mathau o nodau. Ond rhybudd yma hefyd mae gennym uchaf, Bydd canol, a gwaelod y pen draw yn cael ei nodau testun. Felly anghofio hynny, yr oedd braidd yn i gamgymeriad cyffredin. Mae gan y corff dri o blant - y tri divs. Felly div, div, div ac yna y testun nod plant divs hynny. Dyna 'n bert lawer iddo am hynny cwestiynau. DAVID J. Malan: Ac mae'n werth nodi, er nad ydym yn trigo ar y rhain manylion yn yr amser rydym yn ei wario ar JavaScript, bod y gorchymyn yn ei wneud, yn gwirionedd, mater dechnegol. Felly, os pennaeth yn dod gerbron y corff yn y HTML, yna dylai ymddangos i'r chwith corff yn y DOM gwirioneddol. Mai ei yw, yn gyffredinol, dim ond FYI, rhywbeth o'r enw gorchymyn ddogfen, lle mae'n ei wneud mater. Ac os ydych yn gweithredu parser, rhaglen sy'n darllen HTML mewn adeiladu i fyny y goeden mewn cof, a bod yn onest, dyna reddfol yn ôl pob tebyg yr hyn yr ydych gwneud beth bynnag - top i'r gwaelod, chwith i'r dde. ROB BOWDEN: Cwestiynau ar hynny? A ddylwn i wneud yr un nesaf? DAVID J. Malan: Cadarn. ROB BOWDEN: OK. Felly mae hwn yn y byffer gor-redeg cwestiwn ymosodiad. Y prif beth i'w gydnabod yma yw, yn dda, sut y gallai tric gwrthwynebwr rhaglen hon yn gweithredu cod mympwyol? , 'R archa bannod cyntaf, felly argv1 ddadl at y rhaglen hon, a all fod yn fympwyol hir. Ond yma rydym yn defnyddio memcpy i gopïo argv1, sydd yma yw bar. Rydym yn pasio fel y ddadl. Ac felly mae'n cymryd ar y bar enw. Felly, rydym yn memcpying bar yn byffer hwn yn c. Faint o bytes ydym yn copïo? Wel, fodd bynnag, mae llawer o bar bytes digwydd i yn ei ddefnyddio, hyd y ddadl honno. Ond c yw dim ond 12 bytes o led. Felly, os ydym deipio ymresymiad llinell orchymyn sy'n fwy na 12 bytes, rydym yn mynd i orlifo hwn byffer penodol. Nawr, sut y gallai gwrthwynebwr twyllo y rhaglen i weithredu cod mympwyol? Felly cofiwch hynny yma prif yn galw foo. Ac felly, yna prif alwadau foo. Gadewch i ni tynnu hyn. Felly, rydym wedi ein pentwr. A phrif Mae ffrâm pentwr ar y gwaelod. Ar ryw adeg, prif galwadau foo. Wel, yn union, prif alwadau foo. Ac felly foo yn cael ei ffrâm pentwr hun. Nawr, ar ryw adeg, foo yn mynd i ddychwelyd. Ac aeth ffurflenni foo, mae angen i ni wybod ar pa linell o god tu mewn prif rydym mewn trefn i wybod ble dylem ailddechrau yn y prif. Gall Rydym yn galw foo gan ei gyfanrwydd criw o wahanol leoedd. Sut ydym ni'n gwybod ble i ddychwelyd? Wel, mae angen i storio'r rhywle. Felly rhywle dde o gwmpas yma, rydym yn cadw lle y dylem ddychwelyd unwaith ffurflenni foo. A hon yw'r cyfeiriad dychwelyd. Felly, sut y gallai gwrthwynebwr yn manteisio o hyn yw'r ffaith bod byffer hwn yn c yn cael ei storio, gadewch i ni dweud, dde yma yn c. Felly, mae gennym 12 o bytes ar gyfer c. Mae hyn yn c. Ac mae hyn yn gylch stac foo yn. Felly, os bydd y defnyddiwr yn mynd i mewn mwy maleisus bytes na 12 neu eu bod yn mynd i mewn i gorchymyn ymresymiad llinell sy'n fwy na 12 cymeriadau, yna rydym yn mynd i gorlifo byffer hwn. Gallwn ddal ati. Ac ar ryw bwynt, yr ydym yn mynd yn bell digon ein bod yn dechrau ysgrifennu dros y cyfeiriad dychwelyd. Felly, ar ôl i ni ysgrifennu dros y cyfeiriad dychwelyd, mae hyn yn golygu pan fydd foo ffurflenni, rydym yn dychwelyd i ble bynnag y defnyddiwr maleisus yn dweud iddo gan pa bynnag werth ei gofnodi, trwy ba bynnag cymeriadau y defnyddiwr gofnodi. Ac felly os bydd y defnyddiwr maleisus yn cael ei yn arbennig o glyfar, gall gael y dychwelyd i rywle yn y printDef swyddogaeth neu rywle yn y malloc swyddogaeth, dim ond unrhyw le yn fympwyol. Ond hyd yn oed yn fwy clyfar yw'r hyn os oes ganddo y defnyddiwr yn dychwelyd i'r dde yma. Ac yna byddwch yn dechrau gweithredu rhain fel llinellau o god. Felly, ar y pwynt hwnnw, gall y defnyddiwr fynd i mewn beth bynnag y mae am i'r rhanbarth hwn. Ac mae ganddo reolaeth lwyr dros eich rhaglen. Cwestiynau ar hynny? Felly, y cwestiwn nesaf yw llenwi'r reimplementation o foo yn y fath fodd nad yw bellach ei fod yn agored i niwed. Felly mae yna ychydig o ffyrdd gallech fod wedi gwneud hyn. Mae gennym c yn unig bod o hyd 12. Gallech fod wedi newid hyn fel rhan o'ch ateb. Rydym hefyd yn ychwanegu siec i wneud ddim yn siŵr bar oedd null. Er nad oedd angen i chi hynny ar gyfer credyd llawn. Felly, rydym yn gwirio yn gyntaf y hyd cyfres o bar. Os yw'n fwy na 12, yna nid ydynt mewn gwirionedd yn gwneud y copi. Felly dyna un ffordd o ei datrys. Ffordd arall o osod ei fod yn hytrach na cael c Dim ond hyd 12, wedi ei fod o strlen hyd (bar). Ffordd arall o osod ei fod yn i mewn gwirionedd dim ond yn dychwelyd. Felly, os ydych oedd newydd gotten gwared ar yr holl hyn, os ydych wedi dim ond dileu pob llinellau o god, byddech wedi gotten credyd llawn, gan fod y swyddogaeth hon Nid yw mewn gwirionedd yn cyflawni unrhyw beth. Mae'n copïo 'r archa bannod ddadl i rai amrywiaeth yn ei ffrâm pentwr lleol. Ac yna y peth yn dychwelyd. A beth bynnag medrus wedi mynd. Felly roedd dychwelyd hefyd yn ddigon ffordd o gael credyd llawn. DAVID J. Malan: Nid yn y ysbryd y cwestiwn ond derbyniol unol â'r fanyleb serch hynny. ROB BOWDEN: Cwestiynau ar unrhyw un o hynny? Yr un peth eich bod o leiaf sydd eu hangen i wedi llunio cod. Felly hyd yn oed er yn dechnegol nad ydych yn agored i niwed os nad yw eich cod yn llunio, nid ydym yn derbyn hynny. Dim cwestiynau? OK. DAVID J. Malan: Ydych chi eisiau i ddweud teitl hwn? ROB BOWDEN: Na DAVID J. Malan: Felly, yn yr un yma, mae hyn yn oedd naill ai'n newyddion da neu newyddion drwg. Mae hyn yn llythrennol yr un broblem fel y cwis cyntaf. Ac mae'n bron yr un fath problem fel pset1. Ond ei symleiddio yn fwriadol i fod yn pyramid symlach, un a all fod yn datrys gyda ychydig yn iteriad symlach. Ac yn wir, yr hyn yr ydym yn ei gael ar yma nid oedd yn gymaint y rhesymeg, oherwydd yn ôl pob tebyg, gan y pwynt hwn, rydych yn yn fwy cyfforddus nag yr oeddech chi yn wythnos un â ar gyfer dolenni neu pam dolennau, ond mewn gwirionedd i dynnu ar wahân bod eich bod ychydig yn gyfforddus gyda'r syniad nad yw PHP yn unig am yr hyn rhaglennu. Gall fod mewn gwirionedd yn cael ei ddefnyddio fel iaith i ysgrifennu rhaglenni llinell orchymyn. Ac yn wir, dyna beth rydym yn ceisio i dynnu eich sylw at. Mae hon yn rhaglen PHP llinell orchymyn. Felly C cod yma, tra gywir yn C, nid cywiro ar gyfer PHP. Ond mae'r cod yn wir yn yr un fath. Os ydych yn cymharu atebion ar gyfer Cwis 0 yn erbyn Cwis 1, fe welwch fod mae bron yn union yr un fath, ac eithrio ar gyfer rhai arwyddion doler ac ar gyfer y absenoldeb o fath data. Yn benodol, os byddwn yn edrych yma, byddwch yn gweld ein bod yn ailadrodd, yn yr achos, o 1 i fyny drwy'r 7. Gallem fod wedi gwneud hyn 0 mynegai. Ond weithiau, yr wyf yn meddwl mai dim ond haws yn feddyliol i feddwl am bethau 1-7. Os ydych angen un bloc, yna dau blociau, yna tri, yna dot, dot, dot saith. Rydym wedi j cael ei ymgychwyn i 1 ac yna cyfrif ar hyd at i. Ac mae popeth yma yw fel arall union yr un fath. Ond werth nodi yn un neu ddau o bethau. Rydym yn rhoi y ddwy linell, hyn yn gyntaf i chi un, a enwyd goofily fel shebang ar gyfer bang miniog. Ac mai dim ond yn nodi'r llwybr, y ffolder, lle gall rhaglen fod yn Canfu eich bod am ei ddefnyddio i ddehongli y ffeil. Ac yna y llinell ar ôl hynny, o gwrs, yn golygu mynd i mewn modd PHP. A llinell ar y gwaelod yn golygu dull PHP allanfa. Ac mae hyn yn gweithio, yn gyffredinol, gyda dehongli iaith. Mae'n fath o blino os byddwch yn ysgrifennu yn rhaglen mewn ffeil o'r enw foo.php. Ac yna eich defnyddwyr rhaid i ychydig cofiwch, OK, i redeg y rhaglen hon, yr wyf yn rhaid i deipio "foo.php lle php." Kind o blino os dim byd arall. Ac mae hefyd yn datgelu bod eich rhaglen wedi ei ysgrifennu yn PHP, ac nid yw pob sy'n goleuo ar gyfer y defnyddiwr. Felly, gallwch chi gael gwared ar y. Php yn gyfan gwbl dwyn i gof o ddarlith. A allwch chi ei wneud mewn gwirionedd. / Foo os eich bod wedi chmodded drwy ei gwneud yn gweithredadwy. Felly byddai chmod a + x foo wedi gwneud hynny. Ac os ydych hefyd yn ychwanegu y shebang yma. Ond mewn gwirionedd, y broblem yn mynd yn argraffu rhywbeth fel hyn. Dim HTML, dim C-god yn sicr, dim ond rhai PHP. Felly, cyn dychwelyd Milo yn broblem 25. Ac yn 25, a roddwyd i chi y canlynol cod sgerbwd, a oedd yn dudalen 'n bert syml ar y we. A'r rhan llawn sudd HTML-doeth oedd i lawr yma, lle mae gennym tu mewn i'r corff ffurflen sydd ID unigryw o fewnbynnau tu mewn a oedd dau fewnbwn, un gyda syniad o enw, un gyda syniad o botwm. Y cyntaf oedd testun y math, y ail o'r math cyflwyno. Ac felly rydym yn rhoi i chi, mewn gwirionedd, yn fwy cynhwysion nag sydd ei angen i chi, dim ond er mwyn oedd gennych guys opsiynau ag ef i ddatrys y broblem hon. Nid oes angen i chi llym pob un o'r IDs hyn. Ond mae'n eich galluogi i ddatrys mewn gwahanol ffyrdd. Ac i fyny ar y brig, yn sylwi bod yr amcan oedd i sbarduno a fel hyn ffenestr - Helo, Milo! - i pop i fyny yn y porwr ddefnyddio y super syml, os Nid hyll swyddogaeth, yn effro. Ac felly, yn y pen draw, mae hyn yn boils i lawr gysyniadol i wrando rywsut ar gyfer cyflwyniadau o'r ochr cleientiaid ffurflen , Nid yw'r ochr y gweinydd, rhywsut ymateb i'r cyflwyniad gan gydio yn y gwerth y mae'r defnyddiwr deipio i mewn i'r maes enw, ac yna ei arddangos yn y corff o rybudd. Felly, un ffordd y gallwch wneud hyn yw gyda jQuery, sy'n edrych ychydig yn syntactically peri dryswch ar y dechrau. Gallwch wneud hyn â chod DOM pur - document.getelement drwy adnabod. Ond gadewch i ni edrych ar y fersiwn. Mae gen i un neu ddau o bwysig llinell gyntaf. Felly un, mae gennym y llinell hon, sy'n union i'r hyn y gallech fod wedi gweld i mewn, yr wyf yn credu, form2.html o ddosbarth yn wythnos 9. Ac mae hyn yn unig yw dweud, gweithredu y cod canlynol wrth y ddogfen yn barod. Mae hyn yn bwysig yn unig oherwydd Tudalennau HTML yn cael eu darllen top i gwaelod, chwith i'r dde. Ac felly, os ydych yn ceisio gwneud rhywbeth mewn cod i fyny yma i ryw DOM elfen, mae rhai tag HTML, dyna i lawr yma, rydych yn ei wneud yn rhy fuan, gan fod hyn wedi hyd yn oed cael eu darllen i mewn i gof. Felly, drwy ddweud document.ready hwn lein, rydym yn ei ddweud, dyma ychydig o cod, porwr. Ond peidiwch â gweithredu hyn nes bod y cyfan ddogfen yn barod, hynny yw'r DOM goeden yn bodoli yn y cof. Mae hyn yn un ychydig yn fwy syml, os syntactically yn ychydig yn wahanol, ble i ddim yn dweud, cydio yr elfen HTML sy'n unigryw dynodwr yn mewnbynnau. Dyna beth y tag hash dynodi, mae'r ID unigryw. Ac yna dwi'n galw. Cyflwyno. So. Cyflwyno yma yw swyddogaeth, fel arall a elwir yn ddull, dyna tu mewn y gwrthrych ar y llaw chwith- ochr yno nad oeddwn yn tynnu sylw. Felly, os ydych yn meddwl o fewnbynnau fel gwrthrych mewn cof - ac yn wir y mae. Mae'n nod mewn coeden - . Cyflwyno dulliau pan y ffurflen hon gyda ID hwn yn cael ei gyflwyno, gweithredu y cod canlynol. Nid wyf yn poeni beth yw enw y swyddogaeth yw fy mod yn cyflawni. Felly dyma Im 'yn arfer, fel o'r blaen, beth sydd a elwir y swyddogaeth lamda neu swyddogaeth dienw. Nid yw'n gwbl ddeallusol diddorol ac eithrio nad oes ganddo enw, sydd yn iawn os ydych yn unig byth yn mynd i alw unwaith. Ac y tu mewn yno Fi 'n weithredol yn trin cyflwyno'r ffurflen. Yr wyf yn datgan newidyn yn gyntaf Gelwir gwerth. Ac yna beth yw effaith hyn tynnu sylw at gyfran yma nawr? Beth mae hynny'n ei wneud ar lefel uchel i mi? GYNULLEIDFA: Mae'n cael y gwerth y mae'r nid oedd y defnyddiwr yn y HTML isod. Mae'n cael y ID ac yna dod o hyd i'r gwerth ohono. DAVID J. Malan: Yn union. Mae'n cydio yn y nod, y mae ei unigryw dynodwr yn enw. Mae'n cael y gwerth ynddo, a yw, yn ôl pob tebyg, yr hyn y mae'r defnyddiwr deipio ei hun. Ac yna mae'n storio, yn y amrywiol o'r enw gwerth. Fel o'r neilltu, gallech gael hefyd gwneud hyn ychydig yn wahanol. Hollol dderbyniol drwy wneud rhywbeth gwerth var gorwedd yn cael document.getElementById. A dyma pam ei fod ychydig yn ddiflas i beidio â defnyddio jQuery. "Enw". Gwerth. Felly hollol dderbyniol. Gwahanol ffyrdd o wneud hyn. jQuery yn unig yn tueddu i fod ychydig yn fwy cryno a bendant yn fwy poblogaidd ymhlith rhaglenwyr. Yn awr, yr wyf i'n gwneud ychydig o bwyll siec, oherwydd yn y broblem dywedasom y datganiad yn benodol, os yw'r Nid yw'r defnyddiwr wedi teipio eto ef neu hi enw, nid ydynt yn dangos rhybuddion. Ond gallwch wirio am hynny, o ychydig gwirio am y llinyn wag am dyfynnwch-unquote os oes dim byd mewn gwirionedd yno. Ond os nad yw'n hafal i ddyfynnu-unquote, Yr wyf am i alw rhybuddion. A'r rhan diddorol yma yw bod rydym yn defnyddio'r gweithredwr a mwy, sy'n gwneud beth yn JavaScript? Concatenate. Felly, mae fel PHPs dot gweithredwr. Un syniad, ychydig yn wahanol gystrawennau. A dwi'n dim ond creu llinyn y welsoch ar y screen ergyd - Helo, felly ac yn y blaen. Ac yna y manylion diwethaf yw hyn. Pam ydw i'n dychwelyd tu mewn ffug y swyddogaeth dienw? GYNULLEIDFA: Does dim gwerth. Ei roi yn ffurflen. 'I jyst yn dweud, os nad yw gwerth yn cyfartal i wag, yna yn ei wneud. Roedd wag yn y cyflwyniad. DAVID J. Malan: OK. Ofalus er. Nid oes unrhyw un arall yma. A bod yn ffug yn dychwelyd y tu allan o os yw amodau. Felly, mae hyn tynnu sylw at y llinell, yn dychwelyd ffug, executes waeth beth pan y ffurflen yn cael ei chyflwyno. Beth mae dychwelyd tu mewn ffug o hyn trin y digwyddiad, gan ei fod yn cael ei alw, y digwyddiad dan sylw cael ei gyflwyno? GYNULLEIDFA: Oherwydd ei fod yn ond yn digwydd unwaith. DAVID J. Malan: Dim ond yn digwydd unwaith. Ddim yn hollol. Yeah? GYNULLEIDFA: Mae'n atal y ffurflen oddi cyflwyno i'r ymddygiad diofyn, a fyddai'n gwneud y dudalen ail-lwytho. DAVID J. Malan: Yn union. Felly, yr wyf i'n gorlwytho y term cyflwyno yma, oherwydd fy mod ddim yn dweud, y ffurflen yw yn cael ei gyflwyno. Ond fel yr awgrymwch, mae'n mewn gwirionedd nid ei gyflwyno yn y ffordd HTTP wir. Pan fyddwch yn clicio Cyflwyno, oherwydd ein triniwr onSubmit, rydym yn rhyng-gipio y ffurflen gyflwyno fel petai. Yna rydym yn gwneud ein peth â chod JavaScript. Ond dw i'n dychwelyd ffug yn fwriadol, oherwydd yr hyn nad wyf am ei weld yn digwydd yn eiliad yn ddiweddarach ar gyfer y ffurflen gyfan ei hun i gael ei gyflwyno i'r we gweinyddwr gyda parau gwerth allweddol drwy newid yr URL i fod yn rhywbeth fel q = cathod neu beth bynnag a wnaethom, er enghraifft, yn y dosbarth. Nid wyf am i hynny ddigwydd, oherwydd nid oes unrhyw gwrando gweinydd ar gyfer hyn ffurfio cyflwyniad. Mae'n ei wneud yn unig mewn cod JavaScript. A dyna pam nad wyf ddim hyd yn oed yn cael gweithredu priodoli ar fy ffurflen, oherwydd yr wyf yn nad ydynt yn bwriadu i hyn byth yn mynd at 'r gweinyddwr. Felly, mae'n cael ei gyflwyno. Ond rydym yn rhyng-gipio y ffurflen cyflwyno ac atal 'r ball ymddygiad, sef mewn gwirionedd fynd yr holl ffordd i'r gweinydd. GYNULLEIDFA: Felly gadw ar ochr cleientiaid. DAVID J. Malan: Cadw ar ochr cleientiaid iddo. Yn union i'r dde. I fyny nesaf oedd fy oh MySQL. ROB BOWDEN: OK. Felly, y cwestiwn cyntaf yn gyffredinol bras ar gyfer pobl. Er bod y rhai yn ddiweddarach aeth yn well. Felly, rhaid i chi ddewis y data cywir fathau ar gyfer y ddau colofnau hyn. Ac mae'r ddau o'r rhain yn cael rhywfaint o pethau amdanynt sy'n yn gwneud y dewis anodd. Felly nid oedd int dilys teipio ar gyfer y nifer. Y rheswm yn cyfrif 12-digid nifer, nid int yn ddigon mawr i storio cyfanswm digid. Felly byddai dewis dilys wedi bod yn fawr int os ydych yn digwydd i wybod hynny. Gallai dewis arall wedi bod yn maes torgoch o hyd 12. Felly byddai naill neu'r llall o'r rheiny wedi gweithio. Ni fyddai Int. Yn awr, cydbwysedd, yn meddwl yn ôl i pset7. Felly, rydym yn a ddefnyddir yn benodol degol i'r storio gwerth cyfranddaliadau neu - DAVID J. Malan: Arian. ROB BOWDEN: Arian. Rydym yn defnyddio degol i storio swm y arian parod y mae'r defnyddiwr ar hyn o bryd. Felly, y rheswm yr ydym yn gwneud hynny yn oherwydd, cofiwch, arnofio. Mae pwynt arnawf mewn manylder. Ni all storio arian yn union Gwerthoedd fel arnom eu heisiau yma. Felly degol yn gallu union siop rhywbeth i, dyweder, dau le degol. Dyna pam cydbwysedd, yr ydym am ei i fod degol ac nid yn arnofio. DAVID J. Malan: A hefyd, hefyd, er gallai fod wedi bod yn glyfar mewn eraill gyd-destunau i feddwl, efallai y yn gyfle ar gyfer int. 'N annhymerus' jyst cadw golwg ar bethau mewn ceiniogau. Oherwydd ein bod yn dangos yn benodol 'r ball gwerth bod 100.00, bod yn golygu y gallai dim ond fod yn int. Ac cynildeb arall hefyd gyda nifer oedd nad oedd yn golygu i fod yn gwestiwn tric. Ond cofio i int yn MySQL, fel yn C, o leiaf yn y offer, yn 32-bit. A hyd yn oed er nad ydym yn eich disgwyl gwybod yn union faint digid sy'n yn golygu, yn cofio bod y nifer fwyaf Gall ydych yn ei gynrychioli a allai gyda nifer 32-bit yn fras beth? Pa rif yr ydym bob amser yn dweud? 2 i 32, sef yr hyn yn fras? Nid oes rhaid i chi wybod yn union. Ond yn fras yn ddefnyddiol mewn bywyd. Mae'n tua 4000000000. Felly, rydym wedi dweud mai ychydig o weithiau. Rwy'n gwybod fy mod wedi dweud mai ychydig o weithiau. Ac mae'n tua 4000000000. A dyna rheol da o bawd i wybod. Os oes gennych 8 did, 256 yw'r rhif hud. Os oes gennych 32 darnau, 4 biliwn rhoi neu gymryd. Felly, os ydych yn unig yn ysgrifennu i lawr 4 biliwn, byddwch yn gweld ei bod yn llai o ddigidau na 12, sy'n golygu bod yn amlwg nad digon mynegiant i ddal Rhif cyfrif 12-digid. ROB BOWDEN: OK. Felly, y rhai eraill yn mynd yn well. Felly, mae'n debyg bod y banc yn gosod misol $ 20 ffi cynnal a chadw ar yr holl gyfrifon. Gyda pha ymholiad SQL gallai'r banc ddidynnu $ 20 o bob cyfrif, hyd yn oed os mae'n arwain at rhai balansau negyddol? Felly y bôn, mae pedwar prif fath o ymholiadau - mewnosoder, dewis, diweddaru, a dileu. Felly, beth ydym yn meddwl ein bod yn mynd i'w defnyddio yma? Diweddaru. Felly, gadewch i ni edrych. Felly dyma ni yn diweddaru. Pa dabl yr ydym yn diweddaru cyfrifon? Felly diweddaru cyfrifon. Ac yna y gystrawen yn dweud, beth yn y cyfrifon yr ydym yn diweddaru? Wel, rydym yn gosod y cydbwysedd cyfartal i'r gwerth cyfredol o gydbwysedd minws 20. Felly, bydd hyn yn diweddaru pob rhes o gyfrifon, tynnu 20 $ o'r balans. DAVID J. Malan: Camgymeriad cyffredin yma, er ein bod weithiau yn maddau iddo, oedd mewn gwirionedd yn cael cod PHP yma ffonio'r swyddogaeth ymholiad neu roi dyfyniadau o gwmpas popeth sy'n Nid oedd angen iddynt fod yno. ROB BOWDEN: Cofiwch fod MySQL yn iaith ar wahân i PHP. Rydym yn digwydd bod yn ysgrifennu yn PHP MySQL. A PHP wedyn yn anfon draw i'r gweinyddwr MySQL. Ond nid oes angen PHP chi er mwyn cyfathrebu gyda gweinydd MySQL. DAVID J. Malan: Yn union. Felly nid oes unrhyw newidynnau gydag arwyddion doler ddylai fod yn y cyd-destun hwn. Gall dim ond gwneud pob un o'r cwestiwn yn y gronfa ddata ei hun. ROB BOWDEN: OK. Felly, yr un nesaf. Ai dyma'r un nesaf? Yeah. Felly, gyda pha ymholiad SQL gallai'r banc adfer y niferoedd ystyried ei cwsmeriaid cyfoethocaf, y rhai ag balansau fwy na 1,000? Felly, pa un o'r pedwar prif fath ydym yn mynd i fod eisiau yma? Dewiswch. Felly, rydym am i ddewis. Beth ydym ni eisiau i ddewis? Pa golofn ydym ni eisiau i ddewis? Byddwn am penodol i ddewis rhif. Ond os ydych yn dweud seren, rydym yn hefyd yn derbyn hynny. Felly dewiswch nifer o'r hyn bwrdd? Cyfrifon. Ac yna y cyflwr yr ydym am? Pan fydd cydbwysedd yn fwy na 1,000. Rydym hefyd yn derbyn mwy o na neu'n hafal. Cafodd yr un olaf. Gyda pha ymholiad SQL gallai'r banc agos, hy, dileu pob cyfrif sy'n Mae cydbwysedd o $ 0? Felly, pa un o'r pedwar ydym ni mynd i eisiau ei ddefnyddio? Dileu. Felly mae'r gystrawen ar gyfer hynny? Dileu o'r hyn dabl? Cyfrifon. Ac yna y cyflwr y rydym am ddileu - lle mae cydbwysedd yn dychwelyd sero. Felly dileu pob rhes o gyfrifon ble mae'r cydbwysedd yn sero. Cwestiynau ar unrhyw un o'r rhain? Eisiau giwio? DAVID J. Malan: Canllaw Ciw. Felly, yn yr un yma, rydym yn rhoi i chi braidd strwythur cyfarwydd yr ydym yn archwilio a ychydig yn y dosbarth ochr yn ochr o structs, a oedd yn ddata cysylltiedig yn ysbryd strwythur. Y gwahaniaeth er bod ciw yn bod yn rhaid inni gofio rywsut sy'n oedd ar flaen y ciw, mewn print rhan fel y gallem wneud mwy o defnydd effeithlon o'r cof, o leiaf os ydym yn defnyddio amrywiaeth. Gan fod galw i gof, os oes gennym amrywiaeth, os, er enghraifft, mae hyn yn flaen y ciw, os wyf yn mynd i mewn i'r ciw yma, ac yna rhywun yn unol tu ôl i mi, tu ôl i mi, tu ôl i mi, a un person yn camu allan o linell, byddwch yn gallai, fel y gwelsom rai o'n dynol gwirfoddolwyr yn y dosbarth, rhaid i bawb newid y ffordd hon. Ond yn gyffredinol, ar ôl pawb ei wneud Nid rhywbeth yn y defnydd gorau o amser mewn rhaglen, oherwydd ei fod yn golygu bod eich algorithm yn rhedeg yn yr hyn amser rhedeg asymptotic? Mae'n llinol. Ac yr wyf yn teimlo fel 'na fath o dwp. Os yw'r person nesaf yn unol yw'r nesaf person sydd wedi i fod i fynd i mewn i'r storio, nid ydynt yn gan bob un ohonynt i symud gyda'i gilydd. Dim ond gadael y person hwnnw yn cael ei tynnu oddi ar pan ddaw'r amser, er enghraifft. Felly, gallwn arbed ychydig o amser yno. Ac felly i wneud hynny fodd bynnag, bod modd bod y pennaeth y ciw neu'r flaen y ciw yn mynd i symud yn gynyddol yn ddyfnach ac yn ddyfnach yn yr amrywiaeth ac yn y pen draw gallai mewn gwirionedd yn lapio o gwmpas os ydym yn defnyddio amrywiaeth i storio'r bobl yn y ciw hwn. Felly, gallwch chi bron feddwl am y amrywiaeth fel data cylchlythyr strwythur yn yr ystyr hwnnw. Felly, mae'n rhaid i chi rywsut i gadw golwg ar y maint neu yn wir y diwedd ac yna pan dechrau ydyw. Felly, rydym yn cynnig eich bod yn datgan un ciw o'r fath, galw mae'n q, un llythyr yn unig. Yna, rydym yn cynnig y blaen fod yn ymgychwyn i sero a bod y maint ei hymgychwyn i sero. Felly ar hyn o bryd, does dim byd tu mewn y ciw. Ac rydym yn gofyn i chi gwblhau'r gweithredu enqueue isod fath fodd fel bod y swyddogaeth yn ychwanegu n i diwedd q ac yna'n dychwelyd yn wir. Ond os q yn llawn neu negyddol, y Dylai swyddogaeth yn hytrach na dychwelyd ffug. Ac rydym yn rhoi cwpl i chi o dybiaethau. Ond nid ydynt yn wirioneddol swyddogaethol perthnasol, dim ond bod bool yn bodoli, oherwydd, yn dechnegol, nid yw bool yn bodoli yn C oni bai eich bod yn cynnwys ffeil pennawd penodol. Felly, a oedd dim ond gwnewch yn siŵr bod dim yn mae hyn yn gamp cwestiwn math yna o beth. Felly enqueue, fe wnaethom gynnig yn y sampl atebion i weithredu fel a ganlyn. Un, rydym yn gyntaf yn gwirio pa mor hawdd, y ffrwythau isel-hongian. Os y ciw yn llawn neu y nifer a ydych yn ceisio i fewnosod yn llai na sero, a ddywedodd gennym yn y manyleb y broblem dylai Nid yw cael ei ganiatáu, gan mai dim ond am gwerthoedd nad ydynt yn negatif, yna dylech dim ond yn dychwelyd ffug ar unwaith. Felly, mae rhai yn gymharol hawdd gwall gwirio. Os pe baech eisiau ychwanegu bod gwir rhif, bu'n rhaid i chi wneud ychydig o meddwl yma. A dyma lle mae ychydig yn blino feddyliol, oherwydd eich bod yn rhaid i chyfrif i maes sut i ymdrin cofleidiol. Ond mae'r germ y syniad yma y sydd o ddiddordeb i ni yw bod cofleidiol yn aml yn awgrymu rhifyddeg modiwlaidd a y gweithredwr mod, yr ochr y cant, lle gallwch fynd o werth mwy yn ôl i sero ac yna un a dau a tri ac yna yn ôl o gwmpas i sero, un a dau a thri ac yn y blaen dro ar ôl tro. Felly, y ffordd yr ydym yn bwriadu gwneud hyn yw ein bod yn dymuno mynegai i mewn i'r amrywiaeth Gelwir rhifau lle ein cyfanrifau yn gorwedd. Ond i gyrraedd yno, rydym yn gyntaf am ei wneud beth bynnag fo maint y ciw yn ond yna ychwanegu at hynny beth bynnag fo'r flaen y rhestr yn. Ac effaith hynny yw yn ein rhoi ar y safle cywir yn y ciw a Nid yw cymryd yn ganiataol bod y person cyntaf yn unol ar y dechrau, mae ef neu hi Gallai gwbl fod os ydym yn hefyd symud bawb. Ond rydym yn unig creu gwaith i ni ein hunain os ydym yn cymryd y llwybr penodol. Er mwyn i ni gadw'n gymharol syml. Oes rhaid i ni gofio ein bod yn unig ychwanegu int at y ciw. Ac yna rydym yn unig yn dychwelyd yn wir. Yn y cyfamser, yn dequeue, gofynnwyd i i chi wneud y canlynol. Roi ar waith yn y fath fodd fel ei fod yn dequeues, hynny yw yn tynnu'r a ffurflenni, y int ar flaen y ciw. Er mwyn cael gwared ar y int, mae'n suffices i anghofio. Nid oes angen i chi i droi'r fantol yn ei ychydig. Felly, mae'n dal i fod mewn gwirionedd yno. Yn union fel data ar yriant caled, ni jyst yn anwybyddu'r ffaith ei fod erbyn hyn mae. Ac os q yn wag, dylem yn lle hynny yn dychwelyd negyddol 1. Felly, mae hyn yn teimlo mympwyol. Pam dychwelyd negyddol 1 yn hytrach na ffug? Yeah. GYNULLEIDFA: Q yn storio gwerthoedd cadarnhaol. Gan mai dim ond storio gwerthoedd cadarnhaol yn y q, negyddol yn gamgymeriad. DAVID J. Malan: OK, yn wir. Felly, oherwydd ein bod yn unig yn storio cadarnhaol werthoedd neu sero, yna mae'n iawn i dychwelyd gwerth negyddol fel sentinel gwerth, yn symbol arbennig. Ond eich bod yn ailysgrifennu hanes yno, oherwydd bod y rheswm rydym yn unig dychwelyd gwerthoedd nad ydynt yn negatif oherwydd ein bod yn awyddus i â gwerth sentinel. Felly yn fwy penodol, pam na dim ond dychwelyd ffug mewn achosion o gamgymeriadau? Yeah. GYNULLEIDFA: Rydych chi wedi methu i ddychwelyd yn gyfanrif. DAVID J. Malan: Yn union. A dyma lle C yn cael cyfyngol 'n bert. Os ydych yn dweud eich bod yn mynd i dychwelyd int, oes gennych chi i dychwelyd int. Ni allwch gael ffansi a dechrau dychwelyd yn bool neu fflôt neu llinyn neu rywbeth fel 'na. Yn awr, yn y cyfamser, JavaScript a PHP a Gall rhai ieithoedd eraill, mewn gwirionedd, ydych chi wedi dychwelyd gwahanol mathau o werthoedd. A gall fod yn ddefnyddiol mewn gwirionedd, lle yn gallu dychwelyd ints cadarnhaol, sero, ints negyddol, neu anwir neu null hyd yn oed i ddynodi gwall. Ond nid ydym yn cael y hyblygrwydd yn C. Felly, gyda dequeue, yr hyn yr ydym yn bwriadu ei wneud yw - ROB BOWDEN: Gallwch ddychwelyd ffug. Mae'n dim ond bod ffug yn hash diffinio ffug i sero. Felly, os byddwch yn dychwelyd ffug, rydych yn dychwelyd sero. A dim yn beth ddilys yn ein ciw, ond nid negyddol 1 yw os digwydd ffug i fod yn negyddol 1. Ond ni dylech hyd yn oed angen i ni wybod hynny. DAVID J. Malan: Mae hynny'n pam nad oeddwn yn ei ddweud. ROB BOWDEN: Ond nid oedd yn wir nad oes modd i chi ddychwelyd ffug. DAVID J. Malan: Cadarn. Felly dequeue, sylwch ein bod yn derbyn gwag fel ei ddadl. A dyna oherwydd nad ydym yn pasio unrhyw beth i mewn Rydym yn unig yn awyddus i gael gwared ar yr elfen ar flaen y ciw. Felly, sut y byddwn yn mynd ati i wneud hyn? Wel, yn gyntaf, gadewch i ni wneud hyn gwiriad sanity gyflym. Os yw maint ciw yn 0, mae dim gwaith i'w wneud o hyd. Dychwelyd negyddol 1. Wneud. Felly dyna ychydig linellau o fy rhaglen. Felly, dim ond pedair llinell yn parhau. Felly dyma fi yn penderfynu lleihau a y maint. Ac decrementing maint yn effeithiol yn golygu fy mod yn anghofio rhywbeth yn y fan honno. Ond rhaid i mi hefyd i ddiweddaru lle flaen y niferoedd yn. Felly, er mwyn gwneud hynny, mae angen imi i wneud dau beth. Angen i mi gofio hyn y mae'r rhif cyntaf ar flaen y ciw, oherwydd mae angen i mi ddychwelyd y peth. Felly, nid wyf am i anghofio ddamweiniol am y peth ac yna ysgrifennu drosto. Im 'jyst yn mynd i gofio mewn int. Ac yn awr, yr wyf am i ddiweddaru q.front i gael ei q.front 1. Felly, os yw hyn oedd y person cyntaf yn llinell, yn awr, yr wyf am ei wneud ac 1 i pwyntio at y person nesaf yn unol. Ond rhaid i mi drin y cofleidiol. Ac os capasiti yn gysonyn byd-eang, mae hynny'n mynd i fy ngalluogi i wneud yn siŵr gan fy mod yn cyfeirio at y person olaf un yn lein, bydd y llawdriniaeth yn modwlo yn dod â mi yn ôl i sero yn y flaen y ciw. A bod yn ymdrin â'r cofleidiol yma. Ac yna yr wyf yn symud ymlaen i ddychwelyd n. Yn awr, yn fanwl gywir, doeddwn i ddim rhaid i ddatgan n. Nid oedd rhaid i mi chrafangia 'ac yn ei storio dros dro, oherwydd bod y gwerth yn dal i fod yno. Felly, gallai Fi jyst gwneud y rhifyddeg cywir i ddychwelyd y cyn bennaeth y ciw. Ond Fi jyst yn teimlo bod hyn yn fwy clir i mewn gwirionedd yn chrafangia 'r int, roi yn n, ac yna dychwelyd y er mwyn eglurder, ond nid yn gwbl angenrheidiol. Psst. Maen nhw i gyd pronounceable yn fy mhen. ROB BOWDEN: Cwestiwn Felly cyntaf yw'r broblem goeden ddeuol. Cwestiwn Felly cyntaf yw, rydym yn rhoddir rhifau hyn. Ac rydym eisiau eu mewnosod rywsut i nodau hyn fel ei fod yn coeden chwiliad deuaidd dilys. Felly, un peth i'w gofio am coed chwiliad deuaidd yw nad yw'n dim ond bod y peth ar y chwith yn llai ac yn y peth i y dde yn fwy. Mae angen iddo fod bod y goeden gyfan i y chwith yn llai, ac mae'r goeden gyfan i'r dde yn fwy. Felly os wyf yn rhoi 34 yma ar y brig, ac yna Yr wyf yn rhoi 20 yma, felly mae hynny'n ddilys, felly yn hyn, gan fod 34 i fyny yma. 20 yn mynd i'r chwith. Felly dyna llai. Ond ni allaf yna rhowch 59 yma, oherwydd er bod 59 ar y dde o 20, mae'n dal i fod ar y chwith o 34. Felly, gyda y cyfyngiad mewn cof, mae'r ffordd hawsaf o yn ôl pob tebyg ddatrys y broblem ydy at jyst fath o'r rhifau hyn - felly 20, 34, 36, 52, 59, 106. Ac yna rhowch y rhai o'r chwith i'r dde. Felly 20 yn mynd yma. 34 yn mynd yma. 36 yn mynd yma. 52, 59, 106. Ac rydych hefyd fod wedi cyfrifedig allan gyda rhai plygio i mewn a sylweddoli, oh, aros, nid oes gennyf ddigon o rifau i lenwi'r mewn dros yma. Felly mae angen i mi reshift beth yw fy nodyn llwybr yn mynd i fod. Ond yn sylwi bod yn y tri olaf, os eich bod yn darllen o'r chwith i'r dde, y mae yn gorchymyn cynyddol. Felly nawr, rydym yn awyddus i ddatgan yr hyn y mae'r strwythur yn mynd i fod ar gyfer y nodau yn y goeden hon. Felly beth sydd ei angen arnom mewn coeden deuaidd? Felly mae gennym gwerth y math int, felly mae rhai gwerth int. Nid wyf yn gwybod yr hyn yr ydym a elwir yn yn yr ateb - int n. Mae angen pwyntydd i'r plentyn chwith a pwyntydd i'r plentyn cywir. Felly, mae'n mynd i edrych fel hyn. A bydd yn mewn gwirionedd yn edrych cyn pan wnaeth y-gysylltiedig ddwbl rhestr stwff, felly rybudd - Rydw i'n mynd i gael i sgrolio holl ffordd yn ôl i lawr i broblem 11. Felly, yn sylwi ei fod yn edrych yn union i hyn, ac eithrio rydym yn unig yn digwydd i alw hyn enwau gwahanol. Mae gennym o hyd yn gyfanrif gwerth a dau awgrymiadau. Mae'n dim ond bod yn lle o drin y awgrymiadau yn pwyntio at y peth nesaf a'r peth blaenorol, rydym yn trin y awgrymiadau i bwyntio i blentyn chwith a phlentyn dde. OK. Felly dyna ein nod strwythur. Ac yn awr, yr unig swyddogaeth mae angen i ni yn gweithredu ar gyfer hyn yn daith, a oedd yn rydym eisiau mynd dros y goeden, argraffu gwerthoedd y goeden mewn trefn. Felly edrych yma, byddem eisiau argraffu allan 20, 34, 36, 52, 59, a 106. Sut ydym yn cyflawni hynny? Felly, mae'n eithaf tebyg. Os ydych yn gweld yn yr arholiad diwethaf y broblem eich bod am i argraffu y goeden cyfan gyda atalnodau yn y canol popeth, yr oedd mewn gwirionedd hyd yn oed yn yn haws na hynny. Felly dyma yw'r ateb. Roedd hyn yn sylweddol yn haws os ydych yn gwneud hynny recursively. Nid wyf yn gwybod os oes unrhyw un yn ceisio i wneud hynny iteraidd. Ond yn gyntaf, rydym wedi ein achos sylfaenol. Beth os bydd y gwraidd yn null? Yna, rydym yn jyst yn mynd i ddychwelyd. Nid ydym am i argraffu unrhyw beth. Arall rydym yn mynd i groesi recursively i lawr. Argraffwch y cyfan Terfynau chwith. Felly argraffu popeth llai na fy ngwerth cyfredol. Ac yna yr wyf i'n mynd i argraffu fy hun. Ac yna dwi'n mynd i recurse i lawr fy Terfynau dde cyfan, felly mae popeth fwy na fy ngwerth. Ac mae hyn yn mynd i argraffu allan popeth mewn trefn. Cwestiynau ar sut y mae hyn mewn gwirionedd yn yn cyflawni'r hynny? GYNULLEIDFA: Mae gennyf gwestiwn ar y [Anghlywadwy]. ROB BOWDEN: Felly, un ffordd o ymdrin unrhyw broblem ailadroddus ydy at jyst meddwl am y peth yn hoffi rhaid i chi feddwl am yr holl achosion gornel. Felly ystyriwch yr ydym am i argraffwch y goeden gyfan. Fel bod yr holl ydym yn mynd i ganolbwyntio ar mae hyn yn nod penodol - 36. Mae'r galwadau ailadroddus, rydym yn esgus y rhai yn unig yn gweithio. Felly dyma, mae hyn yn alwad ailadroddus i Traverse, yr ydym heb hyd yn oed feddwl am y peth, dim ond croesi y chwith tri, dychmygwch fod eisoes printiau 20 a 34 i ni. Ac yna pan fyddwn yn y pen draw recursively ffoniwch daith ar y iawn, a fydd yn argraffu yn gywir 52, 59, a 106 i ni. Felly, o gofio y gall hyn argraffu 20, 34, a gall y llall argraffu 52, 59, 108, mae angen i ni fod yn gallu ei wneud yw argraffu ni ein hunain yng nghanol hynny. Felly argraffu popeth ger ein bron. Argraffu ni ein hunain, felly mae'r print nod ar hyn o bryd 36, printf rheolaidd, ac yna argraffu popeth ar ôl i ni. DAVID J. Malan: Dyma lle recursion yn mynd yn wirioneddol brydferth. Mae'n y naid anhygoel o ffydd lle chi wneud y darn lleiaf o waith. Ac yna byddwch yn gadael i rywun arall yn gwneud y gweddill. A bod rhywun arall yw, yn eironig, i chi. Felly, ar gyfer pwyntiau browni difrifol, os i chi sgrolio i fyny ar y cwestiynau - ROB BOWDEN: Ar y cwestiynau? DAVID J. Malan: Ac i lawr ychydig i niferoedd, oes unrhyw un yn gwybod ble dod rhifau hyn yn dod? ROB BOWDEN: Nid oes gennyf llythrennol ddim syniad. DAVID J. Malan: Maent yn ymddangos drwy gydol y cwis. GYNULLEIDFA: Ydyn nhw yr un rhifau? DAVID J. Malan: niferoedd y rhai. Mae wy Pasg bach. Felly, ar gyfer y rhai ohonoch gwylio ar-lein yn cartref, os gallwch ddweud wrthym drwy e-bost i heads@CS50.net beth yw arwyddocâd o'r rhain yn digwydd eto chwe niferoedd yn ledled Cwis 1, byddwn yn cawod i chi gyda sylw anhygoel yn y rownd derfynol darlith a phêl straen. Nice, cynnil. ROB BOWDEN: Unrhyw gwestiynau ddiwethaf am unrhyw beth ar y cwis?