HANNAH Blumberg: Hi tất cả mọi người. Chúng tôi đang đi để bắt đầu chỉ cần một vài phút đầu vì chúng tôi có một toàn bộ rất nhiều vật liệu để có được thông qua. Tôi Hannah. Tôi là một TF. Maria sẽ được tham gia chúng tôi chỉ trong một vài phút. Cô dạy phần bên phải trước. Tôi dạy phần bên phải sau đó, vì vậy chúng tôi đang đi để giữ cho nó vào giờ rưỡi. Vì vậy, như bạn sẽ thấy ở đây, chúng tôi có khá một vài chủ đề chúng ta cần phải nhận được thông qua, vì vậy chúng tôi sẽ được đi một chút nhanh. Nhưng nếu tại bất kỳ điểm nào chúng ta nói một cái gì đó quá nhanh hoặc bạn không hiểu, cảm thấy tự do để gây cản trở với câu hỏi. Chúng tôi muốn để có thể làm cho một này xem xét phiên hữu ích cho tất cả các bạn càng tốt. Thật tuyệt vời. Vì vậy, chúng ta hãy nhảy ngay với một số chủ đề mà chúng tôi thực sự rất, phủ rất ngắn gọn cho các đố 0 trong phiên xét đố 0. Vì vậy, bắt đầu với danh sách liên kết. Vì vậy, chỉ cần đảm bảo rằng bạn có một số kiến thức cơ bản về danh sách liên kết và cảm thấy thoải mái làm một số các hoạt động cơ bản. Vì vậy, chỉ để xem lại, liên kết danh sách này là tốt hơn so với mảng bởi vì họ có thể phát triển năng động. Vì vậy, chúng tôi đã có lợi thế rất lớn. Chúng tôi đã nhìn thấy chúng sử dụng trong bảng băm khi chúng ta không biết chính xác có bao nhiêu điều chúng ta sẽ muốn để chèn vào các cấu trúc dữ liệu của chúng tôi. Thật không may, chúng tôi có miếng danh sách liên kết trên tất cả các bộ nhớ, vì vậy chúng tôi sẽ không nhất thiết phải có thể làm thời gian truy cập liên tục để bất kỳ phần tử trong danh sách liên kết. Để tìm một yếu tố cụ thể, chúng tôi phải lặp tất cả các cách từ đầu. Vì vậy, hãy nhớ rằng hầu hết các hoạt động cơ bản là omega của 1. Vì vậy, chèn chỉ là sẽ mất 1. Xóa là sẽ mất n kể từ khi chúng tôi phải đi tìm nó từ danh sách. Và tìm kiếm có thể mất, lúc tồi tệ nhất, n. Chúng tôi không thể làm một cái gì đó như tìm kiếm nhị phân trên một danh sách liên kết vì chúng ta không thể chỉ nhảy ngẫu nhiên vào giữa. Mát. Thật tuyệt vời. Một chút của ngăn xếp. Điều này, một lần nữa, đã đưa vào bài kiểm tra 0, vì vậy bạn nên được siêu thoải mái với nó. Nhưng đối với ngăn xếp, chúng tôi yêu cầu bạn để nhớ một chồng khay. Và nó sẽ là lần đầu tiên trong, kéo ra. Vì vậy, chúng tôi ngăn xếp mọi thứ lên trong ngăn xếp, và sau đó nếu chúng ta đang cố gắng để có một cái gì đó off-- mà chúng ta gọi là popping off các stack-- chúng tôi đi ra khỏi đầu. Và nếu chúng ta muốn đặt một cái gì trong ngăn xếp, chúng tôi gọi nó đẩy. Vì vậy, nó luôn luôn được lớn lên từ đáy như một chồng khay. Thật tuyệt vời. Chúng tôi đã nhìn thấy đống thực hiện với cả hai danh sách và các mảng liên kết. Nếu bạn đang thực hiện với mảng, bạn muốn để đảm bảo theo dõi cả kích thước và dung lượng. Vì vậy, kích thước là có được hiện nay số thứ trong ngăn xếp của bạn, trong khi năng lực là tổng số điều bạn có thể lưu trữ trong ngăn xếp của bạn. Mát. Rất tương tự như vậy, chúng tôi có hàng đợi. Trong trường hợp này, thay vì nghĩ về một chồng khay, suy nghĩ của một dòng. Đây sẽ là lần đầu tiên, ra trước. Vì vậy, nếu bạn đang xếp hàng cho một cái gì đó tại cửa hàng, chúng tôi hy vọng rằng người đầu tiên trong dòng là sẽ được giúp đỡ đầu tiên. Thay vì nói push và bật như chúng tôi làm cho chồng, chúng ta chỉ cần nói enqueue và dequeue. Và một lần nữa, nếu bạn là thực hiện điều này với một mảng, chúng ta cần phải theo dõi không chỉ có kích thước và năng lực, nhưng cũng là người đứng đầu, mà là có được mặt trước của hàng đợi của chúng tôi. Mát. Bất kỳ câu hỏi nào về điều đó? Thật tuyệt vời. Di chuyển ngay cùng. OK, bảng băm. Đây là nơi mà nó bắt đầu có được thực sự thú vị. Vì vậy, một bảng băm là một trong những thực của một mảng kết hợp. Vì vậy, về cơ bản những gì đã xảy ra là chúng tôi có tất cả các đầu vào này, và chúng tôi cung cấp cho nó để băm chức năng mà nói, OK, đây là nơi ở bảng băm nó thuộc về. Vì vậy, các hàm băm đơn giản nhất mà chúng ta đã nhìn thấy được chỉ cần nói, OK, giả sử chúng ta muốn đặt chuỗi trong bảng băm của chúng tôi. Và một ý tưởng thực sự đơn giản có thể nói, OK, chúng ta chỉ cần sắp xếp theo chữ cái đầu tiên của từ. Vì vậy, bạn có thể thấy ở đây, chúng ta lấy chuối, chúng tôi đặt nó thông qua một hàm băm, và nó nói, hey, mà nên đi ở chỉ số 1. Vì vậy, chúng tôi về cơ bản có thể nghĩ ra một hash bảng như một loạt các thùng khác nhau. Và mỗi người trong những thùng được đi để giữ người đứng đầu một danh sách liên kết. Và trong danh sách liên kết là nơi mà chúng ta có thể thực sự đặt phần khác nhau của dữ liệu. Nhiều hơn như vậy lặn một chút thành một hàm băm, đây là ví dụ tôi chỉ mô tả nơi chúng tôi chỉ nói, OK, lấy chữ cái đầu tiên của từ và chúng tôi sẽ sắp xếp nó vào xô. Vì vậy, có lẽ, sẽ có 26 thùng, một cho mỗi chữ cái của bảng chữ cái. Tại sao không phải là này một hàm băm tốt? Điều gì làm cho này không lý tưởng? Yeah. Đung Bạn đang đi để có va chạm. HANNAH Blumberg: Yeah, chính xác. Bạn sẽ có va chạm. Vì vậy, đó là một chuyện. Và chúng ta sẽ nói về cách chúng tôi có thể sửa chữa va chạm chỉ trong một giây. Một vấn đề khác với điều này hàm băm cụ thể là khác nhau của chúng tôi xô đang có được kích cỡ của khá mạnh khác nhau. Chúng tôi biết rằng có một toàn bộ rất nhiều nhiều từ bắt đầu bằng A hơn X, vì vậy chúng ta sẽ có rất xô không cân bằng trong bảng băm của chúng tôi. Mát. Vì vậy, yeah, chúng ta hãy quay trở lại các điểm va chạm. Chúng ta sẽ làm gì nếu có một vụ va chạm? Chúng tôi có một vài lựa chọn khác nhau. Vì vậy, một, vì vậy giả sử chúng ta đang cố gắng đặt berry vào bảng băm của chúng tôi. Và chúng ta thấy, oh, chúng tôi muốn để đặt nó trong chỉ số 1, nhưng chuối đã sống ở đó. Chúng ta sẽ làm gì? Chúng tôi có hai tùy chọn chính. Số một là chúng ta có thể nói, OK, không có phòng trong chỉ số 1, nhưng hãy chỉ tiếp tục tìm kiếm thông qua cho đến khi chúng ta có thể tìm thấy một chỗ mở. Vì vậy, chúng tôi sẽ nói, OK, hãy đặt nó ở vị trí 3. Đó là một lựa chọn. Đó gọi là tuyến tính thăm dò. Và một lựa chọn thứ hai là nói, OK, tốt, chúng ta hãy làm cho mỗi người trong các xô là người đứng đầu của danh sách liên kết. Và đó là OK nếu có nhiều hơn một điều trong một cái xô. Chúng tôi chỉ cần đi để thêm nó lên phía trước. Vì vậy, ở đây bạn có thể thấy, OK, khi chúng ta chèn berry, chúng tôi chỉ cần lấy chuối, loại đẩy nó qua một chút và ném một quả mọng trong đó. Và đó cũng hoàn toàn tốt. Điều này được gọi là xâu chuỗi riêng biệt. Bạn có thể nghĩ về điều này như loại như một mảng của người đứng đầu các danh sách liên kết. Bất kỳ câu hỏi về băm bảng, các hàm băm? Thật tuyệt vời. Cây và cố gắng. Vì vậy, một cây là bất kỳ loại của cấu trúc dữ liệu trong đó có một số loại của hệ thống phân cấp hoặc một số loại của bảng xếp hạng cho các đối tượng khác nhau của bạn. Và điều này sẽ trở thành siêu rõ ràng khi chúng ta thấy một ví dụ. Chúng tôi thấy có cố gắng, cùng với bảng băm, trong pset5-- trong đó, một lần nữa, trò chơi hoàn toàn công bằng cho điều này quiz-- như dữ liệu khác cấu trúc mà chúng ta có thể lưu trữ những thứ khác nhau. Trong trường hợp của từ điển, chúng tôi lưu trữ một loạt các từ. Vì vậy, chúng ta hãy nhìn vào một số cây. Vì vậy, đây là một ví dụ của một cái cây. Nó có một loại cấu trúc, rằng cấu trúc phân cấp, nơi bạn có thể thấy rằng nút này 1 ở đầu có một số loại cấp bậc trên 2 và 3, mà là trên 4, 5, 6 và 7, mà là trên 8 và 9. Vì vậy, đó là tất cả chúng ta có ý nghĩa của một cây, vì vậy bạn có thể chỉ cần loại của hình ảnh này trong đầu của bạn. Bây giờ, chúng tôi có một vài cây chuyên biệt hơn. Vì vậy, một ví dụ là một cây nhị phân. Và một cây nhị phân là, một lần nữa, chỉ cần đi để được một cấu trúc dữ liệu với một số loại hệ thống cấp bậc, nhưng mỗi nút có thể có nhiều nhất là hai đứa con. Đó là nơi mà các nhị phân từ xuất phát từ. Vì vậy, đây là một ví dụ của một cây nhị phân. Vì vậy, đó là một loại nhỏ hơn của cây. Bây giờ chúng ta có được thậm chí nhiều hơn và cụ thể nói về nhị phân tìm kiếm nhị phân trees-- cây, thay. Vì vậy, đây là ý tưởng không chỉ gây ra mỗi nút có ít nhất hai con, nhưng tất cả các trẻ em đến trái đang có được nhỏ hơn và tất cả các em đến đúng sẽ được lớn hơn. Vì vậy, chúng tôi chỉ thông báo trong cây nhị phân, có không có mối quan hệ giữa các số. Nhưng trong tìm kiếm nhị phân của chúng tôi cây, chúng ta thấy, OK, đây là 44. Và tất cả các số bên trái của 44 mọi thứ nhỏ hơn và bên phải là lớn hơn. Và đó nắm giữ tại mỗi mức của cây. Vì vậy, ở đây, đây là nhỏ hơn 22 và số này lớn hơn 22. Và đó là cây tìm kiếm nhị phân. Tại sao chúng ta nghĩ rằng nó được gọi là một cây tìm kiếm nhị phân? Thuật toán nào nó nhắc nhở bạn về? Đung tìm kiếm nhị phân. HANNAH Blumberg: tìm kiếm nhị phân. Bởi vì nếu bạn đang tìm kiếm một số lượng cụ thể trong cây này, tại mọi điểm, bạn có thể chỉ cần gõ và một nửa cây, đó là rất tốt. Và đó sẽ cung cấp cho chúng tôi một cái gì đó trông rất giống tìm kiếm nhị phân. Bất kỳ câu hỏi? Tất cả các bên phải, thoáng mát. Tất cả các quyền, cố gắng. Yêu thích của mọi người. Vì vậy, đây là ví dụ mà chúng tôi đã nhìn thấy một bó trong lớp. Và một lần nữa, điều này chỉ khác là cách mà chúng ta có thể lưu trữ dữ liệu. Trong trường hợp của từ điển, một lần nữa, này chỉ là có được chuỗi. Vì vậy, chúng ta hãy xem những gì này thực sự trông giống như ở một mức độ thấp hơn một chút. Vì vậy, chúng ta hãy có một cái nhìn tại một nút trong một Trie. Và chúng ta thấy, OK, có đi là một Boolean và một nút, một con trỏ đến một node. Và chúng ta thấy rằng Boolean được gọi là is_word. Vì vậy, về cơ bản, đó là sẽ tương ứng để những hình tam giác nhỏ mà nói, nếu bạn đã nhận được ở đây, bạn đã tìm thấy một từ hoàn chỉnh. Chúng ta biết rằng "Turing" hơn đây là một từ hoàn chỉnh, trong khi chỉ T-U-R không phải là một từ bởi vì chúng ta không thấy rằng đồng bằng nhỏ. Và đó là đồng bằng nhỏ, một lần nữa, tương ứng với is_word này, is_word Boolean này. Và sau đó chúng tôi có một mảng của trẻ em. Vì vậy, ở mỗi cấp, bạn có một nút cụ thể, và rằng các điểm nút để một mảng của toàn bộ bảng chữ cái. Vì vậy, bạn có thể thấy, một lần nữa, trong picture-- này tôi sẽ tiếp tục trở lại và nhảy forth-- rằng mảng ở đầu có một loạt các khác nhau các nút sắp tắt của nó. Nó có 26 hay 27 nếu bạn muốn để bao gồm một nhân vật phụ. Và điều này cho chúng ta một cách để lưu trữ dữ liệu của chúng tôi trong một cách mà có thể được xem xét trên mà bạn có thể tìm kiếm siêu nhanh. Thời gian tra cứu cho một Trie là gì? Đung [không nghe được]. HANNAH Blumberg: Yeah. Về lý thuyết, đó là thời gian liên tục. Nó chỉ có được kích thước của từ mà bạn muốn tìm kiếm. Ngay cả nếu chúng ta thêm một zillion nhiều từ để Trie của chúng tôi, nó sẽ không đưa chúng ta bất kỳ thời gian để xác định nếu một từ đã cho là trong Trie. Vì vậy, đó là thực sự tốt đẹp. Đung Em mới khởi tạo mảng đó? Bạn đã bỏ lỡ một hoặc hai điểm. Bạn có thể chỉ nói về mà cho một thứ hai? HANNAH Blumberg: Chắc chắn, hoàn toàn. Câu hỏi hay. Câu hỏi đặt ra là, chúng tôi có một mảng đó sẽ có nút như sao trái ngược với chỉ nút, phải không? Mát. Vì vậy, ở đây những gì chúng ta đang nói là mảng của chúng tôi chỉ là sẽ là con trỏ đến mảng khác. Vì vậy, nó essentially-- nó loại cảm thấy như một danh sách liên kết theo cách này nơi mỗi người trong các con chỉ cần trỏ đến nút tiếp theo. Và cách mà chúng tôi thực sự xác định, hey, OK, chúng tôi đã lặp thông qua toàn bộ một từ, là từ này trong từ điển, chúng ta chỉ cần kiểm tra is_word này. Great câu hỏi. Yeah. Đung OK. Vì vậy, thời gian chạy cho các Trie là gì? HANNAH Blumberg: Chắc chắn rồi. Vì vậy, thời gian chạy cho một Trie cho tra cứu là có được thời gian liên tục. Vì vậy, nó chỉ có được sự số của các chữ cái trong từ. Nó không phụ thuộc vào Kích thước của từ điển hoặc kích thước của cấu trúc dữ liệu. Vì vậy, đây là một ví dụ đơn giản hơn một chút. Trong trường hợp này, bạn có thể thấy rằng dơi từ có trong từ điển và bạn có zoom, nhưng bạn không có một cái gì đó giống như sở thú. Làm thế nào chúng ta sẽ làm cho sở thú? Làm thế nào để chúng ta thêm thú với chúng tôi từ điển, Trie của chúng tôi? Yeah. Đung Hãy is_word đúng đối với [không nghe được]. HANNAH Blumberg: Tốt. Vì vậy, chúng tôi muốn nói Z-O-O, và sau đó chúng tôi muốn kiểm tra tắt hộp đó là tốt. Thật tuyệt. Hãy so sánh rất ngắn gọn cố gắng so với bảng băm. Cố gắng là thực sự tuyệt vời bởi vì, như chúng tôi đã nói, họ cung cấp tra cứu hằng số thời gian. Nhưng bất lợi rất lớn là họ đang humongous. Bạn có thể có cảm giác, thậm chí bằng cách nhìn vào nó, rằng nó sẽ mất một số tiền rất lớn của bộ nhớ. Vì vậy, chúng ta sẽ có nhiều lớn hơn bảng băm, nhưng họ sẽ cung cấp cho chúng tôi lần tra cứu nhanh hơn nhiều. Vì vậy, đó là loại của bạn cân bằng, những gì mà bạn quan tâm, cho dù đó là tốc độ hoặc bộ nhớ. Bất kỳ câu hỏi về điều đó, tất cả các cấu trúc dữ liệu C. Đẹp. ĐƯỢC. Chúng tôi sẽ chuyển sang một chút bit của phát triển web với Maria. MARIA ZLATKOVA: Lovely. ĐƯỢC. HANNAH Blumberg: Bạn có thể sử dụng máy tính xách tay của tôi. MARIA ZLATKOVA: Nice. OK, mát mẻ. Như chúng ta đi ngay bây giờ để web phát triển, chúng tôi nói chuyện một chút về việc thay đổi quyền truy cập file và thư mục để họ có thể được truy cập cho người sử dụng khác, với thế giới, và do đó chúng ta có thể xem như thế nào về cơ bản chúng ta có thể truyền đạt cho họ khi chúng ta phát triển những thứ như các trang web rằng chúng tôi đã chủ yếu được làm. Vì vậy, chúng ta đã thấy lệnh chmod, đó là thay đổi chế độ, về cơ bản. Đó là một lệnh Linux và nó thay đổi quyền truy cập của các đối tượng hệ thống tập tin. Và một đối tượng hệ thống tập tin là chỉ là một thư mục, tập tin, bất cứ điều gì mà bạn có thể thay đổi quyền hạn của. Vì vậy, để xem các tập tin cho phép, chúng ta gõ lệnh ls, danh sách, -l. Và khi chúng tôi loại đó, chúng tôi thường thấy một số điều khoản mà nhìn kiểu như thế này ở phía trước của một tên thư mục. Vì vậy, d đề cập đến thư mục. Và sau đó chúng tôi có ba Tam hoàng mà về cơ bản tham khảo các điều khoản của một trong hai một người sử dụng, một nhóm, hoặc thế giới. Các loại quyền mà chúng ta có thể có cho ba nhóm người hoặc là r để đọc, w cho viết, và x để thực thi. Và chúng ta có thể có những người cho nhóm và thế giới như là tốt. Điều khó là đôi khi khi chúng ta gõ lệnh chmod, chúng tôi sẽ nhập một số số đó bao gồm ba bit. Vì vậy, chúng ta có thể làm như thế 777 và rằng về cơ bản giới thiệu đến các giá trị gia tăng của mỗi của các hội Tam hoàng vì r sẽ chỉ đến 4, w sẽ ám chỉ đến 2, và x sẽ chỉ đến 1, do đó, khi cộng lại, mỗi người trong số các con số sẽ đi xuống đến một số tích lũy đến một giá trị tích lũy giữa 0 và 7. Vì vậy, chúng ta cũng có thể có 0 cho không có quyền truy cập vào tất cả. Và đó về cơ bản sẽ cung cấp cho chúng tôi các điều khoản cho một trong hai người sử dụng, nhóm, hoặc thế giới. Bất kỳ câu hỏi về điều này cho đến nay? Đung Bạn nói đọc là 4? MARIA ZLATKOVA: Yes. Đung [không nghe được]. HANNAH Blumberg: Yup. Đung Và sau đó bằng cách thêm tất cả những những người khác sẽ chỉ ra số của bạn. MARIA ZLATKOVA: Yeah. Yeah. Đây là những câu hỏi lớn. Xinh xắn. Tiếp theo, chúng tôi nhảy vào HTML và một thêm chút thông tin về phát triển web. Vì vậy, HTML chỉ có nghĩa là HyperText Markup Language. Và đó là đánh dấu ngôn ngữ mà là một tiêu chuẩn mà nó được sử dụng để tạo ra các trang web. Nó được gọi là một ngôn ngữ đánh dấu bởi vì nó không thực sự biên soạn. Nó không nói làm thế nào một số mã nên được thực hiện hoặc bất cứ điều gì như thế. Nó chỉ phác họa và mô tả cách một web trang nên được thiết lập với mỗi phần tử của nó và làm thế nào họ nên tìm đến người sử dụng. Một số trong các thẻ HTML mà chúng ta đã đi qua như sau. Tất cả các tài liệu HTML của chúng tôi bắt đầu với html DOCTYPE. Sau đó, chúng tôi luôn có các tag html. Chúng tôi có một cái đầu và một cơ thể. Và điều quan trọng là HTML có loại này của cấu trúc lồng nhau vì nó rất rõ ràng. Và sau đó nó trở nên rất rõ ràng khi chúng ta cần mở và thực sự tags gần. Và chúng ta luôn cần phải đóng thẻ mà chúng tôi đã mở. Và ở đây chúng tôi có một số các loại điều trước mà chúng ta muốn có. Vì vậy, chúng tôi có, ví dụ, danh hiệu CS50. Và sau đó, chúng tôi thực sự có thể liên kết một style sheet định nghĩa như thế nào chúng ta tạo kiểu cho trang web của chúng tôi. Đó là CSS. Chúng ta sẽ đi qua nó trong cặp đôi tiếp theo của các slide là tốt. Trong cơ thể, chúng tôi thiết một số lớp học và ID. Và như một lời nhắc nhở, một lần nữa, ID là duy nhất và các lớp học có thể được gán cho nhiều mặt hàng. Và điều đó chỉ có nghĩa là chúng ta có thể sử dụng các lớp và ID trong structures-- khác như vậy, cho Ví dụ, trong các tập tin CSS hay phong cách sheets-- để chỉ yếu tố cụ thể và về cơ bản nói rằng chúng tôi muốn phong cách hoặc thiết kế một số yếu tố trong một số cách đặc biệt. Và chúng tôi giới thiệu cho họ bởi ID và các lớp học của họ. Và chúng ta cũng có thể tham khảo những điều khác nhau của thẻ là tốt, nhưng ID và các lớp học chỉ cung cấp cho chúng tôi một số tính linh hoạt và cụ thể những gì chúng tôi muốn tham khảo. Vì vậy, chỉ là một ví dụ. Chúng tôi có thể, một lần nữa, trong vòng một tập tin CSS, nơi chúng tôi muốn xác định một số style-- nên màu sắc, phông chữ, và công cụ như that-- chúng ta có thể xác định phong cách cho một cơ thể. Vì vậy, đó sẽ xác định nó cho các từ khóa toàn bộ cơ thể. Nhưng sau đó chúng ta cũng có thể định nghĩa một phong cách cho một #title. Và một lần nữa, các hashtag đề cập đến của chúng tôi ID và dấu chấm đề cập đến lớp học của chúng tôi. Và sau đó cho .info, chúng tôi cũng có thể thiết lập một số thuộc tính. Và một lần nữa, khi chúng tôi quay trở lại, chúng tôi đã có của chúng tôi lớp được gọi là thông tin và tiêu đề ID của chúng tôi. Và chúng ta có thể thấy rằng chúng tôi tham khảo để chúng bằng #title và .info. Đung bạn sẽ nói dấu thăng [? chấp nhận tôi? ?] MARIA ZLATKOVA: Xin lỗi? Đung bạn sẽ nói dấu thăng [? chấp nhận tôi? ?] MARIA ZLATKOVA: hashtag có nghĩa là ID, vì vậy #title đề cập đến bất cứ điều gì các yếu tố có ID này được gọi là tiêu đề. Và sau đó các dấu chấm dùng để chỉ một lớp. Vì vậy, .info đề cập đến yếu tố này bởi vì nó có các thông tin lớp học. Yup. Đung Tại sao bạn phân biệt chúng trong HTML? Tại sao bạn nói những điều nào đó ID và điều nào đó là lớp học? MARIA ZLATKOVA: Đó chỉ là lên đến you-- HANNAH Blumberg: Lặp lại câu hỏi. MARIA ZLATKOVA: Oh, xin lỗi. Tại sao chúng ta phân biệt các yếu tố nhất định như ID và các yếu tố khác như các lớp học? Đó chỉ là bởi vì nó thực sự thường là một sự lựa chọn thiết kế. Nó cung cấp cho bạn rất nhiều tính linh hoạt trong việc có thể nói rằng tôi muốn chi tiết cụ thể này có ID này vì họ muốn để làm được rất nhiều điều với nó, và tôi chỉ muốn xác định một phong cách, phong cách nhất định hoặc màu sắc bất cứ điều gì cho mục đó. Và cách để làm điều đó chỉ đem lại cho nó một ID. Và sau đó nếu tôi muốn có một vài mặt hàng khác nhau có mà, thay vì đi và thiết lập their-- thay vì làm nó bằng tag vì thẻ sẽ thiết lập các tế bào cho cả tag cho mỗi lần thẻ được sử dụng, bạn có thể thiết lập một lớp học cho nhiều mục. Và sau đó chỉ cần truy cập vào lớp đó và nói Tôi muốn phong cách lớp này theo cách đó. Và một lần nữa, các lớp có thể có nhiều mặt hàng khác nhau và ID phải là duy nhất. Lớn câu hỏi. Bất kỳ câu hỏi khác? OK, tuyệt vời. Một lần nữa, đây là cách các selectors được tham chiếu trong CSS, với hashtag, với dấu chấm, hay không có bất cứ điều gì cho việc phân công các phong cách của một số thẻ, giống như cơ thể. Và ở đây chúng tôi có chung Cú pháp của cách thức này được thực hiện. Để lặp lại một số tốt nhất thực hành cho HTML và CSS, chúng ta cần phải, một lần nữa, đóng tất cả các thẻ HTML mà chúng tôi mở. Và những gì chúng tôi đề nghị bạn làm cho các dự án cuối cùng của bạn, cũng như cho CS50 Tài chính, là làm cho chắc chắn rằng tất cả các HTML của bạn xác nhận. Và đó là thực hiện với W3 Validator. Và sau đó những gì chúng ta đã làm và những gì chúng tôi khuyên bạn nên làm được tách phong cách, vì vậy CSS từ ngữ đánh dấu HTML. Vì vậy, bất cứ điều gì liên quan đến cách trang của bạn sẽ trông trực quan và làm thế nào nó sẽ được sửa đổi nên đi vào một tài liệu CSS. Và sau đó đánh dấu của bạn nói như thế nào điều có quan hệ với nhau là HTML, và rằng cần phải đi vào bên trong các tài liệu HTML của bạn. Bất kỳ câu hỏi? MHM. Đung chính xác những gì đang xảy ra về với xác nhận trang khi chúng ta đang chứng thực HTML rằng [không nghe được] tạo ra? MARIA ZLATKOVA: Vậy what-- nghĩ đến em. Vì vậy, những gì chính xác là đi về với xác nhận trang và tại sao chúng ta cần phải làm điều đó? Về cơ bản, chúng ta cần phải làm điều đó bởi vì rất nhiều lần, trình duyệt của bạn, nếu bạn không đóng một thẻ hay đại loại thế, Trình duyệt của bạn vẫn sẽ làm cho một trang web và vẫn có thể làm việc, nhưng đó là cách tốt nhất để đảm bảo rằng bạn đã, một lần nữa, đóng tất cả các thẻ của bạn, rằng tất cả các yếu tố của bạn cách mà họ nên được, và về cơ bản nó là do ước mà được cài đặt sẵn. Đó là, một lần nữa, chỉ một điều mà bạn nên được học tập để được làm, như trái ngược với việc Mã sloppier và công cụ như thế. Yeah. Ồ xin lỗi. Tôi nghĩ bạn đã được nâng cao tay của bạn. Đung Không, tôi chỉ là [không nghe được]. MARIA ZLATKOVA: OK. Đung Cảm ơn bạn. MARIA ZLATKOVA: Tất nhiên, cảm ơn bạn. Vì vậy, một lần nữa, xảy ra vào như thế nào thông tin được chuyển giao và các mô hình truyền thông để chuyển thông tin. TCP / IP. TCP chỉ có nghĩa là Transmission Control Protocol và IP đề cập đến Internet Protocol. Và đó chỉ đề cập đến cách dữ liệu được chuyển giao. Nếu chúng ta có một số dữ liệu cần giao cho you-- vậy bạn thực hiện một yêu cầu cho một máy chủ nào đó. Ví dụ, khi chúng ta cố gắng truy cập cs50.net, chúng tôi thực hiện một yêu cầu các máy chủ CS50 và chúng tôi thấy rằng chúng tôi muốn có được loại thông tin này. Và sau đó được dựa trên giao thức này cho cách thông tin này được phân phối, các máy chủ cung cấp thông tin lại cho chúng tôi, khách hàng. Và sau đó chúng tôi có thể xem các thông tin cho trang và sau đó sử dụng nó. Vì vậy, sau đó Hypertext Transfer Protocol chỉ là một giao thức khác, hoặc thiết lập các công ước mà định nghĩa như thế nào trình duyệt web và máy chủ web nên giao tiếp. Và đưa tất cả điều này với nhau, HTTP, một lần nữa, chỉ định nghĩa như thế nào siêu văn bản này được xác định bằng HTML mà chúng tôi đã làm việc đó, nó như thế nào phải được gửi đến quý vị và làm thế nào mà dữ liệu được gửi đến bạn được cho bạn. Và đó là lý do tại sao, nếu các bạn nhớ từ một lớp học, chúng tôi đã có rất nhiều yêu cầu và chúng tôi đã có rất nhiều cú pháp cho những yêu cầu mà chúng tôi sẽ đi qua ngay bây giờ. Vì vậy, một lần nữa, khi chúng tôi gửi một yêu cầu đến máy chủ, chúng ta phải xác định một vài điều. Vì vậy, chúng ta cần phải tìm các loại các yêu cầu mà chúng tôi đang thiết. Và một lần nữa, chúng ta có, ví dụ, GET là một loại phương pháp mà chúng tôi có trong yêu cầu của chúng tôi. Và sau đó HTTP / 1.1 chỉ là giao thức mà chúng ta đang sử dụng hiện nay. Hầu hết thời gian, đó là đi để các giao thức mà chúng ta đang sử dụng. Vì vậy, nếu bạn có một câu hỏi như thế trên bài kiểm tra của bạn. Đó là ước rằng chúng tôi có cho đến nay. Dấu gạch chéo ngược đề cập đến những gì sắp xếp điều chúng ta đang yêu cầu. Sau đó, máy chủ của chúng tôi là, ví dụ, trong này trường hợp, chúng tôi đang cố gắng để đi đến google.com. Vì vậy, đây là giá trị cho một máy chủ. Đây là một kiểu yêu cầu mà có thể được gửi đi. Và sau đó là một loại phản ứng mà có thể được gửi đi, một lần nữa, dựa trên giao thức này, là một lần nữa, HTTP / 1.1. Vì vậy, đó là phiên bản HTTP nữa. 200 OK chỉ là các mã trạng thái. Và đó là OK chỉ là một cụm từ dựa trên mã trạng thái. Và sau đó các Content-Type dùng để chỉ loại được trả lại cho bạn đó là cho rằng trang web mà bạn nhận được và rằng trình duyệt của bạn có thể làm sau đó. Và đó là text / html. Đung không 1.1 có nghĩa là gì? MARIA ZLATKOVA: Đó chỉ là phiên bản of-- oh, những gì hiện 1.1 nghĩa là gì? Đó chỉ là các phiên bản, HTTP phiên bản của một giao thức mà chúng ta đang sử dụng. Great câu hỏi. Các câu hỏi khác? Đung bạn có thể tổng hợp Content-Type nhanh chóng thực? MARIA ZLATKOVA: Vì vậy mà là những gì các máy chủ. các loại information-- là gì loại nội dung là câu hỏi. Vì vậy, đó là các loại thông tin mà bạn có được trở lại từ các máy chủ, các loại dữ liệu mà trình duyệt có thể sau đó và việc này là bạn đang sử dụng. Đung là những gì này giao thức là nói cho bạn để làm gì? MARIA ZLATKOVA: Xin lỗi? Đung Có phải đó là những gì các giao thức nói gì? MARIA ZLATKOVA: Các protocol-- Đung --what sự Content-Type là hay what-- MARIA ZLATKOVA: Các giao thức dựa on-- giao thức nói cho bạn là gì? Đó chỉ là cách rằng thông tin này được giao cho bạn dựa về những gì sắp xếp của giao thức được thông tin này đã nhận giao lại cho bạn. Điều đó làm cho tinh thần loại? HANNAH Blumberg: Bạn có thể nghĩ về giao thức như a-- Tôi nghĩ rằng Giáo sư Malan mô tả nó trong lớp là loại giống như a-- nó giống như tương đương với tín hiệu bắt tay con người. Nói, giống như, hey, tôi là một yêu cầu và tôi biết làm thế nào để xử lý HTTP phiên bản 1.1. Và sau đó các máy chủ nói, oh, OK, I-- và cả hai tồn tại. Tôi cũng biết làm thế nào để đối phó với HTTP / 1.1. Và tôi sẽ cung cấp cho bạn sao một số nội dung. Trong trường hợp này, nó sẽ là các loại văn bản / html. Vì vậy, nó là loại chỉ là một cách trong số họ cho communicating-- MARIA ZLATKOVA: Nó chỉ xác nhận rằng bạn đang cả sau cùng giao thức và cả hai khách hàng và các server-- vậy trình duyệt của bạn và server-- loại biết những gì bạn đang nói về và có các quy ước cho đi qua trong dữ liệu. Đung Vì vậy, các Content-Type part-- Content-Type text / html-- đó một phần riêng biệt của cùng một thông điệp? Hoặc là nó một phần của chúng ta hãy nói, 200? Có 200 nói với họ rằng hoặc is-- MARIA ZLATKOVA: 200 nói rằng tất cả đã đi OK. Và sau đó gõ nội dung là sắp xếp của một phần riêng biệt của cùng một thông điệp, và nói những điều mà tôi trả lại, loại này của văn bản / html. Nó chỉ cho biết thêm thông tin. Có bất cứ điều gì thêm? ĐƯỢC. Bất kỳ câu hỏi khác về điều này? Thật tuyệt vời. Vì vậy, một số trạng thái HTTP khác chúng ta có thể thêm vào 200 OK, những người mà chúng tôi đã nhìn thấy có lẽ có thể rất nhiều là 403 và 404. Vì vậy, 404, nếu bạn đã cố gắng để truy cập cái gì đó không tồn tại. Vì vậy, ví dụ, trong bạn Psets CS50 Tài chính, nếu bạn đã được dựng hình quote.html và bạn không có tập tin đó, nhưng thay vào đó bạn có quote.php, mà sẽ cho kết quả trong một 404 Không tìm thấy bởi vì các tập tin có thể không tồn tại. Đối với một 403 cấm, mà đề cập đến các điều khoản. Vì vậy, nếu một số tập tin không thể đọc được bởi thế giới, bạn có thể nhận được một 403 trở về. Một số người khác mà có lẽ bạn get-- 301, dời đi vĩnh viễn; 302, Tìm thấy; 304, sửa đổi; 400, Bad Request; và sau đó Internal Server Error cho 500 và 503, Service Unavailable. Vâng. Đung chúng Will dự kiến ghi nhớ tất cả những trạng thái? MARIA ZLATKOVA: Tôi sẽ có chúng trên tờ cheat của bạn. [Cười] Đung là chúng tôi dự kiến biết những gì gây nên mỗi một? MARIA ZLATKOVA: Có phải họ? HANNAH Blumberg: Đối với những người mà chúng tôi đã chạy into-- vì vậy câu hỏi was-- MARIA ZLATKOVA: Có phải họ dự kiến biết những gì mỗi một trong những trạng thái mã có thể được kích hoạt bởi? Vì vậy, đối với những người mà chúng tôi đã sử dụng và chạy vào, tôi sẽ nói rằng, có. Vì vậy, chúng tôi đã chắc chắn nhìn thấy 200 OK và giảng dạy nó trong psets. Chúng tôi đã nhìn thấy 403, 404. Đối với những người khác? HANNAH Blumberg: Tôi sẽ nói 500 có vẻ như trò chơi công bằng. MARIA ZLATKOVA: 500, yeah. HANNAH Blumberg: Yeah. Chỉ cần có một cảm giác chung về những gì gây ra cho họ. Và cũng chỉ bởi những tên, bạn có thể loại như làm một giáo dục đoán như những gì thực sự gây ra cho họ. Ví dụ, di chuyển vĩnh viễn, có thể các tập tin đã được chuyển vĩnh viễn. Đung Nhưng trên một trang trước kỳ thi, đã có một quá làm thế nào để bạn mong đợi chúng tôi trả lời đó? HANNAH Blumberg: Đó là giá trị zero điểm. Các câu hỏi trên 418 trong ấm trà là một kỹ thuật trạng thái HTTP, nhưng nó là giá trị zero điểm. Rõ ràng, bạn không dự kiến ​​sẽ biết chúng. Đung có phải là một trong những thực tế? HANNAH Blumberg: Đó là một thực tế một, nhưng nó không có nghĩa là bất cứ điều gì. Nó chỉ là một trò đùa. Người internet là buồn cười. MARIA ZLATKOVA: câu hỏi lớn, guys. Bất kỳ câu hỏi khác? Đung lỗi máy chủ nội bộ là gì? MARIA ZLATKOVA: Internal lỗi máy chủ chỉ có nghĩa là bạn đã không thể giao tiếp với các máy chủ cho một số lý do. Vì vậy, nó không nhất thiết cái gì mà đã làm với khách hàng hoặc một cái gì đó như thế. Tôi không biết về bất kỳ ví dụ cụ thể chúng ta đã đi qua để giải thích, nhưng yeah. HANNAH Blumberg: Chắc chắn rồi. Vì vậy, ví dụ, như chúng ta hãy nói rằng bạn đang làm việc trên mashup và một máy chủ của Google đã đi xuống cho một số lý do, mất điện, chúng ta hãy nói. Đó sẽ là một máy chủ nội bộ lỗi hoặc một số loại of-- thích bạn sẽ không nhận được một phản ứng lại. MARIA ZLATKOVA: Yeah. Nó chỉ là khi bạn đang không thể giao tiếp với các máy chủ cho một số lý do vì của nó đi xuống hoặc một số lý do khác. Vì vậy, nhảy vào PHP. PHP, không giống như HTML, là một ngôn ngữ lập trình. Và chúng tôi bắt đầu sử dụng nó bởi vì nó rất hữu ích cho phát triển web. Chúng tôi sử dụng lần đầu CS50 Tài chính. Và về cơ bản nó sẽ giúp chúng tôi mang lại cùng nhau đánh dấu này, việc thiết kế, và làm thế nào chúng ta thực sự sử dụng thông tin để hiển thị những thứ trên một trang web. Vì vậy, chính PHP có nghĩa là PHP Hypertext Preprocessor, do đó, nó là một backnorym đệ quy bằng cách riêng của mình. Và thẻ mở cho PHP, chúng tôi bên trái và mũi tên đúng với những dấu hỏi và php. Vì vậy, chúng tôi đã nhìn thấy một bó của nó. Bây giờ, chúng ta chỉ đi qua một số trong những điều cơ bản về nó. Vì vậy, với PHP, biến tên bắt đầu bằng ký hiệu đô la. Chúng tôi không chỉ định, một lần nữa, một biến gõ nữa. Cũng giống như chúng đã làm với C, chúng ta không cần phải làm điều đó. Chúng tôi có thể làm một loạt các khác nhau công cụ với các biến. Chúng tôi có thể đặt chúng lại với nhau bằng cách kết hợp chúng với ký hiệu dấu chấm, mà chúng ta không thể làm trong C một lần nữa. Một lần nữa, chúng ta có một sự linh hoạt hơn chút với PHP với các biến số. Một lần nữa, chúng tôi không có một chức năng chính. Và PHP được giải thích như trái ngược với biên soạn, Vì vậy, chỉ cách chúng tôi đã làm cho các tập tin C, chúng ta không cần phải làm điều đó cho PHP. Nhưng thay vào đó, cách mà ngôn ngữ được điều hành bởi chính nó, nó được giải thích. Và sau đó lỏng lẻo chỉ có nghĩa là chúng tôi không cần phải chỉ định một biến loại và các loại biến được hiểu trong thời gian chạy. Đung Nhưng những gì đã làm bạn có nghĩa là do dot nối? MARIA ZLATKOVA: Chắc chắn rồi. Khi chúng tôi muốn đưa những điều together-- vì vậy nếu chúng ta đã có một số biến có giá trị của 3 và chúng tôi đã có một biến đó có giá trị của chuỗi, chúng ta có thể đặt các biến với nhau bằng cách đặt một dấu chấm ở giữa chúng và cách nối chúng. Hoặc chúng ta có thể tạo ra một biến gọi tên và đặt nó lại với nhau bằng cách nối hai chuỗi. Vì vậy, nếu chúng ta có một chuỗi trong đôi báo giá và chúng tôi đặt một dấu chấm sau đó, và sau đó chúng tôi đã có một chuỗi khác, mà sẽ tạo ra một chuỗi hoàn toàn. Đung OK. MARIA Latvia: Đã được rằng rõ ràng không? Đung Yeah. MARIA ZLATKOVA: OK. Vâng. Đung Khi bạn nói giải thích chứ không phải là biên soạn, bạn đang nói về bạn không cần phải được làm cụ thể khi nói đến PHP so với C? MARIA ZLATKOVA: Khi chúng ta nói hiểu như là trái ngược với biên soạn, làm những gì chúng tôi có nghĩa gì? Vì vậy, điều đó có nghĩa rằng chúng ta không cần các tập tin thực thi để chạy PHP. Nó có nghĩa là nó chạy như nó đi. Điều đó có ý nghĩa? Hơn một chút. HANNAH Blumberg: Như vậy bạn có thể nghĩ đến một thông dịch viên như là một chương trình mà là trách nhiệm cho đi từng dòng PHP và thực sự thực hiện nó, như trái ngược để biên dịch tất cả xuống để nhị phân. Nó không thực sự có nghĩa là bất cứ điều gì khoảng cách cụ thể chúng ta cần phải có. Chúng tôi vẫn cần chính xác, và không quên dấu chấm phẩy của bạn, và chắc chắn bạn có dấu hiệu đồng đô la của bạn, và những thứ như thế. Câu hỏi hay. MARIA ZLATKOVA: Yeah. Vì vậy, từng dòng, như trái ngược với với các tập tin C, chúng ta phải làm cho toàn bộ thức trước khi chúng ta thực sự có thể chạy nó. Đó là sự khác biệt chính. Nhưng một lần nữa, chúng ta không thể thực sự là chưa cụ thể. Vì vậy, các mảng trong PHP đại diện thực sự là một bản đồ ra lệnh. Vì vậy, giá trị mảng liên kết đến các phím. Hai cách để khai báo một mảng, dựa trên cú pháp này, chúng ta có thể rõ ràng hơn trong nói rằng chúng tôi có một mảng và chúng tôi có Key1 này mà các bản đồ để value1 này, key2 mà các bản đồ value2. Hoặc chúng ta có thể chỉ cần tạo một mảng có chứa các giá trị bản thân và sau đó các phím được hiểu theo một cách. Bất kỳ câu hỏi về điều này? Đung gì sẽ các phím là trong ví dụ thứ hai? 0, 1, 2, 3? MARIA ZLATKOVA: Ví dụ, nó chỉ các phím trong này không nhất thiết tạo nên sự khác biệt. Họ chỉ cần xác định làm thế nào bạn có thể sử dụng các giá trị bên trong của nó. Vì vậy, nếu chúng ta có một foreach vòng lặp trong PHP mà có cho phép chúng tôi đi qua tất cả các giá trị, chúng ta có thể đi qua tất cả các giá trị, ngay cả khi chúng tôi đã có hoặc đã không được định nghĩa một phím cụ thể trong các trang web của cú pháp trước đó. Vì vậy, ngay cả với loại này của mảng, chúng ta vẫn có thể có một vòng lặp foreach mà đi qua mỗi của các giá trị trong các chìa khóa trong mảng. Vì vậy, cú pháp của một foreach vòng lặp, chúng ta bắt đầu với một mảng. Biến $ arr Đây là mảng thực tế của chúng tôi đã định nghĩa trong các slide trước như giá trị đó theo nghĩa đen đi qua mỗi giá trị, bất kể chúng tôi đã có một chìa khóa hay không. Và sau đó chúng ta có thể làm điều gì đó với các giá trị bên trong vòng lặp foreach. Vì vậy, một lần nữa, nếu chúng ta có một mảng như thế này đây created-- vì vậy chúng tôi có chìa khóa của foo và giá trị của bar, chìa khóa của baz và giá trị của qux-- chúng ta có thể có một vòng lặp foreach đi qua mảng như là giá trị quan trọng và sau đó làm điều gì đó với chìa khóa và / hoặc giá trị. Nhưng chúng ta không nhất thiết phải luôn luôn phải có một foreach vòng đó đi qua mảng như là chìa khóa để đồ giá trị. Chúng tôi có thể đi qua foreach vòng lặp mảng như là giá trị. HANNAH Blumberg: Và tôi nghĩ đối với: là câu hỏi của bạn, những gì là chỉ số tiềm ẩn? Đung Kinda. MARIA ZLATKOVA: Oh. HANNAH Blumberg: Yeah, yeah. Vì vậy, về cơ bản, nếu bạn không xác định một chìa khóa, nó sẽ là 01. MARIA ZLATKOVA: Yeah. Cũng giống như với C, nó không lập chỉ mục nếu bạn không chỉ định khóa. Đung Xin lỗi. Bạn có thể thử nói một chút to hơn? Tôi đang gặp một chút rắc rối mọi thứ nghe. MARIA ZLATKOVA: Tôi rất xin lỗi. Vâng, tất nhiên. Vì vậy, bạn muốn tôi đi qua này một lần nữa? Hoặc là this-- Đung Vì vậy, trên slide-- trước nếu bạn chỉ có thể quay trở lại trong một giây. MARIA ZLATKOVA: Tất nhiên, xin lỗi. Đung Vì vậy, thứ hai mảng ở đây không dường như có một giá trị để chìa khóa, loại [? nhân quả. ?] MARIA ZLATKOVA: Phải, phải. Đung Vậy làm thế nào mà làm việc khi bạn nói nó là tất cả hoặc không có gì. Với tôi, đó trông giống như a [? foo?] đã. MARIA ZLATKOVA: Yeah, yeah. Vì vậy, một lần nữa, đây là một bản đồ ra lệnh trong ý nghĩa này rằng có được hiểu, Ví dụ, các chỉ số ở đây có thể được hiểu như là 0, 1, 2, 3. Một lần nữa, đó là có những chỉ số tương đương của chúng tôi của việc có các phím được ánh xạ vào các giá trị. Vì vậy, nếu chính của chúng tôi là 0-- xin lỗi. HANNAH Blumberg: Không, có đang phấn lên đây. Nó thực sự tốt đẹp. MARIA ZLATKOVA: Đó là tuyệt vời. ĐƯỢC. Vì vậy, một lần nữa, $ arr 0 sẽ là chìa khóa cho các giá trị 1. 0 sẽ là chìa khóa cho các giá trị 1. Đung Tôi xin lỗi. Đó là vô hình. HANNAH Blumberg: Được rồi, nevermind. Chalk là một ý tưởng tồi. Tôi mang nó trở lại. Bạn có thể nghĩ rằng trong những chìa khóa 0 như bản đồ với giá trị 1. MARIA ZLATKOVA: Yeah. Vì vậy, đây là 0, điều này là 1, 2, 3. Đây có thể là chìa khóa của bạn. Bạn có thể nghĩ chúng as-- yeah. Vì vậy, thay vì phải các phím rõ ràng, họ đang loại hiểu là các chỉ số bắt đầu từ 0. Phấn đã không giúp đỡ. Yeah. Đung Đối với các vòng lặp foreach, nếu chúng ta muốn xem như giá trị, nó sẽ chỉ tự động chỉ số 0? MARIA ZLATKOVA: Yeah. Nó sẽ đi qua mỗi giá trị. Đung [Không nghe thấy] như 0 hoặc sẽ mà chỉ làm 0? MARIA ZLATKOVA: Bạn sẽ có nói như dấu đô la và sau đó một số tên biến, giá trị. Đung [không nghe được]. MARIA ZLATKOVA: Xin lỗi? Đung Xin lỗi, tôi chỉ cần cố gắng để nhớ. Làm thế nào bạn làm điều đó nếu bạn có thể làm điều đó tự động lập chỉ mục chỉ 0 trên là? MARIA ZLATKOVA: Vậy làm thế nào bạn sẽ làm điều đó nếu bạn không có tên chính cụ thể? Đung Yeah. MARIA ZLATKOVA: Bạn sẽ chỉ define-- chỉ cần nói cho mình như một số tên. Vì vậy, trong psets của bạn, các bạn might nhớ foreach $ hàng là $ hàng, chúng tôi tạo ra ourself $ hàng này nói chúng tôi muốn đi qua hàng như hàng $. Mặc dù chúng tôi không có $ này rõ ràng hàng xác định, chúng ta chỉ có thể đi và nói điều này có thể là chìa khóa của chúng tôi, và chỉ cần đi qua mỗi giá trị. Đung vậy là giá trị của một biến mới chúng tôi đang tạo ra để lưu trữ [Không nghe thấy]? MARIA ZLATKOVA: Vì vậy, nó không vốn dĩ là một biến mới. Đó là một biến chỉ đến bên trong của mảng để mỗi người trong số họ. HANNAH Blumberg: Đó là một tên biến mới. MARIA ZLATKOVA: Yeah, đó là một tên biến mới, nhưng nó không inherently-- yeah. Nó chỉ là một biến mới mà bạn có thể làm điều đó. Vì vậy, chỉ cần làm thế nào để chúng tôi làm $ hàng là $ hàng, hàng là một tên biến mới mà chúng tôi có thể tạo ra trong vòng lặp foreach của chúng tôi. Nó không phải preexist trước đó. Đung bạn có thể đi qua logic cho mỗi, sử dụng ví dụ đó? MARIA ZLATKOVA: MHM. Ồ xin lỗi. Dưới đây là ví dụ. Chắc chắn. Vì vậy, đối với mỗi array-- vậy đó có nghĩa là đi đến mảng này như là chìa khóa value-- đó sẽ đi qua mảng này và lần đầu tiên đi và nhận được foo, foo trọng và thanh giá trị. Và sau đó vào thứ hai lần lặp của vòng lặp for, nó sẽ đi qua và mất các baz phím và qux giá trị. Và sau đó bạn có thể làm điều gì đó với một trong hai người hoặc cả hai. Đung Vì vậy, ý tưởng đằng sau có một điểm quan trọng để các giá trị, điều gì làm bạn kết thúc việc tiếp cận? MARIA ZLATKOVA: ý tưởng là gì của việc có một trỏ chìa khóa để đánh giá? Nó chỉ là một quy ước, một cách đi qua mảng và có thể truy cập vào một trong hai khóa hoặc giá trị hoặc cả hai và sử dụng chúng. Đung vai trò cho việc gì ra lệnh foreach chạy? Vì vậy, nếu chúng ta thêm các yếu tố để các mảng sau, những người sẽ là những người đầu tiên gọi trong mảng foreach, hoặc nó sẽ có sau này? MARIA ZLATKOVA: Vậy là những gì thứ tự mà các foreach vòng lặp đi qua một mảng trong? Nó đi qua đầu tiên yếu tố để các yếu tố cuối cùng, đến các yếu tố thêm vào cuối. Nếu bạn thêm các yếu tố sau này, họ sẽ được accessed-- các yếu tố đầu tiên sẽ được truy cập như là người đầu tiên phần tử của mảng, và sau đó bạn sẽ đi qua từng các yếu tố như loại của một ordered-- không phải là một lệnh, nhưng cách mà họ đã được đưa vào mảng. Đung yếu tố mới nữa được thêm vào sau này? Vì vậy, họ đang added-- họ sẽ là người những người cuối cùng trong [? lặp đi lặp lại. ?] MARIA ZLATKOVA: yếu tố mới can-- về cơ bản, khi các yếu tố mới được thêm vào, được họ thêm vào cuối của mảng? Đung Yeah. MARIA ZLATKOVA: Tôi tin như vậy. Vâng. Và sau đó với vòng lặp foreach của bạn, sau khi bạn đã thêm các yếu tố mới và bạn đi qua chúng, các yếu tố mới sẽ được accessed-- nguyên tố mới, nếu nó thêm vào cuối cùng, nó sẽ được truy cập lần cuối. Đung bạn có thể chỉ cần cung cấp cho một ví dụ của cái gì đó sẽ [không nghe] với một cái gì đó có giá trị như [không nghe được] hoặc giá trị, thích cách bạn muốn định dạng đó? MARIA ZLATKOVA: Chắc chắn rồi. Tôi có thể cho một ví dụ về những gì chúng ta sẽ làm gì với các giá trị? Vì vậy, những gì các bạn có thể quen với là chúng ta đã đi qua một mảng và về cơ bản in mỗi nguyên tố, Ví dụ, như một phần của một danh sách đặt hàng, hoặc cái gì đó. Điều đó có ý nghĩa hay chúng ta muốn đối với: Đung chúng ta có thể in ra các giá trị này? MARIA ZLATKOVA: Vâng, chúng ta có thể in và sau đó về cơ bản $ giá trị vì tại rằng giá trị cụ thể, chúng tôi sẽ là in các giá trị bên trong của nó. Vì vậy, nếu chúng ta ở phiên đầu tiên của chúng tôi của nó và chúng tôi in $ giá trị, chúng ta sẽ được in bar. Đung Có cũng là cho vòng trong PHP hay chỉ là vòng lặp foreach? MARIA ZLATKOVA: Có cũng cho vòng trong PHP. Và logic của họ chủ yếu là các giống như những gì bạn đã được sử dụng để. Đung Vì vậy, giá trị của nó là null. MARIA ZLATKOVA: Nó giống như giống nhau. Yeah. Đung tôi chỉ cần đi để hỏi. Vì vậy, khi bạn khai báo một mảng, bạn không cần để nói những gì kích thước nó sẽ được, có nghĩa là bạn có thể chỉ thêm và lấy đi yếu tố [không nghe được]. MARIA ZLATKOVA: Yup. Yup. Chính xác. Khi chúng ta khai báo một mảng, chúng tôi không cần phải nói gì kích thước của nó là, vì vậy chúng tôi chỉ có thể thêm các yếu tố vào nó sau này là tốt. Nhiều câu hỏi? Vì vậy, việc đưa PHP và HTML với nhau, những gì chúng tôi đã seen-- tốt, Ví dụ, trong ví dụ này, chúng ta có một dạng HTML có một trường đầu vào. Và các lĩnh vực đầu vào chỉ là tên và sau đó nó có một nút Submit. Và khi bạn nhấn Submit nút, trong file hello.php của chúng tôi, bởi vì các phương pháp đối với hình thức là nhận được, chúng ta có thể truy cập bất cứ điều gì là tại tên bởi điều này có được biến toàn cầu is-- cú pháp cho nó là $ _GET. Và sau đó chúng ta có thể truy cập bất cứ điều gì người dùng nhập vào bên trong đó hình thức cho tên bằng cách xác định tên của lĩnh vực đó. Bất kỳ câu hỏi khác hoặc bất kỳ câu hỏi trên ví dụ cụ thể? Đung đâu là PHP? MARIA ZLATKOVA: Ở đây. Vì vậy, đây là thẻ mở của chúng tôi cho PHP. Đung Oh, phải. MARIA ZLATKOVA: Yes. HANNAH Blumberg: The = là viết tắt cho điều này là PHP và chỉ echo. Đung Oh. MARIA ZLATKOVA: Vâng, xin lỗi. Tôi đã làm nên rõ ràng. HANNAH Blumberg: Print. MARIA ZLATKOVA: Nó chỉ là chức năng cho phép chúng tôi in cái gì. Great câu hỏi. Vì vậy going-- yes. Đung Có được khá một chút tay mã hóa của PHP và HTML trên bài kiểm tra 1? MARIA ZLATKOVA: Có thể có một số tiền hợp lý của việc giải thích của PHP và HTML, không nhất thiết phải như một số lượng lớn các mã hóa, mặc dù bạn có thể phải viết một foreach vòng lặp, tuy nhiên, một vòng lặp for. Bất kỳ của các vòng mà chúng ta bao gồm ở đây là trò chơi công bằng. Và đó chủ yếu là nó. HANNAH Blumberg: Tôi sẽ được chuẩn bị. Trong cùng một cách mà chúng tôi yêu cầu bạn viết một loạt các chức năng C trên đố 0, Tôi sẽ chuẩn bị để làm việc cùng trong PHP và JavaScript. MARIA ZLATKOVA: Yeah. HANNAH Blumberg: Tôi sẽ nói một little-- như chúng tôi không sẽ làm cho bạn viết HTML lớn Trang chỉ vì đó là một chút tẻ nhạt, nhưng bạn có thể có các bộ phận. Đó là trò chơi hoàn toàn công bằng. Giống như trang HTML nhỏ, hoàn toàn công bằng. Đung OK. Làm thế nào về trong JavaScript là tốt? HANNAH Blumberg: Yeah. Trò chơi công bằng JavaScript của. MARIA ZLATKOVA: Yeah. Đó là trò chơi hoàn toàn công bằng. HANNAH Blumberg: Chúng tôi sẽ nhận được cho rằng trong giống như 10 phút. MARIA ZLATKOVA: SQL, một lần nữa, Structured Query Language. Về cơ bản nó cho phép chúng ta quản lý dữ liệu trong việc quản lý cơ sở dữ liệu quan hệ hệ thống. Điều đó chỉ có nghĩa là về cơ bản rằng chúng ta có một nơi nào đó để lưu trữ một số dữ liệu mà chúng tôi có thể muốn sử dụng trong một trang web hoặc trong một số hình thức khác. Và sau đó chúng tôi có các truy vấn để có được Thông tin từ cơ sở dữ liệu của chúng tôi, hoặc để chèn thông tin trong đó. Rất nhiều các UPDATE ones-- phổ biến, INSERT, SELECT, DELETE. Vì vậy, cho UPDATE, đây là cú pháp để cập nhật dữ liệu trong một cơ sở dữ liệu. Đang cập nhật bảng này được gọi là bảng bằng cách nói SET, chúng ta có thể thiết lập một số giá trị trong tất cả hàng để một cái gì đó tương đương khác. Vì vậy, chúng ta cũng có thể chỉ định một số cụ thể mục mà chúng ta muốn sửa đổi và có thể được sử dụng WHERE. Và chúng ta có thể xác định rằng chúng tôi chỉ muốn sửa đổi một số hàng nơi nhà cho, nếu chúng ta có một bảng của sinh viên và tất cả các sinh viên đã có nhà, vì vậy chúng tôi sẽ chỉ sửa đổi một số giá trị nơi một ngôi nhà bằng Currier, Ví dụ như. Đối với INSERT, chúng ta có thể chèn giá trị nào đó vào một bảng. Vì vậy, INSERT INTO bảng, và sau đó các giá trị, và sau đó trong ngoặc đơn, chúng tôi chỉ định trong đó giá trị mà bạn muốn chèn. Vì vậy, INSERT INTO bảng, col1 và col2, giá trị là VAL1 và val2. Vì vậy, về cơ bản này sẽ chèn một hàng mới vào một bảng chứa các giá trị 1 và 2 dưới các cột 1 và 2. Và sau đó chúng ta sẽ đi qua nhanh một ví dụ về cách thức này có vẻ giống như trong cơ sở dữ liệu của chúng tôi một chút. Nhưng truy vấn cuối cùng này mà tôi nghĩ rằng chúng ta sẽ đi qua, SELECT, nó chỉ cho phép chúng tôi để chọn dữ liệu từ một bảng để có thể sử dụng nó sau đó. Và cách chúng ta làm điều này là chúng tôi chỉ cần lưu trữ nó trong một số biến. Và sau đó chúng tôi có thể có thể sử dụng nó một lần nữa. Vì vậy CHỌN sao có nghĩa là chọn tất cả. Đó chỉ là một cách viết tắt để chọn tất cả. FROM table WHERE, chúng tôi đang tìm kiếm đối với một số điều kiện cụ thể, vì vậy, nơi cột bằng một cái gì đó, ví dụ. Nếu chúng ta chỉ muốn chọn tất cả các từ bảng, này chỉ là lựa chọn tất cả các cột và tất cả các hàng từ một bảng. Và sau đó DELETE FROM bảng ĐÂU col bằng gì gì đó, này chỉ xóa một số hàng từ bảng của tôi nơi chúng tôi có một số điều kiện cụ thể. Trong trường hợp này, các điều kiện là cột bằng gì gì đó. Vì vậy, chỉ là một ví dụ nhanh chóng này. Nếu chúng tôi có bảng này ngay tại đây và chúng tôi chèn nó vào một bảng, các giá trị, rằng sẽ chèn một hàng mới. Và nếu chúng ta có tự động tăng, điều này sẽ chỉ tăng ID của chúng tôi 0-1 đến 2. Nếu chúng ta chọn tất cả các từ học sinh, nó chỉ cần trả về tất cả các lĩnh vực và tất cả các hàng. Trường hợp năm lớn hơn hoặc bằng năm 2016, mà chỉ sẽ trở lại Hannah và bản thân mình. Và sau đó, nếu chúng ta chỉ cần chọn năm id và năm FROM sinh viên nơi có nhà ở là Cabot House, mà sẽ, một lần nữa, trở về Hannah và bản thân mình. Sau đó, nếu chúng ta đã xoá từ sinh viên nơi tên là bằng với Rob, đó sẽ xoá toàn bộ hàng. Và sau đó nếu chúng ta đặt Tên, sinh viên CẬP NHẬT Tên SET bằng đến Daven ĐÂU nhà bằng Cabot House, đó là sẽ đi đến những hàng và sau đó cập nhật tên. Và sau đó một vài kiểu dữ liệu SQL là CHAR, VARCHAR, INT, và FLOAT. Đây là những trò chơi công bằng. Tôi sẽ đi qua một lần nữa và chắc chắn rằng bạn biết và có chúng trên tờ cheat của bạn, những gì mỗi người trong những nhân vật đã được sử dụng, những gì bạn sử dụng chúng trên psets của bạn, và chắc chắn rằng bạn đã quen thuộc và thoải mái với việc phải chọn từ các loại dữ liệu khác nhau trong pset của bạn. Vâng. Đung gì được bảng đó được lưu trữ? Yeah, nơi được bảng này được lưu trữ? MARIA ZLATKOVA: Vâng, ngay bây giờ, nó không được lưu trữ. Dù sao, mà là bảng này được lưu trữ? Nhưng nó có thể được lưu trữ trong một cơ sở dữ liệu SQL. Đung Và đâu là cơ sở dữ liệu SQL? Trong máy tính, online một nơi nào đó, máy chủ? MARIA ZLATKOVA: Nó có thể là một số thứ khác nhau. HANNAH Blumberg: Chúng tôi đã giao tiếp với Bảng SQL chủ yếu là với phpMyAdmin. Vì vậy, chúng tôi có thể yêu cầu một máy chủ để lưu trữ chúng cho chúng tôi. Chúng ta có thể lưu trữ chúng trên máy tính của riêng của chúng tôi. MARIA ZLATKOVA: Nó chỉ phụ thuộc vào làm thế nào bạn muốn làm điều đó cho chính mình. Nhưng chúng tôi đã được lưu trữ họ, như Hannah đã đề cập, vào phpMyAdmin, mà là trực tuyến. Và rồi con đường chúng tôi sử dụng PHP và SQL, chúng ta lưu nó vào một số biến những gì chúng ta đã truy vấn cho. Vì vậy, nếu chúng ta CHỌN TỪ tất cả lịch sử nơi user_id bằng với PHIÊN id, mà sẽ chọn tất cả các hàng cho người cụ thể người được đăng nhập từ lịch sử bảng và sắp xếp chúng thành hàng. Một điều thú vị để biết là mà chức năng truy vấn của CS50 bảo vệ chống lại các thẻ SQL injection. Điều đó chỉ có nghĩa là nó làm cho chắc chắn các đầu vào được cho vào là đúng và rằng người người đang bước vào đầu vào không cố gắng để nhập vào một số độc hại mã để thể thả bảng của chúng tôi hoặc xóa tất cả mọi thứ bên trong dữ liệu của chúng. Một cái nhìn tổng quát của Model View Controller mô hình, nó chỉ là một cách tổ chức và suy nghĩ về mã. Đó là một lần nữa, một mô hình thiết kế. Chúng tôi rằng điều đó có nghĩa là can-- và đó là thực hành tốt để tách các bộ phận khác nhau mã của chúng tôi và những gì họ kiểm soát thành ba mô. Vì vậy, điểm của chúng tôi là thường xuyên nhất của chúng tôi mẫu, bố trí của chúng tôi, cách mà chúng ta thiết lập như thế nào mã của chúng tôi trông. Đó chủ yếu là các tập tin CSS của chúng tôi và cách mà chúng tôi xác định việc thiết kế các mã của chúng tôi, về cơ bản. Điều khiển của chúng tôi chủ yếu là những gì chúng ta đã làm với các file PHP. Vì vậy, một lần nữa, làm việc với các thông tin mà chúng tôi có và xác định làm thế nào mà thông tin được sử dụng, và sau đó chuyển thông tin đó hoặc vào xem hoặc mô hình. Và mô hình, cách mà chúng tôi đã được sử dụng là đã được cơ sở dữ liệu của chúng tôi, vì vậy mà thông tin của chúng tôi là lưu trữ vì vậy nó có một nơi nào đó để sống, và bất kỳ mã mà liên quan đến đường mà chúng tôi nhận được thông tin hoặc cách mà chúng tôi cập nhật thông tin đó. Vì vậy, trong mô hình MVC, HTTP yêu cầu được gửi đến một máy chủ web. Sau đó, các diễn giải điều khiển các yêu cầu của người sử dụng và sau đó xác nhận người dùng nhập vào. Đó là tùy chọn mà chúng ta có bộ điều khiển giao tiếp với một người mẫu, nên cái gì như cơ sở dữ liệu của chúng tôi hoặc một số chức năng khác đó chuyển tiếp thông tin. Và cuối cùng, bộ điều khiển gởi thông tin vào xem do đó nó có thể được kết xuất và rằng nó có thể trở nên hữu hình cho bất kỳ người truy cập vào các trang web. Bất kỳ câu hỏi? Thật tuyệt vời. Vì vậy, một lần nữa, các mô hình, chức năng của nó, một lần nữa, là lưu trữ liên tục của thông tin, quản lý và tổ chức dữ liệu. Và những gì chúng tôi đã nhìn thấy rất đến nay là các cơ sở dữ liệu MySQL và bất kỳ tập tin dữ liệu có thể sử dụng. Xem, trình bày các thông tin người sử dụng, giao diện người dùng, hoặc giao diện người dùng. Và ví dụ của việc này là HTML. Và sau đó chúng ta có thể có tối thiểu PHP. Vì vậy, một cho vòng lặp đó lặp trên dữ liệu được in ra là một phần của xem, như trái ngược với bộ điều khiển. Và sau đó có rất nhiều file PHP của chúng tôi rơi vào danh mục điều khiển. Nó chỉ xử lý yêu cầu người sử dụng và lấy thông tin từ các mô hình. Nhảy vào Document Object Model, điều này chỉ đề cập đến cách HTML các tài liệu được tổ chức. Và chúng được tổ chức thành một cây cấu trúc mà có một hệ thống phân cấp. Vì vậy, nếu chúng ta có quyền truy cập vào [Không nghe thấy] đại diện của các tài liệu, chúng ta có thể làm việc với các tài liệu, như chúng ta thao tác các đối tượng cơ bản. Và để làm cho một này chút chút rõ ràng hơn, khi chúng tôi có rất nhiều của chúng tôi thẻ khác nhau đáp ứng đến các tuyến đường khác nhau trong cây của chúng tôi. Và sau đó cho ví dụ này, chúng tôi có nút tài liệu bắt đầu. Chúng tôi có, sau đó, nút HTML của chúng tôi mà chia tách vào đầu và cơ thể. Đầu có tiêu đề và sau đó tiêu đề chứa hello, thế giới. Và cơ thể chúng ta chỉ chứa hello, thế giới như là tốt. Vì vậy, bất kỳ câu hỏi về bất kỳ của những điều mà chúng ta đã cho đến nay? Và nếu không, Hannah sẽ mất hơn với JavaScript. Thật tuyệt vời. HANNAH Blumberg: OK, mát mẻ. Nếu bất cứ điều gì đi lên với PHP hoặc HTML, hoặc bất kỳ thứ Maria được bảo hiểm, chúng tôi luôn luôn có thể tạm dừng. Chúng tôi đang làm tốt hơn trên thời gian một lần nữa, rất tuyệt vời. Và chỉ để đi lại thực sự nhanh chóng này, nếu bạn nhìn vào mỗi kỳ thi năm qua, đây đi lên either-- đây là một số HTML, làm cho sơ đồ này. Hoặc đây là sơ đồ này, làm cho một số HTML, vì vậy chắc chắn thực hành điều đó. Và sau đó là một trong những được đảm bảo câu hỏi mà bạn có thể có được quyền. Mát. Vì vậy, chúng ta hãy nói về JavaScript và làm thế nào nó một chút khác nhau từ các ngôn ngữ như PHP và C, hai ngôn ngữ, chúng tôi đã nhìn thấy trước. Vì vậy, số một, nó lỏng lẻo. Điều đó giống như PHP, nhưng không giống như C. Đây là một ngôn ngữ giải thích. Một lần nữa, đó là giống như PHP, không giống như C. Và điều này sẽ cho phép chúng tôi để use-- nó hoạt động thực sự độc đáo với các trang web. Nó sẽ cho phép chúng ta thao tác nội dung và nó trông như thế và những gì nó làm. Chúng ta sẽ thấy một chút của Ajax. Nó cho phép chúng ta giao tiếp không đồng bộ với máy chủ khác nhau và nhận được thông tin. Và đây là điều mà thực sự tách JavaScript từ PHP và C là nó là client-side. Cả hai PHP và C là thường server-side. Đối với hầu hết các phần và gần như hoàn toàn những gì chúng tôi đã nhìn thấy, ít nhất là trong lớp này, JavaScript hành vi trên phía máy khách, điều đó có nghĩa rằng trình duyệt là thực sự chịu trách nhiệm về chạy nó. Và điều đó có nghĩa là chúng ta không làm cần phải tương tác với máy chủ. Vì vậy, nó có nghĩa là nó có thể được nhanh hơn rất nhiều bởi vì nó thực sự chỉ cần đó là Chrome, đó là Safari, đó là Firefox, bất cứ điều gì bạn sử dụng thực sự chạy JavaScript. Đung không đồng bộ có nghĩa là gì? HANNAH Blumberg: Ah, những gì không đồng bộ nghĩa là gì? Great câu hỏi. Không đồng bộ means-- tốt, các nội dung trong đó chúng ta sử dụng nó là, OK, chúng tôi đang tạo một trang web và chúng ta cần phải nhận được một số thông tin. Vì vậy, với các ví dụ về mashup, một số thông tin mà chúng tôi có thể muốn là tiêu đề bài viết. Bây giờ, chúng ta could-- một lựa chọn là để làm điều đó một cách đồng bộ và điều đó có nghĩa cho phép của dừng lại, hãy lấy bài viết, lấy bài báo trở lại, và sau đó render, nhưng đó sẽ là rất chậm. Đó sẽ là một trải nghiệm người dùng xấu bởi vì bạn sẽ chỉ được ngồi có chờ đợi điều gì để đáp ứng. Không đồng bộ có nghĩa là chúng tôi sẽ tiếp tục đi về kinh doanh của chúng tôi, hiển thị trang, và chúng tôi sẽ gửi đi một yêu cầu đó là loại đi xảy ra trong nền. Tôi nghĩ rằng chúng tôi sử dụng các ví dụ trong bài giảng của Rob gọi và nói, hey, bạn có thể xem xét điều này lên cho tôi và lấy lại cho tôi, như trái ngược với chỉ tôi chờ trên điện thoại. Vì vậy, không đồng bộ có nghĩa là nó sẽ xảy ra trong nền đi từ chúng tôi song song. Great câu hỏi. Bất cứ điều gì khác? Thật tuyệt. Chúng tôi sẽ nhảy nhiều hơn vào yêu cầu không đồng bộ với Ajax. Đung Liệu JavaScript-- nơi nào nó rơi với model-view-controller? HANNAH Blumberg: Great câu hỏi. Trường hợp nào JavaScript mùa thu với model-view-controller? Hm. Tôi đoán nó có thể fall-- vì vậy chúng tôi không thường thích để squish nó vào mà mô hình, nhưng tôi đoán tôi sẽ nói, OK, vì vậy JavaScript thực sự sẽ cho phép chúng tôi thu thập dữ liệu, diễn giải dữ liệu, thực sự làm điều có ý nghĩa với các dữ liệu. Bằng cách đó, nó rất kiểm soát như thế nào. Nhưng nó cũng sẽ cho phép chúng tôi hiển thị những thứ và những thứ in. Bằng cách đó, nó rất quan điểm giống. Yeah. Vì vậy, nó là loại giống như trong PHP nơi nó có thể loại được cả hai. Câu hỏi hay. Bất cứ điều gì khác? Tất cả các quyền, tuyệt vời. Di chuyển ngay cùng. Vì vậy, chúng ta hãy xem một ví dụ làm thế nào chúng ta có thể sử dụng JavaScript trong một trong các chương trình web của chúng tôi. Vì vậy, tôi sẽ xem xét việc này index.html với một bó của HTML. Và điều tôi muốn bạn tập trung vào là thẻ script này. Và điều này nói, OK, tôi muốn chạy một số JavaScript và đây là nơi nó sống. Nó sống trong hello.js. Và rất nhiều như CSS, chúng ta có thể đặt Javascript trong HTML. Tại sao chúng ta có thể muốn tách nó ra? Yeah. Đung dễ dàng hơn để viết lại? HANNAH Blumberg: Yeah. Nó dễ dàng hơn để sử dụng trên các trang web khác nhau. Nó giữ cho mọi thứ sạch hơn. Nó chỉ thực hành tốt. Thật tuyệt vời. Câu trả lời tốt. Vì vậy, tốt, vì vậy đây sẽ là index.html của chúng tôi. Và sau đó xuống đây là của chúng tôi nhỏ nhỏ tập tin JavaScript. Và tất cả nó nói là cảnh báo Xin chào, thế giới. Vì vậy, những gì xảy ra là khi này renders-- trang vì vậy nếu bạn đi đến bất cứ trang web này is-- tất cả những gì sẽ xảy ra là nó sẽ nói, OK, tôi sẽ chạy mã JavaScript này. Và mã JavaScript này chỉ nói cảnh báo Xin chào, thế giới. Vì vậy, tôi sẽ có được điều này thân thiện chút pop-up. Mát? Đó là loại giống như của chúng tôi đầu tiên Chương trình JavaScript, Hello của chúng tôi, thế giới. Chúng ta hãy xem xét thêm một chút về những gì cú pháp của JavaScript trông như thế nào. Và đặc biệt, chúng ta hãy so sánh nó với C và PHP, mà chúng tôi đã nhìn thấy trước. Trong JavaScript, chúng ta sẽ có var, tên của biến, và sau đó giá trị thực tế của nó. Và chúng ta không chỉ định một kiểu, chỉ như trong PHP, nhưng rất không giống như trong C. Vì vậy, ví dụ, nếu chúng ta muốn để lưu trữ các giá trị 50, trong C, chúng tôi sẽ phải nói, hey, C, tôi muốn một số nguyên, Tôi sẽ gọi nó i, và giá trị của nó là 50. Trong PHP, đó là một chút dễ dàng hơn. Chúng ta nói, hey, tôi muốn có một biến gọi là i và giá trị của nó là 50. Rất tương tự như vậy, trong JavaScript, chúng tôi nói hey, tôi muốn có một biến gọi là i, giá trị của nó là 50. Mỗi lần tiếp theo mà tôi sử dụng i, tôi không cần phải viết var. Nó chỉ là tôi từ thời điểm đó. Trong cùng một cách, trong C, nơi một khi chúng ta nói int i, chúng ta chỉ cần sử dụng i. Mát? Được rồi. Chuyển sang vòng, May mắn thay, những gần như tìm exactly-- Tôi nghĩ rằng họ đang chính xác giống như những gì vòng được sẽ như thế nào trong một cái gì đó giống như C, nơi bạn cho vòng lặp sẽ có ba parts-- một khởi tạo, một điều kiện, và một bản cập nhật. Một vòng lặp trong khi, có vẻ chính xác như nhau. Chúng tôi chỉ cung cấp cho nó một điều kiện. Và một việc phải làm trong khi vòng lặp, một lần nữa, chính xác như nhau. Chúng tôi cung cấp cho nó một điều kiện. Hãy nói rằng tôi muốn lặp over-- Tôi muốn làm điều gì đó năm lần. Trong C, chúng ta có thể viết cho init i bằng 0. i là ít hơn 5, i ++. Chỉ có sự khác biệt, trong JavaScript, thay vì nói int i bằng 0, chúng ta nói var i bằng 0. Đẹp. Đó là sự khác biệt duy nhất. Bất kỳ câu hỏi nào về điều đó? Vâng. Đung Vì vậy, trong PHP, đó là cùng điều, ngoại trừ nhưng cũng giống như một biến? Hoặc là một ví dụ var? HANNAH Blumberg: Yeah. Vì vậy, trong PHP, nó sẽ là một dấu đô la. Vì vậy, nó sẽ $ i equals 0, $ i là ít hơn 5, $ i ++. Great câu hỏi. Bây giờ chúng ta hãy nói về khai báo hàm. Trong C, khi chúng ta khai báo một chức năng, chúng tôi đã cho nó một cái tên và chúng tôi đã cho nó một số thông số. Và ngay từ đầu, chúng tôi đã viết các loại. Trong JavaScript, tất cả chúng ta phải làm là viết các chức năng từ khóa nói, hey, JavaScript, Tôi về để định nghĩa một hàm. Trong trường hợp này, nó có tên tiền. Và phải mất hai đối số, x và y. Chú ý rằng chúng ta không quan tâm về các loại x và y. Và cũng giống như C, chúng tôi có trở về từ khoá này, vì vậy chúng tôi có thể làm điều gì đó như trở lại x và y. Và bây giờ khi chúng tôi đã viết bài này đầu tiên chức năng, chúng ta có thể sử dụng số tiền bất cứ nơi nào. Và đó là hoàn toàn tốt đẹp. Một điều thực sự mát mẻ về JavaScript là rất không giống C là chức năng có thể được đối xử như các giá trị. Vì vậy, chúng ta có thể làm một cái gì đó giống như ở đây nơi tôi cho rằng tôi bao này up-- Tôi phủ lên các var sum part-- và chúng ta chỉ nói chức năng xy bằng trở lại x cộng với y. Đó là những gì sẽ được gọi là một chức năng vô danh. Đó là một chức năng mà không có một tên. Trong khi điều này nói chức năng Tóm lại, blah, blah, blah, điều này chỉ có thể nói chức năng. Nhưng bây giờ mặc dù tôi có chức năng ẩn danh này, chức năng mà thực sự chỉ là một giá trị. Chúng ta có thể đối xử với nó như một giá trị. Vì vậy, chúng ta có thể lưu nó trong một biến cùng cách chúng ta có thể lưu trữ 50 trong một biến. Vì vậy, chúng ta có thể nói, OK, tôi muốn có một biến, nó được gọi là tổng hợp, và nó là chức năng này. Vì vậy, hai điều này là thực sự sẽ làm điều tương tự, nhưng cú pháp là một chút khác nhau và các loại của một lưu ý thú vị. Yeah. Đung Vì vậy, bạn có thể gọi một chức năng đó là vô danh bằng cách nói, khung tổng 2, 5? HANNAH Blumberg: Yeah. Bạn có thể gọi ẩn danh này chức năng trong cùng một cách. Bạn sẽ làm gì sum (2, 5) ;. Đó sẽ là hoàn toàn tốt đẹp. Nếu tôi không làm var sum bằng chức năng, nếu tôi chỉ xóa this-- Tôi biết nó trên tay tôi, nhưng giả vờ tôi đã xóa this-- sau đó chức năng đó là loại chỉ đi. Bạn không bao giờ có thể sử dụng nó một lần nữa bởi vì bạn không có một tên cho nó. Thật khó để ám chỉ cái gì bạn không biết những gì để gọi. Câu hỏi hay. Yeah. Đung bạn có thể tham khảo trong tổng những nơi khác với giá trị của x cộng với y? HANNAH Blumberg: Có thể bạn tổng tài liệu tham khảo ở những nơi khác với các giá trị x cộng với y? Tôi không hoàn toàn chắc chắn những gì bạn có ý nghĩa. Đung Vì vậy, quá khứ của bạn bán vô danh chức năng là tổng bằng này chức năng ẩn danh, vì vậy số tiền là bây giờ là một biến mà bạn can-- HANNAH Blumberg: Đúng vậy. Vì vậy, số tiền là biến, nhưng nó actually-- để tổng hợp là một biến mà giá trị là chức năng. Vì vậy, nó là một chức năng, đó là loại một điều lạ để quấn quanh đầu của bạn vì chúng tôi đã chơi với C và bạn không thể làm điều đó trong C. Nhưng bây giờ chúng ta có thể gọi tổng hợp các cùng một cách mà chúng ta có thể gọi sum ở đây. Đung OK. HANNAH Blumberg: Yeah. Câu hỏi hay. Yeah. Đung Vì vậy, chúng tôi không sử dụng nguyên mẫu trong PHP hay Javascript? HANNAH Blumberg: Không, chúng tôi không cần phải sử dụng nguyên mẫu, đặc biệt là trong JavaScript. Vì vậy, một điều xấu thực tế rằng tôi là sẽ nói rằng bạn không nên làm là bạn không phải viết var i = 50. Bạn chỉ có thể bắt đầu làm i = 50. Và sẽ chỉ làm cho tôi một biến toàn cầu. Đó là thực tế rất xấu đến không bao giờ nói explicity var i, nhưng nó là một cái gì đó bạn có thể làm. Các thông dịch viên không sẽ hét vào mặt bạn. JavaScript là khá giống như, bạn có thể làm những gì bạn muốn. Ồ xin lỗi. Có hai. Trong quần màu da cam. Đi trước. Đung Không, bạn đi đầu tiên. Đung Không, tôi chỉ nói Tôi đã không có bàn tay của tôi lên. ĐƯỢC. Vì vậy, nếu bạn đã gọi mà lần đầu tiên, bây giờ tổng hợp, chúng tôi gọi nó theo cùng một cách, x, y, giống như mỗi lần duy nhất? HANNAH Blumberg: Yeah. Vì vậy, hai cơ bản làm điều tương tự. Đung Và những gì là lợi thế của việc sử dụng một hay khác? HANNAH Blumberg: Không có lợi thế của việc sử dụng một hay khác. Tôi chỉ muốn cho bạn thấy hai phần khác nhau của cú pháp. Rất nhiều lần, nơi vô danh chức năng không có một mục đích là nếu đối số khác chức năng nên được một chức năng. Và chúng ta sẽ thấy rằng trong chỉ một giây với Ajax. Vì vậy, nếu điều đó không làm cho bất kỳ ý nghĩa, lưu trữ nó ở phía sau đầu của bạn. Đó là nơi mà một ẩn danh chức năng có thể có ích bởi vì nó không thực sự có giá trị cho nó một cái tên, vì chúng tôi chỉ sẽ sử dụng nó một lần. Yeah. Đung Nếu x và y thay đổi sau trên, sẽ tổng hợp thay đổi là tốt? HANNAH Blumberg: Nếu x và y thay đổi sau này, sẽ tổng hợp thay đổi là tốt? Vì vậy, đây thực sự là tôi nghĩ cái gì đó, một lần nữa, nó chỉ cảm thấy rất khác nhau từ C. Đây không phải là một giá trị. Nó không phải 5. Nó chỉ là chức năng riêng của mình. Vì vậy, ngay sau khi bạn cung cấp cho nó các tham số, sau đó bạn sẽ thực sự tính toán một giá trị. MARIA ZLATKOVA: Và sau đó bạn có thể gọi hàm và sử dụng nó để có được một số giá trị. HANNAH Blumberg: Đúng vậy. Chính xác. Yeah. Đung Vì vậy, nếu bạn chỉ lưu trữ nó trong biến, như var x bằng tổng của hai values-- HANNAH Blumberg: Yeah. Vì vậy, bạn chỉ có thể làm var sum bằng tổng của hai giá trị. Yeah. Bất kỳ câu hỏi khác? Yeah. Đung Nhưng sẽ là nhầm lẫn giữa tiền và số tiền? Cũng giống như nếu bạn gọi tổng biến của bạn, bạn sẽ gọi hàm sum? HANNAH Blumberg: Mm. Mm. Nếu bạn đã làm một cái gì đó như thế, tổng số tiền bằng 2, 5? Đung Yeah. HANNAH Blumberg: Tôi tin rằng sẽ ghi đè lên giá trị của tiền. Vì vậy, một thú vị điều về JavaScript là một biến duy nhất có thể đưa trên một loạt các loại khác nhau. Xấu thực hành. Bạn không nên làm điều gì đó giống như những gì bạn vừa nói. Nhưng trong C, nếu tôi được thiết lập bằng một số nguyên, chúng ta biết rằng không bao giờ sẽ trở thành một chuỗi. Đây không phải là trường hợp của JavaScript. Vâng, câu hỏi hay. Bất cứ điều gì khác? Được rồi. Làm tất cả phải vào thời gian. Giữ đi. Được rồi. Nếu chúng ta nhìn vào một mảng trong JavaScript, đây là nhanh một ví dụ của một mảng của chuỗi. Và mảng có thể phát triển năng động. Họ không có một kích thước cố định theo cùng một cách mà họ làm trong C. Chúng ta có thể truy cập yếu tố chỉ với các dấu ngoặc vuông. Điều đó có vẻ rất giống PHP và rất nhiều như C, nơi chúng ta có thể nói rằng, trong trường hợp này, nếu tôi muốn từ JavaScript, tôi sẽ làm arr dấu ngoặc vuông với 0, 1, 2. Và sau đó nếu có nhớ trong C khi chúng ta muốn có được độ dài của một mảng, nó đã thực sự gây phiền nhiễu. Nhưng trong JavaScript, siêu dễ dàng. Tất cả chúng tôi làm, .length. Cung cấp cho nó các độ dài. Đó là nó. Đung Đó là đơn giản. HANNAH Blumberg: Yeah, làm cho cuộc sống của bạn dễ dàng hơn rất nhiều. OK, object-- không có. Các đối tượng trong cảm giác JavaScript rất giống cấu trúc trong C và mảng kết hợp trong PHP. Vì vậy, những gì chúng tôi đã nhìn thấy một rất nhiều là JSON, mà viết tắt của JavaScript Object Notation. Và đó là cơ bản một cách của cấu trúc dữ liệu của chúng tôi. Vì vậy, chúng ta hãy xem một ví dụ, có lẽ là dễ nhất. Vì vậy, đây là một ví dụ của một đối tượng lưu trữ các lớp, CS50. Và khi tôi nói lớp, tôi có nghĩa là tất nhiên, không like-- yeah, khóa học, CS50. Và bạn sẽ thấy rằng tất cả mọi thứ trong đối tượng sẽ được chứa trong dấu ngoặc nhọn. Và chúng tôi bắt đầu để kết hợp tên trường hoặc phím với các giá trị khác nhau. Vì vậy, bạn có thể bắt đầu để xem làm thế nào loại này cảm thấy như một mảng kết hợp trong PHP. Vì vậy, chúng ta sẽ kết hợp lĩnh vực này hoặc tên khóa, khóa học, với chuỗi, CS50. Chúng tôi sẽ có một người hướng dẫn. Chúng ta sẽ phải TF. Chúng ta sẽ có số psets và chúng ta sẽ có ghi lại. Và một điều mát mẻ để lưu ý là tất cả những điều này có các loại khác nhau, và đó là hoàn toàn tốt đẹp. Nó tốt cho một đối tượng, trong thực tế, nó có thể dự kiến ​​cho một đối tượng để có một sự kết hợp của các chuỗi và con số và phép toán luận và mảng và bất cứ điều gì khác có lẽ bạn muốn có bên trong đối tượng của bạn. Và lưu ý rằng đây là sẽ là tên hoặc các phím, và sau đó chúng tôi chỉ thiết lập nó tương đương với một ít đại tràng. Đung chính xác thì JSON có ý nghĩa gì? HANNAH Blumberg: gì chính xác thì JSON nghĩa là gì? JSON chỉ là viết tắt của JavaScript Object Notation. Nó chỉ là một cách để định dạng. Yeah. Đó là một cách để định dạng dữ liệu của chúng tôi. Trong C, đó là cấu trúc. Trong PHP, đó là mảng kết hợp. Trong JavaScript, chúng ta có các đối tượng. Đung vậy CS50 là một đối tượng? HANNAH Blumberg: CS50 là các đối tượng trong trường hợp này. Bây giờ, làm thế nào chúng ta thực sự truy cập các lĩnh vực hoặc thay đổi các lĩnh vực này. Ví dụ, giả sử chúng ta quyết định rằng bạn muốn có một ít pset học kỳ này. Thay vì chín, chúng tôi chỉ cần đi để có tám. Làm thế nào chúng ta sẽ thay đổi điều đó? Oh, một cách sai lầm. Có hai cách mà chúng ta có thể làm điều đó. Số một là với dấu chấm ký hiệu và số hai là với các ký hiệu khung vuông. Vì vậy, ví dụ, nếu tôi muốn thay đổi hoặc truy cập lĩnh vực psets trong đối tượng CS50 của chúng tôi, những gì tôi sẽ làm gì CS50.psets là, vì vậy tên của đối tượng dot tên của các lĩnh vực hoặc phím. Rất tương tự như vậy, nó chính xác tương đương để làm CS50, và sau đó trong dấu ngoặc vuông, psets. Mát? Yeah. Đung vậy là JSON về mặt kỹ thuật vẫn JavaScript, mặc dù trong psets chúng tôi tách nó ra [Không nghe thấy]? HANNAH Blumberg: Chắc chắn rồi. Vậy câu hỏi là, là JavaScript và JSON tương đương? Vì vậy, JSON là ký hiệu, về cơ bản cách mà chúng tôi viết ra một đối tượng từ JavaScript. Vì vậy, họ không phải là chính xác như nhau. Tôi sẽ nói JavaScript, có là đối tượng trong JavaScript. JSON có những đối tượng và in chúng và hiển thị chúng hoặc lưu trữ chúng trong một cách tốt đẹp. Vì vậy, JSON không phải là một lập trình ngữ theo cách đó là JavaScript. Nó chỉ là những ký hiệu cho đối tượng của chúng tôi trong JavaScript. Yeah. Đung Vì vậy, những gì chính xác [Không nghe thấy] hoàn thành? HANNAH Blumberg: Chắc chắn rồi. Vì vậy, điều này thực sự không có gì. Đây chỉ là một cách để truy cập. Vì vậy, chúng ta hãy nói rằng chúng ta muốn thay đổi số lượng các bộ vấn đề 9-8. Những gì chúng tôi làm là làm điều gì đó như CS50.psets = 8 ;. Vâng, câu hỏi lớn. Đây là chỉ để cho bạn cú pháp. Không thực sự làm bất cứ điều gì hữu ích. Bất kỳ câu hỏi? Di chuyển ngay cùng. Vì vậy, chúng ta hãy xem xét một ví dụ nhanh chóng như thế nào JavaScript hoạt động bởi vì tôi đã nói với bạn nó làm tất cả những điều này mát mẻ và cho phép chúng ta chỉnh sửa các trang web. Chúng ta hãy thực sự nhìn thấy nó trong hành động. Vì vậy, lấy ví dụ, tập tin HTML này. Và điều tôi muốn bạn tập trung vào là tag đặc biệt này, đó là một nút, với id search_button. Nó chỉ trên trang. Vì vậy, bây giờ chúng ta hãy xem những gì chúng tôi thực sự có thể làm được. Vâng, giả sử khi bạn nhấp vào nút đó chúng tôi muốn thực hiện một alert-- bạn nhấp vào nút. Hãy xem cách chúng tôi có thể làm điều đó. Vì vậy window.onload-- này không phải là điều mà bạn đã nhìn thấy trong lớp, do đó sẽ không cần phải biết nó cho các bài kiểm tra. Nhưng điều này về cơ bản nói, OK, cuộc gọi chức năng này khi tải cửa sổ. Vì vậy, đó chỉ là loại mã thiết lập. Đừng lo lắng quá nhiều về điều đó. Những gì tôi muốn bạn tập trung vào là ở đây. Chúng tôi nói var Album bằng document.getElementById search_button. Vì vậy, như bạn có thể đoán, điều này không là nó nói, OK, đi tìm các phần tử với ID search_button. Và bây giờ chúng tôi có mà yếu tố thực tế và tôi đi để lưu trữ nó trong một Album biến. Và bây giờ chúng ta có thể thực sự sử dụng yếu tố đó và thay đổi nó, hoặc truy cập vào các giá trị của nó, những điều như thế. Chúng tôi thực sự có thể bắt đầu tham gia với các trang web. Vì vậy, ở đây tôi nói, OK, bây giờ mà tôi có nút đó, khi nó được click, gọi hàm vô danh này. Vì vậy, đây là nơi ẩn danh chức năng trở nên hữu ích. Và những gì hiện các chức năng làm gì? Vâng, nó chỉ gọi này chức năng cảnh báo, và nói rằng, bạn nhấp vào nút Tìm kiếm. Vì vậy, những gì sẽ xảy ra nếu tôi đi đến bất cứ nơi nào HTML này sống và tôi nhấn nút, Tôi sẽ nhận được một cảnh báo chút ưa thích nói rằng bạn nhấp vào nút. Vì vậy, điều cần tập trung vào here-- document.getElementById được một HTML đặc biệt phần tử với các ID nhất định. Và bây giờ chúng ta có thể thiết lập những gì sẽ xảy ra khi rằng yếu tố đặc biệt được nhấp. Đung Chúng tôi có phải đặt tất cả điều đó ở? HANNAH Blumberg: Xin lỗi? Đung Chúng ta phải vật lý mã tất cả điều đó? HANNAH Blumberg: Chúng ta có phải vật lý mã tất cả điều đó? Vâng. Không phải là loại gây phiền nhiễu? Điều này là rất nhiều mã. Đung Bạn có thể nhập khẩu một cái gì đó. HANNAH Blumberg: Đúng vậy. Chúng ta có thể sử dụng một cái gì đó. Và trong particular-- oh, đó là nói với tôi rằng tôi phải dạy phần. Đặc biệt, chúng ta hãy sử dụng thư viện jQuery, bởi vì đó là thực sự lâu dài và thực sự gây phiền nhiễu và tôi muốn để có thể đơn giản hóa nó và làm cho nó ngắn hơn và dễ dàng hơn để viết. Vì vậy, jQuery là một thư viện JavaScript. Vì vậy, JavaScript là lập trình ngôn ngữ; jQuery là một thư viện. Và nó làm cho một loạt các thứ dễ dàng hơn. Nó làm thay đổi và đi qua một tài liệu HTML dễ dàng hơn nhiều. Nó làm cho các sự kiện xử lý dễ dàng hơn. Nó làm cho hình ảnh động dễ dàng hơn và nó làm cho Ajax dễ dàng hơn. Vì vậy, hãy nhảy vào hai những điều đó ngay bây giờ. Xin lỗi. Trước khi chúng tôi làm, một số cú pháp cơ bản. Đây là những gì gọi là nhất thư viện jQuery như thế nào. Chúng tôi sử dụng đồng đô la này sign-- không có dấu hiệu kết nối với PHP, chỉ inconvenient-- tên của một selector, dấu chấm, và sau đó là một hành động. Vì vậy, chúng ta hãy xem một số ví dụ cụ thể về điều đó. Vì vậy, đây thực sự là như nhau mã từ slide sự kiện. Vì vậy, từ lâu, điều này trở nên xấu xí này đẹp hơn nhiều, điều nhỏ hơn. Vì vậy, hãy cố gắng để phá vỡ này xuống. Điều này nói, OK, jQuery-- đô la này sign-- jQuery, tìm thấy tôi ngoài cửa sổ. Vì vậy, đó là chọn. Khi nó tải, gọi chức năng này. Vì vậy, đó là tất cả mọi thứ bên trong. ĐƯỢC. Càng xa càng tốt? Được rồi. Bây giờ, jQuery, tìm tôi điều với ID search_button. Và những gì nó được click, gọi chức năng này. Và sau đó chức năng của này chính xác như nhau. Chỉ cần làm một chút cảnh giác, bạn nhấp vào nút Tìm kiếm. Vì vậy, nó thực sự tốt đẹp. Nó thực sự ngưng tụ và đơn giản hoá mã của chúng tôi. Làm thế nào tôi biết rằng đó là ID search_button và không giống như lớp search_button? Đung hashtag? HANNAH Blumberg: Yeah. Biểu tượng băm này, nó chỉ giống như CSS. Vì vậy, hãy nhớ rằng, với CSS, khi chúng ta muốn chọn một cái gì đó bằng ID, chúng tôi sử dụng các ký pound. Và khi chúng tôi muốn chọn một cái gì đó của lớp, chúng tôi sử dụng các dấu chấm. Thật tuyệt. Có lý? Vì vậy, jQuery là vụ chỉ làm cho cuộc sống của chúng tôi dễ dàng hơn. Yeah. Đung Vì vậy, tôi là một chút nhầm lẫn như để bao hàm vô danh làm việc. Bạn đặt tên anonymouse này chức năng, chức năng? Làm thế nào nó được gọi là? HANNAH Blumberg: Chắc chắn rồi. Vì vậy, chức năng chỉ là một từ khóa nói, tôi về để định nghĩa một hàm. Đung Oh, OK. HANNAH Blumberg: OK? Và sau đó chúng tôi vượt qua nó như một lập luận đối với: chúng ta hãy one-- bên này đến chức năng nhấp chuột. Vì vậy, yeah, chức năng đó, chức năng ẩn danh này, trở thành một đối số thực tế. Vì vậy, hãy nhớ trong JavaScript, chúng tôi có thể điều trị các chức năng như các giá trị. Đung Oh, OK. HANNAH Blumberg: Yeah. Tôi thích rằng "oh." Tốt đẹp. Các câu hỏi khác? Thời gian? MARIA ZLATKOVA: Tốt. Tốt. HANNAH Blumberg: Awesome. Một số jQuery hữu ích nhanh chóng. Tôi sẽ không đi thông qua tất cả các. Các slide sẽ được lên trực tuyến một chút sau đó, vì vậy bạn có thể kiểm tra nó ra một chút sau đó. Nhưng về cơ bản, nói chung mô hình tổ chức mà chúng ta nói, OK, hey, jQuery, đây là của tôi chọn và sau đó đây là một hành động. Và bạn có thể làm những việc như truy cập giá trị của một biểu mẫu, truy cập một số HTML, Kiểm soát những gì sẽ xảy ra khi người dùng nộp một hình thức, những điều như thế. Vâng. Đung Vì vậy, trong kỳ thi, chúng ta sẽ cần để biết khá nhiều từ các tài liệu jQuery. Vì vậy, cho rằng chúng tôi sao chép / dán jQuery tài liệu để cheat sheet của chúng tôi, nơi của đường vẽ? Giống như bao nhiêu chúng ta cần phải biết? HANNAH Blumberg: Great câu hỏi. Câu hỏi là về cơ bản là cho rằng bạn không thể truy cập tài liệu jQuery trong khi thử nghiệm, bao nhiêu nên bạn biết? Chúng tôi sẽ không mong đợi bạn đến với một số chức năng ngẫu nhiên mà chúng ta mong đợi bạn để Google. Những điều đó là công bằng trò chơi là tôi sẽ nói chỉ là loại cú pháp chung, việc có thể chọn bằng ID và bởi class-- vì vậy chỉ cần như CSS. Và sau đó các chức năng thực tế themself, chúng tôi sẽ có thể cho bạn biết. Yeah. Đung Vì vậy, khi bạn chọn bởi lớp sẽ có nghĩa là dấu chấm. HANNAH Blumberg: Vâng, chính xác. Tốt. Khi bạn chọn bằng class, nó sẽ để được chấm thay vì các ký pound. Vâng. Đung Sẽ bạn đi qua những khác biệt giữa việc chọn bởi ID và class? HANNAH Blumberg: Chắc chắn rồi. Sự khác biệt giữa việc lựa chọn ID và chọn bởi lớp. Vì vậy, như Maria nói một chút ở trên, có chỉ có thể là một thành phần của HTML với một ID nhất định, trong khi lớp học, nó cho phép chúng ta nhóm một bó các yếu tố khác nhau lại với nhau, vì vậy những điều có liên quan, nhưng không giống hệt nhau. Điều đó trả lời các câu hỏi? Thật tuyệt vời. Vâng. Đung gì nếu bạn có nhiều điều đó là trong cùng một lớp? HANNAH Blumberg: Điều gì sẽ xảy ra nếu bạn có nhiều điều mà là những lớp học như thế? Vì vậy, ví dụ, nếu chúng tôi chỉ sử dụng JavaScript tinh khiết, chúng tôi sẽ làm một cái gì đó như document.getElementsByClass. Và sau đó những gì mà thực sự làm là lợi nhuận một mảng của các yếu tố. Và bạn phải hoặc là lặp qua họ hoặc tìm cái nào bạn muốn. Nó sẽ không để cho bạn một yếu tố duy nhất. Nó sẽ cung cấp cho bạn một mảng của các yếu tố. Great câu hỏi. Bất cứ điều gì khác? Thật tuyệt vời. Vì vậy, tôi nghĩ rằng nếu bạn đã quen thuộc với bất kỳ jQuery bạn đã thấy trong pset, bạn sẽ được tốt để đi. Câu hỏi? Ồ không. Tôi thực sự phải dạy. Thư giãn. Nó sẽ được tốt. Tôi sẽ đến đó. Hãy nói về Ajax. Vì vậy, Ajax là có được a-- tốt, chúng ta hãy bắt đầu với những gì nó có nghĩa là. Đó là một từ viết tắt. Nó là viết tắt của Asynchronous Javascript và XML. Và XML được về cơ bản là có được [Không nghe thấy] với một kiểu dữ liệu của chúng tôi. Nhưng chúng tôi đã không thực sự sử dụng XML. Thay vào đó, chúng ta chỉ cần sử dụng JSON. Vì vậy, về cơ bản, nó là một số data-- không đồng bộ, JavaScript, và dữ liệu, trong trường hợp này, JSON. Và mục tiêu của chúng tôi, như chúng tôi đã đề cập một chút trước đó, được để có thể làm cho một yêu cầu, đã yêu cầu mà làm điều của nó trong nền, nhưng vẫn tiếp tục làm những gì chúng tôi đã có ý định làm. Và sau đó khi thông tin đó là sẵn sàng, sau đó chúng tôi sẽ kết hợp nó. Vì vậy, chúng ta hãy xem những gì này thực sự trông như thế nào. Và điều này, bạn nên có một chút quen thuộc từ pset8, một trong những bạn chỉ lại. Vì vậy, đây là một jQuery hợp lệ chức năng mà chúng ta có thể muốn biết about-- dấu đô la này. Vì vậy, nó nói hàm jQuery, .getJSON. Và những gì chức năng này có phải nó là mất một URL và một số parameters-- vì vậy tôi nghĩ rằng trong trường hợp của pset8, nó là như thế, URL là articles.php và thông số là đi = một số mã bưu chính. Và nó nói, OK, tạo một yêu cầu để URL này với các tham số đã cho. Và điều đó chỉ xảy ra. Khi nó kết thúc, nó là một trong hai sẽ hoàn tất thành công hoặc nó sẽ thất bại. Vì vậy, đây là tương đương với các cuộc gọi Rob và yêu cầu ông phải làm điều gì đó. Và sau đó khi ông gọi lại, ông là một trong hai sẽ nói rằng tôi đang thực hiện hoặc tôi không thành công. Vì vậy, trong trường hợp bạn đang thực hiện, bạn nói, OK, tôi làm. Và sau đó bạn gọi chức năng này. Trong trường hợp này, nó sẽ là một chức năng đưa một số thông tin. Người ta thường quan tâm là dữ liệu, các dữ liệu mà chúng tôi đã thực sự trở lại như là kết quả của việc gọi .getJSON. Và bạn có thể làm điều gì đó với nó. Vì vậy, trong trường hợp của pset8, chúng tôi hiển thị nó như là một danh sách. Fail là có được một chức năng được gọi là nếu yêu cầu không vì lý do gì. Và trong trường hợp của pset8, chúng tôi chỉ console.log nó. Bất kỳ câu hỏi về điều đó? Yeah. Đung chúng ta có thể chỉ cần sử dụng chức năng theta thay vì chức năng, textStatus, jqHXR. HANNAH Blumberg: Chắc chắn rồi. Vì vậy, yeah, tôi nghĩ rằng trong pset, chúng ta chỉ thấy chức năng dữ liệu. Vì vậy, nó chỉ là the-- có, OK. Đó là những gì chúng ta đã thấy trong các pset. Điều đó hoàn toàn tốt. Đây chỉ là nếu bạn muốn để kéo ra thêm thông tin, đó là những điều mà bạn có thể nhận được từ .getJSON. Câu hỏi hay. Bất cứ điều gì khác? Yeah. Đung vậy getJSON là Ajax? HANNAH Blumberg: OK. Vì vậy, đây là các loại phần khó khăn. Đây là một chức năng jQuery cho phép bạn để làm cuộc gọi không đồng bộ. Và những cuộc gọi không đồng bộ, đó là những gì chúng ta đã được đề cập đến như Ajax. Yeah. Điều đó đã cho tôi một thời gian rất dài để kéo nhau khi tôi còn là sinh viên. Đung Bạn có thể nói rằng một lần nữa? HANNAH Blumberg: Yeah. Tôi có thể nói rằng một lần nữa? Chức năng này .getJSON, nó là một chức năng jQuery. Và nó sẽ làm cho một cuộc gọi không đồng bộ. Và những cuộc gọi không đồng bộ, chúng tôi đã được đề cập đến những người như Ajax. Bất kỳ câu hỏi khác? Chúng tôi chỉ có một vài phút còn lại. Và Maria đi quấn lên với an ninh và sau đó chúng ta sẽ được chỉ là về thực hiện. MARIA ZLATKOVA: Awesome, OK. Vì vậy, đây is-- chỉ mất một vài giây để nhìn qua này. Và đây không phải là một cái gì đó thực sự tuyệt vời. Và ai đó có thể cho tôi biết tại sao? Điều gì đang xảy ra trong foo và có thể có thể có khả năng dẫn đến một cái gì đó xấu, và điều đó được gọi là? Yeah. Đung Nếu đối số đó là thông qua tại là hơn 12 ký tự, nó có thể tràn ra ngoài. MARIA ZLATKOVA: Đúng vậy. Hoàn hảo. Đó là những gì được gọi là? Bạn chỉ cần đề cập đến nó. Đung Buffer overflow. MARIA ZLATKOVA: Yup, tràn bộ đệm. Vì vậy, đây là một cái gì đó mà chúng ta tham khảo như tràn bộ đệm. Và chúng ta thấy rằng bên trong của foo, chúng tôi đã xác định đệm của chúng tôi, c, với kích thước là 12. Tuy nhiên, trong chính chúng ta làm không kiểm tra trong bất kỳ cách nào cả liệu argv1-- để là số thứ hai. Chúng tôi không kiểm tra xem kích thước của nó là thích hợp. Vì vậy, nếu chúng ta có một người sử dụng đặc biệt là độc hại người đặt trong một số lập luận rằng đã còn hơn 12, và sau đó có khả năng vượt ra ngoài giới hạn của đó lập luận, đã có một số mã thực thi rằng ông đã cố gắng để làm một cái gì đó xấu với nó; sau đó điều này, điều gì sẽ xảy ra, sẽ ghi đè lên sự trở lại địa chỉ của hàm foo, gây ra các chức năng để khi trở về để thực thi mã đó. Và sau đó những điều xấu có thể xảy ra. Liệu điều này có ý nghĩa với tất cả mọi người? Và làm thế nào chúng ta có thể bảo vệ chống lại điều này? Bất kỳ đề xuất? Về cơ bản, bên trong của có khả năng foo, làm thế nào chúng ta có thể kiểm tra để đảm bảo rằng không thể xảy ra? Đung Nếu kích thước 12 được vượt quá, bạn sẽ cấp phát bộ nhớ bổ sung? MARIA ZLATKOVA: Đề xuất là, phân bổ bộ nhớ bổ sung kích thước vượt quá. Trên thực tế, chúng ta có thể làm điều gì đó rất nhiều đơn giản hơn đó là tốt. Chúng tôi chỉ có thể có được độ dài chuỗi của các đối số được nhập, kiểm tra nếu đó là ít hơn hoặc bằng 12-- đó là những gì chúng tôi muốn nó là bởi vì chúng tôi không muốn nó vượt quá giới hạn của bộ đệm của chúng tôi. Và sau đó, nếu không, chúng tôi có thể làm việc với các đối số. Và sau đó nếu có, chúng tôi thực sự muốn để Yello tiềm năng ở người sử dụng. Nhưng điều này là làm thế nào chúng tôi sẽ làm điều đó. Vâng. Đung thể bạn giải thích memcpy nhanh chóng thực? MARIA ZLATKOVA: Oh, xin lỗi. Vâng. Memcpy mất bất cứ điều gì is-- xin lỗi, OK. Memcpy mất bất cứ điều gì là trong quán bar, bất cứ điều gì được thông qua lên foo như các đối số dòng lệnh. Vì vậy, nó sẽ mất argv1. Argv1 được gọi là thanh ở đây. Vì vậy, nó sẽ mất thanh và nó sẽ sao chép nó vào c. Đung OK. MARIA ZLATKOVA: Và nó sẽ copy-- đối số thứ ba chỉ đề cập đến bao nhiêu nó sẽ sao chép vào c. Đung Ah. Vì vậy, cái này sao chép tất cả của nó sau đó. MARIA ZLATKOVA: Yeah, nó sao chép tất cả của nó. Vâng. Đầu tiên, chúng tôi đảm bảo thanh không phải là bằng vô giá trị bởi vì nó là một con trỏ. Sau đó chúng ta có được độ dài chuỗi các quán bar. Chúng tôi đảm bảo rằng nó nhỏ hơn hoặc bằng 12. Và sau đó bởi vì chúng tôi đã thực hiện chắc chắn, chúng ta có thể thực sự memcpy và chắc chắn rằng đó là OK. Bất kỳ câu hỏi? Thật tuyệt. Tôi có hai câu hỏi đúng hay sai. Bất cứ ai có thể cho tôi biết ngay nếu đây là đúng hay sai? Có, đó là sai. Chính xác. Cả hai người họ đều sai lầm. Vì vậy, bằng cách sử dụng một mật khẩu duy nhất là ý tưởng không bao giờ thực sự tốt bởi vì nếu ai đó biết mật khẩu của bạn, họ có thể chỉ truy cập vào tất cả các tài khoản khác của bạn. Và sau đó các biểu tượng không phải làm gì để đảm bảo an ninh. Chúng tôi thường phải tìm kiếm HTTPS thay vì HTTP và các URL. Và một số loại khác của các cuộc tấn công mà chúng tôi đã đề cập, rằng David đã đề cập trong thuyết trình, các cuộc tấn công SQL injection. Chúng ta đã thấy rằng nếu chúng ta don't-- sự Chức năng truy vấn CS50 làm cho chắc chắn rằng SQL tấn công tiêm không thể xảy ra. Nhưng nếu chúng ta không sử dụng CS50, quote, unquote "trong truy vấn," chúng ta sẽ phải đảm bảo rằng các người sử dụng đầu vào không phải là thực sự một số SQL truy vấn mà sẽ gây ra tất cả bảng của chúng tôi để được giảm hoặc một cái gì đó xấu xảy ra với cơ sở dữ liệu của chúng tôi. Phiên cướp là một loại tấn công điều đó xảy ra khi một số xấu người sử dụng một số phiên của nạn nhân ID để truy cập các thông tin đăng nhập. Vì vậy, một ví dụ rất nhỏ trong số đó là như thế nào nếu chúng ta có một máy tính công cộng, sau đó người xấu đó đăng nhập và sau đó họ có cookie được lưu lại. Và cookie không thay đổi cho phiên. Sau đó, chúng tôi đã là nạn nhân đi và sau đó đăng nhập vào trang web. Các cookie không thay đổi cho một buổi nào đó. Và sau đó các nạn nhân đăng nhập vào các trang web và sau đó rời khỏi. Và sau đó người người đi lại sau đó có thể vẫn sử dụng ID phiên họp của họ để truy cập thông tin của họ. Vì vậy, đó là một ví dụ về làm thế nào mà có thể xảy ra. Và sau đó tôi sẽ không lo lắng quá nhiều về mã cụ thể hoặc bất cứ điều gì như thế có thể gây ra điều này, nhưng có một số loại ý tưởng gì các biến có liên quan trong việc này là. Và sau đó thao tác tiêu đề dữ liệu là một loại tấn công có David đã nói chuyện về. Và nó chỉ đề cập đến những gì có thể xảy ra khi các phản ứng, các HTTP phản ứng bên trong phần đầu của chúng tôi không được làm vệ sinh đúng cách. Và bất kỳ fields-- ví dụ, nếu một người nào đó sẽ ghi đè lên một trong những tiêu đề giá trị có chứa bất cứ điều gì nhiều hơn những gì họ cần và thực sự contain-- đựng, ví dụ, một 200 Mã trạng thái OK, sau đó họ khả năng có thể làm độc hại điều khi họ không được phép. Nhưng tôi sẽ không lo lắng quá nhiều về mã cụ thể mà có thể gây ra điều này, chỉ là loại hiểu biết thứ cấp cao như thế. Tôi nghĩ rằng đây là tất cả rằng chúng ta phải trang trải. Kinh ngạc. Bất cứ ai có bất cứ câu hỏi nào về trong những điều mà chúng tôi được bảo hiểm? Vâng. Đung vậy, một loại câu hỏi nhiều hơn về hậu cần. Là nội dung chủ yếu tập trung vào những thứ sau bài kiểm tra 1? MARIA ZLATKOVA: Vì vậy, Câu hỏi là, là nội dung tập trung chủ yếu vào những điều sau bài kiểm tra 1? Vì vậy, trọng tâm là về sau đố 1, ngoại trừ rằng chúng ta cần phải tập trung vào những thứ trong pset5 và rất nhiều các cấu trúc dữ liệu mà chúng tôi được bảo hiểm. Và chúng ta không thể nói rằng chúng tôi có thể bỏ qua bất cứ điều gì trước khi mà bởi vì nó được xây dựng trên nó là tốt. Vì vậy, tập trung vào đó, cộng với chất liệu pset5 như bao gồm cả danh sách liên kết, ngăn xếp, hàng đợi, và tất cả mọi thứ Hannah đã đi qua. HANNAH Blumberg: Đúng vậy. Vâng, chúng tôi đã đi qua tất cả những thứ C ngay từ đầu rất nhanh chóng. Nhưng hãy chắc chắn để xem xét đó. Trở lại và xem các câu hỏi 0 bình luận. Một vài ghi chú về hậu cần nhiều hơn, chỉ khi chúng ta có sự chú ý của bạn. Chúng tôi sẽ có những giờ văn phòng cả ngày thứ hai và thứ ba đêm. Họ đang đi để được ở MD 119. Đây là tất cả trên trang web, vì vậy nếu bạn không nghe thấy nó, không phải lo lắng. MARIA ZLATKOVA: 8:30 đến 11:00. HANNAH Blumberg: Yeah 8:30 đến 11:00. Chúng tôi sẽ ở đó. Chúng tôi sẽ có mặt để trả lời các câu hỏi. Đó là chill đẹp và vui vẻ. Các bạn có thể yêu cầu bất kỳ câu hỏi mà bạn có trên bài kiểm tra 1. Và đố 1 là trên Thứ tư, do may mắn. Nếu bạn có bất kỳ câu hỏi, có thể đến nói chuyện với chúng tôi lên ở đây một ngày-một. Mát. Cám ơn rất nhiều. MARIA ZLATKOVA: Cảm ơn rất nhiều, guys. Đung Yay. [Vỗ tay]