[نقد و بررسی: امتحان 1] [علی نهم در Oreoluwa Barbarinsa، لوکاس فریتاس، راب Bowden] [دانشگاه هاروارد] [این CS50 است.] [CS50.TV] [لوکاس فریتاس] خوش آمدید همه. این بررسی برای مسابقه 1 است. فقط به عنوان یک محدوده ی مسئولیت ها، این است که - منظورم این است که، ما قصد داریم به تلاش برای پوشش مواد به عنوان آنجا که ممکن است، اما این بدان معنا نیست که ما قصد داریم به پوشش تمام چیزهایی است که می تواند در مسابقه 1 باشد. بنابراین مطمئن شوید که شما نیز نگاهی به سخنرانی ها، بخش ها، همه چیز را که شما می توانید باشد. مسابقه 1 است رفتن به در چهارشنبه، چهارشنبه آینده باشد. بنابراین مطمئن شوید که برای مطالعه باشد. این خواهد بود، تا حد زیادی، مانند مسابقه اول در مورد فرمت آن، اما آن را احتمالا خواهد بسیار سخت تر. دست کم، در سال گذشته زمانی که من در زمان 50، من فکر کردم آن بسیار سخت بود. بنابراین مطالعه زیادی. من قصد دارم برای پوشش ساختمان داده ها و کدگذاری هافمن. این چیزی است که بسیاری از مردم فکر می کنم پیچیده است، اما من قصد دارم سعی می کنید آن را به عنوان آسان که ممکن است. اول از همه، آنچه ما می خواهیم به شما بچه ها برای مسابقه 1 می دانیم این است که به درک توصیف مفهومی از هر یک از ساختمان داده است که من قصد دارم به ارائه. این بدان معنی است که شما لازم نیست که در واقع پیاده سازی یک جدول هش در مسابقه خود را 1. ما نمی خواهیم شما را به پیاده سازی یک جدول هش کل، شاید ما تلاش خواهیم کرد به برخی از توابع به شما پیاده سازی، عملیات رایج ترین، اما ما قصد داریم تا شما همه چیز را اجرا می کنند. بنابراین این مهم است که شما را در درک مفهوم پشت هر یک از ساختار داده و همچنین است که شما قادر به کد در C، فقط عملیات رایج ترین آنها را برای هر یک از ساختار داده ها. و همچنین قادر به بررسی اشاره گر و ساختارها است، چرا که آنها در این ساختمان داده به نظر می رسد بسیاری. اول، لیست های پیوندی. لیست های پیوندی در واقع بسیار شبیه به آرایه ها، اما تفاوت بین یک لیست پیوندی و آرایه، اول از همه، این است که یک لیست پیوندی تا به اندازه بسیار انعطاف پذیر، در حالی که در آرایه شما باید هر دو را انتخاب کنید با اندازه های بسیار بزرگ برای آرایه، بنابراین شما می دانید که شما در حال رفتن به قادر به ذخیره تمام اطلاعات خود را در آن آرایه، و یا شما مجبور به استفاده از malloc به طول انعطاف پذیر از آرایه. در لیست های پیوندی آن را بسیار آسان فقط به گرفتن عناصر بیشتر، در لیست پیوندی قرار داده عناصر بیشتر و یا حذف عناصر. و در واقع، اگر شما نمی خواهید در لیست مربوط به طبقه بندی شده اند می شود، شما می توانید جستجو و حذف عناصر در زمان ثابت، بنابراین O (1) زمان، پس از آن بسیار راحت است. شما فقط باید گره مراقب باشید که همیشه به یاد داشته باشید به malloc و رایگان، فقط به خاطر اینکه اگر اینکار را نکنید، شما نشت حافظه داشته باشد. لیست بنابراین مرتبط - تعریف یک گره درست مثل آنچه که ما را سمت راست وجود دارد. من قرار هوشمند N، اما شما می توانید هر گونه اطلاعات شما می خواهید ذخیره کنید. بنابراین اگر شما می خواهید برای ذخیره یک رشته، آن را خوب است. اگر شما می خواهید برای ذخیره یک ساختار، آن را خوب، دو، هر آنچه که شما می خواهید. من فقط با قرار دادن اعضای هیات N برای مثال در اینجا. و شما باید یک اشاره گر به گره بعدی. بنابراین، اساسا، یک لیست پیوندی تا به برخی از داده ها، و سپس آن را به گره بعدی اشاره می کند. اگر آن را به آخرین عنصر در لیست پیوندی است، آن را به نقطه را به NULL. بنابراین این یک نمونه از یک لیست پیوندی است. خوب، تا حالا بیایید ببینید که چه کاری باید انجام دهیم اگر من می خواهم برای وارد کردن یک عنصر در یک لیست پیوندی. اول، قرار دادن تابع از نوع درجه اعتبار ساقط است چرا که من نمی خواهم به بازگشت هر چیزی. و من قصد دارم به یک int به عنوان آرگومان، چون من می خواهم به دانستن آنچه که من می خواهم را وارد کنید. پس چه اولین چیزی که من باید انجام دهید؟ خوب، من باید در newnode malloc، به طوری که خط اول است. من فقط ایجاد یک گره در یک لیست پیوندی قرار داده است. پس چه می توانم انجام دهم؟ خب، ما می دانیم که در پیاده سازی های ما از لیست های پیوندی در کلاس، ما همیشه سر به عنوان یک متغیر جهانی قرار داده است. بنابراین آنچه ما می توانیم انجام دهیم این است تغییر سر. من می توانم به این گره جدید است رئیس جدید، و آن را به نقطه را به سر قبلی. چگونه می توان از انجام این کار؟ اولین چیزی که من باید انجام دهید است تغییر 'نفر' در گره جدید به ارزش، که به تابع منتقل شد. سپس بعد newnode است برای رفتن به سر. سر در حال رفتن به newnode شود. پس از آن خیلی ساده است. برای حذف یک گره، ما می توانیم آن را مانند انجام - یکی از راه های ما می تواند که انجام دهید این است که می گویند، خوب، اگر من می خواستم را حذف کنید، به عنوان مثال، 3، آنچه که من می تواند انجام است درست نقطه گره قبلی به گره بعدی از 3. بنابراین من فقط می خواهم انجام چیزی شبیه به آن. اما آنچه مشکل با انجام این کار است؟ من یک نشت حافظه، بنابراین من دسترسی به تعداد 3 دیگر ندارد. مشکل با آن این است که من قصد ندارم که قادر به آزاد است که گره. من قصد دارم به نشت حافظه و (نامفهوم) به من از آنها بدم میاید. بنابراین به جای انجام این کار، من احتمالا باید یک اشاره گر به طور موقت داشته باشد. بنابراین من قرار داده دما. این است که رفتن به نقطه را به گره که من می خواهم را حذف کنید. و پس از آن من می تواند گره های قبلی به نقطه به گره بعدی حرکت می کند گره که من می خواهم را حذف کنید. و در نهایت، من می توانم اشاره گر را آزاد کند. آیا باید آزاد اشاره گر که من ایجاد حق وجود دارد؟ من به، فقط به خاطر ندارد - تفاوت این است که این گره با استفاده از malloc ایجاد شده بود، پس از آن در پشته است، در حالی که این یکی فقط به عنوان یک سوئیچ NULL در پشته اعلام شد. بنابراین من لازم نیست که آن را آزاد کند. باشه. بنابراین در حال حاضر اجازه دهید در مورد پشته صحبت کنید. پشته خیلی سر راست است. ما پشته و صف در کلاس بود تنها با استفاده از آرایه ها، اما شما باید آشنا باشد - فقط آگاه باشید که شما نیز می توانید پشته انجام در صف با استفاده از لیست های پیوندی نیز هست. بنابراین اگر شما یک آرایه، چه خواهد بود پشته؟ پشته، اول، باید به یک اندازه. شما باید برای ذخیره چه اندازه پشته است که شما در حال حاضر داشته است. و همچنین شما می توانید یک آرایه را داشته باشد، در این مورد از اعداد، اما اگر شما می خواهید، می توان آن را یک آرایه از رشته ها، آرایه ای از ساختار، هر چیزی را که می خواهید برای ذخیره. درباره پشته: تفاوت بین پشته و لیست پیوندی این است که در پشته شما تنها دسترسی به آخرین عنصری که در پشته قرار داده شده است. آن را به نام آخرین در، اولین از. درست مثل شما یک پشته از سینی، اگر شما یک سینی در بالای پشته، شما باید برای حذف که سینی برای اولین بار دسترسی به سینی دیگر را داشته باشد. این همان چیزی که با پشته است. پس اگر من می خواهم به، به عنوان مثال، اضافه کردن یک عنصر به یک پشته، چه باید بکنم؟ آن را به نام فشار، و آن را بسیار سر راست است. اولین چیزی که شما باید انجام دهید این چک است اگر به اندازه پشته است بیشتر و یا به ظرفیت پشته برابر نیست. چرا که اگر شما در حال حاضر در ظرفیت کامل، شما می توانید هر چیزی دیگری را اضافه کنید. و پس از آن اگر نه، شما فقط باید برای اضافه کردن عنصر به پشته. و در نهایت، افزایش اندازه. پس از آن بسیار سر راست است. بنابراین من فقط عدد 2 را اضافه کنید. و اگر من می خواهم به موسیقی پاپ، که بدان معنی است که من می خواهم به حذف آخرین عنصری است که بازگشت به ارزش عنصر اضافه شد و، اولین چیزی که من باید برای بررسی این است که پشته خالی نیست. از آنجا که اگر آن خالی است، من می توانم هر چیزی گشت. در آن صورت، من از بازگشت -1. در غیر این صورت، من قصد دارم واحد کم میکنیم به اندازه تنظیمات، و شماره (s.size) بازگشت. چرا من واحد کم میکنیم به اندازه و سپس بازگشت s.size؟ این به این دلیل، در این مورد، تنظیمات تا به اندازه 4، و من می خواهم برای بازگشت به چهارمین عنصر، درست است؟ اما شاخص در عنصر چهارم است؟ سه. از آنجا که من اندازه - در حال رفتن به 3، من فقط می تواند بازگشت s.numbers (s.size) به خاطر آن 3. بنابراین آن را فقط به شاخص. در حال حاضر صف. صف ها تقریبا همان چیزی. تنها تفاوت این است که به جای داشتن آخرین در، اولین بار، شما باید برای اولین بار در، اولین از. احتمالا اگر شما در حال انتظار برای رفتن به یک کنسرت، شما نمی خوشحال می شود اگر شما یک پشته به جای یک صف بود. به عنوان آخرین فرد آمده است را اولین کسی باشید که برای ورود به کنسرت. شما احتمالا نمی خواهد که شاد باشد. در صف، اولین کسی که برای دریافت در اولین کسی به خارج است. بنابراین در تعریف یک صف، علاوه بر داشتن اندازه در آرایه، شما همچنین باید به سر، که شاخص به سر از پشته. بنابراین عنصر اول در حال حاضر. در نوبت قراردادن همان چیزی که به عنوان فشار آمدن است. اگر شما خیلی ساده و بی تکلف بود، شما فقط می گفت، خوب، من فقط می تواند انجام دهد دقیقا همان چیزی که به عنوان I برای فشار انجام داد. من فقط می توانید بررسی کنید که آیا آن را فراتر از ظرفیت نیست. اگر این است، من بازگشت کاذب، در غیر این صورت من فقط می تواند صادرات مقدار جدید و پس از آن اندازه افزایش. اما چرا این اشتباه است؟ اجازه دهید این مثال را ببینید. من در تلاش برای در نوبت قراردادن یک دسته از مسائل، و سپس من قصد دارم به dequeue و در نوبت قراردادن. در بسیاری از دستورات وجود دارد، اما بسیار ساده است. من قصد دارم در نوبت قراردادن 5، پس از اضافه کردن 5 و سپس 7، 1، 4، 6، و پس از آن من می خواهم به dequeue چیزی، که بدان معنی است که من قصد دارم به حذف عنصر اول است. من می خواهم به حذف شماره 3، درست است؟ عنصر اول است. خوب. حال اگر من سعی می کنم در نوبت قراردادن چیز دیگری، چیزی است که اتفاق خواهد افتاد؟ با توجه به اجرای من، من که قرار بود برای قرار دادن عدد در q.size شاخص. در این مورد، به اندازه 8 است، به طوری که شاخص 8 در موقعیت و زمان آخرین در اینجا. اگر من سعی می کنم در نوبت قراردادن 1 در اینجا، من باید جای نوشتن موقعیت گذشته به تعداد 1 است که به طور کامل اشتباه است. چه من می خواهم به انجام آن بسته بندی کردن اطراف و به مقام اول. شاید شما فقط می گویند، خوب، من فقط باید به بررسی اگر من در واقع می تواند چیزی قرار داده است. اگر نه، من فقط می گویند، آه، ظرفیت جدید کامل در واقع ظرفیت - 1، و شما می توانید یک عنصر قرار داده نشده است. اما آنچه مشکل است؟ مشکل این است که اگر من فقط dequeue همه چیز در اینجا و سپس من سعی می کنم به اضافه کردن چیز دیگری، آن را فقط می گویند، خوب، شما در ظرفیت کامل، که 0 بود. بنابراین صف خود را از دست رفته است. شما باید به بسته بندی کردن در اطراف، و راهی برای بسته بندی در سراسر که شما بچه ها یاد گرفته در رویایی و دیگر psets شد با استفاده از وزارت دفاع. شما می توانید آن را در خانه سعی کنید بفهمید چرا شما می q.size + q.head انجام ظرفیت وزارت دفاع، اما اگر حق را اینجا ببینید، ما می توانید ببینید که در آن کار می کند. بنابراین در آخرین مثال، 8 q.size و سر 1 بود، دلیل آن را این موقعیت در اینجا از آرایه بود. پس از آن خواهد شد 8 + 1، 9. ظرفیت وزارت دفاع 9 خواهد بود 0. این امر به شاخص 0 بروید. ما در سمت راست باشد. و سپس سعی کنید به صف در خانه. بعضی چیز ها مهم: سعی کنید به درک تفاوت بین یک پشته و صف. در خانه، سعی کنید بسیار آشنا با اجرای نوبت قراردادن، dequeue، فشار و پاپ. و همچنین درک زمانی که شما می توانید هر یک از آنها استفاده کنید. بنابراین اجازه دهید به مدت 10 ثانیه با یک دسته از Pokemons شل کنید. و در حال حاضر اجازه بازگشت به ساختمان داده. جداول هش. بسیاری از مردم ترس از جداول هش بود. در مجموعه مسائل 6، غلط یاب املایی. جداول مخلوط و تلاش می کند، بسیاری از مردم ترس از آنها. آنها فکر می کنند که بسیار سخت است درک کنید. آره؟ [راب Bowden] مجموعه مسائل 5. مجموعه مسائل 5، آره. تشکر راب. آره. شش قهر کردن N 'پف، آره بود. مجموعه مسائل 5 املا شد جستجوگر، و شما مجبور به استفاده از هر یک از جدول هش یا امتحان کنید. بسیاری از مردم فکر می کردند که آنها فوق العاده سخت است درک بود، اما در واقع آنها هستند خیلی ساده است. یک جدول هش چیست، اساسا؟ یک جدول هش از آرایه ای از لیست های پیوندی می باشد. تنها تفاوت بین یک آرایه و یک جدول هش این است که در جدول هش شما چیزی به نام یک تابع هش. یک تابع هش چیست؟ من نمی دانم اگر شما بچه ها می توانید در اینجا بخوانید. این یک نمونه از جدول hash است. بنابراین شما می توانید ببینید که شما یک آرایه با 31 عناصر. و چیزی که ما در یک جدول هش انجام دهید این است که یک تابع هش است که رفتن به ترجمه یک کلید، هر یک از اعضای هیات به یک شاخص. اگر، برای مثال، اگر من می خواهم برای B. هریسون را انتخاب کنید، من می B. هریسون در توابع هش من قرار داده است، و تابع هش را 24 بازگشت. بنابراین من می دانم که من می خواهم برای ذخیره B. هریسون در 24. به طوری که تفاوت بین تنها با داشتن یک آرایه و داشتن یک جدول هش است. در جدول هش شما یک تابع است که رفتن به شما بگویم اند که در آن برای ذخیره داده هایی را که می خواهید برای ذخیره. برای تابع هش، شما می خواهید برای یک تابع هش نگاه که قطعی و به خوبی توزیع شده است. همانطور که می توانید در اینجا مشاهده کنید، می بینید که مقدار زیادی از داده هایی را که من به فروشگاه می خواست در واقع 19 به جای استفاده از 31 و 30 و 29، که همه بودند. بنابراین تابع هش که من استفاده می شود به خوبی توزیع نشده اند. هنگامی که ما می گویند به خوبی توزیع شده، به این معنی که ما می خواهیم به، تقریبا، حداقل 1 یا 2 برای هر یک از - مانند، تفاوت از 1 یا 2 برای هر یک از شاخص ها در آرایه. شما می خواهید به، تقریبا، به همان تعداد از عناصر در هر یک از لیست پیوندی در آرایه. و از آن آسان است برای بررسی اگر آن را معتبر در جدول هش، مشاهده و به عنوان جداول هش. سپس درختان. این یک درخت است. درختان در علوم کامپیوتر وارونه است برای برخی از دلیل. بنابراین در اینجا شما را به ریشه درخت و سپس برگ. شما فقط باید بدانید که نامگذاری برای پدر و مادر و کودک. هر گره دارای فرزندان خود را، که از گره که در زیر پدر و مادر هستند. بنابراین، برای مثال، 2 است برای رفتن به پدر و مادر برای 3 و برای کودکان دیگر حق وجود دارد، در حالی که 3 است برای رفتن به پدر و مادر برای 1 و بچه های دیگر که وجود دارد. و 1 است برای رفتن به کودک 3، و غیره. ما چیزی بسیار جالب تر، به نام یک درخت جستجوی دودویی، که در آن تمام مقادیر در سمت راست یک گره در حال رفتن به سمت راست باشد، حق در اینجا - در سمت راست، رفتن به بیشتر از این عنصر در ریشه. بنابراین اگر من تعداد 5 حق در اینجا، تمام عناصر در سمت راست رفتن به بیشتر از 5 و در سمت چپ تمام عناصر در حال رفتن به کمتر از 5. چرا این مفید است؟ خوب، اگر من می خواهم به بررسی در صورتی که شماره 7 است، به عنوان مثال، من فقط تا 5 به اولین و من قصد دارم برای دیدن است، 7 بیشتر یا کمتر از 5؟ این بیشتر، بنابراین من می دانم آن را به به سمت راست درخت باشد. بنابراین من چیزهای بسیار کمتر به در نگاه کنید. در پیاده سازی درخت جستجوی دودویی، گره، من فقط رفتن به به داده ها، بنابراین اعضای هیات N، شما همچنین می تواند یک رشته دارند و یا هر چیزی که می خواستم. شما فقط باید به دقت در تعریف بیشتر است، آنچه کمتر است. بنابراین اگر شما سیم داشتند، به عنوان مثال، شما می توانید تعریف که همه آن چیزهایی که در سمت راست می رویم به طول بزرگتر، سمت چپ می رویم به طول های پایین تر، پس از آن واقعا به شما. چگونه می توانم اجرا پیدا کردن برای BST؟ اولین چیزی که ما باید انجام دهیم این است بررسی کنید که آیا ریشه NULL است. اگر آن را NULL، به این معنی که چیزی که وجود ندارد به خاطر تو حتی یک درخت، درست است؟ بنابراین من بازگشت کاذب. در غیر این صورت، من قصد دارم به بررسی در صورتی که تعداد بیشتری است از مقدار در ریشه. من قصد دارم به تلاش برای پیدا کردن عنصر در سمت راست درخت. شما می بینید که من با استفاده از بازگشتی در اینجا. و پس از آن اگر آن را کمتر، من قصد دارم در سمت چپ نگاه کنید. و در نهایت، در غیر این صورت، اگر آن را به کمتر یا بیشتر نباشد، به این معنی که این ارزش خود را. بنابراین من فقط به راست. شما می توانید در اینجا مشاهده کنید که من اگر، اگر، اگر استفاده می شود. و به یاد داشته باشید، در مسابقه 0، ما یک مشکل است که اگر، اگر، اگر بود، و شما قرار بود برای پیدا کردن بی کفایتی، و ناکارآمدی بود که شما اگر استفاده می شود. شما باید اگر، دیگری اگر در صورت استفاده، دیگری، و دیگری. بنابراین، باید استفاده کنم اگر دیگری و دیگری اگر و دیگری در اینجا؟ آیا کسی - آره؟ [زبان دانشجو، نامفهوم] عالی است. بنابراین او گفت که مهم نیست، فقط به خاطر اینکه ناکارآمدی است که ما تا به حال قبل این بود که به دلیل، شاید اگر برخی از شرایط راضی بود، بنابراین شما یک عمل انجام شده است، اما بعد از آن شما قرار بود برای بررسی تمام شرایط دیگر. اما در این مورد، آن را بازگردانده حق دور، بنابراین مهم نیست. بنابراین شما مجبور به استفاده از دیگر اگر. و در نهایت، اجازه دهید در مورد تلاش می کند صحبت می کنید، که مورد علاقه همه است. سعی کنید یک درخت از آرایه ها است. این برنامه بسیار سریع برای نگاه کردن به ارزش ها، اما با استفاده از مقدار زیادی از حافظه. و این معمولا برای فیلتر کردن کلمات، تا زمانی که شما می خواهید برای پیاده سازی، به عنوان مثال، من نمی دانم، مثل یک دفترچه تلفن در گوشی شما و شما می خواهید می شود قادر به نوع B و فقط باید نام افرادی که B. این بسیار آسان به پیاده سازی است که با استفاده از یک امتحان کنید، به عنوان مثال. چگونه یک گره تعریف شما در یک امتحان کنید؟ شما فقط باید به یک بولی است که رفتن به is_word شود. است که نشان دهنده است که با استفاده از تمام کاراکتر قبل از آن گره، شما قادر خواهید بود به فرم یک کلمه بود، و سپس شما آرایه ای از اشاره گر به گره داشته باشد. آیا می توانید ببینید که ما باید مجموعه ای از گره پدر و مادر، پس از گره * آرایه؟ آره؟ بنابراین اجازه دهید که چگونه است که کار می کنند. برای بررسی املا، ما مجموعه ای از 27 عناصر، چرا که ما تمام نامه ها به علاوه آپوستروف. قبل از اینکه در اینجا من فقط رفتن به استفاده از 2 چون من می خواهم که قادر به در هیئت مدیره ارسال. خوب. بنابراین این یک مثال از یک امتحان کنید. اگر من فقط تعریف گره اول، من مجموعه ای از 2 عناصر که 2 اشاره گر به NULL، بنابراین من فقط با قرار دادن 'A' و 'B'. و من قصد دارم به یک بولی که می گوید is_word. آن را به نادرست برای یکی از اولین، فقط به خاطر اینکه، قبل از آن شما هیچ کدام از شخصیت ندارد. بنابراین یک کلمه خالی است یک کلمه نیست. پس از آن نادرست است. اگر من می خواهم برای اضافه کردن 'A' در این فرهنگ لغت، آنچه را که من باید انجام دهید؟ من فقط می خواهم که به malloc یک گره جدید برای 'A'، و پس از آن کلمه خود را به درست کردن. بنابراین آن را فقط نشان دهنده است که پس از 'A' است که درست باشد. را حس؟ پس اگر من می خواهم برای اضافه کردن 'باء، من به malloc 1 برای' ب 'را داشته باشد، و سپس من قصد دارم به راه اندازی توانید از عملگرهای منطقی را به نادرست، به دلیل 'ب' به خودی خود یک کلمه نیست. سپس من قصد دارم به malloc دیگری برای 'A'، بنابراین 'باء، و سپس من قصد دارم به راه اندازی یک کلمه درست است. از آنجا که "تو" یک کلمه است. و پس از آن اگر من می خواهم برای دیدن اگر 'B' است در این فرهنگ، من فقط می تواند به یکی از اولین، 'B' بروید. من به پایین، و من در کلمه است نگاه کنید، و آن را می گوید نادرست است. پس از آن یک کلمه نیست. اگر من می خواهم برای بررسی 'باء، من به یکی از اولین، 'B'، و پس از آن به 'A'، و من می بینم درست است، پس از آن یک کلمه است. را حس؟ بسیاری از مردم توسط تلاش می کند اشتباه گرفته شود. هیچ؟ در نهایت، کدینگ هافمن. برنامه نویسی هافمن بسیار مفید است برای صرفه جویی در حافظه و فشرده سازی فایل های متن، فقط به خاطر اینکه بسیاری از اوقات شما با استفاده از 'A' و 'e' را، برای مثال، در اسناد خود را، اما من نمی دانم اگر شما بچه ها استفاده از 'Q' یا 'Z' به اندازه. داشتن فقط 1 بایت برای هر کاراکتر، هر تنها - 256 کاراکتر است که ما در جدول ASCII را بسیار مطلوب نیست، فقط به خاطر اینکه برخی از شخصیت های که استفاده می کنید خیلی بیشتر وجود دارد، بنابراین شما احتمالا باید برای کسانی که استفاده از حافظه کمتر است. چگونه می توانم استفاده کنم کدگذاری هافمن؟ ما را مجبور به انجام یک درخت هافمن.  یک درخت هافمن تا گره است که دارای یک نماد است که رفتن به مثل، 'A'، 'B'، 'C'، نامه است، هر نامه شما، فرکانس است که فرکانس که کلمه در متن به نظر می رسد، که شما ایجاد شد درخت هافمن برای، و سپس یک گره است که رفتن به نقطه را به سمت چپ درخت هافمن و گره دیگر است که رفتن به نقطه را به سمت راست. پس فقط می خواهم یک درخت. چگونه می توانم شما را برای ساخت یک درخت هافمن؟ شما در حال رفتن به انتخاب 2 گره های که دارای پایین ترین فرکانس. اگر شما یک کراوات شما به انتخاب 2 گره که پایین ترین ارزش های ASCII نیز هست. سپس شما به ایجاد یک شاخه جدید از کسانی که 2 گره است که رفتن به فراوانی در ترکیب در گره پدر و مادر. و پس از آن شما به حذف 2 فرزند از جنگل و جایگزین کردن آنها با پدر و مادر. و شما به تکرار است که تا زمانی که شما فقط 1 درخت در جنگل را داشته باشد. پس بیایید ببینید که چگونه شما می توانید یک درخت هافمن برای ZAMYLA انجام دهد. شما می توانید در اینجا مشاهده کنید که همه حروف باید فرکانس 1 به جز 'A'، که دارای فرکانس 2. بنابراین من گره برای همه حروف I به منظور ارزش ASCII و فرکانس قرار داده ایجاد شده است. پس اگر من می خواهم برای ایجاد درخت اول، آن را با "L" و "M" باشد. پس آن را در اینجا. فراوانی این جفت ارز خواهد بود 2 دلیل آن را 1 + 1، پس از آن 2 بعدی با پایین ترین فرکانس ها 'Y' و 'Z'. و پس از آن من از همه آنها - دارای یک فرکانس از 2. بنابراین آنهایی که آنهایی که کمترین مقدار ASCII برای یک بعدی هستند؟ 'A' و 'L'. بنابراین من ایجاد گره های جدید، و در نهایت، آن را به 4 و 2، SO 2 در حال رفتن به سمت چپ باشد. و این درخت هافمن می باشد. پس اگر من می خواهم به ارسال متن، مانند باینری برای تبدیل به متن، با استفاده از درخت هافمن بسیار آسان است. برای مثال، اگر من می گویم که در حال حرکت به سمت چپ 0 و در حال حرکت به سمت راست است 1، چه شده است که رفتن به نمایندگی؟ پس مثل 1، 1، تا راست، راست، و پس از آن 0 است، بنابراین به سمت چپ خواهد بود L و سپس 1، 0، 0. بنابراین 1، 0، بنابراین فقط 1، 0، 'A'. و پس از 0، 1، تا 'Z'. و پس از 1، 0، 0 - هیچ. 0، 0 خواهد بود 'Y'، خیلی تنبلی. به طوری که همه برای من، راب رفتن به سر می برد. [راب Bowden] بنابراین، هفته 7 مسائل. ما زیادی رو به بیش از واقعا سریع است. اپراتورهای بیتی، سرریز بافر، کتابخانه CS50، پس از آن HTML، HTTP، CSS. همه در مثل 15 تا 20 دقیقه. اپراتورهای بیتی. 6 از آن است که شما نیاز به دانستن وجود دارد. بیتی و، بیتی یا، XOR، شیفت به چپ، شیفت سمت راست، و نیست. راست تغییر و نه شما به سختی در سخنرانی ندیدند. ما بیش از آن را به سرعت در اینجا، اما خوب است بدانید که این ها 6 که وجود داشته باشد. به یاد داشته باشید که اپراتورهای بیتی مانند وقتی که شما انجام 3 + 4 می باشد. شما با خرید و فروش صفر و 3 و 4 است. با اپراتورهای بیتی شما در واقع با بیت های فردی از شماره های 3 و 4 خرید و فروش. بنابراین یکی از اولین که ما می گویم بیتی است، و همه آن کند است تلنگر تمام بیت. بنابراین در اینجا، اگر شما در حال نوشتن این در C، شما آن را ارسال نمی کند به عنوان ~ 11،011 یا هر چیز دیگری، شما می توانید ارسال آن را دوست دارم ~ 4، و سپس آن را نمایش دودویی 4 تلنگر. بنابراین در اینجا، ~ برخی از عدد دودویی 1101101 در حال رفتن به دقیقا تلنگر همه 1 به 0 و همه 0 به 1 است. همانطور که می گویند وجود دارد، استفاده مکرر از این، و ما آن را در یک بیت را مشاهده کنید، مثل این است که ما می خواهیم آمد تا با برخی از تعداد که در آن همه از بیت ها 1، به جز یکی از آنها. پس از آن معمولا ساده تر برای بیان تعداد که در آن فقط این است که بیت تنظیم شده باشد، و پس از آن ~ از آن، بنابراین هر بیت دیگر به جز است که یک مجموعه را. بنابراین این چیزی است که ما قصد استفاده بیشتر در کمی. بیتی و یا. در اینجا 2 اعداد دودویی، و این 2 عدد می باشد خیلی نماینده، از آنجایی که آنها نشان دهنده هر ممکن ترکیبی از بیت شما می توانید نیاز به کار در. در اینجا، وقتی که من هر بیت or'd، ما فقط رفتن به مقایسه راست پایین. بنابراین در سمت چپ ما یک 1 و 1. وقتی که من بیتی | آن، چه هستم من برای به دست آوردن؟ یکی. سپس بیتی | 0 و 1 است که رفتن به من بدهید؟ یکی. بیتی 1 و 0 است برای رفتن به همین، یک. بیتی 0 | 0 به من 0 دهد. بنابراین تنها مورد که در آن من 0 در 0 | 0 مورد. و شما می توانید از آن درست مثل ORS منطقی شما فکر می کنم. بنابراین اگر شما از 1 به عنوان درست و 0 را نادرست فکر می کنم، چیزی که همین امر در اینجا. بنابراین درست است یا درست درست است، درست است یا غلط درست است. غلط یا درست درست است، نادرست یا نادرست تنها چیزی است که در واقع غلط است. در اینجا به عنوان مثال که شما باید بدانید این به عنوان یک مثال بسیار خوب از زمانی که اپراتورهای بیتی استفاده می شود. در اینجا اگر ما و یا سرمایه 'A' با Ox20، و ما در این در یک ثانیه نگاه کنید، ما چیزی. و اگر ما و یا حروف کوچک 'A' با Ox20، ما چیزی. بنابراین اجازه دهید بالا بکشد جدول ASCII. خوب. در اینجا ما می بینیم که 'A' است - در اینجا ما باید 'A' اعشاری 65 است. اما من با مبنای شانزده است که Ox41 بروید. کاملا مطمئنم که ما آن را در کلاس دیدم. من فکر می کنم ما آن را در کلاس دیدم که این بسیار آسان است برای تبدیل از مبنای شانزده به دودویی. بنابراین در اینجا، اگر من می خواهم برای قرار دادن 4 به دودویی، که فقط برای رفتن به 0100. این مکان 1، مکان 2، مکان 4 است، پس این 4. سپس من می توانم به دودویی، که برای رفتن به 0001 تقسیم 1. و به این ترتیب این است که رفتن به نمایندگی از 'A' در دودویی. با توجه به حروف کوچک 'A'، در حال حاضر برای رفتن به Ox61، که در آن، تقسیم این را به باینری آن، تا 6 - اجازه دهید در واقع آن را انجام دهید - هیچ پاک کن وجود دارد؟ پاک کن. Ox61. بنابراین تقسیم 6 به دودویی است برای رفتن به 0 + 4 + 2 + 0. و تقسیم 1 است برای رفتن به 0001. نگاهی به تفاوت بین این 2، ما می بینیم که تنها تفاوت بین حروف کوچک و سرمایه 'A' این بیت است. پس از بازگشت به اینجا - درست است. بازگشت به اینجا، اگر ما آنچه را که کمی Ox20 است نگاه کنید، بنابراین تقسیم Ox20 به دودویی آن، 0010، 0000 است. Ox20، تنها بیتی است که قرار است این بیت که ما با نگران است، با سوئیچینگ بین سرمایه و حروف کوچک 'A'. اگر من و یا 'A'، که این یکی، 'A'، اگر من و یا 'A' با Ox20، چه هستم من برای به دست آوردن؟ [دانشجو، نامفهوم] حروف کوچک ''، به دلیل آن را به تلنگر این بیت به 1. و اگر من و یا 'A' با Ox20، چه هستم من برای به دست آوردن؟ حروف کوچک، چرا که فقط اورینگ 'A' با Ox20، من فقط رفتن به اورینگ این بیت به 1 است، در واقع در حال حاضر 1 است، بنابراین مهم نیست. بنابراین ما 'A' و 'A'. بیتی و. باز هم، ما می توانیم از این به عنوان همتای منطقی و ما فکر می کنم. در سمت چپ ما درست است و درست است. این خبر درست باشد، و برای همه موارد، غلط و درست است یا درست و نادرست، و یا نادرست و غلط، هیچ یک از کسانی که همه چیز درست است. بنابراین آنچه که ما تا پایان گرفتن 1000 است. بنابراین در حال حاضر، در اینجا، در اینجا است که من بیتی قابل اعتماد استفاده می شود نیست، که در آن ما Ox20 بود. بنابراین این Ox20 است. در حال حاضر آنچه من می خواهم به، بیتی ~ از Ox20. که در حال رفتن به تلنگر تمام بیت. بنابراین من 1101، 1111. و به این ترتیب 'A' anded با ~ Ox20 به من چه به من بدهید؟ تنها کمی ما واقعا نیاز به فکر کردن در مورد این یکی است، از آن زمان، اگر همه از این بیت به 1 تنظیم شده باشد، پس از آن ما قصد گرفتن دقیقا همان چیزی است 'A' بود، به جز، احتمالا، این بیت است. از آنجا که اگر آن را به 1 بود، در حال حاضر آن را به 0 تعیین می کنند، به دلیل آن چه که هست، با این حال رفتن به 0 anded. پس چه 'A' است و ~ Ox20 به من بدهید؟ [دانش آموزان پاسخ، نامفهوم] و چه و است - آن را 'A'. و آنچه که 'A' و ~ Ox20 به من بدهید؟ 'A.' از آنجا که این در حال حاضر 1. Anding با این 0 است که آن را به 0، و در حال حاضر ما در حال رفتن به دریافت 'A'. هر دو "A، و آخرین اما نه کم از این نوع، ما XOR. این بسیار شبیه و یا، به جز این معنی است که به طور انحصاری و یا. این شبیه چیزی است که شما معمولا از عنوان و یا در دنیای واقعی فکر می کنم. بنابراین شما یا 'X' و 'Y'، اما نه هر دو. در اینجا 1 ^ 1 است برای رفتن به 0. از آنجا که درست است، این است که - آن کار نمی کند و همچنین با درست منطقی و نادرست به عنوان بیتی و و یا کار، اما درست ^ درست نادرست است. از آنجا که ما فقط می خواهید برای بازگرداندن true اگر فقط یکی از آنها درست است. بنابراین 1 ^ 1 0 است. چه در مورد 0 ^ 1؟ آیا 1. 1 ^ 0 1 است، 0 ^ 0 است 0. بنابراین در هر شرایطی، 0 بیتی چیزی 0 است برای رفتن به 0. 1 بیتی چیزی 0 یا 0 بیتی 1، اگر آن را | یا ^، آن خواهید بود یک 1، و اگر آن را و آن خواهید بود 0. و تنها مورد که در آن 1 بیتی 1 است 1 نمی باشد. با منحصر به فرد و یا. این 0110 است. بنابراین در اینجا در حال حاضر، با استفاده از XOR - تا ما به 20 است. 'A' ^ Ox20 این 2 بیت ما در حال مقایسه است. پس 1 ^ 0 به من چه به من بدهید؟ یک. 'A' ^ Ox20 به من بدهید؟ کوچک. 'A' ^ Ox20 به من بدهید؟ سرمایه A. از آنجا که هر چه این در حال انجام است، این XORing با Ox20 به طور موثر کوه در می رم هر چه این بیت است. اگر این 0 است، در حال حاضر رفتن به تبدیل شدن به یک 1. از آنجایی که این 1 است، 1 ^ 1 0 است. بنابراین ما یک "تبدیل شده است 'A' و 'A' ما تبدیل شده است". بنابراین XOR یک راه بسیار راحت فقط کوه در می رم مورد است. شما فقط می خواهم به تکرار بیش از یک رشته از حروف و متناوب مورد هر شخصیت تنها، شما فقط همه چیز را XOR با Ox20. در حال حاضر ما تغییر نکرده اند. شیفت به چپ فقط رفتن به، اساسا، فشار تمام اعداد را، و یا به سمت چپ، و قرار دادن 0 در پشت سر آنها. بنابراین در اینجا ما 00001101. ما قصد داریم به فشار 3 در 0 را از سمت راست، و ما 01101000. در شرایط nonbinary، ما می بینیم که که واقعا خرید و فروش 13 سمت چپ منتقل شده با 3، که به ما می دهد 104. تغییر پس سمت چپ، ما در اینجا ببینید، x << Y است که اساسا X * 2 ^ y است. 13 * 2 ^ 3، 2 ^ 3 8 تا 13 * 8 104 است. اگر شما فقط در مورد باینری به طور کلی، چگونه هر رقم، فکر می کنم اگر ما از سمت راست شروع می کنید، آن را به محل 1، و سپس محل 2، پس از آن محل 4 است. پس با فشار دادن در 0 را از سمت راست، ما فقط هل دادن چیزهایی است که به جای 4 به جای 8 بود، و چیزهایی که به جای 8 به جای 16 بود. هر تغییر و فقط با 2 ضرب. آره؟ [دانشجو] اگر شما توسط 5 منتقل چه اتفاقی می افتد؟ [Bowden] اگر توسط 5 منتقل شده که فقط از دست دادن ارقام. به ناچار، به آن همان چیزی است. مانند، اعداد صحیح، تنها 32 بیت هستند، بنابراین اگر شما اضافه 2 عدد صحیح واقعا بزرگ است، آن را فقط در یک عدد صحیح متناسب نیست. پس از آن همان چیزی که در اینجا. اگر شما توسط 5 منتقل شده، ما فقط از دست آن یکی. و این نوع از آنچه منظور من است "تقریبا" که اگر شما تغییر بیش از حد، شما بیت از دست بدهند. Shift سمت راست است که رفتن به مخالف، که در آن ما قصد داریم به پرتاب 0 خاموش در پایان، و برای اهداف ما، پر در 0 که از سمت چپ. بنابراین انجام این کار، ما اساسا معکوس چیزی است که ما در حال حاضر انجام داده بود. و ما می بینیم که سه 0 را در سمت راست فقط افتاده خاموش، و ما 1101 تمام راه را به سمت راست فشار. این در حال انجام است 104 3، است که، به طور موثر، X / ^ 2 y است. بنابراین در حال حاضر، در اینجا، آن را یک ایده مشابه است. چرا آن را فقط در حدود X / ^ 2 y و در واقع X / ^ 2 Y؟ چرا که اگر من با 4 تغییر یافته بود، من از دست داده اند 1. در واقع، آنچه شما فکر می کنم، فقط از تقسیم عدد صحیح به طور کلی فکر می کنم. بنابراین، مانند 5/2 2 است. این 2.5 نیست. این همان ایده در اینجا. هنگامی که ما در 2 تقسیم می شوند، ما می توانیم بیت های عجیب و غریب در طول راه از دست بدهند. بنابراین در حال حاضر - که آن را برای بیتی. که همه شما نیاز به دانستن است. به یاد داشته باشید موارد استفاده ما در کلاس را دیدم، مانند یک ماسک بیتی برای اپراتورهای بیتی مفید است، و یا شما از آنها استفاده برای ماسک بیت. حروف بزرگ و حروف کوچک، تبدیل یک مثال بسیار اولیه است. خوب، پس بافر حملات سرریز. هر کس به یاد داشته باشید که چه چیزی اشتباه است با این تابع بود؟ توجه داشته باشید که ما یک آرایه از 12 بایت، 12 کاراکتر، اعلام کرد و پس از آن ما را به بافر ما از 12 کاراکتر تمام نوار رشته را کپی کنید. خب حالا مشکل اینجا؟ تعداد سحر و جادو 12 باید تقریبا فورا پاپ به عنوان - چرا 12؟ اگر بار اتفاق می افتد که بیش از 12 کاراکتر؟ اگر نوار میلیون ها نفر از شخصیت است؟ در اینجا مسئله memcpy است. اگر نوار به اندازه کافی بلند، آن را فقط به طور کامل - 'ج'، 'ج' مراقبت می کند که تنها 12 حرف بود. 'ج' مراقبت می کند که می تواند جا که بسیاری از بایت نیست. این فقط به طور کامل کاراکتر بازنویسی، 12 بایت ما برای آن اختصاص داده ام، و همه چیز گذشته آن را در حافظه است که در واقع به آن بافر تعلق ندارد با هر نوار رشته است. بنابراین در این تصویر ما در کلاس بود که در آن ما پشته ما در حال رشد است. شما باید به این تصاویر استفاده می شود و یا با آنها آشنا است. ما پشته ما در حال رشد، آدرس های حافظه در 0 شروع در بالای صفحه و رشد کردن به دوست 4 میلیارد در پایین. ما آرایه ما 'ج' جایی در حافظه، پس ما باید اشاره گر ما به نوار سمت راست در زیر آن، و پس از آن ما باید این اشاره گر قاب ذخیره شده در آدرس برگشت و پشته معمول پدر و مادر ما است. به یاد داشته باشید آنچه که آدرس برگشت است؟ این وقتی که اصلی را یک تابع تولی، خواستار نوار تابع، به ناچار، بار برمی گردد. بنابراین، هنگامی که بازده نوار، آنها باید بدانند که آن را برگشت به تولی که آن را به نام. بنابراین آدرس برگشت آدرس تابع است که آن را به بازگشت به زمانی که تابع است. به این دلیل که برای حملات سرریز بافر مهم است زیرا، به راحتی، هکرها می خواهم به تغییر آدرس برگشت. به جای رفتن به تولی، من قصد دارم برای رفتن به هر جا که هکر می خواهد من برای رفتن به. و، به راحتی، که در آن هکر اغلب می خواهد به بازگشت به از آغاز بافر است که ما در اصل در حال است. بنابراین متوجه، دوباره، کوچک هند است. این ابزار به عنوان مثال از یک سیستم کوچک هند است، به طوری که یک عدد صحیح و یا یک اشاره گر است که با بایت معکوس ذخیره می شود. بنابراین در اینجا ما می بینیم - این است؟ آره. ما Ox80، OxC0، Ox35، OxO8 را ببینید. به یاد داشته باشید رقم تولید کنید؟ ما رقم تولید در کوچک هند معکوس، چرا که 2 رقم شانزده شانزدهی یک بایت را تشکیل می دهند، و ما به بایت معکوس می باشد. به همین دلیل است که ما ذخیره، مانند، 80530CO8. ما ذخیره، به جای آن، هر جفت از 2 رقم، با شروع از سمت راست. این آدرس اشاره به آدرس شروع از بافر ما است که ما در واقع می خواستم برای کپی کردن را در وهله اول. به این دلیل که بسیار مفید است زیرا، اگر مهاجم اتفاق افتاد به، به جای داشتن یک رشته که تنها بود یک رشته بی ضرر مانند، نام و یا چیزی خود، چه می شود اگر، به جای آن، که رشته ای فقط بعضی از کد های دلخواه بود که بود هر آنچه که آنها می خواستند آن را انجام دهید؟ به طوری که آنها می تواند - من نمی توانم از هر کد سرد فکر می کنم. این می تواند هر چیزی باشد، هر چند. هر کد به نمایش گذاشت. اگر آنها می خواستند، آنها فقط می تواند کاری را انجام دهد در گسل SEG، اما این بی معنی خواهد بود. آنها معمولا آن را انجام دهد به هک سیستم شما. باشه. کتابخانه CS50. این است که، اساسا، getInt، getString، تمام آن دسته از توابع که ما برای شما فراهم شده است. بنابراین ما باید * رشته کاراکتر، و انتزاع که ما را قورت است در برخی از نقطه در طول ترم. به یاد داشته باشید که یک رشته فقط آرایه ای از کاراکتر ها است. بنابراین در اینجا ما نسخه خلاصه از getString را ببینید. شما باید به آن نگاه دوباره به یاد داشته باشید که چگونه از آن در واقع اجرا شده است. جزئیات کلیدی هستند، متوجه ما در یک شخصیت در یک زمان دریافت از استاندارد در، که درست مانند ما در صفحه کلید تایپ کردن. بنابراین یک شخصیت در یک زمان، و اگر ما بیش از حد بسیاری از شخصیت های، بنابراین اگر n + 1 بیشتر از ظرفیت است، پس ما نیاز به افزایش ظرفیت بافر است. بنابراین در اینجا ما در حال دو برابر شدن اندازه بافر است. و آن را نگه می دارد رفتن، ما وارد کردن کاراکتر به بافر ما تا زمانی که ما یک خط جدید و یا انتهای فایل یا هر چیز دیگری دریافت خواهید کرد، که در این صورت، ما با این رشته و پس از آن getString واقعی انجام می شود کاهش حافظه، مانند اگر ما بیش از حد حافظه اختصاص داده آن را به عقب می روم و کوچک کردن کمی. بنابراین ما نشان نمی دهد که، اما ایده اصلی این است آن را به عنوان خوانده شده در یک شخصیت واحد در یک زمان. این را نمی توان فقط در یک چیز همه به عنوان خوانده شده در یک بار، چون بافر خود را تنها از یک اندازه خاص است. بنابراین اگر رشته که تلاش می کند برای وارد کردن به بافر بیش از حد بزرگ است، سپس آن را سرریز. بنابراین در اینجا ما جلوگیری است که تنها در یک شخصیت واحد خواندن در یک زمان و در حال رشد هر زمان که ما به نیاز. بنابراین getInt و دیگر توابع کتابخانه CS50 تمایل به استفاده از getString در پیاده سازی آنها. بنابراین من بر چیزهای مهم در اینجا. این getString را به یک رشته است. اگر getString موفق به بازگشت حافظه، به یاد داشته باشید که getString mallocs چیزی، بنابراین هر زمان که شما getString تماس بگیرید شما باید نه (نامفهوم) رایگان است که رشته ای است که به شما کردم. بنابراین در اینجا، اگر از آن موفق به malloc چیزی، ما بازگشت INT_MAX فقط به عنوان یک پرچم است که، با سلام، ما قادر به گرفتن یک عدد صحیح در واقع نیست. شما باید چشم پوشی از هر آنچه من به شما بازگشت، و یا شما باید این را به عنوان یک ورودی معتبر درمان نیست. در نهایت، فرض کنید که موفق بود، ما از sscanf با پرچم خاص، که بدان معنی است، اول یک عدد صحیح مطابقت، سپس بعد از آن عدد صحیح مطابقت با هر کاراکتر. بنابراین متوجه ما می خواهیم آن را برابر 1. بازده پس sscanf که چگونه بسیاری از موارد مشابه اگر با موفقیت ساخته شده است؟ این باز خواهد گشت 1 اگر آن را با موفقیت یک عدد صحیح همسان، آن را به 0 بازگشت اگر آن را به یک عدد صحیح مطابقت ندارد، و از آن باز خواهد گشت 2 اگر آن را همسان یک عدد صحیح به دنبال برخی از شخصیت. بنابراین متوجه ما سعی مجدد اگر ما هیچ چیز به جز 1 بازی. بنابراین اگر ما وارد 1، 2، 3، C، و یا 1، 2، 3، X، پس از آن 1، 2، 3 می توانید در عدد صحیح ذخیره شده، X می توانید در شخصیت های ذخیره شده، sscanf را بازگشت 2، و ما را دوباره امتحان کنید، چرا که ما فقط می خواهید یک عدد صحیح. به سرعت از طریق HTML، HTTP، CSS وزد. زبان نشانه گذاری ابرمتن ساختار و معناشناسی وب است. در اینجا به عنوان مثال از سخنرانی که در آن ما از تگ های HTML است. ما باید تگ سر، برچسب ها بدن، ما نمونه هایی از برچسب خالی که در آن ما در واقع شروع و برچسب بستن ندارد، ما فقط لینک و تصویر داشته باشد. هیچ برچسب تصویر بسته شدن وجود دارد، فقط یک برچسب واحد است که همه چیز را برچسب نیاز به انجام انجام وجود دارد. لینک به عنوان مثال است. خواهیم دید که چگونه شما به CSS پیوند دارند، اسکریپت یک نمونه از اینکه چگونه به یک جاوا اسکریپت خارجی پیوند است. این بسیار سر راست است، و به یاد داشته باشید، HTML یک زبان برنامه نویسی نیست. در اینجا، به یاد داشته باشید که چگونه شما می توانید یک فرم و یا حداقل تعریف این کار را انجام؟ این یک فرم یک عمل و روش. روش شما تنها مشاهده می کنید، GET و POST. پس از دریافت نسخه که در آن چیزی می شود در URL قرار داده است. POST می باشد که در آن است در URL قرار داده است. در عوض، هر گونه داده ها از فرم در درخواست HTTP پنهان تر وارد می شود. بنابراین در اینجا، عمل تعریف می کند که در آن درخواست HTTP می رود. از کجا آن را به google.com / جستجو می باشد. روش. به یاد داشته باشید تفاوت بین GET و POST، و فقط به عنوان مثال می گویند، اگر شما به نشانه چیزی می خواهم. شما هرگز قادر به نشانه URL POST خواهد بود چرا که داده ها در URL گنجانده نشده است. HTTP، در حال حاضر، پروتکل انتقال ابرمتن است. پروتکل انتقال ابرمتن، شما انتظار می رود آن را به انتقال نشانه گذاری ابرمتن زبان، و آن را انجام می دهد. اما آن را نیز انتقال تصاویر شما را در وب پیدا کنید، هر هفته شما را شروع به عنوان یک درخواست HTTP. بنابراین HTTP زبان از شبکه جهانی وب است تنها. و در اینجا شما نیاز به تشخیص این نوع از یک درخواست HTTP. در اینجا HTTP/1.1 در سمت فقط می گوید که نسخه است از پروتکل من با استفاده از. این تقریبا همیشه برای رفتن به HTTP/1.1، به عنوان شما آن را ببینید. سپس ما می بینیم که این GET بود، جایگزین بودن POST، که شما ممکن است ببینید. و URL که من در تلاش بود برای دیدار بود www.google.com/search؟q =، اه، اه، اه. بنابراین به یاد داشته باشید که این، علامت سوال Q =، اه، اه، اه، مرتب کردن بر اساس مواد است که توسط یک فرم ارسال می شود. پاسخ ممکن است به من بازگشت را چیزی شبیه به این. باز هم، با شروع با پروتکل است که برای رفتن به آن، به دنبال کد وضعیت. در اینجا از آن 200 OK است. و در نهایت، صفحه وب که در واقع من برای خواسته دنبال خواهد شد. کد وضعیت ممکن است شما ممکن است مشاهده کنید، و شما باید چند تا از آنها را می دانیم. 200 OK شما احتمالا قبل از دیده می شود. 403 ممنوعه، 404 یافت نشد، خطا 500 سرور داخلی معمولا اگر شما به یک وب سایت بروید و چیزی را خراب و یا سقوط کد PHP خود را، در حالی که در دستگاه ما که جعبه نارنجی رنگ بزرگ که می آید و می گوید، مانند، چیزی اشتباه است، این کد کار نمی کند و یا این عملکرد بد است. معمولا وب سایت ها نمی خواهند شما دانستن اینکه چه چیزی توابع در واقع بد، بنابراین به جای آنها فقط شما 500 خطاهای داخلی سرور را. TCP / IP 1 لایه تحت HTTP است. به یاد داشته باشید که اینترنت در خارج از شبکه جهانی وب وجود دارد. مثل این می مونه که شما بازی بازی های آنلاین است که به این طریق HTTP رفتن نیست، آن را از طریق های مختلف - آن را هنوز هم با استفاده از اینترنت، اما آن را نشانی از HTTP استفاده کنید. HTTP تنها یک نمونه از پروتکل ساخته شده بر روی TCP / IP است. IP به معنای واقعی کلمه پروتکل اینترنت به این معنی است. هر کامپیوتر دارای یک آدرس IP، آنها آن چیزهایی 4 رقمی است مانند 192.168.2.1، یا هر چیز دیگری، که گرایش به یک محلی است. اما این الگو از یک آدرس IP است. بنابراین DNS، نام خدمات ثبت دامنه، که چیزهایی مانند google.com آنچه که ترجمه را به یک آدرس IP واقعی. بنابراین اگر شما تایپ می کنید که آدرس IP به یک URL، که شما را به گوگل را، اما شما تمایل به یاد داشته باشید کسانی که همه چیز نیست. شما تمایل دارند به جای google.com به یاد داشته باشید. آخرین چیزی که ما باید بنادر، که در آن این قسمت TCP از IP است. TCP می کند بیشتر است. در مورد فکر می کنم، می خواهم، شما باید مرورگر خود را در حال اجرا. شاید شما برخی از برنامه های ایمیل در حال اجرا. شاید شما برخی از برنامه های دیگر که با استفاده از اینترنت در حال اجرا. همه آنها نیاز به دسترسی به اینترنت، اما کامپیوتر شما فقط 1 کارت بی سیم و یا هر چیز دیگری. بنابراین پورت ها در راه است که ما قادر به تقسیم کردن است چگونه این برنامه قادر به استفاده از اینترنت می باشد. هر برنامه می شود 1 پورت خاص است که آن را می توانید گوش در، و به طور پیش فرض، HTTP از پورت 80 استفاده. برخی از خدمات ایمیل استفاده کنید 25. آنهایی که کم شماره تمایل به سایت متعلق به. شما معمولا قادر به گرفتن آنهایی که بالاتر شماره برای خودتان. CSS، شیوه نامه آبشاری. ما به سبک صفحات وب با CSS، نه با HTML. 3 مکان شما می توانید CSS خود قرار داده است. می توان آن را درون خطی، بین تگ های سبک، و یا در یک فایل کاملا از هم جدا و سپس مرتبط شوید و در اینجا فقط برای مثال از CSS است. شما باید از این الگوی تشخیص، که در آن به عنوان مثال برای اولین بار است که ما در حال تطبیق تگ body، و در اینجا ما در حال متمرکز تگ body. مثال دوم، ما در حال تطبیق چیز با بالا و پایین صفحه ID، و ما در حال استفاده از برخی از سبک های به آن. توجه کنید که ID بالا و پایین صفحه متن راستا به سمت چپ، در حالی که مرکز بدن متن راستا. پاورقی است در داخل بدن است. آن خواهد شد، به جای آن، تراز متن را در سمت چپ، حتی اگر بدن می گوید مرکز تراز متن. این کل قسمت آبشار آن است. شما می توانید - شما می توانید سبک برای بدن مشخص، و پس از آن چیز در بدن شما می توانید سبک های مشخص تر مشخص، و همه چیز کار می کنند که انتظار می رود. specifiers CSS های خاص را مقدم. من فکر می کنم که این. [علی نهم] سلام به همگی. اگر من فقط می تواند توجه شما را دریافت کنید. من علی هستم و من قصد دارم از طریق PHP و SQL به واقعا سریع است. بنابراین ما می توانیم آغاز خواهد شد. PHP برای PHP کوتاه است: پیش پردازنده مافوق متن. و همانطور که همه شما باید بدانید، آن است که یک زبان برنامه نویسی سمت سرور است، و ما استفاده از آن را برای پایان دادن به عقب از وب سایت ها، و چگونه آن را انجام می دهد بسیاری از محاسبات، در بخش پشت صحنه. نحو. این C، تعجب، تعجب را دوست ندارد. همیشه به با، اگر شما مشاهده می کنید، شروع - من نمی توانم جلوتر حرکت می کند. شما می توانید ببینید شما نیاز به نوع جدیدی از پرانتز و سپس شما نیز باید پی اچ پی؟ که همیشه چگونه شما به فریم متن PHP شما، کد PHP خود را. پس از آن می توانید درست مانند C، که در آن شما نوع آن را در اولین باشد. شما باید همیشه آن را احاطه کرده. و در حال حاضر، به نحو عمده این است که همه متغیرها را باید با $ شخصیت شروع می شود. شما نیاز به آن را انجام دهد زمانی که شما آنها را تعریف شود، شما نیاز به آن را انجام دهید زمانی که شما با اشاره به آنها را به بعد. شما همیشه نیاز که $. این تقریبا بهترین دوست جدید خود را. شما نمی - بر خلاف C، شما لازم نیست برای قرار دادن چه نوع از نوع متغیر در آن است. بنابراین در حالی که شما نیاز به دلار، شما لازم نیست برای قرار دادن، مانند، دانشنامه هوشمند ایکس و یا رشته ای Y، و غیره، و غیره. بنابراین تفاوت اندکی. به عنوان یک نتیجه از این، به این معنی است که PHP یک نوع ضعیف است. PHP یک زبان نوع ضعیف است، و آن را تا ضعیف متغیر تایپ. به عبارت دیگر، که بدان معنی است که شما می توانید از بین انواع مختلف انواع متغیر تغییر دهید. شما می توانید شماره خود را 1 به عنوان یک int ذخیره، شما می توانید آن را به عنوان یک رشته ذخیره، و شما می توانید آن را به عنوان شناور ذخیره، و آن را به همه این باشد که شماره 1. حتی اگر شما آن را ذخیره سازی در اشکال مختلف، هنوز هم - انواع متغیر ها هنوز هم در پایان برگزاری. بنابراین اگر شما در اینجا نگاه کنید، اگر شما از pset 7 به یاد داشته باشید، بسیاری از شما احتمالا مسائل با این حال. دو علامت مساوی، 3 نشانه مساوی، 4 نشانه های برابر است. خوب، هیچ 4 نشانه مساوی وجود دارد، اما 2 و 3 وجود دارد. شما با استفاده از 2 نشانه مساوی برای بررسی ارزش. این می تواند در میان انواع تیک بزنید. بنابراین اگر شما می توانید در اولین مثال را ببینید، من num_string == num_int. بنابراین اعضای هیات خود و رشته خود را هر دو می باشد، از لحاظ فنی، 1، اما آنها از انواع مختلف هستند. اما برای برابر دو، آن را هنوز هم شما منتقل می کند. با این حال، برای برابر سه گانه، آن را چک ارزش و همچنین انواع مختلف. این بدان معنی است که آن را به تصویب در که مورد دوم در اینجا، که در آن شما با استفاده از 3 نشانه مساوی به جای. به طوری که تفاوت عمده ای است که شما باید همه در حال حاضر نشان داده اند است. الحاق رشته دیگر چیزی قدرتمند شما می توانید در PHP استفاده کنید. این اساسا فقط این نماد نقطه دستی، و این که شما چگونه می توانید رشته ها را به هم پیوند. بنابراین اگر شما گربه و شما سگ، و شما می خواهید برای قرار دادن 2 رشته با هم، شما می توانید دوره استفاده کنید، و این نوع از چگونه کار می کند است. شما همچنین می توانید فقط آنها را در کنار یکدیگر، که شما می توانید در اینجا در مثال پایین را ببینید، که در آن I رشته 1، فضای رشته 2 اکو است. PHP می دانید به جای آنها به عنوان چون. آرایه ها. در حال حاضر، در PHP، 2 انواع آرایه ها وجود دارد. شما می توانید آرایه های منظم داشته باشد، و شما همچنین می توانید آرایه های انجمنی داشته باشد، و ما قصد داریم از طریق آنها در حال حاضر. آرایه های منظم فقط این در C، و بنابراین شما باید شاخص که به شماره افتاده است. در حال حاضر ما فقط رفتن برای ایجاد یک قرار داده و - پس این است که چگونه ما ایجاد یک آرایه خالی، پس از آن ما قصد داریم به قرار داده و به تعداد شاخص 0. ما قصد داریم برای قرار دادن عدد 6، ارزش 6. شما می توانید آن را در پایین مشاهده کنید. Where's - در عدد شاخص 1 ما قصد داریم برای قرار دادن تعداد ارزش 4، و بنابراین شما می توانید یک 6 وجود دارد، یک 4 وجود دارد، و پس از آن که ما در حال چاپ همه چیز، زمانی که ما سعی می کنیم و چاپ ارزش ذخیره شده در صفحه اول شماره 0، پس از آن خواهیم ارزش 6 در حال چاپ کردن را ببینید. دانلود؟ به طوری که آرایه به طور منظم برای شما است. راه دیگر شما همچنین می توانید همه چیز را به آرایه ها به طور منظم در حال حاضر است است شما فقط می توانید آنها را در پایان اضافه. این بدان معنی است که شما لازم نیست که برای مشخص کردن شاخص های خاص. شما می توانید تعداد مشاهده کنید، و سپس در براکت هیچ شاخص مشخص شده وجود دارد. و آن را می دانم - PHP می دانید به آن را فقط به انتهای لیست، نقطه آزاد بعدی اضافه کنید. بنابراین شما می توانید 1 سمت راست وجود دارد که در آن 0 نقطه، در نقطه اول 2 رفت سمت راست وجود دارد. 3 می رود - وجود دارد اضافه شده است نیز هست. به طوری که نوع را حس می کند. شما فقط به طور مداوم در آن با اضافه کردن، و پس از آن زمانی که ما در حال تکرار شاخص شماره 1، آن را به نسخه قابل چاپ کردن ارزش 2. سپس ما را آرایه که آرایه های انجمنی می باشد. آرایه های انجمنی، به جای داشتن شاخص های عددی، آنچه انجام می دهند، آنها شاخص های که توسط رشته می باشد. شما می توانید ببینید، به جای - من از تمام کسانی که شاخص تعداد شر، و در حال حاضر آن را key1، key2، key3، و آنها را در نقل از دو برابر است به معنی که آنها تمام رشته ها است. بنابراین ما می توانیم به عنوان مثال از این داشته باشد. به عنوان مثال از این است که ما باید TF، و است که به نام شاخص است. ما قصد داریم برای قرار دادن "علی" را به عنوان نام، در صفحه اول، کالری خورده، ما می توانیم یک int این بار به جای یک رشته قرار داده است، و پس از آن در دوست داشتن شاخص، ما می توانیم کل آرایه ای داخل آن قرار داده است. بنابراین این نوع از - آن است که یک مفهوم شبیه به ما تا به حال در شاخص با شماره، اما در حال حاضر ما می توانیم شاخص های اطراف را تغییر دهید به جای آن به آنها را به عنوان رشته. شما همچنین می توانید این کار، علاوه بر این فقط آن را انجام می دهند به صورت جداگانه، شما می توانید آن را همه در یک تکه انجام دهد. بنابراین شما می توانید که TF از این آرایه را مشاهده کنید، و پس از آن ما همه آنها را در یک غول مربع مجموعه ای براکت تنظیم شده است. به طوری که می تواند کارها را تا سرعت. این بیشتر از یک انتخاب سبک از نیست. ما همچنین حلقه داشته باشد. در C ما باید حلقه که شبیه به این کار می کنند. ما آرایه ما به حال، و ما از شاخص 0 به انتهای لیست رفته، و ما آن را تمام چاپ، درست است؟ به جز مشکل است، برای آرایه های انجمنی، ما لزوما نمی دانم کسانی که شاخص های عددی چون در حال حاضر ما شاخص رشته. در حال حاضر ما استفاده از حلقه حلقه foreach، که، باز هم، شما امیدوارم در pset 7 استفاده می شود. حلقه حلقه foreach فقط می دانم که از تک تک این فهرست است. و آن را لازم نیست بدانید که دقیقا شاخص عددی است که شما داشته باشد. بنابراین شما باید به نحو حلقه foreach، پس از آن حلقه foreach، شما را در آرایه. بنابراین آرایه من است که به نام pset، و پس از آن به عنوان، کلمه به عنوان، و سپس شما را به این متغیر موقت محلی است که شما قصد استفاده قرار فقط برای چیزی خاص که رفتن به نگهداری خاص - یک نمونه و یا یک بخش از آرایه. تعداد Pset برگزار می 1، و پس از آن شاید آن را به تعداد 6 نگه دارید، و سپس آن را به عدد 2 را نگه دارد. اما این تضمین را از طریق هر ارزش واحد که در آرایه بروید. توابع مفید است که شما باید در PHP می دانیم که نیاز به، به طوری که اطمینان حاصل می کند که شما از جمله فایل های خاص، اکو، خروج، خالی است. من به شدت توصیه شما در pset 7 در نگاه و در آن دسته از توابع نگاه کنید. شما ممکن است به دانستن آن، بنابراین من قطعا می دانم چه، دقیقا، کسانی که همه انجام می دهند. و در حال حاضر ما در حال رفتن به از طریق دامنه به واقعا به سرعت. در دامنه، PHP نوع از چیزی بد بو است، بر خلاف C، و بدین ترتیب ما فقط رفتن را از طریق آن به سرعت. بنابراین اجازه دهید می گویند که ما در آن فلش که در حال حاضر وجود دارد شروع می شود. و ما قصد داریم تا با $ شروع کنم. پس مقدار متغیر "من" است برای رفتن به 0، و ما فقط به حفظ و چاپ آن را در آن جعبه بزرگ سفید بیش از وجود دارد. ما قصد داریم تا با I0 شروع، و پس از آن ما قصد داریم به آن اکو. پس 0 وجود دارد. و پس از آن ما در حال رفتن به آن را افزایش توسط حلقه for، و سپس آن را به ارزش 1. یکی کمتر از 3 است، بنابراین آن را به از طریق آن عبور برای حلقه، و پس از آن ما در حال رفتن به آن را دوباره چاپ شده است. ما در حال رفتن به آن افزایش دوباره تا 2، و 2 کمتر از 3 است، بنابراین آن را برای حلقه عبور، و آن را چاپ 2. سپس شما باید توجه داشته باشید که 3 کمتر از 3 نیست، بنابراین ما از حلقه for شکستن. بنابراین در حال حاضر ما خارج شده، و پس از آن ما قصد داریم برای رفتن به aFunction. خوب. بنابراین شما باید توجه داشته باشید که این متغیر است که ما ایجاد کرده اید، به "من" متغیر، در محل مورد نظر نیست. این بدان معنی است که این محلی برای حلقه نیست، و که متغیر ما هنوز هم می توانید دسترسی و تغییر پس از آن، و آن را هنوز هم موثر خواهد بود. بنابراین اگر شما در حال حاضر به تابع، شما خواهید دید که ما نیز به "من" متغیر استفاده کنید، و ما قصد داریم به افزایش "من" + +. شما که فکر می کنم، در ابتدا، بر اساس C، که یک کپی از "من" متغیر است. این یک چیزی کاملا متفاوت را، که درست است. بنابراین، هنگامی که ما آن را چاپ، ما قصد داریم تا در آن چاپ "من" + +، است که رفتن به نسخه قابل چاپ کردن که 4، و پس از آن ما قصد داریم - متاسفم. سپس ما می خواهیم برای پایان دادن به از آن تابع، و ما در حال رفتن به جایی که فلش می باشد در حال حاضر. این بدان معنی است که پس از آن، با این حال، اگر چه تابع تغییر ارزش «من»، آن را در خارج از تابع تغییر نمی کند، از آنجا که تابع دارای یک دامنه جداگانه. این بدان معنی است که هنگامی که ما اکو "من"، آن را در دامنه تابع تغییر نکرده است، و به همین ترتیب پس از آن ما قصد داریم تا در آن چاپ 3 دوباره. چیز های مختلف در مورد دامنه در PHP از C. در حال حاضر در PHP و HTML. PHP استفاده شده است تا صفحات وب پویا. این نوع باعث می شود همه چیز متفاوت است. ما آن را از HTML متفاوت است. با HTML، ما همیشه فقط باید همان چیزی که شخص، مثل نحوه راب نشان داد، در حالی که PHP، شما می توانید همه چیز را بر اساس که کاربر را تغییر دهید. پس اگر من این است، من، "شما با نام کاربری -" و سپس نام، و من می توانم نام را تغییر دهید. بنابراین در حال حاضر به نام جوزف است، و از آن است که "درباره من"، اما پس از آن من نیز می تواند به تغییر نام به تامی. و این می تواند یک چیز متفاوت است. پس ما نیز می تواند چیزهای مختلفی در مورد او را تغییر دهید، و آن را به مطالب مختلف را بر اساس نام نشان می دهد. بنابراین PHP نوع می تواند تغییر کند چه خبر است در وب سایت شما. در اینجا همان. با این حال، توجه داشته باشید که آنها مطالب مختلف، حتی اگر از لحاظ فنی هنوز هم دسترسی به آن صفحه وب در همان سطح. تولید HTML. 2 راه های مختلف که شما می توانید این کار وجود دارد. پس ما از آن در حال حاضر. راه اول این است، شما باید - بله، ببخشید. بنابراین شما فقط باید به طور منظم خود را برای حلقه در PHP، و سپس شما را در PHP اکو و شما اکو از HTML. با استفاده از آنچه راب شما از اسکریپت HTML نشان داد و سپس با استفاده از PHP نسخه قابل چاپ به فقط آن را چاپ کنید به صفحه وب. راه جایگزین این است که آن را به عنوان اگر شما جدا از PHP و HTML. بنابراین شما می توانید یک خط از PHP که برای حلقه شروع می شود داشته باشد، سپس شما می توانید خط از HTML در یک چیز جداگانه داشته باشد، و پس از آن پایان دادن به این حلقه، دوباره، با PHP. پس این نوع از جدا کردن آن را. در سمت چپ، شما می توانید که شما به همه - آن را فقط 1 تکه از PHP است. در سمت راست مشاهده می کنید که شما یک خط از PHP، شما یک خط از HTML، و شما باید یک خط از PHP دوباره. بنابراین جدا کردن آن را به آنچه که آنها انجام. و شما توجه داشته باشید که در هر صورت، برای هر کدام از آنها، آنها هنوز هم از چاپ تصویر، تصویر، تصویر، به طوری که HTML هنوز هم به همان شیوه چاپ شده است. و پس از آن شما هنوز هم می بینید که 3 تصویر نشان می دهد تا در وب سایت شما. پس از آن 2 راه مختلف انجام همین کار است. در حال حاضر ما فرم ها و درخواست ها. همانطور که راب به شما نشان داد، اشکال از HTML وجود دارد، و ما فقط از طریق این نسیم. شما باید یک عمل و به شما یک روش، و عمل خود را نوع شما که در آن شما در حال رفتن به ارسال آن نشان می دهد، و از روش این است که آیا آن را برای رفتن به یک GET یا POST. و یک درخواست GET، به عنوان راب گفت، بدان معنی است که شما در حال رفتن به آن را در یک فرم و شما آن را به عنوان یک URL را مشاهده کنید، در حالی که یک درخواست POST شما نمی خواهد در یک URL را ببینید. بنابراین تفاوت اندکی. با این حال، یک چیز است که یک چیز مشابه است این است که POST و GET به همان اندازه نا امن. بنابراین شما ممکن است فکر می کنم که فقط به خاطر اینکه شما آن را در URL مشاهده کنید، این بدان معناست که POST امن تر است، اما شما هنوز هم می توانید آن را در کوکی های خود را در اطلاعاتی که شما در حال ارسال. بنابراین فکر نمی کنم که در مورد یکی یا دیگری. یکی دیگر از چیزهایی که توجه داشته باشید این است که شما نیز متغیرهای بخش داشته باشد. شما بچه ها این در pset 7 استفاده می شود برای دریافت اطلاعات ID کاربر خود را. چه اتفاقی افتاده بود که شما می توانید این آرایه انجمنی استفاده، $ _SESSION، و پس از آن شما قادر به دسترسی به چیز متفاوت هستند و ذخیره چیزهای مختلف در سراسر صفحات. آخرین چیزی است که ما باید SQL، ساختار زبان پرس و جو، و این یک زبان برنامه نویسی برای مدیریت پایگاه داده است. چه، دقیقا، پایگاه داده می باشد؟ آنها مجموعه ای از جداول هستند، و هر جدول می تواند انواع مشابه از اشیاء را داشته باشد. بنابراین ما یک جدول از کاربران در pset امور مالی خود را به حال. و چرا آنها مفید است؟ از آنجا که آن راه به طور دائم ذخیره سازی اطلاعات است. این یک راه ردیابی چیز و مدیریت چیزهایی است و در واقع از دیدن آن در صفحات مختلف و آهنگ های نگهداری. در حالی که اگر شما فقط آن را ذخیره در یک لحظه که فوری و سپس آن را بعد از آن استفاده کنید، شما قادر نخواهد بود برای دسترسی به هر چیزی که شما ذخیره کرده ایم. در حال حاضر 4 چیز مهم است که ما برای دستورات SQL استفاده کنید. ما را انتخاب کنید، درج، حذف و به روز رسانی. این واقعا مهم است برای شما بچه ها برای مسابقه خود بدانید. ما به سرعت می روم بر سر انتخاب در حال حاضر. در واقع، شما انتخاب سطر از پایگاه داده باشد. بنابراین اگر شما، حق در اینجا - ما باید این 2 چیز متفاوت است، و ما می خواهیم از جدول کلاس ها را انتخاب کنید که در آن عالی - که در آن در ستون عالی مقدار 1 است. بنابراین شما می توانید در اینجا ببینید، ما باید این 2 چیز از نام کلاس، CS50 و Stat110، و ما باید شناسه کلاس و شعار. بنابراین ما خواهید را انتخاب کنید تمام آن اطلاعات. سپس شما می توانید ببینید در اینجا است که این نوع از برداشت از آن ستون عالی، که در آن همه چیز است 1، و سپس از آن است که ID کلاس، نام کلاس و شعار است که آن را می توانید انتخاب کردن. دقیقا چگونه شما این کار را در کد؟ شما مجبور به استفاده از PHP. پس این نوع از چگونه PHP و SQL به یکدیگر مرتبط است. در حال حاضر ما کد ما، و ما قصد استفاده از تابع پرس و جو ما همانطور که ما در pset 7 انجام داد، و ما در حال رفتن پرس و جوی SQL را اجرا کنند. سپس ما در حال رفتن به - ما همیشه اگر ردیف را سه برابر در صورت نادرست به تیک بزنید. پس باز هم، شما می خواهید برای بررسی نوع و مقدار، و پس از آن اگر آن کار نمی کند، پس از آن شما می خواهید برای معذرت خواهی، به طور معمول، همانطور که ما در pset 7 بود. در غیر این صورت، شما را به حلقه می خواهید از همه چیز با کسانی که دستی حلقه foreach حلقه است که ما بیش از رفت. حالا که ما حلقه از طریق و ما آن را در گذشته ساخته شده است، اجازه دهید فرض کنیم که پرس و جو ما به تصویب رسید، در حال حاضر ما حلقه foreach ما. و سطر اول آن است، بنابراین در اینجا ردیف است، حق در اینجا، آن را بسته بندی. آن را به نسخه قابل چاپ کردن تمام اطلاعاتی که آن را بدست. بنابراین آن را برای چاپ کردن در پایین "می خواهم بدانید HTML؟" سپس آن را برای رفتن به سطر بعدی، به دلیل آن را به اتمام اولین حلقه، و تا بعد آن را برای چاپ کردن خط دوم از آن، است که برای رفتن به STAT110، یافتن تمام لحظات. یکی از آخرین چیز در SQL آسیب پذیری است. من می دانم که دیوید را لمس کرد در این کمی در سخنرانی. شما می توانید از این بعد به عنوان خوانده شده. این واقعا خنده دار است. تزریق SQL یک نوع از چیزی که روی حیله و تزویر است. اجازه دهید بگویم که شما فقط چوب آن متغیر سمت راست به درخواست شما، که شما می توانید در آن خط اول را ببینید. بنابراین به نظر می رسد خوب، درست است؟ شما فقط با قرار دادن در نام کاربر و رمز عبور در پرس و جو SQL خود را، و شما می خواهید به آن کشتی خاموش کنید و هر آنچه در جدول داده های خود را. که به نظر می رسد خیلی ساده است. پس اجازه می دهد می گویند کسی قرار می دهد در، برای رمز عبور، به این OR متن را در اینجا - باید در واقع در جعبه قرمز می شود. بنابراین اجازه دهید می گویند که آنها که رمز عبور را قرار داده است - این چیزی است که آنها را وارد کنید. به طوری که آنها در حال قرار دادن OR "1" = 1. نوع رمز عبور احمقانه به. حالا اجازه دهید فقط آن را جایگزین در، و شما توجه داشته باشید که در آن پرس و جو SQL در حال حاضر، آن را به همیشه درست ارزیابی، چرا که شما باید توجه داشته باشید که شما می توانید پرس و جو SQL را انتخاب کنید همه این اطلاعات یا شما فقط می توانید 1 = 1. به طوری که همیشه به ارزیابی درست. رفتن که نه واقعا کار کند، چرا که بدان معنی است که هکر می تواند به سیستم خود را شکستن. راه حل این است که شما مجبور به استفاده از سیستم PDO، که بدان معنی است که شما مجبور به استفاده از علامت سوال، همان چیزی که شما بچه ها استفاده در pset 7، جایی که شما قصد استفاده از یک علامت سوال به جای که در آن شما می خواهید برای قرار دادن چیزی، و پس از آن شما به یک کاما از هم، و سپس شما بعد از آن داشته باشد، پس از رشته خود را، متغیرهای مختلف است که شما می خواهید به جای به علامت سوال خود را. بنابراین شما در اینجا توجه داشته باشید که در حال حاضر من این علامت سوال قرمز. سپس من از متغیرهای بعد از رشته من قرار داده تا من می دانم که به جای آنها به ترتیب پس از آن. است که مطمئن شوید که اگر کسی آن را مانند این، و آنها را به یا 1 = 1 شرایط، که مطمئن شوید، در پایان به عقب، مطمئن شوید که آن را نمی خواهد در واقع پرس و جو SQL شکستن. خوب، پس که تقریبا آن، یک گردباد از PHP و SQL. بهترین شانس را به همه شما، و در حال حاضر به اورگون [Oreoluwatomiwa Babarinsa] همه باشه. زمان به بیش از برخی جاوا اسکریپت و برخی چیزهای دیگر را به سرعت تا ما شما را تا امشب برگزار نشد. جاوا اسکریپت. بله. جاوا اسکریپت نوع از چیزی که خنک است، ظاهرا. چیزهایی که شما واقعا نیاز به مورد جاوا اسکریپت می دانید، آن را به نوعی مانند پایان های سمت سرویس گیرنده از آنچه برنامه وب خود را در حال رفتن به انجام این کار می شود. در برخی از چیزهایی که شما فقط نمی خواهم که به مراقبت از تمام وقت در سمت سرور وجود دارد. تمام فعل و انفعالات کمی، برجسته سازی یک چیز، و چیزی ناپدید می شوند. شما واقعا نمی خواهید به صحبت به سرور شما همه زمان برای آن است. و بعضی از آن است که حتی ممکن نیست که در سمت سرور انجام دهد. این است که چرا ما نیاز به چیزی شبیه به جاوا اسکریپت. چیز جالب در مورد جاوا اسکریپت: این است که به صورت پویا نوع دار شده. این بدان معنی است که برنامه شما نیازی به دانستن چه، دقیقا، متغیرهای زمانی که شما آن را ارسال کنید. این فقط نوع آن را کشف کردن آن را به عنوان در حال اجرا. چیز دیگری که جالب در مورد آن: این یک زبان آکولاد است، که به معنی به نحو شبیه به C و PHP است. شما لازم نیست برای انجام این کار دوباره کاری بسیار زمانی که شما جاوا اسکریپت یادگیری. در اینجا ما کمی از جاوا اسکریپت. نکته جالب در اینجا این است که، اگر شما به آن نگاه کنید، ما باید کمی از جاوا اسکریپت سمت راست وجود دارد در تگ head. چه می کند این است که اساسا فقط شامل یک فایل جاوا اسکریپت. این یکی از راه های که شما می توانید جاوا اسکریپت را در برنامه خود را شامل است. سپس کمی دوم است که در واقع برخی از درون خطی جاوا اسکریپت، بسیار شبیه به سبک های درون خطی با CSS، و شما فقط به نوشتن مقداری کد به سرعت وجود دارد. جاوااسکریپت دارای آرایه. یک راه دیگر برای حفظ داده ها در اطراف، بسیار مفید است. خیلی خوب و آسان گرامر. شما با استفاده از براکت برای دسترسی به همه چیز و همه چیز را با هم نگه دارید. هیچ چیز بیش از حد پیچیده است. نکته جالب در مورد جاوا اسکریپت و زبان های اسکریپت نویسی به طور کلی این است که شما لازم نیست که در مورد اندازه آرایه نگران باشید. شما فقط می توانید استفاده کنید array.length و پیگیری آن، و نیز آرایه می تواند رشد کند و یا کوچک کردن که شما باید آن را به. بنابراین شما حتی نمی باید در مورد هر نوع نگرانی، آه، نه، نیاز به تخصیص چیز بیشتر، و یا چیزی شبیه به آن. نکته جالب این است که جاوا اسکریپت چیزی به نام اشیاء. این یک زبان شی گرا است، بنابراین آنچه در آن است، در اصل، راه را برای شما به داده های گروه با هم، تا حدودی شبیه به یک ساختار، اما شما می توانید آن را مانند یک ساختار و یا در نحو آرایه انجمنی دسترسی پیدا کنید. خیلی ساده است و شما می توانید با انجام این کار داده های گروه با هم اگر شما یک دسته از داده هایی را که مربوط. آنجا که آن را همه چیز شما نیاز به توصیف یک ماشین، شما لازم نیست به آن را در یک دسته از مکان های مختلف. شما فقط می توانید آن را به چوب به 1 شی در جاوا اسکریپت. همانطور که شما احتمالا می دانید، تکرار یکی از آن کارهای خسته کننده است. شما فقط آن را انجام دهید را دوباره و دوباره. شما نیاز به صحبت کردن هر شی در ماشین، یا شما باید از طریق هر مورد به در یک لیست و یا چیزی شبیه به آن. بنابراین جاوا اسکریپت است، شبیه به PHP، نحو حلقه foreach. در این مورد، آن را در حلقه. شما می خواهید به استفاده از این فقط بر روی اشیاء. برخی از مشکلاتی که رخ می دهد اگر شما این استفاده در آرایه وجود دارد. به طور کلی یکی از آن چیزهایی است، هر چند که بسیار مفید است، دلیل این که شما از بین بردن بسیاری از سربار دلیل این که شما لازم نیست به جلو و همه چیز را در جسم خود را توسط خودتان. شما لازم نیست به خاطر داشته باشید تمام نام های کلیدی است. شما فقط نوع آنها را در این نحو. در این، با، برای، شما فقط می خواهم به یاد داشته باشید که شما در حال گرفتن به عقب تمام کلید ها، در یک راه بسیار شبیه به هش جدول. اگر شما از آن به یاد داشته باشید، زمانی که شما را در یک رشته قرار داده و شما می توانید چیزی را دریافت کنید که یک مقدار وجود داشته باشد. چه شما می توانید با انجام این کار شما می توانید می گویند، همه حق است، من در یک ماشین قرار داده، و من آن را به نام فراری. بنابراین شما می توانید در رشته فراری بعدا دوباره قرار داده است، و شما می توانید از دریافت کنید. و شما می توانید انجام دهید که در یک حلقه، با در حلقه. پس فقط بیشتر در مورد اشیاء. نکته های کلیدی از این شما نیاز به یاد داشته باشید است که شما می توانید ساختار شی مانند نحو هر زمان که شما با این می خواهید استفاده کنید، مگر اینکه چیزی است خود را به عنوان یک رشته استفاده از یک نام متغیر معتبر نیست. بنابراین اگر شما در آن وجود دارد نگاه کنید، ما باید کلید با فاصله است. خوب، اگر شما برای قرار دادن object.key، فضا، با، فضا، فضای، که فقط معنی نیست نحوی. بنابراین شما فقط می توانید که با این نوع نحو پایه انجام دهد. همچنین، جاوا اسکریپت بسیار دامنه عاقلانه به PHP است. شما 2 راه های مقابله با دامنه. شما می توانید ور در مقابل یک متغیر ندارد، و این فقط به معنی این جهانی است. شما می توانید آن را از هر نقطه را ببینید. حتی اگر شما برای قرار دادن این در صورتی که یک بیانیه، هر جای دیگر در کد خود را پس از آن نقطه شما می توانید از متغیر ها را ببینید. یکی دیگر از چیزی، هر چند، با ور، آن را محدود به هر تابع شما هنوز وارد کنید اگر شما در یک تابع نیست، خوب، آن جهانی است. اما اگر شما در یک تابع است آن را تنها در آن تابع قابل مشاهده است. من یک مثال را نداشته باشند، اما، آره. این یکی از کارهایی است که در آن شما می توانید مدیریت چه متغیر می خواهید به جهانی، چه متغیر می خواهید به محلی است، اما شما باید مراقب باشید در مورد این، چرا که شما به نوع کنترل دانه ریز شما در C انجام ندارد، که اگر چیزی است که در یک حلقه اعلام کرد، آن را به در که بماند برای حلقه. چیزی که ما در واقع در مورد استفاده از جاوا اسکریپت برای مراقبت از دستکاری صفحات وب، درست است؟ منظورم این است که به همین دلیل است که ما در حال انجام این کار. برای انجام این کار، ما از چیزی به نام DOM. مدل شیء سند. در واقع، آنچه در آن می کند این است که طول می کشد تمام HTML شما و مدل آن را به یک دسته از اشیاء که در داخل هر یک از دیگر تو در تو. شما شروع با چیزی شبیه به این. شما، در سمت راست برای من، یک دسته از کد وجود دارد که نوعی - شما فکر می کنم که می شود، بسیار سخت به دستکاری، به خاطر شما می شود از طریق یک دسته از متن تجزیه و نیاز به قطعه از هم جدا چیز. و اگر آن را به درستی فرمت شده؟ چیز بد اتفاق می افتد. بنابراین جاوا اسکریپت طول می کشد مراقبت از این برای شما، و شما یک ساختار داده ها زیبا، مانند یک در سمت چپ من، که در آن شما فقط یک سند داشته باشد، و در داخل است که شما چیزی به نام HTML، و در داخل که شما یک سر و بدن، و در داخل که سر شما باید یک عنوان، و غیره، و غیره، و غیره. این ساده دستکاری یک صفحه وب به طوری که آن را فقط، آه، من فقط می خواهم به بحث به این مورد. مرتب سازی بر یک راه بسیار مشابه شما می توانید به یکی دیگر از جسم شما به خودتان ساخته شده است صحبت کنید. من می خواهم گفت، همه DOM در شیء سند است. در هر دو صورت آن را فقط به یک محل و سپس شما می توانید در آن برای پیدا کردن چیزهایی، و شما می توانید آن را انجام دهد - این سبک قدیمی از انجام آن، تا وجود دارد، که شما document.getElementById، و پس از آن به نام، و همانطور که شما احتمالا می توانم بگویم، این می شود بسیار سنگین بعد از مدتی. بنابراین شما احتمالا نمی خواهید به انجام این کار. به همین دلیل ما چیزی که بعد از ما در حال رفتن به بحث در مورد بعد از این. نکته کلیدی در اینجا این است که، همه حق است، شما باید تمام این عناصر، درست است؟ پس شاید من می توانید رنگ چیزی که بار صفحه را تغییر دهید. پس چه؟ اگر کاربر من چیزی کلیک؟ من می خواهم آن را به انجام کاری جالب زمانی که آنها چیزی را کلیک کنید. به همین دلیل ما باید وقایع. شما می توانید، در واقع، پیدا کردن هر عنصر در DOM خود را، و پس از آن می گویند، هی. هنگامی که این بارهای یا کسی که آن کلیک، و یا وقتی که موس روی آن، کاری با آن است. و چه چیزی شما را داشته باشد، شما باید توابع است که این کار را برای شما. این توابع گرداننده رویداد می باشد. چه سازند - این فقط یک راه فانتزی گفتن است، این تابع فقط زمانی اعدام این رویداد اتفاق می افتد. پس از آن دسته صورتی که رخ می دهد. این است که چگونه شما می توانید روی سطح پخش کردن یک event handler. من برخی را فشار دهید، و زمانی که شما آن را کلیک کنید، آن را منفجر. پس بر روی دکمه کلیک کنید. این یکی از راه های نزدیک شدن به آن است، درست است؟ شما باید یک تگ دکمه استفاده کنید و در کلیک شما یک رشته ای که می گوید، آه، به هر حال، من این چیزی که انفجار برای من. در غیر این صورت، آن را فقط مانند یک دکمه به طور منظم شما فقط ساخته شده است. شما همچنین می توانید این کار دیگر، گرفتن عنصر DOM، اما ما را نجات دهد که بعد از ما در مورد جی کوئری صحبت کنید. جی کوئری: این یک کتابخانه است که متقابل مرورگر است. شما می توانید آن را در تقریبا هر چیزی استفاده کنید. و آن را فقط به شما می دهد بسیاری از ابزار برای کار با. از آنجا که جاوا اسکریپت، در حالی که قدرتمند، از تمام ابزار شما نیاز ندارد از جعبه یک برنامه وب را واقعا مقابله با شما ممکن است بخواهید برای انجام این کار. بنابراین آن را ساده بسیاری از مسائل را، به شما می دهد بسیاری از توابع از جعبه است که شما به طور معمول باید به خودتان ارسال، بارها و بارها و بارها. و فقط باعث می شود همه چیز خیلی ساده است. شما همچنین انتخاب، که به شما اجازه گرفتن از تمام کسانی که عناصر از DOM شما را به سادگی، به جای داشتن برای استفاده از این توابع بسیار طولانی است. بیشتر در این انتخاب. شما باید، وجود دارد شما، اجازه دهید بگویم من می خواهم به یک عنصر با ID "سنگ است." خوب، در jQuery، آن را فقط به دلار و پس از آن یک رشته است که یک پوند، و پس از آن "سنگ است." این بسیار ساده است و خیلی سریع تر از روش های سنتی جاوا اسکریپت را از مقابله با این مشکل است. و شما باید چیزهای مشابه برای کلاس ها و انواع عناصر. jQuery است - یکی از ویژگی های جالب این است که شما به نوعی می تواند فشرده سازی پایین نمایش داده شد خود را در DOM خود را بسیار بسیار سریع می باشد. در حال حاضر ما بازگشت به حمل رویداد هستید، و این است که چگونه شما می توانید یک رویداد در jQuery را اداره کند. بنابراین آنچه که ما قصد داریم در اینجا این است که ما در حال گفت، همه حق است. من یک برچسب اسکریپت، درست است؟ بنابراین من این خطی جاوا اسکریپت. چه ما می خواهیم انجام دهیم این است که ما در حال رفتن به می گویند، همه حق است. هنگامی که سند آماده، که به معنی سند پر شده است، می باشد ما می رویم به در به آن تابع، و ما در حال رفتن به می گویند، همه حق است، این تابع در واقع کاری را انجام دیگر. این اساسا گفت، همه حق است، من عنصر با ID دریافت "myid." و سپس این را کنترل تابعی که اجرا زمانی که شما آن را کلیک کنید. در واقع چه می کند این است، آن را می گوید، همه حق است. صفحه لود شده است، بنابراین من قصد دارم به در، پیدا کردن این عنصر، در این برنامه کنترل رویدادها را، و آن را اساسا مجموعه تا صفحه شما برای شما. و این است که چگونه می خواهید در مورد دست زدن به رویداد فکر می کنم. شما فقط می خواهم در مورد فکر می کنم، همه حق است، زمانی که چیزی رخ می دهد، چه من می خواهم به اتفاق می افتد؟ شما نمی خواهید در مورد فکر می کنم، باشه، من باید مطمئن شوید که مذاکرات این چیز به این چیز، این چیز، اه، اه، اه، چرا که شما فقط می خواهم به صحبت چیزی که از نظر حوادث. هنگامی که این اتفاق می افتد، این اتفاق می افتد. هنگامی که این اتفاق می افتد، که اتفاق می افتد. و اگر چیز باعث چیزهای دیگر، فوق العاده است. اما شما نمی خواهید به انجام کد پیچیده که در آن شما در حال راه اندازی کارهای مختلف در همان زمان، چون شما فقط به خودتان سردرد. خوب. در حال حاضر ما می توانید صفحه ما که مسئولیت رسیدگی به حوادث، اما اجازه دهید بگویم کاربر من کلیک یک دکمه. اگر می خواهید برای ارسال این درخواست به سرور، اما من نمی خواهم به بارگذاری مجدد صفحه، به دلیل نیاز به بارگذاری مجدد صفحه جدید در هر زمان تنها می شود نوع از خسته کننده، و به همین دلیل نیاز دارم به جلو و پایین هدر دوباره، و بالا و پایین صفحه دوباره، و تمام عناصر دوباره صفحه فقط به روز کردن تبریک و یا زمان؟ به همین دلیل ما باید چیزی شبیه به آژاکس. آنچه ما در اینجا می توانید با آژاکس انجام شده است می توان گفت، همه حق است، من می خواهم به ارسال برخی از داده ها به سرور، و من می خواهم برای دریافت پاسخ به طوری که من می تواند صفحه من به روز رسانی، و یا شاید فقط به انجام برخی از محاسبات الگوریتمی است که لزوما نشان نمی دهد هر چیزی را به کاربر. چه شما نیاز به انجام این کار؟ خوب، شما نیاز به یک URL شما نیاز به صحبت کردن. سرور شما می تواند نه تنها به طرزی جادویی در از هیچ جا گوش دهید. شما نیاز به یک محل خاص شما از ارسال این داده ها به. و شما همچنین برخی از داده ها نیاز به ارسال، و یا شاید آن را به یک پرس و جو dataless است. شما فقط می خواهم به پینگ به سرور و می گویند، هی، من زنده، و یا چیزی شبیه به آن هستم. و پس از آن شما می خواهید یک تابع است که اساسا با موفقیت انجام می دهد. بیایید می گویند شما برخی از اطلاعات را از سرور خود، و شما می خواهید به تغییر عنوان کاربر در صفحه خود. بنابراین شما می توانید اطلاعات را به عقب بر گردیم، و شما می توانید به صفحه فشار که. چه اتفاقی می افتد، زمانی که صفحه آماده است، شما در تابع روی ایجاد کلیک کنید این دکمه به نام greeter. این چیست پس از آن انجام می دهد، وقتی که دکمه تحت فشار قرار دادند، شما صحبت greetings.php، شما را به یک درخواست POST، و به شما می گویند، هی، من چیزی را از صفحه خود را دریافت کنید. ما واقعا نیاز به توصیف آن، اما greetings.php، اجازه دهید فقط می گویند، می گرداند "سلام جهان است." بنابراین ما به عقب بر گردیم به این "سلام جهان"، و در موفقیت این، فرض کنید هیچ چیزی را اشتباه می رود، پس ما فقط به این محل مورد نظر بروید که ما مشخص شده و ما فقط چوب پاسخ در آن وجود دارد. و این یک راه بسیار ساده راه اندازی پرس و جو آژاکس است. خیلی به سرعت، راب نوع از این اشاره شد در حال حاضر، همه چیز می تواند به اشتباه، همه چیز بد اتفاق می افتد، بنابراین شما می خواهید خود را آشنا با این کد پاسخ HTTP. چه این ها فقط هستند، مانند، 200، همه چیز خوب پیش رفت. چیز دیگری، همه چیز بد اتفاق افتاده است. به طور کلی چیزی که شما می خواهید به خاطر داشته باشید. اما آن را به خوبی می دانم که همه از این. و در نهایت، زمانی که ما از طریق همه که رفته، ما نیاز به بحث به سرعت در مورد طراحی، و پس از آن ما می توانید اجازه دهید همه شما را ترک کنند. طراحی. چیزهایی که شما می خواهید به خاطر داشته باشید. از خود بپرسید این پرسش: چه کسی خواهید بود با استفاده از این؟ چه خواهد شد که استفاده از آن برای؟ چه کاربران من در مورد مراقبت؟ چه چیزی نیست که آنها در مورد مراقبت؟ شما فقط نمی خواهید را به برنامه و اجازه دهید آن را فقط به رشد و تبدیل این غول، همه گیر چیزی که شما حتی نمی تواند به پایان برساند. شما می خواهید به اهداف گسسته و برنامه ها و چیزهایی که می خواهید به آدرس. آن را گردیده. همه از این می گوید، اساسا، آن را آسان برای کاربر به استفاده از آن، آن را قطره های غول پیکر از متن مثل این اسلاید را ندارد، در واقع. شما فقط می خواهید آن را به چیزی که آن را بسیار آسان برای کسی به در و آنچه می خواهند انجام دهند. شما نمی خواهید آنها را به به حرکت در 5 صفحه برای رسیدن به عملکرد نخست خود را از سایت شما. اگر گوگل 5 صفحه قبل به حال شما حتی می تواند چیزی را جستجو کنید، هیچ کس از آن استفاده کنید. و در آخر، نمونه مقاله، گروه تمرکز می کنند. دارای طراحی خوب و شیوه های تست. فقط به خاطر شما فکر می کنم آن را برای شما کار می کند، به این معنا نیست هر کس دیگری فکر می کند کار می کند. اما آره، که این. [CS50.TV]