1 00:00:00,000 --> 00:00:02,270 >> [리뷰 : 퀴즈 1] 2 00:00:02,270 --> 00:00:04,620 [알리 Nahm, Oreoluwa Barbarinsa, 루카스 프레이 타스, 롭 보우 덴] [하버드 대학] 3 00:00:04,620 --> 00:00:07,660 [이 CS50입니다.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [루카스 프레이 타스] 모든 사람을 환영합니다. 이 퀴즈 1에 대한 리뷰 기사입니다. 5 00:00:11,610 --> 00:00:15,040 그냥 부인,이입니다 - 내 말은, 우리가 다루려고하는거야 6 00:00:15,040 --> 00:00:17,770 가능하지만, 한 많은 자료가 의미하지 않습니다 7 00:00:17,770 --> 00:00:20,780 우리는 퀴즈 1에서 할 수있는 일을 모두 커버하는 것입니다. 8 00:00:20,780 --> 00:00:25,270 그래서 당신은 또한 강의 봐, 섹션, 당신이 할 수있는 모든 일을해야합니다. 9 00:00:25,270 --> 00:00:28,240 퀴즈 1 일 수요일 다음 주 수요일에있을 것입니다. 10 00:00:28,240 --> 00:00:33,800 그래서 공부를해야합니다. 그것은 첫 번째 퀴즈처럼 꽤 많이 될 것 11 00:00:33,800 --> 00:00:36,390 해당 형식에 대한,하지만 아마 훨씬 더 될 것입니다. 12 00:00:36,390 --> 00:00:39,600 내가 50을했을 때 적어도 작년, 나는 훨씬 더 생각했다. 13 00:00:39,600 --> 00:00:42,410 그래서 많이 공부합니다. 14 00:00:42,410 --> 00:00:45,190 >> 나는 데이터 구조를 커버하는거야 및 허프만 코딩. 15 00:00:45,190 --> 00:00:47,910 따라서, 많은 사람들이 복잡 생각 무언가 16 00:00:47,910 --> 00:00:51,930 그러나 나는 가능한 한 쉽게 만들기 위해 노력하겠습니다. 17 00:00:51,930 --> 00:00:56,330 우선, 우리가 너희들이 퀴즈 1 알고 싶은이다 18 00:00:56,330 --> 00:01:00,970 내가 제시하는거야 데이터 구조의 각각의 개념에 대한 설명을 이해합니다. 19 00:01:00,970 --> 00:01:03,960 즉, 당신이하지 않는 것을 의미한다 실제로 20 00:01:03,960 --> 00:01:07,020 퀴즈 1 해시 테이블을 구현한다. 21 00:01:07,020 --> 00:01:10,250 우리는 당신이 전체의 해시 테이블을 구현하지 않습니다 어쩌면 우리는하려고합니다 22 00:01:10,250 --> 00:01:13,090 당신은 몇 가지 기능을 구현할 수 있도록하기 위해, 23 00:01:13,090 --> 00:01:16,940 가장 일반적인 작업,하지만 우리는 당신이 모든 것을 구현하지 못할 것입니다. 24 00:01:16,940 --> 00:01:21,010 따라서 각 데이터 구조의 뒤에 개념을 이해하는 것이 중요합니다 25 00:01:21,010 --> 00:01:23,510 또한 당신이 C 코드 할 수 있는지, 26 00:01:23,510 --> 00:01:27,880 그들 각각의 데이터 구조가 단지 가장 일반적인 작업. 27 00:01:27,880 --> 00:01:30,090 또한, 포인터와 구조체를 검토 할 수 28 00:01:30,090 --> 00:01:33,470 그들은 이러한 데이터 구조에 많이 나타납니다 때문이다. 29 00:01:33,470 --> 00:01:37,380 >> 첫째, 연결리스트. 연결리스트는 실제로 배열과 매우 유사하다, 30 00:01:37,380 --> 00:01:39,930 하지만, 연결리스트와 어레이 사이의 차이, 31 00:01:39,930 --> 00:01:45,160 우선, 연결리스트는 매우 유연한 크기를 가지고있다 32 00:01:45,160 --> 00:01:50,060 어레이에서 어레이에 대한 매우 큰 크기를 선택하는 하나를 가지고있는 동안, 33 00:01:50,060 --> 00:01:53,710 그래서 당신은, 당신이 배열의 모든 데이터를 저장 할 수있을 거라고 알고 34 00:01:53,710 --> 00:01:59,370 또는 당신은 배열의 유연한 길이가의 malloc를 사용해야합니다. 35 00:01:59,370 --> 00:02:03,680 연결리스트에서 그것은 단지 더 많은 요소를하는 것은 매우 쉽습니다, 36 00:02:03,680 --> 00:02:07,210 링크 된 목록에 추가 요소를 넣어 또는 요소를 제거합니다. 37 00:02:07,210 --> 00:02:09,370 실제로, 링크 된 목록이 정렬되지 않도록하려면, 38 00:02:09,370 --> 00:02:13,950 당신이 검색하고 일정 시간의 요소를 제거 할 수 있습니다, 39 00:02:13,950 --> 00:02:16,800 그래서 O (1) 시간은, 그래서 아주 편리합니다. 40 00:02:16,800 --> 00:02:20,660 당신은, 노드 항상 MALLOC 기억에주의하고 무료로이 41 00:02:20,660 --> 00:02:25,510 당신이하지 않으면, 당신은 메모리 누수가있을 것이다해서. 42 00:02:25,510 --> 00:02:31,480 그래서 링크 목록 - 노드의 정의는 우리가 바로 거기에 무슨 같다. 43 00:02:31,480 --> 00:02:35,110 나는 INT의 N을 넣어,하지만 당신은 당신이 원하는 어떤 데이터를 저장할 수 있습니다. 44 00:02:35,110 --> 00:02:37,280 당신은 문자열을 저장하고 싶다면, 괜찮아. 45 00:02:37,280 --> 00:02:41,690 당신이 구조체를 저장할 경우에, 당신이 원하는대로, 이중 괜찮아요. 46 00:02:41,690 --> 00:02:44,630 난 그냥 여기에 예제 INT의 N을 넣어. 47 00:02:44,630 --> 00:02:46,800 그리고 당신은 다음 노드에 대한 포인터가있다. 48 00:02:46,800 --> 00:02:51,940 그래서, 기본적으로, 링크 된리스트는 일부 데이터를 가지며, 그리고, 그것은 다음 노드로 포인트. 49 00:02:51,940 --> 00:02:56,710 는 연결리스트의 마지막 요소의 경우, NULL로 가리킬 것입니다. 50 00:02:56,710 --> 00:02:59,060 그래서이 연결리스트의 예입니다. 51 00:02:59,250 --> 00:03:05,960 >> 좋아, 지금은 연결리스트의 요소를 삽입 할 경우의 우리가 무엇을해야하는지 살펴 보자. 52 00:03:05,960 --> 00:03:08,810 첫째, 함수 삽입 void 형식이 될 것입니다 53 00:03:08,810 --> 00:03:11,350 나는 아무것도 반환하지 않기 때문에. 54 00:03:11,350 --> 00:03:14,200 그리고 인수로 int를 걸릴거야, 55 00:03:14,200 --> 00:03:17,090 내가 삽입 할 무엇을 알고 싶어하기 때문이다. 56 00:03:17,090 --> 00:03:21,840 그래서 가장 먼저 할 일은 무엇인가? 글쎄, 난 newnode에 MALLOC한다, 57 00:03:21,840 --> 00:03:24,240 그래서 첫 번째 줄입니다. 58 00:03:24,240 --> 00:03:27,580 난 그냥 연결리스트에 넣어 새 노드를 만드는거야. 59 00:03:27,580 --> 00:03:32,360 그래서 내가 무엇을 할 수 있습니까? 글쎄, 우리가 알고있는 연결리스트의 구현 방식에 60 00:03:32,360 --> 00:03:38,180 클래스에서, 우리는 항상 전역 변수로 머리를 넣어. 61 00:03:38,180 --> 00:03:41,800 그래서 우리가 할 수있는 것은 머리를 변경합니다. 62 00:03:41,800 --> 00:03:44,300 나는이 새로운 노드가 새로운 머리가 될 수 있습니다, 63 00:03:44,300 --> 00:03:46,670 그것은 이전의 머리를 가리거야. 64 00:03:46,670 --> 00:03:50,390 우리가 어떻게 할 수 있습니까? 나는이해야 할 첫 번째 것은 65 00:03:50,390 --> 00:03:54,770 , 값을 새 노드의 'N'을 변경합니다 66 00:03:54,770 --> 00:03:57,530 함수에 전달 하였다. 67 00:03:57,530 --> 00:04:01,050 그런 다음 newnode 다음의 머리가 될 것입니다. 68 00:04:01,050 --> 00:04:05,800 머리는 newnode 될 것입니다. 그래서 아주 간단합니다. 69 00:04:05,800 --> 00:04:10,090 노드를 삭제하기 위해, 우리는 같이 할 수 있습니다 - 70 00:04:10,090 --> 00:04:14,790 우리가 할 수있는 한 가지 방법은 말을하는 것입니다, 71 00:04:14,790 --> 00:04:18,160 좋아, 내가 삭제하려는 경우, 예를 들어, 3, 72 00:04:18,160 --> 00:04:24,850 내가 할 수있는 것은 바로 이전 노드를 포인트 73 00:04:24,850 --> 00:04:27,580 (3)의 다음 노드. 74 00:04:27,580 --> 00:04:29,400 그래서 난 그냥 그런 일을 할 것입니다. 75 00:04:29,400 --> 00:04:33,400 그러나 그 일의 문제는 무엇인가? 76 00:04:33,400 --> 00:04:37,400 난 메모리 누수가있다, 그래서 나는 더 이상 숫자 3에 액세스 할 수 없습니다. 77 00:04:37,400 --> 00:04:42,480 그 문제는 내가 그 노드를 확보 할 수있을 않을 것입니다. 78 00:04:42,480 --> 00:04:45,360 난 메모리 누수와 (이해할 수없는)이 나를 미워하는 것입니다해야하겠습니다. 79 00:04:45,360 --> 00:04:49,370 그래서 그 대신 그 일을, 나는 아마 임시 포인터가 있어야합니다. 80 00:04:49,370 --> 00:04:53,210 그래서 온도를 넣어. 내가 삭제할 노드를 가리키는 것입니다. 81 00:04:53,210 --> 00:04:58,170 그리고 나서 다음 노드로 지점 이전 노드를 이동할 수 있습니다 82 00:04:58,170 --> 00:05:00,390 I 삭제할 노드의. 83 00:05:00,390 --> 00:05:02,730 그리고 마지막으로, 나는 포인터를 확보 할 수 있습니다. 84 00:05:02,730 --> 00:05:07,480 나는 바로 거기에 생성 된 포인터를 해제해야합니까?에게 85 00:05:07,480 --> 00:05:09,560 나는에, 그냥 있기 때문에이 없습니다 - 86 00:05:09,560 --> 00:05:13,430 차이는이 노드의 malloc를 사용하여 만든 것입니다, 87 00:05:13,430 --> 00:05:17,280 이 하나는 그냥 스택의 NULL 스위치로 선언하는 동안 그래서, 힙입니다. 88 00:05:17,280 --> 00:05:20,000 그래서 나는 그것을 해제 할 필요가 없습니다. 89 00:05:20,000 --> 00:05:22,030 >> 좋아요. 그래서 지금의이 스택에 대해 이야기하자. 90 00:05:22,030 --> 00:05:24,680 스택은 매우 간단합니다. 91 00:05:24,680 --> 00:05:29,540 우리는 단지 배열을 사용하여 클래스에서 스택과 큐를했다, 92 00:05:29,540 --> 00:05:32,820 하지만 당신은 알고 있어야합니다 - 그냥 인식 93 00:05:32,820 --> 00:05:40,740 당신은 또한뿐만 아니라 링크 된 목록을 사용하여 큐에 스택을 할 수있다. 94 00:05:40,740 --> 00:05:44,460 배열을 가지고있는 경우에 어떤 일이 스택 것입니까? 95 00:05:44,460 --> 00:05:46,810 스택은, 우선, 크기를 가져야한다. 96 00:05:46,810 --> 00:05:49,950 당신은 당신이 지금 가지고있는 스택의 크기 무엇 저장해야합니다. 97 00:05:49,950 --> 00:05:52,980 또한 당신은, 숫자의이 경우, 배열이있을 것입니다 98 00:05:52,980 --> 00:05:55,120 당신이 원하는 경우에, 그 배열이 될 수 있습니다 99 00:05:55,120 --> 00:06:00,380 문자열, 구조체의 배열, 저장하려는 아무것도. 100 00:06:00,380 --> 00:06:03,240 스택 소개 : 스택과 연결리스트의 차이 101 00:06:03,240 --> 00:06:08,590 스택 만 스택에 배치 된 마지막 요소에 액세스 할 수 있습니다. 102 00:06:08,590 --> 00:06:11,770 그것은 처음으로 중, 마지막에 불렀다. 103 00:06:11,770 --> 00:06:15,090 당신이 트레이의 스택을 가지고 것처럼, 104 00:06:15,090 --> 00:06:17,670 당신이 스택의 상단에 트레이를 두는 경우에, 105 00:06:17,670 --> 00:06:22,670 당신은 다른 트레이에 액세스 할 수 있도록 먼저 트레이를 제거해야합니다. 106 00:06:22,670 --> 00:06:26,310 그것은 스택과 같은 것입니다. 107 00:06:26,310 --> 00:06:31,220 제가 예를 들어, 스택에 요소를 추가 할 경우에, 나는 무엇을해야 하는가? 108 00:06:31,220 --> 00:06:34,070 그것은 푸시라고, 그것은 매우 간단예요. 109 00:06:34,070 --> 00:06:37,130 당신이해야 할 첫 번째 일이 확인되면, 스택의 크기 110 00:06:37,130 --> 00:06:40,150 크거나 스택의 용량과 동일하지 않다. 111 00:06:40,150 --> 00:06:45,810 이미 전체 용량에 있다면, 당신은 무엇을 추가 할 수 있기 때문이다. 112 00:06:45,810 --> 00:06:51,140 하지 않을 경우 다음, 당신은 스택에 요소를 추가해야합니다. 113 00:06:51,140 --> 00:06:54,530 그리고 마지막으로, 크기를 증가. 그래서 그것은 매우 간단합니다. 114 00:06:54,530 --> 00:06:57,140 그래서 난 그냥 숫자 2를 추가합니다. 115 00:06:57,140 --> 00:07:00,350 나는 팝 싶은 경우에, 이는 내가 제거 할 것을 의미합니다 116 00:07:00,350 --> 00:07:03,870 첨가 원소의 값을 리턴 된 마지막 요소 117 00:07:03,870 --> 00:07:09,180 제가 확인해야 할 첫 번째 일은 스택이 비어 있지 않은 것입니다. 118 00:07:09,180 --> 00:07:11,510 비어 있다면, 난 아무것도 반환 할 수 있기 때문이다. 119 00:07:11,510 --> 00:07:14,820 그 경우는 -1을 반환하고 있습니다. 120 00:07:14,820 --> 00:07:18,960 그렇지 않으면, 나는 사양의 크기를 감소시킬거야, 121 00:07:18,960 --> 00:07:22,510 숫자 (s.size)를 반환합니다. 122 00:07:22,510 --> 00:07:27,230 이유는 크기를 감소하고 s.size를 반환 했습니까? 123 00:07:27,230 --> 00:07:30,930 이 경우에는, 사양 사이즈 4를 가지고 있기 때문에, 정보 124 00:07:30,930 --> 00:07:33,810 나는 네 번째 요소를 반환하려면, 오른쪽? 125 00:07:33,810 --> 00:07:36,030 그러나 네 번째 요소의 인덱스는 무엇인가? 세. 126 00:07:36,030 --> 00:07:44,510 나는이 크기 않기 때문에 - 3이 될 것입니다, 난 그냥 (s.size) s.numbers을 반환 할 수 있습니다 127 00:07:44,510 --> 00:07:48,410 그것은 3이기 때문에. 그래서 그냥 인덱스입니다. 128 00:07:48,410 --> 00:07:50,380 >> 이제 큐. 큐는 거의 같은 것입니다. 129 00:07:50,380 --> 00:07:54,950 유일한 차이는, 대신에 마지막에있는 데, 먼저 밖으로 130 00:07:54,950 --> 00:07:57,480 먼저 아웃, 먼저이 있습니다. 131 00:07:57,480 --> 00:07:59,460 당신이 콘서트에 가서 기다리고있어 아마 경우, 132 00:07:59,460 --> 00:08:04,260 대신 큐의 스택을 가지고 있다면 당신은 행복하지 않을 것이다. 133 00:08:04,260 --> 00:08:07,730 올 마지막 사람이된다는 것은 콘서트를 입력하는 최초의 사람이 될 것입니다. 134 00:08:07,730 --> 00:08:09,760 당신은 아마 행복하지 않을 것입니다. 135 00:08:09,760 --> 00:08:15,020 큐에서 얻을 수있는 첫 번째 사람은 밖으로 얻을 수있는 첫 번째 사람이다. 136 00:08:15,020 --> 00:08:18,720 따라서 큐의 정의에서, 어레이 크기를 갖는, 게다가 137 00:08:18,720 --> 00:08:23,360 또한 스택 헤드 인덱스 헤드를 가져야한다. 138 00:08:23,360 --> 00:08:29,000 지금 첫 번째 요소가있다. 139 00:08:29,000 --> 00:08:32,710 대기열에는 스택에 대한 강요와 같은 것입니다. 140 00:08:32,710 --> 00:08:34,980 당신은 매우 순진했다, 당신은 말할 것이다, 141 00:08:34,980 --> 00:08:39,289 내가 추진했던 것처럼 잘, 나는 정확히 같은 일을 할 수 있습니다. 142 00:08:39,289 --> 00:08:44,030 이 용량을 초과 아니라면 그냥 확인할 수 있습니다. 143 00:08:44,030 --> 00:08:48,760 이 경우, 나는 그렇지 않으면 그냥 새 값을 내보낼 수 있습니다, false를 반환 144 00:08:48,760 --> 00:08:50,630 다음의 크기를 증가. 145 00:08:50,630 --> 00:08:52,750 그런데 왜이 문제입니까? 146 00:08:52,750 --> 00:08:55,010 의이 예제를 보자. 147 00:08:55,010 --> 00:08:57,020 나는 잔뜩 대기열에 노력하고있어, 148 00:08:57,020 --> 00:08:58,390 그리고 난 큐에서 제거하고 큐에거야. 149 00:08:58,390 --> 00:09:00,550 이 명령의 많은,하지만 그것은 매우 간단합니다. 150 00:09:00,550 --> 00:09:04,790 나는 5 큐에, 그래서 5를 추가하는 것, 다음 7 해요 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, 그리고 그 때 나는 뭔가를 큐에서 제거하려면, 152 00:09:09,310 --> 00:09:12,000 이는 내가 첫 번째 요소를 제거하기 위하여려고하고 있다는 것을 의미한다. 153 00:09:12,000 --> 00:09:14,640 그래서, 오른쪽 숫자 3을 제거하는거야? 154 00:09:14,640 --> 00:09:17,320 첫 번째 요소. 좋아요. 155 00:09:17,320 --> 00:09:21,450 나는 다른 무언가를 큐에 저장하려고하면 이제 무슨 일이 일어날까요? 156 00:09:21,450 --> 00:09:24,290 내 구현에 따르면, 157 00:09:24,290 --> 00:09:31,040 나는 인덱스 q.size 다음 번호를 넣어 가고 있었다. 158 00:09:31,040 --> 00:09:35,140 이 경우, 크기는 8이고, 159 00:09:35,140 --> 00:09:38,640 그래서 인덱스 8은 마지막 위치에 바로 여기에있을 것입니다. 160 00:09:38,640 --> 00:09:43,900 내가 바로 여기에 1을 큐에 저장하려고하면, 나는 마지막 위치를 덮어 쓰기 될 것이다 161 00:09:43,900 --> 00:09:45,870 완전히 잘못된 숫자 1,에. 162 00:09:45,870 --> 00:09:49,870 내가 원하는 것은 주위에 감싸고 첫 번째 위치로 이동합니다. 163 00:09:49,870 --> 00:09:52,870 어쩌면 당신은 잘, 그냥 확인해야합니다 말할 것 164 00:09:52,870 --> 00:09:55,600 사실 뭔가를 넣을 수있는 경우. 165 00:09:55,600 --> 00:09:58,560 그렇지 않은 경우, 난 그냥 오, 새로운 전 용량, 말 166 00:09:58,560 --> 00:10:02,010 실제로 용량 - 1, 당신은이 요소를 넣을 수 없습니다. 167 00:10:02,010 --> 00:10:06,150 그러나 문제는 무엇인가? 문제는 내가 바로 여기 모든 큐에서 제거하는 경우 168 00:10:06,150 --> 00:10:08,240 다음 나는 다른 무언가를 추가하려고, 그냥 말할 것입니다, 169 00:10:08,240 --> 00:10:11,210 글쎄, 당신은 0 전체 용량에 있었다. 170 00:10:11,210 --> 00:10:13,620 그래서 큐가 사라 졌어요. 171 00:10:13,620 --> 00:10:16,990 당신은 주위에 포장해야하고, 주위에 포장하는 방법 172 00:10:16,990 --> 00:10:22,040 당신 비전 및 기타 psets를 배운 사람은 모드를 사용하는 것을. 173 00:10:22,040 --> 00:10:29,090 당신은 당신이 q.size + q.head 할 것이라고 이유를 이해하기 집에서 시도 할 수 있습니다 174 00:10:29,090 --> 00:10:31,080 모드 용량,하지만 당신은 바로 여기에 체크하면, 175 00:10:31,080 --> 00:10:34,760 우리는 그것이 작동하는 것을 볼 수 있습니다. 176 00:10:34,760 --> 00:10:37,760 그래서 마지막 예에서, 8 q.size했다 177 00:10:37,760 --> 00:10:47,590 그것은 여기에 배열의이 위치 때문에 헤드는 1이었다. 178 00:10:47,590 --> 00:10:51,970 그래서 + 1 8, 9가됩니다. MOD 용량 9 0 일 것입니다. 179 00:10:51,970 --> 00:10:56,640 그것은 인덱스 0으로 갈 것입니다. 우리는 올바른 위치에있을 것입니다. 180 00:10:56,640 --> 00:10:59,750 그리고 집에서 큐를 시도하십시오. 181 00:10:59,750 --> 00:11:04,950 몇 가지 중요한 사항 : 스택과 큐의 차이를 이해하려고합니다. 182 00:11:04,950 --> 00:11:11,620 집에서, 대기열, 대기열에서 제외, 푸시와 팝을 구현하기에 매우 익숙해하려고합니다. 183 00:11:11,620 --> 00:11:16,560 당신이 그들 각각을 사용합니다 때 또한 이해합니다. 184 00:11:16,560 --> 00:11:22,830 >> 그럼 Pokemons들은 무리와 함께 10 초 동안 휴식을 취할 수 있습니다. 185 00:11:22,830 --> 00:11:26,080 그리고 이제 다시 데이터 구조에 가자. 186 00:11:26,080 --> 00:11:29,770 테이블을 해시. 많은 사람들이 해시 테이블을 무서워했다. 187 00:11:29,770 --> 00:11:33,650 문제는 6 세트에, 맞춤법 검사기. 188 00:11:33,650 --> 00:11:35,980 해시 테이블과 시도는, 많은 사람들이 그들을 무서워. 189 00:11:35,980 --> 00:11:38,540 그들은 이해하기 너무 어려운 것 같아요. 그래? 190 00:11:38,540 --> 00:11:41,490 [롭 보덴] 문제는 5를 설정합니다. >> 문제는, 그래, 5를 설정합니다. 감사합니다 롭. 191 00:11:41,490 --> 00:11:43,370 그래. 여섯 허프 N '퍼프, 그래했다. 192 00:11:43,370 --> 00:11:49,340 문제는 맞춤법 검사기 된 5 설정하고 해시 테이블이나 시도를 사용하도록했다. 193 00:11:49,340 --> 00:11:55,360 많은 사람들은 이해하기 매우 어려운 있다고 생각하지만, 실제로는 매우 간단입니다. 194 00:11:55,360 --> 00:12:01,290 해시 테이블은 기본적으로 무엇입니까? 해시 테이블은 링크 된리스트의 배열이다. 195 00:12:01,290 --> 00:12:06,730 배열 및 해시 테이블 간의 유일한 차이점 196 00:12:06,730 --> 00:12:09,730 해시 테이블에 입력 해시 함수라는 것을 가지고있다. 197 00:12:09,730 --> 00:12:12,080 해시 함수는 무엇입니까? 198 00:12:12,080 --> 00:12:13,970 너희들은 여기에서 읽을 수 있는지 모르겠어요. 199 00:12:13,970 --> 00:12:16,090 이것은 해시 테이블의 예이다. 200 00:12:16,090 --> 00:12:19,220 그래서 당신은 31 요소 배열이 있다고 볼 수 있습니다. 201 00:12:19,220 --> 00:12:22,440 그리고 우리는 해시 테이블에서 수행하는 해시 함수를 가지고있다 202 00:12:22,440 --> 00:12:26,660 그 키를 번역하는 것입니다, 각 인덱스에 값 int. 203 00:12:26,660 --> 00:12:31,740 만약, 예를 들어, 내가 B. 해리슨을 위해 선택하고 싶은 경우에, 204 00:12:31,740 --> 00:12:34,190 내 해시 함수 B. 해리슨을 둘 것입니다, 205 00:12:34,190 --> 00:12:36,960 그리고 해시 함수는 24을 반환한다. 206 00:12:36,960 --> 00:12:40,930 그래서 내가 24 B. 해리슨을 저장할 것을 알고있다. 207 00:12:40,930 --> 00:12:46,580 그래서 그냥 배열을 갖는 해시 테이블을 가지는 사이의 차이입니다. 208 00:12:46,580 --> 00:12:48,740 해시 테이블에서 당신은 당신이 말하려고하는 기능을 가지고 있습니다 209 00:12:48,740 --> 00:12:54,740 위치를 저장할 데이터를 저장하는 데 사용됩니다. 210 00:12:54,740 --> 00:12:57,040 해쉬 함수의 경우, 해시 함수 찾고 싶은 211 00:12:57,040 --> 00:13:00,600 그 결정하고 잘 분산이다. 212 00:13:00,600 --> 00:13:07,810 여기에서 볼 수 있듯이, 당신은 내가 상점에 원하는 많은 양의 데이터가 실제로 19 살 것을 볼 213 00:13:07,810 --> 00:13:12,470 대신 모든 자유가 31, 30 및 29을 사용. 214 00:13:12,470 --> 00:13:16,920 그래서 사용되는 해시 함수는 매우 잘 분산되지 않았습니다. 215 00:13:16,920 --> 00:13:20,710 우리가 잘 분산 말할 때, 그것은 우리가하려는 것을 의미합니다 216 00:13:20,710 --> 00:13:26,520 대략적으로, 적어도 하나 또는 각각에 대해 2 - 217 00:13:26,520 --> 00:13:32,190 마찬가지로, 어레이 인덱스의 각각에 대해 1 또는 제 2 차이. 218 00:13:32,190 --> 00:13:43,950 당신은 대략, 배열의 각 연결 목록에서 같은 수의 원소를 갖고 싶어. 219 00:13:43,950 --> 00:13:48,600 그리고는, 해시 테이블에 유효한의 해시 테이블로 볼 수 있는지 확인하기 쉽습니다. 220 00:13:48,600 --> 00:13:51,770 >> 그런 나무. 이 나무입니다. 221 00:13:51,770 --> 00:13:56,400 컴퓨터 과학에있는 나무는 어떤 이유로 거꾸로입니다. 222 00:13:56,400 --> 00:14:00,150 그래서 여기 당신이 나무의 뿌리와 그 잎이있다. 223 00:14:00,150 --> 00:14:05,630 당신은 부모와 자녀에 대한 명칭을 알아야한다. 224 00:14:05,630 --> 00:14:12,880 각 노드는 부모 아래에있는 노드입니다 그 아이가있다. 225 00:14:12,880 --> 00:14:19,660 따라서, 예를 들어, 2, 바로 3 다른 아이의 부모가 될 것입니다 226 00:14:19,660 --> 00:14:25,290 3 1의 부모와가 다른 어린이가 될 것입니다있다. 227 00:14:25,290 --> 00:14:29,990 그리고 1 등 3의 아이가 될 것,하고. 228 00:14:29,990 --> 00:14:34,610 우리는 훨씬 더 흥미로운, 이진 검색 트리라고이 229 00:14:34,610 --> 00:14:39,040 한 노드의 오른쪽에있는 모든 값 230 00:14:39,040 --> 00:14:41,660 바로 여기에, 오른쪽에있을거야 - 오른쪽에, 231 00:14:41,660 --> 00:14:46,780 루트의 요소보다 큰 것입니다. 232 00:14:46,780 --> 00:14:49,780 오른쪽에 내가 여기 숫자 5가있는 경우, 모든 요소 233 00:14:49,780 --> 00:14:51,940 5보다 큰 것, 왼쪽에 있습니다 234 00:14:51,940 --> 00:14:56,770 모든 요소는 5 이하가 될 수 있습니다. 235 00:14:56,770 --> 00:14:58,780 왜 유용합니다? 236 00:14:58,780 --> 00:15:01,660 글쎄, 난 숫자 7이 여기에 있는지 확인하려는 경우, 예를 들어, 237 00:15:01,660 --> 00:15:05,960 난 그냥 처음 5에 가서 내가 볼거야, 5 7보다 크거나 작? 238 00:15:05,960 --> 00:15:09,540 그것은 더 큰, 그래서 나는 트리의 오른쪽에 있어야 할 것 알고있다. 239 00:15:09,540 --> 00:15:13,980 그래서 보는 훨씬 적은 물건이있다. 240 00:15:13,980 --> 00:15:19,520 이진 검색 트리 노드의 구현에서, 난 그냥 데이터를해야하는거야 241 00:15:19,520 --> 00:15:21,750 그래서 INT N은, 당신은 또한 문자열을 가질 수있다 242 00:15:21,750 --> 00:15:23,630 또는 당신이 원하는 무엇이든. 243 00:15:23,630 --> 00:15:28,100 당신이 큰 것을 정의에주의해야합니다 적은 것입니다. 244 00:15:28,100 --> 00:15:30,390 그래서 당신은 문자열이 있다면, 예를 들어, 당신은 정의 할 수 있습니다 245 00:15:30,390 --> 00:15:34,690 오른쪽에있는 모든 것들 큰 길이를 가지고가는 것을, 246 00:15:34,690 --> 00:15:40,940 왼쪽 하단 길이를해야 할 것입니다, 그래서 당신에게 달렸죠. 247 00:15:40,940 --> 00:15:44,930 >> 어떻게 BST 대해 찾아 구현할 수 있습니까? 248 00:15:44,930 --> 00:15:47,840 우리가해야 할 것이다 첫번째 것은 뿌리가 NULL인지 확인합니다. 249 00:15:47,840 --> 00:15:50,920 이 NULL의 경우, 일이없는 것을 의미한다 250 00:15:50,920 --> 00:15:53,330 당신은 나무, 권리가 없기 때문에? 251 00:15:53,330 --> 00:15:55,790 그래서 false를 반환합니다. 252 00:15:55,790 --> 00:15:58,740 그렇지 않으면, 나는 큰 수 있는지 확인하는거야 253 00:15:58,740 --> 00:16:01,720 루트 값보다. 254 00:16:01,720 --> 00:16:04,250 나는 오른쪽에있는 요소를 찾으려고거야 255 00:16:04,250 --> 00:16:08,590 나무의. 256 00:16:08,590 --> 00:16:11,310 당신은 내가 여기에 재귀를 사용하고 있음을 참조하십시오. 257 00:16:11,310 --> 00:16:14,150 덜 있다면 그리고, 나는 왼쪽 볼거야. 258 00:16:14,150 --> 00:16:18,330 그리고 마지막으로, 그렇지 않은 경우보다 작거나하지 아니라면, 259 00:16:18,330 --> 00:16:20,660 그것이 값 자체의 것을 의미한다. 260 00:16:20,660 --> 00:16:23,010 그래서 난 그냥 true를 반환. 261 00:16:23,010 --> 00:16:26,360 내가 만약, 만약, 경우에 사용하는 것이 여기에서 볼 수 있습니다. 262 00:16:26,360 --> 00:16:30,820 그리고, 기억 퀴즈 0에서, 우리는, 만약의 경우,면을 가진 문제가 있었다 263 00:16:30,820 --> 00:16:32,780 당신은 비 효율성을 찾을하기로했다, 264 00:16:32,780 --> 00:16:35,180 과 비 효율성이 경우 사용되는 것이 었습니다. 265 00:16:35,180 --> 00:16:39,060 당신은 다른 경우, 만약 그렇지 않으면, 경우에 사용하고, 다른 있어야합니다. 266 00:16:39,060 --> 00:16:44,240 경우와 다른 경우 및 다른 여기에 그래서, 나는 다른 사용해야합니까? 267 00:16:44,240 --> 00:16:46,200 않는 사람 - 그래? 268 00:16:46,200 --> 00:16:51,140 [학생의 말하기, 청취 불가] 269 00:16:51,140 --> 00:16:53,480 그거 완벽하네요. 그래서 그녀는 문제가되지 않는다는 것을 말하는 것 270 00:16:53,480 --> 00:16:55,930 다만 때문에 우리가 전에했던 비 효율성 271 00:16:55,930 --> 00:16:59,550 것을, 어떤 조건이 만족 된 경우 어쩌면 때문에 272 00:16:59,550 --> 00:17:03,570 그래서 당신은 작업을 수행했습니다,하지만 당신은 다른 모든 조건을 확인하려고했다. 273 00:17:03,570 --> 00:17:06,319 그러나이 경우는 즉시 반환므로, 문제가되지 않는다. 274 00:17:06,319 --> 00:17:09,220 그래서 당신이 경우 다른 사용할 필요가 없습니다. 275 00:17:09,220 --> 00:17:11,740 >> 그리고 마지막으로,의이 시도에 대해 이야기하자, 276 00:17:11,740 --> 00:17:13,800 이는 모든 사람의 마음에 드는 것입니다. 277 00:17:13,800 --> 00:17:15,980 시도는 배열의 나무입니다. 278 00:17:15,980 --> 00:17:20,369 이 값을 조회하는 것은 매우 빠르고, 그러나 많은 메모리를 사용한다. 279 00:17:20,369 --> 00:17:22,530 그리고 단어를 필터링하는 것이, 그래서 때 280 00:17:22,530 --> 00:17:27,920 휴대폰의 전화 번호부처럼, 예를 들어, 내가 모르는, 구현하려는 281 00:17:27,920 --> 00:17:30,440 당신은 B를 입력 할 수 있도록하려면 282 00:17:30,440 --> 00:17:32,510 그냥 B를 가진 사람의 이름이 283 00:17:32,510 --> 00:17:37,960 그것은 예를 들어, 시도를 사용하여 해당 구현하는 것은 매우 쉽다. 284 00:17:37,960 --> 00:17:39,820 어떻게 시도에서 노드를 정의합니까? 285 00:17:39,820 --> 00:17:43,910 당신은 is_word 될 것입니다 부울을 가지고있다. 286 00:17:43,910 --> 00:17:48,660 즉, 해당 노드 전에 모든 문자를 사용하는 것을 나타냅니다 287 00:17:48,660 --> 00:17:51,920 당신은 단어를 형성 할 수 있었다, 288 00:17:51,920 --> 00:17:57,230 다음 노드에 대한 포인터의 배열을해야합니다. 289 00:17:57,230 --> 00:18:03,120 당신은 우리가 부모 노드의 배열, 그래서 노드 * 배열이 있다고 볼 수 있을까요? 그래? 290 00:18:03,120 --> 00:18:06,050 그래서 그 작동 방식을 살펴 보자. 맞춤법 검사를 들면, 291 00:18:06,050 --> 00:18:08,230 우리는 (27)의 요소의 배열을 가지고, 292 00:18:08,230 --> 00:18:12,150 우리는 모든 문자 플러스 아포스트로피가 있기 때문에. 293 00:18:12,150 --> 00:18:17,800 내가 보드에 쓸 수 있도록 원하기 때문에 여기에 전에 그냥 2를 사용하겠습니다. 294 00:18:17,800 --> 00:18:20,230 좋아요. 그래서이 시도의 예입니다. 295 00:18:20,230 --> 00:18:25,600 난 그냥 첫 번째 노드를 정의하면, 나는 2 요소의 배열을해야합니다 296 00:18:25,600 --> 00:18:29,290 NULL 2 포인터는, 그래서 난 그냥 'A'와 'B'를두고있다. 297 00:18:29,290 --> 00:18:32,430 그리고 is_word을 말한다 부울을거야. 298 00:18:32,430 --> 00:18:34,420 그것은 첫 번째에 대해 false가 될 것, 299 00:18:34,420 --> 00:18:37,370 다만, 때문에 그 전에 당신은 어떤 문자를 사용하지 않습니다. 300 00:18:37,370 --> 00:18:40,900 그래서 빈 단어는 단어가 아닙니다. 그래서 거짓. 301 00:18:40,900 --> 00:18:46,320 나는이 사전에 'A'를 추가하고 싶은 경우에, 나는 무엇을해야 할 것인가? 302 00:18:46,320 --> 00:18:49,760 난 그냥 ''에 대한 새 노드를 MALLOC해야 할 것입니다, 303 00:18:49,760 --> 00:18:54,630 다음 true로 단어를 추가 할 수 있습니다. 304 00:18:54,630 --> 00:19:00,180 그래서 그냥 '이'사실이 될 것입니다 한 것을 나타냅니다. 이해가가? 305 00:19:00,180 --> 00:19:04,120 나는 '바'를 추가 할 경우, 나는 'B'에 대한 malloc에​​ 1로해야합니다, 306 00:19:04,120 --> 00:19:07,550 그리고, 나는, false로 부울을 설정하는거야 307 00:19:07,550 --> 00:19:10,160 그 자체로 'B'는 단어가 없기 때문입니다. 308 00:19:10,160 --> 00:19:13,010 그럼 난 또 다른 ''하나, 그래서 '바'를 MALLOC거야, 309 00:19:13,010 --> 00:19:16,290 그리고 난 사실에 단어의 설정하는거야. 310 00:19:16,290 --> 00:19:18,950 '바'는 단어이기 때문이다. 311 00:19:18,950 --> 00:19:21,910 내가보고 싶은 경우에 그리고 B는이 사전에있는 경우 312 00:19:21,910 --> 00:19:26,730 그냥 첫 번째, 'B'로 갈 수 있습니다. 내가 내려 가서, 나는 단어를보고, false를 말합니다. 313 00:19:26,730 --> 00:19:30,110 그래서 단어 아니다. 나는 '바'를 확인하고 싶은 경우에, 314 00:19:30,110 --> 00:19:38,010 나는 첫 번째, 'B'로 이동 한 다음 'A'로 이동, 그리고 사실 확인, 그래서 단어입니다. 이해가가? 315 00:19:38,010 --> 00:19:41,950 많은 사람들은 시도에 의해 혼란스러워. 아니? 316 00:19:41,950 --> 00:19:44,740 >> 마지막으로, 허프만 코딩. 허프만 코딩은 매우 유용합니다 317 00:19:44,740 --> 00:19:47,550 메모리를 저장 한 텍스트 파일을 압축하려면, 318 00:19:47,550 --> 00:19:52,270 다만 때문에 예를 들어, 'A'와 'E'를 사용하여 많은 시간, 319 00:19:52,270 --> 00:19:57,710 너희들이 많은 'Q'또는 'Z'를 사용하면 문서에서,하지만 난 모르겠어요. 320 00:19:57,710 --> 00:20:02,040 모든 단일 문자를 단지 1 바이트를 갖는 것은, 321 00:20:02,040 --> 00:20:08,520 하나 하나 - 우리는 ASCII 테이블이 256 자 매우 최적이 아닌, 322 00:20:08,520 --> 00:20:11,410 당신이 더 많이 사용하는 일부 문자가 있습니다해서, 323 00:20:11,410 --> 00:20:15,180 그래서 당신은 아마 사람들을 위해 더 적은 메모리를 사용한다. 324 00:20:15,180 --> 00:20:17,560 어떻게 허프만 코딩을 사용합니까? 325 00:20:17,560 --> 00:20:20,010 우리는 허프만 트리를 수행해야합니다. 326 00:20:20,010 --> 00:20:23,370  허프만 트리 노드가 327 00:20:23,370 --> 00:20:27,760 문자, 'C', 'B', 'A'처럼 될 것입니다 기호가 그, 328 00:20:27,760 --> 00:20:32,990 당신이 어떤 문자, 단어가 텍스트로 표시되는 주파수의 주파수, 329 00:20:32,990 --> 00:20:36,280 당신에 대한 허프만 트리를 만드는 있다고 330 00:20:36,280 --> 00:20:41,800 다음 허프만 트리의 좌측을 가리 예정 노드 331 00:20:41,800 --> 00:20:47,210 그리고 오른쪽 가리 예정 다른 노드. 그래서 그냥 나무를 좋아한다. 332 00:20:47,210 --> 00:20:49,440 어떻게 허프만 트리를 구축합니까? 333 00:20:49,440 --> 00:20:54,020 당신은 가장 낮은 주파수를 가지고있는 2 노드를 선택하는 것입니다. 334 00:20:54,020 --> 00:20:56,490 당신은 넥타이가있는 경우는 2 노드를 선택하는 것입니다 335 00:20:56,490 --> 00:20:59,870 뿐만 아니라 낮은 ASCII 값이 있는지 확인합니다. 336 00:20:59,870 --> 00:21:02,420 그럼 당신은 그 2 노드 중 새 트리를 만들거야 337 00:21:02,420 --> 00:21:08,030 즉, 부모 노드에 결합 된 주파수를해야 할 것입니다. 338 00:21:08,030 --> 00:21:13,240 그리고 당신은 숲에서 아이들이 2 명을 제거하는 것입니다 339 00:21:13,240 --> 00:21:15,570 부모와 함께 그들을 대체합니다. 340 00:21:15,570 --> 00:21:18,930 그리고 당신은 당신이 숲에서 1 나무를 때까지 반복하는 것입니다. 341 00:21:18,930 --> 00:21:23,840 그래서 당신이 ZAMYLA에 대한 허프만 트리를 수행하는 방법을 살펴 보자. 342 00:21:23,840 --> 00:21:29,220 당신은 모든 문자가 'A'를 제외하고 주파수 1을 가지고 여기에서 볼 수 있습니다; 주파수 2가있다. 343 00:21:29,220 --> 00:21:34,090 그래서 내가 ASCII 값과 주파수의 순서에 넣어 모든 문자에 대한 노드를 만들었습니다. 344 00:21:34,090 --> 00:21:40,090 내가 처음 트리를 만들 수 있다면, 그것은 'L'과 'M'과 함께있을 것입니다. 345 00:21:40,090 --> 00:21:43,100 그래서 여기에 있습니다. 한 쌍의 주파수는 2 될 것입니다 346 00:21:43,100 --> 00:21:49,470 그것이 + 1이기 때문에, 가장 낮은 주파수를 가진 다음 2 'Y'와 'Z'입니다. 347 00:21:49,470 --> 00:21:53,180 2의 주파수를 가지고 - 그리고 제가되는 것은 그들 모두가 있습니다. 348 00:21:53,180 --> 00:22:00,470 따라서 다음 중 하나의 최저 ASCII 값을 가지고있는 사람은 어떤 것들입니까? 349 00:22:00,470 --> 00:22:04,830 'A'와 'L'. 그래서 새로운 노드를 작성, 350 00:22:04,830 --> 00:22:09,930 그리고 마지막으로, 4, 2, 그래서 2는 왼쪽에있을 것입니다. 351 00:22:09,930 --> 00:22:12,430 그리고 이것은 허프만 나무입니다. 352 00:22:12,430 --> 00:22:16,060 내가 약간의 텍스트를 기록 할 그런 경우에, 353 00:22:16,060 --> 00:22:24,440 같은 허프만 트리를 사용하여 텍스트로 변환하는 이진 매우 간단합니다. 354 00:22:24,440 --> 00:22:30,220 I가 왼쪽으로 이동하면 0 및 오른쪽으로 이동하는 것을 말할 경우, 예를 들어, 1 355 00:22:30,220 --> 00:22:32,410 무엇을 표현하는 것입니다? 356 00:22:32,410 --> 00:22:35,530 과 같이 1, 1, 오른쪽, 너무 좋아, 357 00:22:35,530 --> 00:22:40,370 다음 너무 왼쪽 0, L 것, 다음 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 그래서 1, 0, 그래서 그냥 1, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 그리고, 0, 1, 그래서 'Z'. 360 00:22:47,540 --> 00:22:52,170 그리고 1, 0, 0 - 없음. 361 00:22:52,170 --> 00:22:56,780 0, 0은 'Y', 그래서 게으른 것입니다. 362 00:22:56,780 --> 00:23:06,060 그래서 나를 위해 모두의, 롭은 이상 걸릴 것. 363 00:23:06,060 --> 00:23:08,400 >> [롭 보덴] 그래서, 주 7 물건. 364 00:23:08,400 --> 00:23:11,390 우리는 정말 빠른에 가서 많이 있어요. 365 00:23:11,390 --> 00:23:13,430 비트 연산자, 버퍼 오버 플로우, 366 00:23:13,430 --> 00:23:16,760 CS50 라이브러리, 다음, HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 15~20분 등 모두. 368 00:23:20,990 --> 00:23:24,330 비트 연산자. 당신이 알 필요가 그들 중 6있다. 369 00:23:24,330 --> 00:23:31,200 비트 및 비트 또는, XOR, 왼쪽 시프트, 오른쪽 시프트, 그리고. 370 00:23:31,200 --> 00:23:35,420 마우스 오른쪽 단추로 이동하고 당신은 거의 모든 강의에서 본 없습니다. 371 00:23:35,420 --> 00:23:40,480 우리는 빨리 여기에 갈거야,하지만이 존재 6 있다는 것을 알고하는 것이 좋다. 372 00:23:40,480 --> 00:23:45,070 비트 연산자는 + 4 3을 할 때처럼 기억하십시오. 373 00:23:45,070 --> 00:23:49,420 당신은 3과 4의 진을 취급하지 않습니다. 374 00:23:49,420 --> 00:23:56,550 비트 연산자를 사용하면 실제로 숫자 3과 4의 개별 비트 다루고있다. 375 00:23:56,550 --> 00:23:59,120 >> 그래서 우리는 말을 가장 먼저 한 비트가 아닌 376 00:23:59,120 --> 00:24:02,340 과 용도 모두 모든 비트를 반전합니다. 377 00:24:02,340 --> 00:24:05,500 당신이 C에서이 작업을 작성하는 경우, 그래서 여기에, 당신은 그것을 쓸 것 378 00:24:05,500 --> 00:24:09,380 ~ 11011 또는 무엇이든, 당신은 그것이 ~ 4처럼 쓴다 379 00:24:09,380 --> 00:24:12,970 다음은 4의 이진 표현을 플립 것입니다. 380 00:24:12,970 --> 00:24:24,800 그래서 여기에, 1의에 ~ 약간의 이진수 1101101 정확히 0의 모든 1의를 플립 것입니다 및 모든 0의의. 381 00:24:24,800 --> 00:24:27,600 내가 거기에 말하는 것처럼, 이것의 사용 빈도, 382 00:24:27,600 --> 00:24:30,830 우리는 몇 가지 숫자에 도달 할 좋아하고 우리가 조금에 볼 수있다 383 00:24:30,830 --> 00:24:35,460 모든 비트는 그들 중 하나를 제외하고, 1 곳. 384 00:24:35,460 --> 00:24:38,560 그래서 수를 표현하는 것이 더 쉽다 385 00:24:38,560 --> 00:24:40,630 단지 하나의 비트가 설정되는 경우, 386 00:24:40,630 --> 00:24:44,650 다음 그것의 ~, 그래서 다른 모든 비트가 하나를 제외하고 설정을. 387 00:24:44,650 --> 00:24:50,300 그래서 우리가 조금 더 사용하려고하는지입니다. 388 00:24:50,300 --> 00:24:58,220 >> 비트 또는. 다음은 2 진수,이 2 번호는 389 00:24:58,220 --> 00:25:00,780 그들은 모든 가능한을 대표하기 때문에, 꽤 대표 390 00:25:00,780 --> 00:25:07,290 비트의 조합은 당신이에서 작동 할 필요가 있습니다. 391 00:25:07,290 --> 00:25:13,540 I는 각 비트를 OR 연산 할 때, 여기, 우리는 그냥 곧장 비교하는 것입니다. 392 00:25:13,540 --> 00:25:15,410 그래서 왼쪽에 우리는 1과 1이 있습니다. 393 00:25:15,410 --> 00:25:20,510 I 비트 단위의 경우 | 사람들을, 나는 무엇을 얻을 것입니까? 한. 394 00:25:20,510 --> 00:25:25,320 0과 1이 내게 줄 것입니다 | 다음 비트 단위? 한. 395 00:25:25,320 --> 00:25:27,840 비트 1과 0은 같은 것, 하나가 될 것입니다. 396 00:25:27,840 --> 00:25:31,880 비트 0 | 0 날 0을 제공하는 것입니다. 397 00:25:31,880 --> 00:25:37,300 0 경우 | 그래서 0을 수있는 유일한 경우는 0입니다. 398 00:25:37,300 --> 00:25:40,020 그리고 당신은 당신의 논리적 인 ORS와 같은 것을 생각할 수 있습니다. 399 00:25:40,020 --> 00:25:44,830 당신은 참으로 1 거짓 0으로 생각한다면, 같은 일이 여기에 적용됩니다. 400 00:25:44,830 --> 00:25:50,040 그래서 진실 또는 사실은 사실이다, 참 또는 거짓 사실이다. 401 00:25:50,040 --> 00:25:57,150 허위 또는 사실은 사실이다, 허위 또는 거짓 사실은 거짓 만 것입니다. 402 00:25:57,150 --> 00:26:00,100 여기 당신이 알아야 할 예입니다 403 00:26:00,100 --> 00:26:05,160 비트 연산자를 사용하는 경우의 아주 좋은 예로서. 404 00:26:05,160 --> 00:26:08,660 여기가 우리 또는 Ox20와 자본 'A', 405 00:26:08,660 --> 00:26:11,830 우리는 우리가 뭔가를 얻을, 두 번째로 이러한 살펴 보겠습니다. 406 00:26:11,830 --> 00:26:16,020 그리고 우리 또는 소문자 'a'는 Ox20, 우리가 뭔가를 얻을 경우. 407 00:26:16,020 --> 00:26:26,750 그럼 ASCII 테이블을 당겨 보자. 408 00:26:26,750 --> 00:26:34,000 좋아요. 여기에서 우리는 'A'는 것을 볼 - 409 00:26:34,000 --> 00:26:36,920 여기에서 우리는 'A'는 6​​5 진수입니다있다. 410 00:26:36,920 --> 00:26:45,120 하지만 Ox41입니다 16 진수로 이동합니다. 411 00:26:45,120 --> 00:26:48,280 확신 우리는 클래스에서 그것을 보았다. 나는 우리가 수업 시간에 본 것 같은데 .. 412 00:26:48,280 --> 00:26:52,730 그것은 16 진수에서 이진수로 변환하는 아주 쉬운 것을. 413 00:26:52,730 --> 00:26:55,280 그래서 여기, 내가 진에 4를 넣고 싶은 경우에, 414 00:26:55,280 --> 00:26:59,550 그것은 단지 0100이 될 것. 415 00:26:59,550 --> 00:27:03,620 이것은 1의 장소, 2의 자리, 4 자리 수, 그래서 이것은 4입니다. 416 00:27:03,620 --> 00:27:08,550 그럼 난 0001이 될 것입니다 바이너리로 1을 분할 할 수 있습니다. 417 00:27:08,550 --> 00:27:14,280 그리고이 진에서 'A'의 표현이 될 것입니다. 418 00:27:14,280 --> 00:27:22,720 소문자 'a'는, 지금 Ox61 될 것 촬영, 419 00:27:22,720 --> 00:27:27,050 이진로 이러한 분열 곳, 그래서 6 - 420 00:27:27,050 --> 00:27:37,830 의 실제로하자 - 더 지우개가 없다? 지우개. 421 00:27:37,830 --> 00:27:48,220 Ox61. 그래서 바이너리로 6 분할하면 + 4 + 2 + 0 0가 될 것입니다. 422 00:27:48,220 --> 00:27:54,610 그리고 분할 1은 0001이 될 것입니다. 423 00:27:54,610 --> 00:27:56,520 이들 둘 간의 차이를 살펴보면 424 00:27:56,520 --> 00:28:04,250 우리는 소문자와 대문자 'A'사이의 유일한 차이점이 단일 비트입니다 것을 볼 수 있습니다. 425 00:28:04,250 --> 00:28:11,810 좋아요 - 그래서 다시 여기에오고. 426 00:28:11,810 --> 00:28:15,920 우리가 조금 Ox20이 무엇인지를 보면, 여기에서 돌아 오는 427 00:28:15,920 --> 00:28:22,210 바이너리에 이렇게 분할 Ox20, 428 00:28:22,210 --> 00:28:27,310 0010, 0000입니다. 429 00:28:27,310 --> 00:28:33,470 Ox20, 설정 만 비트, 우리가에 관심을이 비트입니다 430 00:28:33,470 --> 00:28:38,210 자본과 소문자 'a'를 사이에 전환과 함께. 431 00:28:38,210 --> 00:28:47,610 만약이 하나, 'A'입니다 I 또는 'A',, 432 00:28:47,610 --> 00:28:50,580 경우 I 또는 Ox20와 'A', 433 00:28:50,580 --> 00:28:53,490 나는 무엇을 얻을 것입니까? 434 00:28:53,490 --> 00:28:58,960 [학생, 들림] >> 소문자 ''이 (가) 1이 비트를 플립 것 때문이다. 435 00:28:58,960 --> 00:29:04,170 그리고 만약 내가 또는 'A'Ox20으로, 나는 무엇을 얻을 것입니까? 436 00:29:04,170 --> 00:29:08,780 소문자 때문에 그냥 오링 ''Ox20와, 437 00:29:08,780 --> 00:29:14,580 난 그냥 1이 단일 비트 OR 연산 할거야, 그것은 문제가되지 않습니다 그래서, 이미 1입니다. 438 00:29:14,580 --> 00:29:17,960 그래서 우리는 'A'와 'A'를 얻을. 439 00:29:17,960 --> 00:29:24,820 >> 비트와. 다시 말하지만, 우리는 우리의 논리와 대응으로 생각할 수 있습니다. 440 00:29:24,820 --> 00:29:28,180 왼쪽 측면에서 우리는 우리의 진실 및 진실이 있습니다. 441 00:29:28,180 --> 00:29:31,160 그것은 사실 일 것, 그리고 모든 경우에 대한 것 442 00:29:31,160 --> 00:29:36,270 , 거짓 & 진실 또는 진실 & 거짓, 거짓 & 거짓 443 00:29:36,270 --> 00:29:38,550 그런 것들 중 어느 것도 해당하지 않습니다. 444 00:29:38,550 --> 00:29:44,170 그래서 우리가 그만 둘은 1000입니다. 445 00:29:44,170 --> 00:29:48,830 그래서 지금, 여기, 여기에 내가 신뢰할 수있는 비트를하지 사용했던 곳이다, 446 00:29:48,830 --> 00:29:52,230 우리는 Ox20 있었다 곳. 447 00:29:52,230 --> 00:29:54,350 그래서이 Ox20입니다. 448 00:29:54,350 --> 00:29:59,570 지금은 무엇을하고 싶은지, 비트 Ox20의 ~. 449 00:29:59,570 --> 00:30:03,600 즉, 모든 비트를 반전 할 것이다. 450 00:30:03,600 --> 00:30:09,330 그래서 1101, 1111이 있습니다. 451 00:30:09,330 --> 00:30:18,940 그래서 'A'~ Ox20 날 무엇을 줄 수 있겠나와 AND 연산? 452 00:30:18,940 --> 00:30:22,430 우리가 정말 생각해야 할 유일한 비트는, 이쪽 453 00:30:22,430 --> 00:30:26,020 이후, 이들의 모든 비트가 1로 설정되어 있으면 454 00:30:26,020 --> 00:30:29,000 우리는 정확히 무엇을 '은'였다받을거야, 455 00:30:29,000 --> 00:30:31,260 를 제외하고, 아마도, 어떤이 비트입니다. 456 00:30:31,260 --> 00:30:34,460 이 1 인 경우, 지금은 0으로 설정 될 것 때문에 457 00:30:34,460 --> 00:30:39,810 이 무엇이든간에,이 값이 0이 될 것입니다과 AND로하기 때문이다. 458 00:30:39,810 --> 00:30:43,280 그래서 '는'~ Ox20이 날 줄 것 & 무엇입니까? 459 00:30:43,280 --> 00:30:48,200 [학생은 대답 들리지] >> 그리고 'a'와 무엇인가 - 그것은 'A'입니다. 460 00:30:48,200 --> 00:30:52,170 그리고 ''& ~ Ox20이 날 줄 것입니까? 461 00:30:52,170 --> 00:30:56,720 'A.' 이것은 현재 1 때문이다. 462 00:30:56,720 --> 00:30:59,570 이 0과 AND 연산, 그것은 0을 만들려고 463 00:30:59,570 --> 00:31:02,530 지금 우리는 'A'를받을거야. 464 00:31:02,530 --> 00:31:06,600 >>는 모두 'A'이며, 이러한 유형의 마지막으로, 465 00:31:06,600 --> 00:31:10,830 우리는 XOR있다. 그것은 매우처럼 또는, 466 00:31:10,830 --> 00:31:14,400 독점적으로 의미 또는 제외. 467 00:31:14,400 --> 00:31:18,420 이것은 당신이 일반적으로 또는 현실 세계에서의 생각과 같다. 468 00:31:18,420 --> 00:31:23,190 그래서 당신도 'X'또는 'Y',하지만 두 가지를 모두 수행. 469 00:31:23,190 --> 00:31:28,700 여기 ^ 1 1 0가 될 것입니다. 470 00:31:28,700 --> 00:31:33,650 사실 때문입니다 - 그것은 논리적 진실과 거짓과 마찬가지로 잘 작동하지 않습니다 471 00:31:33,650 --> 00:31:37,150 , 비트 & 및 나처럼 472 00:31:37,150 --> 00:31:40,100 하지만, 사실 ^ 사실은 false입니다. 473 00:31:40,100 --> 00:31:44,810 단지 그들 중 하나에 해당하는 경우 우리는 true를 반환하고 싶기 때문에. 474 00:31:44,810 --> 00:31:50,950 그래서 ^ 1은 0입니다. 무엇 ^ 1 0에 대해? 475 00:31:50,950 --> 00:31:56,010 1. ^ 0 ^ 1 0 0 0, 1이다. 476 00:31:56,010 --> 00:32:03,890 따라서 모든 상황에서, 0 비트 일 0 0가 될 것입니다. 477 00:32:03,890 --> 00:32:10,270 1 비트 일 0 또는 0 비트 1, 478 00:32:10,270 --> 00:32:14,660 그것의 경우 | 또는 ^, 그것은 1이 될 것이고, 그것은 &의 경우는 0이 될 수 있습니다. 479 00:32:14,660 --> 00:32:20,850 그리고 1 비트 1이 1이 아닌 경우에만 전용 또는 첨부. 480 00:32:20,850 --> 00:32:24,580 즉, 0110이다. 481 00:32:24,580 --> 00:32:36,520 그래서 지금 여기, XOR을 사용 - 그래서 우리는 다시 20시입니다. 482 00:32:36,520 --> 00:32:43,480 'A'^ Ox20 우리가 비교하고 이러한 2 비트입니다. 483 00:32:43,480 --> 00:32:50,020 그래서 1 ^ 0은 나에게 무엇을 줄 수 있겠나? 하나. 484 00:32:50,020 --> 00:32:58,430 'A'^ Ox20 저를 줄 수 있겠나? 소문자. 485 00:32:58,430 --> 00:33:04,010 'A'^ Ox20 저를 줄 수 있겠나? 자본 A. 486 00:33:04,010 --> 00:33:09,310 이 때문에이 일을 무엇이든, Ox20이 배타적 논리합 487 00:33:09,310 --> 00:33:15,380 효과적으로 비트가 어떤 내리고있다. 488 00:33:15,380 --> 00:33:21,240 이것이 0이면, 이제 하나가 될 것. 489 00:33:21,240 --> 00:33:26,160 이 1이기 때문에, ^ 1은 0이다. 490 00:33:26,160 --> 00:33:33,280 그래서 우리의 'A' 'A'이되었고, 우리의 'A'는 'A'가되었다. 491 00:33:33,280 --> 00:33:36,910 그래서 XOR은 사건을 뒤집기의 정말 편리한 방법입니다. 492 00:33:36,910 --> 00:33:39,960 당신은 문자의 문자열을 반복 할 493 00:33:39,960 --> 00:33:44,330 모든 단일 문자의 경우 교대, 494 00:33:44,330 --> 00:33:50,680 Ox20와 당신은 XOR 모든 것을. 495 00:33:50,680 --> 00:33:55,220 >> 이제 우리는 변화를 떠났다. 왼쪽으로 이동은, 기본적으로, 예정 496 00:33:55,220 --> 00:34:01,250 로, 또는 왼쪽에있는 숫자를 모두 밀어, 그들 뒤에 0의를 삽입합니다. 497 00:34:01,250 --> 00:34:05,550 그래서 여기에 우리가 00001101가있다. 498 00:34:05,550 --> 00:34:08,560 우리는 오른쪽에서 3 0의에서 밀어거야 499 00:34:08,560 --> 00:34:13,580 우리는 01101000를 얻을. 500 00:34:13,580 --> 00:34:16,380 이진이 아닌 측면에서, 501 00:34:16,380 --> 00:34:24,699 우리는 정말 13 왼쪽으로 이동 3, 우리 (104)을 제공 다루고있어 것을 볼 수 있습니다. 502 00:34:24,699 --> 00:34:32,530 그래서 왼쪽으로 이동, 우리는 여기에서 볼, X << Y는 기본적으로 X * 2 ^ Y입니다. 503 00:34:32,530 --> 00:34:40,139 ^ 3 13 * 2 ^ 3 2 그래서 * 8 (13) (104), 8입니다. 504 00:34:40,139 --> 00:34:45,679 당신은 일반적으로 이진, 어떻게 각 숫자에 대해 생각하는 경우 505 00:34:45,679 --> 00:34:49,530 우리는 오른쪽에서 시작하는 경우, 그 다음 1의 장소, 다음 2의 장소, 4의 장소입니다. 506 00:34:49,530 --> 00:34:51,330 그래서 오른쪽에서 0의에 밀어, 507 00:34:51,330 --> 00:34:55,080 우리는 단지, 8의 곳으로 4의 자리에 있었던 일을 추진 중입니다 508 00:34:55,080 --> 00:34:57,920 그리고 16의 곳으로 8의 자리에 있던 것들. 509 00:34:57,920 --> 00:35:01,280 각각의 이동은 2로 곱합니다. 그래? 510 00:35:01,280 --> 00:35:05,210 당신이 5로 이동하는 경우 [학생] 어떻게됩니까? 511 00:35:05,210 --> 00:35:10,790 [보덴]을 5로 이동하면 당신은 자리를 잃게됩니다. 512 00:35:10,790 --> 00:35:15,410 필연적으로, 같은 일이. 마찬가지로, 정수는 32 비트입니다, 513 00:35:15,410 --> 00:35:20,750 당신이 정말 큰 정수를 추가 할 경우에, 그냥 정수에 맞지 않습니다. 514 00:35:20,750 --> 00:35:23,660 그래서 여기에 같은 일이다. 당신이 5만큼 이동하면, 515 00:35:23,660 --> 00:35:25,650 우리는 단지 그 하나를 잃게됩니다. 516 00:35:25,650 --> 00:35:28,820 그리고는 "대략"나는 무엇을 의미하는 종류의 517 00:35:28,820 --> 00:35:37,470 당신이 너무 멀리 이동하는 경우, 당신은 비트를 잃는 곳. 518 00:35:37,470 --> 00:35:39,830 >> 오른쪽 시프트는 반대가 될 것입니다, 519 00:35:39,830 --> 00:35:43,090 우리는 끝으로 공의를 쑤셔 넣어가는 곳 520 00:35:43,090 --> 00:35:48,400 우리의 목적을 위해, 왼쪽에서 0의 입력합니다. 521 00:35:48,400 --> 00:35:52,910 그래서이 일을, 우리는 기본적으로 우리가 이미 한 일을 반대하고 있습니다. 522 00:35:52,910 --> 00:35:57,780 그리고 우리는 오른쪽에있는 세 개의 0 그냥 떨어 졌 볼 523 00:35:57,780 --> 00:36:02,020 우리는 오른쪽 1101 줄곧 밀고. 524 00:36:02,020 --> 00:36:08,380 이렇게하면, X / 2 ^ Y, 인, 104 >> 3을 다하고 있습니다. 525 00:36:08,380 --> 00:36:11,200 그래서 지금, 여기에서, 비슷한 생각이다. 526 00:36:11,200 --> 00:36:18,720 이유는 단지 약 X / 2 ^ Y이며, 실제로 X / 2 ^ Y? 527 00:36:18,720 --> 00:36:22,240 내가 4로 이동 한 경우, 내가 1을 잃은 것 때문에. 528 00:36:22,240 --> 00:36:25,950 기본적으로, 그냥 일반적으로 정수 나누기의 당신이 생각을, 생각합니다. 529 00:36:25,950 --> 00:36:31,070 그래서, 5 / 좋아한다 2 2. 그것은 2.5 아니다. 530 00:36:31,070 --> 00:36:35,000 그것은 여기에 같은 생각입니다. 우리는 2로 나눌 때 531 00:36:35,000 --> 00:36:39,910 우리는 길을 따라 이상한 비트를 잃을 수 있습니다. 532 00:36:39,910 --> 00:36:43,870 그래서 지금 - 그 비트를 위해이다. 즉, 당신이 알 필요가 전부입니다. 533 00:36:43,870 --> 00:36:46,340 우리가 수업 시간에 본 사용 사례를 기억하고, 534 00:36:46,340 --> 00:36:49,340 같은 비트 마스크는 비트 연산자에 유용합니다 535 00:36:49,340 --> 00:36:53,220 또는 당신은 비트 마스크를 위해 그들을 사용합니다. 536 00:36:53,220 --> 00:36:58,620 대문자와 소문자, 변환은 꽤 원형 예입니다. 537 00:36:58,620 --> 00:37:01,640 >> 좋아, 버퍼 오버 플로우 공격. 538 00:37:01,640 --> 00:37:05,110 누군가는이 기능에 문제 있었는지 기억 나? 539 00:37:05,110 --> 00:37:10,140 우리는 12 바이트의 배열, 12 문자를, 선언을 주목하라 540 00:37:10,140 --> 00:37:18,510 그리고, 우리는 12 문자 전체 문자열 표시 줄의 우리의 버퍼로 복사합니다. 541 00:37:18,510 --> 00:37:25,080 그래서 문제는 여기에 무엇입니까? 542 00:37:25,080 --> 00:37:32,270 왜 12 - 마법의 숫자 (12)는 거의 즉시로 튀어해야합니까? 543 00:37:32,270 --> 00:37:35,050 바는 12 개 이상의 문자로 발생하면 어떻게? 544 00:37:35,050 --> 00:37:41,200 어떤 줄이 문자 수백만의 경우? 545 00:37:41,200 --> 00:37:46,010 여기에서 문제는 방어 적이기입니다. 줄이 긴만큼, 경우 546 00:37:46,010 --> 00:37:50,330 그냥 완전히한다 - 'c'는, 'C'는 12 문자 것을 걱정하지 않는다; 547 00:37:50,330 --> 00:37:53,280 'C'는 많은 바이트를 맞지 않을 수 있음을 걱정하지 않는다. 548 00:37:53,280 --> 00:37:58,250 그냥 완전히 문자를 덮어 쓰게됩니다, 우리는 그것을 위해 할당 한 12 바이트, 549 00:37:58,250 --> 00:38:01,830 그리고 메모리에 과거 모든 것을 실제로 버퍼에 속하지 않는 550 00:38:01,830 --> 00:38:06,520 어떤 문자열 표시 줄이있는. 551 00:38:06,520 --> 00:38:09,780 그래서 이것은 우리가 수업 시간에 본 그림이었다 552 00:38:09,780 --> 00:38:12,220 우리는 우리의 스택 성장이 곳. 553 00:38:12,220 --> 00:38:16,040 당신은이 그림을 사용하거나 다시 익숙해해야합니다. 554 00:38:16,040 --> 00:38:21,260 우리는 우리의 스택이 성장했다, 메모리 주소는 상단에 0에서 시작 555 00:38:21,260 --> 00:38:26,270 그리고 하단에 40 억을 좋아 아래로 성장합니다. 556 00:38:26,270 --> 00:38:28,820 우리는 어딘가에 메모리에 우리의 배열 'C'를이 557 00:38:28,820 --> 00:38:32,260 우리는 바로 아래에 바 우리의 포인터를 가지고, 558 00:38:32,260 --> 00:38:38,720 그리고, 우리는이 저장된 프레임 우리의 반환 주소에 포인터와 우리의 부모 루틴의 스택이 있습니다. 559 00:38:38,720 --> 00:38:40,800 반환 주소가 무엇을 기억하십시오? 560 00:38:40,800 --> 00:38:45,360 주요 기능 모음을 호출 foo 함수를 호출 할 때,의 561 00:38:45,360 --> 00:38:48,100 필연적으로, 반환 바. 562 00:38:48,100 --> 00:38:52,610 그럼 언제 바 반환, 그들은 그것을 foo를 호출로 다시 일어나고 있음을 알 필요가있다. 563 00:38:52,610 --> 00:39:01,360 그래서 리턴 어드레스 때 함수가 반환으로 돌아갑니다 그것이 가지고있는 함수의 주소입니다. 564 00:39:01,360 --> 00:39:05,830 , 편리하기 때문에 버퍼 오버 플로우 공격에 대한 중요한 이유는 565 00:39:05,830 --> 00:39:09,580 해커는 반환 주소를 변경. 566 00:39:09,580 --> 00:39:14,950 대신 다시 foo는에가는, 다시 해커가 나를 위로 가고 싶은 곳으로 갈거야. 567 00:39:14,950 --> 00:39:17,760 그리고, 편리, 해커는 자주 다시 가고 싶은 곳 568 00:39:17,760 --> 00:39:22,400 우리가 원래 가지고 버퍼의 시작입니다. 569 00:39:22,400 --> 00:39:26,170 그래서, 다시, 작은 인도를 알 수 있습니다. 570 00:39:26,170 --> 00:39:28,490 어플라이언스는 작은 인도 시스템의 예입니다, 571 00:39:28,490 --> 00:39:34,140 그래서 정수 또는 포인터가 반전 바이트로 저장됩니다. 572 00:39:34,140 --> 00:39:38,980 그래서 여기에 우리가 볼 -가 무엇입니까? 그래. 573 00:39:38,980 --> 00:39:45,660 우리는 Ox80, OxC0, Ox35, OxO8를 참조하십시오. 574 00:39:45,660 --> 00:39:48,250 16 진수를 기억 하는가? 575 00:39:48,250 --> 00:39:50,640 우리는 리틀 인도에서 16 진수를 반대하지 않는다 576 00:39:50,640 --> 00:39:56,110 2 자리의 16 진수는 단일 바이트를 구성, 우리는 바이트를 반대하기 때문이다. 577 00:39:56,110 --> 00:40:00,300 왜 우리는, 같은 80530CO8를 저장하지 않는 때문입니다. 578 00:40:00,300 --> 00:40:07,520 우리는 오른쪽에서 시작하는 대신에, 2 자리의 각 쌍을 저장합니다. 579 00:40:07,520 --> 00:40:10,880 그 주소는 시작의 주소를 의미 580 00:40:10,880 --> 00:40:15,190 우리가 실제로 처음에 복사하고 싶어 우리의 버퍼. 581 00:40:15,190 --> 00:40:19,230 유용한 이유는 무엇 경우 때문에 공격자 582 00:40:19,230 --> 00:40:24,100 대신했다 문자열을 갖는, 일어난 583 00:40:24,100 --> 00:40:27,060 등의 무해한 문자열, 자신의 이름이나 뭐, 584 00:40:27,060 --> 00:40:33,900 어떤 경우, 대신, 해당 문자열은 임의의 코드가 있었다 585 00:40:33,900 --> 00:40:38,610 그 그들이하고 싶었던 어떤나요? 586 00:40:38,610 --> 00:40:45,630 그래서 그들은 수 - 어떤 멋진 코드를 생각할 수 없다. 587 00:40:45,630 --> 00:40:47,780 그래도, 무엇이든 될 수 있습니다. 모든 재앙 코드입니다. 588 00:40:47,780 --> 00:40:51,440 그들이 원하는 경우, 그들은 단지 세그 폴트를에서 뭔가를 할 수 있지만, 무의미한 것입니다. 589 00:40:51,440 --> 00:40:54,950 그들은 일반적으로 시스템을 해킹 해. 590 00:40:54,950 --> 00:40:59,930 >> 좋아요. CS50 라이브러리. 591 00:40:59,930 --> 00:41:04,800 이것은 기본적으로 getInt를, getString는 모든 이러한 기능은 우리가 당신을 위해 제공됩니다. 592 00:41:04,800 --> 00:41:10,630 그래서 우리는 문자 * 문자열이, 그리고 우리가 심하다 추상화의 593 00:41:10,630 --> 00:41:12,450 학기 동안 어떤 시점에서. 594 00:41:12,450 --> 00:41:18,220 문자열은 단지 문자의 배열임을 기억하십시오. 595 00:41:18,220 --> 00:41:23,240 그래서 여기에 우리가있는 getString의 축소 된 버전을 참조하십시오. 596 00:41:23,240 --> 00:41:25,920 당신은 그것을 실제로 구현 어떻게 기억하고 그것을 다시 찾아야한다. 597 00:41:25,920 --> 00:41:30,950 주요 세부 사항, 우리는 한 번에 하나의 문자에 얻을 통지 598 00:41:30,950 --> 00:41:34,570 단지 우리가 키보드로 입력처럼, 이는 표준에서. 599 00:41:34,570 --> 00:41:37,890 그래서 한 번에 하나의 문자, 우리는 너무 많은 문자를받을 경우, 600 00:41:37,890 --> 00:41:40,580 그래서 N + 1 용량보다 큰 경우, 601 00:41:40,580 --> 00:41:44,140 우리는 우리의 버퍼의 용량을 증가 할 필요가있다. 602 00:41:44,140 --> 00:41:47,780 그래서 여기에 우리는 우리의 버퍼의 크기를 두 배로하고 있습니다. 603 00:41:47,780 --> 00:41:51,840 그리고가는 계속, 우리는 우리의 버퍼에 문자를 삽입 604 00:41:51,840 --> 00:41:56,220 우리는 새로운 라인 또는 파일이든의 끝을받을 때까지, 605 00:41:56,220 --> 00:41:59,380 이 경우, 우리는 문자열 다음 실제있는 getString으로 완료 606 00:41:59,380 --> 00:42:05,120 우리는 너무 많은 메모리를 할당하면 다시 가서 조금 줄어들 것처럼 메모리를 축소합니다. 607 00:42:05,120 --> 00:42:08,830 그래서 우리는 표시되지 않습니다,하지만 주요 아이디어는 608 00:42:08,830 --> 00:42:11,960 한 번에 하나의 문자로 읽을 수 있습니다. 609 00:42:11,960 --> 00:42:17,140 그냥 한 번에 모든 것을 읽을 수 없습니다, 610 00:42:17,140 --> 00:42:19,550 그들 버퍼는 특정 크기 때문이다. 611 00:42:19,550 --> 00:42:26,590 이 버퍼에 삽입하려고 할 문자열이 너무 큰 경우에 따라서, 그것은 넘칠. 612 00:42:26,590 --> 00:42:28,940 그래서 여기에 우리는 방지하는 단 하나의 문자에 읽어 613 00:42:28,940 --> 00:42:33,750 한 번에 우리가 필요할 때마다 성장합니다. 614 00:42:33,750 --> 00:42:40,270 그래서의 getInt 및 다른 CS50 라이브러리 함수는 getString에 사용하는 경향 615 00:42:40,270 --> 00:42:42,310 자신의 구현에서. 616 00:42:42,310 --> 00:42:45,370 그래서 나는 여기에서 중요한 사항을 강조했다. 617 00:42:45,370 --> 00:42:49,460 그것은 문자열을 얻을 수있는 getString를 호출합니다. 618 00:42:49,460 --> 00:42:51,710 getString에 메모리를 반환하지 못한 경우, 619 00:42:51,710 --> 00:42:54,270 getString에 뭔가를 mallocs 기억, 그래서 당신은있는 getString을 호출 할 때마다 620 00:42:54,270 --> 00:42:57,820 만약 당신이 (이해할 수없는) 당신이 가지고있는 그 문자열을 해제하지 않아야합니다. 621 00:42:57,820 --> 00:43:02,870 무언가를 MALLOC에 실패 할 경우, 그래서 여기에, 우리는 단지 플래그로 INT_MAX를 반환하는, 622 00:43:02,870 --> 00:43:05,650 이봐, 우리가 실제로 정수를 얻을 수 없었습니다. 623 00:43:05,650 --> 00:43:10,830 당신은 내가 당신에게 돌아이든 무시하거나, 또는한다 624 00:43:10,830 --> 00:43:15,540 유효한 입력로 취급해서는 안된다. 625 00:43:15,540 --> 00:43:21,360 마지막으로, 그 성공 않은 가정, 우리는 특별한 플래그 sscanf 또는을 사용하여 626 00:43:21,360 --> 00:43:23,820 즉, 첫 번째 정수를 일치 627 00:43:23,820 --> 00:43:26,770 그 정수 후 모든 문자와 일치합니다. 628 00:43:26,770 --> 00:43:29,070 그래서 우리가 1과 동일합니다 알 수 있습니다. 629 00:43:29,070 --> 00:43:32,940 그래서 sscanf에서 반환이 성공적으로 얼마나 많은 일치 한 경우? 630 00:43:32,940 --> 00:43:37,010 성공적으로 정수를 일치하면 1을 반환합니다, 631 00:43:37,010 --> 00:43:40,890 이 정수를 일치하지 않는 경우는 0을 반환합니다, 그것은 2를 반환합니다 632 00:43:40,890 --> 00:43:45,920 이 일치하는 경우 정수는 일부 문자 하였다. 633 00:43:45,920 --> 00:43:49,780 그래서 우리는 1 만 아무것도 일치하는 경우 우리는 다시 시도 알 수 있습니다. 634 00:43:49,780 --> 00:43:55,230 그래서 우리가 입력되지 않은 경우 1, 2, 3, C, 또는 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 다음 1, 2, 3의 정수에 저장된 얻을 것이다, 636 00:43:57,400 --> 00:43:59,620 X는 문자에 저장된 얻을 것이다 637 00:43:59,620 --> 00:44:06,410 우리는 단지 정수를 원하기 때문에, sscanf 또는 2를 반환하고, 우리는 다시 시도하십시오. 638 00:44:06,410 --> 00:44:09,810 >> 빨리 HTML, HTTP, CSS를 통해 불고. 639 00:44:09,810 --> 00:44:15,340 하이퍼 텍스트 마크 업 언어는 웹의 구조 및 의미이다. 640 00:44:15,340 --> 00:44:19,960 여기에서 우리는 HTML 태그가 강의에서 예입니다. 641 00:44:19,960 --> 00:44:22,110 우리는 머리 태그, 바디 태그,이 642 00:44:22,110 --> 00:44:27,770 우리는, 우리가 실제로 시작과 닫기 태그가없는 빈 태그의 예를 643 00:44:27,770 --> 00:44:30,820 우리는 단지 링크 및 이미지를 가지고. 644 00:44:30,820 --> 00:44:38,480 폐문 이미지 태그가 없습니다; 태그가 할 필요가 모든 것을 수행 단 하나의 태그가있다. 645 00:44:38,480 --> 00:44:41,950 링크는 예입니다, 우리는 당신이 CSS에 연결하는 방법을 볼 수있을 것이다 646 00:44:41,950 --> 00:44:45,910 스크립트는 외부 스크립트에 연결하는 방법의 예입니다. 647 00:44:45,910 --> 00:44:53,100 그것은 HTML은 프로그래밍 언어 아닌, 매우 간단합니다, 그리고 기억. 648 00:44:53,100 --> 00:44:58,250 여기, 당신이 무엇을 할 것이라고 양식을 정의하거나 적어도 얼마나 기억 하는가? 649 00:44:58,250 --> 00:45:01,740 이러한 형태의 행동과 방법을 가지고 있습니다. 650 00:45:01,740 --> 00:45:06,210 당신이 이제까지 볼 방법은 GET과 POST이다. 651 00:45:06,210 --> 00:45:09,040 그래서 얻는 것은이 URL에 배치되는 버전입니다. 652 00:45:09,040 --> 00:45:11,680 이 URL에 넣어하지 않은 POST입니다. 653 00:45:11,680 --> 00:45:18,520 대신, 형태의 모든 데이터는 HTTP 요청에서 더 많은 숨겨진 삽입됩니다. 654 00:45:18,520 --> 00:45:22,390 HTTP 요청이 어디로가는, 그래서 여기에 작업을 정의합니다. 655 00:45:22,390 --> 00:45:27,490 그것이 어디로 가는지은 google.com / 검색입니다. 656 00:45:27,490 --> 00:45:32,890 방법. GET과 POST의 차이를 기억하고, 657 00:45:32,890 --> 00:45:37,200 북마크 뭔가를 원한다면, 단지, 예를 들어 말한다. 658 00:45:37,200 --> 00:45:40,660 당신은 POST의 URL을 즐겨 찾기에 추가 할 수 없을 것입니다 659 00:45:40,660 --> 00:45:44,970 데이터는 URL에 포함되어 있지 않기 때문에. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, 지금은, 하이퍼 텍스트 전송 프로토콜입니다. 661 00:45:49,790 --> 00:45:54,080 하이퍼 텍스트 전송 프로토콜, 당신은 그것을 전송할 기대 662 00:45:54,080 --> 00:45:57,710 하이퍼 텍스트 마크 업 언어, 그것은 않습니다. 663 00:45:57,710 --> 00:46:00,170 그러나 그것은 또한 웹에서 찾을 수있는 이미지를 전송, 664 00:46:00,170 --> 00:46:05,400 당신이 만드는 모든 다운로드가 HTTP 요청으로 시작합니다. 665 00:46:05,400 --> 00:46:10,350 그래서 HTTP 단지 월드 와이드 웹의 언어이다. 666 00:46:10,350 --> 00:46:15,610 그리고 여기 당신은 HTTP 요청의 종류를 인식 할 필요가있다. 667 00:46:15,610 --> 00:46:19,300 측면에 여기 HTTP/1.1은 그 버전의 말한다 668 00:46:19,300 --> 00:46:21,570 프로토콜의 내가 사용하고 있습니다. 669 00:46:21,570 --> 00:46:25,770 당신이 그것을 볼 수 있습니다로 거의 항상, HTTP/1.1 될 것. 670 00:46:25,770 --> 00:46:30,110 그런 다음 우리는 이것이 당신이 볼 수도, 대안 POST되고, GET 것을 참조하십시오. 671 00:46:30,110 --> 00:46:40,790 그리고 방문하려고했던 URL은 www.google.com/search?q = 어쩌구 저쩌구했다. 672 00:46:40,790 --> 00:46:44,240 그래서 그 기억이, 물음표 Q = ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ, 673 00:46:44,240 --> 00:46:49,040 양식에 의해 제출되는 물건의 종류입니다. 674 00:46:49,040 --> 00:46:51,830 그것이 나에게 반환 할 수 있습니다 응답은 다음과 같이 보일 것이다. 675 00:46:51,830 --> 00:46:54,050 다시 말하지만,이 될 것입니다 프로토콜로 시작하는, 676 00:46:54,050 --> 00:46:59,190 상태 코드 하였다. 여기가 200 OK입니다. 677 00:46:59,190 --> 00:47:05,060 그리고 마지막으로, 실제로 요청 웹 페이지가 따라야 할 것입니다. 678 00:47:05,060 --> 00:47:08,210 가능한 상태 코드는 당신이 볼 수있는, 당신은 그 중 몇 가지를 알아야한다. 679 00:47:08,210 --> 00:47:12,770 200 OK 당신은 아마도 이전에 볼 수있다. 680 00:47:12,770 --> 00:47:17,830 403, 404 찾을 수 없음, 500 내부 서버 오류 681 00:47:17,830 --> 00:47:22,140 당신이 웹 사이트에 가서 뭔가 깨진 또는 PHP 코드가 충돌하는 경우, 일반적으로 682 00:47:22,140 --> 00:47:24,930 기기에 우리가 가지고있는 반면, 그 큰 오렌지 박스 683 00:47:24,930 --> 00:47:27,830 그 등장과 같은, 뭔가 잘못이다,라고,이 코드가 작동하지 않습니다 684 00:47:27,830 --> 00:47:30,380 또는이 기능의 나쁜. 685 00:47:30,380 --> 00:47:33,230 보통 웹 사이트는 당신이 기능이 실제로 나쁜 무엇인지 알고 싶지 않아 686 00:47:33,230 --> 00:47:37,880 그래서 대신에 그들은 단지 당신에게 500 내부 서버 오류를 줄 것이다. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP는 HTTP 하에서 1 층이다. 688 00:47:43,050 --> 00:47:47,550 인터넷 월드 와이드 웹 (World Wide Web)의 외부에 있다는 것을 기억하십시오. 689 00:47:47,550 --> 00:47:52,270 같은 당신이 HTTP를 통해 이동하지 않는 온라인 게임을하는 경우, 690 00:47:52,270 --> 00:47:55,740 그것은 다른 통해거야 - 아직 인터넷을 사용하는 것, 691 00:47:55,740 --> 00:47:58,900 그러나 HTTP를 사용하지 않습니다. 692 00:47:58,900 --> 00:48:02,470 HTTP는 TCP / IP를 기반으로 프로토콜의 한 예입니다. 693 00:48:02,470 --> 00:48:07,820 IP는 말 그대로 인터넷 프로토콜을 의미한다. 694 00:48:07,820 --> 00:48:11,500 모든 컴퓨터는 IP 주소를 가지고, 그들은 그 4 자리 것들 695 00:48:11,500 --> 00:48:16,510 192.168.2.1, 또는 무엇이든 같이, 즉 로컬 한 경향이있다. 696 00:48:16,510 --> 00:48:23,390 하지만 그 IP 주소의 패턴이다. 697 00:48:23,390 --> 00:48:29,060 그래서 DNS, 도메인 이름 서비스, 698 00:48:29,060 --> 00:48:33,410 즉, 실제 IP 주소로 google.com 같은 것들을 번역거야. 699 00:48:33,410 --> 00:48:37,700 그래서 만약 당신이 URL에 해당 IP 주소를 입력하면, 700 00:48:37,700 --> 00:48:40,850 즉, Google에 당신을 가져올 것입니다,하지만 당신은 그 일을 기억하지 않는 경향이있다. 701 00:48:40,850 --> 00:48:45,470 대신 google.com을 기억하는 경향이있다. 702 00:48:45,470 --> 00:48:51,560 우리는이 마지막으로는이 IP의 TCP 부분입니다 포트입니다. 703 00:48:51,560 --> 00:48:54,880 TCP는 더 많은 작업을 수행합니다. 당신은 당신의 웹 브라우저를 실행해야, 같은 생각. 704 00:48:54,880 --> 00:48:58,670 어쩌면 당신은 약간의 전자 메일 응용 프로그램이 실행되고; 705 00:48:58,670 --> 00:49:02,150 어쩌면 당신은 인터넷 실행을 사용하는 다른 프로그램이있다. 706 00:49:02,150 --> 00:49:05,090 그들은 모두 인터넷에 액세스 할 수 있어야합니다, 707 00:49:05,090 --> 00:49:08,100 하지만 컴퓨터는 1 무선 랜 카드 또는 무엇이든 있습니다. 708 00:49:08,100 --> 00:49:10,780 그래서 포트는 우리가 분할 할 수있어 방법입니다 709 00:49:10,780 --> 00:49:13,550 이러한 응용 프로그램은 인터넷을 사용할 수있는 방법. 710 00:49:13,550 --> 00:49:17,230 각 응용 프로그램은, 그것에서들을 수 1 특정 포트를 가져옵니다 711 00:49:17,230 --> 00:49:19,670 기본적으로, HTTP 포트 80을 사용합니다. 712 00:49:19,670 --> 00:49:22,410 일부 이메일 서비스는 25을 사용합니다. 713 00:49:22,410 --> 00:49:24,490 낮은 번호의 사람은 소유되는 경향이있다. 714 00:49:24,490 --> 00:49:29,270 당신은 일반적으로 자신에 대한 높은 번호의 사람을 얻을 수 있습니다. 715 00:49:29,270 --> 00:49:32,010 >> CSS, 캐스 케이 딩 스타일 시트. 716 00:49:32,010 --> 00:49:36,030 CSS와 우리 스타일의 웹 페이지가 아닌 HTML로. 717 00:49:36,030 --> 00:49:38,440 당신은 당신의 CSS를 넣을 수 3 곳이 있습니다. 718 00:49:38,440 --> 00:49:46,300 그것은 스타일 태그 사이에, 또는 완전히 별도의 파일에 넣은 다음 링크, 인라인이 될 수 있습니다 719 00:49:46,300 --> 00:49:48,470 그리고 여기에 CSS의 단지 예입니다. 720 00:49:48,470 --> 00:49:50,450 당신은이 패턴을 인식해야한다, 721 00:49:50,450 --> 00:49:54,310 첫 번째 예는 우리 몸에 태그를 일치하는 위치 722 00:49:54,310 --> 00:49:56,680 그리고 여기에 우리 몸의 태그를 중심으로하고 있습니다. 723 00:49:56,680 --> 00:50:00,420 두 번째 예를 들어, 우리는 일을 일치하는 724 00:50:00,420 --> 00:50:04,740 ID 바닥 글과 함께, 우리는 몇 가지 스타일을 적용하고 있습니다. 725 00:50:04,740 --> 00:50:07,310 왼쪽에 해당 ID의 바닥 글 텍스트로 정렬을 주목, 726 00:50:07,310 --> 00:50:09,840 본문 텍스트로 정렬 센터 반면. 727 00:50:09,840 --> 00:50:13,180 바닥 글은 몸 안에 있습니다. 728 00:50:13,180 --> 00:50:16,470 그것은, 대신, 텍스트 정렬 몸이 텍스트 정렬 센터를 말한다하더라도, 왼쪽됩니다. 729 00:50:16,470 --> 00:50:18,880 이는 전체 계단식 부분입니다. 730 00:50:18,880 --> 00:50:22,110 당신은 할 수 있습니다 - 당신은 몸의 스타일을 지정할 수 있습니다, 731 00:50:22,110 --> 00:50:25,320 다음 본문에 일이 좀 더 특정 스타일을 지정할 수 있습니다, 732 00:50:25,320 --> 00:50:28,160 사물이 예상대로 작동합니다. 733 00:50:28,160 --> 00:50:34,420 보다 구체적인 CSS 지정자 우선합니다. 734 00:50:34,420 --> 00:50:46,140 난 그게 생각합니다. 735 00:50:46,140 --> 00:50:49,260 >> [알리 Nahm] 안녕하세요 여러분. 나는 당신의 관심을 얻을 수 있다면. 736 00:50:49,260 --> 00:50:53,990 나는 알리와 나는 정말 빨리 PHP와 SQL을 통해 갈거야. 737 00:50:53,990 --> 00:51:00,310 그래서 우리는 시작할 수 있습니다. PHP는 PHP의 약자 : 하이퍼 텍스트 전처 리기. 738 00:51:00,310 --> 00:51:03,730 여러분 모두가 알고있는 바와 같이, 그것은 서버 측 스크립트 언어입니다, 739 00:51:03,730 --> 00:51:06,800 우리는 웹 사이트의 백 엔드에 사용, 740 00:51:06,800 --> 00:51:12,540 그것은 계산, 뒤에 - 장면의 부분을 많이 수행하는 방법. 741 00:51:12,540 --> 00:51:17,510 구문. 그것은 C, 놀랍게도처럼되지 않습니다. 742 00:51:17,510 --> 00:51:22,060 내가 먼저 이동할 수 없습니다 - 항상 당신이 볼 수있는 경우, 시작합니다. 743 00:51:22,060 --> 00:51:31,340 당신은 당신이 중괄호의 새로운 종류를 필요로 볼 수 있으며, 다음은? PHP가 필요합니다. 744 00:51:31,340 --> 00:51:35,780 즉, 당신은 당신의 PHP 텍스트, PHP 코드를 프레임에이 방법을 항상. 745 00:51:35,780 --> 00:51:39,180 그래서 당신이 종류의 첫 번째 장착 C처럼 될 수 없습니다. 746 00:51:39,180 --> 00:51:42,290 당신은 항상 묶어야합니다. 747 00:51:42,290 --> 00:51:47,610 그리고 지금, 주요 구문은 모든 변수는 $ 문자로 시작해야한다는 것입니다. 748 00:51:47,610 --> 00:51:49,490 당신은 당신이 그들을 정의 할 때 그것을 할 필요가있다, 당신은 그것을 할 필요가 749 00:51:49,490 --> 00:51:51,860 당신은 나중에 그들에게 참조 할 때. 750 00:51:51,860 --> 00:51:56,510 당신은 항상 $가 필요합니다. 그것은 거의 당신의 좋은 친구입니다. 751 00:51:56,510 --> 00:52:01,690 당신은하지 않습니다 - C는 달리, 당신은이 변수 타입의 종류를 넣을 필요가 없습니다. 752 00:52:01,690 --> 00:52:04,940 당신은 $를 필요로하는 동안 그래서, 당신은 같이 넣어 필요가 없습니다 753 00:52:04,940 --> 00:52:09,470 INT x 또는 문자열 Y, 등등, 등등. 754 00:52:09,470 --> 00:52:11,490 그래서 약간의 차이. 755 00:52:11,490 --> 00:52:15,590 이것의 결과, PHP가 약하게 형식임을 의미한다. 756 00:52:15,590 --> 00:52:19,310 PHP는 약하게 형식 언어이며, 약하게 변수를 입력하고있다. 757 00:52:19,310 --> 00:52:24,020 즉, 그것은 당신이 변수 유형의 다른 종류의 사이를 전환 할 수 있음을 의미합니다. 758 00:52:24,020 --> 00:52:27,230 당신은 INT로 숫자 1을 저장할 수 있습니다, 759 00:52:27,230 --> 00:52:29,650 당신은 문자열로 저장할 수 있습니다, 당신은 플로트로 저장할 수 있습니다, 760 00:52:29,650 --> 00:52:33,550 그것은 모든 숫자 1이됩니다. 761 00:52:33,550 --> 00:52:36,080 당신은 다른 형태로 저장하는 경우에도, 762 00:52:36,080 --> 00:52:39,120 그것은 여전히​​ - 변수 유형들은 마지막에 들고 있습니다. 763 00:52:39,120 --> 00:52:41,540 그래서 여기 보면, 당신은 PSET 7에서 기억한다면, 764 00:52:41,540 --> 00:52:43,500 당신의 대부분은 아마도이 문제를 가지고 있었다. 765 00:52:43,500 --> 00:52:47,280 두 개의 등호, 3 등호, 4 등호. 766 00:52:47,280 --> 00:52:49,990 좋아요, 4 등호가 없지만, 2, 3이 있습니다. 767 00:52:49,990 --> 00:52:53,320 당신은 값을 확인하기 위해 2 등호를 사용합니다. 768 00:52:53,320 --> 00:52:55,830 그것은 형식을 통해 확인할 수 있습니다. 769 00:52:55,830 --> 00:52:58,770 그래서 당신은 첫 번째 예에서 볼 수있는 경우, 770 00:52:58,770 --> 00:53:02,210 나는 num_int ==의 num_string있다. 771 00:53:02,210 --> 00:53:06,710 그래서 INT와 문자열이 모두 있으며, 기술적으로, 1, 772 00:53:06,710 --> 00:53:10,790 하지만 그들은 서로 다른 유형입니다. 그러나 이중 등호, 그것은 여전히​​ 전달됩니다. 773 00:53:10,790 --> 00:53:15,510 그러나, 삼중 등호, 그것은 값뿐만 아니라 다른 유형을 검사한다. 774 00:53:15,510 --> 00:53:18,760 즉, 그것은 여기 그 두 번째의 경우 전달 않을거야 것을 의미합니다 775 00:53:18,760 --> 00:53:22,350 대신 3 등호를 사용하는 곳. 776 00:53:22,350 --> 00:53:26,590 그래서 당신은 이제 모두 표시해야 큰 차이입니다. 777 00:53:26,590 --> 00:53:31,570 >> 문자열 연결은 PHP에서 사용할 수있는 또 다른 강력한 것입니다. 778 00:53:31,570 --> 00:53:34,080 그것은 기본적으로 그냥이 편리한 점 표기법의 779 00:53:34,080 --> 00:53:36,230 그것은 당신이 함께 문자열을 결합 할 수있는 방법입니다. 780 00:53:36,230 --> 00:53:40,800 그래서 당신은 고양이가 있고 개를 가지고 있고, 당신이 함께 2 문자열을 넣어하려는 경우, 781 00:53:40,800 --> 00:53:44,080 당신은 시간을 사용할 수 있습니다, 그리고 그것이 작동하는 방법의 일종이다. 782 00:53:44,080 --> 00:53:46,660 또한 바로 옆에 서로를 배치 할 수 있습니다, 783 00:53:46,660 --> 00:53:49,030 당신은 아래의 예에서 여기에서 볼 수 있듯이, 784 00:53:49,030 --> 00:53:51,610 나는 문자열 1, 공간 문자열 2 에코 어디. 785 00:53:51,610 --> 00:53:56,930 PHP는 다음과 같은 그들을 대체 알 수 있습니다. 786 00:53:56,930 --> 00:53:59,780 배열. 이제, PHP의 배열의 2 종류가 있습니다. 787 00:53:59,780 --> 00:54:03,180 당신은 정기적으로 배열 할 수 있습니다, 당신은 또한 연관 배열을 가질 수 있습니다, 788 00:54:03,180 --> 00:54:06,040 우리는 지금 그들을 통해 갈 것입니다. 789 00:54:06,040 --> 00:54:08,280 일반 배열은, 그냥이 C에 790 00:54:08,280 --> 00:54:11,240 그래서 당신은 번호가 인덱스가 있습니다. 791 00:54:11,240 --> 00:54:13,160 지금 우리는 하나를 만들려고하고 있는지 ... - 792 00:54:13,160 --> 00:54:15,500 그래서 이것은 우리가 빈 배열을 생성하는 방법이다, 우리는거야 793 00:54:15,500 --> 00:54:17,310 인덱스 번호 0에 넣어. 794 00:54:17,310 --> 00:54:19,200 우리는 숫자 6, 값 6을 넣어 것입니다. 795 00:54:19,200 --> 00:54:21,500 여기서 하단에 볼 수 있습니다. 796 00:54:21,500 --> 00:54:24,240 Where's - 인덱스 번호 1에서 우리는 값 번호 4를 넣어거야 797 00:54:24,240 --> 00:54:26,720 그래서 당신은 6 거기에 볼 수 있습니다, 4, 거기에 798 00:54:26,720 --> 00:54:29,160 그리고, 우리는 물건을 인쇄하는 등, 799 00:54:29,160 --> 00:54:33,550 우리가 시도하고 인덱스 번호 0에 저장된 값을 출력 할 때, 800 00:54:33,550 --> 00:54:36,900 우리가 출력되는 6 값을 볼 수 있습니다. 쿨? 801 00:54:36,900 --> 00:54:40,160 그래서 당신을 위해 정기적으로 배열합니다. 802 00:54:40,160 --> 00:54:42,750 당신은 또한 현재 일반 배열 정보를 추가 할 수있는 또 다른 방법 803 00:54:42,750 --> 00:54:44,780 당신이 말을 추가 할 수 있습니다. 804 00:54:44,780 --> 00:54:47,240 즉, 특정 인덱스를 지정하지 않는 것을 의미한다. 805 00:54:47,240 --> 00:54:51,000 당신은 수를 볼 수 있습니다, 다음 대괄호로 지정된 인덱스가 없습니다. 806 00:54:51,000 --> 00:54:56,270 그리고 알 - PHP는 단지 목록, 옆 자리의 끝 부분에 추가 알게 될 것이다. 807 00:54:56,270 --> 00:54:59,190 그래서 당신은 그 0 자리에서 바로 1을 볼 수 있습니다 808 00:54:59,190 --> 00:55:02,690 2는 제 자리에 바로 거기에 갔다. 809 00:55:02,690 --> 00:55:04,690 (3) 이동은 - 물론 거기에 추가됩니다. 810 00:55:04,690 --> 00:55:06,720 그래서 가지 의미가 있습니다. 당신은 지속적으로 추가하고, 811 00:55:06,720 --> 00:55:09,360 그리고, 우리는, 숫자 1의 인덱스를 반향 할 때 812 00:55:09,360 --> 00:55:13,080 그것은 값 2를 인쇄합니다. 813 00:55:13,080 --> 00:55:16,800 >> 그럼 우리가 연관 배열 인 배열이 있습니다. 814 00:55:16,800 --> 00:55:19,370 대신에 숫자 인덱스를 갖는 연관 배열, 815 00:55:19,370 --> 00:55:23,630 그들이하는 일은 그들이 문자열입니다 인덱스를 가지고 있습니다. 816 00:55:23,630 --> 00:55:25,670 당신은 대신에 볼 수 있습니다 - 나는 모든 사람 숫자 인덱스를 없앤, 817 00:55:25,670 --> 00:55:32,140 지금은 키 1, 키 2, 키, 그리고 그들은 모든 문자열다는 것을 의미하는 큰 따옴표입니다. 818 00:55:32,140 --> 00:55:34,470 그래서 우리는 이러한 예를 가질 수 있습니다. 819 00:55:34,470 --> 00:55:38,790 이것의 예는 우리가 TF를 가지고있다, 그리고 그 인덱스 이름입니다. 820 00:55:38,790 --> 00:55:42,030 우리는 칼로리 식사, 인덱스, 이름으로 "알리"를 넣어거야 821 00:55:42,030 --> 00:55:47,640 우리는 문자열 대신 지능이 시간을 넣을 수 있습니다, 822 00:55:47,640 --> 00:55:52,240 다음 인덱스 좋아, 우리는 그 안에 전체 배열을 넣을 수 있습니다. 823 00:55:52,240 --> 00:55:55,490 그래서이 종류의 - 그것은 우리가 가진 방법과 유사한 개념의 824 00:55:55,490 --> 00:55:58,930 숫자와 indices, 그러나 지금 우리는 주위의 인덱스를 변경할 수 있습니다 825 00:55:58,930 --> 00:56:03,890 대신 문자열로해야합니다. 826 00:56:03,890 --> 00:56:06,070 또한, 단지 개별적으로하는 외에,이 작업을 수행 할 수 827 00:56:06,070 --> 00:56:09,400 당신은 하나의 덩어리에서 모든 작업을 수행 할 수 있습니다. 그래서 당신은 그 배열의 TF를 볼 수 있습니다 828 00:56:09,400 --> 00:56:13,350 그리고, 우리는 하나의 거대한 대괄호 세트에 그들 모두를 설정합니다. 829 00:56:13,350 --> 00:56:15,220 그래서 일을 속도를 높일 수 있습니다. 830 00:56:15,220 --> 00:56:19,730 그렇지보다 문체 선택의 더 많은입니다. 831 00:56:19,730 --> 00:56:21,550 우리는 또한 루프가 있습니다. 832 00:56:21,550 --> 00:56:26,020 C에서 우리는 다음과 같이 작동 루프가있다. 833 00:56:26,020 --> 00:56:29,690 우리는 우리의 배열을 가지고, 우리는 목록의 끝에 인덱스 0에서 갔다, 834 00:56:29,690 --> 00:56:31,740 우리는 바로, 모든 인쇄? 835 00:56:31,740 --> 00:56:33,880 문제는 연관 배열의 경우 제외 836 00:56:33,880 --> 00:56:36,610 우리는 반드시 그 숫자 인덱스를 모르는 837 00:56:36,610 --> 00:56:39,610 이제 우리는 문자열 색인을 가지고 있기 때문에. 838 00:56:39,610 --> 00:56:44,800 이제 우리는 다시, 당신이 희망 PSET 7에 사용 된 foreach 루프를 사용합니다. 839 00:56:44,800 --> 00:56:48,930 foreach는 루프은리스트의 모든 단일 부분을 알 수 있습니다. 840 00:56:48,930 --> 00:56:52,450 그리고 그것은 당신이 정확하게 숫자 인덱스를 알 필요가 없습니다. 841 00:56:52,450 --> 00:56:56,490 그래서 만약 당신이 배열을 넣어, 당신은 foreach는 구문을 가지고, 그래서 foreach는의. 842 00:56:56,490 --> 00:57:00,430 , 그래서 내 배열은 PSET라고하며, 다음과 같은 단어, 같은 843 00:57:00,430 --> 00:57:04,530 그리고 당신은 당신이 사용하고자하는이 지역의 임시 변수를 넣어 844 00:57:04,530 --> 00:57:10,690 다만 특정를 개최거야 특정 것은 - 845 00:57:10,690 --> 00:57:14,770 하나의 인스턴스 또는 배열의 한 부분. 846 00:57:14,770 --> 00:57:18,350 , PSET의 숫자 1을 개최하고 어쩌면 숫자 6을 개최합니다 847 00:57:18,350 --> 00:57:20,410 다음은 숫자 2를 개최한다. 848 00:57:20,410 --> 00:57:26,630 그러나이 배열의 모든 단일 값을 통과하는 보장된다. 849 00:57:26,630 --> 00:57:30,530 당신이 PHP에 알아야 할 유용한 기능이 필요하다, 850 00:57:30,530 --> 00:57:35,880 출구, 빈, 에코 그래서, 당신은 특정 파일을 포함하고 있는지 확인합니다. 851 00:57:35,880 --> 00:57:40,490 내가보기 엔 당신이 PSET 7을보고 그 기능을 살펴 좋습니다. 852 00:57:40,490 --> 00:57:42,810 당신은 사람들을 알고있을 수 있습니다, 853 00:57:42,810 --> 00:57:47,060 그래서 나는 확실히 정확하게, 사람들은 모두 무엇을하고 있는지 알고있다. 854 00:57:47,060 --> 00:57:50,080 >> 그리고 지금 우리는 정말 빨리 범위를 통해 갈 것입니다. 855 00:57:50,080 --> 00:57:53,490 범위에서, PHP는 C와 달리, 펑키 물건의 종류 856 00:57:53,490 --> 00:57:56,170 그래서 우리는 그냥 빨리 그것을 통해 갈 것입니다. 857 00:57:56,170 --> 00:57:58,930 그래서 우리는 우리가 거​​기 그 화살표에서 시작 가정 해 봅시다. 858 00:57:58,930 --> 00:58:02,900 그리고 우리는 $ I로 시작하는 것입니다. 그래서 변수는 '난', 0이 될 것입니다 859 00:58:02,900 --> 00:58:06,730 우리는 거기에 그 큰 흰색 상자에 인쇄를 유지하는 것입니다. 860 00:58:06,730 --> 00:58:09,220 우리는 I0로 시작하는거야, 그리고, 우리는 그것을 반향 것입니다. 861 00:58:09,220 --> 00:58:12,670 그래서 0이있다. 862 00:58:12,670 --> 00:58:15,210 그리고 우리는 대한 루프를 증가거야 863 00:58:15,210 --> 00:58:17,810 다음은 1의 값이 될거야. 864 00:58:17,810 --> 00:58:20,070 , 하나는 3 미만이다, 그래서 for 루프를 통과 할 것 865 00:58:20,070 --> 00:58:23,230 그리고, 우리는 다시 인쇄 볼 것입니다. 866 00:58:23,230 --> 00:58:25,520 우리는 2로 다시 증가거야 867 00:58:25,520 --> 00:58:29,860 2 미만 3이다, 그래서 루프를 통과 할 수 있습니다, 그것은 2를 인쇄 할 수 있습니다. 868 00:58:29,860 --> 00:58:35,100 그런 다음 3가 3 이상인 것을주의합니다, 그래서 우리는 루프의 탈옥 수 있습니다. 869 00:58:35,100 --> 00:58:40,050 그래서 지금 우리가 종료 한 후 우리는 aFunction에 들어갈 것입니다. 870 00:58:40,050 --> 00:58:45,010 좋아요. 그래서 당신은이 변수에 우리가 만들었으니주의해야 871 00:58:45,010 --> 00:58:48,270 'I'변수는 로컬 범위가되지 않습니다. 872 00:58:48,270 --> 00:58:50,280 즉, 루프에 로컬이 아닌 것을 의미, 873 00:58:50,280 --> 00:58:58,060 그 변수는 우리는 여전히 액세스하고 나중에 변경, 그것은 여전히​​ 유효합니다 있습니다. 874 00:58:58,060 --> 00:59:02,160 이제 함수에 갈 경우에, 당신은, 우리는 또한 'I'변수를 사용하는 것을 볼 수 있습니다 875 00:59:02,160 --> 00:59:05,320 우리는 '나'+ + 증가 할 것입니다. 876 00:59:05,320 --> 00:59:09,410 당신은 그 '나'변수의 복사본이 있다고, C를 기반으로, 처음에 생각합니다. 877 00:59:09,410 --> 00:59:12,830 그것은 어느 것이 올바른 것인지, 완전히 다른 것입니다. 878 00:59:12,830 --> 00:59:16,560 우리가 그것을 인쇄 할 때, 우리는 인쇄하려고하는, 'I'+ + 인쇄거야 그 4, 879 00:59:16,560 --> 00:59:19,640 죄송합니다 - 그리고, 우리는 거 야. 880 00:59:19,640 --> 00:59:22,030 그런 다음 우리는 그 기능 중 종료거야, 881 00:59:22,030 --> 00:59:24,820 그리고 우리는 그 화살표가 지금 어디에있을 것입니다. 882 00:59:24,820 --> 00:59:29,190 그 후, 그러나, 함수는 'I'의 값을 변경하더라도 것을 의미 883 00:59:29,190 --> 00:59:32,620 그것은 외부 기능의 변화가 없었다, 884 00:59:32,620 --> 00:59:35,060 기능은 별도의 범위를 가지고 있기 때문이다. 885 00:59:35,060 --> 00:59:38,960 즉, 우리는 'I'를 반향 때, 함수의 범위 내에서 변경되지 않았 음을 의미 886 00:59:38,960 --> 00:59:43,660 그래서 우리는 다시 3을 인쇄하는 것입니다. 887 00:59:43,660 --> 00:59:47,520 C.보다 PHP의 범위에 대한 여러 가지 888 00:59:47,520 --> 00:59:51,130 >> 이제 PHP와 HTML에서. 889 00:59:51,130 --> 00:59:53,510 PHP는 웹 페이지를 동적으로 만드는 데 사용됩니다. 890 00:59:53,510 --> 00:59:58,660 이 종류의 일을 다른합니다. 891 00:59:58,660 --> 01:00:02,090 우리는 HTML에서 그것은 다른있다. 892 01:00:02,090 --> 01:00:05,230 HTML, 우리는 언제나 롭 보이는 방법 등 같은 정적 인 일을 가지고 893 01:00:05,230 --> 01:00:09,370 PHP 반면, 사용자가 누구인지에 따라 일을 변경할 수 있습니다. 894 01:00:09,370 --> 01:00:11,830 나는이있는 경우에는, 나는 "당신이로 로그인 -"한 다음 이름, 895 01:00:11,830 --> 01:00:14,420 내가 이름을 변경할 수 있습니다. 그래서 지금 이름은 요셉입니다 896 01:00:14,420 --> 01:00:18,880 그것은 "나에 대해"을 가지고 있지만 나는 또한 토미을 가지고 이름을 변경할 수 있습니다. 897 01:00:18,880 --> 01:00:21,700 그리고 다른 일이 될 것입니다. 898 01:00:21,700 --> 01:00:23,840 그래서 우리는 그에 대해 여러 가지를 변경할 수 있습니다, 899 01:00:23,840 --> 01:00:27,070 그리고 이름에 따라 서로 다른 내용을 표시합니다. 900 01:00:27,070 --> 01:00:31,430 그래서 PHP는 종류의 웹 사이트에 어떤 일이 일어나고 있는지 변경할 수 있습니다. 901 01:00:31,430 --> 01:00:33,540 여기에 동일합니다. 또, 서로 다른 내용이 있습니다, 902 01:00:33,540 --> 01:00:38,870 당신은 기술적으로 아직도 표면에 동일한 웹 페이지에 액세스하는 경우에도. 903 01:00:38,870 --> 01:00:43,450 HTML을 생성. 당신이 할 수있는 2 가지 방법이 있습니다. 904 01:00:43,450 --> 01:00:48,980 그래서 우리는 지금 그 권리를 통해 이동합니다. 첫 번째 방법은 당신이 있습니다 - 네, 죄송합니다. 905 01:00:48,980 --> 01:00:51,150 그래서 그냥, PHP에서 루프에 대한 일반이 906 01:00:51,150 --> 01:00:56,270 다음은 PHP에서 에코 당신은 HTML을 에코. 907 01:00:56,270 --> 01:00:58,720 롭은 HTML 스크립트를 보여준 무슨 사용 908 01:00:58,720 --> 01:01:04,030 다음 그냥 웹 페이지에 인쇄 할 PHP 프린트를 사용. 909 01:01:04,030 --> 01:01:09,520 다른 방법은 당신이 PHP와 HTML을 분리하는 것처럼 작업을 수행하는 것입니다. 910 01:01:09,520 --> 01:01:11,940 그래서 당신은, 루프 시작 PHP의 라인을 가질 수있다 911 01:01:11,940 --> 01:01:16,020 당신은 별도의 일에 HTML의 라인을 가질 수 있습니다, 912 01:01:16,020 --> 01:01:19,700 다음은 PHP로, 다시 루프를 종료합니다. 913 01:01:19,700 --> 01:01:21,800 그래서 그런지, 그것을 분리하는 것. 914 01:01:21,800 --> 01:01:24,020 왼쪽에서, 당신은 당신이 가질 수있는 모든 -을 915 01:01:24,020 --> 01:01:26,360 그것은 PHP의 단지 1 덩어리입니다. 916 01:01:26,360 --> 01:01:28,510 오른쪽에 당신은, 당신은 PHP의 라인을 가지고 있음을 알 수 917 01:01:28,510 --> 01:01:32,540 당신은 HTML의 라인을 가지고 있고, 다시 PHP의 라인이 있습니다. 918 01:01:32,540 --> 01:01:36,870 그래서 무슨 일을하는지에 그것을 분리. 919 01:01:36,870 --> 01:01:39,330 그리고 당신은 그 중 하나의 방법, 둘 중 하나에 대한주의합니다 920 01:01:39,330 --> 01:01:41,980 그들은 여전히​​ 이미지를 인쇄, 이미지, 이미지, 921 01:01:41,980 --> 01:01:44,540 그래서 HTML은 여전히​​ 같은 방식으로 인쇄되어 있습니다. 922 01:01:44,540 --> 01:01:49,870 그리고 당신은 여전히​​ 3 이미지를 웹 사이트에 표시가 나타납니다. 923 01:01:49,870 --> 01:01:52,820 그래서 같은 일을하고있는 2 가지 방법입니다. 924 01:01:52,820 --> 01:01:55,060 >> 이제 우리는 양식과 요청을해야합니다. 롭, 당신이 보여준대로 925 01:01:55,060 --> 01:01:59,400 이 HTML 형태가 있으며, 우리는 단지이를 통해 산들 바람 것입니다. 926 01:01:59,400 --> 01:02:02,040 당신은 행동이 당신은 방법이, 당신의 행동 927 01:02:02,040 --> 01:02:04,350 종류의 당신이 그것을 보낼 것입니다 당신이 보여주고, 방법은 있는지 928 01:02:04,350 --> 01:02:06,960 그것은 GET 또는 POST 될 것. 929 01:02:06,960 --> 01:02:11,220 그리고 GET 요청은 롭 말했다으로, 폼에 넣어려고하고 있다는 것을 의미 930 01:02:11,220 --> 01:02:15,760 POST 요청이 당신이 URL에 표시되지 않습니다 반면에 당신은, URL로 표시됩니다. 931 01:02:15,760 --> 01:02:17,840 그래서 약간의 차이. 932 01:02:17,840 --> 01:02:19,950 그러나, 비슷한 일이 한 가지 933 01:02:19,950 --> 01:02:22,560 POST 및 GET 동등하게 안전하지 않은 점이다. 934 01:02:22,560 --> 01:02:26,430 그래서 당신은, 때문에 당신이 URL에 표시되지 않습니다 생각할 수 있습니다 935 01:02:26,430 --> 01:02:28,790 즉, POST가 더 안전합니다 의미 936 01:02:28,790 --> 01:02:34,420 하지만 당신은 여전히​​ 당신이 보내는 정보를 쿠키에 볼 수 있습니다. 937 01:02:34,420 --> 01:02:38,260 그렇게 생각하지 않습니다에 대한 하나 또는 다른. 938 01:02:38,260 --> 01:02:42,160 주목해야 할 또 다른 점은 섹션도 변수를 가지고있다. 939 01:02:42,160 --> 01:02:45,850 너희들은 사용자의 ID 정보를 얻을 수 PSET 7이 사용됩니다. 940 01:02:45,850 --> 01:02:48,550 무슨 일이 있었이 연관 배열을 사용할 수 있었다, 941 01:02:48,550 --> 01:02:53,310 $ _SESSION, 그리고 당신은 다른 것들에 액세스 할 수있어 942 01:02:53,310 --> 01:02:57,720 그리고 여러 페이지에서 다른 일을 저장합니다. 943 01:02:57,720 --> 01:03:00,750 >> 마지막 것은, 우리는 SQL, 구조화 된 쿼리 언어를 가지고있다 944 01:03:00,750 --> 01:03:04,360 이것은 데이터베이스를 관리하기위한 프로그래밍 언어이다. 945 01:03:04,360 --> 01:03:08,220 정확히, 데이터베이스는 무엇입니까? 그들은 테이블의 모음입니다, 946 01:03:08,220 --> 01:03:10,630 각 테이블은 개체의 유사한 종류가 있습니다. 947 01:03:10,630 --> 01:03:14,990 그래서 우리는 당신의 금융 PSET에서 사용자의 테이블을했다. 948 01:03:14,990 --> 01:03:20,610 그리고 왜 그들은 유용합니다? 그것은 영구적으로 정보를 저장하는 방법이므로. 949 01:03:20,610 --> 01:03:22,840 그것은 물건을 추적하고 물건을 관리하는 방법 950 01:03:22,840 --> 01:03:25,890 실제로 다른 페이지 및 유지 트랙에보고. 951 01:03:25,890 --> 01:03:29,930 반면에 당신은 단지 하나의 즉각적인 순간을 저장하는 경우 952 01:03:29,930 --> 01:03:33,720 다음 나중에 사용, 당신은 당신이 저장 한 아무것도에 액세스 할 수 없습니다. 953 01:03:33,720 --> 01:03:37,660 우리는 우리가 SQL 명령에 사용할 주요 4 가지가있다. 954 01:03:37,660 --> 01:03:40,190 우리는 선택, 삽입, 삭제 및 업데이트를해야합니다. 955 01:03:40,190 --> 01:03:42,880 사람들은 너희가 퀴즈에 대해 알고 정말 중요하다. 956 01:03:42,880 --> 01:03:45,990 >> 우리는 빨리 지금 이상 선택 갈거야. 957 01:03:45,990 --> 01:03:48,540 기본적으로, 당신은 데이터베이스에서 행을 선택하고 있습니다. 958 01:03:48,540 --> 01:03:52,400 그래서 만약 당신이 여기이있는 경우 - 959 01:03:52,400 --> 01:03:56,740 우리는이 2 개의 다른 일을 가지고, 우리는 클래스 테이블에서 선택합니다 960 01:03:56,740 --> 01:04:01,480 여기서 최고 - 굉장한 열의 값이 1이다. 961 01:04:01,480 --> 01:04:04,460 여기에서 볼 수 있도록, 우리는 클래스 이름의이 2 가지가 962 01:04:04,460 --> 01:04:08,490 CS50 및 Stat110, 우리는 클래스 ID와 슬로건이있다. 963 01:04:08,490 --> 01:04:13,150 그래서 우리는 모든 정보를 선택합니다. 964 01:04:13,150 --> 01:04:17,480 그런 다음, 그 종류의 최고 열 밖으로 따기 것을 바로 여기에서 볼 수 있습니다 965 01:04:17,480 --> 01:04:25,170 모든 물건은 1이며, 다음은 클래스 ID, 클래스 이름과는 골라 할 수있는 슬로건이 곳. 966 01:04:25,170 --> 01:04:28,100 이 코드에서 정확히 어떻게해야합니까? 당신은 PHP를 사용합니다. 967 01:04:28,100 --> 01:04:33,830 그래서 종류의 PHP와 SQL이 서로 관련되는 방법입니다. 968 01:04:33,830 --> 01:04:38,130 이제 우리는 우리의 코드를 가지고 있고, 우리는 우리의 쿼리 기능을 사용하려면입니다 969 01:04:38,130 --> 01:04:41,370 우리가 PSET 7에서 한, 우리는 SQL 쿼리를 실행하는 것입니다로. 970 01:04:41,370 --> 01:04:43,870 그럼 우리가해야 할 것입니다 - 971 01:04:43,870 --> 01:04:46,280 우리는 항상 거짓이면 행의 배와 동일한 지 확인해야합니다. 972 01:04:46,280 --> 01:04:49,010 그래서 다시, 당신은 유형과 값을 확인하려면, 973 01:04:49,010 --> 01:04:53,880 그것이 작동하지 않는 경우 다음, 당신은 우리가 PSET 7에서와 마찬가지로, 평소와 같이, 사과하고 싶다. 974 01:04:53,880 --> 01:04:55,870 그렇지 않으면, 당신은 그 편리와 모든 루프를 실행하려면 975 01:04:55,870 --> 01:04:59,410 foreach는 우리가 방금 갔다 것을 반복합니다. 976 01:04:59,410 --> 01:05:01,280 , 우리는 통해 반복하고 있고 우리는 지난 만들었습니다 지금 977 01:05:01,280 --> 01:05:05,080 의 우리의 쿼리를 전달한다고 가정하자, 지금 우리는 우리의 foreach 루프가있다. 978 01:05:05,080 --> 01:05:11,050 그리고 첫 번째 행은있다, 그래서 여기에 행이 바로 여기,의, 상자에 넣어 진 것. 979 01:05:11,050 --> 01:05:14,010 그것은 그것이이라도 모든 정보를 인쇄하는 것입니다. 980 01:05:14,010 --> 01:05:18,070 그래서 하단에 인쇄 것 "싶어 HTML을 알아?" 981 01:05:18,070 --> 01:05:23,370 이 루프의 첫 번째 완료 되었기 때문에 그런 다음, 다음 행으로 갈 것 982 01:05:23,370 --> 01:05:26,510 그래서 그 때, 그것의 두 번째 줄을 인쇄 할거야 983 01:05:26,510 --> 01:05:32,120 STAT110 될 것입니다있는 모든 순간을 찾아보세요. 984 01:05:32,120 --> 01:05:34,290 >> 마지막으로 하나는 SQL 취약점에 있습니다. 985 01:05:34,290 --> 01:05:37,300 나는 다윗은이 강연에서 조금 감동 알고있다. 986 01:05:37,300 --> 01:05:40,730 나중에이를 읽을 수 있습니다. 정말 재미 있어요. 987 01:05:40,730 --> 01:05:45,320 SQL 인젝션은 까다로운 물건의 종류이다. 988 01:05:45,320 --> 01:05:49,890 의 당신이 바로 쿼리로 그 변수를 고집한다고 가정 해 봅시다, 989 01:05:49,890 --> 01:05:52,290 당신은 첫 번째 라인에서 볼 수있는 것처럼. 990 01:05:52,290 --> 01:05:54,520 그래서 오른쪽, 잘 보인다? 당신은 사용자 이름에 넣는거야 991 01:05:54,520 --> 01:05:58,820 당신의 SQL 쿼리에 대한 암호, 당신이 그것을를 발송하고 데이터 테이블에 무엇이든하고 싶어. 992 01:05:58,820 --> 01:06:01,450 그것은 아주 간단 보인다. 그래서, 누군가에두고 말할 수 993 01:06:01,450 --> 01:06:04,910 암호이 또는 텍스트 여기 - 994 01:06:04,910 --> 01:06:06,780 실제로 빨간색 상자에 있어야합니다. 995 01:06:06,780 --> 01:06:11,920 그래서 그들이에 해당 암호를 넣어 봅시다 - 그것은 그들이 입력 한 내용입니다. 996 01:06:11,920 --> 01:06:16,520 그래서 그들은 퍼팅 또는 "1"= 1입니다. 997 01:06:16,520 --> 01:06:20,880 가지고있는 바보 암호의 종류. 998 01:06:20,880 --> 01:06:25,070 이제 그냥있는 대체 할, 당신은 지금 SQL 쿼리에있는 점에 유의합니다, 999 01:06:25,070 --> 01:06:29,090 당신이주의 것이기 때문에 그것은 항상 true로 평가하는 1000 01:06:29,090 --> 01:06:32,240 당신은 SQL 쿼리이 모든 정보를 선택할 수 있습니다 1001 01:06:32,240 --> 01:06:35,420 또는 당신은 단지 = 1을 가질 수 있습니다. 1002 01:06:35,420 --> 01:06:41,030 그래서 항상 true로 평가하는 것입니다. 1003 01:06:41,030 --> 01:06:46,610 즉, 해커가 시스템에 침입 할 수 있다는 것을 의미하기 때문 정말 작동하지 않을 것. 1004 01:06:46,610 --> 01:06:49,300 이에 대한 해결책은 PDO 시스템을 사용할 필요가 있다는 것이다, 1005 01:06:49,300 --> 01:06:51,360 이는 당신이 물음표를 사용하는 것을 의미 1006 01:06:51,360 --> 01:06:53,350 무엇 PSET 7에서 사용되는 사람, 인 1007 01:06:53,350 --> 01:06:57,620 당신은 당신이 뭔가를 넣어 원하는 위치의 자리에 물음표를 사용하는가는 곳, 1008 01:06:57,620 --> 01:07:01,430 그리고, 당신은 쉼표를해야 할 것입니다, 그리고 당신은 나중에해야합니다 1009 01:07:01,430 --> 01:07:07,610 당신의 문자열 후, 당신이 원하는 다른 변수는 물음표로 교체합니다. 1010 01:07:07,610 --> 01:07:10,330 그래서 당신은 지금이 빨간색 물음표가 점에 유의합니다. 1011 01:07:10,330 --> 01:07:15,420 그 후 순서에 장착하는 알 수 있도록 다음 내 문자열 후 변수를 넣어. 1012 01:07:15,420 --> 01:07:18,470 누군가가 이런 식으로 작업을 수행하는 경우 즉, 있는지 확인합니다 1013 01:07:18,470 --> 01:07:24,050 그들은, 확인 것, 또는 1 = 1 상황이 1014 01:07:24,050 --> 01:07:30,490 백 엔드에, 실제로 SQL 쿼리를 중단하지 않도록해야합니다. 1015 01:07:30,490 --> 01:07:33,660 좋아, PHP와 SQL의 회오리 바람, 즉 거의 그것의 너무. 1016 01:07:33,660 --> 01:07:41,520 여러분 모두에게 행운을 빕니다, 현재 오레곤에 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] 모두 좋아. 일부 자바 스크립트를 통해 갈 시간 1018 01:07:44,270 --> 01:07:48,840 일부 다른 것들이 매우 빠르게 그래서 우리는 당신에게 오늘 밤을 개최하지 않습니다. 1019 01:07:48,840 --> 01:07:56,930 자바 스크립트. 예. 자바 스크립트는 소문에 의하면, 멋진 물건의 종류입니다. 1020 01:07:56,930 --> 01:07:59,090 당신이 정말로 자바 스크립트에 대해 알아야 할 것들, 그것은 일종의처럼 1021 01:07:59,090 --> 01:08:03,810 웹 응용 프로그램은 일을 할 것입니다 무엇의 클라이언트 쪽 끝. 1022 01:08:03,810 --> 01:08:08,280 당신은 단지 서버 측에서 모든 시간을 처리하는 것을 원하지 않는 몇 가지가있다. 1023 01:08:08,280 --> 01:08:12,880 모든 작은 상호 작용, 한 가지를 강조하는 일이 사라지게 만드는. 1024 01:08:12,880 --> 01:08:15,340 당신은 정말 당신의 서버에 그 모든 시간을 이야기하고 싶지 않습니다. 1025 01:08:15,340 --> 01:08:18,069 그리고 그 중 일부는 서버 측에서 수행도 할 수 없습니다. 1026 01:08:18,069 --> 01:08:21,899 우리가 자바 스크립트와 같은 뭔가가 필요 이유입니다. 1027 01:08:21,899 --> 01:08:24,359 자바 스크립트에 대한 멋진 것들 : 그것은 동적으로 입력됩니다. 1028 01:08:24,359 --> 01:08:27,149 이것이 의미하는 것은 프로그램이 알 필요가 없다는 것입니다 1029 01:08:27,149 --> 01:08:30,970 당신이 그것을 쓸 때 무엇을, 정확히, 변수입니다. 1030 01:08:30,970 --> 01:08:34,510 VM이 실행으로 그냥 그렇게 알아낼 수 있습니다. 1031 01:08:34,510 --> 01:08:37,520 재미있어 다른 것들 : 그것은 중괄호 언어의, 1032 01:08:37,520 --> 01:08:41,359 이는 구문은 C와 PHP와 비슷한 의미합니다. 1033 01:08:41,359 --> 01:08:47,050 당신은 당신이 자바 스크립트를 학습 할 때 많은 재 작업을 할 필요가 없습니다. 1034 01:08:47,050 --> 01:08:49,180 여기에서 우리는 자바 스크립트를 조금 있습니다. 1035 01:08:49,180 --> 01:08:52,560 여기 흥미로운 점은, 당신이 그것을 보면,이다 1036 01:08:52,560 --> 01:08:56,330 우리는 머리 태그에 바로 자바 스크립트의 비트가있다. 1037 01:08:56,330 --> 01:08:59,479 어떤 것은 기본적으로 그냥 자바 스크립트 파일이 포함되어 않습니다. 1038 01:08:59,479 --> 01:09:02,260 이것은 당신이 당신의 프로그램에 자바 스크립트를 포함 할 수있는 하나의 방법입니다. 1039 01:09:02,260 --> 01:09:06,910 그런 다음 두 번째 조금, 실제로 일부 인라인 자바 스크립트입니다 1040 01:09:06,910 --> 01:09:10,790 아주 CSS로 인라인 스타일과 유사, 1041 01:09:10,790 --> 01:09:16,180 그리고 당신은 매우 빨리 거기에 몇 가지 코드를 작성하고 있습니다. 1042 01:09:16,180 --> 01:09:18,120 자바 스크립트는 배열을 가지고 있습니다. 1043 01:09:18,120 --> 01:09:20,850 매우 유용합니다, 주위에 데이터를 유지하는 또 다른 방법입니다. 1044 01:09:20,850 --> 01:09:25,180 아주 좋은 쉬운 문법. 1045 01:09:25,180 --> 01:09:29,870 당신은 모든 액세스와 모든 것을 함께 유지하기 위해 괄호를 사용합니다. 1046 01:09:29,870 --> 01:09:35,020 너무 복잡 아무것도 없습니다. 1047 01:09:35,020 --> 01:09:38,630 일반적으로 자바 스크립트와 스크립트 언어에 대한 좋은 점 1048 01:09:38,630 --> 01:09:40,920 당신이 배열의 크기에 대해 걱정하지 않아도됩니다. 1049 01:09:40,920 --> 01:09:43,880 당신은 단지에 Array.length를 사용하고 추적 할 수 있습니다, 1050 01:09:43,880 --> 01:09:46,960 또한 배열이 성장 또는 당신이 필요로 축소 할 수 있습니다. 1051 01:09:46,960 --> 01:09:49,279 그래서 당신은, 어떤 종류에 대해 걱정할 필요가 없습니다 1052 01:09:49,279 --> 01:09:57,050 아, 나는 더 많은 것들을, 또는 그런 일을 할당해야합니다. 1053 01:09:57,050 --> 01:10:00,090 >> 여기 좋은 점은 자바 스크립트 객체가 있다는 점입니다. 1054 01:10:00,090 --> 01:10:04,800 이것은 객체 지향 언어, 그래서 그것이 무엇이 본질적 1055 01:10:04,800 --> 01:10:10,100 그룹 데이터에 당신을위한 방법을 함께 구조체 비슷, 1056 01:10:10,100 --> 01:10:17,280 하지만 당신은 구조체처럼 또는 연관 배열 구문에 액세스 할 수 있습니다. 1057 01:10:17,280 --> 01:10:22,520 그것은 매우 간단하고 당신이 함께 할 수있는 것은 함께 그룹 데이터입니다 1058 01:10:22,520 --> 01:10:24,810 당신이 관련 데이터의 무리가 있다면. 1059 01:10:24,810 --> 01:10:26,850 당신이 차를 설명하기 위해 필요한 모든 것들이기 때문에, 1060 01:10:26,850 --> 01:10:29,050 당신은 다른 장소의 무리에있을 필요가 없습니다. 1061 01:10:29,050 --> 01:10:35,300 당신은 자바에있는 개체로 붙일 수 있습니다. 1062 01:10:35,300 --> 01:10:39,090 당신은 아마 알다시피, 반복하는 그 지루한 작업 중 하나입니다. 1063 01:10:39,090 --> 01:10:43,810 당신은 다시 이상에 해. 당신은 차에있는 모든 개체 얘기해야 1064 01:10:43,810 --> 01:10:47,340 또는 당신은 목록 또는 그런 일에 모든 항목을 통과해야합니다. 1065 01:10:47,340 --> 01:10:51,770 그래서 자바 스크립트, PHP, foreach는 구문과 유사 있습니다. 1066 01:10:51,770 --> 01:10:54,590 이 경우, 루프에 대한이다. 1067 01:10:54,590 --> 01:10:57,300 당신은 개체에 대한이 사용하고 싶습니다. 1068 01:10:57,300 --> 01:11:01,030 당신이 배열에 이것을 사용하는 경우 발생하는 몇 가지 문제가 있습니다. 1069 01:11:01,030 --> 01:11:03,750 그것은 일반적으로하지만, 이들은 매우 유용합니다, 그런 것들 중 하나입니다 1070 01:11:03,750 --> 01:11:06,590 당신은 많은 오버 헤드를 제거하기 때문에 1071 01:11:06,590 --> 01:11:10,270 당신은 자신에 의해 개체의 모든 것을 끌어 필요가 없기 때문에. 1072 01:11:10,270 --> 01:11:12,300 당신은 모든 키 이름을 기억할 필요가 없습니다. 1073 01:11:12,300 --> 01:11:18,270 당신은 종류의 구문에서 그들을 다시 얻을. 1074 01:11:18,270 --> 01:11:21,500 이것에 대해, 당신은 기억하고 싶은 1075 01:11:21,500 --> 01:11:27,180 당신은 테이블을 해시하는 매우 유사한 방식으로, 모든 키를 다시 얻고있다. 1076 01:11:27,180 --> 01:11:30,880 당신이에서 기억한다면 당신은 문자열에 둘 것입니다 때, 당신은 뭔가를 얻을 수 1077 01:11:30,880 --> 01:11:33,840 즉,와 관련 지을 수 있었던 값을 가지는 것입니다. 1078 01:11:33,840 --> 01:11:36,360 당신이 함께 할 수있는 것은, 당신이 모든 권리를 말할 수있다 1079 01:11:36,360 --> 01:11:42,120 나는 차에 넣어, 나는 페라리를했다. 1080 01:11:42,120 --> 01:11:45,290 그래서 당신은 나중에 다시 문자열 페라리에 넣을 수 있습니다, 당신은 그를 얻을 수 있습니다. 1081 01:11:45,290 --> 01:11:50,000 그리고 당신은 루프를 위해 함께 루프에서이 작업을 수행 할 수 있습니다. 1082 01:11:50,000 --> 01:11:53,320 그래서 그냥 개체에 대한 자세한. 당신이 기억해야 할이에서 중요한 건 1083 01:11:53,320 --> 01:12:00,340 , 당신이 함께 할 때마다 구문과 같은 오브젝트 구조체를 사용할 수 있다는 것입니다 1084 01:12:00,340 --> 01:12:04,590 무엇 문자열로 사용하려고하는 유효한 변수 이름이 아닌 경우를 제외하고. 1085 01:12:04,590 --> 01:12:07,650 당신이 거기에 보면 그래서, 우리는 공백으로 키가 있습니다. 1086 01:12:07,650 --> 01:12:12,500 글쎄, 당신은 object.key 넣어 있다면, 공간, 공간, 공간, 1087 01:12:12,500 --> 01:12:15,320 그건 그냥 문법적으로 의미가 없습니다. 1088 01:12:15,320 --> 01:12:22,730 그래서 당신은 괄호 구문이 종류에 해당 할 수 있습니다. 1089 01:12:22,730 --> 01:12:26,520 >> 또한, 자바 스크립트는 매우 범위 방향 PHP이다. 1090 01:12:26,520 --> 01:12:29,050 당신은 범위를 주소의 2 가지 방법이 있습니다. 1091 01:12:29,050 --> 01:12:31,960 당신은 변수 앞에 VAR을 가질 수 없습니다, 1092 01:12:31,960 --> 01:12:34,060 그것은 단지이 글로벌을 의미합니다. 1093 01:12:34,060 --> 01:12:37,050 당신은 어디에서 볼 수 있습니다. 당신이 if 문이를 넣어하더라도, 1094 01:12:37,050 --> 01:12:42,430 다른 곳에서 당신의 코드에서 해당 시점 이후에는 해당 변수를 볼 수 있습니다. 1095 01:12:42,430 --> 01:12:46,730 또 다른 한가지는, 그러나, 당신이 처한 어떤 기능 제한의, VAR과 함께합니다 1096 01:12:46,730 --> 01:12:48,870 당신이 함수에없는 경우에, 잘, 그것은 세계입니다. 1097 01:12:48,870 --> 01:12:53,900 당신이 함수에있는 경우 그것은 그 함수 내에서만 볼 수 있습니다. 1098 01:12:53,900 --> 01:12:56,420 나는 그래, 예를 들어,하지만하지 않습니다. 그것은 그 중 하나의 위치를 1099 01:12:56,420 --> 01:12:59,900 당신은 당신이 세계로 원하는 변수를 관리 할 수​​ 있습니다 1100 01:12:59,900 --> 01:13:03,810 어떤 변수 로컬되고 싶어하지만, 당신이주의해야합니까, 1101 01:13:03,810 --> 01:13:06,890 당신이 C에서 할 미립 컨트롤의 형식이 없기 때문에, 1102 01:13:06,890 --> 01:13:15,820 뭔가 루프에서 선언되는 경우에는 for 루프에서 숙박을 어디로 가는지. 1103 01:13:15,820 --> 01:13:18,790 우리가 실제로 위해 자바 스크립트를 사용하는 방법에 대한 걱정 것은 바로 웹 페이지를 조작한다? 1104 01:13:18,790 --> 01:13:21,800 내 말은, 그 이유는 우리가이 일을하고 있습니다. 1105 01:13:21,800 --> 01:13:23,840 >> 우리는 DOM이라는 것을 사용, 그렇게하십시오. 1106 01:13:23,840 --> 01:13:25,850 문서 객체 모델. 1107 01:13:25,850 --> 01:13:29,430 기본적으로, 이것이하는 것은 모든 HTML 걸립니다 1108 01:13:29,430 --> 01:13:34,110 서로 중첩 된 개체의 무리로 모델을 밖으로. 1109 01:13:34,110 --> 01:13:37,080 이 같은으로 시작. 1110 01:13:37,080 --> 01:13:44,770 당신은 거기에 코드의 무리가 그 종류의의 나를 위해, 오른쪽에있다 - 1111 01:13:44,770 --> 01:13:46,640 당신은 그 조작하기가 매우 어려울 거라고 생각합니다, 1112 01:13:46,640 --> 01:13:48,700 당신은 텍스트의 무리를 통해 분석 할 것입니다 때문에 1113 01:13:48,700 --> 01:13:52,080 물건을 따로 따로 조각 필요. 그리고 그것은 정확히 무엇을 포맷하지 않은 경우? 1114 01:13:52,080 --> 01:13:54,880 나쁜 일이 일어날 것입니다. 1115 01:13:54,880 --> 01:13:58,140 그래서, 자바 스크립트는 당신이 돌봐, 당신은 좋은 데이터 구조를 얻을 1116 01:13:58,140 --> 01:14:01,390 당신이 문서가 어디에, 왼쪽에있는 것과 같은, 1117 01:14:01,390 --> 01:14:03,530 그 안에 당신이 HTML이라는 무언가가 1118 01:14:03,530 --> 01:14:05,600 그 안에 당신은 머리와 몸이 1119 01:14:05,600 --> 01:14:08,420 그 머리 속에서 당신은, 등등, 기타 등등 기타 등등 제목이. 1120 01:14:08,420 --> 01:14:11,810 따라서, 그것은 단지 있도록 웹 페이지를 조작 간소화 1121 01:14:11,810 --> 01:14:14,190 오, 난 그냥이 개체에 얘기하고 싶어. 1122 01:14:14,190 --> 01:14:21,340 당신은 당신 자신이 만든 다른 개체에게 이야기 할 매우 비슷한 방식으로 정렬. 1123 01:14:21,340 --> 01:14:25,980 내가 말했듯이, 모든 DOM은 문서 객체입니다. 1124 01:14:25,980 --> 01:14:29,290 하나, 그것은 단지 하나의 장소 그리고 당신은 일을 찾아 그 안에 갈 수 있습니다 1125 01:14:29,290 --> 01:14:33,880 그리고 당신은 그것을 할 수 있습니다 -이 거기, 그 일의 이전 스타일, 1126 01:14:33,880 --> 01:14:38,130 당신은 document.getElementById를을하고, 여기서 다음 이름, 1127 01:14:38,130 --> 01:14:42,420 당신이 아마 말할 수와,이 잠시 후 매우 다루기 힘든 가져옵니다. 1128 01:14:42,420 --> 01:14:44,480 그래서 당신은 아마 그렇게하고 싶지 않아. 우리가 가지고있는 이유 1129 01:14:44,480 --> 01:14:48,760 우리는이 이후에 대해 이야기거야 다음 일은. 1130 01:14:48,760 --> 01:14:52,510 여기에서 중요한 점은, 그 모든 권리, 당신이 바로,이 모든 요소가? 1131 01:14:52,510 --> 01:14:56,400 그래서 어쩌면 내가 페이지를로드 뭔가의 색상을 변경할 수 있습니다. 1132 01:14:56,400 --> 01:14:58,380 그래서 뭐? 어떻게 내 사용자가 뭔가를 클릭하면? 1133 01:14:58,380 --> 01:15:00,540 나는 그들이 뭔가를 클릭하면 재미있는 일을하고 싶다. 1134 01:15:00,540 --> 01:15:02,600 우리는 사건이 이유입니다. 1135 01:15:02,600 --> 01:15:05,330 당신은 기본적으로 당신의 DOM의 모든 요소를​​ 찾을 수 있습니다, 1136 01:15:05,330 --> 01:15:08,560 다음 이봐, 말한다. 이것은로드 또는 누군가가 클릭하면 1137 01:15:08,560 --> 01:15:11,410 하거나 마우스 위에, 그것으로 뭔가를 할 때. 1138 01:15:11,410 --> 01:15:15,330 그리고 무엇을 당신이 당신이 당신을 위해 이것을 처리 기능을 가지고있다. 1139 01:15:15,330 --> 01:15:17,980 이 기능은 이벤트 핸들러입니다. 1140 01:15:17,980 --> 01:15:20,440 어떤 놈들이 -이 말을 단지 멋진 방법, 1141 01:15:20,440 --> 01:15:23,500 이 이벤트가 발생하면이 기능은 실행됩니다. 1142 01:15:23,500 --> 01:15:28,070 그래서 발생하는 이벤트를 처리합니다. 1143 01:15:28,070 --> 01:15:30,810 이렇게하면 이벤트 처리기를 배치하는 방법입니다. 1144 01:15:30,810 --> 01:15:34,750 나는 몇 가지 버튼이 있고, 당신이 그것을 클릭하면, 그것은 폭발. 1145 01:15:34,750 --> 01:15:40,560 그래서 버튼을 클릭하지 마세요. 1146 01:15:40,560 --> 01:15:42,910 이것은 바로, 그 접근 방법 중 하나입니다? 1147 01:15:42,910 --> 01:15:46,430 , 당신은 버튼 태그를 가지고 있고, 클릭에 당신은 말한다 문자열이 1148 01:15:46,430 --> 01:15:50,460 아, 그런데, 나를 위해이 폭발하는 일을. 1149 01:15:50,460 --> 01:15:53,990 그렇지 않으면, 당신이 방금 만든 일반 버튼처럼. 1150 01:15:53,990 --> 01:15:56,550 또한이 다른 방법으로 작업을 수행 할 수 있습니다, 1151 01:15:56,550 --> 01:16:02,770 우리가 jQuery를 이야기 한 후 DOM 요소를 잡아하지만,에 의해 우리는을 절약 할 수 있습니다. 1152 01:16:02,770 --> 01:16:07,580 >> jQuery를 : 그것은 크로스 브라우저 인 라이브러리입니다. 1153 01:16:07,580 --> 01:16:09,580 당신은 거의 아무것도 사용할 수 있습니다. 1154 01:16:09,580 --> 01:16:12,090 그리고 그것은 당신에게 작업 도구를 많이 제공합니다. 1155 01:16:12,090 --> 01:16:15,850 자바 스크립트는 강력한 동안, 당신이 필요로하는 모든 도구를 가지고 있지 않기 때문에 1156 01:16:15,850 --> 01:16:20,550 정말 웹 응용 프로그램을 해결하기 위해 상자 밖으로 당신이 수행 할 수 있습니다. 1157 01:16:20,550 --> 01:16:24,650 그래서, 많은 것들을 단순화 당신에게 많은 기능을 제공합니다 1158 01:16:24,650 --> 01:16:28,760 당신이 일반적으로 또 다시 이상, 직접 작성해야 할 것입니다 상자 밖으로. 1159 01:16:28,760 --> 01:16:31,600 그냥 일이 매우 간단합니다. 1160 01:16:31,600 --> 01:16:35,780 당신은 또한 당신이 그 모든 요소를​​ 보자 셀렉터를 가지고 1161 01:16:35,780 --> 01:16:42,800 당신의 DOM 훨씬 더에서 간단하게, 대신이 매우 긴 함수 호출을 사용하는 데. 1162 01:16:42,800 --> 01:16:46,630 이 선택기에 대한 자세한. 당신은 당신이의 말을하자이 거기,이 1163 01:16:46,630 --> 01:16:49,800 나는 ID를 가진 요소 싶어 "바위." 1164 01:16:49,800 --> 01:16:56,450 물론, jQuery를, 그것은 단지 $ 다음 파운드가 문자열, 다음의 "바위." 1165 01:16:56,450 --> 01:17:01,960 그것은 매우 간단하고이 문제를 다루는 전통적인 자바 스크립트의 방법보다 훨씬 빠릅니다. 1166 01:17:01,960 --> 01:17:06,120 그리고 당신은 클래스와 요소 유형에 대한 비슷한 일이 있습니다. 1167 01:17:06,120 --> 01:17:08,140 jQuery를입니다 - 멋진 기능 중 하나는 일종의 압축 할 수 있습니다 1168 01:17:08,140 --> 01:17:14,350 당신의 DOM에 쿼리 다운 매우, 매우 빨리. 1169 01:17:14,350 --> 01:17:18,980 이제 우리는 다시 이벤트 처리에있어, 이것은 당신이 jQuery를 하나의 이벤트를 처리하는 방법이다. 1170 01:17:18,980 --> 01:17:23,090 그래서 우리가 여기에 가고있는 것은 우리가 모든 권리, 말하고있는 것입니다. 나는 스크립트 태그가, 오른쪽? 1171 01:17:23,090 --> 01:17:25,400 그래서 나는이 인라인 자바 스크립트가있다. 1172 01:17:25,400 --> 01:17:27,750 우리가하려고하는 것은 우리가 모든 권리, 말을하려고하고 있습니다. 1173 01:17:27,750 --> 01:17:30,860 문서는 문서가로드 된 것 즉, 준비가되면 1174 01:17:30,860 --> 01:17:34,660 , 우리는 그 기능에 갈 예정하고 있으며, 우리는 모든 권리를 말하는거야 1175 01:17:34,660 --> 01:17:37,060 이 기능은 실제로 다른 일을하고 있어요. 1176 01:17:37,060 --> 01:17:42,320 그것은 기본적으로 모든 권리는 나에게 ID를 가진 요소 얻을, 말의 '대한 myid를. " 1177 01:17:42,320 --> 01:17:47,960 다음이 당신이 클릭하면 실행하는 기능 핸들러를 제공합니다. 1178 01:17:47,960 --> 01:17:49,820 기본적으로이 명령을 주면, 그것이 말하는, 괜찮습니다. 1179 01:17:49,820 --> 01:17:52,630 페이지가로드되는, 그래서 나는,이 요소를 찾아 낼거야 1180 01:17:52,630 --> 01:17:56,420 그것을이 이벤트 처리기를주고, 그것은 기본적으로 당신을위한 당신의 페이지를 설정합니다. 1181 01:17:56,420 --> 01:18:00,520 그리고 이것은 당신이 이벤트 처리에 대해 생각하는 방법이다. 1182 01:18:00,520 --> 01:18:06,310 당신은, 생각하는 모든 권리, 뭔가가 발생했을 때, 나는 일이 어떻게할까요 싶어? 1183 01:18:06,310 --> 01:18:10,520 당신은, 좋아, 나는이 일에 반드시이 일 회담을해야, 생각하고 싶지 않아 1184 01:18:10,520 --> 01:18:14,660 이 일 ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ, 당신은 단지 이벤트의 관점에서 일을 얘기하고 싶어하기 때문이다. 1185 01:18:14,660 --> 01:18:17,650 이 경우이 문제가 발생합니다. 이 경우, 그 발생합니다. 1186 01:18:17,650 --> 01:18:20,240 일이 다른 일을 실행할 경우에, 그 좋아요. 1187 01:18:20,240 --> 01:18:22,150 하지만 당신은 복잡한 코드를 시도하고 싶지 않아 1188 01:18:22,150 --> 01:18:24,130 어디, 한 번에 여러 가지를 유발하고 1189 01:18:24,130 --> 01:18:28,860 당신이 자신에게 두통을 줄 것입니다 때문입니다. 1190 01:18:28,860 --> 01:18:32,340 >> 좋아요. 이제 우리는 우리의 페이지가 이벤트를 처리 할 수​​ 얻을 수 있습니다, 1191 01:18:32,340 --> 01:18:35,640 하지만의 내 사용자가 버튼을 클릭 해 봅시다. 1192 01:18:35,640 --> 01:18:38,040 뭐, 내가 다시 서버에 그 요청을 보내려면 1193 01:18:38,040 --> 01:18:41,100 새 페이지를 다시로드 할 필요가 있기 때문에 나는, 페이지를 다시로드하지 않으 1194 01:18:41,100 --> 01:18:44,390 매일 시간이 종류의 지루한 가져오고 왜 필요합니까 1195 01:18:44,390 --> 01:18:47,430 제목을 다시 아래로 당겨, 다시 바닥 글, 1196 01:18:47,430 --> 01:18:49,670 모든 페이지의 요소를 다시 1197 01:18:49,670 --> 01:18:53,180 그냥 인사 나 시간을 새로 고치려면? 1198 01:18:53,180 --> 01:18:55,290 우리는 아약스와 같은 무언가가 그런 이유입니다. 1199 01:18:55,290 --> 01:18:59,150 우리가 Ajax를 여기에서 할 수있는 것은, 우리가 모든 권리를 말할 수있다 1200 01:18:59,150 --> 01:19:01,290 나는 서버에 일부 데이터를 보내려면, 1201 01:19:01,290 --> 01:19:04,010 나는 내가 내 페이지를 업데이트 할 수 있습니다 다시 응답을 얻으려면, 1202 01:19:04,010 --> 01:19:12,120 아니면 그냥 반드시 사용자에게 아무것도 보여주지 않는 어떤 알고리즘 계산​​을한다. 1203 01:19:12,120 --> 01:19:15,500 당신은 무엇을이 작업을 수행해야합니까? 글쎄, 당신은 당신이 얘기를해야 URL이 필요합니다. 1204 01:19:15,500 --> 01:19:18,650 서버가 마법처럼 어디 선가에서들을 수 없습니다. 1205 01:19:18,650 --> 01:19:21,960 당신은 당신이이 데이터를 전송하고 특정 장소가 필요합니다. 1206 01:19:21,960 --> 01:19:26,240 그리고 당신은 또한 보내 일부 데이터를 필요로하거나, 어쩌면 데이터가없는 쿼리입니다. 1207 01:19:26,240 --> 01:19:31,380 당신은 안녕, 나는 살아, 또는 그런 식으로 해요, 다시 서버로 ping을 말하고 싶다. 1208 01:19:31,380 --> 01:19:35,150 그리고 당신은 기본적으로 성공을 처리하는 기능을 원한다. 1209 01:19:35,150 --> 01:19:38,250 의 당신이 당신의 서버에서 일부 정보를 다시 얻을 수 있다고 가정 해 봅시다, 1210 01:19:38,250 --> 01:19:42,960 당신은 자신의 페이지에 사용자의 제목을 변경하고 싶습니다. 1211 01:19:42,960 --> 01:19:44,930 그래서 당신은 정보를 다시 얻을 것입니다, 1212 01:19:44,930 --> 01:19:48,860 당신은 화면에 그 밀어 것입니다. 1213 01:19:48,860 --> 01:19:51,170 페이지가 준비가되었을 때 무슨 일이,,입니다 1214 01:19:51,170 --> 01:19:56,500 당신은 환영 인사라는이 버튼에 클릭 기능에를 만듭니다. 1215 01:19:56,500 --> 01:19:58,810 그 버튼을 누를 때 어떤 일이 그 다음 일은이다, 1216 01:19:58,810 --> 01:20:03,700 당신이 greetings.php 이야기, 당신은 POST 요청을 1217 01:20:03,700 --> 01:20:07,290 당신은 안녕, 나에게 당신의 페이지에서 뭔가를 얻을 말한다. 1218 01:20:07,290 --> 01:20:09,890 우리가 정말, 그 설명해야하지만, greetings.php하지 않습니다 1219 01:20:09,890 --> 01:20:12,480 그냥 말을하자, "여러분, 안녕하세요."다시 제공 1220 01:20:12,480 --> 01:20:15,650 그래서 우리는, "안녕하세요!"이 문제를 다시 얻을이의 성공 1221 01:20:15,650 --> 01:20:20,730 잘못되는 일이 없어야 가정, 우리는 그냥이 목표 위치로 이동 1222 01:20:20,730 --> 01:20:25,720 우리가 지정하고 우리가 거​​기에 응답 스틱있다. 1223 01:20:25,720 --> 01:20:31,560 그리고 이것은 아약스 쿼리를 설정하는 매우 간단한 방법입니다. 1224 01:20:31,560 --> 01:20:34,340 >> 매우 신속하게, 롭 종류의, 이미 언급 1225 01:20:34,340 --> 01:20:37,170 일이 잘못 갈 수있는, 나쁜 일이 발생할 수 있습니다, 1226 01:20:37,170 --> 01:20:42,660 그래서 당신은 이러한 HTTP 응답 코드에 익숙합니다. 1227 01:20:42,660 --> 01:20:46,030 어떤이가하는 모든 것을 좋아했다, 200, 같은 단지입니다. 1228 01:20:46,030 --> 01:20:48,670 뭔가 다른, 나쁜 일이 일어났다. 1229 01:20:48,670 --> 01:20:50,790 그것은 일반적으로 당신이 기억하고 싶은 것입니다. 1230 01:20:50,790 --> 01:20:53,440 그러나이 모든 것을 알고하는 것이 좋다. 1231 01:20:53,440 --> 01:20:55,970 그리고 마지막으로, 일단 우리는이 모든 것을 겪었어요, 1232 01:20:55,970 --> 01:20:58,680 우리는 디자인에 대해 매우 신속하게 얘기해야 1233 01:20:58,680 --> 01:21:00,620 그리고, 우리는 당신이 모두 떠나게 할 수 있습니다. 1234 01:21:00,620 --> 01:21:03,410 디자인. 당신이 기억하고 싶은 것들. 1235 01:21:03,410 --> 01:21:06,950 이러한 질문에 스스로에게 물어 : 누가 사용할 것? 1236 01:21:06,950 --> 01:21:09,580 그들은 무엇을 위해 그것을 사용하는 것입니다? 내 사용자가 무슨 상관이야? 1237 01:21:09,580 --> 01:21:11,750 그들은 무엇에 대해 걱정하지 않는다? 1238 01:21:11,750 --> 01:21:14,500 당신은 응용 프로그램을 확인하고 그냥 성장하게하고 싶지 않아 1239 01:21:14,500 --> 01:21:18,270 이 거대한, 당신도 완료 할 수있는 모든이 걸리는 것이됩니다. 1240 01:21:18,270 --> 01:21:23,900 당신은 당신이 해결하려는 개별 목표와 계획과 물건을 갖고 싶어. 1241 01:21:23,900 --> 01:21:29,000 이 노력합니다. 이 모든 것은, 기본적으로, 말한다 1242 01:21:29,000 --> 01:21:34,950 쉽게 사용자가 사용할 수 있도록, 실제로,이 슬라이드처럼 텍스트의 거대한 덩어리입니다하지 않습니다. 1243 01:21:34,950 --> 01:21:38,020 당신은 그 사람이 갈 수 있도록 매우 쉽게 뭔가가되고 싶어요 1244 01:21:38,020 --> 01:21:40,800 그들이하고 싶은 것을 할. 1245 01:21:40,800 --> 01:21:42,920 당신은 그들이 5 페이지를 탐색하고 싶지 않습니다 1246 01:21:42,920 --> 01:21:45,460 귀하의 사이트에 대한 귀하의 주요 기능을 얻을 수 있습니다. 1247 01:21:45,460 --> 01:21:49,290 구글은 전에 5 페이지를 가지고 있다면 당신은 무언가를 검색 할 수 있습니다, 1248 01:21:49,290 --> 01:21:53,080 아무도 사용하지 것이다. 1249 01:21:53,080 --> 01:21:55,890 그리고 마지막으로, 종이 프로토 타입, 포커스 그룹. 1250 01:21:55,890 --> 01:21:59,220 좋은 디자인 및 테스트 방법이있다. 1251 01:21:59,220 --> 01:22:00,730 당신이 당신을 위해 적합하다고 생각해서, 1252 01:22:00,730 --> 01:22:04,860 다른 사람이 작동 생각 의미하지 않는다. 1253 01:22:04,860 --> 01:22:14,490 하지만 그래, 바로 그거야. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]