[00:00:02] [音樂播放] 漢娜:嗨,大家好。 感謝你們這麼多出來 在噁心的天氣測驗1 審查會議。 正如你們知道,問答 一個是本週三。 因此,我們打算去 通過一堆主題。 DAVIN:嘿,我可以說 一些真正的快? 漢娜:是啊,達文的打算 說些什麼真正的快。 DAVIN:對不起。 只是真正的快,如果你有任何問題 關於測驗,你可以去網上。 進入2014年測驗之一,對測驗。 它有大約物流 去哪裡,什麼時候去。 如果你同時入選,我們 將有一個妝測驗5:30。 或者,如果你送我一個問題, 你有一些其他的問題。 但5點半是化妝 時間週三。 但是,如果您有任何疑問, 一般問題, 網上有所有的物流。 因此,檢查那裡第一次。 [00:00:47] 漢娜:真棒。 因此,這裡的主題的大名單 那我們要通過今天。 我要說的是,所有的C 東西,這是第一列。 所以了C的東西,我們 競猜零後覆蓋。 用鍊錶開始, 其中包括三分球。 [00:01:05] 好吧,讓我們看到了這 在過去的審查會議, 所以我打算去通過 這是一個有點快。 只是舉手,如果你要我 減慢或進一步解決一些事情。 但是我們用鍊錶,因為 我們開始用C數組。 和數組是偉大的,但 問題是它們具有固定的大小。 鍊錶允許我們創建 動態調整數據結構。 [00:01:28] 我們有我們的基本操作, 插入,刪除和搜索。 我們可以做的插入 最壞的情況下固定時間 如果我們只是把它在開始的時候。 刪除和搜索,最壞 案例大哦n次。 如此反复,只是為了翻轉 通過這些照片, 我知道,我們看到這最後的時間,但我們 要保持我們的鍊錶軌道 通過保持軌道 頭我們鍊錶。 因為我們知道, 我們的節點中的每一個 只是要指向 在我們的鍊錶的下一個節點。 [00:01:58] 所以這是我們如何跟踪。 儘管這些不是 連續件的存儲器, 我們可以隨便找他們 以下不同的箭頭。 下面是我們的結構 為一個鏈接列表節點。 我們認為這最後一次。 我們有我們的結構節點。 它有兩個屬性。 第一,實際 價值,我們要存儲。 在這種情況下,它是一個整數。 這可能是一個字符串,它可以 是一個char,任何你想要的。 然後,我們必須保持軌道 在我們的鍊錶的下一個節點。 所以這將是一個 指針到下一個節點。 如果你只是在做 搜索,就像我之前說的, 你必須遵循你的箭下。 插入,你會跟踪 在哪裡你的列表的其餘部分。 並要重定向頭 指向我們的新元素, 在這種情況下是1, 再一個指向 向鍊錶的剩餘部分。 所以,再一次,我知道這是一個小 從測驗零重複位。 因此,我們必須非常小心, 關於順序中,我們 做這些讓勾縫我們不這樣做 失去跟踪列表的背面。 OK,有任何問題 只是單向鍊錶? 真棒,OK,涼。 [00:03:06] 所以,現在,我們要去到的東西 只是稍微複雜一些, 雙向鍊錶。 因此,除了保持 軌道的下一個節點的, 我們也想跟踪 以前的節點。 這允許我們,如果我們 在我們的鏈接列表中的某個時刻, 不僅向前去,但 同時遍歷倒退。 因為正如我們所看到的 一個單向鍊錶, 如果我們在一些節點,並 突然之間,我們決定, 其實,我想去 我之前的節點正確, 你必須全力以赴 回來的路上頭部 直到你找到遍歷 你要找的節點。 [00:03:35] 因此,這使得事情 稍微容易一些,因為我們是 試圖迭代 通過我們的鏈接列表。 但是,它需要我們去跟踪一個 更多的指針,因此多了一個節點明星。 好了,所以這裡出現了有趣的部分。 我們要貫徹實踐 取消對雙向鍊錶。 因此,這是值得的 完全公平的遊戲測驗。 它顯示了在過去的測驗。 所以肯定準備 編碼在C.一點點 不要忘了,所有的 這個有趣的PHP和JavaScript, 我們還是要記住 做C.所以刷上了 如果你覺得生疏。 [00:04:12] 好吧,讓我們來看看,如果我們能做到這一點。 OK,涼。 所以我們要嘗試 編輯權在了這裡, 並希望這種按計劃進行。 好吧,有沒有人想給我 建議來我應該怎麼開始呢? 我是唯一的假設 決策是,我已經 已經定義了一個結構,該 1我發現最後一頁上, 在最後一張幻燈片。 和我存儲我的鏈接頭 列表中的一些所謂的指針列表。 有誰想要讓我開始? [00:04:42] 聽眾:您可以創建一個新的 節點通過列表打電話? [00:04:45] 漢娜:真棒,所以 我們要創建 一個新的節點抓取整個列表。 我喜歡。 我只是把它的指針,如果這是OK。 而應該在哪裡它最初開始? [00:04:57] 聽眾:大概在 列表的頭部。 漢娜:美麗。 我們要開始處的頭部,其 我說的是要被存儲在列表中。 真棒。 到目前為止,一切都很好。 而現在,我們的目標是 遍歷該列表 直到我們找到與節點 我們要刪除值n。 好不好? [00:05:13] 所以,現在是部分地方 我們要遍歷。 任何人都可以提出一個 方法來遍歷? [00:05:19] 聽眾:一個循環。 [00:05:20] 漢娜:一個循環。 我喜歡它。 具體來說,我們可以嘗試while循環。 OK,我們知道我們已經達到 我們什麼時候列表的末尾? 聽眾:當指針是空的。 漢娜:當指針是空的。 漂亮,我很喜歡。 OK,涼。 很抱歉,如果我的邊界是梅開二度 種脫落屏幕。 我們把它帶回。 OK,涼。 接下來會發生什麼? [00:05:48] 所以我們知道我們想要刪除 有n值的節點。 因此,讓我們找到的情況下 實際上,我們發現我們的節點。 所以,我怎麼會檢查? 我只是說,如果指針,然後如果我 想要得到的價值了指針, 我只是做箭頭N, 等於n,則參數 我們給了這個功能, 我們要真正刪除節點。 直到這裡有什麼問題嗎? 行。 好了,現在讓我們來畫一個快速的圖片 在黑板上以可視化這一點。 [00:06:24] 因此,讓我們說有我們可愛的節點。 它有一個價值,我只想說4。 它指向下一個 節點在我們的鏈接列表。 並沒有什麼之前。 因此,我們有我們以前的 指著什麼。 在這種情況下,我們點的倒退。 OK,只是設置了我 鏈接列表在這裡。 我們有一個指向列表 這種結構開始。 我會畫多了一個用於 為了完整性。 好不好。 我會點這個前進。 我就點了一回。 哎呀,對不起。 是啊,有這個倒退。 再次這樣做。 OK,我們走吧。 好了,知道了。 OK,這裡是我們的圖片。 [00:07:21] OK,所以我們要考慮兩種情況。 第一種情況是,如果 節點,我們要刪除 是在我們列表的最開始。 然後,第二個的情況下,我們希望 要考慮的是,如果是在其他地方。 據我所知,這是一個完全 我所有的擦除凌亂繪圖, 但希望我們會盡力 明確這一點與一些代碼。 [00:07:40] OK,讓我們覆蓋的情況下 在這裡我們找到了我們的節點, 和它在最 開始我們的鍊錶。 誰能給我一個 這裡的建議是什麼 我應該做的實際刪除我們的節點? 這是一個有點棘手。 好不好? [00:07:56] 聽眾:你必須採取的 節點將前 並使其指向 1,這將是後, 並採取節點 會後,使 它指向之前的節點。 漢娜:沒錯。 行,因此這種情況 where--我們有兩種情況。 我們的情況下 我們正在尋找的節點 是列表的前面。 確定,然後的情況下,你 描述否則,對不對? 它的其他地方在列表中。 所以,你說,我們需要 看看以前的節點, 和使前一個節點 指向下一個節點。 因此,讓我們說我們是 試圖拿出5 我在這裡很凌亂繪圖。 我們要確保 4現在指向6。 四的下一個點六。 六以前分四個。 這就是我們的目標在這裡,對不對? 這是我想你 剛才說在那邊。 [00:08:56] 好了,讓我們的第一件。 讓我們做的有 以前的指針以前。 於是四的下一個應該指向什麼? 恰好,在這種情況下,6。 所以,我們應該說的指針,接下來。 好不好? 行。 因此,讓我們擺脫這種醜陋的畫面 並嘗試繪製一個稍微更好之一。 在這裡,我們有我們的表頭。 和指向在第一個節點 我們的鍊錶,這是我們說的是四人。 這是我們的第二個節點,5。 而我們的第三個節點,6。 只是想畫完全相同的 圖片,只是多了幾分乾淨。 OK,所以4的下 原本分五。 五年的下一個點六。 六以前點五。 五以前分四個。 這麼多漂亮! OK,涼。 [00:10:04] 所以,現在,我們所做的只是 在這裡,這行代碼, 它說,以前的指針 接下來,有什麼意思呢? 這意味著,如果我們正在尋找 5,去上一個節點, 和它的下一現在應該 點五的下一個。 所以基本上,這是什麼做的 被認為是消除此箭頭 並使其直接跳到了五人。 清楚了嗎? 我知道這可能是一個有點粗略。 我看有些頭點點頭。 非常好。 OK,涼。 現在,有什麼下一步? [00:10:39] 我重新下一個。 現在,這是其它箭頭 我需要改變嗎? 這一次在這裡。 六以前。 我們不希望6以前 指向5了。 我們希望它指向4。 這是否圖片有意義嗎? 所以,現在我們實際上可以採取五項出來。 因此,讓我們的那件。 我應該在我怎麼辦 重置6以前的四? 任何想法呢? [00:11:14] 聽眾:釋放之間的節點 他們將其設置為null? 漢娜:酷。 肯定地說,我們的最終目標是 將要釋放的節點。 因此,我們可以做到這一點就在這裡。 免費指針。 當然可以。 但即使在此之前, 讓我們just--我們的目標權 這裡是設置指針下一 以前等於先前的指針。 我知道這是得到掩蓋。 OK,讓我們take--涼。 每個人都可以看到這條底線? 或者是它的超微型? [00:11:50] 所以我們執行前 這條線在這裡,我們要 以確保 接下來的指針不為空。 因為如果指針接下來就是 空,什麼樣的錯誤 我會當我嘗試 引用一個空指針? 聽眾:賽格故障。 漢娜:一個賽格故障,美不勝收。 好了,如果這不是 空,那麼我們就可以重新設置。 我們再有六點四。 問題,直到這一點? 是嗎? [00:12:17] 聽眾:在你的第一個 if語句,沒有你 意思是有箭頭 接下來,或[聽不清]? 漢娜:我的意思是指針箭頭N。 所以基本上,我想要做的 是說,那我當前節點 迭代,當前節點是 我看,我存儲的指針。 我想知道指針的 值,在這種情況下是n。 我希望看到的,是 我期待節點 為節點我的目標刪除? 所以這就是為什麼我們在這裡指針n。 [00:12:47] 聽眾:所以箭頭會 到n,您所設置的值 並將其存儲在名為N的節點? [00:12:55] 漢娜:所以這就像如果我 經歷這個鍊錶 並指著五。 如果我想要得到的值,如果 我想要得到這個數字,5, 我要做的指針箭頭N。 很酷吧? 是啊。 [00:13:07] 聽眾:是N變量的名字嗎? 漢娜:是的。 因此,如果我們翻回1 滑動,n是名稱 內側的值的 節點在我們的鏈接列表。 我知道它可以得到一點點 有點混亂,因為我們還 呼叫的事 我們要不讓N。 所以這就是那 一條線的來源。 是嗎? [00:13:27] 聽眾:你有什麼 [聽不清]它們是如何工作的? 指針[聽不清]? [00:13:35] 漢娜:當然。 你說about--哪一行? 聽眾:最後一行[聽不清]。 [00:13:44] 漢娜:當然,OK。 因此,讓我們看一下畫面 為了試圖解釋這一點。 對不起,對於 攝像頭,問題是 我們可以解釋指針 箭頭指針旁邊以前。 OK,讓我們說,我們正處在5 我們的目標是刪除5。 所以指針下一個,其中這些 三個節點這是否給我們? 這給我們帶來了第六節點,對不對? [00:14:10] 好了,現在我們要求 六個以前。 好不好? 我們正在重新此 等於4, 這正好是5以前。 我知道,這是超 難以跟踪。 我真的建議你畫的圖片 如果你得到像這樣的問題。 是嗎? [00:14:30] 聽眾:是的原因, 我們沒有一個[聽不清]? [00:14:37] 漢娜:沒錯。 所以現在的問題是,為什麼 我們並不需要檢查嗎? 我們為什麼不需要檢查 以前的指針不等於空? 它是因為我們已經 已經分離出來 如果這時指針的 在開始的時候。 非常好的問題。 別的對此怎麼看? OK,涼。 因此,讓我們完成它。 我們快到了。 [00:14:59] 因此它是在頭部,如果? 相反,如果什麼 試圖刪除5, 我們其實是想刪除4? 什麼我有什麼關係? 好吧,我想重置我的頭是什麼? 喊出來? 聽眾:後的之一。 漢娜:美麗。 OK,所以我們要列出來指向 到任何我們的指針下一個節點。 好。 而只是為了完整的 起見,我們將 想只要檢查作為我們的名單 是不是空的,只要我們的名單是不是 空的,那麼我們要設置 我們以前等於空。 問題這麼遠嗎? 一步之遙from--? [00:15:53] 聽眾:這將是如果 列表不等於null? [00:15:55] 漢娜:是的,你是完全正確的。 我很抱歉。 是名單不等於空。 真棒。 試圖把這個屏幕上的所有。 它是一種脫落。 對不起,伙計們。 最後但並非最不重要的,所有的 我們所要做的就是回報。 好不好。 這是一個很多擠 在真的很快。 花一秒鐘看這個過來。 告訴我,如果你有任何問題。 是嗎? [00:16:20] 聽眾:如果名單在 頭,then--等待,請不要介意。 [00:16:26] 漢娜:OK,好。 因此,這是,如果名單在前頭, 我們把它轉移到任何我們插入。 是嗎? [00:16:31] 觀眾:你能解釋一下 第一,如果再次聲明? 如果指針為n等於n? 漢娜:當然。 所以我們這個整體功能的目標是 刪除具有值n的節點。 因此,如果我們發現,因為我們 通過我們的列表進行迭代, 與值n的節點,這是 一,我們要刪除。 因此,所有的刪除的情況 裡面,如果大的語句。 這是否有道理? 酷。 是嗎? [00:16:59] 聽眾:也許你只是看不到 它,但不要你還需要一條線 為滾動列表? 漢娜:真棒。 讓我們把這個一點點,和 我們會扔了就在底部。 也許董事會將已經 是一個稍微好一點的想法。 那麼,如何將移動指針向前? [00:17:17] 聽眾:指針 等於指針加一。 [00:17:20] 漢娜:美麗。 所以,讓我們來 繼續迭代通過。 好不好。 聽眾:難道會有一個else? 漢娜:再來一次? 聽眾:難道會有 後大,如果老的東西 語句[聽不清]? 漢娜:哪一部分? 對不起。 [00:17:38] 聽眾:遍歷, 不應該有一個別的嗎? 漢娜:你絕對 可能有其他人。 因為我有一個回歸權 在那裡,你不需要別人。 但是,是的,很好的問題。 OK,是嗎? 觀眾:我們可以認為指針 即通過列表移動 服用的值 的列表中的每個節點? 還是應該把它看成 排序的外部列表? [00:18:00] 漢娜:要么一個是好的,我想。 我想它的方式是 我說,行,我的指針。 這是我的。 這是我的手。 我要指向不同 的事情,我想遍歷。 首先,我要指出 到該列表的頭部。 並且告訴我,我 要指向4。 所以我來說,外部的列表中, 我可以指出這些元素。 所以,我認為自己是指針。 聽眾:所以當你刪除 這些元件中的一個, 您刪除自己,可以這麼說。 漢娜:沒錯。 所以,你刪除的東西 你指向。 所以在本例中該 我們看到在那裡我們 試圖刪除5, 當我指著五, 我想刪除 我指著事情。 完全正確。 是嗎? 聽眾:我們有否照顧 情況下,其中n是不在列表? 漢娜:如果n不在列表中? 所有這一切將要發生的是你 要遍歷和迭代 通過,然後,你會 得到的指針是空, 然後你會做。 [00:18:48] 聽眾:那我們有 返回什麼? 漢娜:我們可以。 如果定義了這個問題的方法是 功能,我只想說,它返回 不管作廢。 但你可以有一些 就像返回一個整數, 並使其返回 負1,如果它失敗。 類似的東西。 問題with--是嗎? 觀眾:[聽不清]? 漢娜:對不起? 觀眾:[聽不清]? 漢娜:當然。 所以這是actual--一旦我們 移動完成所有這些工作 所有這些箭周圍,我們整個 目標是擺脫節點 我們正在尋找。 所以在這種情況下,釋放 指針,如果我指著五, 它就像抹去這中間節點。 這是免費的指針部分。 這有意義嗎? [00:19:29] 聽眾:所以,即使想 你沒有[聽不清]? [00:19:31] 漢娜:所以我們假設一開始 我們有一些名單,這是already-- 他們已經把這個一起。 因此,為了構建本 列表中,他們意有所指[聽不清]。 酷。 任何其他與此? 是嗎? [00:19:46] 觀眾:如果什麼列表 不等於空行? [聽不清]? 漢娜:就在這裡? 聽眾:是的。 漢娜:OK,我做的 正在我只是確保 之前我嘗試取消引用列表, 之前,我嘗試訪問以前, 我想,以確保它不是 空,所以我沒有得到一個賽格故障。 酷。 [00:20:08] OK,我知道這是相當 很多打通。 這張幻燈片會 提供給你。 所以,你可以通過它的更多細節。 是嗎? [00:20:17] 聽眾:為什麼列表[聽不清]? 漢娜:當然。 所以,列表確實指向 這個元素就在這裡, 列表中的第一個元素。 因此它不能有一個以前。 是嗎? [00:20:31] 聽眾:請問指針點 以在存儲器中的相同地址? 是否指向同一 在存儲器中作為節點地址 它的指向? [00:20:40] 漢娜:是的,它指向 在內存中這個節點。 [00:20:43] 聽眾:對,所以 當你[聽不清]? [00:20:47] 漢娜:從某種意義上說,是的。 好不好。 好吧,讓我們這個待著。 如果您有更多的問題, 堅持圍繞底, 我們可以通過它去了。 OK,涼。 現在,我們就會繼續前進 哈希表,嘗試, 和樹木,你得到了超 熟悉對設置5,拼寫。 [00:21:04] 所以哈希表僅僅是一個 陣列,單鍊錶 或雙向鍊錶來關閉它。 因此,我們有一些 關聯數組。 以及我們如何知道這些 陣列桶進入, 我們使用的哈希函數。 所以在這種情況下,任何人都可以 你猜怎麼著哈希函數 將只是基於一些 的輸入和輸出? [00:21:31] 聽眾:字母表的字母數。 漢娜:沒錯。 它只是把它們按字母順序排列。 與一開始一切 A被放入第一桶。 用B一切被放入 第二桶,等等,等等。 真棒,OK。 並且散列函數是任何 函數,它接受一個字 並會告訴你什麼 鬥它屬於英寸 那麼,哪條目我們 數組屬於英寸 [00:21:55] 所以每次我給我 Hash函數一句話, 它應該告訴我的一樣 把每一次。 因此,如果我們使用散列函數 從以前的幻燈片 我們在那裡進行排序 拼音首字母, 我每次給我的 散列函數“蘋果” 它應該總是給我回0。 所以,如果我有一個蘋果 把我的哈希表, 如果我給“蘋果”我的散列函數, 應該說,去把它放在水桶0。 如果我在尋找一個 蘋果在我的哈希表 我說,那裡的威力蘋果 現場,你問你的哈希函數。 它說,去鬥0。 行? 用散列函數的問題? 真棒。 [00:22:34] 這是一個稍微 詳細的說明 一個什麼樣的哈希函數可能看起來像。 行。 現在,隨著哈希問題 功能是在一個理想的世界, 我們只有一個 在每個桶的事情。 但在現實中,有 不是只有一個字 與A.開始有不 與B.於是開始只有一個字 在這種情況下,如果我們 突然得到“漿果” 我們希望把它 到我們的哈希表, 我們看到,哦,不,香蕉 已經存在,那我們該怎麼辦? [00:23:03] 好了,我們有兩個選擇。 第一個選項是 線性探測,這 只是意味著去尋找 下一個空水桶。 去尋找下一個空數組項。 而只是把“漿果”在那裡。 所以我知道它應該 在鬥一氣呵成香蕉。 但是,僅僅把它放在鬥3, 因為鬥三是空的。 另一種選擇是可能 你實現 在對集,在那裡你 有獨立的鏈接。 所以,您的每一個桶, 您的每一個數組元素, 不僅各執一份的話,但實際上 持有的指針字的列表。 所以,如果你有 香蕉中的哈希表 你突然想 添加漿果,沒有問題。 剛上到結束,或添加漿果 您鍊錶的開始。 OK,真棒。 與哈希問題 表之前,我們去? [00:23:58] 行。 樹木和嘗試。 OK,所以這是另一種選擇 實施字典​​。 你可以做一個嘗試。 因此,它是一種特殊的樹的 就像一個多層次的哈希表。 所以你會看到圖片 在那裡你有一個數組 指著一堆陣列 這一點一堆陣列 這一點一堆陣列。 我們將看看到底是什麼 看起來像一個未來的幻燈片。 和更一般地,一個樹 只是任何數據結構 其中數據是 組織在某些層次。 所以,在這裡我們看到了我們 某種理解 的頂層,一個下一級, 一個新的水平,一個新的水平。 因此,這可能是最清楚的 一些具體的例子。 因此,這裡是我們的樹。 你可以看到它 具有特定水平 我們開始與根節點之一。 我們可以走下來,通過我們的樹。 [00:24:50] 二叉樹是 特定類型的樹。 而唯一標準 為二叉樹 是,每個節點具有 至多兩個葉子。 所以你不會看到任何 這些節點具有三個或四個 或葉片某些其它數目。 然後更具體 是一個二分搜索樹 在每一個節點的左 節點將有一個值。 每值的 正確的將是更大的。 所以,如果你看到44是我們的根, 到左側,11,22,和33 比我們的根都少。 而右邊都 數字bigger-- 66,55,和77。 與這個屬性也是如此 在樹的各個層面。 [00:25:37] 所以,當我們再往 22,11和33,還是11 小於22和 33大於22。 並且這使得更容易地搜索 因為如果我們正在尋找一個數字, 我們確切地知道哪些 分支跟隨下跌。 所以這應該提醒你 二進制搜索點點。 是嗎? [00:25:56] 聽眾:所以當你 描述二進制, 你說,這至多有兩片葉子? 漢娜:嗯。 聽眾:難道有少? 漢娜:是的。 因此,讓我們說,例如,你 沒有一個偶數的東西 你不能填滿你所有的 葉子,它的罰款,如果一個有一個。 好不好? 真棒。 在樹上還有沒有其他問題? 好不好。 [00:26:16] 回到我們的嘗試,因為我是在說 約一點點早些時候, 我們如何有這些多層次的陣列。 因此,在這種情況下,我們開始在頂部。 我們可以按照任何給定的字了。 所以我們可以說,我們希望 尋找圖靈。 我們開始在T,跟著下來 到包含ü一個數組, 並按照它,直到我們 到達這個小三角這 告訴我們,是的,你找到了一個字。 清除的嘗試? 什麼到那邊去? 是嗎? 聽眾:請問三角洲的象徵 要佔據嘗試在空間? 漢娜:是啊,所以也沒有 甚至不一定需要是一個增量。 但是,我們需要一些方法來 告訴我們computer--對不起, 讓我們知道TUR是不發一言。 因為我們說我們沒有 這一概念的三角洲,這一概念 恭喜你,你找到了一個字, 它會經過和迭代T-U-R, 然後說,真棒,我找到了! 它必須是一個字。 但它真的不是。 我們希望整個圖靈是一個單詞。 因此,我們必須有東西在 最終,上面寫著:恭喜你, 你已經找到了一個合法的單詞。 觀眾:所以,如果你有一個像 26個字母在字母表, 你會實際上有 27鍵在你試試? [00:27:24] 漢娜:真棒,是的。 所以實際上,我認為, 將在接下來的幻燈片。 噹噹! 在那裡,如果你有一個 在你嘗試節點,你 將有27名兒童,而不是26。 有任何問題嗎? 是嗎? 聽眾:為什麼嘗試佔用這麼 多少空間[聽不清]你去? 為什麼它被認為是[聽不清]? 漢娜:當然。 讓我們回去。 現在的問題是,為什麼 在嘗試了這麼多更大 不是像哈希表。 因此,對於每個這些層次, 即使他們不在這裡繪製, 你必須有26個字符。 究其原因,你不能 說,哦,但是像圖靈,我 不需要有任何這些 在U.好水平同樣的事情, 如果你突然想添加 這一點是很喜歡T-H, 你需要有 加入這個詞的能力。 因此,對於每一個字母, 你將有 有一堆 陣列來關閉它。 所以,你可以看到它會怎麼弄 真大,真快。 還有沒有其他問題? 行。 是嗎? [00:28:29] 聽眾:當是嘗試 比哈希表快? [00:28:33] 漢娜:當是嘗試 比哈希表快? 所以,如果你有一個非常 糟糕的哈希函數。 因此,讓我們說,我很喜歡, 這裡是你的哈希函數。 不管是什麼字 你給我,我總是 打算把它放在數組項0。 所以我們最終只是把 一切都在一個大長鍊錶。 所以查找時間將採取在最壞的情況 ñ如果它在我們的名單的最後。 與嘗試,我們只需要遍歷 通過在單詞中的字母。 所以,即使我們增加了一堆 更多的話對我們的嘗試, 它不會帶我們下去 找到一個特定的字。 [00:29:09] 所有我們所要做的就是,對於 例如,在這種情況下, 比方說,我們正在尋找變焦, 我們只需要遍歷 Z-O-O-M,四個字母。 所以,這只是 長字變焦。 不要緊,有多少 更多的話,我們把這個嘗試。 我們總是可以得到它 在這些四個步驟。 真棒。 是嗎? [00:29:32] 觀眾:所以[聽不清] 是一個數組,對不對? [00:29:34] 漢娜:嗯。 聽眾:如果你 尋找[聽不清] 你必須要經過 陣列找到[聽不清]? 漢娜:當然。 聽眾:那豈不是要花更多的時間? 漢娜:如果我要去 說我的數組總是 將是A,B,C,D, E,F,G,等等等等, 所以,如果我總是知道這是 在相同的確切順序, 如果我總是知道它的 按字母順序排列, 我只能說O的數量 某某在字母表。 只是跳到那個地方。 因為記得,有 陣列,我們可以訪問 在恆定該數組中的任何元素 如果我們知道,我們正在尋找的時間。 是嗎? [00:30:09] 聽眾:在以前的 滑動[聽不清] 27號, 但26為第一個。 [00:30:14] 漢娜:對不起? [00:30:15] 聽眾:是不是第一次 1 0,所以不會是26? [00:30:18] 漢娜:沒錯,所以當我們說27,這是 將給美元指數從0到26。 但是,如果你真的指望 這些出來,這將是27。 好問題。 還要別的嗎? 是嗎? [00:30:31] 觀眾:那麼,嘗試 比哈希表慢? [00:30:34] 漢娜:嘗試將要在 理論上講,速度比哈希表 但佔用更多的內存。 是嗎? 觀眾:[聽不清]? [00:30:45] 漢娜:對不起,我沒有聽你的。 觀眾:[聽不清]。 0到25給你26。 [00:30:54] 漢娜:0〜25將 給你26吧。 [00:30:56] 觀眾:然後[聽不清]。 漢娜:沒錯。 所以我們指定的數量 事情在我們的數組數。 所以,如果我們有27,它的 要給我們0 通過26,這將給 我們的空間,在這種情況下, 我不包括撇號。 所以我們得到0〜25 第26個字母的字母表, 或全部26個字母的字母表。 然後,去年 首先,在進入26歲,是 將要檢查 標記或增量。 還要別的嗎? 真棒。 失去了我的空間。 OK,涼。 [00:31:31] 所以,我們已經談到了這一點。 但大的權衡 嘗試和哈希表之間 是嘗試提供,在 理論上,不斷仰望 次,但用一大堆的內存。 好了,現在我們有小幅 那麼複雜的結構, 我們會用C做的, 我們會向右移動沿。 [00:31:49] 所以棧,我們看到了這 講座中,你在哪裡 有一些像 托盤其中棧 你把過去的事情 棧上會 是你脫下的第一件事。 所以,這就是真正定義堆棧 是過去的事情,你把 將是在第一 事情你起飛。 而我們使用的術語 如果我們要裝上去, 如果我們要添加一些 我們的堆棧,我們稱之為推。 如果我們拿東西 關,我們稱之為大跌眼鏡。 如果我們要 實現一個棧,我們 需要務必保持跟踪 兩者的大小和容量。 這樣的元素的總數,我們可以 保持和元素的當前數量 我們都抱著。 [00:32:27] 並且非常相似,我們有隊列。 而且,唯一的區別 是,代替用棧, 我們說,我們把對過去的事情 是我們騰飛的第一件事。 因此,與隊列中, 我們把第一件事情 將是該 第一件事情,我們冒了出來。 因此,這就像如果你 實際上排隊在店 而你正在幫助, 那麼行的第一人 應該是第一人得到幫助。 所以,這將是一個隊列。 [00:32:52] 因此,我們需要跟踪的 尺寸,容量和頭部,因為我們 要帶大家離開前 的列表,而不是背面。 上有問題嗎? 任何C的問題正在困擾著你? 數據結構,任何有趣的東西? 好吧,冷靜。 所以我把它交給艾莉森到 跳進一些節目。 [00:33:14] ALISON:哦,我們拭目以待。 我們會看到我是如何以及在這裡做。 OK,我要去嘗試和飛 通過這個東西,伙計們。 漢娜得非常的 深入她所有的東西。 我會盡量給 您快速爆炸概述 這樣我們就可以得到達文所有 有趣的JavaScript和安全事 也許你真的 想聽到更多有關。 [00:33:33] OK,漢娜說,如果 您有任何問題, 我走得太快,請讓我知道。 我會回答的問題是必要的。 所以開始,我們將開始 的第一個東西可能1 你學會了網頁 編程權限。 所以CHMOD,你們應該已經 主人在這所有的網頁 你已經編程 最近在忙。 它基本上只是一個命令 改變的權限 或訪問權限 我們的文件系統對象。 當然,實際 看到這些,如果你 有這些任何麻煩 在你的習題集, 你可能已經使用ls -l命令,這是漫長的, 得到了這樣的一種觀點, 在這裡你實際看到的所有 該權限的文件。 [00:34:16] 真的,我們只是要去 通過很快只是漂亮 太多了每個這些的意思。 因此,我們有d就在這裡,這 剛剛代表的目錄。 顯然,在這裡,我們看到的rwx,這 可讀,可寫和可執行。 這些也可以被表示為比特, 我們將進入下一個頁面上。 讓我們看到每一個黑社會 在這裡,所以它的三大黑社會。 我們RWX河沒有X和R 沒有X的第一個文件。 正是這種總體結構。 [00:34:49] 所以,我們有一些目錄。 我們有一些用戶群 這些權限。 有些組具有這些權限, 和世界有一個許可。 你可以把這些作為黑社會。 你可以認為這是三位。 這樣他們就可以保存值 從0向上的任意位置 至7,這是為什麼有時候 我們不得不這樣做CHMOD 600,而不是CHMOD RW等等。 我們將進入一個例子存在。 但基本上,你能想到的 只是RWX這些既為, 或者你可以把它們想像成某種 數,其中在這裡第一次 代表一個數字之間 0和7,這第二個 代表一個數字之間 0和7,而第三個 表示數字0到7之間,行? [00:35:38] r的4的值w 具有值2,並且x 具有值1,這就是為什麼此 這裡的權限將文件模式700。 因為在這裡這種情況下,我們說 已在第一比特出現翻轉上。 因此,我們有4個讀。 第二比特被翻轉上 W,這是2,所以現在我們有6個。 和第三比特被翻轉上 對於x,它是1,所以我們得到7。 當然,我們的團隊 和我們的世界是每個0。 因此,這也是 相當於CHMOD 700。 而且我肯定會盡力 理解那些之間的映射。 我不知道是否有 之前拿出一個小測驗, 但是這將是一個 問題,我可能會問。 [00:36:18] 只是一點點,甚至去 進一步陷入CHMOD這裡,這裡 是很一般 chmod這個電話的結構。 那麼當然,我們在這裡文件模式。 參考文獻,這是什麼指的是 誰是我們給這些權限 或者誰是我們採取這些 權限距離。 所以我們有一個在這裡的權限, 就像我們已經給你搭配chmod加X, 正如我們將很快看到。 一只是意味著給這些特定的 權限給大家。 給他們所有。 所以,你很可能具有u加X 或G PLUS x或0加x或多個 物。 使第一部分始終 將要參考。 我們是誰給這些權限, 或者誰是我們帶他們遠離? [00:37:03] 第二個是操作員。 所以,你們大多已處理加。 這使得權限 誰要你給他們, 而減,從邏輯上講,刪除它們。 所以沒有什麼太可怕的存在。 然後模式就是我們談到 與讀,寫或執行。 所以加x表示放棄執行 權限給大家。 然後,當然,在其上 特定的文件或目錄。 好不好? 每個人都很好用chmod? 不是太糟糕了? [00:37:37] 好了,HTML,任你是 老足夠to-- MySpace的時代? 我送這個給我的部分, 從字面上一半的人 看著我,好像我是個瘋子。 我當時想,伙計們, 我們沒那麼老。 來吧。 超文本標記語言,所以 它的誠實只是一種方式適合你 在網絡上顯示某些東西。 因此,它是一種標記語言。 這不是一個腳本語言。 有沒有在它的邏輯。 它只是改變 顯示方式的東西。 OK,所以這是一個重要的 區別之作。 它認為是一種標記語言, 沒有一種腳本語言。 [00:38:12] 所以在這裡,我們有我們的HTML標籤。 在這張幻燈片上可能大多數 那些你應該熟悉 ,真正做到舒適。 所以,很顯然,我們有 我們的HTML標籤, 指定了一切 這兩者之間將是HTML。 我們有一些鏈接, 顯然會給你 一個鏈接到一個外部的網頁。 有些題目,我們這裡頭內。 我們有我們的身體用 H1,這是一個標頭, 所以它會讓它好看 和大膽,更大。 然後,我們有一些 P,這是一個段落。 你應該知道 和熟悉的東西 怎麼樣,你插入圖像,是 還有沒有其他的頭班? 我一定會 熟悉DI​​V。 因此,這些具有廣大的標籤 你應該熟悉。 不過,當然,與一切 CS 50,該名單並不詳盡。 所以一定要刷上了。 [00:39:08] CSS,CSS等,如果有的話你看 我的講座從兩個星期前, 其實只是一種方式 風格你的網頁? 好了,我們有一些標記語言。 HTML,即只需文本的護理 並在那裡它可能是在頁面上。 但CSS是真的什麼使得它很漂亮。 你可以在你的HTML有這些 文件,但我們將在後​​面討論, 我敢肯定它可能 是下一幻燈片,它 通常的做法是,居然 實際上我們真正鼓勵, 你讓他們分開的時候,我們 談MVC和整體模式。 這真的是這樣送入。 [00:39:42] 因此,CSS只是一種方式 讓事情看起來很漂亮。 這裡的東西,像 身體和#title和.INFO, 這些被稱為選擇器和什麼 他們這樣做是他們選擇的具體的事情 你的HTML文件中 並應用什麼風格, 什麼樣的,你想要的東西, 以你的web特定元素 頁面。 所以在這裡,我們有一個 背景顏色和一個顏色 和字體家族的作為 施加到無論是在體內。 因此,如果我們回頭看這裡,這 並不適用於標題。 這將只適用於什麼 在這些體選擇,OK? [00:40:22] 與此稱號,這是 將是同樣的事情, 文本的顏色 作為藍色只會 影響到什麼範圍內 標題選擇。 以及信息在這裡, 文本將是粉紅色, 凡是信息,這是在這裡。 因此,唯一的事情, 是粉紅色的這個頁面上 是日,星期一,2014年11月17日。 OK,所以CSS只是一種方式 有更多的控制over--是嗎? [00:40:48] 聽眾:你為什麼有 使用具有所有權的哈希? [00:40:51] 漢娜:下一張幻燈片,答應! 我們會到達那裡。 所以這就是為什麼我們必須使用哈希值。 所以,選擇採取三大 我們跟你們有關表格。 我fyou想了解更多, 有大量的在那裡。 有偉大的CSS文件。 有一個標籤名,其中有做 只有你的HTML標籤正常。 所以H1,P,DIV,H2, 這些各種各樣的事情。 我們可以只是名稱的原樣。 所以,我們在這裡看到有 體,這是一個正常的標記。 所以我們可以只是把身體的時候, 我們談論我們的CSS文件。 [00:41:26] 與標題,所有的原因,我們 有這個哈希是我們有什麼 考慮一個ID。 因此,一個ID應該永遠是 在你的HTML頁面的獨特 所以,當你 提到它,你 知道你僅指 一個具體的事情。 所以在這種情況下在這裡,用我們的 H1在這裡,CS 50審查會議, 我們擁有所有權的ID。 因此,為了僅僅指 這塊我們的HTML,我們做一個哈希稱號。 只是按照慣例,ID被指定 與在他們面前的散列。 以同樣的方式,我們看到 這裡的信息是一類。 等類CSS是 指定為一個點類 或點什麼那類。 所以在這裡這種情況下,它的信息。 [00:42:10] 所以,我把它收回。 這兩個會 粉紅色在這裡為我們的CSS 因為它們都具有一類的信息。 在我們的CSS文件中,我們指定 與一類的信息任何事情 應是粉紅色的。 這是否有意義? 是嗎? [00:42:27] 聽眾:如果你是做 一切在體內白, 然後嘗試做 裡面的東西是藍色的, 會引起問題? [00:42:34] 漢娜:那是CSS 級聯樣式表。 所以,無論是朝 底部將優先。 所以,如果你做的東西身上, 你做的一切白色, 再後來你改標題 或者你身體內更改文本, 它會覆蓋。 所以,對任何事 底部將優先。 是嗎? [00:42:56] 聽眾:和ID都是唯一的, 但類可以多嗎? 漢娜:沒錯。 所以,ID應該是唯一的,類可以 所說的很多事情,只要你願意。 還有沒有其他問題? 是。 [00:43:09] 觀眾:[聽不清]。 我想知道是否 有差別。 漢娜:對不起, 究竟是什麼問題? 聽眾:有小 “F”和資本“F”。 漢娜:那麼差 小“F”和資本之間的“F” 不應該有所作為。 因此,“F”將在15無論哪種方式。 酷,什麼事嗎? 大家好,CSS? 是嗎? [00:43:30] 聽眾:對不起。 你可以有一個類和一個ID? [00:43:35] 漢娜:是的,可以。 事情可以有兩種類和ID。 我強烈推薦 你自己測試這些。 CSS,你將學習充其量只是通過 東西,很簡單的網頁, 制定一些CSS,只是 看他們是如何相互作用的。 你將獲得一個非常好的, 直觀的感覺它是如何工作的。 [00:43:56] OK,大家好有CSS? 你們都會做 用CSS漂亮的網站了。 OK,最佳實踐,只是 事情要記住,事情 that--這就是為什麼我們停靠 您的設計師和諸如此類的東西。 因此,關閉所有HTML標籤。 所以,如果你有一個開放式的身體, 應該有一個緊密的身體。 如果你有一個開放的段落, 應該有一個緊密的段落。 請檢查您的頁面驗證。 你們應該很熟悉 與此由對置7 與CS 50金融 與W3驗證。 正如我之前說的, 我們的大範式1 被分離與CSS你的風格 從您的標記,這是HTML。 然後,當然,我們有 這個偉大的XKCD到這裡。 耶,漫畫救援! [00:44:38] OK,TCP / IP。 之間的這些和HTTP 基本上他們都是協議。 所以,你可能只是想 它們作為一組規則 管理如何的事情 移動在互聯網上。 所以,傳輸控制 協議或互聯網協議, 只是一個方式,以確保 這些數據得到到哪裡去 而我們知道,如果 我們曾經丟失的數據。 所以,如果你們回想起講座 幾個星期前與大衛 在這裡我們有四個信封,他們 都像編號的四分之一, 兩個四,三四個,四 4,這僅僅是一組規則。 我們說,OK,每當我們 發送多個數據包, 我們要編號 它是什麼號碼 又有多少總該 用戶應該得到的。 [00:45:19] 而這僅僅是告訴誰 接收他們是否該數據 已經得到的一切,或者 事情得到了沿途丟失。 他們需要問一遍。 這其實只是一組規則。 這就是你如何能想起來,好不好? 並且還,它指定端口,這 你們can--演講的時候,我知道, 他們有端口的完整列表。 但是,我們並沒有他們在這裡現在。 [00:45:41] 所以,超文本傳輸協議 是,再次,這是另一種協議。 所以這是另外一套規則 支配,在這種情況下, 如何超文本傳輸。 所以它只是允許瀏覽器 向Web服務器說話。 正如我們在這裡說,這是 就像人握手。 這只是一種方式來管理 如何web服務器是 要與您的瀏覽器進行交互。 而我們只是一對夫婦的例子。 在這裡,我們有一些要求 在那裡得到的是方法。 我們有HTTP 1.1,這是 協議版本我們。 然後,主機,這是什麼 我們實際上是試圖訪問。 然後,當你看到這裡,我們 得到這個200的一些反應 OK作為我們的HTTP響應代碼。 我們有一個大名單我要去 拉漲在一秒鐘 那你們應該熟悉。 我們有這樣的內容類型的文本/ HTML, 這只是說的數據是什麼類型 我們是從服務器接收,OK? 該主機與此內容類型 是HTTP報頭的一部分。 可以有少或少 必需的上下文中什麼 你處理。 有時候,你有很多的 信息從您的服務器來。 也許他們要求很多 的來自用戶的信息。 它的變化取決於上下文。 如果你看看CS 50研究, 還有很多更上。 但是,我們有很多獲得 通過,所以我打算 正前方,如果去 這就是與你們好嗎? 酷。 堅持,稍等。 我絕對有 整個名單of--呵呵! 我不知道這是為什麼 一路看過來。 我想我真的感動 它,而我是sitting-- [00:47:15] DAVIN:你想教呢? 還是你要我教的呢? [00:47:17] 聽眾:我想我們可以 只是告訴他們下手。 我的意思是,你可以進入 他們進一步,但我 認為它更有意義,因為我 只是在談到HTTP狀態。 因此,這裡的整個列表。 我猜發生了什麼事情要發生是 達文會後進入他們。 但有一個整個列表,一 味道預覽來。 OK,我們要blow--這是怎麼回事 是一個PHP速成班一樣,沒有其他。 [00:47:41] 所以PHP,超文本預處理器, 這是一個遞歸backronym, 這意味著它被命名為別的東西。 然後他們都像,這 並沒有真正意義。 所以他們只是命名它 - 它是一個縮寫, 所以他們只是使它PHP 超文本預處理器,其中 只是沒有任何意義。 有趣的故事。 這是一種編程語言。 所以像我強調的是, HTML不是一種編程語言, 它是一種標記語言,PHP 是一種編程語言。 你怎麼知道這是 因為有邏輯。 還有條件語句。 我們有變數,而我們 有沒有這些東西的HTML。 [00:48:12] 好吧,那麼我們這個小 位在這裡,像PHP的味道。 所以基礎知識,變量名 開始與一個美元符號。 很多人喜歡它。 我想起了我們的錢。 這一切都太棒了。 我們都希望PHP。 因此,我們不指定 變量的類型了。 它是在運行時確定的。 解釋器會像, 哦,我們就貫穿, 並根據上下文, 我們會看到什麼樣的類型 這些變量需要有。 有沒有主要功能。 事情只會運行。 你們與你進口的 最後一對集,你會發現這一點。 有沒有一個真正的主要功能。 你剛才寫的是什麼 你想會發生。 正中下懷,它發生了。 這就是PHP你。 [00:48:56] 數組是非常相似的。 我們仍然有這樣的支架。 在這裡,我們有一些變量 所謂的改編,它是平等的 to--我們有正常的 括號符號。 我們有一些關鍵的價值。 而大的區別 C和PHP陣列之間 是,我們可以有這樣的associate-- 我們可以值的鍵關聯。 因此,而不是僅僅有 即索引的數組 由編號或位置 在陣列中該元素的, 我們可以用一個關鍵的實際關聯。 在這裡我們可以說,OK,我想不管 值與水果有關。 也許我們有水果去了香蕉。 所以它會返回香蕉給我們。 [00:49:41] 但基本上,最 這個強大的東西 是,如果你們還記得 從講座,我們基本上演示 重寫拼寫的PHP,它 was--查找真的只是想, 確實存在這個鍵? 這真是一種它的力量。 你並不需要遍歷 通過您的數組。 你不需要知道 什麼樣的空間是英寸 這可能是在端或開頭。 只要你知道鍵 即與該值相關聯, PHP可以只吐了價值 右後衛了你,好不好? [00:50:09] 然後,我們也只是 剛剛因為我們 可以鍵值對 並不意味著你必須。 你也可以創建 一個正常的陣列喜歡這裡, 在底部,在那裡它 只是一個,兩個,三個,四個。 這些都是我們的價值觀。 而事實上,他們的密鑰索引。 所以關鍵的人會是零。 鍵兩將是1。 等等等等,除非 您明確分配的關鍵, 你可以假設 值只是他們的指數。 這是否有意義給大家? 沒問題嗎? 真棒。 [00:50:38] OK,的foreach是一種 遍歷數組的。 因此,我們有東西在這裡, 只是一般結構。 的這樣的foreach,名稱 我們的陣列,因為不管 要調用每個 在你的數組元素, 我們可以做一些與 該元件或與該值。 所以我們有一個例子在這裡。 我們有關聯 陣列,這兩個條目 與巴正與富相關 和qux正與巴茲有關。 所以,關鍵是foo和巴茲。 價值觀是酒吧和qux。 所以的foreach,我們有我們的數組 這裡,作為關鍵值對。 這使我們能夠訪問 兩個鍵和值。 也許你只是想 值,在這種情況 你可能只是不喜歡改編 美元的價值,然後你 剛剛訪問值 當你遍歷。 但也許,對於一些 所以,你想要的關鍵, 這就是為什麼我選擇 這個例子來代替。 所以,你實際上可以操縱 鍵和值在此情況下。 好不好? 問題嗎? [00:51:41] 聽眾:如果你想 只是操縱鍵,將 你所要做的foreach-- [00:51:45] ALISON:對。 所以,如果你想 操作只是關鍵, 你仍然需要這個 語法,因為如果你只是 有改編的東西, 因為一件事,那就是 將假設你想 的值,而不是關鍵。 所以,如果你曾經只是有一樣, 作為改編,也許這就是像$元素, 它會假設你問 對於剛剛在每個點的值。 如果要明確 做一些事情的關鍵, 即使你不打算 與價值做任何事情, 你需要這個結構 我們在這裡 在那裡你明確要求 兩個鍵和值。 大的問題。 還要別的嗎? 酷。 [00:52:27] 好吧,PHP和HTML。 呵呵,我們又回到了對重新設置7。 所以這應該看起來有點眼熟。 所以這是一些簡單的HTML表單 有打招呼的一些輸入名稱。 我們看到,我們有我們的GET方法。 如果我們從對集還記得, 當這個表單提交, 它發出名為$ _GET數組有 所有來自這些輸入或變量 這應該是形式 操縱在我們的PHP。 因此,在這種情況下,用戶 會把自己的名字。 他們提交。 而且我們看到,我們在這裡得到一些陣列。 我們有GET數組。 我們正在訪問的名稱。 [00:53:11] 這樣說,OK,給我 這與名字相關聯的價值, 命名是這裡的關鍵。 而這直接映射到什麼 我們說我們的輸入名字。 因此,這是給你的關鍵是什麼 將是你的陣列這裡。 這是否有意義給大家? 是嗎? [00:53:32] 聽眾:這個名字進去參考 在[聽不清]紫線? [00:53:36] ALISON:它是指這個位置。 因此,本場就在這裡, 它指的是這個名字在這裡。 因此,這可能已被命名為 像電話號碼,或什麼的。 這個名字實際上是說,有什麼 你打這個領域? 你打算怎麼來 參照這個領域? 而這個名字其實是喜歡,我們 說這句話的領域被稱為名字。 這就是我們如何去訪問它。 [00:53:59] 聽眾:所以是什麼樣子, 輸入名稱等於鮑勃,還有 - [00:54:02] ALISON:對,那麼你 會得到鮑伯那裡。 沒錯。 每個人都很酷? 好吧,所以得到與POST, 這是兩個主要途徑 我們傳遞數據的HTTP請求。 你們應該已經看到 這兩個有希望。 所以用GET,信息 穿過的URL。 所以,如果你做谷歌 搜索,YouTube上,你會 可能會注意到一些問號。 然後,所有的話 您剛才擺在那裡。 和POST將數據傳遞 在HTTP消息體。 所以不像GET,你有種考慮 該數據是從用戶隱藏。 但是,什麼是真正的 重要的是要明白 是,這是仍 就像不安全的GET。 我喜歡用的比喻是,如果 你有你的銀行帳號 你把它寫在外面 一個信封,那是相當不安全。 如果你要在一塊寫 紙,把它放在信封內, 這還真是不安全的,因為 所有你需要做的就是打開了 並期待在實際內容 該消息的一看就知道。 因此,這是“隱藏”,並且人喜歡 認為它是安全的,但它真的不是。 我敢肯定,達文會 進入更多的,也許。 但它是一個重要的 區別使 而一些真正的好理解。 [00:55:15] OK,SQL,結構化查詢語言。 所有的東西, 我們已經看到了這樣最近! 所以它基本上只是設計, 顯然,用於管理數據。 你們有很多的經驗, 這在你的表與PHP MyAdmin。 並有四種常見的查詢 我們希望你們知道的。 因此,有更新,插入, 選擇和刪除。 所以一定要確保你知道那些真的很好。 我們要去 通過他們的真快。 [00:55:40] 所以更新,真的像什麼 你可能會想這樣做, 它只是更新數據庫中的數據。 因此,我們有一些例子來說明。 這是一般 更新查詢的結構。 因此,我們更新表 我們正在談論的。 我們要設置一定的 值,某些列 等於特定值。 因此,這只是更新表,改變 在這種情況下,所有行的值。 因此,在這一輪下來這裡,實際 例如,我們有insert--遺憾。 該幻燈片先進 我沒有意識到這一點。 [00:56:17] 所以這個更新表中設置等於COL1 以VAL1​​那裡的房子等於“宿舍樓裡。” 這是什麼人做的 它只是改變了,只有它 更新特定的地方,這些價值。 因此,在這個第一個,它改變這些 一切在你的表值, 好不好? 這將改變這種 對於每一個輸入欄, 每一個單列。 但是,這在哪裡,你可以 把它看作一個限定。 所以,它一定會改變 它在非常特殊的地方。 因此,在對設置7,當你 也許更新的現金量 您的用戶有,你可能有 一些在那裡ID等於會話ID,對不對? [00:56:53] 因為你不想 改變的現金數額 每個人誰 使用你的網站。 你想改變一個 具體的人,那人是 無論是誰使用它在那個時候。 對不對? OK,所以插入,插入 某些值到表中。 這是當你像 創建一個全新的用戶。 這裡的一般結構 被插入到任何表 我們談論。 值,作為值 我們實際上要插入。 OK,讓我們在這裡看到,我們 已經插入到表中。 這是特定的列與 其對應的值。 因此,這表示,插入 含有一個新行 在值val1和val2中 這些特定的列。 [00:57:33] 因此,也許你只是想填補 出一半的東西在該行中。 這就是這部分在這裡讓你做。 它可以讓你真正 確定哪些部分。 是嗎? [00:57:44] 聽眾:你能只[聽不清] 細胞行[聽不清]嗎? [00:57:52] ALISON:如果你只填寫 您的行的某些部分, 這些細胞其餘都只是空的。 只要你讓他們 是空的,這不是一個問題。 如果您嘗試訪問它們,這是 會返回一些空元素。 但重要的是要知道 在某些表中, 他們已經被允許為空。 您可能已經運行到一個 您對集時的問題 因為我們沒有讓任何 你的價值觀是空的。 但是,你可以指定一個 表中的可選值。 [00:58:26] OK,選擇,所以這是 得到的只是一種方式 從表中的特定數據處 你想要一些標識符。 從表中有那麼選擇星級 山坳等於東西只是意味著, 給我所有相關的數據 其中該特定列是真的。 所以在這種情況下,恆星將 整個行返回給你,好不好? [00:58:49] 然後,在這種情況下,選擇從星 表只是給你整個表。 然後,刪除明顯,它只是 從表中刪除該行。 因此,從表中刪除, 無論表我們 參考,其中的一些具體 標識符或一些條件為真。 是嗎? [00:59:07] 聽眾:問題。 你為什麼要使用雙 報價,以及是否 做雙引號或單 報價,這有區別嗎? [00:59:13] ALISON:雙引號或單引號 不使SQL差異。 我以為我看到了另外一個問題。 是嗎? [00:59:20] 聽眾:不影響它什麼 從查詢中獲取逃脫? [00:59:25] ALISON:羅布? [00:59:27] 羅伯:那你的意思 從查詢逃出? [00:59:31] 觀眾:如果有人有 形式單一查詢of-- [00:59:36] 羅伯:如果有人要 把一個單引號, 那麼只要你消毒 您的輸入,那麼也沒關係。 但是,如果您使用的是單 報價和你是不正確 逃避你的投入, 那麼是的,他們需要 把一個單引號,以打破 你的代碼。如果使用雙引號, 他們需要把一個雙 舉打破你的代碼。 但只要你逃避的事情 正確,也沒關係。 它只是將被翻譯 以正確的符號而已。 [00:59:59] 聽眾:是什麼逃生呢? ALISON:嗯,像 消毒和逃生。 我們有考試,偉大的XKCD 漫畫,他們拉起,你有, oh-- 羅伯:這是最後一張幻燈片。 ALISON:這是最後一張幻燈片,真的嗎? 哦,我的上帝。 在那裡,我們走了,完美。 OK,所以基本上,你可以注入 事情到這個SQL查詢 它傷了你 代碼或大衛顯示 在課堂上,如果我們有一些單 報價1等於1,如果在我們的代碼, 我們只是直接複製,在和 我們有一個結束的單引號, 發生的事情是,我們得到 一些表達式 計算結果為true即會 讓別人進入我們的數據庫 並獲取數據,我們 不想讓他們得到的。 所以消毒的投入 只是意味著確保 我們正在逃避這些 人物和他們的指定 作為字符,而不是東西 應允許 要採取字面上 作為我們的SQL語句。 [01:01:04] 因此,大的事情,我們說 那你們應該使用 是HTML特殊字符, 這是一件好事 你可能想看一看。 OK,刪除。 數據類型,這都將是網上。 既然我們已經離開了15分鐘,我 剛準備走的權利,通過這一點。 PHP和SQL,基本上這是 剛剛我們有一個引導作用, 幫著防範 這些惡意攻擊。 所以每當你使用 查詢中,我們要確保 事情被消毒和諸如此類的東西。 [01:01:36] MVC只是一個設計模式, 這樣的模型,視圖控制器。 這只是一種方式讓事情 好和以相同的方式分裂 我們傾向於因素 從代碼到功能。 這僅僅是一個網頁設計的框架 它允許你做同樣的事情。 我要跳過此。 [01:01:54] 這是後話,我 將超級舒適的使用。 這是一個偉大的小桌上。 它給你的函數 例如模型。 我只是要通過這個,因為我 真的要達文才能夠說話。 如果你有任何問題, 請隨意。 之後我會在這裡。 只是來跟我說話。 就這樣,我們有HTTP狀態。 和達文的打算炸毀 通過這15分鐘。 這將是巨大的。 [01:02:17] DAVIN:OK。 嗯,你的麥克風? 是啊。 抱歉。 ALISON:路做好準備。 DAVIN:不,我已經準備好了。 我準備好了。 讓我們做到這一點。 它的準備。 好不好。 抱歉。 我把咖啡灑在我自己。 我不知道如果我更 心煩意亂,我看傻了, 或者說我沒有咖啡了。 反正,只是一個快速公告 關於紙張你們有。 所以這個表你們有沒有 官方有什麼的測驗。 這是官方的什麼在測驗。 此外,在網站上,我們告訴 你,OK,這將是對測驗。 所以在小備忘單 你有,不是官方的。 而且有它的錯誤。 所以最好不要只是一味地使用它。 所以,是的,就是這樣。 因此,讓我們進入這個真正的快。 [01:03:05] 因此,HTTP狀態。 所以會發生什麼時 網站,一切都很好。 一切都OK。 一切都回來 你你想要的方式。 你得到一個200 OK。 301,在那裡我們已經看到,301呢? 等一下,這是怎麼回事? 抱歉。 我們的安全時看到我的錫講座。 所以安全期間,因此,如果大衛鍵入 HTTP,然後試圖去cs50.net, 你會看到301移動。 為什麼呢? 因為它會重定向 您將自動為我們的HTTPS。 [01:03:35] 所以301提出,只是它的 基本上是一個重定向。 你可以考慮一下這樣的。 任何開頭2的的狀態的, 這些都很喜歡,OK,一切都OK。 任何啟動的狀態 3,那些重定向。 狀態開始的4,該裝置 有一些客戶端錯誤的。 狀態開始的5, 這是某種形式的服務器錯誤。 種所以你分手 在狀態類的。 所以304不是沒有修改,所以在你的 server.c對集,讓我們說你 加載cat.html。 一切都回來了, 你會得到200秒,OK,太好了。 [01:04:03] 比方說,你刷新它。 那麼,這裡面 cat.html,你有一個JPEG。 嗯,JPEG不 會得到重新加載。 你不會張貼另一 GET請求到服務器, 然後讓所有的信息反饋。 這將只是be--的圖像 將被緩存的機器上。 並且使得圖像將是一個304。 所以它沒有被修改。 如果你再平倉,清晰 餅乾,然後刷新 並嘗試加載網頁 再次,你會看到200秒。 你不會看到304。 [01:04:28] 400,錯​​誤的請求,真正的 很快,就像如果你 將要發送 JSON對象服務器 和你的JSON對象是不正確的, 你會看到類似的東西。 403,禁止的。 當你看到一個被禁止? 大概大概? 聽眾:CHMOD。 DAVIN:文件模式,是的。 所以,你還沒有設置 權限正確。 404,沒有找到。 它只是不存在。 如果你在錯誤的URL類型,這樣。 500內部服務器錯誤,服務器 可能未正確配置。 東西不是你的終點,而是 一些在服務器端。 和503? 很多人都看到了 503S中的最後一個P-集。 什麼時候發生的呢? 我聽到傳聞。 [01:05:05] 聽眾:當谷歌 決定你是一個機器人。 DAVIN:是的,當谷歌決定 你是一個機器人,你得到503S。 所以這是一個過載。 如果你從服務器請求 太多了,它通常是暫時的。 而且大部分你注意到了這一點。 所以,你看到了503。 你可能已經採取了一點 突破,那麼503S就走了, 和一切都沒有問題。 [01:05:20] GABE:真正的快,什麼時候你們得 大概在500這個最後的問題設置? 是嗎? [01:05:27] 聽眾:通常,如果 服務器有錯位的文件 或[聽不清]他們 機[聽不清]。 [01:05:34] 蓋柏:所以這可能是一個配置 問題在你的PHP服務器上。 但它可能只是一些 就像一個分號你忘了。 如果你輸入PHP, 一些不正確的語法 可能讓你類似的東西。 好不好? [01:05:46] DAVIN:酷。 你想我做只是直到AJAX? [01:05:51] GABE:[聽不清]。 DAVIN:OK。 那麼什麼是DOM? 什麼是DOM代表什麼? [01:05:55] 聽眾:文檔對象模型。 DAVIN:尼斯。 為什麼我們喜歡它? 真棒。 對,所以它只是允許我們訪問 在HTML,很快進入我們的頁面。 為什麼呢? 因為我們對待我們的 頁面,對待我們的HTML標籤, 一切治療 因為如果他們的對象。 如果我們對待他們像他們 對象,那麼我們能做些什麼? 好了,我們可以對它們調用的函數。 這是很重要的,為什麼? 好了,因為我們要使用 JavaScript來更新我們的HTML, 更新這些對象。 因此,如果我們像對待對象, 那麼我們就可以對它們調用的函數。 我要進入這個有點 當我進入更多的JavaScript, 但你都見過像 的document.getElementById。 所以,文件是你 元素,讓元素通過ID, 所以你要去看看 在一個HTML標記的一些標識。 然後,你可以做 別的事情了。 例如,像document.body的, 那麼你就可以追加孩子。 所以,你要找到這個文件。 你有這個文件。 你會發現身體。 你發現屍體。 然後,你要 調用一些功能就可以了。 因此追加的孩子,你可以追加 一些HTML到您的身體內結束。 所以基本上,你只是 對待它像一個對象。 你在處理HTML 標籤就像一個對象。 它可以很容易 快速通過他們去。 但它也可以讓你 調用函數對他們 這樣你就可以操縱 和改變的元素。 [01:07:04] GABE:鑑於此,為什麼這樣的JavaScript 一個很好的語言與HTML互動? 奇怪的是,當人們選擇 用於瀏覽器中的語言, 對於客戶端, JavaScript是非常好的, 它在處理對象確實不錯。 和對象是那種喜歡 出現在HTML中的對象, 所以它是很容易的JavaScript 做那種處理。 DAVIN:尼斯。 所以這裡只是一個例子。 所以我認為在去年的測驗, 或許在兩年前,我們 要求你創建一棵樹。 因此,這正是你想要做的。 所以,你的文件開始了。 然後你基本上 只要看看標籤。 所以,如果你看,我們 開始與HTML標記。 然後,你會得到關於如何線索 這樣做基於縮進。 所以頭一種分支關閉。 裡面的頭,我們有 另一個標籤稱號。 那麼,我們有一個標題標籤。 而這裡面,我們有一些字符串。 因此,我們代表 字符串中的圓。 和所有的標籤都在廣場。 [01:07:54] 如果你看一下,如果我們 認為這是一棵樹, 讓我們說,HTML是 父母,然後頭部和身體 將要兄弟姐妹。 他們都將是 是父母的孩子。 所以,因為他們是 雙方的兄弟姐妹,他們是 會是怎樣的旁邊 對方在我們的樹模型。 然後,你基本上 做同樣的事情。 所以並不困難,但我們已要求 類似這樣的問題之前,對測驗。 GABE:有誰 有問題這麼遠嗎? 這是好? DAVIN:酷。 JavaScript的,OK,好東西。 所以,JavaScript的,什麼是JavaScript? 那麼,JavaScript的is--它 複雜,但這些 有一些亮點 你應該記住。 首先,它是鬆散類型。 這意味著什麼? 所以PHP was--是的,這是怎麼回事? [01:08:35] 聽眾:你不必明確 狀態是什麼類型的變量。 DAVIN:完美。 所以他說,你不必 明確說明變量的類型。 這是完全正確的。 因此,在C,如果我有INT I等於50, 然後在PHP中,它只是這樣,$ I, 等於50。 那麼在JavaScript中, 什麼電話呢? VAR,對不對? 它會像變種i等於50。 但你不必是 就像,OK,這是一個int。 OK,這是一個字符串。 沒有必要那樣做。 這是一種解釋型語言。 那麼,什麼意思呢? [01:09:04] 聽眾:不編制。 [01:09:06] DAVIN:不編制是什麼意思? 是嗎? [01:09:11] 聽眾:你不必 重組代碼 得到它準備 計算機來運行它。 它只是在拍攝的時候 執行和計算機[聽不清]。 DAVIN:是的,所以它要 通過一名翻譯。 但你完全正確。 所以,你永遠不會 編譯它,對嗎? 當你做你的 PHP和JavaScript代碼, 你從來沒有所謂的編譯。 你從來沒有所謂像 使之類的東西。 這是因為它的解釋。 所以,每次經過瀏覽器的時候, 它通過一個翻譯。 那就是要解釋它 只是實時馬上為您服務。 那麼,什麼是一些正面和負面 到具有解釋性語言 並具有編譯語言? 所以compiling--是的,這是怎麼回事? [01:09:50] 聽眾:解釋較慢。 DAVIN:在何種意義? [01:09:57] 聽眾:當你 編譯,你不必 做任何額外的步驟來執行 它,而這[聽不清]。 [01:10:04] DAVIN:是的,完美的。 所以你說的是什麼 基本上是編譯, 當你編譯,你有 大量的前期成本,對不對? 你要編譯它。 但經過編譯吧, 編譯器去優化它。 這將是快。 這將基本上 以最快的速度,因為它可以。 有了解釋,你永遠不 有前期成本。 相反,它會稍微慢 每一次你解釋。 而你將不得不 解釋它每一次。 所以具有代替這 一次性費用,現在你 將不得不把它解釋 每次頁面呈現。 [01:10:29] 所以口譯是好的,因為 你不必編譯它, 但他們在每一個壞 一次頁面加載,它的 將不得不 解釋這個JavaScript。 而且它會運行速度稍慢 比如果你編譯它。 讓你communicate--哦,等待。 用於操縱 內容和外觀。 我們剛才講了。 它使用了DOM。 AJAX,我們就進入 AJAX在一點點。 然後,它的客戶端。 所以PHP是服務器端。 JavaScript是客戶端。 什麼是積極的嗎? 它說。 它的速度更快,對不對? 因為你沒有to--它的速度更快。 你沒有進行通信 與其他一些設備。 如果你只是在你的 客戶端,你永遠 將不得不去 看看有什麼在服務器上 然後報到 或者類似的東西。 因此,客戶端往往 可以快一點點。 [01:11:15] GABE:是的,但是這 並不意味著PHP是 比速度更快的JavaScript 或類似的東西。 它們在相同的運行種 速度,因為他們都 解釋型語言。 事情是很慢 這裡是請求。 所以,你實際上會 一路之上,以巴西 得到一些信息 那個住在這裡。 但是,PHP和JavaScript,它們 種在以相同的速度運行。 這並不是說一個是 比其它快。 這也就招這裡的問題。 所以,JavaScript的從未成為 機器代碼,真的還是假的? [01:11:47] 聽眾:假。 GABE:假。 它有可能成為機 代碼,因為機器代碼 唯一的機器理解。 雖然它不是編譯 它仍然成為機器代碼 因為解釋就是 一個程序,去一行一行 和轉換的行成 一些計算機理解。 好不好? 酷。 [01:12:08] DAVIN:這裡只是一個很基本的 你好世界JavaScript程序。 所以,我不知道你if--已經看到這一點。 但你有HTML這裡。 和而不是實際投入 JavaScript的腳本標籤, 所以你通常把它放在頭上。 你有腳本標記。 你把它。 所有我們在這裡所做的是,我們已經聯繫in-- 所以我們在JavaScript文件已鏈接 像這樣。 你總是這樣,對嗎? 所以,當你正在使用jQuery和 在最後的P-集underscore.js, 你不必噸的代碼在 你的腳本標籤,在你的頭上。 你可以這樣做,而是 你只是鏈接進來。 您所鏈接它 就像你做的CSS。 所以它只是使得它更容易閱讀等 你的代碼是不是像1000線長 與噸的功能, 你可能無法使用。 [01:12:52] 相反,你只是鏈接進來。 這是間隔化。 這就像寫一些頭文件, 那麼包括C.該頭文件 認為它就是這樣的。 那麼,這是什麼呢? 好了,這是怎麼回事運行。 它會提醒。 所以,你會得到一點點 彈出所謂的hello world。 快速的問題,只是完整性檢查, 所以你在這裡看到的身體, 要說身體,HTML這裡。 什麼是第一位的? 難道我看到身體,HTML這裡, 還是我看到的警報第一? [01:13:19] 聽眾:警報。 [01:13:20] DAVIN:對。 他說,警報。 為什麼呢? [01:13:22] 觀眾:因為你 去從上到下。 [01:13:24] DAVIN:是的。 完美。 所以他說,你從上面去 底部,這是完全正確的。 你要去上下。 而在JavaScript中,jQuery的,你有 功能就像onload事件,或者準備好了, 並說,OK,等到 這一切的HTML已加載。 然後,調用JavaScript。 因為我們沒有在這裡,該 這會發生的第一件事 是它要去自上而下。 它會擊中JS 調用,它會提醒。 之後,單擊確定, 該警報消失。 然後,它會顯示 你在這裡身體HTML。 尼斯。 [01:13:54] OK,所以才真正的快,寫作 在JavaScript中是超級快。 為了聲明 一個變量,變種的名稱。 因此,在C,你有INT I,你有 聲明它是什麼樣的類型。 PHP,$。 JavaScript中,VAR。 我們談到了這一點。 好了,我們走吧。 [01:14:11] 循環,同樣的事情。 同樣的事情。 函數聲明,所以 就像你所看到的C. 唯一不同的是,所以當 你到了其他編程語言, 就像當你需要51下學期 和你正在做與OCAML, 你可以處理匿名函數。 所以,這正是你在這裡。 所以,你想放的總和, 某種總和值。 但你可能只能做一次。 所以,你不想把它的功能 總之,給它一個函數聲明。 相反,你只是用它 作為一個匿名函數。 你已經看到這個有很多。 你會看到的一個例子 這幾個幻燈片。 是的,我們將拭​​目以待。 GABE:好問題。 你什麼時候可能要使用 匿名函數嗎? 基本上,當你想要的東西, 像一個事件,發生的。 所以,當鼠標 點擊,例如 你想一些函數被調用。 所以,你傳遞給事件 處理程序,傳遞給事件, 種,所述功能 要被調用。 和你傳遞什麼 就像是,在結束 的一天,只是一個指向 該指令,給該函數。 所以它不喜歡你傳遞 整個代碼,就像 一指針的功能。 然後,當有人點擊的 鼠標,那麼函數被調用。 [01:15:17] DAVIN:數組,所以你 有一個數組聲明。 然後,一個數組把事情英寸 真正的快,你會這樣打印出來? 什麼將第三個元素是什麼? [01:15:31] 聽眾:“JS”。 [01:15:32] DAVIN:對,這將是“JS”。 等待,回去。 什麼是長度? [01:15:37] 聽眾:三。 DAVIN:三,對不對? 正是你想什麼。 OK,現在去。 陣列,您可以添加的東西給他們。 這樣你就可以超越 他們最初的界限。 只是要記住。 PHP,JavaScript的,他們是一點點 位在物聯網方面更寬容 這樣的。 對象,很喜歡 結構的C,非常 就像在PHP關聯數組。 你都有這方面的經驗。 因此JSON,當你路過JSON 來回在對置8, 這是你的對象。 [01:16:03] 所以是的,舉例來說,真正的簡單的例子。 這裡是一個對象。 你參考這個問題的方法 對象,所以才真正的快, 比方說,我想找到 出來,OK,什麼課程? 所以這裡的對象名稱是CS50。 然後,如果我有一個關聯 陣,我將如何做呢? 我將使用的一個關鍵,對吧? 所以,我有數組的名稱。 我有支架,行情,關鍵, 最終報價,尾架, 並且,將引用該 我的元素關聯數組裡面。 我如何引用 當然,我的對象裡面? 有人知道嗎? [01:16:39] 觀眾:[聽不清]。 [01:16:40] DAVIN:這是怎麼回事? 聽眾:CS50.course。 DAVIN:對,是的。 所以CS50.course。 所以,你的方式引用的東西 一個JSON對象中是一個點。 [01:16:48] 聽眾:你也可以使用數組語法。 [01:16:53] DAVIN:OK,很好。 [01:16:54] GABE:您還可以使用CS50支架, 字符串,如引號。 觀眾:我認為這是等同於PHP。 蓋柏:這是同樣的事情。 DAVIN:好! 但你會看到這個其他地方。 是啊,這樣繼續下去。 這就是我剛才說的。 所以,進入一個JavaScript jQuery的例子。 所以這是我的DOM,對不對? 真正的快,所以我有一個 頭,招呼世界,身體。 我有一個按鈕。 它說:“推我,”所以我要推。 我想要做的事 當它的點擊。 右,下一個。 [01:17:31] 沒錯,所以這是我的JavaScript。 所以,jQuery是只是一個簡單的 的方式來編寫JavaScript。 所以這一點,就是我要告訴 你接下來的,將是jQuery的, 是相同的。 因此,他們會做同樣的事情。 只是jQuery的往往是更容易一些。 人們往往喜歡它了。 它有很多的功能。 所以,人們往往使用jQuery。 你們都在最近對一組使用jQuery的。 那麼,什麼會這樣呢? 什麼將這個JavaScript--等 這只是普通的JavaScript。 怎麼會這樣呢? 會是什麼呢? [01:18:03] 因此,首先,你看到窗口的onload。 對不對? 所以我們沒有之前看到。 因此,這是要等待 直到整個窗口載荷。 所以它要等到 在HTML中,所有的圖像加載 它做任何事情之前。 因此,讓我們說,我們的DOM加載。 一切都在那裡。 那麼會發生什麼? 是嗎? [01:18:19] 聽眾:出現按鈕。 [01:18:22] DAVIN:按鈕已經存在。 是啊,所以按鈕的已經存在。 但是,這會說, OK,如果我按一下按鈕, 所以按鈕的已 在那裡,這樣的HTML標記。 等待,回去真快。 這個標籤對對這裡 將是一個按鈕已經。 目前已經是一個按鈕。 但隨後,JavaScript的 標籤,在這裡, 它說,OK,我想 通過ID來獲得元素, 所以搜索按鈕只是說,OK,我想 映射這個變量的按鈕。 使變量只是一個 更簡單的方式來訪問該按鈕。 我說好,如果我點擊了 按鈕,所以如果我點擊該元素, 與該元素指 按鈕,如果我點擊它, 那麼我想調用一個函數。 這裡是那些匿名之一 功能我們都在談論。 [01:19:03] 只是調用一些功能。 在那個功能,基本上 這是我們見過不少,警報。 單擊搜索按鈕。 這將基本上都有一個按鈕。 你點擊它。 你得到警報。 X了。 就是這樣。 是嗎? [01:19:16] 觀眾:所以,如果你把腳本 在你的HTML [聽不清],腳本標籤? [01:19:21] DAVIN:你可以把腳本 在head標籤直 因為你有這樣的onload。 這也是你有一個點擊。 所以它要等到 你點擊的東西。 但onload事件僅僅是為了安全起見,使 確保一切都加載到你的HTML 事前。 是嗎? 你想說點什麼? [01:19:40] GABE:[聽不清]。 DAVIN:是的。 [01:19:42] 聽眾:所以的onload避免 定義變量搜索按鈕 通過只是說的document.getElementById 搜索按鈕點[聽不清]。 [01:19:49] DAVIN:當然,但隨後 您的字符串只會越來越大。 沒錯,所以這只是 讓您更容易,是的。 是嗎? [01:19:56] 聽眾:如果我們做 創建的window.onload? 或的document.ready? [01:19:58] DAVIN:是的,有。 是的,有,我查了。 [01:20:02] GABE:不為他們所關心的。 [01:20:03] DAVIN:OK,所以我打算 反正告訴你。 所以基本上,只是一般,所以 在window.onload等待,直到你的DOM,所有 你的HTML,負荷。 它等待,直到你的圖像加載。 它等待,直到一切都加載。 的document.ready,它只是 等待,直到你的DOM負載。 一旦HTML都在那裡,一旦 您的DOM是存在的,開始運行。 這是唯一的區別。 [01:20:23] GABE:快速合理性檢查這裡。 因此,這可以種看到 像一行代碼,對不對? 因為它是在window.onload 等於一堆東西。 如果JavaScript讀取這個,真的還是 假的,功能被執行。 假的。 好不好? 這裡發生了什麼,你只是路過 這個功能作為一個匿名函數 要在window.onload。 然後當它準備 真正得到執行? 當窗口負載。 這是一個事件。 所以,這絕對噸的事我們 談到早前,對不對? 因此,當事件發生時, 該功能發生。 同樣的事情的onclick。 [01:20:59] DAVIN:OK,所以有人把 走的document.ready。 但是,這將是準確的same-- 聽眾:美元符號, 這是一個的document.ready。 這是一個捷徑。 [01:21:07] DAVIN:哦,那是什麼? OK,所以這意味著 的document.ready,快捷。 但是,這是相同的window.onload 除了那差別不大 我告訴你。 這是jQuery的。 所以這是完全一樣的 件事 - 這是JavaScript的。 這是just--一些人認為它 作為一種重量越來越輕,圓滑的版本 有很多功能 你很可能會使用。 因此,這不完全一樣的事情。 [01:21:34] 種這樣的事情指出。 所以,在其他例子中,我們 過的document.getElementById, 所以我們有這個長 字符串,它會變得 不論如何標識它具有的元件。 這取代了這一呼籲就在這裡。 所以你看美元符號, 然後就看到報價,包括hashtag。 #標籤始終是一個選擇器。 它說,OK,這是因為有一個ID。 什麼是選擇一類? [01:21:56] 觀眾:點。 [01:21:57] DAVIN:點了吧。 如果你只是要 選擇一個標籤,是什麼呢? 這只是標籤,沒錯。 你可以使用,在這裡,以及。 [01:22:05] GABE:而按標籤,我們的意思是像 格,例如,或頭。 [01:22:08] DAVIN:或身體或P或 這樣的事情,是的。 所以在這裡好了,對,不是說 的document.getElementById, 這僅僅是同樣的事情。 就在jQuery的,它的短。 所以它的簡單。 那麼,沒有更多的onclick,只需點擊。 jQuery函數,調用這個函數。 警報是完全相同的。 所以這是一個有點 較小的,或點點 短,有點bit--人認為 這是一個比較容易寫出來, 一點點更容易理解。 但是,這是jQuery的。 很多人得到一點 有點迷茫和擔憂 他們認為,OK,jQuery的 是不是JavaScript不同。 我一定要記住這些 兩個不同的東西。 它不是。 我的意思是,這是不同的語法。 但jQuery是JavaScript的。 這只是一個看似 更好的版本, 可能會更容易 明白的人使用。 GABE:是啊,是 說實話,那美元符號 您在jQuery的看到,這只是 一個函數,它的jQuery定義的名稱。 它沒有什麼特別的。 是它的功能只是名字, 就像你可以定義美元符號。 [01:23:03] DAVIN:是啊,所以談到這一點。 一些有用的東西。 我回頭望著老測驗。 在過去的幾個小測驗,他們已經 只好用這樣的事情。 所以的document.ready,所以 確保一切的 之前加載開始做的事情。 選擇的ID,或選擇 一類,它剛剛 是報價點綴一些類,最終報價。 提交,所以如果你 提交表單和呼叫 表格後此功能提交。 價值,所以讓我們說我有一個表格 提交,像用戶名,電子郵件, 隨你。 我有一個文本框。 所以,我打字到該文本框。 好吧,如果你想要得到的價值 指出,文本框,您使用點VAL。 然後,到這裡, 點HTML是相同 就像文檔點 的getElementById點的innerHTML。 所以這是怎麼回事返回 您從ID的HTML。 在這裡,你只需要使用一些 ID或什麼點HTML。 這會得到該元素的HTML。 如果你想要再改變 HTML,你可以通過它的東西。 所以,你會像點HTML,然後 裡面,行情,新的HTML或什麼的。 [01:24:05] GABE:OK,所以AJAX。 我真的很喜歡了解 AJAX真的很好。 所以我想你們來 了解AJAX真的很好。 因為如果你這樣做, 你幾乎會 要了解的一切, 必須與HTTP,PHP, JavaScript的,因為這一切 走到一起的AJAX。 AJAX是不是一種語言。 AJAX是一種技術。 它使用許多不同的工具。 AJAX代表 異步JavaScript XML。 這樣的方法中,語言的數據。 [01:24:36] 因此,我們使用的主要語言 在AJAX引發的一切 並處理一切 後來是JavaScript的。 這就是為什麼它涉及 非常接近的JavaScript。 然後是異步 因為我們不這樣做 全部一次,當我們加載頁面。 這是東西,我們可以 平行做樣的東西。 背後的主要思想 AJAX是要 它得到一些具體信息。 例如,當你鍵入新 當您註冊一個用戶名的用戶名, 我的用戶名是ABC123。 然後,在所述的端部 表單,你必須點擊提交。 它不得不去到服務器, 然後檢查是否在數據庫中, ABC123已經存在。 如果它已經存在,它說, 用戶已經在數據庫名。 而且,你必須填寫 出整個表格了。 ,這是真的,真的很糟糕。 [01:25:23] 然後人們說, OK,我們為什麼不能只是 做一個小的HTTP請求只是檢查 看是否該用戶是在數據庫中 用戶不得不前 提交整個形式? 因此,例如,當 用戶輸入完ABC123, 讓我們只去服務器一點點 位和剛剛獲得一個真或假的 從服務器,如果看到 這是一個有效的用戶名或不。 好了,這就是主要原因之一 使用AJAX時下仍在。 [01:25:49] DAVIN:所以真正的快,在 jQuery中的Ajax調用, 你可以表明您 希望它是同步的。 你不應該這樣做。 但你可以做到這一點。 如果你這樣做,會發生什麼? 嗯,比如說,當你 瀏覽新聞或什麼的, 您的瀏覽器只是要等待 直到整個呼叫完成 而不是讓你做其他 事情之後你點擊它。 [01:26:14] 蓋柏:這不是傳球了。 哦,我的上帝。 對不起! 是啊。 “在過去, 客戶需要的請求 一個網站的全部內容“。 這就是我說的。 它使我們能夠發送 額外的GET或POST 無需請求 重裝我們的瀏覽器。 所以在這一天結束時,我們 其實做一個HTTP請求 這裡使用JavaScript。 因為在此之前,我們只用JavaScript的 改變已經來到了HTML。 而現在,我們可以用它來對接 與該web服務器以及。 出現這種情況的方法 是我們的客戶。 達文是一個客戶端。 而他所有的JavaScript 運行,因為HTML是愚蠢的。 JavaScript是聰明的。 所以達文達文有他的聰明 一部分和他的愚蠢的一部分。 他現在打算用他靈巧的一部分。 他會使用JavaScript 到請求,例如, ABC123是否處於 數據庫或沒有。 [01:27:04] 所以達文,請,你只要 給我發送一個HTTP請求。 謝謝。 於是,他剛發的HTTP請求。 你看到了嗎? 而這只是以同樣的方式 任何HTTP請求被發送。 瀏覽器,谷歌 Chrome或什麼的,是 要看到,達文的 試圖發送一個HTTP請求, 要幫助HM一點點。 這就是要去 一路到服務器。 現在,該服務器都將有 PHP此處,或任何其他語言。 就像在一個正常的HTTP請求。 這幾乎是一個正常的HTTP請求。 [01:27:31] 然後,服務器 會說,OK, 達文要我檢查是否 這ABC123是在數據庫中。 去談話模型。 該模型認為事實並非如此。 ABC123是一個很好的用戶名。 然後,Web服務器將要 用PHP來渲染某種形式的文件。 這可能是從字面上只是一個文件 包含“是”中,或“否 或者類似的東西。 它可以是任何文件。 [01:27:54] 它可以像我要去 發送達文鴨子的圖片 如果是在數據庫中, 送倉鼠的照片 如果它不是在數據庫中。 這將是怎樣的 愚蠢的,但它會奏效。 OK,所以我送出一枚鴨蛋,以達文。 達文了一​​隻鴨子。 而現在,誰去 處理鴨子? 達文的智能的一部分再次, 因此JavaScript的,對不對? JavaScript的發送 請求和JavaScript 將要接收該請求 並解釋它以某種形式。 [01:28:22] 在這個意義上,這將 說,OK,如果鴨那麼我很好。 如果倉鼠,然後我要去 說,沒有,用戶名已經 存在於數據庫中。 但通常情況下,你不 要送出一枚鴨蛋。 你要送 一些稍微聰明。 而我們使用的是XML。 而最近,我們使用JSON。 JSON只是JavaScript的 對象符號,這 基本上你會得到一個 整個JavaScript對象。 你把它放在一個文件中,就像 這CS50對象你們所看到的。 你把它放在一個文件中, 你送過來給達文。 [01:28:53] 因此,在這種情況下,我會 做一個JavaScript對象 而只是說,用戶存在,是的。 或者用戶存在,沒有。 並寄回給他。 和JSON,為什麼? 因為人 誰在接收這 要使用JavaScript 處理響應。 和JavaScript的工作這麼好,因為 這就是所謂的JavaScript對象符號。 對不對? 於是,他只需調用一個函數,並得到 從響應這個漂亮的對象。 然後,他會知道是否 該用戶是在數據庫中或沒有。 [01:29:22] 所以你看,這一切到來 一起在網絡服務器, 再有一到HTTP請求 和一個HTTP響應和一切。 所以一定要確保你們 明白這一點AJAX調用 因為它可以幫助你了解所有 的概念,我們正在談論。 [01:29:37] 所以這裡有一個例子 AJAX的使用jQuery。 在這裡,我們以get JSON。 因此,我們不是要得到一個 形象在這裡貓,或鴨。 我們正在試圖獲得一個JSON文件。 然後我們等到 它的完成,點完成。 這意味著我在等待響應。 這可能需要一點時間。 然後,你看到一個小負荷。 如果你想要做的,在你的網站。 所以斑點做,然後什麼 發生時,它做了什麼? 你傳遞一個匿名 功能,就像我們之前看到的。 因為做的是一個事件,只是 像點擊鼠標或什麼的, jQuery的。 所以,你通過這個函數 數據,文本,狀態和jqXHR。 基本上,這是 只是一些變數 您可以使用以後有 在HTTP請求的狀態, 數據,這是怎麼回事 要回給你。 這樣的話,你可以在以後把它解釋 做一些有意義的事情吧。 如果失敗,當會失敗? 那麼,當HTTP請求給 你一個500或類似的東西。 然後,它會告訴你 狀態,什麼樣的失敗,這是的, 和各種各樣的事情。 你必須確保 處理這兩種情況下, 否則,程序進入瘋狂。 [01:30:42] DAVIN:所以是的,這正是 你看到了你的最後對集的內容。 實際的AJAX調用是在get JSON。 即該呼叫。 然後,點做得像 它會檢查它是否成功。 如果成功的話,你想 做一些與數據。 您從取回 JSON請求數據。 這就是你回來。 所以,如果你從你對集還記得, 很多你喜歡的數據支架我 或什麼的,點的鏈接或標題。 凡是回來 從JSON,無論 該字段是在JSON對象, 這是你在說什麼了。 數據是你在說什麼了。 文本狀態,只是一些 讓你知道發生了什麼事。 然後,在jqXHR,這只是 jQuery的XML HTTP請求。 這就像一個對象。 然後失敗,就像加布說。 GABE:在我們的小ABC123的例子 只是為了檢查,如果這是在數據庫 還是不行,數據會是你 會做,如果數據點的用戶名存在, 這是你的PHP生成的內容 你,如果數據點的用戶名存在,那麼 我要提醒,用戶 名稱已經存在。 否則,我只是打算讓 用戶開始填寫表格。 OK,安全,涼爽。 [01:31:50] DAVIN:要我? [01:31:52] 蓋柏:我喜歡這一個。 因此,一些看起來很熟悉。 我們幾乎已經完成。 因此,這僅僅是個例子 你們在課堂上看到的。 你正在使用argv1這裡。 這就像一個命令行參數。 我們正在MEM複製的 成大小為12的緩衝區。 有什麼問題嗎? 緩衝區溢出! 因為我們有大小為12的緩衝區。 argv1可能有兩個十億大小。 我們沒有做任何邊界檢查。 因此,我們可能會複製大量的內存。 我們將特別 不好了。 我們能做的就是 非常,在這種情況下,很是什麼意思? 是嗎? 聽眾:部分二十億東西 包含返回可執行代碼 [聽不清]。 GABE:沒錯。 所以這是什麼樣的 人們使用的東西 越獄的iPhone,例如。 所以,那種事。 因為你可以使設備 執行任何你喜歡的代碼。 修復,所以修復容易。 只是檢查的範圍。 您檢查空,因為 我們總是檢查空 當我們正在處理的字符串。 然後,你拿 字符串長度之前。 而且,如果該字符串 長度是一個有效的字符串 長度,它是在0 和12,那麼我們是很好的。 [01:33:03] DAVIN:如果你不檢查 空,真正的快,會發生什麼? 它會賽格故障。 為什麼它賽格故障? 因為你調用strlen的對空。 GABE:是的。 真的還是假的,使用一個 密碼是一個好主意。 [01:33:19] 聽眾:假。 [01:33:20] GABE:假。 使用許多密碼和又大又長的。 掛鎖圖標確保安全性。 [01:33:26] 聽眾:假。 [01:33:27] GABE:假。 這並不意味著什麼。 這只是一個圖標。 SSL可防禦 中間人攻擊。 聽眾:假。 GABE:假。 好了,所有這些都是假的。 尼斯。 [聽不清] 要談這個? 輪到你了。 DAVIN:類型的攻擊, 中間人。 什麼是在中間人攻擊? 觀眾:[聽不清]。 DAVIN:如果你發送一個HTTP 要求,他們能做到這一點,對不對? 但是,如果你發送HTTPS,他們 可能將無法做到這一點。 有很多點 沿著你的連接。 你有路由器。 你有DNS服務器。 如果有人能夠物理上 看到你發送的東西, 所以有人能 你們之間真正得到, 在客戶端,服務器,並且是 能夠看到你發送的東西, 這是在中間人攻擊。 所以看到你正在試圖從得到什麼 服務器,或者是能夠see--差, 你也許能看到 餅乾之類的東西。 [01:34:16] 因此,例如,如果 你沒有使用SSL,他 可能能夠看到 您的會話ID的Cookie。 這被稱為會話劫持 因為他看到你的ID的Cookie, 然後他能去那 網站,假裝是你。 因為就像在PHP中,記住 當我們登錄了,我們怎麼辦? 我們設置會話ID等於ID。 讓你識別。 這就是為什麼你可以看到你的投資組合 而不是其他人的投資組合。 [01:34:38] 好吧,如果我能得到那個cookie, 然後我就可以登錄到該頁面。 然後,我就可以看到你的東西 並開始買賣東西。 所以這是會話劫持。 但你不應該能夠to--所以你 可以使用中間人攻擊 即使他們正在使用SSL。 但你不應該能。 如果他們使用SSL, 你不能會話劫持。 為什麼呢? 因為它的所有加密, 對不對?如果它是加密的, 而我仍然在一個人 中間,我仍然得到你的數據。 沒關係。 但它的加密。 所以我真的不能使用它。 所以,這兩人。 [01:35:09] 真正的快,跨站請求偽造。 這只是如果有一個鏈接 而該鏈接做一些事情 你不認為它應該做的。 因此,例如,如果鏈路是 打算買股票或賣出股票, 你不知道。 您單擊的鏈接, 發送的請求,購買了 或出售的東西, 你不是故意這樣做。 就是這樣。 [01:35:25] 跨站腳本,所以在這裡, 您是通過變量Q傳遞, 而不是通過某種 價值,也許q是像一個名字。 因此,而不是通過Q等於 達文或類似的東西, 如果你不使用HTML 特殊字符,如果你 不要逃避是為了確保它的 OK,然後我可以傳遞,而不是, 比方說,在這裡我想說的 打印或類似的東西, 然後我可以通過在這裡的腳本調用。 [01:35:51] 這樣的話,而不是 剛開一個變量, 然後,我會執行這個腳本調用。 所以這裡面的腳本 調用,它有什麼作用? 文檔點的位置,那將 改變文檔的位置。 所以,我要重定向 到別的地方。 這就是所謂的壞人 這個例子,很不錯的。 無法想到的詞。 然後,什麼是連 更糟糕的是,我要去 以再設置cookie,它是一些 變我在這個網站。 我將它設置為等於 到文檔點餅乾。 因此,我要去 偷你的cookie。 而且我要重定向 一些信息網站 你不應該訪問。 而這一切是因為你 不是逃避什麼,你所看到的。 是嗎? [01:36:29] 聽眾:所以剛 說清楚,這是 vulnerable.com了 是受到此。 這樣的鏈接可以出現 在任何給定的頁面。 有人點擊就可以了, 去vulnerable.com。 你有一個cookie來vulnerable.com。 比方說,Facebook是 脆弱的,所以facebook.com。 你有你的Facebook的cookie。 這是什麼做的,你 去facebook.com, 它立即重定向 你badguy.com, 但包括你的cookie信息。 所以這是一個快速重定向, 但你的Facebook的cookie 包括與重定向, 這就是他們如何[聽不清]。 GABE:是的,有 一些非常低級的事情 人們如果有這個可以做。 例如,如果允許實 大家改變你的用戶名, 他們沒有做任何 完整性檢查,所以你 可以插入一個JavaScript的事情, 改變你的形象倉鼠。 和插入相同的JavaScript 為大家誰的意見您的網頁。 所以大家誰的意見您的網頁 在用戶名相同的事情。 而且因為它是一個病毒, 它傳播指數。 DAVIN:我們將跳過最後 一個,然後我們就大功告成了。 所以,這只是一個例子。 因此,這是他們不 逃脫他們的SQL表。 所以,你可以刪除它。 所以,你想逃避的東西。 這是在前面的例子 與跨站腳本。 對不起,我們跑了有點晚。 明天,對不起! 明天,我們的辦公時間。 所以,辦公時間在Cabbot 8:00至11:00。 辦公時間為 嚴格的問答題。