חנה בלומברג: שלום לכולם. אנחנו הולכים להתחיל רק כמה דקות מוקדם מאז יש לנו הרבה חומר לעבור אותו. אני חנה. אני TF. מריה הולכת להיות הצטרפות שלנו רק כמה דקות. היא מלמדת את הסעיף נכון לפני. אני מלמד זכות סעיף לאחר, כך אנחנו הולכים כדי לשמור אותו לשעה וחצי. אז כפי שאתם תראו עד כאן, יש לנו די כמה נושאים שאנחנו צריכים לעבור, אז אנחנו הולכים קצת מהר. אבל אם בכל נקודה שאנחנו אומרים משהו מהר מדי או שאתה לא מבין, אל תהסס להפסיק עם שאלות. אנחנו רוצים להיות מסוגלים לעשות את זה לסקור פגישה כשימושית לכולכם ככל האפשר. מדהים. אז בואו לקפוץ ישר בעם כמה נושאים שאנחנו באמת מאוד, מאוד מכוסה בקצרה ל חידון 0 במפגש סקירת חידון 0. אז החל ברשימות מקושרות. אז רק לוודא שיש לך כמה ידע בסיסי על רשימות מקושרות והם נוחים עושים חלק מהפעולות הבסיסיות. אז רק כדי לסקור, מקושר רשימות טובות יותר ממערכים כי הם יכולים לגדול באופן דינמי. אז יש לנו יתרון עצום ש. ראינו אותם בשימוש בשולחנות חשיש כש לא יודע בדיוק כמה דברים שאנחנו הולכים לרוצים להכניס לתוך מבנה הנתונים שלנו. למרבה הצער, יש לנו חתיכות של הרשימה המקושרת בכל רחבי זיכרון, כדי שלא יהיה בהכרח מסוגל לעשות גישה מתמדת זמן לכל אלמנט ברשימה המקושרת. כדי למצוא אלמנט מסוים, אנחנו צריך לחזר כל דרך מההתחלה. אז יש לזכור כי רוב פעולות בסיסיות הן אומגה של 1. אז להכניס רק הולך לקחת 1. מחק הולך לקחת n מאז ש צריך ללכת למצוא אותו מהרשימה. וחיפוש יכול לקחת, במקרה הגרוע ביותר, n. אנחנו לא יכולים לעשות משהו כמו חיפוש בינארי ברשימה מקושרת מאחר שאנחנו לא יכולים פשוט באופן אקראי לקפוץ לאמצע. מגניב. מדהים. קצת ערימות. זה, שוב, עלה על חידון 0, כך ש צריך להיות סופר נוח עם זה. אבל לערימות, אנו מבקשים מכם לזכור ערימה של מגשים. וזה הולך להיות ראשון ב, יימשך החוצה. אז אנחנו מחסנית דברים בערימה, ולאחר מכן אם אנחנו מנסים לקחת משהו off-- שאנו מכנים צצים מ stack-- אנחנו באים את החלק העליון. ואם אנחנו רוצים לשים משהו בערימה, אנחנו קוראים לזה דוחף. אז זה תמיד הולך להיות גדל מלמטה כמו ערימה של מגשים. מדהים. אנחנו כבר מיושמות ערימות ראו עם שני רשימות ומערכים קשורים. אם אתה מיישם עם מערכים, אתה רוצה לוודא כדי לעקוב אחר שני בגודל וביכולת. אז הגודל הולך להיות הנוכחי מספר דברים בערימה שלך, אילו יכולת הוא המספר הכולל דברים שאתה יכול לאחסן בערימה שלך. מגניב. מאוד דומה, יש לנו תורים. במקרה זה, במקום לחשוב על ערימה של מגשים, לחשוב על קו. זה הולך להיות ראשון ב, ראשון החוצה. אז אם אתה עומדים בתור ל משהו בחנות, אנו מקווים כי האדם הראשון ב הקו הולך להיות עזר ראשון. במקום לומר דחיפה ו פופ כמו שאנחנו עושים לערימה, רק אנחנו אומרים Enqueue וdequeue. ושוב, אם אתה יישום זה עם מערך, אנחנו צריכים לשמור על מסלול לא רק את הגודל ויכולת, אלא גם את הראש, ש הולך להיות מול התור שלנו. מגניב. כל שאלות על כל זה? מדהים. נע ימינה לאורך. אישור, שולחנות חשיש. כאן זה מתחיל להגיע ממש מעניין. אז שולחן חשיש יישום אחד של מערך אסוציאטיבי. אז בעצם מה שקרה הוא שיש לנו את כל הקלט הזה, ואנחנו נותנים לזה חשיש פונקציה שאומרת, אישור, זה מקום שבו ב שולחן חשיש הוא שייך. אז פונקצית החשיש הפשוטה שראינו הוא רק אומר, אישור, נניח שאנו רוצים לשים מחרוזות בטבלת החשיש שלנו. ובאמת רעיון פשוט יכול להיות לומר, בסדר, בואו פשוט למיין לפי האות ראשונה של המילה. אז אתם יכולים לראות כאן, אנחנו לוקחים את הבננה, אנחנו שמים את זה דרך פונקצית חשיש, וזה אומר, היי, ש צריך ללכת במדד 1. אז בעצם אנחנו יכולים לחשוב על חשיש שולחן כמו חבורה של דליים שונים. וכל אחד מדליים אלה הולך להחזיק את הראש של רשימה מקושרת. ושברשימה המקושרת שבו אנחנו יכולים למעשה לשים פיסות מידע שונות. אז צלילה קצת יותר לפונקצית חשיש, הנה הדוגמא אני רק תיארתי שבו אנחנו פשוט אומרים, אישור, לקחת את האות הראשונה של המילה ואנחנו הולך כדי למיין אותו לדליים. אז ככל הנראה, יהיו 26 דליים, אחד לכל אות של אלף בית. למה זה לא פונקצית חשיש גדולה? מה עושה שאינם אידיאלי זה? כֵּן. קהל: אתה הולך יש התנגשויות. חנה בלומברג: כן, בדיוק. אתה הולך להיות התנגשויות. אז זה דבר אחד. ונדבר על איך אנחנו יכולים לתקן התנגשויות רק שני. בעיה נוספת עם זה פונקצית חשיש בפרט הוא ששונה שלנו דליים הולכים להיות גדלים של די שונים באופן דרסטי. אנחנו יודעים שיש הרבה יותר מילות שמתחילות במ X, כך אנחנו הולכים להיות מאוד דליים לא מאוזנים בטבלת החשיש שלנו. מגניב. אז כן, בואו נחזור ל הנקודה של התנגשויות. מה עושה אם יש התנגשות? יש לנו כמה אפשרויות שונות. אז אחת, כך מניח שאנחנו מנסים לשים פירות יער לשולחן החשיש שלנו. ואנו רואים, אה, אנחנו רוצים לשים את זה במדד 1, אבל בננה כבר גרה שם. מה שאנחנו הולכים לעשות? יש לנו שתי אפשרויות עיקריות. מספר אחד הוא שאנחנו יכולים לומר, בסדר, אין מקום במדד 1, אבל בואו פשוט להמשיך לחפש דרך עד שנוכל למצוא עוד מקום פתוח. אז אנחנו אומרים, בסדר, בואו לשים אותו במקום 3. זה אפשרות אחת. זה נקרא ליניארי חיטוט. ואפשרות שנייה אומרת, בסדר, טוב, בואו פשוט לעשות כל אחד מאלה דליים להיות ראשי הרשימות מקושרות. וזה בסדר אם יש עוד מדבר אחד בדלי. אנחנו רק הולכים לצרף אותו על החזית. אז הנה אתה יכול לראות, אישור, כאשר אנו מוכנסים ברי, אנחנו פשוט לקח בננה, סוג של דחף אותו מעל קצת וזרקתי את יער שם. וזה גם בסדר גמור. זה נקרא שרשור נפרד. אתה יכול לחשוב על זה כסוג של כמו מערך של ראשי רשימות מקושרות. כל שאלות על חשיש שולחנות, פונקציות חשיש? מדהים. עצים ומנסה. אז עץ הוא כל סוג של מבנה הנתונים שבו יש סוג מסוים של היררכיה או סוג כלשהו של דירוג לאובייקטים השונים שלך. וזה יהפוך סופר ברור, כאשר אנו רואים דוגמא. וראינו ניסיונות, יחד עם שולחנות חשיש, בpset5-- אשר, שוב, משחק לגמרי הוגן לזה quiz-- נתונים נוספים מבנים שאנחנו יכולים לאחסן דברים שונים. במקרה של מילון, אנחנו מאוחסנים חבורה של מילות. אז בואו נסתכל על כמה עצים. אז זה הוא דוגמא לעץ. יש לו סוג של מבנה, שמבנה היררכי, שבו אתה יכול לראות את זה צומת 1 זה בראש יש סוג של דרגה מעל 2 ו -3, שמעל 4, 5, 6 ו -7 והם, שהם מעל 8 ו -9. כך שכל מה שאנחנו מתכוונים ב עץ, כך שאתה יכול פשוט סוג תמונה זו בראש שלך. עכשיו, יש לנו כמה עצים מיוחדים יותר. אז דוגמא אחת הוא עץ בינארי. ועץ בינארי הוא, שוב, רק הולך להיות מבנה נתונים עם איזה היררכיה, אבל כל אחד מהצמתים יכול להיות לכל היותר שני ילדים. זה המקום שבי המילה בינארי מגיע מ. אז זה הוא דוגמא לעץ בינארי. אז זה קטגוריה קטנה של עצים. עכשיו בואו לקבל אפילו יותר ספציפי ו לדבר על חיפוש בינארי בינארי trees-- עצים, ולא. אז הנה הרעיון הוא לא רק עושה יש כל צומת ברוב שני ילדים, אבל כל הילדים ל השמאל הולך להיות קטן יותר וכל הילדים ל נכון הולכים להיות גדול יותר. אז שם לב רק שלנו עץ בינארי, יש אין קשר בין המספרים. אבל בחיפוש בינארי שלנו עץ, שאנו רואים, בסדר, הנה 44. וכל מספר בצד השמאל של 44 הוא קטן יותר וכל מה שלימין הוא גדול יותר. ושמחזיק בכל רמה של העץ. אז הנה, זה הוא קטן יותר מאשר 22 וזה הוא גדול יותר מאשר 22. וזה עץ חיפוש בינארי. למה אנחנו חושבים שזה נקרא עץ חיפוש בינארי? מה אלגוריתם עושה את זה מזכיר לך? קהל: חיפוש בינארי. חנה בלומברג: חיפוש בינארי. כי אם אתה מחפש מספר מסוים בעץ הזה, בכל נקודה, אתה יכול פשוט לדפוק מחצית מהעץ, וזה נהדר. וכך זה הולך לתת לנו משהו שנראה הרבה כמו חיפוש בינארי. יש שאלות? בסדר, מגניב. בסדר, מנסה. האהוב על כולם. אז זה הדוגמא ש ראינו חבורה בכיתה. ושוב, זה רק עוד דרך שאנחנו יכולים לאחסן נתונים. במקרה של מילון, שוב, זה רק הולך להיות מחרוזות. אז בואו לראות מה זה בעצם נראה כמו ברמה מעט נמוכה יותר. אז בואו נסתכל בצומת אחד באיירי. ואנו רואים, בסדר, יש הולכים להיות בוליאנית וצומת, מצביע לצומת. ואנחנו רואים ש בוליאנית נקראת is_word. אז בעצם, זה הולך מתאים למשולשים הקטנים האלה ש אומר, אם אתה כבר הגעת לכאן, אתה כבר נמצא מילה שלמה. אנו יודעים כי "טיורינג" על כאן היא מילה שלמה, אילו רק T-U-R הוא לא מילה כי אנחנו לא רואים שדלתא קטנה. ושדלתא קטנה, שוב, מתאים לis_word זה, is_word וליאנית זה. ואז יש לנו מערך של ילדים. אז בכל רמה, אתה יש לי צומת מסוימת, וכי נקודות צומת ל מערך של כל אלף-בית. אז אתה יכול לראות, שוב, בpicture-- זה אני הולך לשמור קופץ בחזרה ו forth-- שמערך שבראש יש חבורה של שונה בלוטות יורדים ממנו. יש לו 26, או 27, אם אתה רוצה לכלול אופי נוסף. וזה נותן לנו דרך לאחסון נתונים שלנו באופן שניתן הביט ב שאתה יכול לחפש את הסופר מהיר. מהו זמן בדיקה לאיירי? קהל: [לא ברור]. חנה בלומברג: כן. בתאוריה, זה זמן קבוע. זה רק הולך להיות בגודל של המילה שאתה רוצה להסתכל למעלה. גם אם נוסיף מיליארדים עוד מילות לאיירי, זה לא הולך לקחת אותנו עוד לקבוע אם מילה מסוימת היא באיירי. אז זה ממש נחמד. קהל: האם אתה פשוט לאתחל מערך זה? פספסת נקודה או שתיים. אתה יכול רק לדבר על זה לרגע? חנה בלומברג: בטח, בהחלט. שאלה טובה. השאלה הייתה, אנחנו יש מערך זה הולך להיות כוכב צומת כ בניגוד לסתם צומת, נכון? מגניב. אז הנה מה שאנחנו אומרים הוא המערך שלנו הוא רק הולך להיות מצביעים למערכים אחרים. אז זה essentially-- זה סוג של מרגיש כמו רשימה מקושרת בדרך זו שבו כל אחד מילדים אלה רק להצביע על הצומת הבאה. והאופן שבו אנחנו למעשה לקבוע, היי, אישור, אנחנו כבר iterated דרך כל מילה, היא מילה זו במילון, אנחנו פשוט לבדוק is_word זה. שאלה גדולה. כֵּן. קהל: אישור. אז מה הייתה הריצה לאיירי? חנה בלומברג: בטח. אז זמן הריצה לאיירי ל בדיקה הולכת להיות זמן קבוע. אז זה רק הולך להיות מספר האותיות במילה. זה לא תלוי ב גודל של המילון או הגודל של מבנה הנתונים. אז הנה דוגמא פשוטה מעט. במקרה זה, אתה יכול לראות ש מילת העטלף הוא במילון ויש לך זום, אבל אתה אין לי משהו כמו גן חיות. איך הייתם אנחנו עושים בגן חיות? איך להוסיף גן חיות לנו מילון, לאיירי? כֵּן. קהל: הפוך is_word נכון ל[ לא ברור]. חנה בלומברג: טוב. אז היינו אומר Z-O-O, ואז היינו רוצה לבדוק את תיבה שכן. גדול. בואו להשוות לזמן קצר מאוד מנסה לעומת שולחנות חשיש. מנסה באמת גדולים כי, כפי שאמרנו, הם מספקים בדיקה קבוע-זמן. אבל החסרון הענק הוא שהם humongous. אתה יכול לקבל את התחושה, אפילו מלהסתכל על זה, כי זה הולך לקחת כמות הזיכרון עצומה. אז הם הולכים להיות הרבה יותר גדול יותר משולחנות חשיש, אבל הם הולכים לתת לי שלנו פעמים בדיקה הרבה יותר מהר. אז זה סוג שלך איזון, מה אכפת לך, בין אם זה במהירות או זיכרון. כל שאלות על כל אחד ש, כל מבני נתונים C. יָפֶה. אוקיי. אנחנו הולכים לעבור לקטנים קצת התפתחות אינטרנט עם מריה. MARIA ZLATKOVA: יפה. אוקיי. חנה בלומברג: אתה יכול להשתמש במחשב הנייד שלי. MARIA ZLATKOVA: נחמד. בסדר מגניב. ככל שאנו מתקדמים עכשיו לאינטרנט פיתוח, שדברנו קצת אודות הרשאות שינוי של קבצים וספריות כדי שיוכלו להיות נגיש למשתמשים אחרים, לעולם, וכדי שנוכל לראות איך בעצם אנחנו יכולים להעביר אותם כאשר אנו מפתחים דברים כמו אתרים שאנחנו כבר בעיקר עושים. אז ראינו את פקודת chmod, שהוא מצב שינוי, בעצם. זה פקודת לינוקס ו הוא משנה את הרשאות גישה של אובייקטים במערכת קבצים. ואובייקט מערכת קבצים הוא רק ספרייה, קובץ, כל דבר שאתה יכול לשנות את ההרשאות של. אז כדי לראות את הרשאות קובץ, אנחנו הקלד את הפקודה ls, רשימה, -l. וכאשר אנו מקלידים את זה, אנחנו בדרך כלל לראות כמה הרשאות שנראה כמו סוג של זה מול שם ספרייה. אז ד מתייחס לספרייה. ואז יש לנו שלוש שלשות שבעצם מתייחס להרשאות של כל אחד למשתמש, קבוצה, או העולם. הסוגים של הרשאות שאנחנו יכולים יש שלוש הקבוצות של אנשים האלה הם או r לקריאה, w ל לכתוב, וx לביצוע. ואנחנו יכולים להיות אלה ל הקבוצה והעולם, כמו גם. הדבר מסובך הוא שלפעמים כאשר אנו הקלד את פקודת chmod, היינו להקליד כמה מספר שהיה מורכב משלושה חלקים. כדי שנוכל לעשות כמו 777 ושבעצם התייחס לערך המוסף של כל אחד משלשות אלה כי r היה מתייחס ל4, היית w עיין 2, ו- X היה מתייחס ל1, כך כאשר הוסיף את, כל אחד מהמספרים היה יורד למספר מצטבר לערך מצטבר בין 0 ל 7. אז גם אנחנו יכולים להיות 0 ללא הרשאות בכל. ושבעצם נותנים לנו ההרשאות לשני המשתמשים, הקבוצה, או העולם. כל שאלות על זה כל כך הרבה? קהל: אמר קרא היה 4? MARIA ZLATKOVA: כן. קהל: [לא ברור]. חנה בלומברג: כן. קהל: ואז על ידי הוספה כל אלה אחרים מצביעים על המספר שלך. MARIA ZLATKOVA: כן. כֵּן. אלו הן שאלות גדולות. יָפֶה. לאחר מכן, קפצנו ל- HTML ו קצת יותר על פיתוח אינטרנט. אז HTML רק אומר שפת סימני עריכה לתמליל - על. וזה הסימון שפה שהיא סטנדרטי כי זה משמש ליצירת דפי אינטרנט. זה נקרא שפת סימון כי זה לא הידור למעשה. זה לא אומר איך צריך קצת קוד יבוצע או משהו כזה. זה פשוט משרטט ו מתאר כיצד אינטרנט דף יש להגדיר עם כל אחד ממרכיביה ואיך צריכים שהם נראים למשתמש. חלק מתגי HTML ש ניגש הם הבא. כל מסמכי HTML שלנו התחיל עם html DOCTYPE. אז תמיד יש לנו את תג html. יש לנו ראש וגוף. וזה חשוב כי יש HTML סוג זה של מבנה מקונן כי זה מאוד ברור. ואז זה הופך להיות מאוד ברור כאשר אנו צריך לפתוח ולמעשה קרובים תגים. ואנחנו תמיד צריכים לסגור תגים שפתחנו. וכאן יש לנו כמה הסוגים דברים קדימה כי אנחנו רוצים להיות. אז יש לנו, למשל, הכותרת של CS50. ואז אנחנו באמת יכול לקשר גיליון סגנון המגדיר את האופן בו אנו סגנון אתר האינטרנט שלנו. זה CSS. אנחנו הולכים לעבור על זה ב הזוג הבא של שקופיות, כמו גם. בתוך הגוף, אנו קובעים כמה שיעורים ומזהי. וכתזכורת, שוב, מזהים ייחודיים וכיתות ניתן להקצות לפריטים מרובים. וזה רק אומר ש אנו יכולים להשתמש בכיתות ומזהי בתוך structures-- האחר כך, ל למשל, בתוך קבצי CSS או סגנון sheets-- להתייחס לאלמנטים ספציפיים ובעצם אומר שאנחנו רוצים לעצב או לעצב כמה אלמנט בדרך מסוימת כלשהי. ואנו מתייחסים אליהם על ידי תעודות הזהות שלהם ושיעורים. ואנחנו גם יכולים להתייחס ל דברים שונים לפי תגיות, כמו גם, אבל תעודות זהות ושיעורים רק לתת לנו קצת צדדיות ומה במיוחד רוצה להפנות אליו. אז רק דוגמא. , אנחנו יכולים שוב, בתוך קובץ CSS שבו אנחנו רוצה להגדיר כמה style-- כך צבעים, גופנים, ודברים לראות-- כמו שאנחנו יכולים להגדיר את הסגנון לגוף. כך שהייתי מגדיר אותו לכל תג הגוף. אבל אז אנחנו יכולים גם להגדיר סגנון ל#title. ושוב, hashtag מתייחס לנו זיהוי והנקודה מתייחסים לכיתה שלנו. ולאחר מכן ל.info, אנחנו ניתן גם להגדיר כמה תכונות. ושוב, כאשר אנחנו חוזרים, היו לנו שלנו מחלקה בשם מידע וכותרת הזהות שלנו. ואנחנו יכולים לראות שאנו מתייחסים להם על ידי #title ו.info. קהל: האם היית אומר האשטאג [? לאמץ אותי? ?] MARIA ZLATKOVA: מצטער? קהל: האם היית אומר האשטאג [? לאמץ אותי? ?] MARIA ZLATKOVA: סולמית משמעות זהות, כך #title מתייחס לכל מה שאלמנטים יש מספר הזה שנקרא כותרת. ואז הנקודה מתייחסת לכיתה. אז .info מתייחס לאלמנט זה כי יש לו המידע ברמה. כן. קהל: למה אתה להבדיל ביניהם ב- HTML? למה אתה אומר דברים מסוימים הם תעודות ודברים מסוימים הן ברמה? MARIA ZLATKOVA: זהו בדיוק עד אתם-- חנה בלומברג: חזור על השאלה. MARIA ZLATKOVA: אה, סליחה. למה אנחנו להבחין אלמנטים מסוימים כמזהים ואלמנטים אחרים כמו שיעורים? זה רק בגלל שזה באמת לעתים קרובות בחירת עיצוב. זה נותן לך הרבה רבגוניות שב תוכל לומר שאני רוצה פריט הספציפי הזה יש מספר זה בגלל שהם רוצים לעשות הרבה דברים עם זה, ואני רק סגנון רוצה להגדיר סגנון, מסוים או צבע מה לפריט זה. והדרך לעשות את זה הוא רק נותן לו תעודת זהות. ואז אם אני רוצה שאהיה לי כמה פריטים שונים יש ש, במקום הולך והגדרת their-- במקום לעשות זאת על ידי תג כי היית התג להגדיר את התא לכל התג על כל פעם משמש תג ש, אתה יכול להגדיר את מעמד למספר רב של פריטים. ואז פשוט לגשת מעמד זה ואומר אני רוצה לעצב את זה בכיתה בדרך זו. ושוב, בכיתה יכולה להיות פריטים שונים מרובים וזיהוי צריך להיות ייחודי. שאלות גדולה. כל שאלות אחרות? אישור, מדהים. שוב, זה איך בוררים אלה נזכרים בCSS, עם hashtag, עם נקודה, או בלי שום דבר ל הקצאת הסגנון של כמה תג, כמו גוף. וכאן יש לנו בכלל תחביר של איך זה נעשה. לחזור על כמה הטוב ביותר שיטות לHTML ו- CSS, אנחנו צריכים, שוב, סגרו את כל תגי HTML שאנחנו פותחים. ומה שאנחנו המומלצים לעשות לפרויקטי הגמר שלך, כמו גם לCS50 האוצר, הוא להפוך את בטוח שכל ה- HTML שלך מאמת. ואת זה עושה עם Validator W3. ואז מה שעשינו ו מה שאנחנו ממליצים לעשות הוא מפריד בין סגנון, כל כך CSS מהסימון HTML. אז כל דבר שנוגע לאופן ש הדף שלך הולך להיראות חזותי ואיך זה הולך להיות שונה צריך ללכת למסמך CSS. ולאחר מכן הסימון שלך אומר כמה דברים הם ביחס לזה הוא HTML, ושצריך להיכנס פנימה מסמכי ה- HTML שלך. יש שאלות? Mhm. קהל: מה בדיוק קורה עם אימות הדף כאשר אנחנו אימות HTML ש[ לא ברור] נוצר? MARIA ZLATKOVA: אז what-- שאתה חושב. אז מה בדיוק קורה עם אימות דף ולמה אנחנו צריכים לעשות את זה? בעיקרון, אנחנו צריכים לעשות את זה כי הרבה פעמים, הדפדפן שלך, אם אתה לא סוגר תג או משהו כזה, הדפדפן שלך הוא עדיין הולך ל להפוך דף ואולי עדיין עובד, אבל זה התרגול הטוב ביותר לוודא ש ש, שוב, סגר את כל התגים שלך, שכל האלמנטים שלך אופן שבו הם צריכים להיות, ובעצם שזה על ידי מוסכמות שנקבעו מראש. זה, שוב, רק דבר שאתה צריך תלמד לעשות, בניגוד לכך ש קוד מרושל ודברים כאלה. כֵּן. אה סליחה. חשבתי שאתה מרים את היד שלך. קהל: לא, אני היה פשוט [לא ברור]. MARIA ZLATKOVA: אישור. קהל: תודה לך. MARIA ZLATKOVA: כמובן, תודה לך. אז שוב, קורה לאיך מידע מועבר ומודלי תקשורת להעביר מידע. TCP / IP. TCP רק אומר הילוכים פרוטוקול הבקרה וIP מתייחס לפרוטוקול אינטרנט. וזה רק מתייחס ל הנתונים מועבר הדרך. אם יש לנו כמה נתונים ש צריך נמסר לאתם-- כך אתה להגיש בקשה לשרת מסוים. לדוגמא, כאשר אנו מנסה לגשת cs50.net, אנחנו עושים בקשה ל שרת CS50 ו רואה שאנחנו רוצים להגיע זה סוג של מידע. ולאחר מכן מבוססים על פרוטוקול זה כיצד מידע זה מועבר, השרת נותן מידע בחזרה אלינו, הלקוח. ואז אנחנו יכולים להציג המידע לדף ולאחר מכן להשתמש בו. אז העברת Hypertext פרוטוקול הוא רק עוד פרוטוקול או להגדיר של מוסכמות המגדיר כיצד דפדפן האינטרנט לבין שרת האינטרנט צריך לתקשר. ולשים את זה כל יחד, HTTP, שוב, רק מגדיר כיצד היפר זו מוגדר על ידי HTML שאנחנו עובדים אותו, איך זה צריך להיות מועבר אליך ו איך נתונים שיועברו אליך מגיע לך. ולכן, אם אתם זוכרים מכיתה, היו לנו הרבה בקשות והיו לנו הרבה תחביר לבקשות אלה שאנחנו הולך לעבור על עכשיו. אז שוב, כאשר אנו שולחים בקשה לשרת, אנחנו צריכים להגדיר כמה דברים. אז אנחנו צריכים למצוא את הסוג של בקשה שאנחנו הגדרה. ושוב, יש לנו, למשל, מקבל הוא סוג אחד של שיטה שיש לנו בבקשתנו. ולאחר מכן HTTP / 1.1 הוא פשוט פרוטוקול שבו אנו משתמשים כיום. רוב הזמן, זה הולך לפרוטוקול שבו אנו משתמשים. אז אם יש לך שאלה כמו שבחידון שלך. זה מוסכמות שיש לנו עד כה. קו נטוי מתייחס למה סוג דברים שאנחנו מבקשים. לאחר מכן, המארח שלנו הוא, למשל, בזה מקרה, שאנחנו מנסים ללכת ל- google.com. אז זה הערך עבור מארח. זהו סוג של בקשה כי יכול להיות שנשלח. ואז סוג של תגובה שיכול יישלח, שוב, המבוסס על פרוטוקול זה, שוב, HTTP / 1.1. אז זה הגרסה HTTP שוב. 200 אישור הוא רק קוד המצב. והאישור כי הוא פשוט ביטוי המבוסס על קוד מצב ש. סוג התוכן ולאחר מכן מתייחס לסוג כי הוא חזר אליך כי הוא שלדף האינטרנט שאתה מקבל ושהדפדפן שלך יכול לדקלם לאחר מכן. וזה text / html. קהל: מה 1.1 מתכוונים? MARIA ZLATKOVA: זהו בדיוק גרסת ל-- הו, מה 1.1 מתכוונים? זה פשוט הגרסה, HTTP גרסה של פרוטוקול שבו אנו משתמשים. שאלה גדולה. שאלות אחרות? קהל: האם אתה יכול לסכם Content-Type מהיר אמיתי? MARIA ZLATKOVA: אז זה מה השרת. הסוג של information-- מה הוא סוג התוכן היה השאלות. אז זה היה הסוג של מידע שאתה מקבל בחזרה מהשרת, הסוג של נתונים שלאחר מכן הדפדפן יכול להבהיר כי אתה משתמש. קהל: האם זה מה שזה פרוטוקול הוא אומר לך לעשות? MARIA ZLATKOVA: מצטער? קהל: האם זה מה שהפרוטוקול אומר? MARIA ZLATKOVA: protocol-- קהל: --what Content-Type הוא או what-- MARIA ZLATKOVA: מבוסס הפרוטוקול on-- מה הוא הפרוטוקול אומר לך? זה בדיוק כמו ש כי מידע זה נמסר לך מבוסס על איזה סוג של פרוטוקול האם מידע זה היה לי נמסר יחזור אליך. האם זה סוג הגיוני של? חנה בלומברג: אתה יכול לחשוב על פרוטוקול כזה-- אני חושב שפרופ מלאן תאר אותו בכיתה כסוג של כמו זה-- זה כמו המקבילה של לחיצות ידיים אדם. אומר, כמו, היי, אני בקשה ואני יודע איך להתמודד עם HTTP של גרסה 1.1. ולאחר מכן השרת אומר, אה, אוקיי, אני- והן קיים. אני גם יודע איך להתמודד עם HTTP / 1.1. ואני הולך לתת לי לגבות חלק מתכנים. במקרה זה, זה הולך להיות של text / html סוג. אז זה סוג של רק דרך שלהם לcommunicating-- MARIA ZLATKOVA: זה פשוט המאשר כי אתה שני הבאים באותו פרוטוקול וששניהם הלקוח וserver-- כך הדפדפן שלך וserver-- יודע סוג של מה שאתה מדבר ויש לי הכנס להעברת נתונים ב. קהל: אז part-- Content-Type טקסט Content-Type / html-- זה חלק נפרד של אותה ההודעה? או שזה חלק מנניח, 200? האם 200 יגידו להם או שהוא-- MARIA ZLATKOVA: 200 אומר הכל הלך בסדר. ולאחר מכן סוג התוכן הוא סוג של חלק נפרד של אותה ההודעה, ואומר את הדבר שאני חזר זה סוג של text / html. זה רק נותן מידע נוסף. יש משהו להוסיף? אוקיי. כל שאלות אחרות על זה? מדהים. אז כמה סטטוסי HTTP אחרים ש אנחנו יכולים לקבל, בנוסף לאישור 200, אלה שראינו אולי אולי הרבה הם 403 ו -404. אז 404, אם הייתם מנסה גישת משהו שאינו קיימים. כך למשל, בך psets CS50 האוצר, אם אתה היה טיוח quote.html ולא שיש לך קובץ ש, אבל במקום זה אתה היה quote.php, ש יביא 404 לא נמצא כי ייתכן שהקובץ לא קיים. ל403 אסור, ש מתייחס להרשאות. אז אם קובץ כלשהו הוא לא קריא על ידי עולם, אתה עלול לקבל חזרה 403. כמה אחרים שאולי get-- 301, הועבר לצמיתות; 302, נמצאו; 304, השתנו; 400 בקשה, רעה; ושגיאת שרת פנימית אז ל 500 ו503, שירות לא זמין. כֵּן. קהל: האם אנו צפויים ל לשנן את כל הסטטוסים האלה? MARIA ZLATKOVA: שיהיה לי שלהם על גיליון לרמות שלך. [צְחוֹק] קהל: האם אנו צפויים ל יודע מה מעורר כל אחד? MARIA ZLATKOVA: האם הם? חנה בלומברג: לאלה שיש לנו לרוץ into-- כך השאלה was-- MARIA ZLATKOVA: האם הם צפויים יודע מה כל אחד מאלה מעמד קודים עשויים להיות מופעל על ידי? אז לאלה שאנחנו כבר בשימוש ונתקלתי ב, הייתי אומר, כן. אז בהחלט שראינו 200 אישור והרצה אותו בpsets. ראינו 403, 404. לאלה אחרים? חנה בלומברג: הייתי אומר 500 נראה משחק הוגן. MARIA ZLATKOVA: 500, כן. חנה בלומברג: כן. רק יש תחושה כללית של מה גורם להם. וגם רק על ידי אלה שמות, אתה יכול סוג של כמו לעשות ניחוש מושכל כ למה דווקא גרם להם. לדוגמא, להעביר באופן קבוע, כנראה הקובץ הועבר באופן קבוע. קהל: אבל על קודם בחינה, היה כל כך איך אתה מצפה מאתנו לענות על זה? חנה בלומברג: זה היה שווה אפס נקודות. השאלה על 418 על הקומקום מבחינה טכנית מצב HTTP, אבל זה היה שווה אפס נקודות. ברור, אתה לא צפוי לדעתם. קהל: האם זה אמיתי? חנה בלומברג: זה אמיתי אחד, אבל זה לא אומר כלום. זה פשוט בדיחה. אנשי אינטרנט הם מצחיקים. MARIA ZLATKOVA: שאלות גדולה, בחורים. כל שאלות אחרות? קהל: מה היא שגיאת שרת פנימית? MARIA ZLATKOVA: פנימי שגיאת שרת רק משמעות הדבר היא שיש לך כבר הצלחתי לתקשר עם השרת מסיבה כלשהי. אז זה לא בהכרח משהו שיש לעשות עם לקוח או משהו כזה. אני לא מכיר שום דוגמא ספציפית שעברנו על להסביר, אבל כן. חנה בלומברג: בטח. כך למשל, כמו בואו אומר שאתה עובד על mashup ושרת גוגל ירד לכמה סיבה, הפסקת חשמל, נניח. זה יהיה שרת פנימי שגיאה או סוג מסוים של-- אוהב אותך לא היית מקבל תגובה בחזרה. MARIA ZLATKOVA: כן. זה רק כשאתה הצלחתי לתקשר עם השרת מסיבה כלשהי כי שלו הולך למטה או מסיבה אחרת. אז לקפוץ לתוך PHP. PHP, בניגוד ל- HTML, הוא שפת תכנות. והתחלנו להשתמש בו כי זה שימושי מאוד לפיתוח אינטרנט. אנחנו השתמשנו בו לראשונה בCS50 האוצר. וזה בעצם עוזר לנו להביא יחד סימון זו, העיצוב, ואיך בעצם אנו משתמשים במידע להצגת דברים בדף אינטרנט. אז PHP עצמו אומר PHP Hypertext Preprocessor, אז זה backnorym רקורסיבית על ידי עצמו. ואנחנו שמאלי פתיחת תגים עבור PHP חיצים ימינה ועם סימני השאלה ו- PHP. אז כבר ראינו חבורה שלו. עכשיו, אנחנו רק הולכים לעבור על חלק מהדברים הבסיסיים על זה. אז עם PHP, משתנה שמות מתחילים עם סימן דולר. אנחנו לא לציין, שוב, משתנה להקליד יותר. בדיוק כמו שעשינו עם C, אנחנו לא צריכים לעשות את זה. אנחנו יכולים לעשות חבורה של שונה דברים עם משתנים. אנחנו יכולים לשים אותם יחד על ידי שרשורם עם סימון הנקודה, ש לא יכולתי לעשות בC שוב. שוב, יש לנו קצת יותר צדדיות עם PHP במונחים של משתנים. שוב, אין לנו פונקציה העיקרית. ו- PHP מתפרש בניגוד להידור, אז איך בדיוק אנחנו לא להפוך לקבצי C, אנחנו לא צריכים לעשות את זה עבור PHP. אלא, אופן שבו השפה מנוהל על ידי עצמו, זה מתפרש. ולאחר מכן הקליד באופן רופף רק אומר שאנחנו לא צריך לציין משתנה סוג והסוגים משתנים הם הבינו בזמן הריצה. קהל: אבל מה עשיתי לך מתכוון בשרשור נקודה? MARIA ZLATKOVA: בטח. כאשר אנו רוצים לשים דברים together-- כך שאם היו לנו כמה משתנים ש היה הערך של 3 והיה לנו עוד משתנה שהערך של מחרוזת, אנחנו יכולים לשים את המשתנים יחד על ידי הצבת נקודה שבביניהם ושרשורם. או שאנחנו יכולים ליצור שם נקרא משתנה ולשים את זה ביחד על ידי שרשור שתי מחרוזות. אז אם היו לנו מחרוזת בכפולה ציטוטים ואנחנו שמים נקודה אחריו, ואז היו לנו עוד מחרוזת, ש היה ליצור מחרוזת לגמרי. קהל: אישור. MARIA לטביה: האם זה ברור? קהל: כן. MARIA ZLATKOVA: אישור. כֵּן. קהל: כשאתה אומר פירש ולא הידור, אתה מדבר שאתה לא צריך להיות ספציפי כמו כש מדובר PHP לעומת C? MARIA ZLATKOVA: כאשר אנו אומרים פירש בניגוד להידור, מה אנחנו אומר? אז זה אומר שאנחנו לא צריכים קבצי הפעלה להפעיל PHP. זה אומר שהוא פועל כפי שהוא הולך. האם זה הגיוני? קצת יותר. חנה בלומברג: אז אתה יכול לחשוב על מתורגמן כתכנית אחרת שהיא אחראי להולך שורה אחרת שורה באמצעות PHP ושמבצע בפועל אותו, בניגוד לעריכה את כל זה לינארי. זה לא ממש אומר שום דבר על איך ספציפי שאנחנו צריכים להיות. אנחנו עדיין צריכים להיות מדויקים, ולא תשכח פסיק שלך, ולוודא יש לך סימן הדולר שלך, ודברים כאלה. שאלה טובה. MARIA ZLATKOVA: כן. אז שורה אחרת שורה, כ בניגוד לעם קבצי C, אנחנו צריכים לעשות את כל סופיים לפני שאנחנו באמת יכולים להפעיל אותו. זה ההבדל העיקרי. אבל שוב, אנחנו לא יכולים באמת להיות פחות ספציפי. אז מערכים ב- PHP מייצגים למעשה מפת הורה. אז ערכים כלולות מערכים למפתחות. שתי הדרכים להכריז מערך, המבוסס על תחביר זה, אנחנו יכולים להיות מפורשים יותר באומרו שיש לנו מערך ויש לנו key1 זה שממפה ל value1 זה, key2 הממפה value2. או שאנחנו יכולים רק ליצור מערך המכיל את הערכים עצמו ולאחר מכן על המקשים הם הבין בדרך. כל שאלות על זה? קהל: מה היית המפתחות להיות בדוגמא השנייה? 0, 1, 2, 3? MARIA ZLATKOVA: לדוגמא, זה פשוט המפתחות בזה לא בהכרח לעשות שינוי. הם פשוט להגדיר איך אתה יכול להשתמש בערכים הפנימיים שלו. אז אם היו לנו foreach הלולאה ב- PHP שהיית מאפשר לנו לעבור את כל הערכים, אנחנו יכולים לעבור את כל הערכים, גם אם היו לנו או לא מוגדר מפתח ספציפי בתוך האתר של תחביר קודם. אז גם עם סוג זה של מערך, אנחנו עדיין יכולים יש לולאת foreach שעובר כל של הערכים במפתח במערך. אז התחביר של foreach לולאה, אנחנו מתחילים עם מערך. משתנים $ arr זה המערך האמיתי שלנו שהוגדרנו בשקופית הקודמת כערך שממש הולך באמצעות כל אחד מהערכים, בלי שום קשר ל היו לנו מפתח או לא. ואז אנחנו יכולים לעשות משהו עם הערך הפנימי של foreach הלולאה. אז שוב, אם היו לנו מערך כמו זה כאן created-- אז יש לנו את המפתח של foo וערך של בר, המפתח של באז וערך של qux-- אנחנו יכולים להיות לולאת foreach ש עובר מערך כערך מרכזי ואז לעשות משהו עם מפתח ו / או ערך. אבל אנחנו לא בהכרח תמיד צריך שיהיה לי foreach לולאות ש עובר מערך כמפת מפתח לערך. אנחנו יכולים לעבור מערך לולאת foreach כערך. חנה בלומברג: ואני חושב ש צריכה-- הייתה השאלה שלך, מה ש הוא המדד משתמע? קהל: דיי. MARIA ZLATKOVA: אה. חנה בלומברג: כן, כן. אז בעצם, אם לא תציין מפתח, זה הולך להיות 01. MARIA ZLATKOVA: כן. בדיוק כמו עם C, זה אפס אינדקס אם לא תציין מפתח. קהל: מצטער. אתה יכול לנסות לדבר קצת יותר חזק? יש לי קצת בעיה לשמוע כל דבר. MARIA ZLATKOVA: אני כל כך מצטער. כן כמובן. אז אתה רוצה אותי לעבור על זה שוב? או האם זה-- קהל: אז על slide-- הקודם אם אתה פשוט יכול לחזור לשנייה אחת. MARIA ZLATKOVA: כמובן, מצטער. קהל: אז השני מערך כאן לא נראה שיש ערך למפתח, בערך [? גְרִימָה. ?] MARIA ZLATKOVA: נכון, נכון. קהל: אז איך עושה את זה עבודה כשאתה אומר שזה לא או כל. לי, שנראה כמו א [? foo?] כבר. MARIA ZLATKOVA: כן, כן. אז שוב, זה מפת הורה במובן זה שיש הם הבינו, למשל, המדדים כאן ניתן להבין 0, 1, 2, 3. שוב, זה אלה שיש מדדים הוא שווה הערך שלנו שיש מפתחות הממופים על ערכים. אז אם המפתח שלנו היה 0-- מצטער. חנה בלומברג: לא, יש לרשום לכאן. זה ממש ממש נחמד. MARIA ZLATKOVA: זה נהדר. אוקיי. אז שוב, עיבוד $ 0 יהיה המפתח לערך 1. 0 יהיו המפתח לערך 1. קהל: אני מצטער. זה בלתי נראה. חנה בלומברג: בסדר, Nevermind. הגיר היה רעיון רע. אני לוקח אותו בחזרה. אתה יכול לחשוב על המקשים כ0 מפות לערך 1. MARIA ZLATKOVA: כן. אז זה הוא 0, זה 1, 2, 3. אלה יכולים להיות המפתחות שלך. אתה יכול לחשוב עליהם as-- כן. אז במקום שיש מפתחות מפורשים, הם הבין סוג של כ המדדים החל משעת 0. הגיר לא עזר. כֵּן. קהל: לforeach הלולאה, אם אנחנו רוצים להציג כערך, זה היה רק ​​באופן אוטומטי למדד 0? MARIA ZLATKOVA: כן. זה יהיה לעבור כל אחד מהערכים. קהל: [לא ברור] כ 0 או שתעשה רק 0? MARIA ZLATKOVA: אתה היית צריך לומר כסימן דולר ולאחר מכן כמה שם משתנה, ערך. קהל: [לא ברור]. MARIA ZLATKOVA: מצטער? קהל: מצטער, אני רק מנסה להיזכר. איך היית עושה את זה אם אתה יכול לעשות את זה באופן אוטומטי לאינדקס הוא רק 0? MARIA ZLATKOVA: אז איך היית עושה את זה אם לא היה לך שמות מפתח ספציפיים? קהל: כן. MARIA ZLATKOVA: אתה היית רק define-- רק אומר את עצמך כחלק משם. אז אולי בpsets, אתם זוכר שורת $ foreach כשורות $, יצרנו לעצמנו שורת $ זה אומר אנחנו רוצים לעבור שורה כמו שורות $. למרות שלא היה לנו $ מפורשים זו שורות מוגדרות, אנחנו יכולים פשוט ללכת ו אומר את זה יכול להיות המפתח שלנו, ורק לעבור כל אחד מהערכים. קהל: אז ערך משתנה חדש אנחנו יוצרים לאחסון [לא ברור]? MARIA ZLATKOVA: אז זה לא מטבע משתנה חדש. זה משתנה המתייחס ל בתוך המערך לכל אחד מהם. חנה בלומברג: זה שם משתנה חדש. MARIA ZLATKOVA: כן, זה שם משתנה חדש, אבל זה לא inherently-- כן. זה פשוט משתנה חדש כי אתה יכול לעשות את זה. אז איך בדיוק לעשות את שעשינו $ שורה כ$ שורות, שורות היה שם משתנה חדש ש יכול ליצור בforeach הלולאה שלנו. זה לא חייב לpreexist לפני ש. קהל: אתה יכול לעבור היגיון לכל, באמצעות הדוגמא שם? MARIA ZLATKOVA: מהמ. אה סליחה. הנה הדוגמא. בַּטוּחַ. אז לכל array-- כך זה אומר ללכת למערך זה כמפתח value-- שקורה לעבור מערך זה והראשון ללכת ולקבל foo, foo מפתח ובר הערך. ואז על השני איטרציה של לולאה, זה הולך לעבור ולקחת אז המפתח וqux הערך. ואז אתה יכול לעשות משהו עם אחד מהם או שניהם. קהל: אז הרעיון מאחורי יש נקודת מפתח לערך, מה שאתה עושה בסופו הגישה? MARIA ZLATKOVA: מהו הרעיון שיש לו מפתח להצבעה מעריכה? זה פשוט כנס אחר, אחר דרך של עובר המערך ולהיות מסוגל לגשת לאחד מ מפתח או הערך או שניהם ולהשתמש בם. קהל: מה התפקיד ל להורות כי foreach פועל ב? אז אם היינו להוסיף אלמנטים למערך מאוחר יותר, היו אלה להיות הראשונים נקרא במערך foreach, או שזה יהיה בהמשך? MARIA ZLATKOVA: אז מה הוא כדי שforeach הלולאה עוברת מערך ב? זה עובר הראשון אלמנט לאלמנט האחרון, לאלמנט נוסף שעבר. אם אתה מוסיף אלמנטים מאוחר יותר, הם היו להיות accessed-- האלמנטים הראשונים היו ניתן לגשת כראשון אלמנטים של המערך, ואז היית עובר כל אחד מ האלמנטים כמו סוג של ordered-- לא הזמין, אבל הדרך שבי הם כבר הכניסו לתוך המערך. קהל: אלמנטים אז חדשים הם הוסיפו מאוחר יותר? אז הם הוסיף-- הם יהיו אחרון שב[? איטרציה. ?] MARIA ZLATKOVA: אלמנטים חדשים can-- בעצם, כאשר אלמנטים חדשים מתווספים, הם הוסיפו לסוף המערך? קהל: כן. MARIA ZLATKOVA: אני מאמין שכן. כֵּן. ולאחר מכן עם foreach הלולאה שלך, לאחר שהוספת אלמנטים חדשים ואתה עובר אותם, האלמנטים החדשים היית להיות accessed-- האלמנט החדש, אם זה הוסיף שעבר, זה היה לגשת אחרון. קהל: האם אתה יכול פשוט לתת דוגמא של משהו שהיית [לא ברור] עם משהו עם ערך כמו או ערך [לא ברור], כמו איך הייתי לך לעצב את זה? MARIA ZLATKOVA: בטח. האם אני יכול לתת דוגמא למה ש היינו עושה עם הערך? אז מה אתם יכולים להיות מוכרים עם הוא שאנחנו כבר עברנו מערך ובעצם מודפס כל אחד מהמרכיבים, לדוגמא, כחלק מ רשימה מסודרת או משהו ש. האם זה הגיוני או שאנחנו רוצים צריכה-- קהל: האם אנחנו יכולים להדפיס את הערכים הללו? MARIA ZLATKOVA: כן, אנחנו יכולים להדפיס ואז בעצם $ ערך כי ב שהערך ספציפי, שנהיה להדפיס את הערך הפנימי שלו. אז אם היינו באיטרציה הראשונה שלנו שלו ואנחנו מודפסים ערך $, היינו מדפיס בר. קהל: האם יש גם ל לולאות ב PHP או סתם לולאות foreach? MARIA ZLATKOVA: יש גם ללולאות ב- PHP. וההיגיון שלהם הוא בעיקר אותו דבר כמו מה שאתה כבר רגיל אליו. קהל: אז הערך שלה הוא null. MARIA ZLATKOVA: זה כמו אותו הדבר. כֵּן. קהל: אני רק הולך לשאול. לכן, כאשר אתה מצהיר מערך, אתה לא צריך לספר מה גודל זה הולך להיות, מה שאומר שאתה יכול פשוט להוסיף ולקחת אלמנטים [לא ברור]. MARIA ZLATKOVA: כן. כן. בְּדִיוּק. כאשר אנו מצהירים מערך, אנחנו לא צריך לומר מה גודל זה, כך אנחנו יכולים רק להוסיף אלמנטים על זה מאוחר יותר גם כן. עוד שאלות? אז להביא PHP ו- HTML יחד, מה יש לנו גם seen--, למשל, בדוגמא זו, יש לנו טופס HTML שיש שדה קלט. ושדה הקלט הוא רק שם ואז יש לו כפתור Submit. וכאשר אתה לוחץ על שלח כפתור, בקובץ hello.php, בגלל השיטה לצורה היא לקבל, אנו יכולים לגשת כל מה שהוא בשם על ידי זה מקבל משתנה גלובלי ש הוא-- תחביר לזה _GET $. ואז אנו יכולים לגשת כל מה ש קלט משתמש בתוך צורה שלשם על ידי ציון שמו של תחום זה. כל שאלות אחרות או כל שאלות על הדוגמא הספציפית הזה? קהל: איפה PHP? MARIA ZLATKOVA: כאן. אז זה תג הפתיחה שלנו ל- PHP. קהל: אה, נכון. MARIA ZLATKOVA: כן. חנה בלומברג:? = הוא קצרנות לכך הוא PHP ורק הד. קהל: אה. MARIA ZLATKOVA: כן, מצטער. אני צריך לעשות את זה ברור. חנה בלומברג: הדפסה. MARIA ZLATKOVA: זה רק הפונקציה המאפשר לנו להדפיס משהו. שאלה גדולה. אז going-- כן. קהל: האם יש הולך להיות די קצת יד קידוד של PHP ו- HTML בחידון 1? MARIA ZLATKOVA: לא יכול להיות כמות נכבדה של פרשנות של PHP ו- HTML, לא בהכרח כמו כמות עצומה של קידוד, למרות שייתכן שתצטרך לכתוב foreach לולאה, אם כי, ללולאה. כל הלולאות ש לכסות כאן הוא משחק הוגן. וזה בעיקר זה. חנה בלומברג: אני יהיה מוכן. באותו אופן שאנו מבקשים ממך לכתוב חבורה של פונקציות C בחידון 0, אני יהיה מוכן לעשות אותו הדבר ב- PHP ו- JavaScript. MARIA ZLATKOVA: כן. חנה בלומברג: הייתי אומר little-- כמו שאנחנו לא הולך לעשות לך לכתוב HTML ענק דף רק בגלל שזה קצת , אבל אולי יש לך משעממים חלקים. זה משחק לגמרי הוגן. כמו דף HTML הקטן, לגמרי הוגן. קהל: אישור. מה דעתך על בJavaScript, כמו גם? חנה בלומברג: כן. משחק ההוגן של JavaScript. MARIA ZLATKOVA: כן. זה משחק הוגן לחלוטין. חנה בלומברג: תקבל לזה שבכמו 10 דקות. MARIA ZLATKOVA: SQL, שוב, שפת שאילתות מובנית. זה בעצם מאפשר לנו לנהל את הנתונים בניהול מסדי נתונים יחסי מַעֲרֶכֶת. שרק בעצם אומר שיש לנו אי שם כדי לאחסן נתונים מסוימים שייתכן שירצו להשתמש באתר או בכל צורה אחרת. ואז יש לנו שאילתות כדי לקבל מידע ממאגר הנתונים שלנו, או להכניס מידע בהם. הרבה של עדכון ones-- המשותף, INSERT, בחר, ולמחוק. אז לעדכון, זה התחביר לעדכון נתונים במסד נתונים. עדכון טבלה זו נקראת שולחן באומר SET, אנו יכולים להגדיר כמה ערכים בכל שורות למשהו שווה אחר. אז אנחנו גם יכולים לציין כמה ספציפיים ערכים שאנו רוצים לשנות וזה יכול להיות באמצעות איפה. ואנחנו יכולים לציין שאנחנו רק רוצים לשנות כמה שורות שבו לבית ל, אם היו לנו שולחן של תלמידים וכל הסטודנטים בית, כדי שרק היה לשנות כמה ערכים שבו בית שווה קורייר, לדוגמה. לINSERT, אנחנו יכולים להכניס ערכים מסוימים בטבלה. אז INSERT INTO שולחן, ולאחר מכן את הערכים, ולאחר מכן בסוגריים, שנציין אילו ערכים שאתה רוצה להוסיף. אז INSERT INTO שולחן, col1 ו col2, הערך הוא VAL1 וVAL2. אז זה מוסיף בעצם שורה חדשה ל טבלה המכילה את הערכים 1 ו -2 תחת עמודות 1 ו -2. ואז אנחנו הולכים לעבור על דוגמה קטנה על איך זה נראה כמו באתר שלנו קצת. אבל שאילתא סופית זה שאני חושבים שאנחנו הולכים לעבור על, SELECT, זה פשוט מאפשר לנו כדי לבחור נתונים מטבלה כדי להשתמש בו ואולי אחר כך. והדרך בה אנו עושים זאת היא ש רק לאחסן אותו בכמה משתנה. ואז אנחנו יכולים אולי להשתמש בו שוב. אז כוכב SELECT אומר לבחור את כל. זה פשוט קצרנות לבחירה כל. מהשולחן שבו, אנחנו מחפשים לכמה תנאים ספציפיים, אז איפה טור שווה משהו, לדוגמא. אם אנחנו רק רצינו בחר בכל מהשולחן, זה פשוט בוחר את כל העמודות ואת כל השורות מטבלה. ולאחר מכן למחוק מטבלה איפה col שווה משהו, זה פשוט מוחק חלק שורה מהשולחן שלנו שבו יש לנו כמה תנאים ספציפיים. במקרה זה, התנאים הם טור שווה משהו. אז רק דוגמה קטנה לכך. אם יש לנו טבלה זו ממש כאן ואנחנו הכנס אותו לשולחן, ערכים אלה, שיכניס שורה חדשה. ואם היו לנו אוטומטית תוספת, היית זה רק להגדיל הזהות שלנו 0-1 ל -2. אם בחרו את כל תלמידים מ, זה רק מחזיר את כל שדות ואת כל השורות. איפה שנה היא גדולה יותר או שווה לשנת 2016, שאחזור רק חנה ואת עצמי. ואז אם רק נבחר id שנה ושנה מתלמידים שבו הבית הוא בית קאבוט, ש היה, שוב, לחזור חנה ואת עצמי. אז אם אנחנו נמחקו מתלמידים שבו שם שווה לרוב, שימחק את כל השורה. ואז אם אנו קובעים את שם, תלמידי UPDATE שם SET שווה לךייבן איפה הבית הוא שווה בית קאבוט, שהולך ללכת ל שורות אלה ולאחר מכן לעדכן את השם. ואז כמה סוגי נתונים SQL הם CHAR, varchar, INT, ולצוף. אלה הם משחק הוגן. הייתי הולך שוב ולוודא שאתה יודע ויש להם על גיליון לרמות שלך, מה כל אחת מדמויות אלה היה בשימוש במשך, מה אתה השתמשת בהם על psets, ולוודא שאתה מכיר ו נוח עם הצורך לבחור מסוגי נתונים שונים בpset. כֵּן. קהל: מה היה מאוחסן שולחן ש? כן, שבו מאוחסנת בטבלה זו? MARIA ZLATKOVA: ובכן, עכשיו, זה לא מאוחסן. בכל מקרה, שבו מאוחסנת בטבלה זו? אבל זה יכול להיות מאוחסן במסד נתוני SQL. קהל: ואיפה הוא מסד נתונים SQL? במחשב, באינטרנט איפשהו, השרת? MARIA ZLATKOVA: זה יכול להיות מספר דברים שונים. חנה בלומברג: יש לנו ממשק עם שולחנות SQL בעיקר עם phpMyAdmin. כדי שנוכל לשאול את השרת לאחסן אותם עבורנו. אנו יכולים לאחסן אותם במחשב שלנו. MARIA ZLATKOVA: זה פשוט תלוי ב איך אתה רוצה לעשות את זה בעצמך. אבל אנחנו כבר אחסון שלהם, כמו חנה ציינו, על phpMyAdmin, שנמצא במצב מקוון. ואז הדרך בה אנו משתמשים ב PHP ו- SQL, אנו מאחסנים אותו לכמה משתנה מה ששאלנו ל. אז אם אנו בוחרים כל מההיסטוריה שם user_id שווה מזהה ההפעלה, שבחר את כל השורות לאדם הספציפי ש נרשם מההיסטוריה שולחן ולמיין אותם לשורות. דבר מגניב לדעת שהפונקציה השאילתה של CS50 מגן מפני תגי הזרקת SQL. זה רק אומר שזה עושה בטוח הקלט שהוא נכנס הוא נכון וכי מי ש נכנס הקלט לא מנסה קלט כמה זדוני קוד לאו לרדת השולחנות שלנו או למחוק את כל מה בתוך מסד הנתונים שלנו. סקירה מהירה של מודל הדגם צפה בקר, זה פשוט דרך של ארגון ולחשוב על קוד. זה שוב, הפרדיגמה עיצוב. מה שזה אומר הוא ש can-- וזה תרגול טוב להפריד חלקים שונים של הקוד ואת מה שהם שלנו לשלוט לשלוש פרדיגמות אלה. אז לדעתנו הוא לרוב שלנו תבניות, הפריסה שלנו, בדרך שהצבנו איך הקוד שלנו נראה. זה בעיקר קבצי CSS שלנו ואת הדרך שהגדרנו את העיצוב של הקוד שלנו, באופן בסיסי. בקר שלנו הוא בעיקר מה ש אנחנו כבר עושים עם קבצי PHP. אז שוב, עבודה עם מידע שיש לנו ואיך שהגדרה מידע משמש, ולאחר מכן העברת מידע ש גם על התצוגה או המודל. והמודל, אופן שבו יש לנו כבר משתמשים הוא כבר בסיס הנתונים שלנו, אז איפה המידע שלנו הוא מאוחסן כך שיש אי שם לחיות ב, וכל אחד מ קוד המתייחס לדרך כי אנחנו מקבלים מידע זה או דרך שאנחנו לעדכן את המידע הזה. אז במודל MVC, HTTP בקשות נשלחות לשרת אינטרנט. לאחר מכן, מפרש בקר הבקשה מהמשתמש ולאחר מכן מאמת את קלט המשתמש. זה אופציונאלי שיש לנו בקר תקשורת עם מודל, כך משהו כמו מסד הנתונים שלנו או חלק מהפונקציונליות אחרת המעביר מידע. ולבסוף, בקר עובר מידע על הנוף כך שהוא יכול להיות שניתנו ושהוא יכול להיות גלוי לכל אדם גישה לדף האינטרנט. יש שאלות? מדהים. אז שוב, המודל, תפקידה, שוב, הוא אחסון מתמשך של מידע, ניהול וארגון מידע. ומה שראינו בכך כה הוא מסד נתוני MySQL ואת כל קבצי נתונים שעשויים להשתמש. צפה ב, הצגה של מידע ל המשתמש, ממשק המשתמש, או ממשק משתמש. והדוגמא לכך הוא HTML. ואז אולי יש לנו PHP המינימלי. אז ללולאה שסובב הם על הנתונים שהדפיסו הוא חלק מהנוף, כ בניגוד לבקר. ואז הרבה קבצי PHP שלנו נופל לקטגוריה בקר. זה פשוט מטפל בבקשות משתמש ו מקבל מידע מהמודל. לקפוץ לתוך המסמך מודל אובייקטים, זה רק מתייחס לאופן HTML מסמכים מאורגנים. והם מאורגנים בעץ מבנה שיש היררכיה. אז אם יש לנו גישה ל[ לא ברור] ייצוג של המסמך, אנחנו יכולים לעבוד עם המסמך, כמו אנחנו לתפעל אובייקטים בעצם. וכדי לעשות את זה קצת יותר ברור, כאשר יש לנו הרבה משלנו תגים שונים מגיבים למסלולים שונים בעץ שלנו. ולאחר מכן לדוגמא זו, אנו יש לי צומת המסמך מתחילה. יש לנו, אז, צומת HTML שלנו שמתפצל לראש והגוף. יש ראש כותרת ולאחר מכן כותרת מכילה שלום, עולם. והגוף שלנו פשוט מכיל שלום, עולם גם כן. אז שאלות על כל אחד מ דברים שאנחנו מכוסים עד כה? ואם לא, חנה להשתלט על עם JavaScript. מדהים. חנה בלומברג: בסדר, מגניב. אם כל דבר בא עם PHP או HTML, או כל החומר מריה מכוסה, אנחנו תמיד יכולים להשהות. אנחנו עושים יותר טובים ב שוב, כל כך מדהים. ורק כדי לחזור מהר מאוד לזה, אם אתה מסתכל על כל הבחינה של השנה האחרונה, זה עולה either-- כאן הוא כמה HTML, להפוך את התרשים הזה. או הנה תרשים זה, לעשות קצת HTML, כך בהחלט לתרגל את זה. ואז זה אחד מובטח שאלה שאתה יכול לקבל זכות. מגניב. אז בואו נדבר על JavaScript ואיך זה קצת שונה משפות כמו PHP ו C, שתי שפות שראינו לפני כן. אז מספר אחד, זה שהוקלד באופן רופף. זה כמו PHP, אבל בניגוד לג זה שפה פירשה. שוב, זה כמו PHP, בניגוד לג וזה הוא הולך כדי לאפשר לנו use-- זה עובד ממש יפה עם דפי אינטרנט. זה הולך כדי לאפשר לנו לתפעל התוכן ואיך זה נראה ומה הוא עושה. אנחנו הולכים לראות קצת אייאקס. זה מאפשר לנו לתקשר אסינכרוני עם שרתים שונים ולקבל מידע. וזה הדבר שבאמת מפריד JavaScript מPHP ו- C הוא שזה בצד הלקוח. שני PHP ו- C הם בדרך כלל בצד שרת. על פי רוב ו כמעט כל מה ש שראינו, לפחות ב המעמד הזה, JavaScript פועל על צד הלקוח, מה שאומר ש שהדפדפן הוא למעשה אחראי להפעלתו. וזה אומר שאנחנו לא צריך אינטראקציה עם השרת. אז זה אומר שזה יכול להיות הרבה יותר מהר כי זה בעצם רק זה Chrome, זה ספארי, זה פיירפוקס, כל מה שאתה להשתמש בעצם פועל JavaScript שלך. קהל: מה אסינכרוני אומר? חנה בלומברג: אה, מה אין אסינכרוני אומר? שאלה גדולה. אסינכרוני means-- ובכן, את התוכן שבו אנחנו משתמשים בו הוא, בסדר, יוצר דף אינטרנט ואנחנו צריכים לקבל קצת מידע. אז עם הדוגמא של mashup, קצת מידע שעשויים אנחנו רוצים הוא כותרות מאמרים. עכשיו, אנחנו could-- אפשרות אחת הוא לעשות את זה באופן סינכרוני וזה אומר בואו לעצור, ללכת לקבל את המאמר, לקבל בחזרה את המאמר, ולאחר מכן להבהיר, אבל זה יהיה ממש איטי. זה יהיה חווית משתמש גרועה משום שהיית פשוט יושב שם מחכה למשהו להגיב. אסינכרוני אומר אנחנו להמשיך ללכת על העסק שלנו, טיוח הדף, ו אנחנו נשלח את בקשה זה סוג של הולך לקרות ברקע. אני חושב שאנו משתמשים בדוגמא ב הרצאה של קורא רוב ואומרים, היי, אתה יכול להסתכל למעלה זה לי ולחזור אליי, בניגוד לרק אני מחכה בטלפון. אז אסינכרוני אומר שזה קורה ברקע מאתנו במקביל. שאלה גדולה. משהו נוסף? גדול. אנחנו נקפוץ הרבה יותר ל בקשות אסינכרוני עם אייאקס. קהל: האם JavaScript-- בי עושה זה ייפול עם Model-View-בקר? חנה בלומברג: שאלה גדולה. איפה עושה JavaScript סתיו עם Model-View-בקר? HM. אני מניח שזה יכול fall-- ולכן אנחנו בדרך כלל לא רוצה squish אותו של הפרדיגמה, אבל אני מניח שהייתי אומר, אוקיי, אז JavaScript למעשה הולך לאפשר לנו לאסוף נתונים, לפרש את הנתונים, בעצם לעשות דברים משמעותיים עם נתונים. באופן זה, זה מאוד כמו שליטה. אבל זה גם הולך כדי לאפשר לנו להציג את הדברים ודברים דפוס. באופן זה, זה מאוד כמו נוף. כֵּן. אז זה סוג של כמו PHP ב בו סוג של יכולה להיות שניהם. שאלה טובה. משהו נוסף? בסדר, מדהים. נע ימינה לאורך. אז בואו לראות דוגמא איך אנחנו יכולים להשתמש JavaScript באחת מהתוכניות שלנו באינטרנט. אז אני אשקול את זה index.html עם חבורה של HTML. והדבר שאני רוצה אותך להתמקד בהוא תג התסריט הזה. וזה אומר, בסדר, אני רוצה להריץ כמה JavaScript וכאן הוא המקום שבו גר. הוא חי בhello.js. וממש כמו CSS, שיכולנו לשים JavaScript בתוך ה- HTML. למה עלולים אנחנו רוצים להפריד אותו? כֵּן. קהל: קל יותר לכתוב מחדש? חנה בלומברג: כן. זה קל יותר לשימוש על פני דפי אינטרנט שונים. זה שומר דברים נקיים. זה רק אימון טוב. מדהים. תשובה טובה. כל כך טוב, אז זה הולך להיות index.html שלנו. ואז כאן הוא שלנו קובץ JavaScript קטנטן. וכל זה אומר הוא ערני שלום, עולם. אז מה שקורה הוא כאשר renders-- דף זה כך שאם אתה הולך לכל אתר זה הוא-- כל מה שהולך לקרות הוא זה הולך לומר, בסדר, אני הולך להפעיל קוד JavaScript זה. וקוד JavaScript זה רק אומר התראת שלום, עולם. אז אני הולך לקבל את זה ידידותי מוקפץ קטן. מגניב? זה כמו סוג שלנו הראשון JavaScript תכנית, שלום שלנו, עולם. בואו נסתכל קצת יותר על מה ש התחביר של JavaScript נראה. ובמיוחד, בואו להשוות אותו ל C ו- PHP, אשר ראינו לפני. ב- JavaScript, אנחנו הולכים לי var, השם המשתנה, ולאחר מכן הערך האמיתי שלה. ואנחנו לא תציינו סוג, רק כמו ב- PHP, אבל מאוד לא כמו בג כך למשל, אם אנחנו רוצים כדי לאחסן את הערך 50, ב- C, היינו חייב לומר, היי, C, אני רוצה שלם, אני הולך לקרוא לזה אני, וערך שלה הוא 50. ב- PHP, זה קצת יותר קל. אנחנו אומרים, היי, אני רוצה משתנה בשמי וערך שלה הוא 50. מאוד דומה, ב- JavaScript, אנחנו אומר היי, אני רוצה משתנה בשם i, הערך שלה הוא 50. בכל פעם שלאחר מכן שאני משתמש אני, אני לא צריך לכתוב var. זה רק אני מנקודה זו ואילך. באותו אופן, ב- C, שבו ברגע שאנחנו אומרים int i, אנחנו פשוט להשתמש אני. מגניב? בסדר. על מנת להזיז לולאות, למזלנו, כמעט אלה נראה exactly-- אני חושב שהם בדיוק כמו מה ש לולאות הולכים להיראות כמו ב משהו כמו C שבך ללולאה הוא הולך להיות שלוש parts-- אתחול, מצב, ועדכון. לולאה בזמן, זה נראה אותו הדבר בדיוק. אנחנו רק נותנים לו מצב. ולעשות בזמן לולאה, שוב, בדיוק אותו הדבר. אנחנו נותנים לו מצב. נניח שאני רוצה לחזר over-- אני רוצה לעשות משהו חמש פעמים. ב- C, אנו עשויים לכתוב לinit אני שווה 0. הוא אני פחות מ -5, אני ++. הבדל היחיד, ב- JavaScript, במקום לומר int i שווה 0, אנחנו אומרים שאני var שווה 0. יָפֶה. זה ההבדל היחיד. כל שאלות על כל זה? כֵּן. קהל: אז ב- PHP, זה אותו הדבר דבר, מלבד אבל כמו משתנה? או שזה היה דוגמא var? חנה בלומברג: כן. אז ב- PHP, זה הולך להיות סימן דולר. אז זה הולך $ אני שווה 0, $ הוא אני פחות מ -5, $ i ++. שאלה גדולה. עכשיו בואו נדבר על הצהרות פונקציה. ב C, כאשר אנו הכריזו פונקציה, נתנו לזה שם ונתנו לו כמה פרמטרים. ובתחילת, שכתבנו את הסוג. ב- JavaScript, כולנו צריך לעשות הוא לכתוב הפונקציה של מילות מפתח ש אומר, היי, JavaScript, אני עומד להגדיר פונקציה. במקרה זה, יש לו שם סכום. וזה לוקח שני טיעונים, x ו- y. שים לב שלא אכפת לנו על סוגי x ו- y. ובדיוק כמו C, יש לנו תמורה זו מילת המפתח, כדי שנוכל לעשות משהו כמו x ו- y תמורה. ועכשיו ברגע שכתבנו את זה ראשון פונקציה, אנו יכולים להשתמש בסכום בכל מקום. וזה לגמרי בסדר. דבר ממש מגניב אחד על JavaScript שהוא מאוד לא כמו C היא שפונקציות יכולה להיות מטופלים כמו ערכים. אז אנחנו יכולים לעשות משהו כמו כאן שבו אני מניח שאני מכסה את זה up-- כיסיתי את סכום var part-- ואנחנו רק אמרו XY הפונקציה שווה x תמורה בתוספת y. זה מה שייקרא פונקציה אנונימית. זה פונקציה ללא שם. ואילו זה אומר פונקציה סכום, בלה, בלה, בלה, זה הייתי אומר רק פונקציה. אבל עכשיו למרות שיש לי פונקציה אנונימית זה, פונקציה שהיא באמת רק ערך. אנחנו יכולים להתייחס אליו כמו ערך. אז אנחנו יכולים לשמור אותו במשתנה אותו דרך בה אנו יכולים לאחסן 50 במשתנים. אז אנו יכולים לומר, בסדר, אני רוצה משתנה, זה נקרא סכום, וזה פונקציה זו. אז שני הדברים האלה הם בעצם הולך לעשות בדיוק את אותו הדבר, אבל התחביר הוא קצת שונה וסוג של פתק כיף. כֵּן. קהל: אז אתה יכול לקרוא ל פונקציה שהייתה אלמוני באומרו, סוגריים סכום 2, 5? חנה בלומברג: כן. אתה יכול לקרוא לזה בעילום שם פונקציה באותו אופן. (, 5 2) היית עושה סכום ;. זה יהיה בסדר גמור. אם אני לא עושה את סכום var שווה פונקציה, אם אני פשוט נמחק זה-- אני יודע שזה ביד שלי, אבל להעמיד פנים שנמחקתי זה-- אז הפונקציה שהיא סוג של פשוט נעלמה. אתה לא יכול להשתמש בו שוב, כי אין לך לזה שם. קשה להתייחס למשהו אתה לא יודע איך לקרוא ל. שאלה טובה. כֵּן. קהל: האם אתה יכול להפנות סכום ב מקומות אחרים עם הערך של X ועוד Y? חנה בלומברג: האם אתה יכול סכום התייחסות במקומות אחרים עם x הערך בתוספת y? אני לא לגמרי בטוח למה אתה מתכוון. קהל: חצי אנונימי אז עבר שלך פונקציה היא הסכום שווה לזה פונקציה אנונימית, כך הסכום היא עכשיו משתנה שאתה can-- חנה בלומברג: ימין. אז הסכום הוא משתנה, אבל זה מעשה-- כך הסכום הוא משתנה ש ערך הוא הפונקציה. אז זה הוא פונקציה, שהיא סוג של דבר מוזר לעטוף את הראש סביב מאז ששחקנו עם C ואתה לא יכולים לעשות את זה בג אבל עכשיו אנחנו יכולים לקרוא לסיכום אותו אופן שאנו יכולים לקרוא לסכום כאן. קהל: אישור. חנה בלומברג: כן. שאלה טובה. כֵּן. קהל: אז אנחנו לא משתמשים ב אב טיפוס בPHP או JavaScript? חנה בלומברג: לא, אנחנו לא צריך להשתמש באבות טיפוס, במיוחד ב- JavaScript. דבר בפועל רע כל כך שאני הולך להגיד שאתה לא צריך לעשות הוא שאתה לא צריך לכתוב לי var = 50. אתה יכול פשוט להתחיל לעשות i = 50. ויגרום לי משתנה גלובלי פשוט. זה תרגול רע מאוד אף פעם לא אומר לי במפורש var, אבל זה משהו שאתה יכול לעשות. המתורגמן לא הולך לצעוק עליך. JavaScript היא יפה כמו, אתה יכול לעשות מה שאתה רוצה. אה סליחה. יש שתיים. במכנסיים הכתומים. לך על זה. קהל: לא, אתה הולך ראשון. קהל: לא, אני רק אומר לא היה לי היד שלי. אוקיי. אז אם היית קורא כי בפעם הראשונה, עכשיו סיכום, אנחנו קוראים לזה באותו אופן, x, y, כמו בכל פעם? חנה בלומברג: כן. אז שני אלה במהות לעשות את אותו הדבר. קהל: ומה היתרון שימוש באחד או אחר? חנה בלומברג: לא יתרון שימוש באחד או אחר. רק רציתי להראות לך שני חלקים שונים של תחביר. הרבה פעמים שבי אנונימי יש לי מטרת פונקציות הוא אם לטענה אחרת פונקציה צריכה להיות פונקציה. ואנו רואים כי ב רק שני עם אייאקס. אז אם זה לא הגיוני, לאחסן אותו בחלק האחורי של הראש שלך. זה המקום שבי אנונימי פונקציה עשויה להיות שימושית כי זה לא באמת שווה נותן לו שם מאז אנחנו רק הולך להשתמש בו פעם אחת. כֵּן. קהל: אם x ו- y שינוי מאוחר יותר ב, תסכם לשנות גם כן? חנה בלומברג: אם x ו- y שינוי בשלב מאוחר יותר, יהיה לסכם לשנות גם כן? אז זה בעצם אני חושב משהו שהוא, שוב, זה פשוט מרגיש שונה מאוד מג זה לא ערך. זה לא 5. זה רק הפונקציה עצמה. אז ברגע שאתה נותן לו פרמטרים, אז אתה בעצם תוכל לחשב ערך. MARIA ZLATKOVA: ואז אתה יכול לקרוא לפונקציה ולהשתמש בו כדי לקבל קצת ערך. חנה בלומברג: ימין. בְּדִיוּק. כֵּן. קהל: אז אם אתה רק לאחסן אותו במשתנה, כמו x var שווה סכום של שתי values-- חנה בלומברג: כן. אז רק אתה יכול לעשות סכום var שווה סכום של שני ערכים. כֵּן. כל שאלות אחרות? כֵּן. קהל: אבל היית ש לבלבל סכום וסכום? כמו אם אתה קורא סכום משתנה, היית קורא את סכום הפונקציה? חנה בלומברג: במ"מ. מ"מ. אם עשה משהו כמו, סכום שווה סכום 2, 5? קהל: כן. חנה בלומברג: אני מאמין ש היה להחליף את הערך של סכום. אז אחר מעניין דבר על JavaScript הוא שמשתנה אחד יכול לקחת על חבורה של סוגים שונים. תרגול רע. אתה לא צריך לעשות משהו כמו מה שאמרת רק. אבל בC, אם אני מוגדר שווה למספר שלם, אנחנו יודעים שזה לא הולך להיות מחרוזת. זה לא המקרה ב- JavaScript. כן, שאלה טובה. משהו נוסף? בסדר. עושה כל בדיוק בזמן. שמירה הולך. בסדר. אם נתבונן במערך ב- JavaScript, הנה דוגמא מהירה של מערך של מחרוזות. ומערכים יכולים לגדול באופן דינמי. אין להם גודל קבוע באותה הדרך שהם עושים בג אנחנו יכולים לגשת ל אלמנטים עם רק סוגריים מרובעים. זה נראה הרבה כמו PHP והרבה כמו C, שבו אנחנו יכולים לומר, במקרה זה, אם אני רוצה את המילה JavaScript, הייתי אל ARR סוגריים מרובעים עם 0, 1, 2. ואז אם אתה זוכר ב- C כאשר אנו רציתי לקבל את אורכו של מערך, זה היה ממש מעצבן. אבל בJavaScript, סופר קל. כל מה שאנחנו עושים, .length. נותן לו את האורכים. זה הכל. קהל: זה פשוט. חנה בלומברג: כן, עושה החיים שלך הרבה יותר קל. אישור, לא object-- שם. אובייקטים בתחושת JavaScript הרבה כמו structs בC ומערכים אסוציאטיביים ב- PHP. אז מה שראינו הרבה JSON, ש עומד לסימון אובייקט JavaScript. וזה בעצם דרך של בניית הנתונים שלנו. אז בואו לראות דוגמא, כנראה הקל ביותר. אז הנה דוגמא לאובייקט שמאחסן את הכיתה, CS50. וכשאני אומר בכיתה, אני מתכוון כמובן, לא like-- כן, כמובן, CS50. ותראה ש כל דבר באובייקט הולך להיות כלול בסוגריים מסולסלים. ואנחנו מתחילים לקשר שמות שדות או מפתחות עם הערכים השונים. אז אתה יכול להתחיל לראות איך מסוג זה מרגיש כמו מערך אסוציאטיבי ב- PHP. אז אנחנו הולכים ללשייך את השדה או המפתח שם, כמובן, עם המחרוזת, CS50. אנחנו הולכים להיות מורה. אנחנו הולכים לי TFS. אנחנו הולכים להיות מספר psets ואנחנו הולכים רשמנו. ודבר מגניב אחד שיש לשים לב לכל יש הדברים האלה סוגים שונים, וזה לגמרי בסדר. זה בסדר לאובייקט, למעשה, זה כנראה צפוי לאובייקט יש שילוב של מחרוזות ומספרים וBooleans ומערכים וכל דבר אחר שעלולים רוצה להיות בתוך האובייקט שלך. ולציין כי אלה הולכים להיות השמות או את המפתחות, ואז אנחנו פשוט להגדיר את זה שווה עם קצת מעי גס. קהל: מה בדיוק עושה JSON אומר? חנה בלומברג: מה בדיוק עושה JSON אומר? JSON רק עומד ל סימון אובייקט JavaScript. זה פשוט דרך של עיצוב. כֵּן. זוהי דרך של עיצוב הנתונים שלנו. ב C, זה structs. ב- PHP, זה מערכים אסוציאטיביים. ב- JavaScript, יש לנו אובייקטים. קהל: אז CS50 זה אובייקט? חנה בלומברג: CS50 הוא האובייקט במקרה זה. עכשיו, איך אנחנו למעשה גישה שדות אלה או לשנות שדות אלה. לדוגמא, נניח שהחליטו ש אתה רוצה pset אחד פחות בסמסטר הזה. במקום תשע, אנחנו פשוט אצטרך שמונה. איך היינו משנה את זה? הו, דרך הלא נכונה. ישנן שתי דרכים שאנחנו יכולים לעשות את זה. מספר אחד הוא עם הנקודה סימון ומספר שתיים הוא עם סימון הסוגר המרובע. כך, למשל, אם אני רציתי לשנות או גישה שדה psets באובייקט CS50, מה הייתי עושה הוא CS50.psets, לכן השם של נקודת האובייקט שמו של השדה או על המקש. מאוד דומה, זה בדיוק שווה לעשות CS50, ולאחר מכן בסוגריים מרובעים, psets. מגניב? כֵּן. קהל: אז JSON מבחינה טכנית JavaScript עדיין, למרות בpsets להפריד את זה [לא ברור]? חנה בלומברג: בטח. אז השאלה היא, הם שווה ערך JavaScript וJSON? אז JSON הוא סימון, בעצם אופן שבו אנו כותבים את אובייקט מJavaScript. אז הם לא בדיוק אותו הדבר. הייתי אומר JavaScript, יש אובייקטים ב- JavaScript. JSON לוקח חפצים אלה ו מדפיס אותם ומציג אותם או מאחסן אותם בצורה יפה. אז JSON הוא לא תכנות שפת הדרך כי JavaScript הוא. זה פשוט הסימון ל האובייקטים שלנו ב- JavaScript. כֵּן. קהל: אז מה בדיוק [לא ברור] להשלים? חנה בלומברג: בטח. אז זה בעצם לא עושה כלום. זוהי רק דרך לגשת. אז בואו נגיד שאנחנו רוצים לשנות מספר סטי בעיה 9-8. מה שאנחנו עושים הוא לעשות משהו כמו CS50.psets = 8 ;. כן, שאלה גדולה. זה רק כדי להראות לך תחביר. לא ממש עושה משהו מועיל. יש שאלות? נע ימינה לאורך. אז בואו נסתכל על דוגמה קטנה על איך JavaScript עובד כי אמרתי לך את זה עושה את כל הדברים מגניבים האלה ו מאפשר לנו לשנות את דפי אינטרנט. בואו ממש לראות אותו בפעולה. אז קח, למשל, קובץ HTML זה. והדבר שאני רוצה שתתמקד בהוא תג זה בפרט, אשר הוא כפתור, עם search_button id. זה רק בעמוד. אז עכשיו בואו נראה מה אנחנו באמת יכולים לעשות. ובכן, נניח שכאשר אתה לוחץ על כפתור ש, אנחנו רוצים לעשות alert-- לחצת על הכפתור. בואו לראות איך אנחנו יכולים לעשות את זה. אז window.onload-- זה לא משהו שראית בכיתה, ולכן לא צריך לדעת את זה לחידון. אבל זה בעצם אומר, בסדר, שיחה כאשר עומסי חלון פונקציה זו. אז זה פשוט סוג של קוד התקנה. אל תדאג כל כך הרבה על זה. מה שאני רוצה להתמקד הוא בכאן. אנחנו אומרים searchButton var שווה document.getElementById search_button. אז כמו שאתם יכולים לנחש, מה המשמעות של זה הוא שהוא אומר, אישור, ללכת למצוא את האלמנט עם search_button מזהה. ועכשיו יש לנו ש אלמנט בפועל ואני הולך לאחסן אותו ב searchButton משתנה. ועכשיו אנחנו יכולים למעשה להשתמש באלמנט ש ולשנות אותו, או לגשת לערכיה, דברים כאלה. אנחנו באמת יכולים להתחיל ל לעסוק בדף האינטרנט. אז הנה אני אומר, אוקיי, עכשיו שיש לי כפתור ש, כאשר הוא לחץ, לקרוא לפונקציה אנונימי זה. אז זה מקום שבו בעילום שם הפונקציות להיות שימושיות. ומה הפונקציה עושה? ובכן, זה פשוט קורא לזה פונקצית התראה וזה אומר, לחצת על כפתור החיפוש. אז מה יקרה אם אני הולך לכל מקום HTML זה חי ואני לוחץ על הכפתור, אני אקבל התראה קטנה מפוארת זה אומר שאתה לוחץ על הכפתור. אז הדברים להתמקד ב כאן-- document.getElementById מקבל HTML מסוים אלמנט עם זהות המסוימת. ועכשיו אנחנו יכולים להגדיר מה צריך לקרות כאשר אלמנט מסוים שלוחץ. קהל: אנחנו צריכים לשים את כל זה ב? חנה בלומברג: מצטער? קהל: האם יש לנו ל פיזי קוד כל זה? חנה בלומברג: יש לנו ל פיזי קוד כל זה? כֵּן. האם לא של מעצבן סוג זה? זה הרבה קוד. קהל: אתה יכול לייבא משהו. חנה בלומברג: ימין. אנחנו יכולים להשתמש במשהו. ובparticular-- הו, זה אומר לי שאני צריך ללמד את הסעיף. בפרט, בואו להשתמש בספרייה jQuery, משום שהיה באמת ארוך וממש מעצבן ואני רוצה להיות מסוגל לפשט את זה ולהפוך אותו קצר יותר וקל יותר לכתוב. אז jQuery הוא ספריית JavaScript. אז JavaScript היא תכנות שָׂפָה; jQuery היא ספרייה. וזה עושה חבורה של דברים קלים יותר. זה עושה שינוי והולך על פני מסמך HTML הרבה יותר קל. זה עושה אירועי טיפול קל יותר. זה עושה אנימציה קלה וזה גורם אייאקס קל יותר. אז בואו נקפוץ לשתיים אלה דברים עכשיו. סלח לי. לפני שאנחנו עושים, כמה תחביר בסיסי. זה מה שקורא לביותר ספריית jQuery נראית. אנו משתמשים בדולר זה sign-- שום סימן חיבור ל- PHP, רק inconvenient-- השם בורר, נקודה, ואז פעולה. אז בואו לראות כמה דוגמאות קונקרטיות לכך. אז זה בעצם אותו קוד משקופית האירוע. אז דבר ארוך, מכוער זה הופך , דבר זה הרבה יותר נחמד קטן יותר. אז בואו ננסה לשבור את זה. זה אומר, בסדר, jQuery-- דולר זה sign-- jQuery, למצוא לי את החלון. אז זה את הבורר. כאשר הוא טוען, לקרוא לפונקציה זו. אז זה כל מה שבפנים. אוקיי. בינתיים בסדר? בסדר. עכשיו, jQuery, למצוא אותי דבר עם search_button מזהה. ומה שהוא לחץ, לקרוא לפונקציה זו. ואז הפונקציה של זה בדיוק אותו הדבר. פשוט תעשה קצת ערני, לחצת על כפתור החיפוש. אז זה ממש נחמד. זה באמת מתעבה ו מפשט את הקוד שלנו. איך אני יודע ש זה search_button זיהוי ולא אוהב search_button כיתה? קהל: סולמית? חנה בלומברג: כן. סמל חשיש זה, זה בדיוק כמו CSS. אז לזכור, עם CSS, כאשר אנו רציתי לבחור משהו לפי תעודת זהות, השתמשנו בסולמית. וכאשר אנחנו רוצים לבחור משהו בכיתה, אנו משתמשים בנקודה. גדול. הגיוני? אז jQuery אמור רק להפוך את החיים שלנו לקלים יותר. כֵּן. קהל: אז אני קצת מבולבל איך הפונקציה אנונימית עובדת. האם אתה שם את זה anonymouse פונקציה, לתפקד? איך קרא לזה? חנה בלומברג: בטח. אז פונקציה היא רק מילת מפתח ש אומר, שאני עומד להגדיר פונקציה. קהל: אה, בסדר. חנה בלומברג: בסדר? ולאחר מכן אנחנו עוברים אותו כ טיעון צריכה-- בואו ניקח one-- הפנימי זה לפונקצית קליק. אז כן, כך פונקציה ש, פונקציה אנונימית זה, הופך טיעון ממשי. אז לזכור ב- JavaScript, אנחנו ניתן לטפל בפונקציות כערכים. קהל: אה, בסדר. חנה בלומברג: כן. אני אוהב את זה "אה." נחמד. שאלות אחרות? זְמַן? MARIA ZLATKOVA: טוב. טוֹב. חנה בלומברג: מדהים. חלק jQuery שימושי מהיר. אני לא מתכוון ללכת באמצעות כל אלה. שקופיות אלה יהיו עד מקוון קצת מאוחר יותר, כך שאתה יכול לבדוק את זה קצת מאוחר יותר. אבל בעצם, הכללי דפוס מחזיק בו אנחנו אומרים, אישור, היי, jQuery, הנה שלי בורר ואז הנה פעולה. ואתה יכול לעשות דברים כמו גישה ערך של צורה, לגשת לחלק HTML, שליטה מה קורה כאשר המשתמש מגיש טופס, דברים כאלה. כֵּן. קהל: אז ב בחינה, אנחנו הולכים צריכים לדעת די הרבה מ תיעוד jQuery. אז בהתחשב בכך שאנו להעתיק / להדביק את jQuery תיעוד לגיליון לרמות שלנו, איפה הקו נמשך? כמו כמה אנחנו צריכים לדעת? חנה בלומברג: שאלה גדולה. השאלה היא בעצם בהתחשב בעובדה שאתה לא יכול לגשת לתיעוד jQuery במהלך הבדיקה, כמה אתה צריך לָדַעַת? לא הייתי מצפה ממך לבוא עם כמה פונקציה אקראית שהיינו מצפה לך ל- Google. דברים שהם משחק הוגן הם הייתי אומר רק סוג של התחביר הכללי, יכולת לבחור לפי תעודת זהות ו על ידי class-- כל כך פשוט כמו CSS. ולאחר מכן פונקציות הממשיות עצמם אחרי, אנחנו נגיד לך סיכוי. כֵּן. קהל: אז כשאתה בוחר על פי מעמד פירוש נקודה. חנה בלומברג: כן, בדיוק. טוֹב. כאשר אתה בוחר בכיתה, זה הולך להיות נקודה במקום הסולמית. כֵּן. קהל: האם אתה ללכת על ההבדל בין הבחירה לפי תעודת זהות ועל ידי כיתה? חנה בלומברג: בטח. ההבדל בין הבחירה זיהוי ובחירה בכיתה. אז כמו שאמרה מריה קצת קודם לכן, יש יכול להיות רק אחד אלמנט HTML עם זיהוי נתון, ואילו בכיתה, זה מאפשר לנו קבוצת חבורה אלמנטים שונים של יחד, כך דברים שקשורים, אבל לא בדיוק אותו הדבר. האם זה עונה על השאלה? מדהים. כֵּן. קהל: מה אם יש לך מספר רב של דברים שהם באותה הכיתה? חנה בלומברג: מה קורה אם יש לך דברים רבים ש הוא אותו הסוג? כך, למשל, אם אנחנו רק באמצעות JavaScript הטהור, היינו עושה משהו כמו document.getElementsByClass. ואז מה שעושה בפועל הוא מחזיר מערך של אלמנטים. ואתה צריך גם לחזר על שלהם או למצוא איזה מהם אתה רוצה. זה לא הולך לתת לי אתה אלמנט בודד. זה הולך לתת לך מערך של אלמנטים. שאלה גדולה. משהו נוסף? מדהים. אז אני חושב שאם אתה מכיר כל jQuery שראית בpset, אתה צריך להיות טוב ללכת. שְׁאֵלָה? אוי לא. אני באמת צריך ללמד. לְהִרָגַע. זה יהיה בסדר. אני אגיע לשם. בואו נדבר על אייאקס. אז אייאקס הולך להיות זה-- גם, בואו נתחיל עם מה שהוא מייצג. זה ראשי תיבות. עומד זה לאסינכרוני JavaScript ו- XML. וXML הוא בעצם הולך להיות [לא ברור] עם סוג הנתונים שלנו. אבל אנחנו לא ממש בשימוש XML. במקום זאת, אנחנו פשוט להשתמש JSON. אז בעצם, זה חלק data-- אסינכרוני, JavaScript, ונתונים, במקרה זה, JSON. והמטרה שלנו, כפי שהזכרנו קצת קודם לכן, הוא להיות מסוגל לעשות בקשה, שהבקשה שתעשה הדבר ב רקע, אבל תמשיך לעשות כל מה שאנחנו מתכוונים לעשות. ולאחר מכן, כאשר המידע ש מוכן, אז לשלב אותו. אז בואו לראות מה זה למעשה נראה. וזה, אתה צריך להיות קצת מוכר מpset8, אחד אתה פשוט הפך ב. אז הנה jQuery חוקי פונקציה שאולי רוצה לדעת על-- סימן דולר זה. אז זה אומר פונקצית jQuery, .getJson. ומה תפקיד של זה הוא זה לוקח URL וכמה parameters-- לכן אני חושב במקרה של pset8, היה אוהב את זה, כתובת האתר הייתה articles.php ו פרמטרים היו ללכת = כמה מיקוד. וזה אומר, בסדר, להגיש בקשה ל כתובת אתר עם פרמטרים מסוימים. וזה פשוט קורה. כשזה יסיים, זה או הולך להשלים בהצלחה או שזה הולך להיכשל. אז זה שווה הערך לשיחה רוב ולבקש ממנו לעשות משהו. ואז כשהוא מתקשר בחזרה, הוא גם הולך להגיד שאני עושה או שאני לא הצליח. אז במקרה שבו אתה עשית, אתה אומר, בסדר, גמרת. ואז אתה קורא לפונקציה זו. במקרה זה, זה הולך להיות פונקציה שלוקחת קצת מידע. אחד אנחנו בדרך כלל אכפת הוא נתונים, הנתונים שהוחזרנו בפועל כתוצאה מקוראה .getJSON. ואתה יכול לעשות עם זה משהו. אז במקרה של pset8, אנחנו מוצגים בה כרשימה. Fail הולך להיות פונקציה זה נקרא אם הבקשה נכשלה מכל סיבה שהיא. ובמקרה של pset8, אנחנו פשוט console.log זה. כל שאלות על זה? כֵּן. קהל: האם אנחנו יכולים פשוט להשתמש תטא פונקציה במקום פונקציה, textStatus, jqHXR. חנה בלומברג: בטח. אז כן, אני חושב בpset, רק שראינו נתונים פונקציה. אז זה רק כל-- כן, אישור. זה מה שראינו בpset. זה לגמרי בסדר. אלה הם רק אם אתה רוצה לשלוף מידע נוסף, אלה הם הדברים ש אתה יכול לקבל מ.getJSON. שאלה טובה. משהו נוסף? כֵּן. קהל: אז .getJSON הוא אייאקס? חנה בלומברג: אישור. אז זה סוג של חלק בעייתי. זה הוא פונקצית jQuery שמאפשרת לך לעשות שיחות אסינכרוני. ושיחות אסינכרוני אלה, זה מה שאנחנו כבר מתייחסים אליו כאייאקס. כֵּן. זה לקח לי המון זמן ל לפרק כשהייתי סטודנט. קהל: האם אתה יכול להגיד את זה שוב? חנה בלומברג: כן. אני יכול להגיד את זה שוב? פונקציה זו .getJSON, זה הוא פונקצית jQuery. וזה הולך לעשות שיחת אסינכרוני. ושיחות אסינכרוני אלה, יש לנו כבר מתייחס לאלה שאייאקס. כל שאלות אחרות? יש לנו רק כמה דקות עזבו. ומריה הולך לעטוף את עם ביטחון ואז אנחנו הולכים להיות על עשה בדיוק. MARIA ZLATKOVA: מדהים, בסדר. אז זה רק הוא-- לקחת כמה שניות להסתכל על זה. וזה לא משהו גדול באמת. ומישהו יכול להגיד לי למה? מה שקורה בfoo ומאי היה יכול פוטנציאל לגרום למשהו רע, ומה זה נקרא? כֵּן. קהל: אם הטיעון זה עבר בהוא יותר מ -12 תווים, זה יכול לעלות על גדות. MARIA ZLATKOVA: ימין. ללא רבב. איך זה נקרא? אתה פשוט ציינו שהיא. קהל: הצפת מאגר. MARIA ZLATKOVA: כן, גלישת חוצץ. אז זה משהו שאנחנו מכנה הצפת מאגר. ואנחנו רואים שבתוך של foo, אנחנו כבר מוגדרים החיץ, ג, עם גודל של 12. עם זאת, בעיקרי, אנחנו לא לבדוק בכל דרך בכל אם argv1-- כך ש הייתה הטענה השנייה. אנחנו לא לבדוק אם גודל שלו הוא מתאים. אז אם היו לנו משתמש זדוני במיוחד מי לשים בחלק הטיעון שהיה יותר מ -12, ולאחר מכן עלול להיות מעבר לגבולות של ש טיעון, היה כמה קוד הפעלה שהוא מנסה לעשות משהו רע עם זה; אז זה, מה היה קורה, היה לעקוף את התשואה כתובת של פונקצית foo, גורם פונקציה כאשר חוזר לביצוע קוד ש. ואז דברים רעים יכולים לקרות. האם זה הגיוני לכולם? וכיצד אנו יכולים להגן מפני זה? הצעות כלשהן? בעיקרון, בתוך פוטנציאל foo, איך אנחנו יכולים לבדוק כדי לוודא ש שזה לא יכול לקרות? קהל: אם הגודל 12 הוא חריגה, היית להקצות זיכרון נוסף? MARIA ZLATKOVA: הצעה היא, להקצות זיכרון נוסף בגודל חריגה. למעשה, אנחנו יכולים לעשות משהו הרבה יותר פשוט מזה גם כן. אנחנו רק יכולים לקבל את אורך המחרוזת של הטיעון שהוא נכנס, לבדוק אם זה פחות או שווה ל12-- וזה מה שאנחנו רוצים את זה להיות בגלל שאנחנו לא רוצים זה יעלה את הגבולות של החיץ שלנו. ואז אם זה לא, אנחנו יכול לעבוד עם הטיעון. ואז אם היא עושה, אנחנו באמת רוצים לYello פוטנציאלי במשתמש. אבל ככה אנחנו היינו עושים את זה. כֵּן. קהל: הייתה לך להסביר מהיר אמיתי memcpy? MARIA ZLATKOVA: אה, סליחה. כֵּן. Memcpy לוקח כל מה שהוא-- מצטער, אישור. Memcpy לוקח כל מה שהוא בבר, ​​מה שעבר על foo כטיעון שורת הפקודה. אז זה הולך לקחת argv1. Argv1 נקרא בר כאן. אז זה הולך לקחת בר ו זה הולך להעתיק אותו לג. קהל: אישור. MARIA ZLATKOVA: וזה הולך copy-- הטיעון השלישי רק מתייחס לכמה זה הולך להעתיק לג. קהל: אה. אז ההעתקה של זה אחד כל זה אז. MARIA ZLATKOVA: כן, זה העתקה כל זה. כֵּן. ראשית, אנו מוודאים בר הוא לא שווה ל null כי זה מצביע. אז אנחנו מקבלים את אורך המחרוזת של בר. אנו מוודאים שזה קטן או שווה ל -12. ולאחר מכן, כי יש לנו דאג, אנחנו באמת יכולים memcpy ולהיות בטוחים שזה בסדר. יש שאלות? גדול. יש לי שתי שאלות אמת או שקר. מישהו יכול להגיד לי מייד אם אלה הם אמת או שקר? כן, זה שקר. בְּדִיוּק. שניהם כוזבים. אז באמצעות סיסמא אחת הוא רעיון לא ממש טוב כי אם מישהו יודע הסיסמה שלך, הם יכולים פשוט גישה לכל החשבונות האחרים שלך. ואז סמלים לא לעשות כלום כדי להבטיח את הביטחון. אנחנו צריכים בדרך כלל לחפש HTTPS במקום HTTP ואת כתובת האתר. וכמה סוגים אחרים של התקפות שאנחנו כבר הזכרנו, כי דוד מוזכר ב להרצות, התקפות הזרקת SQL. אנחנו כבר ראינו שאם אנחנו don't-- פונקצית שאילתא CS50 מוודאת SQL ש הזרקת התקפות לא יכולות להתרחש. אבל אם לא היינו משתמשים בCS50, ציטוט, סוף ציטוט "בשאילתא," היינו צריך לוודא ש קלט משתמש הוא לא ממש חלק SQL שאילתא שתגרום לכל השולחנות שלנו להיות ירד או משהו רע ל יקרה עם בסיס הנתונים שלנו. חטיפת הפעלה היא סוג אחר של התקפה זה קורה כאשר כמה רע אדם משתמש מושב חלק של הקורבן מזהה כדי לגשת למידע ההתחברות. אז דוגמא מאוד טריוויאלי של שהיא כמו אם יש לנו במחשב ציבורי, אז האדם הרע יומנים ובאז יש להם עוגיות שנשמרו. ועוגיות לא משתנות למושב. אז יש לנו את הקורבן ללכת ב ולאחר מכן להיכנס לאתר. העוגיות לא משתנות לישיבה מסוימת. ואז הקורבן נכנס לתוך האתר ולאחר מכן עוזב. ואז האדם שחוזר אז עדיין יכול להשתמש מזהה ההפעלה שלהם כדי לגשת למידע שלהם. אז זו דוגמא אחת של איך זה יכול לקרות. ואז אני לא הייתי דואג יותר מדי על קוד או משהו ספציפי כמו שזה יכול לגרום לזה, אבל יש איזשהו המושג מה המשתנים מעורבים בזה הם. ולאחר מכן מניפולציה כותרת הנתונים הוא סוג אחר של התקפה שיש דוד דיבר על. וזה רק מתייחס ל מה יכול לקרות כאשר התגובה, HTTP תגובה בתוך הכותרת שלנו לא מחוטא כראוי. וכל fields-- למשל, אם מישהו מחליף אחד את הכותרת ערכים להכיל משהו יותר מה הם צריכים contain-- ולמעשה לכלול, למשל, 200 קוד מצב מניח את הדעת, ואז הם עלול לעשות זדוני דברים כשהם לא אמורים. אבל אני לא הייתי דואג יותר מדי הרבה על הקוד הספציפי שיכול לגרום לזה, רק סוג של הבנה דברים כאלה ברמה גבוהה. אני חושב שזה כל שיש לנו כדי לכסות. מדהים. למישהו יש שאלות על כל מהדברים שאנחנו מכוסים? כֵּן. קהל: אז סוג אחד של שאלה לוגיסטית יותר. האם התוכן התמקד בעיקר על דברים לאחר חידון 1? MARIA ZLATKOVA: אז שאלה היא, האם התוכן התמקד בעיקר בדברים אחרי חידון 1? אז הדגש הוא על אחרי חידון 1, למעט שאנחנו צריכים להתמקד בדברים ב pset5 והרבה מבני נתונים שכיסינו. ואנחנו לא יכולים לומר שאנחנו יכול להתעלם מכל דבר לפני זה כי זה בונה על זה גם כן. אז להתמקד בזה, בתוספת חומר pset5 כמו כולל רשימות מקושרות, ערימות, תורים, וכל מה ש שחנה ניגש. חנה בלומברג: ימין. כן, הלכנו על כל הדברים C בהתחלה מהר מאוד. אבל לוודא לסקור ש. לחזור ולצפות בסקירת חידון 0. כמה הערות לוגיסטיות יותר, רק בזמן שיש לנו את תשומת הלב שלך. אנחנו הולכים להיות שעתי עבודה גם ביום שני בלילה וביום שלישי. הם הולכים להיות בMD 119. כל זה באתר האינטרנט, כך אם אתה לא שומע את זה, אין דאגות. MARIA ZLATKOVA: 8:30 עד 11:00. חנה בלומברג: כן, 8:30 עד 11:00. אנחנו נהיה שם. אנחנו נהיה שם כדי לענות על שאלות. זה צינה וכיף יפה. אתם יכולים לשאול כל שאלה שיש לך על חידון 1. וחידון 1 הוא ב יום רביעי, מזל טוב כל כך. אם יש לך שאלות, אולי לבוא לדבר איתנו כאן אחד-על-אחד. מגניב. תודה רבה. MARIA ZLATKOVA: תודה רבה, חבר 'ה. קהל: יש. [תְשׁוּאוֹת]