[00:00:02] [MUSIC CHƠI] HANNAH: Hi, tất cả mọi người. Cảm ơn các bạn rất nhiều vì đã đến ra trong thời tiết kinh tởm cho một bài kiểm tra xem xét phiên. Như các bạn biết, đố vui một là ngày thứ Tư này. Vì vậy, chúng ta sẽ đi thông qua một loạt các chủ đề. Davin: Hey, tôi có thể nói một cái gì đó thật nhanh chóng? HANNAH: Yeah, Davin của đi để nói một cái gì đó thật nhanh. Davin: Xin lỗi. Chỉ cần thực sự nhanh chóng, nếu bạn có thắc mắc về các bài kiểm tra, bạn có thể đi trực tuyến. Tới năm 2014 đố một, về các bài kiểm tra. Nó có hậu về nơi để đi, khi nào đi. Nếu bạn đang học đồng thời, chúng tôi sẽ có một bài kiểm tra trang điểm lúc 5:30. Hoặc nếu bạn đã gửi cho tôi một vấn đề, bạn có một số vấn đề khác. Nhưng 05:30 là make-up thời gian vào thứ Tư. Nhưng nếu bạn có câu hỏi, câu hỏi chung chung, trực tuyến có tất cả các dịch vụ hậu cần. Vì vậy, kiểm tra đầu tiên. [00:00:47] HANNAH: Awesome. Vì vậy, đây là danh sách lớn của các chủ đề rằng chúng ta sẽ đi qua ngày hôm nay. Tôi sẽ bao gồm tất cả các C công cụ, đó là cột đầu tiên. Vì vậy, những thứ mà chúng tôi C bao phủ sau đố zero. Bắt đầu với một danh sách liên kết, trong đó bao gồm con trỏ. [00:01:05] Được rồi, vì vậy chúng tôi thấy điều này trong phiên xem xét cuối cùng, do đó, tôi sẽ đi qua đây là một chút nhanh hơn. Chỉ cần giơ tay của bạn nếu bạn muốn tôi làm chậm lại hoặc giải quyết một cái gì đó hơn nữa. Nhưng chúng tôi sử dụng danh sách liên kết bởi vì chúng tôi bắt đầu bằng C với mảng. Và mảng là rất lớn, nhưng vấn đề là họ có một kích thước cố định. Danh sách liên kết cho phép chúng ta tạo ra động có kích thước cấu trúc dữ liệu. [00:01:28] Và chúng tôi có hoạt động cơ bản của chúng tôi, chèn, xóa, và tìm kiếm. Và chúng ta có thể làm được chèn vào trường hợp tồi tệ nhất thời gian cố định nếu chúng ta chỉ cần đặt nó ở đầu. Xóa và tìm kiếm, tồi tệ nhất trường hợp lớn oh của n lần. Vì vậy, một lần nữa, chỉ để lật thông qua các hình ảnh, Tôi biết chúng tôi đã nhìn thấy những lần trước, nhưng chúng tôi muốn theo dõi các danh sách liên kết của chúng tôi bằng cách theo dõi các đầu của danh sách liên kết của chúng tôi. Bởi vì chúng ta biết rằng mỗi một trong các nút của chúng tôi là chỉ cần đi để trỏ đến nút tiếp theo trong danh sách liên kết của chúng tôi. [00:01:58] Vì vậy, đó là cách chúng tôi tiếp tục theo dõi. Mặc dù đây không phải là miếng liên tục của bộ nhớ, chúng ta có thể tìm thấy chúng bằng cách chỉ sau các mũi tên khác nhau. Dưới đây là cấu trúc của chúng tôi cho một nút danh sách liên kết. Chúng tôi đã nhìn thấy lần cuối cùng này. Chúng tôi có nút struct của chúng tôi. Và nó có hai thuộc tính. Số một, thực tế giá trị, chúng tôi muốn lưu trữ. Trong trường hợp này, nó là một số nguyên. Nó có thể là một chuỗi, nó có thể là một char, bất cứ điều gì bạn muốn. Và sau đó, chúng ta phải theo dõi nút tiếp theo trong danh sách liên kết của chúng tôi. Vì vậy, đó sẽ là một con trỏ đến nút tiếp theo. Nếu bạn chỉ cần làm tìm kiếm, như tôi đã nói, bạn phải làm theo các mũi tên của bạn xuống. Chèn, bạn sẽ theo dõi các nơi còn lại của danh sách của bạn. Và bạn muốn chuyển hướng đầu để trỏ đến phần tử mới của chúng tôi, mà trong trường hợp này là một, và sau đó người ta sẽ điểm để phần còn lại của danh sách liên kết. Vì vậy, một lần nữa, tôi biết đây là một chút bit của một bài kiểm tra lặp lại từ số không. Vì vậy, chúng tôi phải rất cẩn thận về thứ tự mà chúng ta làm những pointings vì vậy chúng tôi không mất theo dõi của mặt sau của danh sách. OK, bất kỳ câu hỏi với chỉ đơn lẻ danh sách liên kết? Awesome, OK, mát mẻ. [00:03:06] Vì vậy, bây giờ, chúng ta sẽ đi vào một cái gì đó chỉ hơi phức tạp hơn, danh sách liên kết kép. Vì vậy, ngoài việc giữ theo dõi của nút tiếp theo, chúng tôi cũng muốn theo dõi các nút trước đó. Và điều này cho phép chúng ta, nếu chúng tôi tại một số điểm trong danh sách liên kết của chúng tôi, không chỉ đi về phía trước, nhưng cũng lặp ngược. Bởi vì như chúng ta đã thấy trong một danh sách đơn lẻ liên kết, nếu chúng ta ở một số nút, và tất cả của một đột ngột, chúng tôi quyết định, thực sự, tôi muốn đến nút ngay trước tôi, bạn phải đi tất cả đường trở về đầu và lặp thông qua cho đến khi bạn tìm thấy nút mà bạn đang tìm kiếm. [00:03:35] Vì vậy, điều này làm cho mọi thứ dễ dàng hơn một chút là chúng tôi cố gắng để lặp thông qua danh sách liên kết của chúng tôi. Nhưng nó đòi hỏi chúng ta phải theo dõi của một nhiều con trỏ, vì vậy một nút sao hơn. Được rồi, vì vậy ở đây đến phần thú vị. Chúng ta sẽ thực hành thực hiện loại bỏ các danh sách liên kết kép. Vì vậy, đây là một cái gì đó game hoàn toàn công bằng đối với các bài kiểm tra. Nó cho thấy trên các câu đố trong quá khứ. Vì vậy, chắc chắn được chuẩn bị để mã một chút trong C. Đừng quên rằng với tất cả niềm vui này PHP và JavaScript, chúng ta vẫn phải nhớ C. Vì vậy, để làm bàn chải lên trên đó nếu bạn đang cảm thấy gỉ. [00:04:12] Được rồi, chúng ta hãy xem nếu chúng ta có thể làm điều này. OK, mát mẻ. Vì vậy, chúng ta sẽ cố gắng để chỉnh sửa ngay tại đây, và hy vọng điều này diễn ra như kế hoạch. Được rồi, không ai muốn cho tôi một đề nghị như thế nào tôi nên bắt đầu? Các giả định chỉ có tôi là ra là tôi đã có một cấu trúc được định nghĩa, một trong tôi thấy trên trang cuối cùng, trên slide cuối cùng. Và tôi đang lưu trữ đầu của liên kết của tôi danh sách trong một số con trỏ được gọi là danh sách. Có ai muốn để cho tôi bắt đầu? [00:04:42] Đung bạn có thể tạo ra một mới nút để gọi thông qua danh sách? [00:04:45] HANNAH: Awesome, vì vậy chúng ta sẽ tạo ra một nút mới để thu thập thông qua danh sách. Tôi thích điều đó. Tôi sẽ chỉ gọi nó là con trỏ nếu đó là OK. Và nơi đó nên ban đầu bắt đầu? [00:04:57] Đung Có lẽ tại người đứng đầu danh sách. HANNAH: Beautiful. Chúng tôi muốn bắt đầu từ đầu, mà Tôi nói là sẽ được lưu trữ trong danh sách. Awesome. Cho đến nay, như vậy tốt. Và bây giờ, mục tiêu của chúng tôi là duyệt qua danh sách các cho đến khi chúng tôi tìm thấy các nút với giá trị n mà chúng ta muốn xóa. OK? [00:05:13] Vì vậy, bây giờ là một phần nơi chúng tôi muốn lặp qua. Bất cứ ai có thể đề nghị một cách để lặp qua? [00:05:19] Đung Một vòng lặp. [00:05:20] HANNAH: Một vòng lặp. Tôi yêu nó. Cụ thể, chúng ta có thể thử một vòng lặp while. OK, và chúng tôi biết rằng chúng tôi đã đạt đến cuối danh sách của chúng tôi khi những gì? Đung Khi con trỏ là null. HANNAH: Khi con trỏ là null. Đẹp, tôi thích nó. OK, mát mẻ. Vì vậy, xin lỗi nếu cú ​​đúp bounding của tôi là loại rơi khỏi màn hình. Chúng tôi đã mang nó trở lại. OK, mát mẻ. Cái gì tiếp theo? [00:05:48] Vì vậy, chúng tôi biết chúng tôi muốn xóa các nút có giá trị n. Vì vậy, chúng ta hãy tìm những trường hợp chúng tôi thực sự tìm thấy nút của chúng tôi. Vì vậy, làm thế nào tôi sẽ kiểm tra xem? Tôi chỉ muốn nói nếu con trỏ, và sau đó nếu tôi muốn nhận được các giá trị trên con trỏ, Tôi chỉ mũi tên n, bằng n, các tham số mà chúng tôi đã cung cấp cho chức năng này, nút mà chúng ta muốn thực sự xóa. Bất kỳ câu hỏi cho đến đây? Được rồi. OK, vì vậy bây giờ chúng ta hãy vẽ một bức tranh nhanh trên bảng để hình dung này. [00:06:24] Vì vậy, chúng ta hãy nói có nút đáng yêu của chúng tôi. Và nó có một giá trị, tôi sẽ chỉ nói bốn. Và nó chỉ đến sau nút trong danh sách liên kết của chúng tôi. Và không có gì trước khi nó. Vì vậy, chúng ta có trước đây của chúng tôi chỉ để không có gì. Trong trường hợp này, chúng tôi chỉ về phía sau. OK, chỉ cần thiết lập của tôi danh sách liên kết ở đây. Và chúng tôi có một danh sách mà điểm để cấu trúc này để bắt đầu với. Tôi sẽ vẽ một nhiều hơn cho vì lợi ích của sự hoàn chỉnh. OK. Tôi sẽ chỉ về phía trước này. Và tôi sẽ chỉ có một trở lại. Rất tiếc, xin lỗi. Yeah, có điều này ngược. Làm điều đó một lần nữa. OK, có chúng tôi đi. Được rồi, đã nhận nó. OK, đây là hình ảnh của chúng tôi. [00:07:21] OK, vì vậy chúng tôi muốn xem xét hai trường hợp. Trường hợp đầu tiên là nếu nút, chúng tôi muốn xóa là lúc bắt đầu của danh sách của chúng tôi. Và sau đó, trường hợp thứ hai mà chúng tôi muốn để xem xét là nếu nó bất cứ nơi nào khác. Tôi hiểu rằng đây là một hoàn toàn lộn xộn vẽ với tất cả xóa của tôi, nhưng hy vọng chúng tôi sẽ cố gắng thực hiện điều này rõ ràng có một số mã. [00:07:40] OK, vì vậy chúng ta hãy che trường hợp nơi mà chúng tôi tìm thấy nút của chúng tôi, và nó ở rất bắt đầu của danh sách liên kết của chúng tôi. Bất cứ ai cho tôi một gợi ý ở đây là những gì Tôi nên làm gì để thực sự loại bỏ nút của chúng tôi? Đó là một chút khó khăn. OK? [00:07:56] Đung Bạn có để có những nút đó sẽ được trước khi nó và làm cho nó trỏ đến một trong đó sẽ là sau khi nó, và có những nút đó sẽ là sau khi nó và làm cho nó trỏ đến nút trước đó. HANNAH: Chính xác. OK, vì vậy đây là trường hợp where-- chúng ta có hai trường hợp. Chúng tôi có các trường hợp nút mà chúng tôi đang tìm kiếm là mặt trước của danh sách. OK, và sau đó là trường hợp mà bạn được mô tả là không, phải không? Đó là một nơi khác trong danh sách. Vì vậy, bạn nói, chúng ta cần phải nhìn vào các nút trước đó, và làm cho các nút trước trỏ đến nút tiếp theo. Vì vậy, chúng ta hãy nói chúng tôi cố gắng để đưa ra năm trong bản vẽ rất lộn xộn của tôi ở đây. Chúng tôi muốn chắc chắn rằng Bốn giờ chỉ đến sáu. Bốn điểm của cạnh sáu. Và sáu của điểm trước đến bốn. Đó là mục tiêu của chúng tôi ở đây, phải không? Đây là những gì tôi nghĩ rằng bạn vừa nói trên đó. [00:08:56] OK, vì vậy hãy nhận rằng phần đầu tiên. Hãy làm việc có con trỏ trước trước. Vì vậy, nên chỉ bốn cạnh của những gì? Chính xác, trong trường hợp này, sáu. Vì vậy, chúng ta nên nói con trỏ, tiếp theo. OK? Được rồi. Vì vậy, hãy để nhân thoát khỏi hình ảnh xấu xí này và cố gắng vẽ một đẹp hơn một chút. Chúng tôi có đầu danh sách của chúng tôi ở đây. Và chỉ đến nút đầu tiên trong danh sách liên kết của chúng tôi, mà chúng tôi đã nói là bốn. Đây là nút thứ hai của chúng tôi, năm. Và nút thứ ba của chúng tôi, sáu. Chỉ cần cố gắng để vẽ chính xác như nhau hình ảnh, chỉ cần một chút sạch hơn. OK, vì vậy bốn nhân tiếp theo ban đầu chỉ đến năm. Năm của điểm tiếp theo đến sáu. Sáu điểm trước đến năm. Và năm của điểm trước đến bốn. Đẹp hơn rất nhiều! OK, mát mẻ. [00:10:04] Vì vậy, bây giờ, những gì chúng tôi đã làm chỉ ở đây, dòng mã này, trong đó nói rằng con trỏ trước tiếp theo, do đó có nghĩa là gì? Điều đó có nghĩa là nếu chúng ta nhìn vào năm, đi đến nút trước, và nó tiếp theo nên bây giờ điểm đến năm tiếp theo của. Vì vậy, về cơ bản, những gì mà là làm được đó là xóa mũi tên này và làm cho nó bỏ qua ngay năm. Có phải đó là rõ ràng? Tôi biết rằng có thể có một chút sơ sài. Tôi thấy một số đề cử đầu. Đó là tốt. OK, mát mẻ. Bây giờ, bước tiếp theo là gì? [00:10:39] Tôi đã cài lại sau. Bây giờ, mà mũi tên khác tôi cần phải thay đổi? Cái này đây. Sáu trước đó. Chúng tôi không muốn sáu của trước để trỏ đến năm nữa. Chúng tôi muốn nó để trỏ đến bốn. Liệu hình ảnh mà có ý nghĩa? Vì vậy, bây giờ chúng ta có thể thực sự thực hiện năm ra. Vì vậy, hãy mảnh đó. Tôi nên làm gì trước khi tôi thiết lập lại sáu của trước đến bốn? Bất kỳ ý tưởng đó? [00:11:14] Đung Free nút giữa họ bằng cách thiết lập nó thành vô giá trị? HANNAH: Cool. Chắc chắn, mục tiêu cuối cùng của chúng tôi là sẽ được trả tự do cho các node. Vì vậy, chúng ta có thể làm điều đó ngay tại đây. Miễn con trỏ. Tuyệt đối. Nhưng ngay cả trước đó, hãy just-- đúng mục tiêu của chúng tôi ở đây là để thiết lập con trỏ tiếp theo trước bằng con trỏ trước. Tôi biết điều này là nhận được bao phủ lên. OK, chúng ta hãy take-- mát. Tất cả mọi người có thể nhìn thấy dòng dưới này? Hoặc là nó siêu nhỏ? [00:11:50] Vì vậy, trước khi chúng ta thực hiện dòng này ở đây, chúng tôi muốn để đảm bảo rằng con trỏ tới không phải là null. Bởi vì nếu con trỏ tiếp theo là null, những loại lỗi Tôi sẽ nhận được khi tôi cố gắng tham khảo một con trỏ null? Đung Seg lỗi. HANNAH: Một lỗi seg, xinh đẹp. OK, vì vậy nếu đó là không null, sau đó chúng ta có thể thiết lập lại. Và chúng tôi có sáu điểm lại đến bốn. Câu hỏi cho đến thời điểm này? Có? [00:12:17] Đung Trong lần đầu tiên của bạn nếu tuyên bố, đã làm bạn có nghĩa là để có mũi tên tiếp theo, hay [không nghe được]? HANNAH: Tôi có nghĩa là con trỏ mũi tên n. Vì vậy, về cơ bản, những gì tôi đang cố gắng để làm được nói, các nút hiện tại mà tôi đang iterating trên, các nút hiện tại mà Tôi đang nhìn vào, tôi đang lưu trữ trong các con trỏ. Và tôi muốn biết con trỏ của giá trị, mà trong trường hợp này là n. Và tôi muốn xem, là các nút tôi đang tìm cho nút tôi là nhằm để xóa? Vì vậy, đó là lý do tại sao chúng tôi có ở đây trỏ n. [00:12:47] Đung Vì vậy, các mũi tên đi để n, bạn thiết lập giá trị và lưu trữ nó trong một nút gọi là n? [00:12:55] HANNAH: Vì vậy, nó giống như nếu tôi đi qua danh sách liên kết này và chỉ đến năm. Nếu tôi muốn có được giá trị đó, nếu Tôi muốn nhận được rằng số lượng, 5, Tôi phải làm con trỏ mũi tên n. Mát mẻ? Yeah. [00:13:07] Đung là n tên của biến? HANNAH: Yes. Vì vậy, nếu chúng ta lật lại một slide, n là tên các giá trị bên trong của nút trong danh sách liên kết của chúng tôi. Và tôi biết nó có thể có được một chút chút bối rối bởi vì chúng tôi cũng đang kêu gọi các điều mà chúng ta muốn xóa n. Vì vậy, đó là nơi mà một dòng đến từ. Yeah? [00:13:27] Đung Những gì bạn có [Không nghe thấy] làm thế nào họ làm việc? Một con trỏ [Không nghe thấy]? [00:13:35] HANNAH: Chắc chắn. Bạn đang nói about-- mà dòng? Đung Dòng cuối cùng [không nghe được]. [00:13:44] HANNAH: Chắc chắn rồi, OK. Vì vậy, chúng ta hãy nhìn vào bức tranh trong Để cố gắng để giải thích điều này. Tôi xin lỗi, cho camera, câu hỏi chúng ta có thể giải thích cho con trỏ mũi tên con trỏ tới trước. OK, vì vậy chúng ta hãy nói rằng chúng ta đang ở năm và mục tiêu của chúng tôi là để xóa năm. Vì vậy, con trỏ tới, mà trong số này Ba nút nào đó cho chúng ta? Điều đó mang lại cho chúng tôi đến nút thứ sáu, phải không? [00:14:10] OK, vì vậy bây giờ chúng tôi đang yêu cầu cho trước của sáu. OK? Và chúng tôi đang đặt này được bằng bốn, trong đó xảy ra là năm của trước đó. Tôi biết, đó là siêu khó để theo dõi. Tôi thực sự khuyên bạn vẽ hình ảnh nếu bạn nhận được một câu hỏi như thế này. Có? [00:14:30] Đung là lý do mà chúng ta không có một [Không nghe thấy]? [00:14:37] HANNAH: Chính xác. Vì vậy, câu hỏi là, tại sao chúng ta không cần phải kiểm tra ở đây? Tại sao chúng ta không cần phải kiểm tra xem con trỏ trước đó không phải là bằng vô giá trị? Và đó là bởi vì chúng tôi đã đã tách ra trường hợp nếu của con trỏ lúc bắt đầu. Câu hỏi rất hay. Bất cứ điều gì khác về điều này? OK, mát mẻ. Vì vậy, hãy hoàn thành nó. Chúng tôi gần như ở đó. [00:14:59] Vì vậy, những gì nếu nó là ở đầu? Điều gì nếu thay vì cố gắng để xóa năm, chúng tôi thực sự muốn xóa bốn? Những gì tôi sẽ phải làm gì? Vâng, tôi muốn đặt lại đầu tôi với những gì? Shout nó ra? Đung Người sau nó. HANNAH: Beautiful. OK, vì vậy chúng tôi muốn liệt kê được chỉ để bất cứ điều gì con trỏ nút tiếp theo của chúng tôi là. Tốt. Và để tăng tính đầy đủ của vì lợi ích, chúng tôi sẽ muốn kiểm tra rằng miễn là danh sách của chúng tôi không phải là vô giá trị, miễn là danh sách của chúng tôi không phải là trống rỗng, sau đó chúng tôi muốn thiết lập bình đẳng trước của chúng tôi để null. Câu hỏi cho đến nay? Một bước đi from--? [00:15:53] Đung nó sẽ được nếu danh sách không bằng null? [00:15:55] HANNAH: Vâng, bạn đã hoàn toàn đúng. Tôi rất xin lỗi. Là danh sách không bằng null. Awesome. Đang cố gắng để mang lại điều này trên tất cả các màn hình. Nó loại rơi ra. Xin lỗi, guys. Và cuối cùng nhưng không kém, tất cả chúng ta phải làm là trả lại. OK. Đó là nhồi nhét rất nhiều trong thực sự nhanh chóng. Mất một giây để xem qua này. Cho tôi biết nếu bạn có bất kỳ câu hỏi. Yeah? [00:16:20] Đung Nếu danh sách là tại đầu, then-- chờ, nevermind. [00:16:26] HANNAH: OK, tốt. Vì vậy, đây là danh sách nếu là ở phần đầu, chúng tôi loại bỏ nó vào bất cứ chúng tôi đưa vào. Yeah? [00:16:31] Đung bạn có thể giải thích if đầu tiên tuyên bố một lần nữa? Nếu con trỏ đến n bằng n? HANNAH: Chắc chắn. Vì vậy, mục tiêu của chúng ta về toàn bộ chức năng này để xóa các node có giá trị n. Vì vậy, nếu chúng ta thấy, như chúng tôi lặp lại thông qua danh sách của chúng tôi, các nút có giá trị n, đó là một trong những chúng ta muốn xóa. Vì vậy, tất cả các xóa xảy ra bên trong là lớn nếu tuyên bố. Điều đó có ý nghĩa? Cool. Yeah? [00:16:59] Đung Có lẽ bạn chỉ có thể xem nó, nhưng không bạn cũng cần một dòng để di chuyển qua danh sách? HANNAH: Awesome. Hãy mang lại điều này một chút, và chúng tôi sẽ ném mà ngay ở phía dưới. Có lẽ ban sẽ đã là một ý tưởng tốt hơn một chút. Vì vậy, làm thế nào tôi sẽ di chuyển con trỏ về phía trước? [00:17:17] Đung Pointer bằng con trỏ cộng với một. [00:17:20] HANNAH: Beautiful. Vì vậy, cho phép chúng tôi tiếp tục iterating qua. OK. Đung sẽ không có được một người nào khác? HANNAH: Một lần nữa? Đung sẽ không có được một người nào khác sau khi cũ lớn nếu tuyên bố [Không nghe thấy]? HANNAH: Phần nào? Tôi xin lỗi. [00:17:38] Đung Các traversal, nên không có được một người nào khác? HANNAH: Bạn hoàn toàn có thể có một người nào khác. Bởi vì tôi có quyền trở lại ở đó, bạn không cần một người nào khác. Nhưng yeah, câu hỏi hay. OK, yes? Đung chúng ta có thể nghĩ về con trỏ đó là di chuyển qua danh sách như tham gia vào các giá trị của mỗi nút trong danh sách? Hoặc chúng ta nên nghĩ về nó như là loại bên ngoài vào danh sách? [00:18:00] HANNAH: Hoặc là một trong là tốt, tôi nghĩ. Cách tôi tưởng tượng nó là Tôi nói, OK, tôi trỏ. Và đây là tôi. Đây là bàn tay của tôi. Tôi sẽ chỉ ra sự khác nhau những điều mà tôi muốn lặp qua. Đầu tiên, tôi sẽ chỉ cho người đứng đầu danh sách. Và nói với tôi rằng tôi là sẽ chỉ một đến bốn. Và vì vậy tôi, là người bên ngoài vào danh sách, Tôi có thể đến tất cả các yếu tố này. Vì vậy, tôi nghĩ mình là con trỏ. Đung Vì vậy, khi bạn xóa một trong những yếu tố, bạn xóa chính mình, do đó, để nói chuyện. HANNAH: Chính xác. Vì vậy, bạn xóa các điều bạn đang trỏ đến. Vì vậy, trong ví dụ mà chúng ta đã thấy nơi chúng tôi cố gắng để xóa năm, khi tôi chỉ đến năm, Tôi muốn xóa điều tôi đang trỏ đến. Chính xác. Có? Đung chúng tôi đã đưa về chăm sóc của Trường hợp n không có trong danh sách? HANNAH: Nếu n không có trong danh sách? Tất cả những gì sẽ xảy ra là bạn đi lặp lại qua và lặp thông qua, và sau đó, bạn sẽ để có được con trỏ là null, và sau đó bạn sẽ được thực hiện. [00:18:48] Đung Vì vậy, chúng ta có để trở về bất cứ điều gì? HANNAH: Chúng tôi có thể. Cách mà nếu được xác định này chức năng, tôi chỉ nói rằng nó sẽ trả về làm mất hiệu lực bất kể. Nhưng bạn có thể có một cái gì đó như trả lại một số nguyên, và nó có trở lại âm 1 nếu nó không thành công. Một cái gì đó như thế. Câu hỏi with-- có? Đung [Không nghe thấy]? HANNAH: Xin lỗi? Đung [Không nghe thấy]? HANNAH: Chắc chắn. Vì vậy, đó là một khi chúng ta đã actual-- thực hiện tất cả các công việc này di chuyển tất cả những mũi tên xung quanh, toàn bộ của chúng tôi Mục đích là để thoát khỏi các nút mà chúng ta đang tìm kiếm. Vì vậy, trong trường hợp này, giải phóng con trỏ, nếu tôi chỉ đến năm, nó giống như xóa nút giữa này. Đó là một phần con trỏ miễn phí. Điều đó có ý nghĩa? [00:19:29] Đung vậy, thậm chí còn nghĩ bạn không [Không nghe thấy]? [00:19:31] HANNAH: Vì vậy, chúng tôi giả định ngay từ đầu chúng tôi đã có một số danh sách đã có already-- họ đã đặt này lại với nhau. Vì vậy, để xây dựng này danh sách, họ chắc hẳn [không nghe được]. Cool. Bất cứ điều gì khác với điều này? Có? [00:19:46] Đung gì nếu danh sách không bằng dòng null? [Không nghe thấy]? HANNAH: Ngay ở đây? Đung Yeah. HANNAH: OK, tất cả tôi đang làm là tôi chỉ đảm bảo mà trước khi tôi cố gắng để tới đích của danh sách, trước khi tôi cố gắng để truy cập trước đó, Tôi muốn chắc chắn rằng nó không phải null để tôi không nhận được một lỗi seg. Cool. [00:20:08] OK, tôi biết điều này là khá rất nhiều để có được thông qua. Vì vậy, slide này sẽ được tạo sẵn cho bạn. Vì vậy, bạn có thể đi qua nó một cách chi tiết hơn. Có? [00:20:17] Đung Tại sao danh sách [Không nghe thấy]? HANNAH: Chắc chắn. Vì vậy, danh sách thực sự chỉ đến yếu tố này ngay tại đây, phần tử đầu tiên trong danh sách. Vì vậy, nó không thể có một trước đó. Có? [00:20:31] Đung Liệu các điểm trỏ đến cùng một địa chỉ trong bộ nhớ? Liệu nó trỏ đến cùng địa chỉ trong bộ nhớ là nút mà nó trỏ tới? [00:20:40] HANNAH: Vâng, nó chỉ đến nút này trong bộ nhớ. [00:20:43] Đung Quyền, do đó khi bạn [Không nghe thấy]? [00:20:47] HANNAH: Trong một ý nghĩa là có. OK. Được rồi, chúng ta hãy di chuyển cùng với điều này. Và nếu bạn có câu hỏi nhiều hơn, thanh xung quanh lúc kết thúc, và chúng ta có thể đi qua nó một lần nữa. OK, mát mẻ. Bây giờ, chúng tôi nhận được để di chuyển trên để băm bảng, cố gắng, và cây, mà bạn có siêu quen thuộc với p-thiết năm, Speller. [00:21:04] Vì vậy, bảng băm chỉ là một mảng với danh sách liên kết đơn lẻ hoặc danh sách liên kết kép sắp tắt của nó. Vì vậy, chúng tôi có một số loại các mảng kết hợp. Và làm thế nào chúng ta biết được những mảng xô để có được vào, chúng tôi sử dụng một hàm băm. Vì vậy, trong trường hợp này, có thể bất cứ ai đoán những gì các hàm băm sẽ được chỉ dựa trên một số của đầu vào và đầu ra? [00:21:31] Đung số thư của bảng chữ cái. HANNAH: Chính xác. Nó chỉ đặt chúng theo thứ tự bảng chữ cái. Mọi thứ bắt đầu với một A được đưa vào nhóm đầu tiên. Tất cả mọi thứ với một B được đưa vào nhóm thứ hai, vv, và vv. Awesome, OK. Và một hàm băm là bất kỳ chức năng mà mất trong một từ và sẽ cho bạn biết những gì xô nó thuộc về. Vì vậy mà mục trong của chúng tôi mảng nó thuộc về. [00:21:55] Vì vậy, mỗi khi tôi cung cấp cho tôi băm chức năng một lời, nó sẽ cho tôi cùng một đặt mỗi lần duy nhất. Vì vậy, nếu chúng ta sử dụng hàm băm từ slide trước nơi chúng tôi đang phân loại theo chữ cái đầu tiên của bảng chữ cái, mỗi khi tôi cung cấp cho tôi hàm băm "quả táo" nó nên luôn luôn cho tôi trở lại 0. Vì vậy, nếu tôi có một quả táo để đưa vào bảng băm của tôi, nếu tôi cung cấp cho "quả táo" để hàm băm của tôi, cần nói, hãy đặt nó trong thùng 0. Nếu tôi đang tìm kiếm một táo trong bảng băm của tôi và tôi nói, nơi sức táo sống, bạn yêu cầu hàm băm của bạn. Và nó nói, đi đến xô 0. Tất cả phải không? Câu hỏi với các chức năng băm? Awesome. [00:22:34] Dưới đây là một chút nhiều hơn giải thích chi tiết của những gì một hàm băm có thể trông như thế nào. Được rồi. Bây giờ, vấn đề với hash chức năng là trong một thế giới lý tưởng, chúng ta sẽ chỉ có một điều trong mỗi nhóm. Nhưng trong thực tế, có không chỉ có một từ bắt đầu với A. Không có chỉ có một từ bắt đầu với B. Vì vậy, trong trường hợp này, nếu chúng tôi đột nhiên nhận được "berry," và chúng tôi muốn đặt nó vào bảng băm của chúng tôi, và chúng ta thấy, oh, không, chuối đã có, những gì chúng ta sẽ làm gì? [00:23:03] Vâng, chúng ta có hai lựa chọn. Các tùy chọn đầu tiên là tuyến tính thăm dò, trong đó chỉ có nghĩa là đi tìm xô trống bên cạnh. Đi tìm mục mảng trống bên cạnh. Và chỉ cần đặt "berry" ở đó. Vì vậy, tôi biết đó là nghĩa vụ đi với chuối trong thùng một. Nhưng chỉ cần đặt nó trong thùng ba, vì xô ba là trống rỗng. Một lựa chọn khác là có thể những gì bạn thực hiện trong p-thiết lập của bạn, nơi bạn có chaining riêng biệt. Vì vậy, mỗi xô của bạn, mỗi phần tử mảng của bạn, không chỉ nắm giữ một lời, nhưng thực sự giữ một con trỏ đến một danh sách các từ. Vì vậy, nếu bạn đã có chuối trong bảng băm của bạn và bạn đột nhiên muốn thêm berry, không có vấn đề. Chỉ cần thêm berry trên để kết thúc, hoặc để Ban đầu, các danh sách liên kết của bạn. OK, tuyệt vời. Câu hỏi với hash bảng trước khi chúng ta đi vào? [00:23:58] Được rồi. Cây xanh và cố gắng. OK, vì vậy đây là một lựa chọn khác thực hiện từ điển. Bạn có thể đã thực hiện một thử. Vì vậy, nó là một loại đặc biệt của cây hoạt động như một bảng băm đa cấp. Vì vậy, bạn sẽ nhìn thấy hình ảnh nơi bạn có một mảng mà chỉ vào một loạt các mảng điểm đó đến một loạt các mảng điểm đó đến một loạt các mảng. Và chúng ta sẽ thấy chính xác những gì mà sẽ như thế nào trên một slide trong tương lai. Và nói chung, một cây là chỉ cần bất kỳ cấu trúc dữ liệu trong đó các dữ liệu là tổ chức trong một số hệ thống phân cấp. Vì vậy mà chúng tôi đã nhìn thấy chúng tôi có một số loại hiểu biết của một cấp cao nhất, một cấp độ tiếp theo, một cấp độ tiếp theo, một cấp độ tiếp theo. Vì vậy, điều này có lẽ rõ ràng nhất với một số ví dụ cụ thể. Vì vậy, đây là cây của chúng tôi. Bạn có thể thấy rằng nó có mức độ đặc biệt rằng chúng ta bắt đầu với nút gốc, một. Và chúng ta có thể đi xuống qua cây của chúng tôi. [00:24:50] Một cây nhị phân là một loại hình cụ thể của cây. Và các đặc điểm kỹ thuật chỉ cho một cây nhị phân là mỗi node có nhiều nhất là hai lá. Vì vậy, bạn sẽ không thấy bất kỳ các nút này có ba hoặc bốn hoặc một số số khác của lá. Và sau đó thậm chí cụ thể hơn là một cây tìm kiếm nhị phân nơi mỗi nút bên trái của nút là sẽ có một giá trị nhỏ hơn. Và mỗi giá trị cho đúng là có được lớn hơn. Vì vậy, nếu bạn thấy 44 là ở gốc của chúng tôi, bên trái, 11, 22, và 33 tất cả đều dưới gốc của chúng tôi. Và bên phải là tất cả số bigger-- 66, 55, và 77. Và tính chất này đúng ở mọi cấp độ của cây. [00:25:37] Vì vậy, khi chúng tôi đi xuống 22, 11, và 33, vẫn còn 11 là nhỏ hơn 22 và 33 lớn hơn 22. Và điều này làm cho nó dễ dàng hơn để tìm kiếm bởi vì nếu chúng ta đang tìm kiếm một số, chúng ta biết chính xác chi nhánh để theo xuống. Vì vậy, điều đó nhắc nhở bạn một chút chút tìm kiếm nhị phân. Yeah? [00:25:56] Đung Vì vậy, khi bạn đang mô tả nhị phân, bạn nói nó có ít nhất hai lá? HANNAH: Mm-hm. Đung nó có thể có ít hơn? HANNAH: Yeah. Vì vậy, chúng ta hãy nói, ví dụ, bạn không có một số chẵn các điều và bạn không thể lấp đầy tất cả các bạn lá, điều đó là tốt nếu có một. OK? Awesome. Bất kỳ câu hỏi khác trên cây? OK. [00:26:16] Trở lại để cố gắng của chúng tôi như tôi đã nói chuyện về một chút trước đó, làm thế nào chúng ta có những mảng đa cấp. Vì vậy, trong trường hợp này, chúng ta bắt đầu ở đầu trang. Và chúng ta có thể làm theo bất kỳ từ nào cho down. Vì vậy, chúng ta hãy nói rằng chúng ta muốn để tìm Turing. Chúng tôi bắt đầu từ T, nó xuống đất để một mảng chứa U, và làm theo nó xuống cho đến khi chúng tôi đạt đồng bằng này ít mà cho chúng ta biết, có, bạn tìm thấy một từ. Rõ ràng về cố gắng? Bất cứ điều gì để đến đó? Có? Đung Liệu các biểu tượng của vùng đồng bằng phải chiếm không gian trong các thử? HANNAH: Yeah, do đó nó không thậm chí nhất thiết cần phải là một đồng bằng. Nhưng chúng ta cần một số cách để nói với chúng tôi computer-- xin lỗi, để chúng ta biết rằng TUR không phải là một từ. Bởi vì chúng ta nói rằng chúng ta không có khái niệm này của một vùng đồng bằng, khái niệm này chúc mừng, bạn tìm thấy một từ, nó sẽ đi qua và lặp T-U-R, và sau đó nói, tuyệt vời, tôi tìm thấy nó! Nó phải là một từ. Nhưng nó thực sự không. Chúng tôi muốn toàn bộ Turing là một từ. Vì vậy, chúng ta phải có một cái gì đó ở Cuối cùng nói, xin chúc mừng, bạn đã tìm được một từ hợp pháp. Đung Vì vậy, nếu bạn đã có như 26 chữ cái trong bảng chữ cái, bạn sẽ thực sự có 27 phím trong thử của bạn? [00:27:24] HANNAH: Awesome, yeah. Vì vậy, trên thực tế, tôi nghĩ rằng sẽ có trên slide tiếp theo. Ta-da! Mà nếu bạn có một nút trong thử của bạn, bạn sẽ có 27 trẻ em thay vì 26. Bất kỳ câu hỏi với điều đó? Yeah? Đung Tại sao cố gắng mất quá nhiều không gian [Không nghe thấy] như bạn đi? Tại sao nó được coi là [Không nghe thấy]? HANNAH: Chắc chắn. Hãy quay trở lại. Câu hỏi đặt ra là, tại sao là cố gắng lớn hơn rất nhiều hơn một cái gì đó giống như một bảng băm. Vì vậy, đối với mỗi cấp độ, thậm chí nếu họ không rút ra ở đây, bạn phải có tất cả 26 ký tự. Và lý do mà bạn không thể nói, oh, nhưng cũng giống như cho Turing, tôi không cần phải có bất kỳ của những những điều tương tự về mức độ U. Vâng, nếu đột nhiên bạn muốn thêm một cái gì đó giống như T-H, bạn cần phải có khả năng thêm từ đó. Vì vậy, đối với mỗi chữ cái, bạn sẽ có để có một bó mảng sắp tắt của nó. Vì vậy, bạn có thể xem nó như thế nào sẽ nhận được thực sự lớn, thực sự nhanh chóng. Bất kỳ câu hỏi khác? Được rồi. Yeah? [00:28:29] Đung Khi đang cố gắng nhanh hơn so với bảng băm? [00:28:33] HANNAH: Khi đang cố gắng nhanh hơn so với bảng băm? Vì vậy, nếu bạn đã có một thực sự hàm băm xấu. Vì vậy, chúng ta hãy nói rằng tôi là như thế, đây là hàm băm của bạn. Không có vấn đề gì từ bạn cho tôi, tôi luôn sẽ đặt nó trong mảng entry 0. Và vì vậy chúng tôi kết thúc với chỉ đặt tất cả mọi thứ trong một danh sách dài liên kết lớn. Và do đó, một thời gian tra cứu sẽ phải mất ít nhất n nếu nó ở cuối danh sách của chúng tôi. Với sự cố gắng, chúng ta chỉ cần phải lặp thông qua các chữ cái trong từ. Vì vậy, ngay cả khi chúng tôi đã thêm một bó nhiều từ để thử chúng ta, nó sẽ không đưa chúng ta nữa để tìm một từ cụ thể. [00:29:09] Tất cả chúng ta phải làm là, cho Ví dụ, trong trường hợp này, hãy nói rằng chúng tôi đang tìm kiếm zoom, chúng ta sẽ chỉ phải lặp trên Z-O-O-M, bốn chữ. Vì vậy, đó chỉ là chiều dài của zoom từ. Nó không quan trọng bao nhiêu từ nhiều hơn chúng ta đưa vào thử này. Chúng tôi luôn luôn có thể có được nó trong bốn bước. Awesome. Có? [00:29:32] Đung vậy, [không nghe] là một mảng, phải không? [00:29:34] HANNAH: Mm-hm. Đung Nếu bạn đang tìm kiếm [Không nghe thấy], bạn sẽ phải đi qua mảng của bạn để tìm [Không nghe thấy]? HANNAH: Chắc chắn. Đung Không có nhiều thời gian hơn? HANNAH: Nếu tôi sẽ nói rằng mảng của tôi luôn luôn là sẽ là A, B, C, D, E, F, G, blah blah blah, vì vậy nếu tôi luôn luôn biết nó theo thứ tự chính xác như nhau, nếu tôi luôn luôn biết nó theo thứ tự bảng chữ cái, Tôi chỉ có thể nói là số O vậy và như vậy trong bảng chữ cái. Chỉ cần nhảy đến nơi đó. Bởi vì nhớ, với mảng, chúng ta có thể truy cập bất cứ phần tử của mảng trong đó liên tục thời gian nếu chúng ta biết chúng ta đang tìm kiếm. Yeah? [00:30:09] Đung Ngày trước trượt [Không nghe thấy] 27, nhưng cho 26 người đầu tiên. [00:30:14] HANNAH: Xin lỗi? [00:30:15] Đung Không phải là đầu tiên một 0, do đó nó sẽ không được 26? [00:30:18] HANNAH: Chắc chắn rồi, vì vậy khi chúng ta nói 27, đó là sẽ cung cấp cho chúng tôi thông qua các chỉ số 0 26. Nhưng nếu bạn thực sự đếm những người ra, nó sẽ là 27. Câu hỏi hay. Bất cứ điều gì khác? Yeah? [00:30:31] Đung vậy, là cố gắng chậm hơn so với bảng băm? [00:30:34] HANNAH: Tries đang có được, trong Về lý thuyết, nhanh hơn so với bảng băm nhưng mất nhiều bộ nhớ hơn. Yeah? Đung [Không nghe thấy]? [00:30:45] HANNAH: Tôi xin lỗi, tôi không nghe thấy bạn. Đung [không nghe được]. 0-25 cung cấp cho bạn 26. [00:30:54] HANNAH: 0-25 sẽ cung cấp cho bạn 26, bên phải. [00:30:56] Đung Và sau đó [không nghe được]. HANNAH: Đúng vậy. Vì vậy, số lượng chúng tôi đang xác định là số thứ trong mảng của chúng tôi. Vì vậy, nếu chúng ta có 27, đó là sẽ cung cấp cho chúng tôi 0 đến 26, mà sẽ cung cấp cho chúng ta phòng cho, trong trường hợp này, Tôi không bao gồm một dấu nháy đơn. Vì vậy, chúng tôi nhận được từ 0 đến 25 là 26 chữ cái đầu tiên của bảng chữ cái, hoặc tất cả 26 chữ cái trong bảng chữ cái. Và sau đó cuối cùng điều, tại ngõ 26, là sẽ được kiểm tra đánh dấu, hay đồng bằng. Bất cứ điều gì khác? Awesome. Mất không gian của tôi. OK, mát mẻ. [00:31:31] Vì vậy, chúng tôi đã đề cập đến điều này. Nhưng thương mại lớn off giữa cố gắng và bảng băm là cố gắng cung cấp, trong Về lý thuyết, liên tục nhìn lên lần nhưng sử dụng một toàn bộ rất nhiều bộ nhớ. Được rồi, bây giờ chúng tôi có một chút cấu trúc ít phức tạp hơn, và chúng tôi sẽ được thực hiện với C, và chúng tôi sẽ di chuyển phải cùng. [00:31:49] Vì vậy, ngăn xếp, chúng ta thấy điều này trong bài giảng mà bạn có một cái gì đó giống như một chồng khay nơi điều cuối cùng bạn đưa trên stack sẽ là điều đầu tiên bạn đưa ra. Vì vậy, đó là những gì thực sự xác định một chồng là điều cuối cùng bạn đưa vào sẽ là người đầu tiên điều bạn đưa ra. Và thuật ngữ mà chúng ta sử dụng nếu chúng ta đặt một cái gì đó, nếu chúng ta sẽ thêm một cái gì đó để chồng của chúng tôi, chúng tôi gọi đó đẩy. Và nếu chúng ta có một cái gì đó tắt, chúng tôi gọi nó là popping. Và nếu chúng ta đang đi thực hiện một chồng, chúng tôi cần phải chắc chắn để theo dõi cả kích thước và dung lượng. Vì vậy, tổng số các yếu tố chúng ta có thể tổ chức và số lượng hiện tại của các nguyên tố rằng chúng ta đang nắm giữ. [00:32:27] Và rất tương tự, chúng tôi có hàng đợi. Và sự khác biệt duy nhất là thay vì với ngăn xếp, chúng tôi đã nói điều cuối cùng chúng tôi đặt trên là điều đầu tiên chúng tôi đưa ra. Vì vậy, với hàng đợi, các Điều đầu tiên chúng ta đưa vào là có được sự Điều đầu tiên chúng tôi đưa ra. Vì vậy, đây là như thế nào nếu bạn thực sự xếp hàng tại một cửa hàng và bạn đang được giúp đỡ, sau đó người đầu tiên trong dòng nên là người đầu tiên để được giúp đỡ. Vì vậy, đó sẽ là một hàng đợi. [00:32:52] Vì vậy, chúng ta cần phải theo dõi các mô, công suất, và đầu kể từ khi chúng tôi sẽ mất tất cả mọi người ra phía trước của danh sách thay vì phía sau. Các câu hỏi về điều đó? Bất kỳ câu hỏi C được làm phiền bạn? Cấu trúc dữ liệu, bất kỳ những thứ vui vẻ? Được rồi, mát mẻ. Vì vậy, tôi sẽ đưa nó ra để Alison để nhảy vào một số chương trình hơn. [00:33:14] Alison: Oh, chúng ta sẽ thấy. Chúng ta sẽ thấy như thế nào tôi làm ở đây. OK, tôi sẽ cố gắng và bay thông qua công cụ này, guys. Hannah đã đi rất trong chiều sâu trên tất cả những điều cô ấy. Tôi sẽ cố gắng để cung cấp cho bạn một cái nhìn tổng quan nhanh chóng nổ để chúng tôi có thể nhận được để Davin với tất cả vui JavaScript và an ninh điều mà có thể bạn thực sự muốn nghe thêm về. [00:33:33] OK, như Hannah nói, nếu bạn có bất kỳ câu hỏi, Tôi đang đi quá nhanh, xin vui lòng, cho tôi biết. Tôi sẽ trả lời câu hỏi khi cần thiết. Vì vậy, để bắt đầu, chúng ta sẽ bắt đầu với có lẽ là một trong những điều đầu tiên bạn đã học với web lập trình, cho phép. Vì vậy, chmod, các bạn nên đã thạc sĩ tại đây với tất cả các web lập trình mà bạn đã được làm gần đây. Đó là cơ bản chỉ là một lệnh thay đổi các điều khoản hoặc các điều khoản truy cập của các đối tượng tập tin hệ thống của chúng tôi. Tất nhiên, để thực sự xem này, nếu bạn có bất kỳ rắc rối với những trong bộ vấn đề của bạn, bạn có thể sử dụng ls -l, dài, để có được những loại xem như thế này, nơi mà bạn thực sự nhìn thấy tất cả các điều khoản cho một tập tin. [00:34:16] Và thực sự, chúng ta chỉ đi qua khá nhanh chóng chỉ khá nhiều những gì mỗi người trong số này có ý nghĩa. Vì vậy, chúng ta có d ngay tại đây, trong đó chỉ là viết tắt của các thư mục. Rõ ràng ở đây, chúng ta thấy rwx, mà là có thể đọc, ghi, và thực thi. Đây cũng có thể được biểu diễn như là bit, mà chúng tôi sẽ nhận được vào ở trang kế tiếp. Vì vậy, mỗi bộ ba mà chúng ta đã thấy ở đây, vì vậy nó là ba hội Tam hoàng. Chúng tôi đã rwx, r không có gì x và r không có gì x cho tập tin đầu tiên này. Đó là cấu trúc chung này. [00:34:49] Vì vậy, chúng tôi có một số thư mục. Chúng tôi có một số nhóm người sử dụng với các điều khoản. Một số nhóm có các quyền, và một thế giới mà có một phép. Bạn có thể nghĩ về điều này như một bộ ba. Bạn có thể nghĩ rằng trong số này là ba bit. Vì vậy, họ có thể giữ giá trị bất cứ nơi nào từ 0 lên 7, đó là lý do tại sao đôi khi chúng tôi đã có bạn làm chmod 600 thay vì chmod rw bất cứ điều gì. Chúng tôi sẽ nhận được vào một ví dụ đó. Nhưng về cơ bản, bạn có thể nghĩ trong số này là một trong hai chỉ rwx, hoặc bạn có thể nghĩ về họ như một số số nơi đầu tiên này ở đây đại diện một số từ 0 và 7, thứ hai này đại diện một số từ 0 và 7, và một phần ba đại diện một số từ 0 đến 7, OK? [00:35:38] r có giá trị là 4. w có giá trị là 2, và x có giá trị là 1, đó là lý do này phép ở đây sẽ được chmod 700. Bởi vì trong trường hợp này đây, nó nói chúng tôi đã bit đầu tiên có là lộn trên. Vì vậy, chúng ta có 4 để đọc. Bit thứ hai là lộn trên cho w, đó là 2, vì vậy bây giờ chúng tôi có 6. Và bit thứ ba là lộn trên cho x, đó là 1, vì vậy chúng tôi nhận được bảy. Và tất nhiên, nhóm của chúng tôi và thế giới của chúng tôi là mỗi chữ số 0. Vì vậy, đây cũng là tương đương với chmod 700. Và tôi chắc chắn sẽ cố gắng hiểu được ánh xạ giữa những người. Tôi không chắc chắn nếu nó có đi lên trên một bài kiểm tra trước, nhưng nó sẽ là một câu hỏi mà tôi có thể hỏi. [00:36:18] Chỉ cần một chút đi thậm chí thêm vào chmod ở đây, ở đây là rất chung chung Cấu trúc của một cuộc gọi chmod. Vì vậy, tất nhiên, chúng tôi đã chmod đây. Tài liệu tham khảo, điều này đề cập đến là người được chúng tôi đưa ra các điều khoản để hoặc người được chúng tôi lấy những quyền xa. Vì vậy, chúng tôi có một trong các điều khoản ở đây, như chúng tôi đã đưa cho bạn một cộng chmod x, như chúng ta sẽ thấy ngay. một chỉ có nghĩa là cung cấp cho các cụ khoản cho tất cả mọi người. Cung cấp cho họ để tất cả. Vì vậy, bạn rất có thể có u cộng với x hoặc g cộng với x hoặc o cộng với x hoặc nhiều hiện. Vì vậy mà phần đầu tiên luôn luôn là sẽ là tài liệu tham khảo. Chúng tôi được những người đưa ra các điều khoản để, hoặc người được chúng tôi đưa họ đi từ đâu? [00:37:03] Điều thứ hai là các nhà điều hành. Vì vậy, các bạn đã chủ yếu là xử lý cộng. Điều này sẽ cho phép để bất cứ ai bạn đang đem lại cho họ, trong khi trừ đi, hợp lý, loại bỏ chúng. Vì vậy, không có gì quá khủng khiếp đó. Và sau đó các chế độ là những gì chúng tôi nói chuyện về với đọc, viết, hoặc thực hiện. Vì vậy, một cộng với x có nghĩa là cung cấp cho thực thi khoản cho tất cả mọi người. Và sau đó, tất nhiên, trên đó tập tin hoặc thư mục cụ thể. OK? Mọi người đều tốt với chmod? Không quá xấu? [00:37:37] OK, vì vậy HTML, bất kỳ của bạn đủ tuổi với: MySpace tuổi? Tôi gửi này để phần tôi, và nghĩa đen nửa người nhìn tôi như thể tôi bị điên. Và tôi đã thích, guys, chúng tôi không phải là cũ. Thôi nào. Vì vậy HyperText Markup Language, đó là trung thực chỉ là một cách để bạn để hiển thị những thứ nhất định trên web. Vì vậy, nó là một ngôn ngữ đánh dấu. Nó không phải là một ngôn ngữ kịch bản. Không có logic trong nó. Nó chỉ đơn giản là thay đổi cách một cái gì đó được hiển thị. OK, vì vậy đó là một quan trọng phân biệt để thực hiện. Nó được coi là một ngôn ngữ đánh dấu, không phải là một ngôn ngữ kịch bản. [00:38:12] Vì vậy, ở đây chúng tôi có các thẻ HTML của chúng tôi. Trên slide này có lẽ là hầu hết các những người mà bạn cần phải làm quen với và được thực sự thoải mái. Vì vậy, rõ ràng, chúng ta có tag HTML của chúng tôi, mà định rằng tất cả mọi thứ trong giữa hai sẽ là HTML. Chúng tôi có một số liên kết, rõ ràng là sẽ cung cấp cho bạn một liên kết đến một trang web bên ngoài. Một số danh hiệu, trong đầu của chúng tôi ở đây. Và chúng tôi có cơ thể của chúng tôi với h1, đó là một tiêu đề, do đó, nó sẽ làm cho nó đẹp và táo bạo hơn và lớn hơn. Và sau đó, chúng tôi có một số p, đó là một đoạn văn. Bạn có lẽ nên biết và làm quen với những thứ giống như cách bạn chèn một hình ảnh, là Có khối lớp nào tiêu đề khác? Tôi chắc chắn sẽ là thoải mái với div. Vì vậy, những điều đó có phần lớn các thẻ mà bạn cần phải làm quen với. Nhưng tất nhiên, như với tất cả mọi thứ trong CS 50, danh sách không đầy đủ. Vì vậy, hãy chắc chắn rằng bạn chải lên trên đó. [00:39:08] CSS, vì vậy CSS, nếu bất kỳ của bạn xem hội thảo của tôi từ cách đây hai tuần, thực sự chỉ là một cách để theo phong cách trang web của bạn? OK, vì vậy chúng tôi có một số ngôn ngữ đánh dấu. HTML, mà sẽ chăm sóc của các văn bản chỉ và nơi mà nó có thể là trên trang. Nhưng CSS thực sự là những gì làm cho nó đẹp hơn. Bạn có thể có những trong HTML của bạn tập tin, nhưng như chúng ta sẽ nói về sau này, Tôi chắc rằng nó có thể thể slide tiếp theo, nó là thực tế phổ biến, và thực sự thực tế mà chúng tôi thực sự khuyến khích, để bạn có thể giữ chúng tách ra khi chúng ta nói về MVC và rằng toàn bộ mô hình. Đó thực sự là những gì này ăn vào. [00:39:42] Vì vậy, CSS chỉ là một cách để làm cho mọi thứ trông khá. Những thứ ở đây, giống như cơ thể và #title và .info, chúng được gọi là bộ chọn và những gì họ làm là họ chọn những việc cụ thể trong tập tin HTML của bạn và áp dụng bất cứ phong cách, bất cứ loại điều mà bạn muốn, cho rằng yếu tố cụ thể của trang web của bạn trang. Vì vậy, ở đây, chúng ta có một màu nền và màu sắc và một gia đình font chữ đó là được áp dụng cho bất cứ điều gì trong cơ thể. Vì vậy, nếu chúng ta nhìn lại đây, nó sẽ không áp dụng cho các tiêu đề. Nó sẽ chỉ áp dụng đối với những gì là trong các bộ chọn cơ thể, OK? [00:40:22] Với tiêu đề ở đây, đây là sẽ được điều tương tự, màu sắc của văn bản là màu xanh chỉ đi làm ảnh hưởng đến những gì trong các bộ chọn tiêu đề. Cũng như thông tin ở đây, các văn bản sẽ có màu hồng, bất cứ điều gì của thông tin, mà là ngay tại đây. Vì vậy, điều duy nhất mà sẽ là màu hồng trên trang này là ngày, thứ hai 17 tháng 11, 2014. OK, vì vậy CSS chỉ là một cách để có quyền kiểm soát nhiều hơn over-- có? [00:40:48] Đung Tại sao bạn phải để sử dụng băm với tiêu đề? [00:40:51] HANNAH: trình bày tiếp theo, hứa! Chúng tôi sẽ đến đó. Vì vậy, đây là lý do tại sao chúng ta phải sử dụng hash. Vì vậy, bộ chọn đưa vào ba chính hình thức mà chúng tôi nói chuyện với các bạn về. Tôi fyou muốn tìm hiểu thêm, có rất nhiều trên mạng. Có tài liệu CSS tuyệt vời. Có một thẻ tên, trong đó có làm chỉ với thẻ bình thường của bạn trong HTML. Vì vậy, h1, p, div, h2, những loại vật. Và chúng ta có thể đặt tên những người như là. Vì vậy, như chúng ta thấy ở đây với cơ thể, đó là một thẻ bình thường. Vì vậy, chúng tôi chỉ có thể đặt cơ thể khi chúng ta đang nói trong file CSS của chúng tôi. [00:41:26] Với tiêu đề, toàn bộ lý do chúng tôi có băm này là chúng ta có những gì coi là một ID. Vì vậy, một ID nên luôn luôn độc đáo trong trang HTML của bạn do đó khi bạn đang đề cập đến nó, bạn biết rằng bạn đang chỉ đề cập đến một điều cụ thể. Vì vậy, trong trường hợp này đây, với chúng tôi h1 đây, CS 50 phiên xét, chúng ta có một id của tiêu đề. Vì vậy, để chỉ cần tham khảo mà đoạn mã HTML của chúng tôi, chúng tôi làm một tiêu đề băm. Chỉ cần bằng cách quy ước, các ID được chỉ định với một hash trước mặt họ. Trong cùng một cách, chúng ta thấy thông tin ở đây là một lớp. Và như vậy lớp với CSS là được xem như là một lớp dot hoặc chấm bất cứ lớp học đó là. Vì vậy, trong trường hợp này đây, nó là thông tin. [00:42:10] Vì vậy, tôi đưa nó trở lại. Cả hai sẽ là hồng cho CSS của chúng tôi tại đây vì cả hai đều có một lớp học của thông tin. Và trong tập tin CSS của chúng tôi, chúng tôi đã được chỉ định rằng bất cứ điều gì với một lớp thông tin sẽ có màu hồng. Điều đó có ý nghĩa? Có? [00:42:27] Đung Nếu bạn đã thực hiện tất cả mọi thứ trong cơ thể màu trắng, và sau đó bạn cố gắng để làm cho một cái gì đó bên trong nó màu xanh, có thể gây ra vấn đề? [00:42:34] HANNAH: Vậy là CSS cascading style sheets. Vì vậy, bất cứ điều gì là về phía phía dưới sẽ được ưu tiên. Vì vậy, nếu bạn làm điều gì đó với cơ thể, và bạn thực hiện tất cả mọi thứ màu trắng, và sau đó sau này bạn thay đổi tiêu đề hoặc bạn thay đổi các văn bản trong cơ thể, nó ghi đè đó. Vì vậy, bất cứ điều gì về phía phía dưới sẽ được ưu tiên. Có? [00:42:56] Đung Và ID là duy nhất, nhưng các lớp học có thể được nhiều hơn? HANNAH: Đúng vậy. Vì vậy, ID phải là duy nhất, và các lớp học có thể tham khảo như nhiều điều như bạn muốn. Bất kỳ câu hỏi khác? Vâng. [00:43:09] Đung [không nghe được]. Tôi đang tự hỏi liệu mà làm cho một sự khác biệt. HANNAH: Tôi xin lỗi, Câu hỏi là gì? Đung Có nhỏ "F" và vốn "F." HANNAH: Vì vậy, sự khác biệt giữa nhỏ "f" và chữ "F" không nên làm cho một sự khác biệt. Vì vậy, "f" sẽ là 15 trong hai cách. Cool, bất cứ điều gì khác? Mọi người đều tốt, CSS? Có? [00:43:30] Đung Xin lỗi. Bạn có thể có một lớp và một ID? [00:43:35] HANNAH: Có, bạn có thể. Những điều có thể có cả một lớp và một ID. Và tôi khuyên thử nghiệm những ngày của riêng bạn. CSS bạn sẽ học tốt nhất chỉ bằng cách làm một cái gì đó, trang web rất đơn giản, xây dựng một số CSS, và chỉ nhìn cách họ tương tác. Và bạn sẽ đạt được rất tốt, trực giác cho nó hoạt động như thế nào. [00:43:56] OK, tất cả mọi người tốt với CSS? Bạn đang tất cả sẽ làm cho các trang web đẹp với CSS bây giờ. OK, thực hành tốt nhất, chỉ điều cần lưu tâm, mọi thứ that-- này là lý do tại sao chúng tôi cập bến bạn cho thiết kế và không có điều gì. Vì vậy, đóng tất cả các thẻ HTML của bạn. Vì vậy, nếu bạn có một cơ thể mở, cần phải có một cơ thể gần gũi. Nếu bạn có một đoạn mở, có phải là một đoạn gần. Kiểm tra xem trang của bạn xác nhận. Các bạn nên rất quen thuộc với điều này từ p-thiết lập bảy với CS 50 tài chính với validator W3. Và như tôi đã nói trước đây, một trong những mô hình lớn của chúng tôi được tách phong cách của bạn với CSS từ đánh dấu của bạn, đó là HTML. Và sau đó, tất nhiên, chúng tôi có XKCD này tuyệt vời ở đây. Yay, hài hước! [00:44:38] OK, TCP / IP. Giữa những điều này và HTTP, về cơ bản họ đang cả hai giao thức. Vì vậy, bạn chỉ có thể nghĩ của họ như là một tập hợp các quy tắc chi phối cách điều di chuyển trên internet. Vì vậy, điều khiển truyền dẫn giao thức, hoặc giao thức internet, chỉ là một cách để đảm bảo dữ liệu mà được sẽ đi đâu và chúng ta biết nếu chúng ta lại thiếu dữ liệu. Vì vậy, nếu các bạn nghĩ về bài giảng một vài tuần trước đây với David nơi mà chúng tôi có bốn phong bì, họ tất cả đều được đánh số như một trong bốn, hai trong số bốn, ba trong số bốn, bốn bốn, đây chỉ là một tập hợp các quy tắc. Chúng tôi nói, OK, bất cứ khi nào chúng tôi gửi nhiều gói tin, chúng ta sẽ đánh số nó với những gì số đó là và tổng số đó người sử dụng sẽ nhận được. [00:45:19] Và đây chỉ là nói cho bất cứ ai đang nhận dữ liệu cho dù họ đã nhận được tất cả mọi thứ hoặc nếu cái gì đó đã mất trên đường đi. Và họ cần phải yêu cầu nó một lần nữa. Điều này thực sự chỉ là một tập hợp các quy tắc. Đó là làm thế nào bạn có thể nghĩ về nó, OK? Và cũng có thể, nó xác định các cổng, mà các bạn can-- tôi biết trong bài giảng, họ đã có một danh sách toàn bộ các cảng. Nhưng chúng tôi không có họ ở đây ngay bây giờ. [00:45:41] Giao thức truyền siêu văn bản như vậy là, một lần nữa, nó là một giao thức khác. Vì vậy, nó là một tập hợp các quy tắc chi phối, trong trường hợp này, cách siêu văn bản được chuyển giao. Vì vậy, nó chỉ cho phép các trình duyệt để nói chuyện với các máy chủ web. Và như chúng tôi đã nói ở đây, đó là như bắt tay con người. Nó chỉ là một cách để quản làm thế nào các máy chủ web là sẽ tương tác với trình duyệt của bạn. Và chúng tôi có chỉ là một vài ví dụ. Chúng tôi có một số yêu cầu ở đây nơi GET là phương pháp. Chúng tôi có HTTP 1.1, đó là phiên bản giao thức đối với chúng tôi. Và sau đó, các máy chủ, đó là những gì chúng tôi đang thực sự cố gắng để truy cập. Và sau đó, như bạn thấy ở đây, chúng tôi nhận được một số phản ứng với 200 này OK như mã phản hồi HTTP của chúng tôi. Chúng tôi có một danh sách lớn tôi sẽ để kéo lên trong một giây rằng các bạn nên làm quen với. Và chúng tôi có loại nội dung này text / HTML, mà chỉ nói những gì loại dữ liệu Chúng ta nhận được từ máy chủ, OK? Host này và loại nội dung này là một phần của tiêu đề HTTP. Bạn có thể có ít hoặc ít nhất là cần thiết cho bối cảnh của những gì bạn đang xử lý. Đôi khi bạn sẽ có rất nhiều các thông tin từ máy chủ của bạn. Có lẽ họ đang yêu cầu rất nhiều các thông tin từ người sử dụng. Nó thay đổi tùy thuộc vào ngữ cảnh. Nếu bạn nhìn vào CS 50 Nghiên cứu, có rất nhiều chi tiết về điều đó. Nhưng chúng tôi có rất nhiều để có được thông qua, vì vậy tôi sẽ để đi ngay phía trước nếu đó là OK với các bạn? Cool. Giữ trên. Tôi chắc chắn rằng có toàn bộ danh sách of-- huh! Tôi không biết tại sao điều này là tất cả các cách trên đây. Tôi nghĩ rằng tôi thật sự di chuyển nó trong khi tôi đã sitting-- [00:47:15] Davin: Bạn có muốn dạy nó? Hoặc bạn có muốn tôi dạy nó? [00:47:17] Đung Tôi nghĩ rằng chúng tôi có thể chỉ cho họ để bắt đầu. Tôi có nghĩa là, bạn có thể đi vào chúng thêm nữa, nhưng tôi nghĩ rằng nó có ý nghĩa hơn kể từ khi tôi chỉ nói về trạng thái HTTP. Vì vậy, đây là toàn bộ danh sách. Tôi đoán những gì sẽ xảy ra được Davin là sẽ đi vào chúng sau này. Nhưng có một danh sách toàn bộ, một xem trước của các hương vị đến. OK, chúng ta sẽ blow-- này sẽ là một khóa học PHP tai nạn như không có khác. [00:47:41] Vì vậy, PHP, siêu tiền xử lý, đó là một backronym đệ quy, có nghĩa là nó được đặt tên là cái gì khác. Và sau đó họ giống như, này không thực sự có ý nghĩa. Vì vậy, họ chỉ có tên it-- và nó là một từ viết tắt, vì vậy họ chỉ làm cho nó PHP hypertext preprocessor, mà chỉ làm cho không có ý nghĩa. Câu chuyện vui vẻ. Nó là một ngôn ngữ lập trình. Vì vậy, nhiều như tôi nhấn mạnh rằng HTML không phải là một ngôn ngữ lập trình, nó là một ngôn ngữ đánh dấu, PHP là một ngôn ngữ lập trình. Làm thế nào bạn biết điều này là vì có logic. Có điều kiện. Chúng tôi có các biến, trong khi đó chúng tôi có không có những điều trong HTML. [00:48:12] Được rồi, chúng ta có ít này chút ở đây đó là giống như một hương vị của PHP. Vì vậy, vấn đề cơ bản, tên biến bắt đầu với một dấu đô la. Rất nhiều người thích nó. Nhắc của chúng tôi tiền. Đó là tất cả tuyệt vời. Chúng ta đều muốn PHP. Vì vậy, chúng ta không chỉ định một kiểu biến của nữa. Nó được xác định tại thời gian chạy. Thông dịch viên sẽ được như thế, oh, chúng tôi sẽ chỉ cần chạy qua, và theo bối cảnh, chúng ta sẽ thấy những gì loại của các loại các biến này cần phải có. Không có chức năng chính. Những điều này sẽ chỉ chạy. Các bạn với nhập khẩu của bạn trong của bạn cuối cùng p-đặt, bạn sẽ nhận thấy điều này. Có thật sự không phải là một chức năng chính. Bạn chỉ cần viết những gì bạn muốn xảy ra. Và nó chỉ là loại xảy ra. Vì vậy, đó là PHP cho bạn. [00:48:56] Mảng là rất tương tự. Chúng tôi vẫn có khung này. Ở đây, chúng tôi có một số biến gọi là arr, và nó bằng đối với: chúng tôi có bình thường của chúng tôi khung ký hiệu. Và chúng tôi có một số giá trị quan trọng. Và sự khác biệt lớn giữa C và PHP mảng là chúng ta có thể có associate-- này chúng ta có thể kết hợp các giá trị nhập vào. Vì vậy, thay vì chỉ có một mảng được lập chỉ mục bởi số lượng hoặc vị trí trong đó phần tử trong mảng, chúng tôi thực sự có thể kết hợp nó với một phím. Nơi chúng ta có thể nói, OK, tôi muốn bất cứ điều gì giá trị được kết hợp với trái cây. Và có lẽ chúng ta có trái cây đi vào chuối. Vì vậy, nó muốn trở chuối cho chúng tôi. [00:49:41] Nhưng về cơ bản, nhiều nhất điều mạnh mẽ về điều này là nếu các bạn nhớ demo từ bài giảng mà chúng tôi về cơ bản Speller viết lại trong PHP, và nó tra cứu was-- thực sự chỉ là thích, không phím này tồn tại? Đó thực sự là loại sức mạnh của nó. Bạn không cần phải lặp thông qua mảng của bạn. Bạn không cần phải biết những không gian đó là trong. Nó có thể là vào cuối hoặc đầu. Miễn là bạn biết phím đó là kết hợp với các giá trị, PHP có thể chỉ cần nhổ giá trị sao ra đúng vào bạn, OK? [00:50:09] Và sau đó, chúng tôi cũng chỉ có chỉ vì chúng tôi có thể có các cặp giá trị quan trọng không có nghĩa là bạn phải. Bạn cũng có thể chỉ cần tạo một mảng bình thường như ở đây, ở phía dưới, nơi nó chỉ một, hai, ba, bốn. Đó là những giá trị của chúng tôi. Và trên thực tế, các phím của họ là các chỉ số. Vì vậy, chìa khóa cho một sẽ là zero. Chìa khóa cho hai sẽ là một. Vv và vv, trừ khi bạn gán một phím một cách rõ ràng, bạn có thể giả định rằng giá trị chỉ là chỉ số của họ. Điều đó có ý nghĩa với tất cả mọi người? Không có câu hỏi? Awesome. [00:50:38] OK, foreach là một cách để lặp qua mảng của bạn. Vì vậy, chúng tôi có một cái gì đó ở đây, chỉ là cấu trúc chung. Vì vậy, foreach, tên của mảng của chúng tôi, như bất cứ điều gì bạn muốn gọi nhau phần tử trong mảng của bạn, và chúng ta có thể làm điều gì đó với yếu tố đó hoặc với giá trị đó. Vì vậy, chúng ta có một ví dụ ở đây. Chúng tôi có một liên kết mảng với hai mục này với thanh được liên kết với foo và qux được liên kết với baz. Vì vậy, các phím là foo và baz. Các giá trị được thanh và qux. Vì vậy, foreach, chúng ta có mảng của chúng tôi ở đây, như các cặp giá trị quan trọng. Điều này cho phép chúng ta truy cập cả chìa khóa và giá trị. Có lẽ bạn chỉ muốn giá trị, trong trường hợp này bạn chỉ có thể làm như arr là $ value, và sau đó bạn chỉ truy cập vào các giá trị như bạn lặp qua. Nhưng có lẽ, đối với một số lý do, bạn muốn phím, đó là lý do tại sao tôi đã chọn ví dụ này để thay thế. Vì vậy, bạn thực sự có thể thao tác quan trọng và giá trị trong trường hợp này. OK? Câu hỏi? [00:51:41] Đung Nếu bạn muốn chỉ thao tác phím, sẽ bạn phải làm foreach-- [00:51:45] Alison: Đúng vậy. Vì vậy, nếu bạn muốn thao tác chỉ phím, bạn vẫn sẽ cần điều này cú pháp vì nếu bạn chỉ có arr như một cái gì đó, như một điều, đó là sẽ giả sử bạn muốn giá trị, không phải là quan trọng. Vì vậy, nếu bạn đã bao giờ chỉ có giống như arr như, có lẽ điều này cũng giống như $ phần tử, nó sẽ cho rằng bạn đang yêu cầu chỉ giá trị tại mỗi điểm. Nếu bạn muốn một cách rõ ràng làm điều gì đó với phím, thậm chí nếu bạn không đi đến làm bất cứ điều gì có giá trị, bạn cần cấu trúc này mà chúng ta có ở đây nơi bạn đang yêu cầu một cách rõ ràng cho cả khóa và giá trị. Great câu hỏi. Bất cứ điều gì khác? Cool. [00:52:27] Được rồi, PHP và HTML. Oh, chúng ta trở lại với p-thiết lập bảy lần nữa. Vì vậy, điều này nên nhìn một chút quen thuộc. Vì vậy, đây là một số hình thức HTML đơn giản mà có một số tên đầu vào của hello. Và chúng ta thấy chúng ta có phương pháp của chúng ta về GET. Và nếu chúng ta nhớ từ của chúng tôi p-set, khi gửi đơn đăng ký, nó sẽ gửi một mảng gọi là $ _GET có tất cả các yếu tố đầu vào hoặc biến từ các hình thức đó phải được thao tác trong PHP của chúng tôi. Vì vậy, trong trường hợp này, người sử dụng sẽ đặt trong tên của họ. Họ trình. Và chúng ta thấy rằng chúng ta có được một số mảng ở đây. Chúng tôi có mảng GET của chúng tôi. Và chúng tôi đang truy cập vào tên. [00:53:11] Vì vậy mà nói, OK, cho tôi giá trị đó là gắn liền với tên, đặt tên là chìa khóa ở đây. Và đó là bản đồ trực tiếp đến những gì chúng tôi biết tên của chúng tôi là đầu vào. Vì vậy, đây đã đem lại cho bạn chìa khóa vào những gì là có được trong mảng của bạn ở đây. Điều đó có ý nghĩa với tất cả mọi người? Có? [00:53:32] Đung Có tên trong GET tham khảo vào dòng màu tím trong [Không nghe thấy]? [00:53:36] Alison: Nó đề cập đến ở đây. Vì vậy, lĩnh vực này ngay tại đây, nó đề cập đến tên này ở đây. Vì vậy, điều này có thể đã được đặt tên như số điện thoại, hoặc bất cứ điều gì. Tên này thực sự nói rằng, những gì bạn đang gọi lĩnh vực này? Làm thế nào thì bạn sẽ tham khảo lĩnh vực này? Và tên này là thực sự thích, chúng tôi nói lĩnh vực này được gọi tên. Đó là cách chúng ta sẽ truy cập vào nó. [00:53:59] Đung Vậy là nó thích, Tên đầu vào tương đương với Bob, và- [00:54:02] Alison: Right, sau đó bạn Bob sẽ nhận được xuống đó. Chính xác. Mọi người đều mát mẻ? Tất cả quyền, do đó GET so với POST, đây là hai cách chính rằng chúng ta truyền dữ liệu trong một yêu cầu HTTP. Các bạn nên đã thấy cả những hy vọng. Vì vậy, với GET, thông tin được thông qua thông qua URL. Vì vậy, nếu bạn đã từng làm Google tìm kiếm, YouTube, bạn sẽ thấy có thể nhận thấy một số dấu hỏi. Và sau đó, tất cả các từ mà bạn chỉ cần đặt trong đó. Và POST chuyển dữ liệu trong cơ thể thông HTTP. Vì vậy, không giống như GET, bạn xem xét loại rằng dữ liệu được ẩn từ người sử dụng. Nhưng những gì thực sự quan trọng để hiểu là điều này vẫn còn chỉ là không an toàn như GET. Sự tương tự tôi muốn sử dụng được nếu bạn có số tài khoản ngân hàng của bạn và bạn viết nó ở bên ngoài một phong bì, đó là khá an toàn. Nếu bạn đã viết nó trên một mảnh giấy và đặt nó bên trong phong bì, nó vẫn thực sự không an toàn vì tất cả các bạn phải làm là mở mà lên và nhìn vào các nội dung thực tế của thông điệp để thấy điều đó. Vì vậy, đây là "ẩn", và những người như để nghĩ rằng nó an toàn, nhưng nó thực sự không. Và tôi chắc chắn sẽ Davin nhận được vào nhiều hơn, có lẽ. Nhưng đó là một quan trọng phân biệt để làm cho và một cái gì đó thực sự tốt để hiểu. [00:55:15] OK, SQL, Structured Query Language. Tất cả những thứ đó như ta đã thấy gần đây! Vì vậy, về cơ bản nó chỉ là thiết kế, rõ ràng, để quản lý dữ liệu. Các bạn đã có rất nhiều kinh nghiệm với này trong bảng của bạn với PHP MyAdmin. Và có bốn câu hỏi thường gặp mà chúng tôi muốn các bạn biết. Vì vậy, có cập nhật, chèn, chọn, và xóa. Vì vậy, hãy chắc chắn rằng bạn biết những người thực sự tốt. Chúng ta sẽ đi qua chúng thực sự nhanh chóng. [00:55:40] Vì vậy, cập nhật, thực sự, như những gì bạn có thể nghĩ rằng nó không, nó chỉ cập nhật dữ liệu trong cơ sở dữ liệu của bạn. Vì vậy, chúng tôi có một số ví dụ ở đây. Đây là nói chung cấu trúc của một truy vấn cập nhật. Vì vậy, chúng tôi cập nhật bảng rằng chúng ta đang nói về. Và chúng tôi muốn thiết lập một số các giá trị, các cột nhất định bằng giá trị cụ thể. Vì vậy, đây chỉ là cập nhật bảng, thay đổi giá trị trong tất cả các hàng trong trường hợp này. Vì vậy, trong này xuống đây, một thực tế Ví dụ, chúng ta có insert-- xin lỗi. Slide đó tiến mà không có tôi nhận ra điều đó. [00:56:17] Vì vậy, bảng cập nhật này đặt col1 bằng để VAL1 hợp nhà bằng "Currier." Những gì người ta này không có gì nó chỉ thay đổi, nó chỉ cập nhật các giá trị ở những nơi cụ thể. Vì vậy, trong một đầu tiên này, nó thay đổi này giá trị cho tất cả mọi thứ trong bảng của bạn, OK? Nó sẽ thay đổi này cột cho mỗi lần nhập cảnh, cho mỗi đơn hàng. Nhưng nơi này, bạn có thể nghĩ về nó như một vòng loại. Vì vậy, nó chỉ sẽ thay đổi nó ở những nơi rất cụ thể. Vì vậy, trong p-thiết lập bảy, khi bạn có thể cập nhật số lượng tiền mặt rằng người dùng của bạn có, bạn có thể có một số nơi ID bằng session ID, phải không? [00:56:53] Bởi vì bạn không muốn thay đổi số lượng tiền mặt cho mỗi người được sử dụng trang web của bạn. Bạn muốn thay đổi nó cho một người cụ thể, người đó là ai đã sử dụng nó tại thời điểm đó. Phải không? OK, vì vậy chèn, chèn giá trị nhất định vào các bảng. Điều này cũng giống như khi bạn đang tạo ra một thương hiệu người dùng mới. Cấu trúc chung ở đây được chèn vào bất kỳ bàn chúng ta đang nói về. Giá trị, là những giá trị mà chúng tôi thực sự muốn chèn. OK, vậy là chúng ta thấy ở đây, chúng tôi đã chèn vào bảng. Đây là cột cụ thể với giá trị tương ứng của họ. Vì vậy, điều này nói, chèn một hàng mới có chứa giá trị VAL1 và val2 dưới các cột cụ thể. [00:57:33] Vì vậy, có thể bạn chỉ muốn điền ra một nửa những điều trong hàng này. Đó là những gì phần này ở đây cho phép bạn làm. Nó cho phép bạn thực sự xác định một phần. Có? [00:57:44] Đung có thể bạn chỉ [Không nghe thấy] tế bào ở hàng [Không nghe thấy]? [00:57:52] Alison: Nếu bạn chỉ điền vào một số bộ phận của hàng của bạn, phần còn lại của các tế bào chỉ là trống rỗng. Miễn là bạn cho phép họ trống rỗng, nó không phải là một vấn đề. Nếu bạn cố gắng để truy cập chúng, đó là sẽ trở lại một số phần tử rỗng. Nhưng điều quan trọng là phải biết rằng trong bảng nhất định, họ đã được cho phép để được null. Bạn có thể đã chạy vào một vấn đề trong quá trình p-set của bạn bởi vì chúng tôi đã không để cho bất kỳ các giá trị của bạn là vô giá trị. Nhưng bạn có thể chỉ định một giá trị tùy chọn trong bảng của bạn. [00:58:26] OK, chọn, vì vậy đây là chỉ là một cách để nhận được dữ liệu cụ thể từ một bảng ở một số định danh mà bạn muốn. Vì vậy, chọn sao từ bảng nơi col bằng gì gì đó chỉ có nghĩa là, cho tôi tất cả các dữ liệu liên quan nơi cột cụ thể điều này là đúng. Vì vậy, các ngôi sao trong trường hợp này sẽ trả lại toàn bộ hàng cho bạn, OK? [00:58:49] Và sau đó, trong trường hợp này, chọn sao từ bảng chỉ cung cấp cho bạn toàn bộ bảng. Và sau đó, xóa rõ ràng, nó chỉ xóa các hàng từ bảng. Vì vậy, xóa từ bảng, bất kỳ bàn nào chúng tôi tham khảo, một số nơi cụ thể định danh hoặc một số điều kiện là đúng. Có? [00:59:07] Đung Câu hỏi. Tại sao bạn đang sử dụng đôi dấu ngoặc kép, và cho dù bạn làm dấu ngoặc kép hoặc đơn dấu ngoặc kép, nó làm cho một sự khác biệt? [00:59:13] Alison: dấu ngoặc kép đôi hoặc dấu nháy đơn không làm cho một sự khác biệt trong SQL. Tôi nghĩ rằng tôi đã nhìn thấy một câu hỏi khác. Có? [00:59:20] Đung Không nó không ảnh hưởng gì được thoát khỏi các truy vấn? [00:59:25] Alison: Rob? [00:59:27] ROB: bạn có ý nghĩa gì bởi thoát khỏi các truy vấn? [00:59:31] Đung Nếu ai đó có một truy vấn duy nhất trong các hình thức of-- [00:59:36] ROB: Nếu ai đó đặt một giá duy nhất trong, sau đó miễn là bạn đang khử trùng đầu vào của bạn, sau đó nó không quan trọng. Nhưng nếu bạn đang sử dụng một đơn quote và bạn là không chính xác thoát đầu vào của bạn, sau đó có, họ cần để đặt một giá duy nhất để phá vỡ mã của bạn. nếu bạn sử dụng dấu ngoặc kép, họ cần phải đặt một đôi trích dẫn để phá vỡ mã của bạn. Nhưng miễn là bạn thoát khỏi những thứ một cách chính xác, nó không quan trọng. Nó chỉ cần đi để được dịch đến đúng các biểu tượng nào. [00:59:59] Đung không thoát có nghĩa là gì? Alison: Vâng, như vệ sinh và thoát. Các thi mà chúng tôi có, XKCD lớn truyện tranh mà họ kéo lên mà bạn có, oh-- ROB: Đó là slide cuối cùng. Alison: Đó là slide cuối cùng, thực sự? Oh my god. Hiện chúng tôi đi, hoàn hảo. OK, vì vậy về cơ bản, bạn có thể tiêm một cái gì đó vào truy vấn SQL này nơi nó phá vỡ của bạn mã, hoặc như David cho thấy trong lớp, nếu chúng ta có một số đơn quote 1 bằng 1 và nếu trong mã của chúng tôi, chúng ta chỉ cần sao chép trực tiếp trong đó, và chúng ta có một giá duy nhất kết thúc, những gì xảy ra là chúng tôi nhận được một số biểu hiện đó để đánh giá đúng rằng sẽ để cho người nhập cơ sở dữ liệu của chúng tôi và nhận được dữ liệu mà chúng tôi không muốn họ nhận được. Vì vậy, vệ sinh đầu vào chỉ có nghĩa là đảm bảo rằng chúng ta đang chạy trốn những ký tự và định họ như ký tự và không điều mà nên được cho phép được hiểu theo nghĩa đen như câu lệnh SQL của chúng tôi. [01:01:04] Vì vậy, những điều to lớn mà chúng tôi đã nói rằng các bạn nên sử dụng HTML là ký tự đặc biệt, mà là một cái gì đó mà bạn có thể muốn xem xét. OK, xóa. Các kiểu dữ liệu, điều này sẽ được tất cả các tuyến. Vì chúng tôi đã 15 phút còn lại, tôi chỉ đi xuyên qua này. PHP và SQL, về cơ bản đây là chỉ là chúng tôi đã có một chức năng truy vấn đã giúp bảo vệ chống lại các cuộc tấn công độc hại. Vì vậy, bất cứ khi nào bạn sử dụng truy vấn, chúng tôi được đảm bảo rằng mọi thứ đã được khử trùng và không có điều gì. [01:01:36] MVC chỉ là một mô hình thiết kế, rất model, view, controller. Nó chỉ là một cách để giữ cho mọi thứ đẹp và chia tay trong cùng một cách rằng chúng ta có xu hướng yếu tố mã ra thành các chức năng. Đây chỉ là một khuôn khổ thiết kế web mà cho phép bạn làm điều tương tự. Tôi sẽ bỏ qua điều này. [01:01:54] Đây là một cái gì đó mà tôi sẽ là siêu thoải mái với. Đó là một bảng lớn nhỏ ở đó. Nó cung cấp cho bạn các chức năng ví dụ của mô hình. Tôi chỉ cần đi qua này bởi vì tôi thực sự muốn Davin để có thể nói chuyện. Nếu bạn có bất kỳ câu hỏi, xin vui lòng cảm thấy miễn phí. Tôi sẽ ở đây sau. Chỉ cần đến nói chuyện với tôi. Cùng với đó, chúng ta có trạng thái HTTP. Và Davin của sẽ thổi thông qua điều này trong 15 phút. Điều này sẽ là tuyệt vời. [01:02:17] Davin: OK. Uh, mic của bạn? Yeah. Xin lỗi. Alison: Way được chuẩn bị. Davin: Không, tôi đã sẵn sàng. Tôi đã sẵn sàng. Hãy làm điều này. Nó đã sẵn sàng. OK. Xin lỗi. Tôi đổ cà phê vào bản thân mình. Tôi không biết nếu tôi hơn buồn bã mà tôi trông ngớ ngẩn, hoặc là tôi không uống cà phê nữa. Dù sao, chỉ là một thông báo nhanh chóng về thẻ các bạn có. Vì vậy, tấm này các bạn có không phải là chính thức gì về các bài kiểm tra. Đây là chính thức gì về các bài kiểm tra. Ngoài ra, trên các trang web, chúng tôi nói bạn, OK, điều này sẽ có trên các bài kiểm tra. Vì vậy, trong ít cheat sheet bạn có, không chính thức. Và có những sai lầm về nó. Vì vậy, tốt nhất là không chỉ mù quáng sử dụng nó. Vì vậy, yeah, đó là điều đó. Vì vậy, hãy nhanh chóng vào thực tế này. [01:03:05] Vì vậy, trạng thái HTTP. Vì vậy, những gì sẽ xảy ra khi trang web, tất cả mọi thứ đều ổn. OK mọi thứ. Tất cả mọi thứ trở lại với bạn theo cách bạn muốn nó. Bạn nhận được một 200 OK. 301, nơi mà chúng tôi đã nhìn thấy rằng 301 trước? Chờ đã, có chuyện gì thế? Xin lỗi. Chúng tôi đã nhìn thấy tôi tin giảng trong an ninh. Vì vậy, trong quá trình bảo mật, vì vậy nếu David gõ http và sau đó cố gắng để đi đến cs50.net, bạn sẽ thấy 301 di chuyển. Tại sao? Bởi vì nó sẽ chuyển hướng bạn tự động để HTTPS của chúng tôi. [01:03:35] Vì vậy, 301 di chuyển, chỉ cần nó cơ bản là một chuyển hướng. Và bạn có thể nghĩ về nó như thế này. Bất kỳ các trạng thái bắt đầu bằng 2, những người là như thế, OK, mọi thứ đều OK. Bất kỳ của các trạng thái mà bắt đầu với 3, đó là chuyển hướng. Trạng thái bắt đầu bằng 4, có nghĩa là có một số loại lỗi khách hàng. Trạng thái bắt đầu bằng 5, đó là một số loại lỗi máy chủ. Vì vậy, bạn loại chia tay các trạng thái như thế. Vì vậy, không phải 304 không thay đổi, vì vậy trong bạn server.c p-bộ, vì vậy chúng ta hãy nói rằng bạn cat.html nạp. Tất cả mọi thứ trở lại, bạn nhận được 200s, OK, tuyệt vời. [01:04:03] Hãy nói rằng bạn làm mới nó. Vâng, bên trong đó cat.html, bạn có một JPEG. Vâng, JPEG mà không phải là sẽ được nạp lại. Bạn sẽ không gửi khác GET yêu cầu đến máy chủ, và sau đó nhận được tất cả các thông tin đó trở lại. Nó sẽ chỉ be-- hình ảnh đó là sẽ được lưu trữ trên máy tính của bạn. Và như vậy hình ảnh sẽ là một 304. Vì vậy, nó không được sửa đổi. Nếu bạn sau đó đóng ra, rõ ràng cookies, và sau đó làm mới và cố gắng để tải trang đó một lần nữa, bạn sẽ thấy 200s. Bạn sẽ không nhìn thấy rằng 304. [01:04:28] 400, yêu cầu xấu, thực nhanh chóng, giống như nếu bạn được sẽ gửi một JSON đối tượng đến máy chủ và đối tượng JSON của bạn là không chính xác, bạn sẽ thấy một cái gì đó như thế. 403, cấm. Khi bạn sẽ thấy một cấm? Có lẽ Có lẽ? Đung Chmod. Davin: Chmod, yeah. Vì vậy, bạn đã không được thiết lập quyền một cách chính xác. 404, không tìm thấy. Nó chỉ là không có. Vì vậy, nếu bạn gõ vào các URL sai. 500, lỗi máy chủ nội bộ, máy chủ có lẽ đã không được cấu hình đúng. Một cái gì đó không phải trên cuối cùng của bạn, nhưng một cái gì đó ở phía máy chủ. Và 503? Rất nhiều người đã nhìn thấy 503s trong p-set cuối. Khi điều đó sẽ xảy ra? Tôi nghe thấy tiếng thì thầm. [01:05:05] Đung Khi Google quyết định bạn là một robot. Davin: Yeah, khi Google quyết định bạn là một robot, bạn sẽ có được 503s. Vì vậy, đó là một tình trạng quá tải. Nếu bạn đã yêu cầu từ máy chủ quá nhiều, nó thường là tạm thời. Và hầu hết các bạn chú ý đến nó. Vì vậy, bạn thấy 503. Bạn có thể lấy một ít break, sau đó các 503s ra đi, và tất cả mọi thứ đều ổn cả. [01:05:20] Gabe: Bất động nhanh chóng, khi nào các bạn có được 500 có lẽ vấn đề này cuối cùng thiết lập? Có? [01:05:27] Đung Thông thường nếu máy chủ có một tập tin đặt không đúng chỗ hay [không nghe được] của họ máy [không nghe được]. [01:05:34] Gabe: Vì vậy, nó có thể là một cấu hình vấn đề trong PHP của bạn trên máy chủ của bạn. Nhưng nó có thể là một cái gì đó chỉ như một dấu chấm phẩy mà quên bạn. Nếu bạn đang gõ PHP, một số cú pháp không chính xác có thể giúp bạn có được một cái gì đó như thế. OK? [01:05:46] Davin: Cool. Bạn có muốn tôi làm chỉ là cho đến AJAX? [01:05:51] Gabe: [Không nghe thấy]. Davin: OK. Vì vậy, các DOM là gì? Gì DOM đứng cho? [01:05:55] Đung Tài liệu mô hình đối tượng. Davin: Nice. Và tại sao chúng ta thích nó? Awesome. Phải, vì vậy nó chỉ cho phép chúng ta truy cập HTML, truy cập vào trang của chúng tôi rất nhanh chóng. Tại sao? Bởi vì chúng tôi đang điều trị của chúng tôi trang, điều trị các thẻ HTML của chúng tôi, xử lý tất cả mọi thứ như thể họ đang đối tượng. Nếu chúng ta đang đối xử với họ như họ đang đối tượng, sau đó những gì chúng ta có thể làm gì? Vâng, chúng ta có thể gọi chức năng trên chúng. Và đây là lý do tại sao quan trọng? Vâng, bởi vì chúng ta sẽ sử dụng JavaScript để cập nhật HTML của chúng tôi, cập nhật các đối tượng này. Vì vậy, nếu chúng ta đối xử với họ như đối tượng, sau đó chúng ta có thể gọi chức năng trên chúng. Tôi đang đi để có được vào trong này một chút nhiều khi tôi đi vào JavaScript, nhưng bạn đã nhìn thấy tất cả như document.getElementById. Vì vậy, tài liệu là của bạn yếu tố, có yếu tố của ID, do đó, bạn sẽ nhìn đối với một số ID trong một thẻ HTML. Và sau đó, bạn có thể làm cái gì khác để mà. Ví dụ, như document.body, sau đó bạn có thể gắn thêm con. Vì vậy, bạn sẽ tìm thấy các tài liệu. Bạn có tài liệu. Bạn sẽ tìm thấy cơ thể. Bạn tìm thấy thi thể. Và sau đó, bạn sẽ gọi một số chức năng trên đó. Vì vậy, thêm con, và bạn có thể thêm một số mã HTML vào cuối bên trong cơ thể của bạn. Vì vậy, về cơ bản, bạn chỉ xử lý nó như một đối tượng. Bạn đang điều trị HTML thẻ như một đối tượng. Và nó làm cho nó rất dễ dàng và nhanh chóng đi qua chúng. Nhưng nó cũng cho phép bạn để gọi chức năng trên chúng vì vậy bạn có thể thao tác và thay đổi các yếu tố. [01:07:04] Gabe: Vì điều này, tại sao lại như vậy JavaScript một ngôn ngữ tốt đẹp để tương tác với HTML? Odds là, khi người ta đã lựa chọn ngôn ngữ cho các trình duyệt, cho phía khách hàng, JavaScript là thực sự tốt đẹp, nó thực sự tốt tại xử lý các đối tượng. Và các đối tượng được loại thích các đối tượng xuất hiện trong HTML, vì vậy nó rất dễ dàng cho JavaScript để làm điều đó loại xử lý. Davin: Nice. Vì vậy, đây chỉ là một ví dụ. Vì vậy, tôi nghĩ về bài kiểm tra cuối cùng của năm, hoặc có lẽ hai năm trước đây, chúng tôi yêu cầu bạn tạo ra một cây. Vì vậy, đây là chính xác những gì bạn muốn làm. Vì vậy, bạn bắt đầu với tài liệu. Và sau đó bạn về cơ bản chỉ cần nhìn vào các thẻ. Vì vậy, nếu bạn nhìn, chúng tôi bắt đầu với một tag HTML. Và sau đó, bạn sẽ có được manh mối về cách làm điều này dựa trên sự thụt vào. Vì vậy, đầu loại nhánh. Bên trong đầu, chúng tôi có một thẻ cho tiêu đề. Vì vậy, sau đó, chúng tôi có một tag tiêu đề. Và trong đó, chúng tôi có một số chuỗi. Và vì vậy chúng tôi đại diện một chuỗi trong một vòng tròn. Và tất cả các thẻ đang có trong ô vuông. [01:07:54] Và nếu bạn nhìn, nếu chúng tôi nghĩ về điều này như một cái cây, và chúng ta hãy nói rằng HTML là Là cha mẹ, sau đó đầu và cơ thể đang có được anh chị em ruột. Họ cả hai sẽ được trẻ em của phụ huynh. Vì vậy, bởi vì họ đang cả anh chị em, họ sẽ được loại bên cạnh nhau trong mô hình cây của chúng tôi. Và sau đó, về cơ bản bạn làm chính xác những điều tương tự. Vì vậy, không khó khăn, nhưng chúng tôi đã yêu cầu câu hỏi như thế này trước khi vào các bài kiểm tra. Gabe: Hiện ai có câu hỏi cho đến nay? Có nên? Davin: Cool. JavaScript, OK, những thứ tốt. Vì vậy, JavaScript, JavaScript là gì? Vâng, JavaScript is-- nó phức tạp, nhưng các là một số trong những điểm nổi bật mà bạn nên ghi nhớ. Đầu tiên, nó lỏng lẻo. Điều đó có nghĩa là gì? Vì vậy, PHP was-- yeah, có chuyện gì thế? [01:08:35] Đung Bạn không cần phải rõ ràng nhà nước kiểu biến nó được. Davin: Perfect. Vì vậy, ông cho biết bạn không phải nêu rõ kiểu của biến. Đó chính quyền. Vì vậy, trong C, nếu tôi đã có int i bằng 50, sau đó trong PHP, nó chỉ là như thế này, $ i, bằng 50. Sau đó, trong JavaScript, điều gì sẽ gọi được? Var, phải không? Nó muốn được như var i bằng 50. Nhưng bạn không cần phải có như, OK, đây là một int. OK, đây là một chuỗi. Không cần phải làm điều đó. Đây là một ngôn ngữ giải thích. Vì vậy, có nghĩa là gì? [01:09:04] Đung Không biên soạn. [01:09:06] Davin: Những gì không được biên dịch nghĩa là gì? Yeah? [01:09:11] Đung Bạn không có cơ cấu lại mã để cho nó sẵn sàng cho máy tính để chạy nó. Nó chỉ thực hiện tại thời điểm thực thi và máy tính [không nghe được]. Davin: Yeah, vì vậy nó sẽ đi qua một thông dịch viên. Nhưng bạn hoàn toàn đúng. Vì vậy, bạn sẽ không bao giờ để biên dịch nó, phải không? Khi bạn đã làm bạn PHP và mã JavaScript, bạn không bao giờ được gọi là biên dịch. Bạn không bao giờ được gọi là một cái gì đó như thực hiện hoặc bất cứ điều gì như thế. Đó là bởi vì nó giải thích. Vì vậy, mỗi khi nó đi qua trình duyệt, nó đi qua một thông dịch viên. Và đó sẽ giải thích nó chỉ trong thời gian thực ngay lập tức cho bạn. Vì vậy, một số mặt tích cực và tiêu cực là gì để có một ngôn ngữ giải thích và có một ngôn ngữ biên dịch? Vì vậy compiling-- yeah, có chuyện gì thế? [01:09:50] Đung Interpreted là chậm hơn. Davin: Theo nghĩa nào? [01:09:57] Đung Sau khi bạn biên dịch, bạn không có để làm bất kỳ bước bổ sung để thực hiện nó, trong khi đây [không nghe được]. [01:10:04] Davin: Phải, hoàn hảo. Vì vậy, những gì bạn nói là về cơ bản biên dịch rằng, khi bạn biên dịch, bạn có một rất nhiều chi phí trả trước, phải không? Bạn đang đi để biên dịch nó. Nhưng sau khi bạn biên dịch nó, trình biên dịch sẽ tối ưu hóa nó. Nó sẽ được nhanh chóng. Nó sẽ cơ bản được nhanh như nó có thể được. Với dịch, bạn không bao giờ có mà chi phí trả trước. Thay vào đó, nó sẽ hơi chậm mỗi lần duy nhất bạn giải thích nó. Và bạn sẽ phải giải thích nó mỗi lần duy nhất. Vì vậy, thay vì có này một chi phí thời gian, bây giờ bạn sẽ phải giải thích nó mỗi khi trang web ám. [01:10:29] Vì vậy, phiên dịch là tốt vì bạn không cần phải biên dịch nó, nhưng họ đang xấu trong mỗi thời gian các tải trang, đó là sẽ phải giải JavaScript này. Và nó sẽ chạy hơi chậm hơn nếu bạn đã biên dịch nó. Cho phép bạn communicate-- oh, chờ đợi. Được sử dụng để thao tác nội dung và hình thức. Chúng tôi chỉ nói chuyện về điều đó. Nó sử dụng DOM. AJAX, chúng tôi sẽ nhận được vào AJAX trong một chút. Và sau đó, đó là phía khách hàng. Vì vậy, PHP là phía máy chủ. JavaScript là phía khách hàng. Là những gì tích cực để điều đó không? Nó nói nó. Nó nhanh hơn, phải không? Bởi vì bạn không phải đối với: nó nhanh hơn. Bạn không cần phải giao tiếp với một số thiết bị khác. Nếu bạn chỉ là về bạn khách hàng, bạn sẽ không bao giờ sẽ phải đi và thấy những gì trên máy chủ và sau đó báo cáo lại hoặc một cái gì đó như thế. Vì vậy, phía khách hàng có xu hướng được nhanh hơn một chút. [01:11:15] Gabe: Yeah, nhưng điều này không có nghĩa là PHP nhanh hơn so với JavaScript hoặc bất cứ điều gì của như thế nào. Họ chạy loại trong cùng một tốc độ vì họ đang cả ngôn ngữ thông dịch. Điều đó là chậm đây là yêu cầu. Vì vậy, bạn đang thực sự đi tất cả các cách trên để Brazil để có được một số thông tin sống ở đó. Tuy nhiên, PHP và JavaScript, họ loại chạy trong cùng một tốc độ. Nó không phải một mà là nhanh hơn so với người khác. Điều này, cũng được, lừa câu hỏi ở đây. Vì vậy, không bao giờ trở thành JavaScript mã máy, đúng hay sai? [01:11:47] Đung False. Gabe: False. Nó đã trở thành máy mã bởi vì mã máy là điều duy nhất máy hiểu. Mặc dù nó không được biên dịch, nó vẫn trở thành mã máy vì người phiên dịch chỉ là một chương trình mà đi từng dòng và biến đổi dòng thành những gì máy tính hiểu được. OK? Cool. [01:12:08] Davin: Đây chỉ là một rất cơ bản hello world chương trình JavaScript. Vì vậy, tôi không biết if-- bạn đã nhìn thấy điều này. Nhưng bạn chỉ có HTML ở đây. Và thay vì thực sự đặt JavaScript trong thẻ script, vì vậy bạn nên thường đặt nó trong đầu. Bạn có thẻ script. Bạn thả nó ở đó. Tất cả chúng tôi đã thực hiện ở đây là chúng tôi đã liên kết in-- vì vậy chúng tôi đã liên kết trong một tập tin JavaScript như thế này. Và tất cả các bạn đã làm được điều này, phải không? Vì vậy, khi bạn đang sử dụng jQuery và underscore.js trong p-set cuối cùng, bạn không có tấn của mã trong tags kịch bản của bạn, bạn lên trong đầu. Bạn có thể làm điều đó, nhưng thay vì bạn chỉ cần kết nối nó vào. Và bạn đang liên kết nó trong chỉ giống như bạn làm với CSS. Vì vậy, nó chỉ làm cho nó dễ dàng hơn để đọc quá mã của bạn không thích dài dòng 1000 với tấn các chức năng mà bạn có thể không được sử dụng. [01:12:52] Thay vào đó, bạn chỉ cần liên kết nó trong. Nó compartmentalizes nó. Nó giống như viết một số tập tin tiêu đề, và sau đó bao gồm cả tập tin tiêu đề trong C. Hãy nghĩ về nó như thế này. Vì vậy, điều này làm gì? Vâng, điều này sẽ chạy. Nó sẽ cảnh báo. Vì vậy, bạn sẽ nhận được một chút bật lên gọi là hello world. Câu hỏi nhanh chóng, chỉ cần kiểm tra sự tỉnh táo, do đó, bạn thấy ở đây trong cơ thể, nói cơ thể, HTML ở đây. Điều gì đến đầu tiên? Tôi thấy cơ thể, HTML ở đây, hay để tôi nhìn thấy những cảnh báo đầu tiên? [01:13:19] Đung Alert. [01:13:20] Davin: Đúng vậy. Ông nói cảnh báo. Tại sao? [01:13:22] Đung Bởi vì bạn đi từ trên xuống dưới. [01:13:24] Davin: Yes. Perfect. Vì vậy, ông cho biết, bạn đi từ trên xuống dưới, đó là hoàn toàn chính xác. Bạn sẽ đi từ trên xuống dưới. Và trong JavaScript, jQuery, bạn có một chức năng đó là onload như thế, hoặc sẵn sàng, và nói rằng, OK, chờ cho đến khi tất cả các tập tin HTML này đã được nạp. Và sau đó, gọi JavaScript. Bởi vì chúng ta không có ở đây, các Điều đầu tiên mà sẽ xảy ra là nó sẽ đi từ trên xuống dưới. Nó sẽ đánh mà JS gọi, nó sẽ cảnh báo. Sau đó bạn nhấn OK, cảnh báo mà đi xa. Sau đó nó sẽ hiển thị bạn thân HTML ở đây. Nice. [01:13:54] OK, vì vậy chỉ cần thực sự nhanh chóng, bằng văn bản trong JavaScript là siêu nhanh. Để khai báo một biến, var tên. Vì vậy, trong C, bạn có int i, bạn có để khai báo những gì loại loại nó được. PHP, $. JavaScript, var. Chúng tôi đã nói chuyện về việc này. Được rồi, chúng ta hãy đi. [01:14:11] Loops, cùng một điều. Cùng một điều. Tờ khai chức năng, do giống như bạn đã thấy trong C. Điều duy nhất khác nhau là như vậy khi bạn nhận được với các ngôn ngữ lập trình khác, giống như khi bạn đưa 51 học kỳ tiếp theo và bạn đang làm với OCaml, bạn có thể đối phó với các chức năng ẩn danh. Vì vậy, đó là chính xác những gì bạn có ở đây. Vì vậy, bạn muốn đặt trong tổng, một số loại giá trị tiền. Nhưng bạn chỉ có thể làm việc đó một thời gian. Vì vậy, bạn không muốn gọi nó là chức năng Tóm lại, cung cấp cho nó một chức năng khai báo. Thay vào đó, bạn chỉ cần sử dụng nó như là một chức năng vô danh. Và bạn đã nhìn thấy điều này rất nhiều. Bạn sẽ thấy một ví dụ về này trong một vài slide. Vâng, chúng ta sẽ thấy. Gabe: Câu hỏi rất hay. Khi bạn có thể muốn sử dụng một chức năng vô danh ở đây? Về cơ bản, khi bạn muốn một cái gì đó, như một sự kiện, để xảy ra. Vì vậy, khi con chuột là nhấn vào, ví dụ, bạn muốn có một số chức năng để được gọi là. Vì vậy, để bạn vượt qua sự kiện này xử lý, bạn vượt qua sự kiện này, loại, các chức năng mà bạn muốn được gọi. Và những gì bạn đang đi qua là như thế, ở cuối trong ngày, chỉ là một con trỏ trỏ tới mà hướng dẫn, để các chức năng. Vì vậy, nó không giống như bạn đang đi qua mã toàn bộ, chỉ là một con trỏ đến các chức năng. Và sau đó, khi có ai đó nhấp chuột chuột, sau đó chức năng mà được gọi là. [01:15:17] Davin: Mảng, vì vậy bạn có một khai báo mảng. Sau đó, một mảng để đặt mọi thứ vào. Bất động nhanh chóng, những gì sẽ này in ra? Sẽ là yếu tố thứ ba là gì? [01:15:31] Đung "JS". [01:15:32] Davin: Phải, nó sẽ là "JS." Chờ đợi, đi lại. Chiều dài là gì? [01:15:37] Đung Ba. Davin: Ba, phải không? Chính xác những gì bạn nghĩ. OK, bây giờ đi. Mảng, bạn có thể thêm những thứ cho họ. Vì vậy, bạn có thể đi xa hơn giới hạn ban đầu của họ. Chỉ cần một cái gì đó để giữ trong tâm trí. PHP, JavaScript, họ là một chút bit dãi hơn về điều như thế. Đối tượng, rất giống cấu trúc trong C, rất nhiều giống như các mảng kết hợp trong PHP. Tất cả các bạn đã có kinh nghiệm với điều này. Vì vậy, JSON, khi bạn đang đi qua JSON qua lại trong p-thiết lập tám, đó là đối tượng của bạn. [01:16:03] Vì vậy, yeah, ví dụ, thực tế ví dụ nhanh chóng. Dưới đây là một đối tượng. Cách bạn tham khảo này đối tượng, vì vậy chỉ cần thực sự nhanh chóng, hãy nói rằng tôi muốn tìm ra, OK, khóa học là gì? Và do đó, các tên đối tượng ở đây là CS50. Và sau đó nếu tôi có một liên kết mảng, làm thế nào tôi sẽ làm điều đó? Tôi sẽ sử dụng một phím, phải không? Vì vậy, tôi có tên của mảng. Tôi có khung, dấu ngoặc kép, phím, báo giá cuối, khung cuối, và điều đó sẽ tham khảo đó phần tử bên trong mảng kết hợp của tôi. Làm thế nào để tham chiếu Tất nhiên bên trong đối tượng của tôi? Bất kỳ ai biết? [01:16:39] Đung [không nghe được]. [01:16:40] Davin: Có chuyện gì vậy? Đung CS50.course. Davin: Right, yeah. Vì vậy CS50.course. Vì vậy, cách các bạn tham khảo những điều bên trong một đối tượng JSON là với một dấu chấm. [01:16:48] Đung Bạn cũng có thể sử dụng cú pháp mảng. [01:16:53] Davin: OK, tiền phạt. [01:16:54] Gabe: Bạn cũng có thể sử dụng CS50 khung, chuỗi, giống như dấu ngoặc kép. Đung Tôi nghĩ nó giống hệt với PHP. Gabe: Đó là điều tương tự. Davin: Fine! Nhưng bạn sẽ thấy nơi khác này. Yeah, vì vậy tiếp tục đi. Đây là những gì tôi vừa nói. Vì vậy, vào một ví dụ JavaScript jQuery. Vì vậy, đây là DOM của tôi, phải không? Bất động nhanh chóng, vì vậy tôi có một đầu, hello thế giới, cơ thể. Tôi có một nút. Nó nói "đẩy tôi," vì vậy tôi muốn đẩy nó. Và tôi muốn làm một cái gì đó khi được nhấp vào. Phải, tiếp theo. [01:17:31] Phải, vì vậy đây là JavaScript của tôi. Vì vậy, jQuery chỉ là một dễ dàng hơn cách viết JavaScript. Vì vậy, đây, và những gì tôi sẽ chỉ cho bạn tiếp theo, sẽ là jQuery, là giống hệt nhau. Vì vậy, họ sẽ làm những điều tương tự. Chỉ cần jQuery có xu hướng được một chút dễ dàng hơn. Mọi người có xu hướng thích nó hơn. Nó có rất nhiều chức năng. Vì vậy, mọi người có xu hướng sử dụng jQuery. Tất cả các bạn sử dụng jQuery trong p-set cuối. Vì vậy, điều này sẽ làm gì? Điều gì sẽ JavaScript-- này để này chỉ là đồng bằng JavaScript. Điều này sẽ làm những gì? Nó sẽ làm gì? [01:18:03] Vì vậy, đầu tiên, bạn sẽ thấy cửa sổ onload. Phải không? Vì vậy, chúng tôi không thấy rằng trước. Vì vậy, đây là sẽ chờ cho đến khi toàn bộ tải cửa sổ. Vì vậy, nó sẽ đợi cho đến khi tải HTML, tất cả các hình ảnh trước khi nó bất cứ điều gì. Vì vậy, chúng ta hãy nói DOM của chúng tôi đã được nạp. Tất cả mọi thứ ở đó. Sau đó, những gì sẽ xảy ra? Yeah? [01:18:19] Đung nút xuất hiện. [01:18:22] Davin: Các nút đã có trước đó. Yeah, vì vậy của nút đã có. Nhưng điều này sẽ nói, OK, nếu tôi bấm nút, do đó, các nút là đã ở đó, giống như tag HTML. Chờ đợi, đi lại thật nhanh. Thẻ này đúng ngay ở đây là sẽ là một nút rồi. Đã có nút. Nhưng sau đó, các JavaScript tag, ngay tại đây, nó nói, OK, tôi muốn để có được phần tử bằng ID, để nút tìm kiếm chỉ nói, OK, tôi muốn bản đồ biến này để nút đó. Vì vậy, biến đó chỉ là một là cách dễ dàng hơn để truy cập vào nút đó. Và tôi nói, OK, nếu tôi bấm vào đó nút, vì vậy nếu tôi bấm vào phần tử đó, và yếu tố này đề cập đến nút, nếu tôi nhấp vào nó, sau đó tôi muốn gọi một chức năng. Đây là một trong những người vô danh chức năng, chúng tôi đã nói về. [01:19:03] Chỉ cần gọi một số chức năng. Bên trong hàm đó, về cơ bản một cái gì đó chúng tôi đã nhìn thấy rất nhiều, cảnh báo. Bạn bấm nút tìm kiếm. Nó sẽ cơ bản có một nút. Bạn nhấp vào nó. Bạn nhận được cảnh báo đó. X ra. Có bấy nhiêu thôi. Yeah? [01:19:16] Đung Vì vậy, nếu bạn đặt các script [Không nghe thấy], thẻ script trong HTML của bạn? [01:19:21] Davin: Bạn có thể đặt các script tag thẳng vào đầu bởi vì bạn có onload này. Nó cũng cho bạn có một nhấp chuột. Vì vậy, nó sẽ đợi cho đến khi bạn bấm vào một cái gì đó. Nhưng onload chỉ là để được an toàn, để đảm chắc chắn mọi thứ nạp vào HTML của bạn trước. Yeah? Bạn muốn nói điều gì đó? [01:19:40] Gabe: [Không nghe thấy]. Davin: Yeah. [01:19:42] Đung tránh Vì vậy onload xác định các nút tìm kiếm biến bằng cách nói document.getElementById nút tìm kiếm dấu chấm [không nghe được]. [01:19:49] Davin: Chắc chắn, nhưng sau đó chuỗi của bạn chỉ nhận được rất lớn. Chính xác, vì vậy đây là chỉ để làm cho nó dễ dàng hơn cho bạn, yeah. Có? [01:19:56] Đung chúng tôi đã làm ở đâu tạo window.onload? Hoặc document.ready? [01:19:58] Davin: Có, có. Có, có, tôi đã kiểm tra. [01:20:02] Gabe: Không để họ quan tâm. [01:20:03] Davin: OK, vì vậy tôi sẽ để cho bạn anyway. Vì vậy, về cơ bản, chỉ nói chung, vì vậy window.onload chờ đợi cho đến khi DOM của bạn, tất cả HTML của bạn, tải trọng. Nó chờ đợi cho đến khi tải hình ảnh của bạn. Nó chờ đợi cho đến khi tất cả mọi thứ tải. document.ready, nó chỉ chờ đợi cho đến khi tải DOM của bạn. Khi HTML là có tất cả, một lần DOM của bạn là có, bắt đầu chạy. Đó là sự khác biệt duy nhất. [01:20:23] Gabe: sanity nhanh kiểm tra ở đây. Vì vậy, điều này có thể được nhìn thấy loại giống như một dòng mã, phải không? Bởi vì nó là window.onload bằng một loạt các công cụ. Khi đọc JavaScript này, đúng hay sai, các chức năng được thực hiện. False. OK? Điều gì xảy ra ở đây, bạn chỉ cần đi qua chức năng này như một chức năng ẩn danh để window.onload. Và sau đó khi được nó đi để thực sự có được thực thi? Khi tải cửa sổ. Đó là một sự kiện. Vì vậy, đó là jus t điều chúng tôi nói về trước đó, phải không? Vì vậy, khi sự kiện xảy ra, chức năng sẽ xảy ra. Cùng một điều với các onclick. [01:20:59] Davin: OK, vì thế có người mất đi document.ready. Nhưng điều này sẽ là same-- chính xác Đung Các ký hiệu đô la, đó là một document.ready. Đó là một phím tắt. [01:21:07] Davin: Oh, đó là? OK, vì vậy các phương tiện này document.ready, shortcut. Nhưng điều này cũng giống như window.onload ngoại trừ cho rằng sự khác biệt nhỏ Tôi đã nói với bạn về. Và đây là jQuery. Vì vậy, đây là chính xác giống nhau thing-- này là JavaScript. Đây là just-- một số người nghĩ về nó như một trọng lượng nhẹ hơn, phiên bản kiểu dáng đẹp rằng có rất nhiều chức năng có thể bạn sẽ được sử dụng. Vì vậy, điều này không chính xác những điều tương tự. [01:21:34] Vì vậy, điều cần loại chỉ ra. Vì vậy, trong ví dụ khác, chúng tôi có document.getElementById, vì vậy chúng tôi đã từ lâu này chuỗi đó sẽ được các phần tử bằng bất cứ điều gì nó có ID. Đó là thay thế bằng cuộc gọi này ngay tại đây. Vì vậy, bạn thấy các ký hiệu đô la, sau đó bạn thấy quote, hashtag. Hashtag luôn là một chọn. Nó nói, OK, điều này đã làm với một ID. Bộ chọn cho một lớp học là gì? [01:21:56] Đung Dot. [01:21:57] Davin: Dot, phải. Nếu bạn chỉ cần đi tới chọn một tag, nó là gì? Nó chỉ là tag, chính xác. Và bạn có thể sử dụng ở đây, là tốt. [01:22:05] Gabe: Và bằng thẻ, chúng ta có ý nghĩa như div, ví dụ, hoặc đầu. [01:22:08] Davin: Hoặc cơ thể hoặc p hay bất cứ điều gì như thế, yeah. Vì vậy, ở đây, OK, thay vì nói document.getElementById, điều này chỉ là một điều chính xác. Chỉ trong jQuery, nó ngắn hơn. Vì vậy, nó đơn giản. Vì vậy, sau đó, không có thêm onclick, chỉ cần nhấp vào. jQuery chức năng, gọi chức năng này. Cảnh báo là chính xác như nhau. Vì vậy, đó là một chút nhỏ hơn, hoặc ít bit ngắn hơn, một ít người nghĩ rằng bit-- đó là một chút dễ dàng hơn để viết ra, một chút dễ dàng hơn để hiểu. Nhưng điều này là jQuery. Rất nhiều người có được một chút chút bối rối và lo lắng và họ nghĩ rằng, OK, jQuery khác với JavaScript. Tôi phải nhớ những hai việc khác nhau. Nó không phải. Ý tôi là, đó là cú pháp khác nhau. Nhưng jQuery là JavaScript. Nó chỉ là một vẻ phiên bản tốt hơn mà có thể được dễ dàng hơn để hiểu rằng người sử dụng. Gabe: Yeah, được Thành thật mà nói, rằng ký hiệu đô la mà bạn nhìn thấy trong jQuery, đó chỉ là tên của một hàm jQuery định nghĩa. Nó không có gì đặc biệt. Là Nó chỉ là tên của một hàm, giống như bạn có thể xác định dấu đô la. [01:23:03] Davin: Yeah, vì vậy nói về điều này. Một số điều hữu ích. Tôi đã nhìn lại những câu đố cũ. Trong vài trắc nghiệm quá khứ, họ đã phải sử dụng những thứ như thế này. Vì vậy document.ready, vì vậy chắc chắn rằng tất cả mọi thứ của nạp trước khi bạn bắt đầu làm việc. Chọn một ID, hoặc chọn một lớp, nó muốn chỉ được trích dẫn chấm một số lớp, cuối quote. Gửi, vì vậy nếu bạn đang nộp một mẫu đơn và cuộc gọi Chức năng này sau khi đơn nộp. Giá trị, vì vậy chúng ta hãy nói rằng tôi có một hình thức trình, giống như một tên người dùng, email, bất cứ điều gì. Tôi đã có một hộp văn bản. Vì vậy, tôi gõ vào hộp văn bản đó. Vâng, nếu bạn muốn để có được giá trị ra là hộp văn bản, bạn sử dụng dấu chấm val. Và sau đó, xuống đây, dot HTML là cùng cũng giống như tài liệu dot getElementById dot innerHTML. Vì vậy, đó là sẽ trở lại bạn HTML từ ID đó. Ở đây, bạn chỉ cần sử dụng một số ID hoặc bất cứ dấu chấm HTML. Điều đó sẽ nhận được HTML từ phần tử đó. Nếu bạn muốn thay đổi điều đó rồi HTML, bạn có thể vượt qua nó một cái gì đó. Vì vậy, bạn muốn được như chấm HTML, và sau đó bên trong, báo giá, HTML mới hoặc một cái gì đó. [01:24:05] Gabe: OK, vì vậy AJAX. Tôi thực sự muốn hiểu AJAX thực sự tốt. Vì vậy, tôi muốn các bạn để hiểu AJAX thực sự tốt. Bởi vì nếu bạn làm thế, bạn khá nhiều đi hiểu rõ mọi thứ đã làm với HTTP, PHP, JavaScript bởi vì tất cả đến với nhau trong AJAX. AJAX không phải là một ngôn ngữ. AJAX là một kỹ thuật. Và nó sử dụng rất nhiều công cụ khác nhau. AJAX là viết tắt của không đồng bộ XML JavaScript. Vì vậy, các phương pháp, ngôn ngữ, các dữ liệu. [01:24:36] Vì vậy, các ngôn ngữ chính mà chúng tôi sử dụng trong AJAX để kích hoạt tất cả mọi thứ và để xử lý tất cả mọi thứ sau đó là JavaScript. Đó là lý do tại sao nó liên quan rất gần với JavaScript. Và sau đó không đồng bộ là bởi vì chúng tôi không làm điều đó tất cả cùng một lúc khi chúng tôi đang tải trang. Đây là điều mà chúng ta có thể làm những loại song song. Ý tưởng chính đằng sau AJAX là bạn muốn nó để có được một số thông tin cụ thể. Ví dụ, khi bạn đang gõ mới Tên người dùng khi bạn đăng ký một tên người dùng, tên người dùng của tôi là abc123. Và sau đó, vào cuối của hình thức, bạn phải bấm Submit. Và nó đã phải đi đến các máy chủ, và sau đó kiểm tra xem trong các cơ sở dữ liệu, abc123 là đã có. Và nếu nó đã có, nó nói, Tên người sử dụng đã có trong cơ sở dữ liệu. Và họ, bạn phải điền ra toàn bộ mẫu một lần nữa. Và nó đã thực sự, thực sự xấu. [01:25:23] Và sau đó mọi người nói, OK, tại sao không có thể chúng ta chỉ làm một yêu cầu HTTP nhỏ để chỉ cần kiểm tra để xem liệu người dùng này là trong cơ sở dữ liệu trước khi người dùng đã phải nộp toàn bộ hình thức? Vì vậy, ví dụ, khi dùng xong gõ abc123, chúng ta hãy đi đến máy chủ một chút bit và chỉ có được một sự thật hay giả từ các máy chủ để xem đó là một tên người dùng hợp lệ hay không. OK, vì vậy đó là một trong những chính sử dụng của AJAX ngày nay vẫn còn. [01:25:49] Davin: Vì vậy, thực sự nhanh chóng, trong một cuộc gọi Ajax trong jQuery, bạn có thể có nghĩa rằng bạn muốn nó được đồng bộ. Bạn không nên làm điều này. Nhưng bạn có thể làm điều đó. Và nếu bạn đã làm điều đó, điều gì sẽ xảy ra? Vâng, ví dụ, khi bạn nhận tin tức hoặc bất cứ điều gì, Trình duyệt của bạn là chỉ cần đi để chờ đợi đến khi mà toàn bộ cuộc gọi hoàn tất thay vì để cho bạn làm khác điều ngay sau khi bạn nhấp vào nó. [01:26:14] Gabe: Nó không đi nữa. Oh my god. Xin lỗi! Yup. "Trong quá khứ, khách hàng cần thiết để yêu cầu toàn bộ nội dung của một trang web. " Đó là những gì tôi đã nói. Nó cho phép chúng tôi gửi GET hoặc POST thêm yêu cầu mà không có để tải lại trình duyệt của chúng tôi. Vì vậy, vào cuối ngày, chúng tôi thực sự làm cho một yêu cầu HTTP ở đây sử dụng JavaScript. Bởi vì trước đây, chúng tôi chỉ sử dụng JavaScript để thay đổi HTML rằng đã đến. Và bây giờ, chúng ta có thể sử dụng nó để giao tiếp với các máy chủ web là tốt. Cách này sẽ xảy ra là chúng tôi có các khách hàng. Davin là một khách hàng. Và anh có tất cả các JavaScript chạy vì HTML là câm. JavaScript là thông minh. Vì vậy Davin Davin có thông minh của mình một phần và một phần ngớ ngẩn của mình. Ông ấy sẽ sử dụng một phần thông minh của mình bây giờ. Ông ấy sẽ sử dụng JavaScript để yêu cầu, ví dụ, dù là trong abc123 cơ sở dữ liệu hay không. [01:27:04] Vì vậy Davin, xin vui lòng, bạn chỉ gửi cho tôi một yêu cầu HTTP. Cám ơn. Vì vậy, ông chỉ cần gửi một yêu cầu HTTP. Bạn thấy không? Và đó chỉ là cùng một cách rằng bất kỳ yêu cầu HTTP được gửi đi. Trình duyệt, Google Chrome hoặc một cái gì đó, là sẽ thấy rằng Davin của cố gắng để gửi một yêu cầu HTTP, sẽ giúp HM một chút. Và đó là sẽ đi tất cả các cách để các máy chủ. Bây giờ, các máy chủ sẽ có PHP ở đây, hoặc bất kỳ ngôn ngữ khác. Cũng giống như trong một yêu cầu HTTP bình thường. Đó là khá nhiều yêu cầu HTTP bình thường. [01:27:31] Và sau đó, các máy chủ sẽ nói, OK, Davin muốn tôi để kiểm tra xem abc123 này là trong cơ sở dữ liệu. Đi nói chuyện với các mô hình. Mô hình này cho biết nó không phải. abc123 là một tên người dùng tốt. Và sau đó, các máy chủ web sẽ sử dụng PHP để đưa ra một số hình thức tập tin. Nó có thể là nghĩa đen chỉ một tập tin có chứa "yes" trong nó, hoặc "không, hoặc một cái gì đó như thế. Nó có thể là bất kỳ tập tin. [01:27:54] Nó có thể giống như tôi sẽ Davin gửi một hình ảnh của một con vịt nếu nó ở trong các cơ sở dữ liệu và gửi một hình ảnh của một con chuột nếu nó không có trong cơ sở dữ liệu. Đó sẽ là loại câm, nhưng nó sẽ làm việc. OK, vì vậy tôi gửi một con vịt để Davin. Davin có một con vịt. Và bây giờ, ai sẽ là người để xử lý các con vịt? Phần thông minh Davin được nữa, vậy JavaScript, phải không? JavaScript đã gửi yêu cầu, và JavaScript sẽ nhận được yêu cầu và giải thích nó trong một số hình thức. [01:28:22] Và trong ý nghĩa này, nó sẽ nói, OK, nếu vịt sau đó tôi là tốt. Nếu hamster, sau đó tôi sẽ để nói, không, tên người dùng đã tồn tại trong cơ sở dữ liệu. Nhưng thông thường, bạn không sẽ gửi một con vịt. Bạn sẽ gửi một cái gì đó hơi thông minh hơn. Và những gì chúng tôi sử dụng là XML. Và gần đây, chúng tôi sử dụng JSON. JSON chỉ là JavaScript Object Notation, mà về cơ bản là bạn có được một toàn bộ đối tượng JavaScript. Và bạn đặt nó trong một tập tin, chỉ thích mà đối tượng CS50 rằng các bạn đã thấy. Bạn đặt nó trong một tập tin, và bạn gửi nó cho Davin. [01:28:53] Vì vậy, trong trường hợp này, tôi sẽ làm cho một đối tượng JavaScript và chỉ nói rằng, người dùng tồn tại, có. Hoặc người dùng tồn tại, không có. Và gửi lại cho anh. Và tại sao JSON? Bởi vì người ai nhận này là sẽ sử dụng JavaScript để xử lý các phản ứng. Và JavaScript hoạt động rất tốt vì nó được gọi là JavaScript Object Notation. Phải không? Vì vậy, ông chỉ có thể gọi một chức năng và nhận được đối tượng này tốt đẹp từ các phản ứng. Và sau đó, anh ta sẽ biết liệu người sử dụng đó là trong cơ sở dữ liệu hay không. [01:29:22] Vì vậy, bạn thấy, tất cả của nó xuất cùng nhau trong các máy chủ web, và sau đó có một yêu cầu HTTP và một phản ứng HTTP và tất cả mọi thứ. Vì vậy, chắc chắn các bạn hiểu cuộc gọi AJAX này bởi vì nó sẽ giúp bạn hiểu tất cả của khái niệm mà chúng ta đang nói về. [01:29:37] Vì vậy, đây là một ví dụ AJAX với jQuery. Và ở đây, chúng tôi làm với get JSON. Vì vậy, chúng tôi không cố gắng để có được một hình ảnh của một con mèo ở đây, hoặc một con vịt. Chúng tôi đang cố gắng để có được một tập tin JSON. Và sau đó chúng tôi chờ đợi cho đến khi nó được thực hiện, dot thực hiện. Điều đó có nghĩa là tôi đang chờ đợi sự đáp lại. Nó có thể mất một thời gian ngắn. Sau đó, bạn sẽ thấy một chút bốc. Nếu bạn muốn làm điều đó trong trang web của bạn. Vì vậy, dot thực hiện, và những gì xảy ra khi nó được thực hiện? Bạn vượt qua trong một ẩn danh chức năng, giống như chúng ta đã thấy trước đây. Bởi vì thực hiện là một sự kiện, chỉ như cách nhấp chuột hay bất cứ điều gì, cho jQuery. Vì vậy, bạn vượt qua trong chức năng này với dữ liệu, văn bản, trạng thái, và jqXHR. Và về cơ bản, đó là chỉ số biến mà bạn có thể sử dụng sau này để có trạng thái của yêu cầu HTTP, các dữ liệu mà nó sẽ để gửi lại cho bạn. Vì vậy, sau đó bạn có thể sau này giải thích nó và làm điều gì đó có ý nghĩa với nó. Và nếu nó không thành công, khi nó có thể thất bại? Vâng, khi yêu cầu HTTP cho bạn một 500 hoặc một cái gì đó như thế. Sau đó, nó sẽ cho bạn biết trạng thái, loại thất bại đó là, và tất cả các loại của sự vật. Bạn phải chắc chắn để xử lý cả hai trường hợp, nếu không chương trình đi điên. [01:30:42] Davin: Vì vậy, yeah, đây là chính xác những gì bạn thấy trên cuối cùng p-thiết lập của bạn. Các cuộc gọi AJAX thực tế là trong JSON get. Đó là cuộc gọi. Và sau đó, dot thực hiện giống như nó kiểm tra nếu nó thành công. Nếu thành công, bạn muốn để làm điều gì đó với dữ liệu. Bạn nhận được trở lại từ đó JSON yêu cầu dữ liệu. Đó là những gì bạn nhận lại. Vì vậy, nếu bạn nhớ từ p-thiết lập của bạn, rất nhiều bạn như khung dữ liệu i hoặc bất cứ điều gì, dot link hoặc tiêu đề. Cái đang trở lại từ đó JSON, bất cứ điều gì các lĩnh vực trong đó đối tượng JSON, đó là những gì bạn đang nhận lại. Dữ liệu là những gì bạn đang nhận lại. Tình trạng văn bản, chỉ cần một cái gì đó cho phép bạn biết những gì đã xảy ra. Và sau đó, các jqXHR, đó chỉ là jQuery yêu cầu XML HTTP. Đó chỉ như một đối tượng. Và sau đó thất bại, giống như Gabe nói. Gabe: Trong ví dụ nhỏ của chúng tôi abc123 chỉ để kiểm tra xem đó là trong cơ sở dữ liệu hay không, các dữ liệu sẽ là một cái gì đó bạn sẽ làm gì, nếu tên người sử dụng dữ liệu dot tồn tại, đó là những gì bạn tạo ra cho PHP bạn, nếu tên dữ liệu chấm dùng tồn tại, sau đó Tôi sẽ cảnh báo, người dùng tên đã tồn tại. Khác, tôi chỉ cần đi để cho người sử dụng tiến hành điền vào mẫu. OK, an ninh, thoáng mát. [01:31:50] Davin: Muốn tôi? [01:31:52] Gabe: Tôi thích cái này. Vì vậy, cái gì đó trông quen thuộc. Chúng tôi đã gần hoàn tất. Vì vậy, đây chỉ là ví dụ các bạn đã thấy trong lớp. Bạn đã sử dụng argv1 đây. Điều đó giống như một đối số dòng lệnh. Và chúng tôi đang sao chép mà mem vào một bộ đệm có kích thước 12. Vấn đề ở đây là gì? Buffer overflow! Bởi vì chúng tôi có một bộ đệm có kích thước 12. argv1 có thể có một kích thước của hai tỷ USD. Chúng tôi không làm bất kỳ việc kiểm tra biên giới. Vì vậy, chúng ta có thể sao chép rất nhiều bộ nhớ. Và chúng tôi sẽ đặc biệt xấu về việc này. Những gì chúng ta có thể làm đó là rất, rất có ý nghĩa trong trường hợp này? Có? Đung Một phần của hai tỉ thứ chứa mã thực thi mà trả [Không nghe thấy]. Gabe: Chính xác. Vì vậy, đó là các loại điều mà mọi người sử dụng để jailbreak iPhone, ví dụ. Vì vậy, đó là điều mà. Bởi vì bạn chỉ có thể làm cho thiết bị thực thi bất kỳ mã mà bạn thích. Việc sửa chữa, vì vậy việc sửa chữa rất dễ dàng. Chỉ cần kiểm tra đối với các giới hạn. Bạn kiểm tra null vì chúng tôi luôn luôn kiểm tra cho null khi chúng tôi đang làm việc với chuỗi. Và sau đó, bạn nên tận dụng chiều dài chuỗi trước. Và nếu chuỗi chiều dài là một chuỗi hợp lệ chiều dài, đó là trong vòng 0 và 12, sau đó chúng tôi đang tốt. [01:33:03] Davin: Nếu bạn không kiểm tra null, thực sự nhanh chóng, những gì sẽ xảy ra? Nó sẽ seg lỗi. Tại sao nó seg lỗi? Bởi vì bạn đang gọi điện thoại strlen về null. Gabe: Yeah. Đúng hay sai, sử dụng một mật khẩu là một ý tưởng tốt. [01:33:19] Đung False. [01:33:20] Gabe: False. Sử dụng nhiều mật khẩu, và, những người lâu lớn. Biểu tượng khóa móc đảm bảo an ninh. [01:33:26] Đung False. [01:33:27] Gabe: False. Nó không có nghĩa là bất cứ điều gì. Nó chỉ là một biểu tượng. SSL bảo vệ chống lại một người đàn ông trong cuộc tấn công trung. Đung False. Gabe: False. OK, vì vậy tất cả những người này là sai. Nice. [Không nghe thấy] Muốn nói về điều này? Đến lượt bạn. Davin: Các loại tấn công, người đàn ông ở giữa. Một người đàn ông trong cuộc tấn công trung là gì? Đung [không nghe được]. Davin: Nếu bạn gửi một HTTP yêu cầu, họ có thể làm được điều này, phải không? Nhưng nếu bạn đang gửi HTTPS, họ có lẽ sẽ không thể làm được điều này. Có rất nhiều điểm cùng kết nối của bạn. Bạn có router. Bạn có máy chủ DNS. Nếu ai đó có thể thể chất xem những gì bạn đang gửi, vậy ai đó có thể thực sự có được từ bạn, khách hàng, và các máy chủ, và là có thể nhìn thấy những gì bạn đang gửi, đây là một người đàn ông trong cuộc tấn công trung. Vì vậy, để xem những gì bạn đang cố gắng để có được từ các máy chủ, hoặc là có thể see-- tồi tệ hơn, bạn có thể có thể nhìn thấy cookie hay một cái gì đó như thế. [01:34:16] Vì vậy, ví dụ, nếu bạn không sử dụng SSL, ông có thể có thể nhìn thấy ID phiên của bạn cookie. Và điều này được gọi là việc cướp quyền vì anh thấy ID cookie, và sau đó anh ta có thể đi đến đó website và giả vờ là bạn. Bởi vì chỉ thích trong PHP, nhớ khi chúng ta đăng nhập, chúng ta làm gì? Chúng tôi thiết lập session ID bằng ID. Vì vậy, nhận dạng bạn. Đó là lý do tại sao bạn có thể xem danh mục đầu tư của bạn và danh mục đầu tư không phải ai khác. [01:34:38] Vâng, nếu tôi có thể có được cookie, sau đó tôi có thể đăng nhập vào trang đó. Và sau đó, tôi chỉ có thể nhìn thấy công cụ của bạn và bắt đầu mua và bán công cụ. Vì vậy, đó là việc cướp quyền. Nhưng bạn không phải nhằm để bạn có thể có thể sử dụng những người đàn ông trong cuộc tấn công trung ngay cả khi họ đang sử dụng SSL. Nhưng bạn không nên có khả năng. Nếu họ đang sử dụng SSL, Bạn không thể phiên cướp. Tại sao? Bởi vì nó là tất cả mã hóa, phải không? nếu nó được mã hóa, và tôi vẫn là một người đàn ông trong trung học, tôi vẫn nhận được dữ liệu của bạn. Đó là tốt. Nhưng nó được mã hóa. Vì vậy, tôi có thể không thực sự sử dụng nó. Vì vậy, đó là hai. [01:35:09] Bất động nhanh chóng, qua trang web giả mạo yêu cầu. Đó chỉ là nếu có một liên kết và liên kết mà làm điều gì đó rằng bạn không nghĩ rằng nó nên làm. Vì vậy, ví dụ, nếu liên kết được sẽ mua cổ phiếu hoặc bán cổ phiếu, và bạn không biết điều đó. Bạn nhấp vào liên kết, đã gửi một yêu cầu, mua hoặc bán cái gì đó bạn không có nghĩa là để làm. Đó là điều đó. [01:35:25] Kịch bản chéo trang web, vì vậy ở đây, bạn đang đi qua trong qua biến q, thay vì đi qua trong một số loại giá trị, có lẽ q là giống như một tên. Vì vậy, thay vì đi qua q equals Davin hoặc một cái gì đó như thế, nếu bạn không sử dụng HTML ký tự đặc biệt, nếu bạn không thoát khỏi này để chắc chắn rằng nó OK, sau đó tôi có thể vượt qua trong thay vào đó, hãy nói rằng ở đây tôi đang nói in hoặc một cái gì đó như thế, sau đó tôi có thể vượt qua trong một cuộc gọi ở đây kịch bản. [01:35:51] Vì vậy, sau đó, thay vì chỉ nhận được một biến, Sau đó tôi sẽ thực hiện các cuộc gọi kịch bản này. Vì vậy, bên trong kịch bản mà gọi, nó làm gì? Tài liệu dot vị trí, đó là sẽ thay đổi vị trí của các tài liệu. Vì vậy, tôi sẽ chuyển hướng đến một nơi khác. Nó được gọi là anh chàng xấu trong ví dụ này, rất tốt. Không thể nghĩ đến chữ. Và sau đó, những gì thậm chí Tệ hơn nữa là tôi sẽ để sau đó thiết lập cookie, mà là một số biến tôi có trong trang web này. Tôi sẽ đặt nó bằng vào tài liệu dot cookie. Vì vậy, tôi sẽ để ăn cắp cookie của bạn. Và tôi sẽ chuyển hướng một số thông tin cho một trang web mà bạn không nên truy cập. Và tất cả điều này xảy ra bởi vì bạn không thoát ra những gì bạn đã thấy. Yeah? [01:36:29] Đung vậy chỉ cần làm cho rõ ràng, đó là vulnerable.com đó là dễ bị tổn thương này. Vì vậy, liên kết mà có thể xuất hiện trên bất kỳ trang web nào. Ai đó nhấp chuột vào nó, đi vào vulnerable.com. Bạn có một cookie để vulnerable.com. Hãy nói rằng Facebook là dễ bị tổn thương, vì vậy facebook.com. Bạn có Cookie Facebook của bạn. Điều này đang làm, bạn sẽ facebook.com, nó ngay lập tức chuyển hướng bạn badguy.com, nhưng bao gồm cả thông tin cookie của bạn. Vì vậy, nó là một chuyển hướng nhanh chóng, nhưng Cookie Facebook của bạn được bao gồm với chuyển hướng đó, và đó là cách họ [không nghe được]. Gabe: Yeah, có một số điều rất bình mọi người có thể làm gì nếu có này. Ví dụ, nếu Facebook cho phép tất cả mọi người để thay đổi tên người dùng của bạn, và họ đã không làm bất kỳ kiểm tra sự tỉnh táo, vì vậy bạn có thể chèn một điều rằng JavaScript thay đổi hình ảnh của bạn vào một hamster. Và đó chèn cùng JavaScript vào tất cả mọi người đã xem trang của bạn. Vì vậy, tất cả mọi người đã xem trang của bạn có những điều tương tự trong tên người dùng. Và bởi vì nó là một virus, nó lây lan theo cấp số nhân. Davin: Chúng tôi sẽ bỏ qua cuối cùng một, và sau đó chúng tôi đang thực hiện. Vì vậy, đây chỉ là một ví dụ khác. Vì vậy, đây là họ không thoát bảng SQL của họ. Vì vậy, bạn có thể thả nó. Vì vậy, bạn muốn thoát ra khỏi mọi thứ. Đó là ví dụ trước với các ứng dụng web. Xin lỗi, chúng tôi chạy một chút muộn. Ngày mai, xin lỗi! Ngày mai, chúng tôi có giờ làm việc. Vì vậy, giờ làm việc trong Cabbot 8:00-11:00. Giờ làm việc là đúng cho câu đố.