[Powered by Google Translate] [第9條] [舒適]
羅布·鮑登] [哈佛大學]
這是CS50。[CS50.TV]
>> 好的。基本上，今天這一切都取決於你們問的一些問題。
一些主題，我也許可以漫步
一下，如果沒有人有任何問題要問。
希望你這樣做。有沒有人有什麼問題嗎？
從過去的測驗，也許事情你不舒服與目前。
>> 是。 >> [學生]：你去了緩衝區溢出攻擊？ >> [搶]當然。
主要的例子實際上可能是正確的。
緩衝區溢出攻擊的主要交易背後
我們有一定的緩衝，在這裡。
字符c - 這是唯一的尺寸為12 -
但我們插入到該緩衝區的東西
但沒有檢查到底有多少，我們插入。
在這裡，我們要插入到C的strlen（酒吧），但誰知道多久的酒吧。
如果它的長度超過12個字符，那麼這是怎麼回事溢出這個緩衝區。
看到這一幕 -
如果你把61你會得到更加熟悉這種佈局
和處理與保存的幀指針和返回地址和父母的日常堆棧
和所有這些實際的事情。
但在這裡，你只需要知道，我們有
這為我們的緩衝空間不大。
在這裡，我們有c（0），然後，我們有C，1，2，3，4，5和左右。
在正常情況下，我們會按通常填充此緩衝區。
如果我們插入了'你好'，我們不得不H-E-L-L-O / 0，
然後只是一堆空的空間。
對於黑客 - 哦，我想這是例子。
對於黑客，我們得到這樣的事情，
特別是，他們正在試圖做的是什麼
通常覆蓋返回地址。
當你調用一個函數的堆棧幀被壓入堆棧
該堆棧幀需要知道如何 -
，功能，被稱為需要知道如何返回到調用它的函數。
所以，如果主要調用foo，foo的需要返回到主，
所以這就是這個返回地址。
但是黑客會做什麼
一個特殊的返回地址覆蓋它
地方 - 小印度 - 它不是簡單，但每一個字節是倒退。
這個返回地址的計算機
返回到這個地址相當於返回到foo或主
或任何函數調用。
因此，它會返回到這個地址
這恰好是這樣的地址
而有的時候，他們在這裡做的是使用的返回地址
一個特定的功能，他們知道已經存在。
我不記得什麼的函數的調用。
我會看它。
>> 在這裡他們是怎麼做的，是通過返回地址
棧本身，這是有些奇怪，
有記憶體中的例子 -
存儲器可以分成只讀，讀，寫和可執行內存
我們已經看到只讀存儲器之前所在 -
如果我說的char * s =你好，我可以不修改打招呼。
這是只讀存儲器。
也有這種想法的可執行內存
的可執行內存將是你的代碼的文本段。
看在你平時的地址空間佈局 -
我相信這將是一個很好的圖片 -
- 我們有我們的堆棧。我們有數據存儲器。
基本上可以忽略此。這是我們的堆。
然後我們有我們的主要程序代碼。
這是類似的地方，我們把我們的字符串如char * =你好
這是只讀的。
但是你也可以紀念這個主要為可執行的程序代碼。
如果你這樣做，或者你的操作系統不能夠正確
然後在內存中，這應該是唯一的地方
該代碼可以實際執行
這意味著，這類的緩衝區溢出攻擊，我們在這裡
將是無效的，因為這是試圖執行我們的堆棧內存在這裡。
請注意，這些照片是第一次。
我們有我們的協議棧。
這裡堆棧增長下降。
CS50目的堆棧的增長。
>> 這是可能的，以規避這種特殊類型的緩衝區溢出
通過這些可執行區域內存在非可執行區域。
但它碰巧的是，很少是可執行的內存標記為可執行。
這往往是只讀的，重新寫所使用的唯一的東西，
所以這仍然是非常有效的。
在這裡，我們可以把任何我們想要的。
實際上它不是一個PSET在61年，
但如果你看看在去年的產品或以往任何一年
一個PSET為你特別應該在這裡插入代碼，應該是
打印一些特定的值或返回的值是不同的
假定要被打印的值，該值。
或者更巧妙的是，它要你打電話或寫信 -
所以這將返回到這裡，然後你會執行一些編碼，在這裡，
最聰明的溢出，然後返回到這個返回地址，用於。
因此，即使我們需要覆蓋
來這裡，大家還記得，返回地址的地方
這樣我們就可以回到主或什麼的，
它就像我們從來沒有注意到，事情發生了錯誤。
但這樣做是這樣的話，也許裡面，在這裡，我們gelbroke我們的iPhone。
作為正常的事 - 就像我們運行一些程序和活動結束返回
無論它應該返回，但在此期間
你設法摧毀整個操作系統。
你並不需要知道關於緩衝區溢出的代碼，或利用。
您需要知道的基本思路是緩衝區的溢出，
這是原因，它可以溢出，因為我們沒有檢查是否
我們實際上它的範圍內。
>> [學生]的解決方案，以防止它僅僅是檢查的範圍？
[搶]是的。在這種情況下的解決方案將是
你可以說，如果strlen的酒吧大於12-1 -
因為你需要在/ 0結尾 -
或者你也可以手動做一個for循環，只有前11個字符複製，
或只是什麼你實際檢查，以確保你不這樣做，緩衝溢出。
>> 其他問題嗎？是嗎？
[學生]：您能談一下嘗試，也許是關於編程的（聽不清）。
[搶]當然。
實際的程序 -
我們將永遠不會讓你做的特里在考試的實施
因為這將是不公平的，誰做哈希表。
同樣，我們永遠不會讓你實現一個哈希表的考試
因為這將是不公平的，誰做了嘗試。
然而，你應該知道的trie樹的結構或結構的哈希表或任何。
這實際上是任何類型的數據結構，我們已經看到了真實的。
鍊錶，堆疊傾斜，二叉樹 -
你應該能夠確定這些結構由心。
也許我們可以給你一個特里 - 這意味著你唯一需要做的是
一些字的東西，我們會說：“興建的線索， -
也許我們會給你一組單詞
和我們一樣構造一個代表本字典的線索。
>> 讓我們把我們的字典貓，狗等。
在特里的想法是，我們開始了與這個數組 -
26個插槽 -
每個插槽中的實際索引的插槽對應的信我們關注。
所以在這裡，如果我們試圖將貓到我們的特里
的第一個字符是'c'的，這將是“如果a是0，則b是1，c是2。
我們將進入第二個索引，
我們要創建一個特里的關閉。
我們將有26個插槽。
然後，我們將指數的第二個字符貓。
這是'一'，這將是0點。
這是怎麼回事有26點。
然後我們去't'和我們也有開始下降，這實際上是一種重要的
因為 - 讓我們來這裡。下面是我們的'T'trie樹。
比方說，這是索引't'是19。
重要的是要記住的嘗試是，你不能只是跟踪這些指針。
您還可以跟踪是否這實際上是一個單詞的結尾。
所以，在這裡，我們需要某種標誌，上面寫著
好吧，其實這是一個單詞的結尾。
原因是，如果我們稍後再嘗試插入到我們的字典裡的災難
具有相同的起始3個字符
但進一步，我們需要認識到，這是一個單詞的結尾。
相反，如果我們嘗試看看'C​​A'，這可能是一個字
但我們坐下來，那麼我們就在這裡 -
或會是c，然後我們看一個 -
我們需要認識到，即使有這個節點是一個指針
它並不代表結束的詞語。
>> 那麼，是什麼意思 - 你要什麼說的嗎？
這是什麼意思我們的結構看起來像嗎？
[學生]：這是一個數組的指針是26長，然後一個布爾值，是或不是人。
[搶]是啊。因此，我們將有一個struct線索*指針 - 在這裡，我們會說[26]
然後在這裡的分號。
但在PSET，我們還需要考慮為單引號，
這意味著你需要硬編碼，單引號指數27或東西。
但在這裡我們只關心26。
然後，也許我們需要一個char或bool - 我們姑且稱之為它是字。
這是2的3件事情，我想你會需要了解試圖 -
建築，結構，他們的最後一件事是它們的運行時間。
>> 什麼是運行時的特里 - 或查找在特里的嗎？
這是我們說，這是O（K），其中k是我們正好要尋找的字的長度;
但同時，我們說 - 至少Pset的拼寫檢查器的緣故 - 我們說
在字典中最長的單詞是45個字符，所以這基本上是
O的45，這是恆定的時間。
所以，如果有一個上限的最長的單詞，然後 -
甚至像英語詞典 - 有一個上限，你的最長的單詞。
或者任何字典 - 有您的高位字上最長約束。
無論你在做什麼固定的時間，
但為O k的是不錯的，因為實際運行之間是有區別的說
45個字符的字與字母的話，其中只有3個字符。
另一個事情是， -
哦，因為只是說，45正好是我們最長的單詞
是一種愚蠢的，因為在同一時間讓我們說的複雜度為O的N.
好吧，因為內存最多只支持2 ^ 32字節，
然後N是至多4億，恆定的時間，這就是為什麼在一些點
這是愚蠢的，說這樣的事情，有一個上限
我們就可以減少固定的時間，因為一切都是固定的時間
當你認為它以這種方式。
但是，我們可能會接受這些。
在任何情況下解釋，O（1）意味著你有一個上界字的長度;
O（K）是指您的單詞長度 -
良好，k表示這個詞的長度。
>> 是啊。 >> [學生]：BOOL - 因為當你讓你特里
它看起來就像是 - 你會走貓，然後你去到​​下一個指針
然後你告訴等於真實的 - 你把真正喜歡的T？
[搶]我們認為，這種情況下的例子很多，你可以只是嘗試，並提出了
簡單和/或極端的例子，它應該是什麼，讓我們覺得這個詞'A'。
在我們原特里 -
我們想將一個1在這裡，我們希望把一個在這裡。
我要說的是，到底它可能會是/或。
我不能想到一個理由 - 你真的wouldn't -
我不會把它在那裡的原因是因為你甚至不需要走那麼遠。
我們永遠需要分配特里。
我們只是把在那裡。
這仍然是指向NULL。
如果我們只在有單個字符
我們沒有理由向下延伸到另一個特里只是為了紀念那封信所使用。
同樣，如果我們把那裡的'a'
然後所有這些在任何時候也只是0。
>> [學生]：但我們需要一個線索將指向這個'一'？
[搶]我們有一些全球或東西線索* T
這點在這裡，但是這只是一個指針。
這不是一個成熟的線索指向它。
[學生]：好的。我們將如何分配的字母'I' - 這個詞我嗎？
[搶]他的問題可能會回答。等一等。
這是一個問題，在特里和本身 -
我不知道Pset中寫它的方式。
以前的結構是壞的。
但是，我們也可以做結構的節點是一個bool - 指針 -
其實有多種方法，你可以把它寫。
另外，特里並不需要是一個結構。
它甚至可能是特里 - 類型定義節點* -
節點[26]是一個特里，這已不再是結構。
現在，將是 - 我試圖想的方式，PSET你所期望的。
[學生]：我把這個審查會議，我認為他們只是去 -
一樣，如果你​​有一個，然後你去到​​下一個 - >> [搶]這是如何做到這一點？
[學生]：然後，如果有一個真實的存在這是行不通的 -
[搶]是啊。這工作。它浪費的空間 -
你一定有一個整體的其他級別的特里，你會不會需要擺在首位。
在這裡它是越來越難看，每個 -
基本上我想在這裡做什麼是聯營公司 -
26指針，而不是你的嘗試，
它的26布爾指針，布爾指針，布爾指針，等等。
>> [學生]：你不能，2個數組？ bool值和一個指針數組的數組？
[搶]你可以，但然後你需要 -
2布爾值的數組和指針。
您將需要再建立你的布爾值數組 -
您的布爾值數組需要有大的特里
因為你不能只是有26個布爾值。
它成長的每一個可能的 -
想你的特里有超過26個可能的話真或假的。
在這一點上，他們也可能只是一個單個的結構，你的特里向下增長的。
這似乎並不正確，因為 - 你有什麼我想在這裡嗎？
因此，特里* T -
你可以做的typedef（節點）[26]特里;
這可能是我在尋找的語法。
這應該只是一個普通的特里。
我不太肯定。
但是，這是我們這樣做，是在審查的方式，使工作完全正常，太。
在這種情況下，如果它僅僅是布爾字，然後一個數組26
那麼你就必須去到一個新的水平。
我會考慮我的方式做到這一點。
>> 其他問題嗎？
[學生]：我想問別的東西的問題嗎？ >> [搶]是的。
[學生]：你能去的區別是什麼，當你使用jQuery與Ajax的？
[搶]他們是在和自己完全不同的。
JQuery的啟用Ajax。它確實給我們一些更容易使用的Ajax。
但是Ajax運的JavaScript。 JavaScript有Ajax功能。
我已經在頁面上時，我想，所有的Ajax手段的比喻 -
當我點擊的東西，我不需要刷新頁面來下載新的信息。
我只是要求，新的信息。
你可以看一下它在Facebook或東西。
檢查網絡。
收縮這一點。
在這裡我們可以看到，我們得到的這些要求。
現在，當我點擊 - 好了，它做的Ajax之前，我什點擊任何東西。
但是，如果我點擊，然後它要在這兒一堆的請求
只是這些請求 - 哦，現在是在這裡。
讓我們來刷新。
再這樣做。
我們看到，我們得到了所有這些要求，但是這仍然是在頁面加載的過程中。
公告Facebook是即使在頁面加載後，這些常量的要求。
如果我點擊這裡，它會讓更多的要求對某些數據
這是在響應的事情，我只是點擊。
這正是Ajax是。它可以讓你拉，這不是原來的頁面下載數據。
>> jQuery是獨立的。 jQuery是一個JavaScript庫，做了很多事情更容易。
使用jQuery，這是一個很大的優勢，這只是 -
美元符號 - 美元符號是一個有效的變量在JavaScript中。
因此，jQuery的 - 它做的是說像var $ =一大堆的東西 -
所有這一切的東西在裡面，像一些大的功能 -
然後使用美元符號的方式，如
$（“＃頁腳”）。樣式（“文本對齊”，“中心”）。
JQuery的為我們提供了這樣的語法，其中的一大優勢 -
它還有其他的功能，但我們希望您能夠專注於最
只能夠選擇這樣的元素。
在一般的，普通的舊JavaScript，你可以做這樣的事情
文件點得到元素的ID頁腳點 - 我不知道它是什麼，在這一點上 -
一些關於CSS或樣式或東西 -
另外，我們說，我們要選擇的類。
現在，我們的一類頁腳這種風格造型的一切。
即使我們想要的任何段落的樣式。
所以，這個選擇 - 可以選擇在DOM這樣的事情，是非常方便的
因為在普通的舊JavaScript，你必須做的文件點得到元素的類名
不管它是什麼，如果我想要一個標籤，我需要說的標記名稱的元素。
所以，我需要知道具體的方法，我訪問所有這些事情。
這些功能將是不同的，這取決於我使用的類或ID
或標記或什麼，而jQuery的，我只是做。
>> [學生]：是jQuery將被用來當你在做初步造型的頁面？
為了改變造型後，它已經 - >> [搶]要改變它。
[學生]：它已經加載。 >> [搶]是啊。
任何初始的造型 - 好了，即使是 -
通常，你會使用這種變化。
你會不會改變 - 這將工作完全正常。
但是通常你會不會改變這樣的風格。
相反，你想給它一個新的類或某事
而CSS已經被定義為該類以某種方式。
通過給這些項目中，我選擇了一個新的類
我已經下載應用的樣式。
[學生]：所以，你選擇複選框和一對夫婦的事情，你所選擇的
改變到一個新的風格，並開始尋找不同的。 >> [搶]是啊。
其他的事情要記住的 -
好了，有幾個函數，你應該還記得關於jQuery。
比方說，我們選擇的東西ID P.
>> [學生]：你總是必須使用英鎊？
[搶]這意味著ID。這相當於CSS，所以CSS選擇器 - 它的靈感來自那個。
在CSS，如果我想要的風格頁腳 -
或與ID頁腳的東西 -
它會像文本對齊：中心;
你不需要寫CSS的考試，但你需要知道選擇器。
你需要知道的是什麼 - 你需要知道如何閱讀。
但是，我們絕不會 -
您不需要記住所有可能的不同風格的東西。或者任何人。
>> JQuery的事情你應該記住 -
你應該還記得點HTML和jQuery中的一個共同的模式 - 讓我們重新寫這篇文章。
一個常見的模式是，我們有$（“F”）的HTML
如果我只是簡單的括號，這意味著在HTML;
而如果我說HTML，並把我想做的事情的東西在這裡 - 一些鏈接 -
把現在的括號裡面的東西設置的HTML。
這是很常見的，其中包括一組函數。
有相同的文字處理。
HTML和文本之間的差異是文本要插入
小於，大於，而不是作為一個錨定標記文字。
而文本將是相同的，如果我只是這樣做。
它要檢索的文件的文本 - 而不是HTML的文件
但只是這個元素內的文字。
另一種是，如果“f”則恰好是一個為一個輸入ID，
哈希-F點的時間間隔 - 如果我想設置輸入喜歡的東西 -
比方說，我打了一個複選框，我想設置一個默認值 -
點VAL - 我什至不知道 - 3 - 因此，它會自動插入文本框3，
但如果我說3點的時間間隔，無論是在我的文本框，將檢索。
>> 這是非常有用的表單驗證，其中
如果我只是想使確保他們其實充滿了所有的事情。
這樣做的方法之一是，如果我打提交不可避免地發送到服務器上的一些頁面 -
像這對我們來說將是PHP - 這將嘗試對數據進行處理，它會說
他們沒有填寫的東西，所以，現在將他們重定向到另一個頁面，上面寫著
你沒有填寫。
而不必做到這一點，在JavaScript / jQuery的，你才可以看到，如果值是空的。
或者是值 - 空引號。
這只是 - 現在，我們可以提醒他們，你沒有填寫這一領域。
不可避免的是，你需要做的PHP服務器端檢查，因為
你可以在所有瀏覽器中禁用JavaScript。
但是，JavaScript，方便那些誰已經激活，
幾乎99點的東西％的瀏覽器上時下。
極少數人打開JavaScript後。
這是一個用戶的便利性。你需要做的PHP驗證。
你應該做的JavaScript驗證。
>> [學生]：什麼是＃樓參考這裡嗎？
[搶]＃F是指什麼？
有一些元素在我的文檔中ID為'F'。
我們來看看 - 可能是Facebook有大量的例子，如果我來給元素
看這裡，我看到這個特定的div，在這裡被強調的元素標籤 -
或者是整個頁面 - 是的，它的存在。這ID pagelet_bluebar。
在控制台中，我想他們就使用jQuery。
所以，我可以選擇pagelet_bluebar所以，選擇那個，和我做錯了什麼。
讓我們嘗試 - 或者也許他們不使用jQuery和該字符的映射到別的東西。
在我所知道的事情是一個更好的例子使用jQuery -
還在尋找我們的元素在這裡 - 我們這裡有節課的Navbar。
這是與類Navbar的，
我們的控制台內，我們可以看的東西類的navbar。
在這裡，我們可以在這個滾動，看看，這是什麼。
如果我想做的事。這是該文本的文本，所以我看到上面的日誌設置為報告
這是所有在這裡，但是這仍然文本，HTML標籤內。
我可以將HTML只是一些鏈接，
所以我會擺脫我的吧。我們擺脫完全只是鏈接到YouTube的頭。
>> 是否有任何形式的例子嗎？
這裡的一種形式。
我可以右鍵單擊並檢查元素來這裡。
我看到它的ID是文本搜索，
所以在這裡，如果我做ID文本搜索。
我會帶過來，我看到的是正確的事情，我正在尋找。
如果我想做的事情。VAL它會給我什麼，我輸入了。
如果我想要做的招呼它會改變它在這裡對你好 - jQuery的。
當然，我可以做荒謬的像document.get元素的ID - 全文搜索 -
我什至不知道它是什麼，在這一點上 - 點值 - 不，我忘了那傢伙。
所以，這是個招呼。我不知道我怎麼會設置它等於什麼。
是啊，所以改變了這一切。
但你並不需要使用很多網站在這一點上使用jQuery。
即使喜歡上一個最終的項目 - 如果你正在做一個Web項目 - 第一件事
我建議只包括jQuery的，所以你可以得到所有這些功能的方便。
>> [學生]：我覺得我看到了一個不同的方式來使用dom的一個元素。
你一定要使用點，然後保持下去嗎？
[搶]你可以做到這一點。我不知道這是否會工作得很好。
導航這樣是很困難的。
其中一個例子是 - 我什至不知道我們是否有任何形式的 -
但document.forms會以列表的形式返回此頁面上，
然後，我可以做document.forms 0，那麼第一種形式。
點 - 我不知道我們已經叫 - 它不甚至有一個名字，
所以也許輸入工作。號
我什至不知道如何得到這 - 得到元素-I輸入標籤名稱。
是啊，這給了我的輸入，現在我想0設置為輸入
我想選擇它的價值，所以這將是文本。
我不得不做元素標籤名稱反正。
有可能以某種方式直接選擇
通過形式0，但有關這方面的好東西還是很喜歡，我只用了稱為輸入的標籤
孩子的這種形式，否則的話，我就這樣做直線上升前
這將選擇整個頁面上的所有元素，整個文檔中的
而不是只是形式，它甚至可能不會是我想要的。
我什至不知道它是哪一個。我不知道。
我想第一個輸入我們的網頁元素是這個小複選框。
>> [學生]：這是非常無關
可能有點愚蠢，但對答案的關鍵，它說，PHP -
我不知道這是否是答案的關鍵或票據，但它說PHP是服務器端
JavaScript是客戶端。 2之間的區別是什麼？
[搶] JavaScript客戶端和PHP服務器端之間的區別。
如果你聽說過的斜線/使用節點JS之前，你可能會認為，
JavaScript是不只是客戶端的，但，CS50目的是 -
或至少​​在該測驗的目的，它是。
PHP是服務器端。沒有JavaScript。
當你寫你的網頁，你會寫PHP在服務器上。
你將永遠不會被寫入服務器上的JavaScript。
Javascript的結束時間發送給瀏覽器執行的JavaScript代碼。
在瀏覽器中的JavaScript代碼需要生活，因為否則，當我想
做任何形式使用Javascript-Y東西，如點擊這個，
我不重新加載頁面。這只是JavaScript重新格式化的東西，對我來說。
如果JavaScript在服務器上生活，那麼我會不可避免地要求的東西
服務器知道該怎麼辦。
PHP - PHP在瀏覽器中有沒有這樣的事情。
當我請求一個頁面 - 讓我們在這裡所講的話，我這份特別的一頁。
這意味著，這是怎麼回事要求 -
刷新 - 這將刷新此頁 -
所以這個請求進入到我們的服務器。
它認為，它需要返回這個特定的線程，這個特定的ID，
所以現在將是PHP，PHP解釋器將解釋該頁面
並將其轉換成HTML，CSS，也許JavaScript中，任何。
這是PHP處理這個請求並檢索所有的文字之類的東西
實際上，我從數據庫中尋找。
但離開服務器僅僅是HTML / JS / CSS。
有沒有PHP離開服務器，因為如果它確實
然後，瀏覽器會不知道用它做什麼，因為它不知道什麼是PHP。
但在同樣的想法，因為JavaScript是客戶端，
你永遠不能訪問MySQL。
由於PHP是服務器端，你訪問MySQL。
>> [學生]：你可以去一些HTTP cookies在安全方面的問題？
[搶]這些都不是我們需要知道的東西。
有些的HTTP cookies在安全方面的問題。
這裡最大的問題是，我們在這裡看到我的Cookie的PHP / ID。
這是通用的PHP的會話。
您的會話的PHP裡面的東西，永遠不會需要驗證
因為它的服務器有完全的控制權的會話。
你不能觸摸它。
但是，這個cookie - 這 -
我想你可以登錄我現在，如果你想使用 -
但該cookie - 不可避免地你使一個單一的請求到服務器。
服務器返回的頁面。請求完成。
它不再有任何想法，你是誰。
所以，你的下一個請求會包括該cookie，以便它知道
這是人誰提出這個要求之前。
這是與該用戶相關聯的會話數據。
這就是為什麼你沒有登錄的每一個頁面使用。
這裡的安全問題是該cookie在網絡上發送出去。
我們使用的是HTTPS在這裡，所以在這種情況下，這意味著我們要加密這東西。
有人可以不來的，只是偷了我的餅乾，現在的服務器會認為他們是我。
但隨著直HTTP他們。
就像這的Wireshark的/ FireSheep的東西，你可以只聽空氣中所有的Wi-FIS
和攔截任何你想要的，所以是。
>> [學生]：一種類似的安全風險是存儲用戶ID後
因為，可以自由編輯使用遊戲機和活動。
[搶]是的。有很多問題，喜歡的任何東西都來自於用戶的
你需要驗證。
有很多的情況下，這將是有益的，像我作出後。
廢話，廢話，廢話，廢話，廢話。然後我打的答复。
這將是非常有用的，如果POST請求中包含了我的ID，因為
我想我到這個職位的關聯。
但我不能這樣做，因為我免費做一個POST請求 - 就像手動
拿出我自己的職位要求 -
使用您的用戶ID和現在將發布。
這就是為什麼我不能依靠服務器端請求中包含了正確的用戶ID後。
這就是為什麼它有屬於我的會議。
所以，我看看你的用戶ID，我在我的會議陣列插入到我的數據庫
作為用戶究竟是誰發的這個帖子。
[學生]：這是基於您的Cookie？
[搶]是啊。它使用cookie來匹配你的用戶提出這一要求。
它把從該會話和用戶ID，然後插入到數據庫中
使用該用戶ID。
這就好比按鈕 - 那實際上做的是 -
我不打算在這裡找到它。這將是一個Ajax功能
什麼是Ajax功能？
讓我找到了我的JavaScript是什麼。
前一段時間，這是一個CS50項目。
我不記得它是什麼。
Ajax功能 - 所有的Ajax功能做一個Ajax請求的頁面與此ID -
與識別編號22453。
它甚至不是一個POST請求。這是一個GET請求，這使得它更容易。
如果我知道的URL是什麼 - 它的東西，像這樣/ ID = 22453 -
？ID = 22453 -
訪問這個URL會喜歡的。
這不會是太大的問題，但它是令人難以置信的容易寫一個循環
這是剛剛去訪問這個URL，一遍又一遍，這就是為什麼你看到的
成千上萬的事情Isawyouharvard後。
而且他們往往CS50基於Isawyouharvard職位。
我如何找到最喜歡的嗎？
他們往往很快被刪除了。
這是不是最喜歡。我們走吧。
作弊者最喜歡的頁面 - 這是非常相關的，以現在的這種權利。
哇哦。他們已經刪除那些今年已
被騙了。這些都被刪除。
永遠不會有後，得到這樣高的。
顯然，這一次是被騙最喜歡的網頁。
>> 還有問題嗎？
[學生]：我們應該知道的XHTML？
[搶]幾乎什麼都沒有。它究竟是什麼。
它和HTML之間的區別在於，XML是在外觀上非常相似
HTML除了在HTML中，我們只需要一組預定義的標籤。
但隨著XML - XML就像是一個通用格式，您可以在其中一個XML文檔
任何你想要的目的。
因此，舉例來說，如果我想我可以構造一個XML的課程 -
其實，我覺得，CS50的API。
我的XML文件可能看起來像 -
課程，當然，我需要一些結束課程。
我能有一個過程，它可以有名稱等於CS50。
然後我結束課程，我可以把裡面的，這裡的學生，
然後在裡面的學生，我有一個列表的一個學生，他的名字是什麼。
我結束，學生等。
我只是碰巧已經構建了一些任意的XML文件，但它是有效的XML。
XML - 它是這樣的結構和美好的事情 - 因為，我們甚至把它XML
是，這樣的事情是很容易分析。
這是很容易藉此文檔和陣列。
因此，XHTML是HTML是有效的XML。
這已經看起來很類似HTML。
一些差異也許是HTML你是能夠做到的事情，如輸入的類型等於文本
這是默認的，所以我不必說。
殘疾人士。
>> 在這裡有兩件事情，使這個無效的XHTML。
第一件事是所有XML標記都需要一個結束標記。
因此，在輸入的情況下，我需要做的 - 的斜線方向是什麼？
這個方向？這看起來是錯誤的。
其他方向。
自閉標籤。
第二件事是，XML，你需要這種類型的鍵值對一樣。
它需要與它相關聯的值。
因此，即使禁用表達我想要的 -
應禁用此輸入 -
這是無效的XHTML。
我確實需要寫的是禁用等於禁用。
現在，它是有效的XHTML。
這些都只是這些細微的差別，將HTML一種基於XML的類的事情。
>> [學生]：XML是像拉通過自己的X完全想，為什麼是（聽不清）
[搶]的東西，像一個CSV - 一個的CSV你有正義價值觀的分離 -
只是想試算表。一個CSV基本上是一個電子表格。
您有可能列，你有一大堆的行
聯營公司與列的數據，但僅此而已。
XML中，你可以更加靈活 - 你有一個任意層次結構的數據。
內有多個學生，我可以有多個課程
這將是很難想到一個電子表格 -
只是單一的電子表格 - ，CSV特別是像只是一個單一的電子表格 -
使單個電子表格具有所有CS50，51，和61，在這些所有的內
那些時代的學生，也許會議的時間和所有這一類的事情。
另一件事是，變量名稱的所有元素給一個好聽的名字
讀取一個CSV文件，可以嘗試和解析什麼實際看到的。
XML更是人類可讀的，所以這就是為什麼喜歡 - 一些人誰不
真的知道什麼是一個CSV文件，或者喜歡的是不是一個程序員或東西 -
你可以給他們一個模板XML文件，他們可以按照行和 -
哦，我應該在這裡插入我的名字。
這是一個更有用的格式。
CSV有很多用途，但，XML具有不同的用途。
>> 還有問題嗎？
其他問題嗎？
[學生]：從以前的測驗 - 垂直與水平縮放比例縮放。
[搶]你不會需要知道這一點。我不認為我們甚至討論了。
我猜它只是一個一次性的評論。
哦。水平與垂直縮放是不是你需要知道的東西。
所不同的是，我認為只是想 - 哦，好吧，接聽鍵會說的區別。
垂直縮放只是喜歡哦，我的電腦的表現不佳。我會得到一個更好的。
而水平比例是哦，我的電腦表現不佳 -
讓我得到其中20個在同一任務的所有工作。
>> [學生]：我們可以在鍊錶的方式使隊列。 >> [搶]當然。
這是比數組的方式更容易。
使隊列鍊錶的方式。
首先，什麼是我們的結構的鍊錶的樣子嗎？
[學生]：我們這樣做是為了 - >> [搶]讓我們做它 - 是啊。
智力值，然後結構節點下;
所以這就是我們將使用這裡的例子。
讓我們輸入這個東西。
讓我們做linked_list。
我們的結構 -
好吧。現在，在我們的隊列中，我們有 -
讓我們建立一個全球性的隊列。
這將是節點*隊列，我們有一個出列的功能。
我想這些東西也可以推翻真或假的 - 讓我們做到這一點。
布爾出隊 - 我們出隊 - 哦。嗯。
詮釋出隊 - 我們做了什麼，這之前呢？
詮釋出隊，我們有布爾排隊，我們需要排隊的一些手段真的。
讓我們排隊第一。
我們有我們的隊列。我們要插入到隊列中的東西。
什麼是最好的方式做到這一點？
在這裡，我們的隊列中當前看起來我們有一些全球性的指針開始。
這就是我們的隊列。
假設我們出列的第一個元素，
我們要去哪裡要插入的節點，使隊列，因為他們的工作呢？
[學生]：在最末端。 >> [搶]是啊。應該是第一，先出隊列。
這意味著在這裡應該插入新的元素。好吧。
>> 回來的代碼，
這意味著我們將要在我們的隊列循環。
讓我們做節點電流=隊列，而當前不等於NULL。
我會做的 - 好吧，讓我們分開。
首先，電流=隊列。
我們該怎麼做，如果目前開始為NULL？
我們會做這2種方式。首先這種方式。
我們該怎麼做，如果目前是空的嗎？
這是等價的，如果隊列是空的？
[學生]：這將返回false。 >> [搶]我們應該返回假的？
將東西放到一個空的列表什麼是錯的？
[學生]：沒有什麼是錯的。抱歉。
[搶]是啊。所以，在這裡，唯一不同的是我的全局隊列被發送到我的新節點。
然後，我做我的支票，當隊列為空。
返回false。
然後，隊列值等於i;隊列下等於NULL;返回true。
好吧。我要在這裡跳槍。
記得我們最後一次這樣做
在這裡我們說，這是與節點**這樣的事情要容易得多。
所以當前要和隊列，這裡 -
而電流 - *當前不等於NULL -
所以讓我做電流 - 我們將在第二談論這個。
目前的下一個。好吧。
它以這種方式，這是遍歷所有我的指針，直到我達到一個空指針。
空指針將是我想更換我的新節點的指針。
在iPad版 -
如果我原來的指針和鍊錶為空，則當前點這裡。
這將指向NULL，
因此，這是我最終的指針移動到指向其他一些新的節點。
而如果例子是這樣的話在這裡
當時要經過從這裡開始 - 我搞砸略有上升。
其中，電流應該是當前下一個地址。
難道這就是我的希望嗎？ *電流電流，因此給我一個節點。
下一步運行到下一個。
目前，我指指點點。
讓我們做紅 - 所以我目前指指點點。
*當前要引用此節點。
和電流下引用此節點，但是這不是我想要的。
我想這該節點的指針。
因此，該指針到該節點的符號（電流）下。
>> 在這一點上我正式達成，我想替換的節點。
讓我們來取代所有這些隊列電流 - 現在我們已經完成了。
有可能是拼寫錯誤，但這個想法是，這種方式與插入
它是更容易工作的指針，我們要改變
而不是需要跟踪的 - 好吧，是我開始NULL？
哦，是嗎？然後，我需要創建的起始節點是一些具體的事情
否則我會想迭代，直到接下來的事情，我指的是NULL，
然後我會取代 - 接下來的事情是什麼 - 我的malloc的節點。
而不需要分開這些情況下，在這裡我只處理的情況下，
是什麼，我不再想為NULL，NULL的指針，該指針，
這讓生活更輕鬆，除了這些都應該是*電流，因為現在 -
[學生]：他們仍然節點的大小嗎？
[搶]是的。我我仍然mallocing的一個節點。
[學生]：它會是一個節點*的大小嗎？
[搶]說到這裡，想到的情況下，如果這是我們的鍊錶。
這傢伙為NULL。
之後，為什麼環，電流點這裡
因為這是指針，該指針為NULL。
現在，我要改變這個指針指向一個新的節點。
首先，我的malloc，新的節點 - 節點這樣的malloc的大小。
返回一個節點*和改變這個指針*電流等於建設
這個新的節點，我分配。
因此，如果當前是一個節點**，*當前是將是一個節點*
，如果我mallocing的節點的大小的東西那麼這將返回一個指針，指向一個節點
所以這是一個節點* - 所以正確雙方具有相同的類型。
所以，如果我剛才分配的是NULL，則返回false;
其他完成將它們設置為我想他們是什麼 - 除了這些都需要括號
因為那不是事物的秩序工作。
如果沒有括號被解釋為
目前的箭頭-VAL解引用。
相反，我想取消引用這使我想到一個節點的電流。
然後，我要與該節點關聯的值。
>> [學生]：我想箭頭允許你繞過，直接的價值。
[搶]他們這樣做。那如果我有 - 比方說，隊列就是一個例子。
我可以做的隊列箭頭值等於i，因為隊列是一個節點*。
如果有一些很好的語法像電流不再箭頭Val或東西
並解引用，那麼這將很好地工作。
[學生]：因此，箭頭是只有1解引用。 >> [搶]是啊。
另外，我寫這篇文章作為（** current.val）。
就像我也可以寫隊列（隊列）的值。
因此，讓我們插入。嗯，這是我想在隊列。
出列是顯著更短。
讓我們在這裡無效的清潔。
所以，出隊。我什麼元素出隊？
[學生]：第一個嗎？ >> [搶]是啊。
如果我的第一個NULL - 回報 - 我不知道我們想做什麼回報 - INT_MAX;
那麼你應該做一個檢查，看看如果返回了INT_MAX。
這是GET公司做我們想要的東西之類的事情 -
我們可以只返回隊列VAL？這是我們想要做什麼？
出列也含蓄地從隊列中刪除的項目，
所以，讓我們先說 - 讓我們得到一個tmp目錄指向到我們的隊列中的第一個節點。
現在，我們要推進我們的隊列，在隊列中的下一件事。
現在我們有TMP左。 TMP val是我們要返回的東西。
因此，值= tmp目錄 - >值;
但在此之前，我們返回，我們也應免費tmp和回報VAL。
在這裡操作的順序是很重要的，我們需要抓住一個tmp
在我們繼續之前的隊列中的下一個元素。
我們需要得到的價值之前，我們免費TMP，
然後我們就可以返回的val。
>> [學生]如果我們設置了隊列到隊列未來？
[搶]是的。這是造成不好的循環/後釋放也無妨，這是行不通的。
隊列隊列 - >下一步。
我們要推進到下一個元素的隊列，沒有前進的下一個元素
什麼元素。
堆棧將顯著 - 像更容易，出隊是完全一樣的
因為我們拉關閉前的堆棧。
最終隊列將是非常相似的，我們只是想分配一個節點
並插入到前面的堆棧，所以我們甚至不需要任何東西循環。
我們只是直接插入在了前面。
大家好？
>> 好吧。還有問題嗎？
[學生]：什麼重要的事情，我應該記住，從最近的演講嗎？
[搶]最近的演講。
你不需要知道任何代碼。
你應該知道的總體思路。
Nate的一半沒有任何代碼，所以這些幻燈片是在網上。
他們只是喜歡看他們，他們的主要觀點。
我的一半 - 知道的總體思路，首先你不能相信任何事情。
事實上，喜歡的過程中，編譯器可能是壞的，
但它並不重要的源代碼看起來不錯。
因為編譯器可能會改變，改變的源代碼
在編譯過程中。
在相同的時間，只是想 - 我想這些都是像它的主要觀點。
>> [學生]：你提到，我們不需要知道任何有關向Firesheep -
還是我們需要知道嗎？
[搶] Nate的一半的東西，什麼，內特感動 -
如，Wireshark的FireSheep - 我不什至覺得他做了詳細的Firesheep。
你也做了一些與該 - 是Firesheep - 上週？
在您觸摸，？
[學生]：是的，我想我們可能有 - >> [搶]是啊。
我們不會給你Firesheep輸出，並說“這解釋”。
它只是將 - 這將是一個問題，比如什麼是Firesheep？
它是什麼用的呢？
[學生]：我認為它僅適用於第4版的Firefox或東西。
[搶]它可能會破壞現在。
我不知道。
他們似乎並沒有手動禁用它，
但也許它不工作，最近的Firefox。
[學生]：其實，我想安裝它，因為它說，這將是兼容的。
[搶]所以，我想這是行不通的，與最近的Firefox。
但這樣的想法仍然有效，它的意思是什麼顯示。
這是荒謬的世界是多少不是生活在HTTPS的時間。
即使在過去的2年或什麼，它仍然是 - 有顯著改善
使用HTTPS的網站數量。
>> [學生]：我們是否需要通過HTTP去嗎？
[搶]的協議呢？ >> [學生]：有的，我們應該知道的事情。
羅布所有權利。基本的東西是我的一切，你可以看到在您的網絡“選項卡。
當我請求一個頁面 - 回來的主要的東西。
這裡你可以看到，我的要求。
Chrome瀏覽器會發生這一切對我們很好地格式化
請求的URL是這樣的，請求方法為GET，
的狀態碼是200 OK。
如果我打“查看源文件”，我看到更多的，直接的 -
這是 - 我們可以告訴你這些，但是這是不是太難以解釋它們之間的。
下面是我做的直接請求，所以這意味著我去
apps.cs50.net/discuss/threads/inbox/all/HTTP/1.1。
使用的協議是HTTP/1.1這幾乎是 - 它總是要的。
在這裡，我們使用GET，所以這也可能是POST。
然後 - 所有的響應頭 - 如果我們認為這源，
這就是我們看到的200 OK。
了解這些可能的不同的狀態代碼。
我認為，在審查中，我們說一對夫婦這些，
所以403，404 - 那些常見的一種。
這是它的主要思想。
HTTP和HTTPS之間的差異，這是加密的。
>> [學生]：你做了什麼？ >> [搶]我是這麼認為的。嗯，是的。
[學生]：請問你聊的很一般的加密如何工作的呢？
因為我們談到例如壓縮霍夫曼文件時，
你知道如何解壓縮它們，因為你實際發送的哈希表內的文件
那麼，如何加密工作嗎？
你怎麼知道如何對信息進行加密，如果你還沒有真正向客戶端發送
的關鍵 - 實際上，你可以抓住這關鍵 - ？
的一般過程是如何工作的？
[搶]加密的一般過程 -
這是一個令人難以置信的詳細的問題，我會回答。
有一個短暫的 - 好了，湯米和我做了短。
不幸的是，就像是26分鐘，所以它不是一個短期的。這是一個長期。
但是，我們的短RSA，這只是其中的一個例子，這些，
RSA的整體HTTPS協議的一部分。
這個想法 - RSA公共密鑰加密的一個例子，
這意味著你有2個獨立的按鍵。
您可以使用一鍵加密東西，
您使用的另一個關鍵解密的東西。
此鍵使用加密的東西是一個公共的。
該網站可以向您發送此加密密鑰。
他們這樣做的加密密鑰發送給您，當你想要送東西還給他們
您使用的加密密鑰來加密所有的數據發送給他們。
因此，他們的私鑰是唯一的。
如果該私鑰出名，那麼任何人都能夠解密您的數據。
但是，私有密鑰 - 這是數學相關的公共密鑰，但你不能
圖一，從其他的 - 這樣的私鑰可以用來對數據進行解密。
由於他們的私鑰是唯一的，
他們是唯一可以讀取數據。
因此，即使公共密鑰是公開的，
我用的是相同的 - 當我去Google.com或別的什麼東西，
他們可能有多個，我不知道 - 但如果我去到Google.com，
他去到Google.com，她去到Google.com -
我們都可以使用相同的公鑰來加密自己的信息，但是我們想要的。
但我們沒有能夠弄清楚 - 要能夠解密
他們的信息，因為公鑰是無法解密。
它可以加密。
它的樂趣/詳細的數學 - 像一堆模塊的運營商和指數和東西，
它只是工作的私鑰是唯一可以
解密的公共密鑰加密的東西。
是啊。有關詳細信息，請參閱RSA短。
[學生]：是在網站上呢？
[搶]是的，我認為這是在這一點上。或者至少一個YouTube鏈接到它被張貼。
讓我們來看看。短褲。我認為這將是第2週相關。是啊。 RSA。
它是 - 我們玩不下去 - 24分鐘。
這是一個漫長的。
>> 還有問題嗎？
[學生]：你能簡單談談的位掩碼？ >> [搶]當然。
簡單地說，就是這樣的想法一樣 - >> [學生]：這是什麼，羅布？
[搶位掩碼。我們的想法是 - 讓我們只說我們有一些 - 我們使用了一些整數 -
詮釋x - 所以，我們開始了在0。
現在，該整數是32位，所以任何單一1的那些位可以用來表示
一個特定的FLAC。
這是在操作系統代碼，如果你看一下，他們用這一切的地方
可能往上頂的地方，他們的哈希定義 -
讓我們來看看一些例子。
人-2 - 開放 - 開放式的系統調用，我們可以在這裡看到它的一個參數的數據類型為int的標誌 -
什麼期望，這樣的說法是這些標誌。
我們看到O_APPEND，O_ASYNC，O_CLOEXEC，
O_CREAT，依此類推。
O_DIRECT。這些各種各樣的標誌是哈希定義的某個地方。
所有的人都恰好是1位。
所以，O_CREAT可能會對哈希定義為1，左移位，4（1 << 4）。
這將是 - 每當我使用O_CREAT，只是要 -
在二進制1，0，0，0，和收到的30上下的零。
這是一套只有一個位，該位代表這個標誌。
，所以沒有其它標誌將被左移4。
我能代表一個整數的32個標誌做 -
X = O_CREAT位聰明或O_DIRECT。
你剛採摘的這些標誌中的任意2。
現在x都將有2比特集對應的2比特
O_CREAT和O_DIRECT。
的方式，然後 - 然後我們通過x轉換成開放的功能，
開放的需要，看看有什麼實際設置標誌。
所以，這就是它會做這樣的事情
如果（X＆O_CREAT）做一些事情，
如果（X＆O_DIRECT）做別的事情，
然後可能有一些標誌，我們並沒有設定 -
如果（X＆O_ - 我不知道其他標誌是什麼 -
（x和O_RDONLY） - 該特定的條件時不會被執行。
或代碼塊不會被執行，
但這些是因為這些設置標誌。
注意到，在C，任何不為0的值是真實的。
所以，（X＆O_CREAT）為0或O_CREAT
因為O_CREAT只有一個位設置。
如果該位被設置，那麼這是怎麼回事返回O_CREAT -
這一點位被置位的二進制文件。
如果該位下沒有被設置，那麼它會返回0，在這種情況下，我們知道沒有設置標誌。
這就是你使用的位掩碼。
我覺得在以往的考試或可能在課堂上或東西 -
你也可以使用打印出的二進制變量的位掩碼。
所以我可以使用 - 遍歷 - 1，左移，0 - ，然後打印，如果x -​​
如果X和1，左移，0 - 然後打印一個0或1。或打印一個1，否則為0打印。
然後我去一次 - 如果x＆1，左移位，2 - 那麼這意味著，在第二位
變量的設置，所以我打印，我打印0。
而且我認為我們可能會想這樣做，相反的順序，因為
通常你想的左側是最高位
右側是最低位，所以它可能會循環4 INT I = 31，直到我打了0，
然後做精確的條件 - 如果X和1，左移，我打印1，否則為0。
[學生]：謝謝你。
>> [搶]我認為我們沒時間了。
任何更多的時間秒的最後幾個問題嗎？
好的。祝你好運的明天。
這是最後一節，下週將是可選的。
我會還給測驗，我們可以去他們可能去了其他的東西，
你有興趣，或最終項目的事，或將來的CS類的東西 - 我不知道。
但是，這是最後的填充材料的邊。
再見！
（掌聲）
>> [CS50.TV]