ג'ייסון הירשהורן: הברוך הבא, כולם, עד השבוע 10. זה שבוע מרגש, כי מחר הוא 1 חידון, שיהיה לנו בשני. היום בסעיף, אנחנו הולכים ללכת על כמה משאבים לחידון, ו אז אני אענה על כל וכל שאלות שיש לך חבר 'ה. ואנחנו סוף סוף יסתיימו עם כמה בעיות בפועל. אנחנו יכולים לבלות את כל הסעיף לענות על שאלות. אנחנו יכולים לבלות את כל הסעיף הולך על בעיות בפועל. אנחנו רק יתרחבו כדי למלא את מרחב ובזמן שיש לנו. אז שמתי את הרשימה הזאת עד בכל שבוע, אבל זה חשוב במיוחד בשבוע זה. ללימוד, אם יש לך לא התחיל כבר, הו ילד. אבל אני מקווה שהתחלת כבר. ואתה עובר חומרים ומשאבים המפורטים כאן. אני מאוד ממליץ מספרם של אלה. בפרט, סיכומי הרצאות הם חשוב מאוד ומועיל. Study.cs50.net מספק פריימר גדול בהרבה הנושאים שאנחנו מכוסים. כמו כן, יש כמה נהדר לתרגל בעיות. ולאחר מכן, גוגל היא גדולה, יותר מדי. אני לא יודע מה שהיית להשתמש בו. אבל גם להשתמש ב-Google,. להגיע אליי אם יש לך שאלות, הערות, או חששות. תסתכל על פגישת הביקורת שקופיות מאתמול בלילה. או, אם יש לך קצת זמן, לראות את הווידאו. הם מספקים הרבה מועילים חומר ומידע. ולנסות ולכסות אם לא כולם, רבים מן הנושאים שכיסינו ושאתה עשוי לראות בחידון. אם כבר מדברים על החידון, כי יהיה מחר. זה ארוך 75 דקות. רבים מכם לוקחים את זה ב1 בערב, וכמה מכם לוקח את זה בשעת 5:30. בפעם שאתה לוקח את זה ואת מיקום שאתה לוקח את זה, ודא לך לבדוק את המסמך בדף הבית של CS50.net. זכור כי אתה יכול לקבל אחד 8 1/2 על ידי 11 גיליון לקחת איתך. לעתים קרובות, אנשים לא משתמשים בזה גיליון כלל במהלך החידון. אבל באמת, זה לא ייאמן כלי מחקר מועילים. אז להרכיב גיליון שהוא מה ביליתי כנראה שלוש או ארבע שעות עושה כשלמדתי לCS50, ו זה היה בקלות מועילה ביותר דרך בה אני יכול ללמוד לחידון. אז גם אם יש לך כמה אנשים אחרים מחקר מדריך להסתכל ו להשתמש כאזכור, אני מאוד ממליץ מה שהופך את העיון במדריך שלך, לשים הדברים האלה ביחד. זה באמת עוזר לך ללמוד כל החומר. ואחרון חביב בחלק זה, אחרי מחר החידון יש אחד עוד הרצאה - ביום שני הבא. יש סעיף אחד נוסף, לא הבא יום שלישי שלפני חג ההודיה, אבל יום שלישי לאחר ש. אנחנו ניפגש יחד סופיים שלום מסיבה וגם עושה קצת קריר דברים כדי לקבל את החבר 'ה נרגש על מחקרים נוספים במדעי מחשב. יש פרויקט אחד יותר, אחד יותר hackathon הוגן, אחד יותר. אנחנו מתקרבים לסוף CS50, וזה מרגש - אלא גם, אם אתה אוהב את לי, קצת עצוב. לפני שאני ממשיך הלאה, למישהו יש כל שאלות על מה אנחנו כבר כיסינו עד כה? בסדר, גם בואו נעבור על כמה שאלות שיש לך לחידון ונושאים אולי אנחנו מכסים. אז זו רשימה שאני להרכיב. זה לא ממצה, אבל בתקווה לרענן את הזיכרון שלך, אם אתה יש לי כמה שאלות על כל אחד מאלה נושאים, או אם יש לך שאלות על בעיות בפועל מחידונים בשנים האחרונות. הייתה לי כמה שאלות שהיו בדוא"ל אותי, אבל אני רוצה לדחות את על אלה לשנייה. האם יש למישהו שאלות, בעיות שהם לא הבינו, תשובות שהם לא הבינו כדי לעזור לנו להתחיל? אבי. קהל: אתה יכול פשוט ללכת על DOM ו-Ajax באמת מהיר? כאילו, מה אנחנו צריכים לדעת או צריכים מבין עליהם? ג'ייסון הירשהורן: אני הולך לענות בדרך כלל שאלה זו של, מה לעשות אני צריך לדעת על x נושא נתון? כי יש לי הרגשה שרבים מכם הולכים לשאול אותי את זה, או שהם סקרן לגבי זה. אז במידה שהנושא היה מכוסה בהרצאה, או סעיף, או על study.cs50.net, בעיה להגדיר, אתה צריך להיות מוכר עם זה. אז אתה לא צריך לדעת כל סוג תג זה זמין ב-HTML או כל סוג של תכונה או מאפיין אתה יכול לתת משהו ב-CSS. אבל אם אתה ראה את זה בדוגמא הרצאה, אם היית רואה אותו בבעיה סט, אתה כנראה צריך להיות מוכר עם זה, במיוחד דברים שאתה ראית בהרצאה. אז דנו במסמך מתנגד מודל קצת ב סעיף, יותר מכך בהרצאה. אתה צריך להיות מוכר עם כל כך הרבה ממנו. ואתה צריך להיות מוכר עם אייאקס באותה המידה. אנחנו אף פעם לא ראינו מתקדמים מאוד או דוגמאות מסובכות של אייאקס, כך אתה לא הולך לתתבקש לעשות משהו מסובך להפליא. אבל ייתכן שתתבקש, איך אני לבצע שיחת אייאקס באמצעות jQuery? וזה משהו שראית מספר פעמים בעבר, הן ב לסקור פגישה ובהרצאה, ו זה רק שני קווים, איש של קוד. אז זה משהו שאתה צריך להיות מוכר. אבל שוב, לכל הנושאים הללו, אם אתה ראית את זה לפני כן, זה משחק הוגן. ואנחנו יכולים לשאול אותך - כמובן, אנחנו הולך לשאול את הדברים שאתה אתה לא ראה קודם. קידוד משהו יש לך לא ראה בעבר. וזה לא אומר שיש לך לא ראה את הכלים כדי לפתור בעיה שלפני. אתם ראיתם את הכלים האלה. לדוגמא, ב -1 בחידון, אם אתה צריך לקודד strlen. לא קדדנו strlen לפני. אבל אתה יודע איך להשתמש בלולאה, אתה יודע איך להשתמש אם תנאים. אתה יודע איך לכתוב את המשתנים בג זה הולך להיות אותו הדבר כאן. אתה לא הולך לתתבקש לעשות שום דבר שלא ראה בעבר, אבל ייתכן שתתבקש, כמו, לשים משהו ביחד בדרך חדשה, או לפתור סוג של בעיה אחרת. סליחה, זה לא היה ספציפי לשלך שאלה, אבל אני לא יכול לענות על כל נושא את מה שאתה עושה או לא צריך לדעת. אלא גם, סליחה, הדבר אחרון על זה. יש לנו בילינו זמן משמעותי יותר על קישור רשימות מאשר יש לנו על אייאקס. אתה לא השתמשתי באייאקס בסט בעיה. אחד המאפיינים של שמרכזיים בעיה להגדיר שהייתה רשימות קישור. ובילינו הרבה זמן בהרצאה וסעיף שימוש בו. לכן, רוב הסיכויים הם קישור הרשימה יעלה יותר לעתים קרובות על החידון מרצון אייאקס. או השאלות שקשורות לקישור הרשימה תהיה שווה יותר נקודות. אז אתה בהחלט יכול להתמקד וצר על דברים שהם יותר צפוי לבוא כי יש לנו בילה זמן רב יותר עליהם. אישור שאלות אחרות? כן. קהל: אנחנו יכולים ללכת על השימוש פונקציות אנונימיות ב-JavaScript? אני נמצא קצת מבולבל בקשר לזה. ג'ייסון הירשהורן: אז ב-JavaScript - אני מנסה לחשוב איך אני אפשר לכתוב את זה על - אז בואו באמת לפתוח את הקוד הזה. אז זה קוד שעשינו בשבוע שעבר. ואתה ראית את זה בעבר אם אתה היו כאן בסעיף בשבוע שעבר. או שראית משהו דומה לזה בעבר. אבל אתה יכול להסתכל בשורה הראשונה. זה איך שאתה מתחיל - כולם ראו את זה קודם. אם אתה רוצה לשים קצת קוד JavaScript, אתה שם אותו בתוך זה, בהנחה אתה משתמש JQuery. שזה אומר, לא עושה שום דבר עד טעון של המסמך. ולאחר מכן, קורט, שאתה רואה כאן אנחנו עושים משהו כזה - paren הפתוח פונקציה, סגור סוגריים. אז אנחנו לא נותנים את זה לתפקד שם. אנחנו לא הולכים להגדיר פונקציה זו הוא אמור לרוץ ולאחר מכן קורא לזה חבורה של פעמים. אנחנו רק אומרים שמסמך זה כבר לוקחת פונקציה. כמה דברים לעשות. ואנחנו לא רוצים לבזבז את הזמן לתת לו שם או לשמור אותו ל לנצח. אנחנו רק רוצים להריץ כמה דברים. אז סוג פונקציה אנונימית של משרתת את המטרה. כשאתה לא הולך להשתמש במשהו שוב ושוב, כך שאתה לא צריך כדי לתת לה שם - אתה פשוט רוצה להשתמש בו פעם אחת - היית אומר רק פונקציה, עבור למשל, במקרה זה, ואתה רק הגדרת משהו ש אתה יכול לתת שם. כמו, אנחנו יכולים להוציא את התפקיד הזה מתוך ולתת לה שם, ואז קוראים לזה לתפקד כאן. אבל אנחנו לא צריכים כי אנחנו לא רוצה לבזבז את הזמן לתת לו שם או מבזבז משהו בשם שלנו בחלל. ואתם תראו את זה הרבה. לדוגמא, אנו רואים שהרבה בזה קוד, אבל שראית את זה בעבר כאשר אתה לוחץ על משהו - להפעיל סוג זה של קוד. אנחנו יכולים להגדיר את הקוד שאנחנו רוצים לרוץ כאשר אנו לחצו, במקרה זה, זיהוי זה, כפונקציה נפרדת ולאחר מכן להפעיל את הפונקציה. אבל במקרה הזה, אנחנו פשוט מדלגים וזה צעד ושיזיז אותו לכאן רק כדי להגדיר את כל מה שאנחנו רוצים שנקרה ו לא נותן לו שם. זה עדיין לא יכול להיות ענה על השאלה שלך. קהל: לא, היא עושה. אני מתכוון, אני מניח שאני עושה לא רק באמת מבין למה זה יהיה לתפקד בכל, אם כי. כי זה לא באמת נקרא. זה לא ממש יש לו שם. ג'ייסון הירשהורן: זה פונקציה ב מובן שזה בשורה של צעדים, כמו שהיית להכניס לפונקציה. ואז זה למה שאנחנו קוראים פונקציה אנונימית זה. אנחנו לא הולכים לתת לו שם. אנחנו לא הולכים לבזבז מנסים לשם זה, אבל אנחנו יכולים. פונקציות אנונימי, אתה תמיד יכול לתת לו שם. כך למשל, קוד זה ממש כאן, אנחנו יכולים לשים את הקוד הזה בתוך פונקציה ואז להתקשר פונקציה זו כאן. במקום זאת, אנחנו אומרים, אנחנו לא הולכים להתעסק עם זה. אנחנו רק הולכים לכתוב כל זה ממש כאן. זה כמו לפעמים כשאתה כותב ארבע לולאה ב-C - אתם ראיתי את זה בעבר - אולי אתה iterating דרך forloop לi שווה 0. אני הוא פחות מ strlen. או שאתה עובר מערך, אתה יכול להציל את מערך מדד i בכמה משתנה. ולך להשתמש במשתנה זה. אז אתה לא צריך לכתוב מחדש את המערך סוגר אני שוב ושוב ושוב. וזה כמו סוג של משתנה דמה. זה לא משרת הרבה מטרות אחרות מאשר כדי להפוך את הקוד שלך נקי יותר וקל יותר לקריאה. פונקציה דומה כאן. פשוט עושה את זה קצת יותר קל, אבל מבחינה פונקציונלית אין הבדל. האם זה עונה על השאלה שלך? קהל: כן. ג'ייסון הירשהורן: אישור .. מריו? קהל: אתמול הם לעתים קרובות את פונקצית סוגר אירוע. האם זה אומר משהו? או שזה לדברים כמו שהם יעשו document.ready אירוע פונקציה. ג'ייסון הירשהורן: אנחנו ראינו את זה, ו שוב, אלה הם דברים קטנים ש כנראה שאני לא רוצה מבלה יותר מדי זמן על. כי לפעמים אני לא רוצה שאנשים מתחרפן לגמרי, שיש להם לא שמע על הדברים האלה כל כך הרבה. אבל אנחנו דיברנו קצת על מטפלי אירועים. אז קורה משהו, ולאחר מכן פונקציה זו מבוצעת. ואז אנחנו גם רוצים לדעת כמה פרטים על מה קרה באירוע זה. אז תחשוב בחזרה לבעיה להגדיר 4. זאת כנראה הדרך הקלה ביותר להבין שבהפסקה החוצה. יש איזה קוד - כמו אירוע שיקרה, אבל אירוע יכול להיות הרבה דברים. אם יכול להיות העכבר נלחץ, זה יכול להיות שאתה מכה על מקש חץ, et וכולי, וכולי. אבל כל זה שמור בזה גנרי קרא דבר אירועים. ואז אנו יכולים לומר, הוא אירוע זה הדבר הזה? או שזה אירוע את הדבר הזה? או, איזה סוג של קרה עם האירוע הזה? אז בגלל זה אתה יוצר משתנה ש שם כדי לשמור את מידע נוסף על מה בדיוק קרה באותו אתה הולך רוצה לנצל בתפקוד. אבל שוב, זה כנראה אחד דברים פחות חשובים להיות סופר מכיר. בסדר, מה יש לאנשים אחרים על שאלות היה, או אבני נגף שהם נתקל בעת בדיקה? אנחנו חזרה לרשימה זו. מה לגבי במהלך חידונים בפועל, אם אנשים כבר לקחו אותם? מה היו בעיות ש הכשיל אתכם? אני יודע בוודאות ששנה שעברה חידון היה ממש קשה. קהל: אתה יכול להסביר מה התקפת הזרקת SQL היא? ג'ייסון הירשהורן: אוקיי, נהדר. אז דיברנו על זה קצת. יש הרצאה על ביטחון. ושוב, כפי שציינתי קודם לכן, זה בצד. אבל אתה יהיה מתוסכל על החידון כשאתה קורא כמה שתי נקודות קטנות שאלה, ואתה כמו, כאשר האם אי פעם שאני לומד את זה? כל הדברים האלה בהרצאות אלה כי אתה לא חושב שאתה צריך יודע, או שאתה יכול לחפות על כי הם לא צריכים לעשות עם סט בעיה, אלה סביר יהיו לבוא שוב בחידון. לכן, דברים מגניבים, כיף שאתה פשוט חשבתי דוד סיפר לך ליהנות, הוא היה אומר לך לך ליהנות וכדי לגרום לך רק להיות סופר מתרגש ללמוד כל מה יש ללמוד על מדעי מחשב. הדברים האלה גם לבוא בחידונים. לכן, גם אלה דברים קטנים שלא עשו זאת קשור באופן ישיר לבעיה שלך נקבע, כפי שאתם מכירים מ חידון 0, כנראה יעלה. וזו דוגמא טובה של משהו. אז הזרקת SQL התקפות היא כאשר אתה לקבל קצת מידע מהמשתמש ו אתה רוצה להכניס אותו לתוך טבלה באמצעות הכנס SQL הצהרה, אבל אתה לא לטהר את הקלט לפני הזמן. אז, כמובן שראינו משפטי SQL. אני רק פותח את - בואו נלך - נלך לביקורת - אני חושב, שכיסיתי אותו? אני חושב Samala עשה. אז אנחנו יכולים לקבל - קהל: איפה מצאת את זה? ג'ייסון הירשהורן: אז אם אתה הולך CS50.net, חידונים, ואז אתה יכול לגלול שוב ולקבל שקופיות מהפעלת הביקורת. אבל אתה יכול לראות את זה הוא דוגמא טובה של SQL injection attack. אנחנו לוקחים קצת מידע מהמשתמש והם נותנים לנו מחרוזת, ואז ברצונך להוסיף מחרוזת לתוך מסד נתונים. בדרך כלל אנחנו הולכים לטהר כי קלט, מה שאומר שיש כמה דמויות שהן מסוכנים. לדוגמא, במחרוזות SQL, ציטוטים אלה - גרשיים בודדים או במרכאות כפולות - אומר משהו. הם מתכוונים בסופו של מחרוזת זו כאן. וכן, אם המשתמש נותן לך אחד או ציטוט כפול, הם יכולים להיות מנסה להכשיל את שאילתת SQL שלך ו להוסיף כמה דברים רעים לתוכה. ואם הם עושים את זה, הם יכולים להשיג שליטה של ​​מסד הנתונים שלך או לעשות קצת דברים שאתה לא רוצה שהם יעשו. אז בגלל זה בכל פעם שאנחנו לוקחים SQL שאילתות, לטהר את הקלט לפני מכניס אותו לתוך מסד הנתונים, אשר אומר שאנחנו לברוח תווים אלה. נדבר על זה בשנייה. , הזרקת SQL אבל סיפור ארוך קצרה התקפה היא שאם אתה לא עושה את זה - אם אתה לא דואג לקלט הם נתנו לך לפני שמכניסים אותך מסד הנתונים, הם יכולים, כפי שאתה רואה למטה כאן, להריץ שאילתה כי, למעשה - הם שמו את הקוד שלהם לכאן ו הקו הזה בחר כאן למטה יבחר הכל מהשולחן ללא קשר של מה הסיסמה היא נתון. כי יש לך 1 או שווה 1. אז זה בעצם, סיפור ארוך קצר, דרך להשתלט על מסד הנתונים. השאלה, אם כן, בשבילכם, היא שבו בסטי עמ '7 עשו לך לטהר את כל התשומות לשאילתות SQL שלך? איפה שלב זה קרה? איפה אתה למנוע הזרקת SQL התקפות מקורים בעמ '7 שנקבעו? כן. קהל: קריפטה? ג'ייסון הירשהורן: אז זה לא היה קריפטה. לא לגרום לך לעשות את זה בשביל זה בעיה מסוימת שנקבע, אבל זה קורה בפונקצית השאילתה. אנחנו בעצם כתבנו אותו בשבילך, ואנחנו טיפלנו חיטוי תשומות בשבילך. אבל בשנים האחרונות, תלמידים היו לי להקליד את התשומות בעצמם. בסט עמ '7, הרבה מכם - הרשה לי לפתוח את קובץ אחד אחר. אז תוכל להבחין כאן הרבה אנשים, בבעיה להגדיר 7, לא קראו פונקציה זו על מיתרים. פונקציה זו, htmlspecialchars, שוב - מחרוזת זו אולי יש כמה דברים כי ב-HTML מתכוון למשהו אחר. כמו סד, מרובע, או זווית סוגר מתכוון למשהו ב-HTML. ולכן אם אתה מדפיס את זה כדי מסך או אם אתה פשוט לקחת את זה ו להדפיס את זה ל-HTML שלך, אולי כי לעשות משהו שאתה לא מצפה. אז htmlspecialchars עובר על כל אלה דמויות שיש לי מיוחד מפגש ובורח להם. אז הוא מקבל הדפיס כטקסט אתה רוצה לראות, ולא דופק את ה-HTML שלך. אנחנו קראנו לפונקציה שבכותרת. והרבה אנשים שכחו קורא לפונקציה זו ב קוד שאתה כותב. כך, לדוגמא, אם שם המניה היה סוגר זווית בזה ואתה שכחת כדי לקרוא לפונקציה זו, זווית ש סוגר יכול היה לזרוק את מה HTML שלך נראה. אבל קורא בפונקציה זו תימלט כי אז זה בעצם מדפיס כמו סוגר זווית ולא לזרוק את קוד ה-HTML שלך. מאותה הסיבה שראינו, לפעמים, לוכסנים לפני מרכאות כפולות ב שורת printf בגלל שאנחנו לא רוצים מרכאות כפולות במורד החוט. אנחנו רוצים להדפיס אותם אל המסך. אז כל זה הוא אותו הרעיון. האם זה עונה על השאלה שלך? קהל: סוג של. ג'ייסון הירשהורן: האם אתה יש מעקב? קהל: אני מניח שהזרקת SQL התקפה יש לעשות עם זה? אני לא מבין איך שתיים הם קשורים. למה שתעשה את specialchars? ג'ייסון הירשהורן: אוקיי, אז SQL התקפת הזרקה היא כאשר אתה מזריק כמה מחרוזות זדוניות לתוך של מישהו תכנית, והם פשוט לקחת את זה ולהפעיל שאילתת SQL עם מחרוזת אתה נתת להם. כפי שאתם יכולים לראות כאן למטה, כי יכול להיות בעייתי. אז כפי שאתה למנוע נגד שהוא אתה לוקח את המחרוזת שלהם שהם נותנים אתה - כך מחרוזת זה ממש כאן - ולך לטהר אותו. לך לברוח כל הדברים ש הם פוטנציאל בעייתי. אז אתה לא לפרש אותם כדבר זה אומר משהו. ודוגמה לכך עם HTML הוא פונקציה זו. אז זה אותו הרעיון כאן. ואני רק מראה לך אחר דוגמאות כאשר יש לך ראה את הרעיון הזה בעבר. להימלט קלט משתמש לפני ההדפסה אותו למסך או לשים אותו בתוך משפט SQL. קהל: אז במקרה הזה, המשתמש הוא מתעסק עם המתכנת. ג'ייסון הירשהורן: כן. עם כל התקפות אבטחה אלה, זה תמיד בדרך כלל למשתמש, או מישהו, מנסה בלגן איתך, המתכנת. ואלה הם דרכים שאתה יכול מניעה נגדם. קהל: אז יש לי שאלה על פונקציות חשיש. ב1 חידון מ2011, יש שני שאלות על אלגוריתמי Hash חד צדדיים. ואני רק תוהה מה זה אומר. ג'ייסון הירשהורן: אוקיי, איזה שאלון? 2011? קהל: כן. קהל: 1 חידון? קהל: [לא ברור]. זה כמו ליבון סיסמא. זה לא לשים דברים - ג'ייסון הירשהורן: מה דף זה היה? קהל: אני חושב שזה היה 9 או 10, או שניהם. ג'ייסון הירשהורן: בסדר, קדימה, קורט. אתה יכול לענות בזמן שאנחנו נראים. קהל: אני חושב שזה מדבר על ליבון סיסמא. כמו, כאשר מישהו נכנס סיסמא, שלך להפוך אותו למשהו מוצפן. זה חשיש הסיסמה, שהוא שונה מפונקציית hash כי מכניס משהו לשולחן חשיש. ג'ייסון הירשהורן: בוא נראה. תנו לי להרים את מה שהם לתת את התשובה. ואז לעבור את זה. אז קורט נתן דוגמא מצוינת של הצפנה לכיוון אחד. כשראינו את זה בעבר, אנחנו לקחת את הסיסמה ולהפוך - זוכר, בסט עמ '7, אולי מישהו יש סיסמא שרק סיסמא, אבל אז הוא מקבל מוצפן לתוך משהו באמת ארוך. ההצפנה לכיוון אחד אומרת שזה קל מאוד לעבור מדרך אחת לשנייה, אבל זה מאוד קשה לעבור מ אחרת בדרך חזרה. ואז אתה יודע, כשאתה בודק סיסמאות של אנשים בבעיה נקבע 7, היית לוקח שלהם - כך, למשל, אומר שהם רוצים לשנות את הסיסמה שלהם, אתה שואל אותם לסיסמא הישנה שלהם. לקח לך את הסיסמה הישנה שלהם. אתה מוצפן זה. ולאחר מכן בהשוואה שתי ההצפנות במקום unencrypting המקורי אחד, כי זה באמת קשה ללכת בדרך הזאת. כן. קהל: איך בעומק עושה הבנה של Telnet צריך להיות? ג'ייסון הירשהורן: אם זה הוזכר בקצרה בהרצאה, רק קצר הבנה. שוב, חזרה לתשובה לשאלתו של אבי - יותר הדברים לבוא, כך סביר יותר זה מה שאתה צריך להיות סופר מכיר אותם. אם הם רק באו בהרצאה, זה רק מקום אחד. אבל אם הם באים בהרצאה, סעיף, ולהגדיר את הבעיה, אז אתה כנראה צריך להיות סופר מכיר אותם. אז היה לי שאלה מ קודם לכן על - כלומר היה נפילה 2010 - חידון 1, בואו להרים את - שאלה זו על ערימות ותורים, זה מה שעשיתי לבלות מעט זמן מדבר על בהרצאה, אפילו למרות שאנחנו לא באמת אי פעם פגע בו בסעיף. אז שאלה זו היא נותנת לך סדרה של פקודות ושואל אותך מה מקבל מודפס במקרה זה. אז זו שאלה הגיונית לגמרי שאפשר לבקש מכם חבר 'ה, ולאחר מכן אתם צריכים להיות מסוגל לענות על זה. אז למה אתה לא מסתכל על זה ל30 שניות, ואז אם מישהו רוצה להציע את התשובות אליי, ו אז לעבור את זה. בסדר, שיש לו תשובה לשאלה 27? כן. קהל: האם זה 1, 2, 3, 3? ג'ייסון הירשהורן: נכון. 27 הוא 1, 2, 3, 3. אז בואו נסתכל על איך הגענו לזה. ראשית, אנחנו אומרים, אם ים הוא תור, מה מקבל מודפס? אז q הוא ראשון, את הראשון. ראינו את זה לפני. ראינו את התמונה של האנשים מחכה באפל חנות כדי לקנות מוצר כלשהו. האנשים הראשונים בהם האנשים יוצאים הראשונים. הדברים הראשונים בתור הם את הדברים הראשונים. אז אם אנחנו דוחפים משהו לתוך תור, אתה דוחף את 1, אז אנחנו קופצים 1. פופ רק אומר להוציא. במקרה זה, פשוט לקחת משהו. אנחנו לוקחים את הראשון דבר, זה 1. אז אנחנו נשים את דברים שאנחנו להדפיס את כאן. כבר לא זה בתורנו. ואז אנחנו דוחפים ב2 ו 3, ו אנחנו קופצים מהדבר הראשון. שוב, בגלל שזה תור. אז אנחנו מקבלים 2, אז אנחנו שמים על זה 3 וקוראים לפופ שוב. 3 שלנו הוא ראשון. ואז הייתה לנו חבורה של שלמה דברים אחרים ושיחת פופ. אבל שוב, שכן מדובר בתור, ראשון ב, יוצא ראשון. אנחנו לוקחים את הדבר הראשון שאי פעם היה מכניס פנימה זה 3 שלנו. וגם, במקרה הזה, אנחנו לא תדאגו על כל אותם דברים אחרים. אז זה אם זה תור. כל שאלות על תור? הערימה של שונה. מה היא ראשי התיבות יש לנו להבנת ערימה? קהל: אחרון נכנס, ראשון יוצא. ג'ייסון הירשהורן: LIFO, אני חושב. האחרון נכנס, ראשון יוצא. אז ראינו דוגמא של מחסנית מגשים בחדר אוכל. לא משנה מה הוא מגש על גבי מקבל הרים. ואז אם מגשים חדשים מגיעים ב, הם מקבלים לשים על ראש. ואז מה הוא על עליון מקבל הרים. אז אלה מגשים בכח התחתון להישאר שם לזמן מה. במקרה כזה, שוב, אנחנו לצייר את זה. אנחנו דוחפים על אחד, כך שאף אחד הוא ראשון בתור. ואנחנו קופצים משהו כבוי. ויש רק דבר אחד שם, כך אנחנו עוברים 1 כאן למטה. ואז אנחנו שמים על 2 ו -3 ו אנחנו קופצים משהו כבוי. אבל שוב, שכן מדובר בתור - או שזה ערימה, ולא - אנחנו לוקחים את כל מה שהיה במקום האחרון. לא משנה מה הוא באחרון יוצא ראשון. ו -3 הוא שבעבר. אז אנחנו שמים 3 שם למטה, ולאחר מכן אנחנו שמים על 3 אחר ואנחנו צץ משהו שוב. לבסוף, אנחנו שמים על 4, 5, 6, ו -7, והנה אנחנו קופצים. ובגלל שזה ערימה, אנחנו לוקחים כל מה ששם שבעברה ולכתוב כי כאן למטה. אז אנחנו בסופו של דבר עם 1, 3, 3, 7. האם יש למישהו שאלות על ערימות או תורים, או דוגמא זו? על אישור. בואו נחזור לרשימה של נושאים. לא ככה, בדרך זו. איזה עוד שאלות יש לאנשים? קהל: אני לא יודע כמה חשוב זה הוא, אבל אני היה מבולבל הבדל בין סוגים שונים של שפות כמו סימון, הידור, פירש. ג'ייסון הירשהורן: זה שאלה טובה. אני חושב שזה חשוב במידה מסוימת, אז בואו נלך על זה במהירות. השפות הגדולות שראינו עד כה הם C, PHP ו-JavaScript, במונחים של שפות תכנות. HTML, כפי שציינת, אינו שפת תכנות. זה שפת סימון. ואז יש לנו ב-CSS, שגם הוא לא שפת תכנות. כן, אנו רואים SQL, וזה לא שפת תכנות או. אז SQL מאפשר לך לכתוב שאילתות למסד נתונים. HTML הוא שפת סימון. היא מגדירה איך דברים בנויים. ו-CSS מאפשר לך לעצב את הדברים. זה כנראה המידה על מה שאתה צריך לדעת על שלושה אלה. אבל זה יותר מעניין לדמות את ההבדלים בין C, PHP, ו-JavaScript. אז אחד ההבדלים הגדולים ביותר, כפי שציינת, הוא איך הם מלוקט, או מה שלא שווה הערך הוא. אז C הוא הידור. אנחנו תמיד היינו רצים מהדר. ולאחר מכן שבו הן הטעויות שלך כאשר אתה מפעיל את מהדר C? איפה זה יראה לכם את שגיאות בקוד שלך? איך אתה יודע שיש שגיאה בקוד שלך ב-C? קהל: זה מראה לך בטרמינל. ג'ייסון הירשהורן: זה מראה לך ב מסוף כאתה קומפילציה. ואם יש שגיאות, זה לא ממש לעבד אותו. אז אתה יודע שיש שגיאות תקין משם, לפני זמן, לפני שאתה אפילו להריץ הקוד שלך. כמובן, אתה עלול להפעיל את הקוד שלך ו לקבל אשמת פילוח, אבל זה היה כנראה בגלל שאתה עשית כמה דבר היגיון טיפשי. אבל הקוד שלך עם טכני הכל נכון ויכול לרוץ. אז קוד C מקבל מלוקט מבעוד מועד. מה לגבי קוד PHP? איפה הייתם שגיאות בקוד PHP שלך? איך אתה יודע שהייתה לך טעויות בקוד PHP שלך? קהל: זמן הפעלה? ג'ייסון הירשהורן: כן, כאשר אתה יהיה להפעיל אותו, היית להפעיל את קוד ה-PHP בחלק האחורי. ואז היית להציג מסך. אתה יכול לראות כמה דברים בראש, אבל אז היית רואה, כאילו, כמה שולחן כתום, מכוער. וזה ייתן לך מספר קו ו למשל, בלה, בלה, בלה, את החומר הזה לא עבד. אז PHP מתפרש שורה אחרת שורה והוצא להורג בשרת. ואז התוצאה היא נשלח אליך. גדול. להורג בשורת השרת אחר שורה ולאחר מכן נשלח אליך. ואם יש שגיאה, זה ישלח השגיאה, אבל אולי יש לך לך קיבל כמה דברים מבעוד מועד. אז כמה זה אולי עבד, אבל מאוחר יותר, כמה דברים שכבר אין לי לא עבד. מה עם JavaScript? איפה ראה את שגיאות JavaScript? בעמ '8 שנקבע, כאשר יש לך שגיאה, איך אתה יודע? איפה זה יופיע? קהל: במסוף, בתחתית. ג'ייסון הירשהורן: ב קונסולה, בתחתית. זה ייתן לך גם מספר קו, וזה היה תופיע בתחתית. וJavaScript לא בוצע בשרת. JavaScript נשלח למחשב שלך, ואז כשהגיע זמן להפעיל את JavaScript, JavaScript היה להפעיל שורה אחרת שורה על לקוח, בצד שלך. לא בשרת, בצד הלקוח. ובאופן דומה, זה היה להפעיל שורה אחרת שורה. ואז כשאתה מקבל הודעת שגיאה, זה היה מופיע בתחתית. באופן דומה ל-PHP, חלק מזה אולי לבצע, ולאחר מכן אתה יכול לקבל שגיאה בשלב מאוחר יותר. כמו כן, שלא כמו PHP קטן, אם יש לך שגיאת JavaScript - אומר שלא עשה לך את הזכות קוד לתיבת התראה - אתה יכול להמשיך לרוץ בתכנית שלך. תיבת ההתראה לא תעבוד, אבל התכנית שלך תהיה בסדר. רק אולי פונקציה שתיכשל. אז יש כמה מהגדול ביותר הבדל במונחים של איך אלה שפות, או איך את קוד תכנות אתה כותב מוערכים באמת. יש גם הבדלים נוספים ב תנאי - ההבדל הגדול ביותר שראינו במונחים של משתנים בשפות השונות. אז מישהו יכול לתת לי את הבדל בין משתנים בשלוש שפות? כן. קהל: ב C, שהם הקליד בקפדנות. בשני האחרים, שהם הקליד באופן רופף. ג'ייסון הירשהורן: ו מה זה אומר? קהל: זה ב-C, אתה צריך להצהיר על הסוג של משתנה כאשר אתה מצהיר משתנה, כמו interbool או char. ג'ייסון הירשהורן: מצוין. ב-C, תמיד היו לנו לשים סוג של משתנה. ואנחנו לא באמת יכולים לערבב בין סוגים. אתה לא יכול לעשות מספר שלם בתוספת מחרוזת. אבל כפי שראינו בשני אלה שפות, אתה בעצם יכול לערבב סוגים, ואתה אף פעם לא באמת צריך לתת משהו מסוג, אף פעם. אז איך אנחנו יודעים דברים משתנים ב-PHP ו-JavaScript? קהל: ב PHP, הם מתחילים עם סימן דולר. ב-JavaScript, כאשר אתה מצהיר אותם, אתה צריך שתהיה לי בר. ג'ייסון הירשהורן: נכון. אז ב-PHP, הם מתחילים עם סימן דולר. ב-JavaScript, הם צריכים שיהיו להם לברים, למרות שלפעמים הם לא ממש צריך שיהיה לי בר. אבל זה נכון. אז זה הבדל גדול בין משתנים. אני חושב שאלו הם ככל הנראה, את החלק העליון של הראש שלי, שתי הגדול ביותר הבדלים בין אלה שלוש שפות. אבל, כן. קהל: ואת ההיקף של משתני C מוגבל לסוגריים המסולסלים, שבו האחרים, זה בדיוק כמו, הוא מת אם זה בפונקציה בלבד, אבל חוץ מזה, שלמענם - ג'ייסון הירשהורן: נכון. אז היקף הוא מעט שונה בC. כמו אתה זוכר, סוגריים מסולסלים מגדירים ההיקף של משתנים. אז אם זה הוגדר בתוך אם מצב, שנמצא בתוך ללולאה, משתנה קיים שם בלבד. ב-JavaScript, אם משתנה מוגדר בתוך אם מצב - בתוך הלולאה for - זה יהיה קיים עבור תפקוד זה, אבל זה לא יהיה קיים מחוץ לתפקיד זה. אז ההיקף הוא קצת יותר גמיש ב-JavaScript ו-PHP. זה עונה על השאלה? בסדר, כל שאלה אחרת? אנחנו יכולים לעשות עוד ארבע דקות שאלות, ולאחר מכן אנחנו קופצים לקידוד. קהל: אנחנו יכולים ללכת לאייאקס ולדבר על מה זה? ג'ייסון הירשהורן: שוחח עם אבי לאחר. הוא שאל את השאלה הזאת קודם לכן. קהל: רע שלי. ג'ייסון הירשהורן: אין בעיה. קהל: מה זה בדיוק JSON? ג'ייסון הירשהורן: מהו JSON? מה השאלה שלך? קהל: רק ממש מהר, ההבדל בין הדפסה והד ב-PHP. ג'ייסון הירשהורן: למה שלא google ההבדל בין ההדפסה והד? הבדל קטן. לא כל כך גדול של עסקה. אבל אתה בהחלט צריך google את זה, ושאתן לך תשובה טובה. JSON, כנראה גדול יותר של עסקה. מעמדים לסימון אובייקט JavaScript. וכשראינו בשימוש JSON? מתי ראית את - למה שאתה אפילו יודע את המילה JSON? כאשר יש לך ראית את זה? קהל: כאשר אנחנו מקבלים מחירי מניות למימון. ג'ייסון הירשהורן: אז אתה ראית זה כאשר אתה מקבל מחירי מניות למימון. ולמה אתה לא רואה את זה? קהל: כשהיינו באחזור את כל המידע ש בא בפורמט זה. ג'ייסון הירשהורן: אז היית מקבל - כן. קדימה. קהל: [לא ברור] מידע מתוך אובייקט? ג'ייסון הירשהורן: שני אלה יחד היא התשובה אנחנו מחפשים. אתה רוצה מידע מ דף אינטרנט אחר זה. והיית מקווה שכאשר אתה מקבל את המידע הזה, זה יהיה שהוצג לך בסוג כלשהו של פורמט סטנדרטי. כולם בוודאי מכיר עם ערכים מופרדים בפסיקים. ניתן לייצא את גיליון אלקטרוני או Excel כל סוג של גיליון אלקטרוני כרשימה של ערכים מופרדים בפסיקים. והפסיקים כל מחלקים תחומים השונים. JavaScript סימון אובייקט - JSON - הוא סוג אחר של אחיד פריסתם של דברים. וזה לעתים קרובות איך לאחזר מידע משאילתות אייאקס. אז במקרה הזה, יש לנו את זה מאתר יאהו. הם חוזרים לדברים שלנו באובייקט JSON. ואז אנחנו יודעים, כי זה סטנדרטי, מה זה הולך להיראות. אז אנחנו יכולים לחזר באמצעות המערך שחזר אלינו, המערך של אובייקטים שחזרו אלינו. אנחנו כנראה צריכים לדעת את המפתחות, אבל הם בדרך כלל לתת לך תיעוד באתר כאשר אתה שולף כמה JSON סימון עבורם. כמו כן, אתה יכול JSON לקודד אובייקט. אז יש פונקציה JSON מדגיש לקודד. ואז אתה יכול לקחת אובייקט ש שיצרת, JSON לקודד אותו, ו להעביר את זה הלאה למשהו דבר אחר, אם אתה רוצה. ולפענח JSON קיים גם עבור מטרה דומה, או עבור המטרה ההפוכה. קהל: האם אנחנו צריכים לדעת קידוד לשולחנות חשיש וניסיונות? או שאנחנו פשוט צריכים להבין איך שהם רגילים, מושגית? ג'ייסון הירשהורן: אז, להרים את היד שלך אם עשית את שולחן חשיש עבור p להגדיר 4 עם רשימת קישור. או p להגדיר 5. אז זה היה רוב מכריע של אנשים. P להגדיר 5, 6, מי יודע. לפני זמן רב. אז הרוב המכריע שלך עשה חשיש שולחנות עם קישור ברשימות. ובגלל זה כנראה יותר גישה נפוצה, ובגלל שאנחנו בילינו הרבה זמן לעשות את קישור רשימות וחשיש שולחנות, אתה כנראה צריך להיות די מכיר איך קוד שולחן חשיש ורשימת קישור. ואם אתם חושבים לחזור לבעיה ש נקבע, זה לא היה באמת קשה כמו שציפית. והיה הרבה פחות קוד ממה שציפית. הייתי אומר שאתה צריך לדעת איך ל קוד טבלת גיבוב או רשימת קישור. לא שהיית שאלת את זה, בהכרח, אבל אתה צריך בוודאי יודע את זה. כמו כן, אם אתה מסתכל דרך חידוני עבר, יש כבר הרבה שאלות על כתיבת פונקציות על קישור רשימות או רשימות כפליים למדד. נראה כי כדי לבוא שנה אחת בכל. נכון להכניס ברשימת קישור, נכון למחוק מרשימת קישור, נכון להכניס לרשימה כפליים צמודה, וכולי. אז זה, אני מרגיש די בנוח אומר שאתה צריך לדעת את זה. לניסיון, הייתי אומר שאתה צריך בהחלט יודע איך זה עובד, ואולי לתת כמה pseudocode לאיך לקוד זה ולהגדיר אותו. אבל זה לא יהיה הדבר הכי גרוע ב העולם אם אתה לא יודע איך קוד זה ב C. זה יהיה נהדר אם אתה ידעתי איך קוד זה ב-C, אבל אני חושב כנראה pseudocode בשביל לנסות היית להיות הכי היית צריך לדעת בלנסות. קהל: אשראי נוסף? ג'ייסון הירשהורן: ואותו דבר עם, אם אנחנו להיכנס לעצי חיפוש בינארי, ייתכן צריך - ושראית בעבר, שעשינו הרבה - אתה יודע איך עץ החיפוש בינארי עובד. אתה כנראה צריך להיות מסוגל להגדיר אחד מהם בקוד פסאודו. אבל מכיוון שהרוב המכריע של אנשים לא עשה את זה על הבעיה קבוצה, אני הייתי אומר שזה כנראה פחות חשוב כי אתה יודע איך קוד ולהגדיר את עץ כזה. יש עוד שאלות? כמו כן, אנו יכולים לשאול אותם בכל כמו שאנחנו הולכים דרך כמה בעיות. אוקיי, אנחנו הולכים הלאה. דלג על שקופית זו לעת עתה. אם כבר מדברים על עצים, כי הוא ראשון שאלה יש לי בשבילכם. מכיוון שמדובר בבעיה. הייתי אומר שזה סביר מאוד להניח שתצליח מקבל בעיה כזאת על החידון שלך מבקש ממך הקוד איזה סוג של הכנס, למחוק, חיפוש, לסוג אחד של מבנה הנתונים שראינו. שעולה בכל שנה ובילינו הרבה זמן המחצית השנייה של סמסטר הולך על סוגי נתונים אלה. אז עכשיו, אני כבר הוגדר צומת בעץ חיפוש בינארי. ומה הייתי רוצה שתעשה הוא נתון עץ חיפוש בינארי שמתחיל בשורש כוכב הצומת הזו, להשלים את יישום של הפונקציה להלן, אשר קורה להיות פונקצית חיפוש. ולעשות את זה עם ובלי recursions. אז אני רוצה שתכתוב את שתי פונקציות. אחד עושה את זה עם רקורסיה, אחד עושה את זה ללא רקורסיה. ואין להניח כי השורש יהיה שאינו ריק. אז אנחנו מחפשים את המספר השלם i ב העץ מתחיל בשורש, ואנחנו צריכים לכתוב את זה באופן רקורסיבי ואיטרטיבי. כן. קהל: אז אתה רוצה אותנו להחזר אמיתי אם אנחנו מוצאים אותו, ושקר אם לא מוצא את זה. ג'ייסון הירשהורן: איך אתה יודע? איך אתה יודע את זה? קהל: אני שואל ראשון, אבל הייתי בהנחה, כי זה אומר בול ב תחילת הפונקציה. ג'ייסון הירשהורן: נכון. זה אומר בול, אז אני אפילו לא צריך להגיד לך מה אני מצפה ממך לחזור כי זה כתוב שם. אבל זה נכון. לחזור, אמת או שקר. אז לפני שתתחיל, אני ממליץ, אם אתה לא מכיר עצי חיפוש בינארי, ציור במהירות תמונה שלו כדי לקבל שלך הבנה, נכון. זה גם יעזור לך בעת הכתיבה הקוד שלך ולבדוק אותו. שוב, גם אין לך כל כך הרבה זמן על החידון כדי לעשות את כל הדברים אנו מבקשים מכם לעשות. אז כתיבת קוד פסאודו מאוד עוזר. ואנחנו בדרך כלל נותנים כ - אם pseudocode הוא מושלם נכון, זה בדרך 50% על שאלה. אז זה לא שלטון חזק ומהר, אבל אם אתה פשוט כותב pseudocode וזה נכון, זה בדרך כלל 50%. אז תמיד הייתי ממליץ - אם אתם לחוצים בזמן, או אפילו אם אתה רק מנסה להבין את זה - החל מpseudocode. ולבסוף, אם אתה יכול לכתוב את זה כל ב-C, זה יהיה פנטסטי. אז בואו לקחת שלוש דקות לעבוד על תכנית זו. ואז אנחנו הולכים לכתוב pseudocode על זה רק פעם אחת, ולאחר מכן אנחנו הולכים לקוד זה באופן רקורסיבי ולאחר מכן איטרטיבי. אם יש לך שאלות, מרגיש חופשי להרים את היד שלך. שמח להסתובב ולענות עליהן לפני שאנחנו מתחילים כקבוצה. תן לנו לחדש, ואנחנו הולכים pseudocode הגרסה רקורסיבית של זה, ואז תוכל לקודד אותו. אז פונקציה רקורסיבית צריך שני דברים. זו יכולה להיות שאלה ש אתה יכול להישאל. צריך שני דברים. מי יכול להרים את ידם ויגיד לי מה שני דברים רקורסיבית פונקציה צריכה? על פי הגדרה יש לו שני דברים. מה הם שני הדברים האלה? ידיים חדשות. כן, אלדן. קהל: אז אני לא בדיוק בטוח אם זה המינוח, אבל - ג'ייסון הירשהורן: אני שמח אתה מרים את ידך. קהל: הוא זקוק למקרה בסיס, ואת זה צריך צעד רקורסיבית. ג'ייסון הירשהורן: מושלם. הוא זקוק למקרה בסיס ו צעד רקורסיבית. אז מה מקרה הבסיס שלנו כאן? קהל: שורש F שווה שווה אפס. מצטער, רק בpseudocode, אם זה ריק. אם השורש הוא null. ג'ייסון הירשהורן: אם השורש הוא null. זה מצוין. זה מקרה הבסיס שלנו. זה מה שאנחנו הולכים כדי לבדוק בכל פעם. ומקרה בסיס הוא דבר ראשון שאתה עושה. אם אתה מכה את מקרה הבסיס, סיימת. עכשיו אנחנו צריכים הקריאה רקורסיבית שלנו, והייתי מוכן להתערב שאנחנו צריכים כמה רקורסיבית קורא כאן. בגלל שזה עץ, ואנחנו אפשר ללכת בדרכים מרובות. אז אם השורש הוא ריק, אנחנו טובים. מה אתה מציע? ועכשיו אני הולך להתחיל לקרוא את עליכם, כי אני יודע שחבר 'ה כולנו יודעים את זה. אבל אנני, מה צריך השורה הבאה תהיה? מה אם מצאתי את זה? מה אנחנו עושים? קהל: אם מצאתי את זה? ג'ייסון הירשהורן: או מה צריך להיות, כי - תן לי את pseudocode עבור קו שבו מצאנו אותו. קהל: אם אני שווה אני שורש? ג'ייסון הירשהורן: ו אז מה אנחנו עושים? קהל: החזר אמיתי. ג'ייסון הירשהורן: נהדר. אז אם אני הוא אני - אה, הם נקראים i שניהם. שמקבל מבלבל. אבל אם אני הוא אני חוזר אמיתי. זה כנראה הבא דבר שאנחנו צריכים לעשות. הגיוני. אוקיי, עכשיו יש לנו לא עשינו רקורסיבית קורא עדיין, כי, כי רקורסיבית שיחה הייתי קוראת לפונקציה זו שוב. אז מה צריך הבא קו של pseudocode להיות? אנה. קהל: בצד השמאל. ג'ייסון הירשהורן: להיות ספציפי, אם כי. זה עץ חיפוש בינארי, אז מה אין בדיקה בצד השמאל כרוכה? קהל: אז צומת - אני מצטער, שורש. ולאחר מכן חץ שמאלי. צומת, צומת, מצטער. אני לא קורא את זה כמו שצריך. זה נקרא צומת, נכון? ג'ייסון הירשהורן: זה ייקרא שורש בתפקיד זה, אבל בכל מקרה. בצד השמאל - כן? קהל: אם זה לא שווה אני, אז אנחנו הולכים לקרוא הפונקציה שוב? ג'ייסון הירשהורן: נכון. אם זה לא שווה לי, אנחנו הולכים כדי לקרוא לפונקציה שוב. אבל מה הצד השני של העץ אנחנו הולכים כדי לקרוא לפונקציה שוב? קהל: בצד השמאל. ג'ייסון הירשהורן: אנחנו לא תמיד הולך לקרוא אותו מהשמאל, אם זה לא שווה את זה. קהל: אה, סליחה. התקשר בצד הימין. ג'ייסון הירשהורן: אנחנו רוצים לדעת באופן ספציפי, אם כי - זוכר, ב עץ חיפוש בינארי, הכל כדי בצד שמאל הוא קטן יותר. הכל בצד הימין הצד הוא גדול יותר. אז זה פשוט לא - כן, קדימה. קהל: אם זה פחות ממה שאני, ולאחר מכן - אם זה בצד השמאל - ג'ייסון הירשהורן: אז אם רי הוא פחות מ - כך שאם המספר שלנו הוא פחות ממה שאני, באיזה צד אנחנו רוצים ללכת ל? קהל: אנחנו רוצים ללכת לצד ימין. ג'ייסון הירשהורן: אנחנו רוצים ללכת - תן לי לצייר עץ מהיר. אם זה 5, זה יהיה 3. אז אם רי הוא פחות מחמישה, מה צד שאנחנו רוצים ללכת ל? קהל: סליחה, מה? ג'ייסון הירשהורן: המספר שלנו הוא פחות מהמספר שאנחנו מסתכל על עכשיו. קהל: אה, אז אנחנו רוצים ללכת לצד השמאל. כן. סליחה. ג'ייסון הירשהורן: בדיוק. אין דאגות. בעץ חיפוש, הכל בינארי נמוך יותר הוא בצד השמאל, גדול יותר הוא בצד הימין. אז אם המספר שלנו הוא פחות מ i אנחנו בודקים - כי אתה רואה ב צומת, יש לי - אז אתה רוצה ללכת לצד השמאל. וזה קל. מהו אותו הקו השני של pseudocode אנחנו צריכים לכתוב? קרלוס? קהל: אותו דבר, אתה פשוט לעבור אותו ליותר מסימן וללכת לצד ימין. ג'ייסון הירשהורן: האם אתה יכול תגיד את זה עוד פעם אחת? קהל: אם המספר שלנו הוא גדול יותר ממני, ילך לצד ימין. ג'ייסון הירשהורן: מצוין עבודה על pseudocode. תן לנו לעשות את זה בקוד אמיתי. ושוב, יהיה pseudocode זה כנראה אקבל אותך, כי זה נכונים, 50% בשאלה זו. אבל pseudocode זה גם מתרגם אחד לאחד, בעצם, לקוד. אז תנו לנו לעשות את זה ב C. מי יכול לתת לי לי בשורה הראשונה של קוד? למעשה, ראשון, לפני שאני עושה זה, תן לי לעצור בצד - קהל: יש לי שאלה. למה לשנן שורה שנתתי לך? ג'ייסון הירשהורן: כי לא יכולתי לכתוב. אני לא יודע. אתה צודק. קו שצריך להיות שם. אוקיי, כאן היא הפונקציה שלנו. ותן לי לעצור בצד הדרך, גם, ההגדרה שלנו לצומת. מה קורה אם אנחנו לא לכתוב typedef? האם מישהו יודע? קהל: זה לא לקמפל. ג'ייסון הירשהורן: זה היית לקמפל, כן. קהל: האם זה רק להכריז על אחד למשל, במקום לעשות את זה חדש סוג אתה יכול להצהיר מרובה מקרים של? ג'ייסון הירשהורן: כדי שלא יודע - זה לא היית רק להצהיר סוג אחד. אתה עדיין יכול לעשות הרבה צמתים. קהל: אבל לא היה לנו ל לכתוב צומת struct בכל פעם? ג'ייסון הירשהורן: נכון. היית צריך לכתוב צומת struct בכל פעם, במקום רק צומת. אבל עם typedef, אתה רק יכול לכתוב צומת בכל פעם אחת. בסדר, שלא נתן - כן, Avica. קהל: אם שורש שווה שווה null, בתמורת שווא. ג'ייסון הירשהורן: נהדר, ו זה מקרה הבסיס שלנו. השורה הבאה של קוד. מישהו שלא נתן שלי שורת קוד עדיין? כן. קהל: אני חץ רוט שווה שווה ל i. ואז לחזור נכון. ג'ייסון הירשהורן: נהדר. השורה הבאה? כן. מישהו אחר? ואז אתה יכול ללכת הבא. קהל: Else אם חץ שורש הוא אני פחות ממני לחזור פונקציה שנקראת שורש למצוא - ג'ייסון הירשהורן: מצטער. קהל: שורש למצוא תשואה מצביע לשמאל פסיק i. ג'ייסון הירשהורן: אז אם רי הוא גדול יותר מ הדבר בעץ, אנחנו רוצים ללכת לשמאל? קהל: לא, לא היה לי שעבר. ג'ייסון הירשהורן: איזה? קהל: לא, כן. יש לי פחות מלחתום שם. ג'ייסון הירשהורן: נכון, אם רי הוא פחות ממה שהוא בשורש - השורש הנוכחי שלנו - אז אנחנו רוצה ללכת לצד השמאל. ומה השורה האחרונה, אתה? קהל: בעיקרון אותו הדבר, מלבד לעבור גדול או שווה פחות ומשמאל לימין. ג'ייסון הירשהורן: מצוין. האם יש למישהו שאלות על זה? אז כמה דברים אחרים שהייתם היה נכון הוא כי יכול להיות-ltiff. מניח, מבחינה טכנית, אף אחד מאלה באמת גם צריך להיות-ltiff. כמו כן, יש כנראה רק מקרה אחד כאן למטה. אז זה כנראה המקרה האחרון שלך. אתה אפילו לא צריך ש- ltiff. אבל כנראה טוב לכתוב את זה, שיהיה ברור. כן. קהל: אז אתה לא חושב שחידון - אם אנחנו עושים טעויות, למשל, בתחביר - שגיאות תחביר קטנות - איך זה לקבל נלקח בחידון? ג'ייסון הירשהורן: באופן כללי על החידון, שגיאות תחביר קטן או קטן שגיאות סגנון שלא יאבדו לך נקודות. אז אם אתה שכחת פסיק כאן, זה יהיה בסדר. אם שכח לסגור סוגריים זה, שיהיה בסדר. שגיאות תחביר ענקיות המשנות את משמעות תפקודית של הקוד שלך באופן דרמטי, אתה עלול לקבל המריא נקודות ל. או בדרך כלל, רק לדירוגך על האם או לא שלך פונקציות קוד, אפילו - לא העיצוב שלו כל כך הרבה, ולא הסגנון שלו. בואו עכשיו קוד איטרטיבי גרסה של ממצא. אז זה הולך להיות די דומה, אבל יש בהחלט הולכים להיות כמה הבדלים מרכזיים. עם זאת, pseudocode כנראה יכול ללכת - אנחנו עדיין יכולים לקחת שורה אחת של pseudocode ולהבין מה קו הוא במקרה זה. אז בגרסה חוזרת ונשנית, מה אתה חושב, ג'וליה, צריך להיות בשורה הראשונה? קהל: שוב, בבוליאני איטרטיבי, אתה צריך להגדיר ללולאה, נכון? ג'ייסון הירשהורן: אישור. קהל: אז בשביל כמו, k, עבור x שווה 0, x הוא פחות ממני. או לא, x הוא פחות מ גודלו של העץ. ג'ייסון הירשהורן: העץ. כך שאנחנו לא באמת יודעים את גודל עץ, ואנחנו לא באמת יודעים ל כמה פעמים אנחנו יכולים ללכת, אז מה סוג של לולאה שעשויה להיות שונה טוב יותר במקרה זה? קהל: אם אחר? ג'ייסון הירשהורן: אם אחר לא יכול להיות לולאה. אז מה סוג של לולאה רק אנחנו יכולים ללכת עד כמה מקרה הוא פגש? מה רק הסוג האחר של לולאה ב-C מלבד ללולאה? קהל: בעוד. ג'ייסון הירשהורן: אמנם, בדיוק. בלולאה בזמן, לא צריך לדעת איך - לולאה בזמן ועבור לולאה יכולה לעשות בדיוק אותו דבר, אבל דבר נחמד על לולאה בזמן היא שאנחנו לא צריכים לדעת עד כמה גדול העץ שלנו הוא. אז אנחנו מתכוונים ללכת עד מה? קהל: עד שזה שווה בגודל של - ג'ייסון הירשהורן: ובכן, זה מאוד בדומה למקרה רקורסיבית שלנו. אז - קהל: אמנם שורש אני עושה לא שווה. ג'ייסון הירשהורן: זה ממש קרוב. בעוד שורש i - בואו ננסה את זה. אני לא חושב [לא ברור] איפה אני שורש אינו שווה לי. אנחנו אולי צריכים לשנות את זה בקצת קצת, אבל זה נשמע כמו שזה די טוב, לעת עתה. אז אנחנו נעשה את זה. כמו כן, זכור, אנחנו לא יכולים להניח לכל השאלה. אתה לא להניח כי השורש יהיה שאינו ריק. אז מה אתה חושב מאוד דבר ראשון שאנחנו צריכים לעשות זה? קהל: פשוט לעשות את אותו הדבר דבר כמו קודם. אם השורש שווה שווה null, בתמורת שווא. ג'ייסון הירשהורן: נהדר. אז זה יכול להיות ריק. אז אנחנו רוצים להיפטר מזה מייד. ואז אנחנו הולכים לבדוק אם שורש אני עושה אני לא שווה. לכן, לומר שאנחנו מחפשים בעץ הזה עבור 3, שורש אני לא אני שווה, עכשיו אנחנו נמצאים בזמן שהלולאה שלנו. מה אנחנו רוצים לעשות? ושוב, זה הולך להיות יפה בדומה לגרסה רקורסיבית שלנו. כן. קהל: אז היית רוצה לחזר, או להמשיך את העץ כל עוד השורש הוא לא שווה ל null. כל עוד: ג'ייסון הירשהורן השורש הוא לא שווה ל null? קהל: מקף השורש i אינו שווה לריק. רק השורש, כן. כמו עוד השורש הוא לא שווה ל null. ג'ייסון הירשהורן: אז אתה רוצה כדי לשנות את זה לשורש עושה null לא שווה? קהל: כן. קהל: אנחנו יכולים לשלב אלה, נכון? אנחנו לא צריכים אם, בתחילה. ג'ייסון הירשהורן: אוקיי, אז אם לא אנחנו - אם לשלב אותם, ולכן אנחנו הולכים לעשות בזמן ששורש עושה null לא שווה, ו אם השורש קורה להיות null ב מתחיל, מה אנחנו עושים כאן? קהל: בתמורת שווא. ג'ייסון הירשהורן: נהדר. אז כנראה לשני הכיוונים היה עובד. זוהי דרך שונה, וזה משלב את זה. אבל שוב, אם עשית כך או כך, אנחנו לא הולך לקחת את עיצוב מצביע על החידון. אבל זה נראה טוב. אז בזמן שהשורש אינו שווה null, מה הוא ראשון דבר שאנחנו רוצים לבדוק? מישהו אחר? Null, מה הדבר הראשון? קהל: אם רי הוא פחות מ - הו, אני מניח, אם אנחנו כבר מצא אותו בשורש. אז הוא אם אני חץ שורש שווה ל i - ג'ייסון הירשהורן: סליחה? קהל: אם חץ שורש אני שווה שווה i - ג'ייסון הירשהורן: מה אנחנו עושים? קהל: החזר אמיתי. ג'ייסון הירשהורן: נהדר. ומה הלאה? ג'ף, מה השורה הבאה של קוד? קהל: אם אני הוא פחות מחץ שורש אני, אז שורש שווה שמאל חץ שורש. ג'ייסון הירשהורן: שווים רוט חץ שורש השמאל. אז זה כנראה הגדול ביותר הבדל כאן בזה איטרטיבי גרסה שבניגוד ל גרסה רקורסיבית. הגרסה רקורסיבית, אנחנו לקרוא לפונקציה שוב. אנחנו נהיה לעדכן את השורש כאשר אנחנו קוראים לפונקציה החדשה. הנה אנחנו לא קוראים לפונקציה חדשה. אנחנו פשוט רק מעדכנים שורש בפונקציה זו. זה מצוין. ומה היא השורה האחרונה של קוד? כן, מריו? קהל: שווים שורש Else חץ ימינה שורש. ג'ייסון הירשהורן: סליחה? שווים רוט: הקהל חץ ימינה שורש. ג'ייסון הירשהורן: אתה יכול גם לכתוב דבר כזה? קהל: אין לי מושג. ג'ייסון הירשהורן: אתה לא יכול. אתה לא יכול לעשות את שווים בתוספת. אוקיי, אז זה נראה טוב. למה שלא פשוט לעשות את זה כדי לנקות אותו. זה נראה נהדר, וזה יעבוד. והיינו לפרוץ החוצה. אם שמאל השורש היה ממש ריק או שורש היה ריק, היינו לבוא לכאן. שורש יהיה שווה ל null. היינו לפרוץ את הלולאה שלנו, והיינו בתמורת שווא. לכן, כאשר אנו לפרוץ את לולאה, אנחנו חוזרים שווא. ושוב, הלולאה בזמן שהייתה מושלמת כאן כי אנחנו לא יודעים איך גדול שלנו הוא העץ. ניסינו לכתוב ללולאה, אבל אנחנו הבנתי שיש לך להבין איך גדול זה מבעוד מועד. כן. קהל: אם זה לא היה בינארי עץ חיפוש, זה יהיה במתמטיקה-y האמיתי לכתוב את זה איטרטיבי, נכון? כאילו, אם זה היה עץ, אך לא בהכרח - אז זה לא היה כל קטן יותר בצד השמאל, וכל גדול יותר בצד הימין. זה יהיה קשה באמת כדי לחזר על זה, נכון? היינו צריך להציל את מה שהיה קודם לכן בעץ ולחזור, ודברים כאלה. ג'ייסון הירשהורן: אם זה לא היה בינארי עץ חיפוש, אם זה היה רק עץ ודברים שלא היו מסודרים ככה - והבנו שקודם לכן, כאשר אנה היה עוזר לנו, כי מה שהופך את ממוין עוזר לנו הרבה - היינו צריך, כן, שמור תמיד שבו היינו קודם לכן. אבל יכול להיות שיש הרבה שבו היינו previouslys. יכול להיות שיש הרבה צמתים הורה. כנראה הדרך הטובה ביותר לעשות זאת היית יהיה להמשיך לדחוף דברים על כמה סוג של מחסנית או תור. אף פעם לא היית צריך את הקוד הזה כי זה בעיה קשה. אבל אתה דוחף כמה דברים על ערימה או לעמוד בתור ואז צץ אותם, ו לאחר מכן להעריך אותם. ואז יש לי כמה דברים אחרים שבם אתה בעצם לשים את צמתים, ו לאחר מכן ליצור את זה, ולאחר מכן לחפש את זה. זה יכול להיות הדרך הטובה ביותר לעשות את זה. בסדר, כל שאלות על בעיה זו? קהל: זה בהקשר הזה. האם אנחנו צריכים להשוות פעמים לרוץ לשולחנות חשיש, בינארי עצי חיפוש, וכולי? ג'ייסון הירשהורן: כנראה. אז בואו נעשה את זה ממש מהר. זמן הפעלה לשולחן חשיש - מה הם אחרים? עץ בינארי? קהל: רשימות קישור. ג'ייסון הירשהורן: אוקיי, בואו נעשה את הכנס. מה הוא O הגדול של הכנס על שולחן חשיש? מה הן ההנחות אתה עושה? קהל: אתה מכניס ב תחילתה של רשימת הקישור. ג'ייסון הירשהורן: כנראה הראשון הנחה הן שאין התנגשויות. אם אין התנגשויות, ולאחר מכן זמן ההכנסה הוא אחד. אם יש התנגשויות, ואתה עושה שרשור נפרד והחדרת בתחילת רשימת הקישור, אז הכניסה היא גם קבועה. אם אתה עושה טבלת חשיש אבל אתה יש שיטה להתמודד שונה עם התנגשויות, מה שיטה אחרת? מה שלו בשיטה שונה להתמודדות עם התנגשות בשולחן חשיש? קהל: תכנות לינארי. ג'ייסון הירשהורן: תכנות לינארי. אז אנחנו הולכים להמשיך לחפש למקום הפתוח הבא. זה לא זמן הכנסה קבוע. אתה יכול לעבור את הטבלה כולה, כך ש יכול להיות O הגדול של n. כן. קהל: אחרת פשוט שרשור? ג'ייסון הירשהורן: עשינו שרשור נפרד. זה היה ראשון. זה מה שרשימת הקישור. שם המפואר הוא שרשור נפרד. זה יכול להיות כל סוג של מבנה רשימה אנחנו יקרו לעשות בקישור רשימה. אז שוב, החדרה על שולחן חשיש יכול להיות זמן קבוע. מה לגבי הכנסה על תור מערה? קהל: האם זה לא קבוע? ג'ייסון הירשהורן: הגיעו זמן קבוע. אתה פשוט דוחף אותו. על אישור. הוספה, מה שהיו אלה האחרים? עליו לנסות? מה הוא O הגדול של הכנסה בניסיון? קהל: אורך הוא קבוע. אורכו של הארוך ביותר - אורכה של המילה אתה מכניס. ג'ייסון הירשהורן: סליחה? חכה, אז מה לא שמע? אתה אמר - מה אתה אומר? מה הייתה התשובה שלך, מרקוס? קהל: האורך של המילה אתה מכניס בתווים, בהנחה שזה לנסות אופי. ג'ייסון הירשהורן: אוקיי, אז האורך של המילה. אנחנו נעשה את ההנחה כי זה מחרוזת של תווים. אמרת משהו שונה, אם כי. אתה אמר אורך המילה הארוכה ביותר. קהל: זה פשוט קבוע, נכון? ג'ייסון הירשהורן: למה שיהיה זה יהיה קבוע? קהל: כמו, אם אתה משתמש O הגדול סימון, אז זה לא ישתנה בהתאם על מספר הדברים ש כבר בלנסות. ג'ייסון הירשהורן: כך הייתי אומר שזה זמן קבוע. זוהי הכנסה קבועה, ו זה בגלל שהרעיון הזה - אומר שיש לנו מילה זה 45, או מילה זה 60, כי יש מספר קבוע. וזה הייתי רק להיות מוכנס בזמן קבוע. בפועל אם כי, זה לא יהיה, ללא ספק, לקרות באלפית שני אחת, למשל. אבל היינו אומר O הגדול הוא קבוע עבור לנסות. וזה אחד משלה היתרונות הגדולים ביותר. מה לגבי כניסה לרשימת קישור? רק רשימה כללית, מסודרים על קישור? כן. קהל: יש לי שאלה. בבדיקה, שהם אי פעם לשאול אותנו זמן החדרה זה ארבעה שלבים, או משהו? או שזה רק - כשאתה אומר זמן החדרה הוא אחד, זה רק אומר שזמן קבוע? ג'ייסון הירשהורן: כן, הם הייתם תמיד שואל, האם זה O הגדול של n? O הגדול של n יומן? N בריבוע קבוע. אלה הם באמת רק אלה שאתה צריך לדעת. מה לגבי כניסה אל מסודרים על קישור רשימה? קהל: יש לי שאלה - שאלה - ג'ייסון הירשהורן: מה היא התשובה לשאלה זו, אם כי? קהל: חכה, מה שאתה לא שואל? ג'ייסון הירשהורן: מה הוא O הגדול של כניסה לקישור רשימה ממוינת? קהל: אחד? לא להמתין, לא להמתין, n. ג'ייסון הירשהורן: נ 'חוץ קישור הרשימה. ומה הייתה השאלה שלך? קהל: אז היית כותב o של k או O של 1 ל-- ג'ייסון הירשהורן: אוה. הייתי כותב O של 1, ככל הנראה. היה מבנה נתונים אחר אחד זה היה טוב. עץ, עץ חיפוש בינארי. מה של הכנסה על עץ חיפוש בינארי? קהל: כניסה. ג'ייסון הירשהורן: אז, מה הוא הגרוע ביותר מקרה בעץ חיפוש בינארי? אז אם אנחנו לקרות כדי להתחיל בשעה 5, וכל מספר גדול מ 5, ולאחר מכן יש לנו 5, 7, 9, 11, וכולי. במקרה זה, זה בעצם רק קישור רשימה, ואנחנו צריכים להכניס את כל את הדרך בסוף. אז זה O הגדול של n. זה יכול להיות במקרה הגרוע ביותר שלנו על עץ חיפוש בינארי. ברור, אתה לעולם לא לבנות עץ חיפוש בינארי עם 5 ב באמצע, בידיעה 5 היינו להיות המספר הנמוך ביותר. אבל זה יכול להיות, אם אתה מתחיל מהתחלה. כל שאלות על זה לפני שאני תעבור לשאלה אחרת? זו הייתה שאלה טובה. אני יודע O הגדול של - קהל: מה על חיפוש במשך ארבעה אלה? ג'ייסון הירשהורן: בהחלט עשה חיפוש ומיון. אנחנו עשינו את כל האלגוריתמים האלה, נכון. חכו, זה היה עבור 1 חידון? היה שכיסה - האם כבר יש לך את זה שאלה ב -1 בחידון? זמן הריצה O הגדול של חיפוש בינארי, סוג ההכנסה, מיון בועות? קהל: כן. ג'ייסון הירשהורן: אם היה לך את זה שאלה בחידון 0, רוב הסיכויים הם שאתה לא תקבל את אותה השאלה מדויקת על 1 חידון. יכול להיות עדיין טוב לדעתם. כבר אתה צריך לקוות יודע GH. אבל runtimes לוגריתמים אחרת הם כנראה טובים לדעת. דברים שלא כוסו על חידון 0. כמו כל מפעילים אלה על סוגי נתונים מופשטים אלה. בסדר, בואו נמשיך הלאה. אחד זה צריך להיות די מהיר. וזו שפה חדשה שיש לנו לא למעשה מקודד בעבר. זה שואל את השאלה קוד ב-PHP. אז לשקול את מערך PHP להלן. לכתוב קודי PHP ו / או HTML כך שהוא פלטי שולחן שתי עמודות עם TFS שמות ובתים. אתה אף פעם לא עשית את זה קודם, בעיה ספציפית זו. אבל זה צריך להיות מאוד מוכר לי מה שעשית בבעיה להגדיר 7. אז אני יהיה מוכן להתערב איתך יהיה שאל את הקוד ב-PHP שמשהו דומה מאוד למה שאתה עשה בבעיה להגדיר 7. ראשית, המערך הוא לא כל כך ספציפי. איזה סוג של מערך זה? קהל: אסוציאטיבי. ג'ייסון הירשהורן: זה מערך אסוציאטיבי. ומה ההבדל בין מערך אסוציאטיבי ואובייקט? קהל: מערך אובייקט יש מדד של מספרים שלמים, ומערך אסוציאטיבי הוא מדד של מחרוזת, או משהו כזה. ג'ייסון הירשהורן: אז מערך של אובייקטים יהיו מדדים מספרים שלמים, אבל יש אובייקט שדות. יש לו שדות שמות אלה כמו שם, בית, תלמיד. האם יש לך רעיון? קהל: ובכן, אסוציאטיבי מערך הוא ב-PHP, נכון? ומטרה היא בJavaScript? ג'ייסון הירשהורן: בכנות, אין הבדל אמיתי בין שתיים. לשניהם יש מחרוזות כמו המפתחות, ויכולים יש בעצם כל דבר כערך. שפות שונות קוראים אחד מערך אסוציאטיבי דבר, דבר אחד אובייקט. אז בכנות, אין אמיתי הבדל, אבל יש בהחלט כמה הבדלים תחביריים בין שתיים. כן. קהל: אז הוא אובייקט גם מקודד תחת מכסה המנוע כשולחן חשיש, ולאחר מכן? ג'ייסון הירשהורן: מה אתה עושה כלומר, מקודד מתחת למכסת המנוע? קהל: נאמר לנו שאסוציאטיבי המערך היה מבחינה טכנית חשיש שולחן. אז גם הוא אובייקט מבחינה טכנית שולחן חשיש? ג'ייסון הירשהורן: אני לא הולך כדי לענות על שאלה זו. אני אחזור אליך בעניין הזה. אבל אני לא חושב על שני מאותם ככה. אבל, בכל דרך, ומערך אסוציאטיביים אובייקט, בדרך כלל, אנשים משתמשים אלו מונחים לסירוגין. במקרה זה, החלק מגניב הוא שאתה יכול להשתמש במקשים. מחרוזות כמו מפתחות, ולא רק מספרים פשוטים. אז אני כבר מדבר על זה לזמן מה. יש לקוות, יש אנשים שיש קיבלתי התחיל בזה. אנחנו הולכים לכתוב כמה PHP ו-HTML קוד, כך שאנו מקבלים שתי עמודות טבלה עם שמות TFS ובתים. בסדר, אני רוצה גם כותרת שורה בטבלה זו. אז אני הולך לקבל ישר לתוך זה. אנחנו הולכים להגיש, חדשים, ואנחנו הולכים - על אישור. איך אני מתחיל שולחן? מה התג, מיכאל, כדי להתחיל שולחן? קהל: טבלה. ג'ייסון הירשהורן: לוח. ואם אני פותח תג, מה עוד אני צריך? קהל: ראש? או, אני מניח, בכיתה. ג'ייסון הירשהורן: אז סליחה. תניח שאנחנו כבר כתבנו doctab, HTML, כל הדברים האלה. אבל אם אני פותח תג טבלה זו, מה עוד עליי צריכה לכתוב? ללאמת HTML? קהל: סגור אותו. ג'ייסון הירשהורן: סגור את התג. כיצד אוכל לכתוב תג קרוב לשולחן? קהל: דוט סלאש שולחן. ג'ייסון הירשהורן: סלאש שולחן, נהדר. כנראה הגיוני לכתוב שני של יחד אלה משום אתה חייב לעשות את זה. אוקיי, אם אני רוצה שורת כותרת, איך לעשות אני כותב שורת כותרת עם כותרות? קהל: האם זה פחות מ -10 קרובים לשעה - TR, כן. ג'ייסון הירשהורן: TR? קהל: ואז אותו דבר, הקו הנטוי, כן. ג'ייסון הירשהורן: אישור ו תן לי שתי עמודות. קהל: T D? ג'ייסון הירשהורן: אישור. אני רוצה שתי עמודות. האם זה נותן לי שתי עמודות? כמה טורים בזה? אחד. אז בואו להעתיק ולהדביק את זה. אז בעצם, בחידון, כל הקוד הזה שכתבנו עד כה היה למעשה נתן לך. אבל כנראה שאתה עדיין צריך יודע איך לכתוב את זה. כן. קהל: הבית שלך הוא בין שתיים. ג'ייסון הירשהורן: בום. זה צריך ללכת ישר לשם, נכון? שיחה טובה. אז שוב, את כל הקוד הזה הוא בעצם ניתנו לך על החידון בפועל. אבל זה כיף לכתוב את זה, ואתה צריך לדעת איך לכתוב אותו. אז זה מקום שבו אתה צריך כדי להתחיל את הקוד שלך. מה אנחנו צריכים לכתוב כאן? מצטער, אני צריך לשנות את שמו של קובץ זה. אז שמר את זה בקובץ HTML., לא בקובץ PHP.. הדברים האלה היינו חסרי משמעות בקובץ PHP.. אז אנחנו בקובץ HTML.. מהו הדבר הראשון אני צריך לכתוב? אני רוצה לשים קצת PHP קוד ה-HTML ב. קהל: PHP, כמו גזר אחר ו-PHP סימן השאלה, נכון? ג'ייסון הירשהורן: נהדר. ואיך אני עושה בסופו את זה? קהל: עם סימן שאלה. ג'ייסון הירשהורן: זה נהדר. זה הדבר הראשון שאני צריך אם אני רוצה לשים קצת קוד PHP בכאן. קהל:. חשבתי PHP קובץ יכול לקחת HTML. ג'ייסון הירשהורן: כן. קובץ PHP. יכול לקחת קצת HTML ולהיות מוצג. זה היה רע שלי. אני רק מנסה לחקות את מה זה היה בחידון. אוקיי, מצטער לבלבל אותך. כן, practice.HTML. עכשיו אנחנו הולכים לשים איזה קוד PHP פנימה מהי בשורה הראשונה של קוד PHP שאני צריך לכתוב? אני הולך לעבור את המערך הזה ולהפוך אותו לשולחן. כן. קהל: אתה יכול גם להשתמש עבור H לולאה או ללולאה. ג'ייסון הירשהורן: אוקיי, מה אתה רוצה להשתמש? קהל: הייתי משתמש בלולאה for. ל, ולאחר מכן אתה עושה את סימן דולר אני שווה 0 דולרים פסיק תחתום לי פחות מ 2. ולאחר מכן פסיק i דולר תחתום לי תוספת בתוספת. ג'ייסון הירשהורן: איך לעשות אתה יודע להשתמש 2? קהל: מכיוון שהיו שני מערכים אסוציאטיביים בתוך גדול מערך אסוציאטיבי. ג'ייסון הירשהורן: אז הדבר הגדול של לא מערך כלולה. הדבר הגדול רק מערך רגיל. אבל אתה צודק, יש שני מערכים אסוציאטיביים בתוך המערך הגדול יותר שלנו. זו הסיבה שאתה משתמש בשני. אני מרגיש שלא בנוח בהנחה כי הם 2, אז מה דרך לכתוב זה ללא הנחה שהם 2? קהל: [לא ברור]? ג'ייסון הירשהורן: בסדר, איך אתה כותב את זה? קהל: סימן דולר foreach TFS או TF סימן דולר כמו. ג'ייסון הירשהורן: אוקיי, אז לכל TFS כTFS, אני רוצה, עכשיו שוב, יש לי שולחן. אז מי יכול לתת לי השורה הבאה של קוד? קהל: הדפסה, ולאחר מכן ב ציטוטים, סוף TR הסוגר סוגר, סוף הציטוט. סוגריים סופו של דבר פסיק. ג'ייסון הירשהורן: אישור ו מה שהוא הולך לעשות? קהל: זה הולך לומר, שורה חדשה. זה הולך לשים לתייג לשורה חדשה. ג'ייסון הירשהורן: נכון, PHP זה, כמו דיברנו קודם לכן - זה PHP הולך להיות מוערך, ולאחר מכן זה הולך להדפיס לקובץ זה גרירה שולחן, ולאחר מכן כי HTML יוערך. אנחנו רק מעתיקים את זה HTML היו כאן אנחנו. כן. קהל: [לא ברור]? ג'ייסון הירשהורן: סליחה? זה ממש כאן. סתיו 2012. אל תסתכלו על התשובות, בואו נפתור את זה ביחד. אז אנחנו להדפיס שורה בטבלה. אז אתה כנראה ב התנופה של דברים. מה השורה הבאה של קוד שצריך לכתוב? אסאם, תן לי את השורה הבאה של קוד. קהל: אתה צריך את השם של TF. TF מרכאות סוגריים פתוחים שם סוגריים סגורים. ג'ייסון הירשהורן: תן לי את השם שלהם. קהל: אתה צריך להדפיס את זה. [קולות חציצה] ג'ייסון הירשהורן: בסדר, כיצד אוכל להדפיס אותו? [קולות חציצה] ג'ייסון הירשהורן: חסר לי משהו עכשיו. מה אני חסר? קהל: אתה צריך סימן דולר. ג'ייסון הירשהורן: מה אחר אני חסר? כל מה שהודפסנו עד כה הוא TR. קהל: סגור את TR אחריו. ג'ייסון הירשהורן: אז אנחנו צריכים כדי לסגור את TR אחרי. מי שרואה את מה שאנחנו מפסידים על קו 16? כן, אנה. קהל: אתה צריך לפתוח TD וסוגריים מסולסלים. ג'ייסון הירשהורן: ואיפה אנחנו לשים סוגריים מסולסלים? קהל: מסביב לשם TF. ג'ייסון הירשהורן: כמו זה? קהל: כן. ולאחר מכן לסגור את td. ג'ייסון הירשהורן: כמו זה? קהל: האם אתה זקוק לציטוט כפול סימנים הבאים לסוגריים המסולסלים? ג'ייסון הירשהורן: ממש כאן? לא, אתה לא. אז זה בדיוק נכון. כן. קהל: אז ההבדל בין זה וencatenating עם נקודות הוא, אם אתה משתמש בנקודות, היית צריך שתהיה לי מרכאות כפולות, ולאחר מכן נקודה, אז הנקודה - ג'ייסון הירשהורן: נכון. אז אתה אומר שיש אולטימטיבי צורת כתיבה זו ככה. מה אופרטור השרשור ב-JavaScript? קהל: סימן הפלוס. אתה שכחת לשים מתולתל לייצב בחזרה. ג'ייסון הירשהורן: נהדר. ויש שורה אחת יותר קוד חסר. מי יכול לתת לי את השורה האחרונה קוד שאנחנו חסרים? קהל: פשוט בדיוק אותו דבר, רק עם בית במקום שם. גדול ג'ייסון הירשהורן: נהדר. והתחביר שלך הוא בדיוק מתאים לי מקבל דברים במערך חברה כלולה. אז בחידון בפועל, אתה למעשה ויתר עד כאן. אז קוד זה ניתן לך. כל מה שאתה הייתי צריך לכתוב היו אלה ארבע שורות ולזכור לסגור את תג הטבלה. אתם בעצם עשו כל זה ועוד. כן. קהל: אז זה יהיה פונקציונלי אותו הדבר אם אתה פשוט היה שכל ב שיחה אחת גדולה הדפסה, נכון? ולאחר מכן רק בשרשור אותו, וכולי? ג'ייסון הירשהורן: כמו זה? קהל: כן. זה פשוט לא ייראה טוב אם היית מסתכל על זה כשאתה בודק האלמנט באתר שלך, נכון? ג'ייסון הירשהורן: אני מסכים. אם אני טעון דף האינטרנט הזה, שאני אהיה תוכל לראות את קוד PHP הזה, אי פעם? קהל: לא. ג'ייסון הירשהורן: מס ובעצם, לא הייתי. קהל: זה לא ה-HTML, נכון? כך שאתה עלול להיות מסוגל - ג'ייסון הירשהורן: אז PHP זה היית להיות מוערך בצד שרת. PHP תמיד מוערך בצד שרת, ולכן אתה לעולם לא תוכל לראות את קוד ה-PHP. קהל: אבל אתה רוצה להיות מסוגל לראות את התוצאה של הדפסים. ג'ייסון הירשהורן: נכון. וזה אולי לא ביושר לשים את הכל על הקו. זה יכול לעצב אותו בצורה יפה בשבילך, או שזה יכול לשים אותו בשורה אחת. לא ברור. אבל כן, נקודה טובה. קהל: איך יש אין הדגשת טקסט עבור כל אחת מפקודות PHP? כי אני זוכר שראיתי את זה. ג'ייסון הירשהורן: כי זה . קובץ HTML כאן בחלק העליון. הנה לך. קהל: אם הייתי עושים את השיטה הראשונית עם לולאות, נכון, אם אנחנו רציתי לגשת TFS, היית עושה לנו לעשות סוגר TFS 0 סוגר, ולאחר מכן [לא ברור]? ג'ייסון הירשהורן: אתה היית עושה - אז אתה אומר ללולאה, אתה הייתי עושה בסוגר TFS סימן דולר 1 או אני, נכון. או סימן דולר אני סוגר סוגריים ולאחר מכן סוגר מרובע מרכאות כפולות, כן. בסדר, מצוין. יש לנו אחד מהיר אחד יותר. שבע דקות, אז אני רוצה ללכת על זה. זוהי דוגמא נוספת. אנחנו עכשיו בשפה אחרת לגמרי. יש לנו כמה קוד ה-HTML. זה סוג של קטן על המסך, אבל אני רוצה שתסתכל דרכו באמת במהירות, ומישהו יכול להגיד לי, אם הייתי האפשרות לטעון את דף האינטרנט הזה, מה הייתי רואה? תאר על הכל דף אינטרנט זה. נח? מה הייתי רואה? קהל: קוד בסוף מול גוגל עם תחושה של טקסט ו כפתור שליחה. ג'ייסון הירשהורן: ומה הייתי הכפתור אומר? קהל: שלח. אה, חיפוש. אני מצטער. ג'ייסון הירשהורן: זה הייתי אומר חיפוש. זכור, שם. מה שאנחנו כן להשתמש בשם ל? זה שם תכונה, מה שמשמש? [קולות חציצה] קהל: זה השם שלה לכאשר הוא לחץ? ג'ייסון הירשהורן: זה יכול להיות. אבל מה שאנחנו בדרך כלל רואים - למה אנחנו נותנים את זה שם בתור? למה אנחנו רואים את זה? כן. קהל: האם זה לא יהפוך למדד של המשתנה סופר הגלובלית? ג'ייסון הירשהורן: כן, בדרך כלל כאשר טופס זה יגיש, ואז שבו הייתי זה להגיש ל? מה דף? נח, מה יהיה בדף זה להגיש ל? קהל: אני לא בטוח. ג'ייסון הירשהורן: איפה יכולים אנו יכולים למצוא אותו? איפה אתה מוצא את מה דף שהיא מגישה ל? מה שורת קוד? קהל: פעולת טופס. ג'ייסון הירשהורן: בדיוק. פעולה. אז שהיא מגישה לדף החיפוש. חיפוש לוכסן הפוך. אז זה בדיוק נכון. מה שיטה? קהל: קבל. ג'ייסון הירשהורן: קבל. בדיוק. אז אנחנו קוראים את זה. זה הולך להיות צורה. אתה צודק. שני דברים בטופס, הכותרת של דף והחלק העליון יהיה של גוגל. אז הנה שתי שאלות שאתה צריך להיות מסוגל לענות על דף זה. אם ה-HTML הזה חי באתר זה ו משתמש תשומות באג לטקסט הזה שדה כאן, יהיו מה כתובת אתר המשתמש למצוא את עצמה עם הגשת הטופס? אז יש לנו את זה כאן. אני הולך לחזור ל בדף זה, אם כי. אני אכתוב את החלק הראשון הזה. האם כל אחד יכול לראות כאן? בסדר, מריו, אתה חושב שאתה יודע? מה דף? קהל: חיפוש קו נטוי הפוך. ג'ייסון הירשהורן: אני הולך לעבור לכאן. אוקיי, שאלת חיפוש לוכסן הפוך סימן q שווה באגים. יש למישהו הצעה אחרת? כן. אז איך אנחנו מקבלים את זה? ובכן, ראינו את זה קודם. ואתה בא עם זה קודם לכן. אתה צדקת, נח, כי פעולה אומרת לנו מה דף שאנחנו הולכים. אנחנו גם יודעים מה שיטה. אנחנו עושים את הגט. וההבדל בין לקבל ולפרסם הוא שיקבל מציג ב-URL ולאחר לא. אז אם כתבתי הודעה ממש שם שיטה, מה יהיה שונה? קהל: רק זה היית להיות חיפוש לוכסן. ג'ייסון הירשהורן: זה היית פשוט להיות סלאש חיפוש. שום דבר כאן לא יקרה. אבל בגלל זה, את כתובת האתר יקבל מוצג בצורה הבאה. ראשון שאנו רואים סימן שאלה ו אנו רואים את השם ואת הערך. אומר שיש שדה טקסט אחר אחד ו נתתי לו את שם של r ואני קלט ערך, זחל. מה היית את זה עכשיו נראה? יש לי שדה טקסט יותר אחד, אני נותן לי שמו של r וערך של זחל. קהל: לאחר הבר שיהיה לך זחל האמפרסנד. ג'ייסון הירשהורן: זה לא אמפרסנד. קהל: או שפשוט כל מה והסמל. ג'ייסון הירשהורן: כן, לא. אתה צדקת, אני טעיתי. זה כמו גרם. קהל: קטרפילר. r שווה זחל, מצטער. ג'ייסון הירשהורן: האם יש אין r שם? קהל: לא, אין. ג'ייסון הירשהורן: נדברים על זה אחרי השיעור. זה בדיוק נכון. אז והיא נכונה. ואז יש לך יכול שרבים מאלה, והם כולם היו בשרשור יחד עם זה ו. אז זה בדיוק נכון. יש עוד שאלה אחת. לשרטט DOM של HTML זה, החל עם מסמך. אנחנו יכולים לעשות את זה בשתי דקות. אנחנו נעשה את זה כאן. אני אחזור לדף אינטרנט זה. בסדר, אנחנו מתחילים עם מסמך. מה הלאה? לכן, כאשר אתה קורא דרך - קהל: ה-HTML. ג'ייסון הירשהורן: HTML הוא הבא. אנחנו הולכים ללכת תג על ידי תג. מה של אחרי ה-HTML? קהל: ראש. ג'ייסון הירשהורן: ראש. מה אחרי הראש? קהל: כותרת. ג'ייסון הירשהורן: כותרת. ויש לו תואר בשווי של גוגל, אבל אני לא הולך כותב כי לעת עתה. אישור, שבו אין גוף ללכת? קהל: כן יורד של ה-HTML. ג'ייסון הירשהורן: בדיוק. גוף יורד מכאן. האם כולם מבינים למה זה המקרה? אתה כנראה צריך להיות מסוגל להבין את זה, יותר מדי, גם אם לא היה לי כניסה זה נחמד. כניסת סוג של נותנת לו משם, אבל אתה יכול לראות שיש לו תג הראש נסגר, מה שאומר שאנחנו כנראה לא יכול ללכת לכאן. אנחנו צריכים לחזור עד לכל מה היה ממש לפני הראש תג, או מתחת לזה. אנחנו אפילו עם תג הראש. ומתחת לגוף עובר טופס. על פי טופס, יש שתי כניסות. על אישור. זה כל מה שיש לי. חידון 1 הוא מחר. אני כל כך מתרגש בשבילכם. זה הולך להיות פיצוץ. אם יש לך - קהל: [מחיאות כפות] ג'ייסון הירשהורן: אוי תפסיק, תפסיק. אבל לא, אני צוחק. אם יש לך שאלות, נכון אחרי הסעיף, אני אהיה בחוץ. אם יש לך שאלות הלילה, אל תהסס להתקשר, דואר אלקטרוני, Gchat, נושאת יונתי. מזל טוב מחר. יש חופשת חג הודיה נפלאה, אם אני לא אראה אותך לפני כן. ואני אראה אותך אחרי חג ההודיה ביום שלישי לסופי שלנו מסיבת סעיף אי פעם. קהל: [לא ברור]. ג'ייסון הירשהורן: נהדר. בסדר, אני אראה לכם הבא שבוע, או בשבועות. ומזל טוב מחר.