1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> 데이비드 J. 마란 : 좋습니다. 3 00:00:12,900 --> 00:00:16,790 사상 처음으로 이렇게 환영 퀴즈 CS50의 사후. 4 00:00:16,790 --> 00:00:18,340 우리는 우리가 열다 줄 알았는데 이 전통이 올해. 5 00:00:18,340 --> 00:00:20,960 그리고이 기회가 될 것입니다 를 통해 산책 6 00:00:20,960 --> 00:00:22,220 퀴즈에 대한 솔루션을 제공합니다. 7 00:00:22,220 --> 00:00:26,160 그리고 우리는 속도를 높이거나 기반으로 속도를 줄인다 여기에 사람들의 관심에. 8 00:00:26,160 --> 00:00:29,730 >> 당신이이기 때문에 그래서 당신은 아마 여기 당신이 수있는 방법에 관심이 나 9 00:00:29,730 --> 00:00:31,170 어떤 대답해야 이러한 문제. 10 00:00:31,170 --> 00:00:33,300 그럼 왜 우리가 살펴하지 않는다 먼저이 섹션? 11 00:00:33,300 --> 00:00:34,450 그래서 문자열을 받고. 12 00:00:34,450 --> 00:00:37,600 이렇게하면 세 가지 다른 버전을 준 이었다 프로그램의 궁극적 13 00:00:37,600 --> 00:00:39,650 사용자로부터 문자열을 얻을 것을 의미했다. 14 00:00:39,650 --> 00:00:42,530 했다가 그런 적이 있는지 여부 결정하기 위해 당신에게 떠났다. 15 00:00:42,530 --> 00:00:45,150 >> 그리고 우리는, 질문 0에 요청 버전 1이라고 가정 16 00:00:45,150 --> 00:00:46,400 컴파일 및 실행. 17 00:00:46,400 --> 00:00:48,860 왜 프로그램은 세그 폴트 수 있는가? 18 00:00:48,860 --> 00:00:51,150 언뜻 보면, 어떤 제안 같은 이유? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 그래. 21 00:00:54,489 --> 00:00:59,260 >> 청중 : 그래서이 본 기억 보고의 이전 예 22 00:00:59,260 --> 00:01:05,506 문자 * s와의의 스캔을보고하고 이 포인터, 방법이기 때문에보고 23 00:01:05,506 --> 00:01:07,971 당신이 스캔 무엇을 그것은 어떤 영향을 미쳤는가? 24 00:01:07,971 --> 00:01:10,940 s 그것 또는 s의 주소는? 25 00:01:10,940 --> 00:01:11,180 >> 데이비드 J. 마란 : OK. 26 00:01:11,180 --> 00:01:11,480 좋은. 27 00:01:11,480 --> 00:01:14,830 그래서 궁극적으로, 모든 문제의 원인 아마 줄일 것입니다 28 00:01:14,830 --> 00:01:16,210 그 변수 s의. 29 00:01:16,210 --> 00:01:17,280 그리고 그것은 참으로 변수입니다. 30 00:01:17,280 --> 00:01:19,900 그 변수의 데이터 타입은 숯불 *, 어떤는 것 의미 31 00:01:19,900 --> 00:01:22,570 문자의 주소를 포함하고있다. 32 00:01:22,570 --> 00:01:23,850 그리고 거기에 대한 통찰력이있다. 33 00:01:23,850 --> 00:01:28,330 그것은의 주소를 포함 할 것 더 일반적으로 문자 나,, 34 00:01:28,330 --> 00:01:32,110 첫 번째 문자의 주소 문자의 전체 블록. 35 00:01:32,110 --> 00:01:36,680 >> 그러나 캐치는 그 검사의 목적에 인생은, 주소를 부여하고 부여 36 00:01:36,680 --> 00:01:40,960 형식 코드는 % s의 같은 읽기 청크에 문자열 37 00:01:40,960 --> 00:01:42,330 해당 주소의 메모리. 38 00:01:42,330 --> 00:01:46,040 하지만 등호 전에이 없기 때문에 처음에 그 세미콜론 39 00:01:46,040 --> 00:01:49,310 코드의 라인, 우리가 실제로하지 않기 때문에 어떤 메모리를 할당 40 00:01:49,310 --> 00:01:53,020 malloc에​​, 그것을하지 않았기 때문에 실제로 어떤 크기의 어레이 모두를 할당 41 00:01:53,020 --> 00:01:57,620 당신이하고있는 사용자의를 읽고 일부 전체에 키보드 입력 42 00:01:57,620 --> 00:02:00,490 쓰레기 값, 어떤 기본적으로들입니다. 43 00:02:00,490 --> 00:02:04,480 그래서 확률은 당신이 세그 폴트려고하는 경우 그 주소는 그냥 그렇게 발생하지 않습니다 44 00:02:04,480 --> 00:02:08,009 당신이 할 수있는 값으로, 사실,에 기록. 45 00:02:08,009 --> 00:02:10,889 할당 할 수 없습니다 그래서 나쁜 거기에 당신의 기억. 46 00:02:10,889 --> 00:02:13,150 >> 그래서 질문 1, 우리는 물었다, 버전 2가 있다고 가정 47 00:02:13,150 --> 00:02:14,230 컴파일 및 실행. 48 00:02:14,230 --> 00:02:15,900 왜이 프로그램은 세그 폴트 수 있는가? 49 00:02:15,900 --> 00:02:17,990 그래서이 사람은 적은 버그가 있습니다. 50 00:02:17,990 --> 00:02:21,470 그리고 하나는 정말 거기 확실한 방법은 어디에 당신이 할 수있는 51 00:02:21,470 --> 00:02:22,810 여기 세그먼트 폴트를 발생시킨다. 52 00:02:22,810 --> 00:02:23,730 그리고이 주제입니다. 53 00:02:23,730 --> 00:02:28,180 우리가 메모리에 C를 사용하는 모든 시간, 무엇을 당신은 세그먼트 폴트를 유도 할 수있는 54 00:02:28,180 --> 00:02:30,718 버전 2? 55 00:02:30,718 --> 00:02:35,560 >> 청중 : 당신은에 그 입력을 사용하는 경우 49보다 더 긴 문자열 56 00:02:35,560 --> 00:02:35,975 문자. 57 00:02:35,975 --> 00:02:37,260 >> 데이비드 J. 마란 : 그렇습니다. 58 00:02:37,260 --> 00:02:41,420 당신이 뭔가 고정 길이를 볼 때마다 그것은 배열에 올 때, 당신의 59 00:02:41,420 --> 00:02:44,650 레이더이 될 수 있음을 꺼한다 문제는에게 확인하지 않는 경우 60 00:02:44,650 --> 00:02:45,810 배열의 경계. 61 00:02:45,810 --> 00:02:46,650 그리고 그 문제는 여기에 있습니다. 62 00:02:46,650 --> 00:02:47,910 우리는 여전히 scanf와를 사용하고 있습니다. 63 00:02:47,910 --> 00:02:52,200 우리는 여전히 노력을 의미하는 % s을 (를) 사용하는 사용자로부터 문자열을 읽을 수 있습니다. 64 00:02:52,200 --> 00:02:56,300 즉, 어떤의에 읽을 것 이 시점에서, 효율적이며 65 00:02:56,300 --> 00:02:58,570 메모리 청크의 주소 또는 등가의 정보. 66 00:02:58,570 --> 00:03:02,080 이 배열의 이름의 메모리의 문자. 67 00:03:02,080 --> 00:03:07,610 >> 그러나 정확하게, 당신은 문자열을 읽으면 즉, 49 자, 49 이상입니다 68 00:03:07,610 --> 00:03:10,440 백 슬래시를위한 공간이 필요하기 때문에 0, 당신은 오버 플로우거야 69 00:03:10,440 --> 00:03:11,390 그 버퍼. 70 00:03:11,390 --> 00:03:16,410 그리고 당신은 운이하고 할 수있을 것 51 문자, 52, 53를 작성합니다. 71 00:03:16,410 --> 00:03:18,560 그러나 어떤 시점에서, OS 말할 것입니다, 아니. 72 00:03:18,560 --> 00:03:21,270 이것은 확실히 기억하지 않습니다 당신은 접촉 할 수있어. 73 00:03:21,270 --> 00:03:23,380 그리고 프로그램은 세그 폴트 것입니다. 74 00:03:23,380 --> 00:03:26,650 >> 그래서 거기 추론은해야한다 당신이 고정 길이를 가지고있어 시간, 당신은이 75 00:03:26,650 --> 00:03:30,150 당신이 길이를 확인하고 만들려면 당신이 노력하고 무엇이든의 76 00:03:30,150 --> 00:03:31,090 그것으로 읽을 수 있습니다. 77 00:03:31,090 --> 00:03:35,110 >> 청중 : 그래서를, 당신이 할 수 해결 실제로 검사 문이 있었다 78 00:03:35,110 --> 00:03:37,140 길이 큰에게 있습니다 이상 또는 이하? 79 00:03:37,140 --> 00:03:37,730 >> 데이비드 J. 마란 : 물론입니다. 80 00:03:37,730 --> 00:03:41,706 당신은 조건이 라고, 만약 그 - 81 00:03:41,706 --> 00:03:46,080 또는 오히려 당신은 반드시 모르는 사전에있는 문자 82 00:03:46,080 --> 00:03:49,060 사용자가 입력하는 것입니다 때문에 당신은 닭고기와 계란이 있습니다. 83 00:03:49,060 --> 00:03:51,860 당신은 scanf와 함께 읽은 적이 없습니다 때까지 당신은 얼마나 오래 알아낼 수 있습니다. 84 00:03:51,860 --> 00:03:54,500 그러나 그 시점에서, 그것은 너무 늦었 어 당신은 이미 그것을로 읽어했기 때문에 85 00:03:54,500 --> 00:03:55,710 일부 메모리 블록. 86 00:03:55,710 --> 00:03:59,590 옆으로, CS50 라이브러리가 일어나지 않도록 그래서 이 문제를 모두 리콜 87 00:03:59,590 --> 00:04:01,060 는 fgetc를 사용하여. 88 00:04:01,060 --> 00:04:05,390 그리고, 한 번에 한 문자를 읽 팁 팔자 걸음을 알고, 따라서 당신에게 그 89 00:04:05,390 --> 00:04:08,060 문자의 경우 오버 플로우를 할 수 없습니다 당신은 한 번에 하나를 읽어보십시오. 90 00:04:08,060 --> 00:04:11,580 >> 캐치하는 GetString 리콜로입니다 우리에게 지속적으로 다시 크기를 가지고 91 00:04:11,580 --> 00:04:13,590 메모리의 덩어리, 한 바로 고통이다. 92 00:04:13,590 --> 00:04:15,310 이 라인의 많은의 이 작업을 수행하는 코드입니다. 93 00:04:15,310 --> 00:04:18,779 그래서 또 다른 방법 일 것입니다 실제로 사촌을 사용하기 때문에 94 00:04:18,779 --> 00:04:19,790 scanf와의, 말하자면. 95 00:04:19,790 --> 00:04:22,820 이들의 많은 변종이 있습니다 실제로 확인 기능 96 00:04:22,820 --> 00:04:25,870 길이 얼마나 많은 문자 당신은 최대로 읽을 수 있습니다. 97 00:04:25,870 --> 00:04:29,430 그리고 당신은 읽지 않는다, 지정할 수 50 개 이상의 문자. 98 00:04:29,430 --> 00:04:34,110 그래서 다른 방법이 될 것입니다 만, 큰 입력 덜 수용. 99 00:04:34,110 --> 00:04:37,040 >> 그래서 버전을 가정 해 묻는 질문 2 3 컴파일 및 실행됩니다. 100 00:04:37,040 --> 00:04:39,960 왜 프로그램은 세그 폴트 수 있는가? 101 00:04:39,960 --> 00:04:42,650 그래서이 사람은 실제로 동일합니다 대답도 비록 102 00:04:42,650 --> 00:04:43,590 조금 애호가 보인다. 103 00:04:43,590 --> 00:04:46,440 우리는 같은 느낌의 malloc을 사용하는 우리는 우리 자신에게 더 많은 옵션을 제공하고 있습니다. 104 00:04:46,440 --> 00:04:48,030 그리고 우리는 자유롭게하고 끝에 메모리. 105 00:04:48,030 --> 00:04:49,580 그것은 여전히​​ 메모리의 단지 50 바이트입니다. 106 00:04:49,580 --> 00:04:53,620 그래서 우리는 여전히 읽기 시도 할 수 있습니다 51, 52, 1000 바이트. 107 00:04:53,620 --> 00:04:55,830 그것은을 위해 세그 폴트 것 정확히 같은 이유. 108 00:04:55,830 --> 00:04:57,530 >> 그러나 또 다른 이유도있다. 109 00:04:57,530 --> 00:05:03,890 게다가 수익을 MALLOC 수있는 다른 어떤 메모리 청크의 주소? 110 00:05:03,890 --> 00:05:04,920 null을 반환 할 수 있습니다. 111 00:05:04,920 --> 00:05:07,560 그리고 우리는 검사하지 않을 때문에 즉, 우리가 어떤 일을 할 수 있습니다 112 00:05:07,560 --> 00:05:11,350 것이 또 다른 이유는, 어리석은 우리는 scanf와 이야기 할 수있는 읽기 113 00:05:11,350 --> 00:05:16,050 키보드로부터 사용자 입력 0 위치로, 일명 널 (null). 114 00:05:16,050 --> 00:05:18,890 그리고 역시,은 확실히 세그먼트 폴트를 발생시킨다. 115 00:05:18,890 --> 00:05:21,590 그래서 퀴즈의 목적을 위해, 우리는 것 로 그 중 하나를 수락 한 116 00:05:21,590 --> 00:05:22,740 타당한 이유. 117 00:05:22,740 --> 00:05:23,420 하나는 동일합니다. 118 00:05:23,420 --> 00:05:25,720 하나는 좀 더 미묘한입니다. 119 00:05:25,720 --> 00:05:28,975 >> 마지막으로, 프로그램에 대한 메모리의 사용 방법에 버전 2를하고 120 00:05:28,975 --> 00:05:30,350 버전 3는 다른? 121 00:05:30,350 --> 00:05:35,070 그래서 가치가 무엇인지, 우리는 보았다 수의 끝없이 공급 122 00:05:35,070 --> 00:05:35,770 이에 대한 답변. 123 00:05:35,770 --> 00:05:39,300 그리고 사람들의 대답 사이에, 우리는 무엇인가 을 기대하지만, 우리는 다른 허용 124 00:05:39,300 --> 00:05:42,250 가지, 몇 가지 언급했다 버전 2가 사용하고있는 사실 125 00:05:42,250 --> 00:05:44,560 소위 스택. 126 00:05:44,560 --> 00:05:46,710 버전 3은 힙을 사용하고 있습니다. 127 00:05:46,710 --> 00:05:50,060 기능적으로, 이것은 정말하지 않습니다 차이의 모든 것을 중시하고 있습니다. 128 00:05:50,060 --> 00:05:54,040 하루의 끝에서, 우리는 여전히있어 다만 메모리의 50 바이트를 받고. 129 00:05:54,040 --> 00:05:56,640 >> 하지만 그게 가능한 대답 중 하나 우리는보고 있다고. 130 00:05:56,640 --> 00:05:59,730 당신이 퀴즈를 얻을하지만 당신은 볼 것이다 다시 TF가에서, 우리가했던 것을 131 00:05:59,730 --> 00:06:04,330 다른 토론을 받아 자신의 서로 다른 메모리의 사용뿐만 아니라. 132 00:06:04,330 --> 00:06:08,600 그러나 스택과 힙이되었을 것 갈 쉽게 대답. 133 00:06:08,600 --> 00:06:11,150 질문? 134 00:06:11,150 --> 00:06:12,400 나는 당신에게 롭을 제공합니다. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB 보덴 : 그래서 문제 4. 137 00:06:20,210 --> 00:06:21,985 이것은 당신이 기입했다입니다 모두 밖으로 바이트의 수 138 00:06:21,985 --> 00:06:23,460 사용이 다른 유형. 139 00:06:23,460 --> 00:06:24,830 우리가 볼 그래서 일단. 140 00:06:24,830 --> 00:06:27,930 32 비트 구조를 가정 이 CS50 기기 등을들 수있다. 141 00:06:27,930 --> 00:06:33,530 에 대한 기본적인 것들을 이렇게 1 32 비트 아키텍처, 즉 우리에게 알려줍니다 142 00:06:33,530 --> 00:06:37,490 정확히 얼마나 큰 포인터는 것입니다 건축한다. 143 00:06:37,490 --> 00:06:43,020 >> 그래서 바로, 우리가 알고있는 어떤 포인터 유형은 32 비트 또는 4 바이트입니다. 144 00:06:43,020 --> 00:06:46,010 따라서이 표를보고, 노드 *는 포인터 타입입니다. 145 00:06:46,010 --> 00:06:47,250 즉, 4 바이트가 될 것. 146 00:06:47,250 --> 00:06:51,640 구조체 노드 *, 그 말 그대로 노드 스타와 동일합니다. 147 00:06:51,640 --> 00:06:53,590 그리고 그 4 바이트가 될 것. 148 00:06:53,590 --> 00:06:58,270 문자열, 그래서 보이지 않는 아직 포인터하지만, 형식 정의, 149 00:06:58,270 --> 00:07:01,590 문자열은 char *로, 인 포인터 타입입니다. 150 00:07:01,590 --> 00:07:03,550 그래서 4 바이트가 될 것. 151 00:07:03,550 --> 00:07:06,150 >> 그래서이 세 가지가 모두 4 바이트입니다. 152 00:07:06,150 --> 00:07:09,350 이제 노드와 학생은 조금 더 복잡합니다. 153 00:07:09,350 --> 00:07:15,160 그래서 노드와 학생을보고, 우리가 참조 정수와 포인터로 노드. 154 00:07:15,160 --> 00:07:18,050 그리고 학생은 두 개의 포인터입니다 그것의 내부. 155 00:07:18,050 --> 00:07:23,340 그래서 적어도 여기에 우리의 경우를 들어, 방법 우리의 크기를 계산 결국 그 156 00:07:23,340 --> 00:07:27,020 이 구조체는 그냥 모든 것을 추가한다 즉, 구조체의 내부입니다. 157 00:07:27,020 --> 00:07:30,690 >> 그래서 노드에 대해, 우리는 정수를 가지고, 이는 4 바이트입니다. 158 00:07:30,690 --> 00:07:32,830 우리는 4 바이트 포인터를 보유하고 있습니다. 159 00:07:32,830 --> 00:07:35,820 그리고 하나의 노드는 것입니다 8 바이트를 차지합니다. 160 00:07:35,820 --> 00:07:39,490 마찬가지로 학생을 위해, 우리는이가 4 바이트와 다른의 포인터 161 00:07:39,490 --> 00:07:40,770 4 바이트의 포인터. 162 00:07:40,770 --> 00:07:43,180 그래서 끝날 것 최대 8 바이트 인. 163 00:07:43,180 --> 00:07:45,480 그래서 노드와 학생은 8 바이트입니다. 164 00:07:45,480 --> 00:07:48,950 그리고이 세 가지가 모두 4 바이트입니다. 165 00:07:48,950 --> 00:07:50,240 그에 대한 질문? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 예. 168 00:07:54,990 --> 00:07:58,413 >> 청중 : 그것은 64 비트 되었나요 아키텍처 것이라고 169 00:07:58,413 --> 00:07:59,880 그들 모두 배? 170 00:07:59,880 --> 00:08:01,790 >> ROB 보덴 : 그것은 않을 것 그들 모두를 두배로한다. 171 00:08:01,790 --> 00:08:05,830 그래서 64 비트 아키텍처, 그것은 다시, 변경하는 기본적인 것은 그 172 00:08:05,830 --> 00:08:08,910 포인터가 이제 64 비트입니다. 173 00:08:08,910 --> 00:08:09,290 그래. 174 00:08:09,290 --> 00:08:10,930 그래서 포인터는 8 바이트입니다. 175 00:08:10,930 --> 00:08:15,420 그래서이 4 바이트가 있다고 8 바이트가 될 수 있습니다. 176 00:08:15,420 --> 00:08:18,617 두 개의 포인터였다 학생, 물론, 지금은 것 177 00:08:18,617 --> 00:08:19,800 8 바이트, 8 바이트입니다. 178 00:08:19,800 --> 00:08:21,980 그것은 16 바이트를 할 것입니다. 179 00:08:21,980 --> 00:08:25,710 >> 그러나 노드는 여전히 4 바이트입니다. 180 00:08:25,710 --> 00:08:27,800 그래서이 포인터는 것입니다 8 바이트이어야합니다. 181 00:08:27,800 --> 00:08:28,930 이 4 바이트입니다. 182 00:08:28,930 --> 00:08:30,870 따라서 노드는 예정 12 바이트가 될 수 있습니다. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 그 중 하나에 대한 다른 질문? 185 00:08:39,280 --> 00:08:44,500 그래서 다음 사람이 있습니다 HTTP 상태 코드. 186 00:08:44,500 --> 00:08:48,000 그리고 당신은 상황을 설명했다 어떤에서 이러한 힘 187 00:08:48,000 --> 00:08:49,810 당신에게 반환. 188 00:08:49,810 --> 00:08:56,730 내가 어떤 학생들을 듣고 한 가지 문제 이 그들이 만들려고한다는 것입니다 189 00:08:56,730 --> 00:08:58,950 오류가 클라이언트의 단부에있을. 190 00:08:58,950 --> 00:09:02,320 우리는 요구를 만들려고 할 때 그래서 서버에 뭔가가 간다 191 00:09:02,320 --> 00:09:03,820 우리의 말에 잘못. 192 00:09:03,820 --> 00:09:07,660 그러나 일반적으로 이러한 코드는 서버에 의해 반환되는. 193 00:09:07,660 --> 00:09:11,720 그래서 우리는 무슨 일이 일어나고 있는지 알아 내야 잘못이나 오른쪽으로 서버에 그 194 00:09:11,720 --> 00:09:14,280 이러한 일들이 반환됩니다. 195 00:09:14,280 --> 00:09:18,670 왜 서버에서 반환 수도 상태 코드 200? 196 00:09:18,670 --> 00:09:19,920 어떤 생각을? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> 그래. 199 00:09:23,730 --> 00:09:27,850 그래서 뭔가에 대해 성공적으로 요청을 통해 갔다. 200 00:09:27,850 --> 00:09:30,260 그리고 그들은 돌아갈 수있어 당신은 요구대로. 201 00:09:30,260 --> 00:09:32,240 그래서 아무 문제가 없었어요. 202 00:09:32,240 --> 00:09:35,662 (302)에 대해 무엇을 발견? 203 00:09:35,662 --> 00:09:36,618 그래. 204 00:09:36,618 --> 00:09:39,008 >> 대상 : 서버가보고되었다 당신이 요구하는 것에 대해. 205 00:09:39,008 --> 00:09:40,442 하지만 그것을 찾을 수 없습니다. 206 00:09:40,442 --> 00:09:42,850 그래서 오류가있다. 207 00:09:42,850 --> 00:09:47,720 >> ROB 보덴 : 그래서 서버였다 당신이 원하는 무엇을 찾고. 208 00:09:47,720 --> 00:09:51,682 그래서 그냥 여기보고, 302 발견, 그것을 발견 할 수 있었다. 209 00:09:51,682 --> 00:09:53,035 >> 청중 : 미안 해요. 210 00:09:53,035 --> 00:09:54,388 발견은 그들이 그것을 발견 한 것을 의미한다. 211 00:09:54,388 --> 00:09:55,638 미안 해요. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB 보덴 : 그래서 302났습니다. 214 00:10:00,160 --> 00:10:02,350 서버를 찾을 수 있습니다 당신이 원하는 것을. 215 00:10:02,350 --> 00:10:04,640 >> 청중 :하지만 그것을 표시하지 않는거야? 216 00:10:04,640 --> 00:10:08,180 >> ROB 보덴 : 차이 이 302과 200은 그것이 217 00:10:08,180 --> 00:10:09,280 당신이 원하는 것을 알고있다. 218 00:10:09,280 --> 00:10:12,000 그러나 정확히하지 않습니다 당신이 물어 싶었어요. 219 00:10:12,000 --> 00:10:14,580 그래서 302 전형적인 리디렉션이다. 220 00:10:14,580 --> 00:10:16,510 그래서 당신은 페이지를 요청했다. 221 00:10:16,510 --> 00:10:19,590 그것은 오, 내가 원하는, 알고 당신이 돌아갑니다. 222 00:10:19,590 --> 00:10:21,070 그러나 이것은 다른 URL에 있습니다. 223 00:10:21,070 --> 00:10:23,534 그래서 이봐, 당신은 실제로 원하는. 224 00:10:23,534 --> 00:10:26,950 >> 데이비드 J. 마란 : 그것은 말했다 조각의 우리는 당신들에게 리디렉션을 준 225 00:10:26,950 --> 00:10:30,830 헤더 함수를 사용한 함수 즉, 차례로, 위치를 인쇄 226 00:10:30,830 --> 00:10:34,110 콜론 다음 URL되는 당신은 사용자를 거부합니다. 227 00:10:34,110 --> 00:10:37,480 당신은 (302)가 표시되지 않은 경우에도 명시 적으로도, 그 무엇 PHP입니다 228 00:10:37,480 --> 00:10:41,550 마술 헤더로 삽입합니다 롭이 말했다 정확히 말 - 229 00:10:41,550 --> 00:10:41,930 발견. 230 00:10:41,930 --> 00:10:43,180 대신 여기에 이​​동합니다. 231 00:10:43,180 --> 00:10:45,960 232 00:10:45,960 --> 00:10:46,160 >> ROB 보덴 : OK. 233 00:10:46,160 --> 00:10:47,630 그래서 403에 대해 무엇을 금지? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> 청중 : 나는 그것을 생각하는 서버 기본적으로 말하는 것을 클라이언트 236 00:10:57,120 --> 00:10:59,970 홈 페이지에 액세스 할 수 없다. 237 00:10:59,970 --> 00:11:03,260 >> ROB 보덴 : 그래서 그래. 238 00:11:03,260 --> 00:11:07,670 음, 전형적인 대답은 우리가 있었다 기대는 무엇인가 등의 파일입니다 239 00:11:07,670 --> 00:11:08,920 적절하게 chmodded되지 않습니다. 240 00:11:08,920 --> 00:11:11,590 그건 아마 아래의 어떤 상황 당신이 그들을 보았다. 241 00:11:11,590 --> 00:11:18,920 그러나 이유가 그 클라이언트 여기에서 잘못 될 수 있습니다. 242 00:11:18,920 --> 00:11:20,440 다른 상태 코드는 실제로 있습니다 - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 그래서 이들은 매우 유사합니다. 245 00:11:22,820 --> 00:11:24,590 >> (401)는 무단입니다. 246 00:11:24,590 --> 00:11:26,130 그리고 403은 금지되어 있습니다. 247 00:11:26,130 --> 00:11:31,890 그리고 무단 당신 독점적으로 당신이 로그인하지 경우 얻을 248 00:11:31,890 --> 00:11:34,520 그러나 로그인하면 의미 할 수 있습니다 당신은 권한이 부여됩니다. 249 00:11:34,520 --> 00:11:37,930 하지만 당신은 이미 로그인하고 있다면 여전히 다음, 권한이 없습니다 250 00:11:37,930 --> 00:11:40,140 당신은 또한 금지 얻을 수 있습니다. 251 00:11:40,140 --> 00:11:45,320 그래서 당신은 로그인하고이없는 경우 허가, 금지도 252 00:11:45,320 --> 00:11:47,164 당신이 얻을 수있는 무언가. 253 00:11:47,164 --> 00:11:48,900 >> 데이비드 J. 마란 : 그리고기구에 의해 이러한 문제는 일반적으로 어느 254 00:11:48,900 --> 00:11:53,100 서버에 해결 어떤 명령을 통해? 255 00:11:53,100 --> 00:11:57,700 chmod를, 그것의 경우, 실제로 사용 권한 파일이나 디렉토리에 실행합니다. 256 00:11:57,700 --> 00:11:59,220 >> ROB 보덴 : 다음 404를 찾을 수 없습니다. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 그래. 259 00:12:03,470 --> 00:12:10,150 그래서 302과는 달리 정확히 어디 아니었다 당신 만을 요구하고 어디에 무엇을 알고 260 00:12:10,150 --> 00:12:12,710 당신이 원하는이, 그냥가 당신이 원하는 아무 생각 없습니다. 261 00:12:12,710 --> 00:12:15,648 그리고 당신이 요청하지 않음 유효 뭔가. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 (418) 나는 그 주전자이고 500 내부 서버. 264 00:12:22,310 --> 00:12:24,870 왜 당신은 얻을 수 있는가? 265 00:12:24,870 --> 00:12:26,120 >> 그래서 세그 폴트 - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 사실 등급을 모르는 이 표준. 268 00:12:30,640 --> 00:12:34,850 하지만 당신의 PHP 코드는 뭔가가 있다면 그것은 잘못된 이론에서는 할 수 269 00:12:34,850 --> 00:12:39,650 실제로, 세그 폴트하는 경우,이 500 내부 서버 오류, 뭔가 270 00:12:39,650 --> 00:12:41,400 서버의 문제입니다 구성. 271 00:12:41,400 --> 00:12:44,320 또는 구문 오류가 있습니다 PHP 코드에서. 272 00:12:44,320 --> 00:12:46,095 아니면 뭔가 나쁜 일이 일어나고있다. 273 00:12:46,095 --> 00:12:48,320 >> 데이비드 J. 마란 : 우리는 세그먼트 폴트를 봤어 몇 사람의 답변들. 274 00:12:48,320 --> 00:12:49,490 그리고 기술적으로는 일어날 수 있습니다. 275 00:12:49,490 --> 00:12:53,820 하지만 PHP, 프로그램이 될 것입니다 실제로, 다른 사람에 의해 쓰여진 276 00:12:53,820 --> 00:12:57,790 오류를 발생시키고 말았다, 어떤 경우에만 그 사람들 나사로와에 버그가있는 코드를 작성 277 00:12:57,790 --> 00:13:00,680 자신의 통역 것 PHP 자체가 세그 폴트. 278 00:13:00,680 --> 00:13:06,460 (500)는 세그먼트 폴트처럼 순간에도 정신, 그것은 거의 항상 279 00:13:06,460 --> 00:13:10,490 구성 파일 문제의 결과 웹 서버 또는 롭 말했듯이, 280 00:13:10,490 --> 00:13:13,200 당신 같은 구문 오류, 견적을 닫지 않았다. 281 00:13:13,200 --> 00:13:16,180 또는 당신은 어딘가에 세미콜론을 잃었다. 282 00:13:16,180 --> 00:13:23,677 >> 청중 : 그래서 셔틀 PSET, 나는 내가 해냈어 때 클릭 한 번 생각 283 00:13:23,677 --> 00:13:26,300 브라우저,하지만 아무것도, 와서 그들은 흰색 페이지라는 것을. 284 00:13:26,300 --> 00:13:28,056 그러나 그것 때문에 코드이었다. 285 00:13:28,056 --> 00:13:29,440 그 자바 스크립트 생각, 오른쪽? 286 00:13:29,440 --> 00:13:29,770 >> ROB 보덴 : 네. 287 00:13:29,770 --> 00:13:31,180 >> 청중 : 것이라고 오류 여전히 오는가? 288 00:13:31,180 --> 00:13:34,290 >> ROB 보덴 : 그래서 당신은 못했을 이 오류 때문에 모든 289 00:13:34,290 --> 00:13:36,930 웹 서버의 관점에서 완전 좋았어요. 290 00:13:36,930 --> 00:13:39,090 하지만 당신은 index.html을 요청했다. 291 00:13:39,090 --> 00:13:42,000 당신은 shuttle.js 요청 및 service.js. 292 00:13:42,000 --> 00:13:44,580 그리고 그것은 성공적으로 복귀 할 수 있었다 당신이 그 모든 것들에 - 293 00:13:44,580 --> 00:13:44,980 200. 294 00:13:44,980 --> 00:13:45,680 OK. 295 00:13:45,680 --> 00:13:49,330 이 브라우저는에 시도하는 경우에만의 자바 스크립트 코드를 해석하는 296 00:13:49,330 --> 00:13:51,370 이 같은 기다릴거야,이 아니다 유효한 자바 스크립트 오류가 발생했습니다. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 다른 질문? 299 00:13:58,210 --> 00:14:00,750 괜찮아요. 300 00:14:00,750 --> 00:14:04,120 >> 데이비드 J. 마란 : 그래서 다음 최대 11 번이었다. 301 00:14:04,120 --> 00:14:07,610 그리고 11은 무서운했다 많은 사람들을 위해. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 그래서 가장 중요한 것은 여기에서주의해야 할 이, 참으로, 약이었다이었다 304 00:14:18,570 --> 00:14:19,840 이중 연결리스트. 305 00:14:19,840 --> 00:14:23,160 그러나 이것은 작년 같은 아니었다 이중 연결리스트의 문제, 306 00:14:23,160 --> 00:14:27,170 이는 당신에게주의를주지 않았다 목록, 사실, 정렬되지 않은 수 있습니다. 307 00:14:27,170 --> 00:14:29,640 >> 목록이 정렬되지 않은 것을 그래서 사실 그 단어가 있다는 사실 308 00:14:29,640 --> 00:14:32,930 전달이 의미 된 밑줄 이 사실은 단순화입니다 309 00:14:32,930 --> 00:14:35,430 그렇지 않으면이었을 것입니다 무슨의 더 어려운 문제 310 00:14:35,430 --> 00:14:36,600 그리고 하나 더. 311 00:14:36,600 --> 00:14:40,760 그래서 여기에 일반적인 실수는 넣어했다 당신의 하나에 작년의 솔루션 312 00:14:40,760 --> 00:14:45,580 호출기 후 무작정 것을 복사 맞는 대답으로 다운 313 00:14:45,580 --> 00:14:48,520 다른 질문에 대한 답변 정신에는 변함이. 314 00:14:48,520 --> 00:14:51,340 하지만, 여기에 미묘한 다음과 같이했다. 315 00:14:51,340 --> 00:14:55,200 >> 그래서 하나, 우리는 노드를 선언하고있다 여기에서 일반적인 방법으로 정의 하였다. 316 00:14:55,200 --> 00:14:59,230 그 다음 우리는 목록 글로벌 수 정의 포인터는 null에 초기화. 317 00:14:59,230 --> 00:15:02,150 그럼 분명히, 두 가지 기능이있다 우리는 여기에 대한 프로토 타입을 삽입 318 00:15:02,150 --> 00:15:03,240 제거합니다. 319 00:15:03,240 --> 00:15:06,600 그리고 우리는 여기에 몇 가지 예제 코드를 가지고 의 삽입의 무리를하고. 320 00:15:06,600 --> 00:15:09,930 그리고 우리는 완료하도록 요청 등의 아래에 삽입의 구현 321 00:15:09,930 --> 00:15:14,380 이리스트에 N을 삽입하는 방법 일정 시간에, 또한 밑줄, 322 00:15:14,380 --> 00:15:15,730 심지어 이미 존재하는 경우. 323 00:15:15,730 --> 00:15:20,600 >> 그래서 삽입 할 수있는 아름다움 일정 시간에이 의미하는 것입니다 324 00:15:20,600 --> 00:15:23,060 당신은 삽입 할 것을 새 노드 어디? 325 00:15:23,060 --> 00:15:23,690 전면에. 326 00:15:23,690 --> 00:15:27,760 그래서 다행히도, 제거 이상 요구하도록 사용 사례 중 하나 327 00:15:27,760 --> 00:15:30,520 그것과 같은 더욱 많은 양의 코드는, 한 작년에도 클래스의 경우 우리 328 00:15:30,520 --> 00:15:34,040 이런 종류의 일을 통해 이야기 인간과 일부와 329 00:15:34,040 --> 00:15:35,250 언어 적 의사 코드. 330 00:15:35,250 --> 00:15:39,190 그래서 여기에 용액에,의는 건너 보자 그에게 단지 시각에이하는 331 00:15:39,190 --> 00:15:40,480 화면. 332 00:15:40,480 --> 00:15:42,230 >> 우리는 다음과 같은 일을하고 있는지 알 수 있습니다. 333 00:15:42,230 --> 00:15:45,140 그리고 또 다른 단순화 통지 이 되었나요는 경우에도 334 00:15:45,140 --> 00:15:48,280 이미 존재하는, 그래서 이것은 의미 경우에도 숫자는 당신이 할 수있는, 거기에 이미 335 00:15:48,280 --> 00:15:50,280 그냥 맹목적으로 서로를 삽입 그것의 사본. 336 00:15:50,280 --> 00:15:52,560 그리고는,도 될 운명이되었다 단순화, 당신이 할 수 있도록 337 00:15:52,560 --> 00:15:54,940 , 더 정말, 몇 가지에 초점을 지적으로 흥미로운 부분과 338 00:15:54,940 --> 00:15:58,090 검사를 일부 추가 오류뿐만 아니라 시간 제한이 없습니다. 339 00:15:58,090 --> 00:16:02,880 >> 따라서이 시료 용액에, 우리는 할당 왼쪽에 포인터 340 00:16:02,880 --> 00:16:04,510 노드에 여기에 사이드. 341 00:16:04,510 --> 00:16:07,190 지금으로, 그 포인터를 실현 롭은 말했다, 32 비트입니다. 342 00:16:07,190 --> 00:16:09,060 그리고 실제로는 포함되어 있지 않습니다 당신까지 주소 343 00:16:09,060 --> 00:16:09,970 그에게 주소를 할당합니다. 344 00:16:09,970 --> 00:16:13,220 그리고 우리는 오른쪽에 그렇게 의 malloc을 통해 측면. 345 00:16:13,220 --> 00:16:16,550 좋은 시민처럼, 우리는 확인 의 malloc이 아닌, 사실, 널 (null), 그 때문에 346 00:16:16,550 --> 00:16:18,690 우리는 실수로 작성하지 않습니다 여기 세그먼트 폴트. 347 00:16:18,690 --> 00:16:22,840 그리고 언제 당신이 인생에서 당신을의 malloc을 사용 않도록, 널 (null)을 검사해야한다 348 00:16:22,840 --> 00:16:24,090 당신은 미묘한 버그가 있습니다. 349 00:16:24,090 --> 00:16:28,460 >> 그 다음 우리는하여 해당 널 (null)를 초기화 N과 이전 및 다음을 지정. 350 00:16:28,460 --> 00:16:32,450 그리고 여기이 경우는 초기화 이 때문에 새로운 NULL로 이전 351 00:16:32,450 --> 00:16:34,780 노드는 새로운 될 것입니다 내 목록의 시작. 352 00:16:34,780 --> 00:16:37,050 그래서이있을거야 그 전에 아무 것도 없습니다. 353 00:16:37,050 --> 00:16:42,010 그리고 기본적으로 추가 할 하여 새 노드에 기존 목록 354 00:16:42,010 --> 00:16:44,700 자체 목록 옆에 같은 설정. 355 00:16:44,700 --> 00:16:47,120 그러나 나는 아직 안 끝났어요. 356 00:16:47,120 --> 00:16:51,780 목록 자체가 이미 존재하고,이 경우 적어도 하나의 노드가 있었다 357 00:16:51,780 --> 00:16:57,070 이미에서,이 목록에 있는지 여기 내가 여기에 새 노드를 삽입 358 00:16:57,070 --> 00:17:01,840 있는지 확인해야 예전의 노드 나의 새로운 노드에 거꾸로 포인트, 359 00:17:01,840 --> 00:17:04,260 이 다시이기 때문에 이중 연결리스트. 360 00:17:04,260 --> 00:17:05,460 >> 그래서 우리는 온 전성 검사를 수행. 361 00:17:05,460 --> 00:17:10,109 이미이 있다면 목록, null가 아닌 경우 다음이 하나 이상의 노드, 362 00:17:10,109 --> 00:17:12,470 말하자면 참조가 다시 추가. 363 00:17:12,470 --> 00:17:15,420 그리고 우리가 필요로하는 매우 마지막으로 어떻게 실제로 세계를 업데이트한다 364 00:17:15,420 --> 00:17:20,329 가리 변수 목록 자체 그 새로운 노드. 365 00:17:20,329 --> 00:17:21,790 그래. 366 00:17:21,790 --> 00:17:26,579 >> 청중 : 포인터가 화살표 [들리지 않는, 널 (null)와 동일 함 367 00:17:26,579 --> 00:17:30,420 목록을 처리하기 때문에 리스트가 null? 368 00:17:30,420 --> 00:17:30,596 >> 데이비드 J. 마란 : 아니. 369 00:17:30,596 --> 00:17:34,500 즉, 사전되고 단순히 저입니다 이것이 나의 경우는 점에서주의 370 00:17:34,500 --> 00:17:38,730 아마 좀 더 많은 노드가 원래 목록 여기에 내가 삽입하고있어 내 371 00:17:38,730 --> 00:17:42,380 여기에 새로운 노드가 무슨 여기에 아무것도 없습니다. 372 00:17:42,380 --> 00:17:44,720 그리고 그 아이디어를 캡처 할 이전 설정하여 373 00:17:44,720 --> 00:17:47,740 새 노드에 널 (null). 374 00:17:47,740 --> 00:17:51,410 그리고 아마도, 내 코드가 맞다면 삽입 할 다른 방법이 없습니다 375 00:17:51,410 --> 00:17:54,970 이 기능 이외의 노드, 아마도 경우에도 목록이 이미 있습니다 376 00:17:54,970 --> 00:18:00,090 그것의 하나 이상의 노드, 아마도 목록의 첫 번째 노드는 것 377 00:18:00,090 --> 00:18:02,750 널 (null) 자체의 이전 포인터. 378 00:18:02,750 --> 00:18:03,550 >> 청중 : 그냥 후속. 379 00:18:03,550 --> 00:18:08,139 다음에 등호 포인터를 넣어 이유 목록에는 포인터를 들어갔다는거야 380 00:18:08,139 --> 00:18:13,579 이 향하고있는 것을 목록에서 이전 다음에, 그런 것 같아요 - 381 00:18:13,579 --> 00:18:14,980 전 좀 ... - 382 00:18:14,980 --> 00:18:15,450 그냥 나열? 383 00:18:15,450 --> 00:18:16,400 >> 데이비드 J. 마란 : 그렇습니다. 384 00:18:16,400 --> 00:18:19,400 그리고 그럼 실제로 두 사례를 살펴 보자 여기 정말, 비록 385 00:18:19,400 --> 00:18:22,070 우리가 그들을 고려합니다 순서는 없습니다 코드와 완전히 동일. 386 00:18:22,070 --> 00:18:26,250 그러나 높은 수준에있는 경우이 나타냅니다 목록이 32 비트이다 387 00:18:26,250 --> 00:18:29,560 포인터, 간단한 시나리오는 이것은 기본적으로 널 (null)입니다. 388 00:18:29,560 --> 00:18:33,010 그리고 삽입한다고 가정 수 (50)는 첫 번째 숫자였다. 389 00:18:33,010 --> 00:18:37,640 그래서 내가 가서 할당 할거야 포함 된 것입니다 노드, 390 00:18:37,640 --> 00:18:38,770 세 개의 필드 - 391 00:18:38,770 --> 00:18:42,070 N, 이전 및 다음. 392 00:18:42,070 --> 00:18:44,580 >> 나는 숫자 50을 넣어 갈거야 여기,이 N되기 때문에. 393 00:18:44,580 --> 00:18:46,130 이 옆에있을 것입니다. 394 00:18:46,130 --> 00:18:48,530 그리고 이것은 이전 될 것입니다. 395 00:18:48,530 --> 00:18:50,910 그래서 저는이 경우 어떻게해야합니까? 396 00:18:50,910 --> 00:18:53,900 글쎄, 난 그냥 여기에 1 행을 완료했습니다. 397 00:18:53,900 --> 00:18:55,400 포인터 N은 N 가져옵니다. 398 00:18:55,400 --> 00:18:57,740 나는 그 이전, 말하는거야 null을 얻어야한다. 399 00:18:57,740 --> 00:18:59,470 그래서이 널 (null)이 될 것입니다. 400 00:18:59,470 --> 00:19:01,365 그럼 난 다음에 말할거야 목록을 얻을 것입니다. 401 00:19:01,365 --> 00:19:05,150 >> 그리고 이것은 단지 잘 작동합니다. 402 00:19:05,150 --> 00:19:06,500 이 널 (null)입니다. 403 00:19:06,500 --> 00:19:10,620 그래서 저는 새로운 노드의 다음 말을 해요 필드는이 무엇이든 얻을 수 있어야합니다. 404 00:19:10,620 --> 00:19:12,570 그래서 거기에 다른 널 (null)을 넣습니다. 405 00:19:12,570 --> 00:19:14,510 그리고 마지막으로 나는 여기에서 확인된다 않습니다. 406 00:19:14,510 --> 00:19:17,870 목록은 널 (null)에 해당하지 않지만 경우 널 (null)와 동일하다, 그래서 우리는 이동하는 407 00:19:17,870 --> 00:19:18,470 모두. 408 00:19:18,470 --> 00:19:23,520 그래서 내가 모두 다음 목록 가져입니다 그림으로 결과 포인터, 409 00:19:23,520 --> 00:19:25,570 같은 그림. 410 00:19:25,570 --> 00:19:26,620 그래서 하나의 시나리오입니다. 411 00:19:26,620 --> 00:19:30,490 >> 그리고 당신에 대해 물어 된 하나 특히이 같은 상황은, 412 00:19:30,490 --> 00:19:33,190 우리는 이미 하나의 노드 목록이 곳. 413 00:19:33,190 --> 00:19:36,240 그리고 원래의 백업 가면 문제 설명, 우리는거야 다음 414 00:19:36,240 --> 00:19:39,320 단지를 위해, 말은 34입니다 삽입 토론을 위해서. 415 00:19:39,320 --> 00:19:46,210 그래서 난 그냥 편리에 갈거야 여기에 그립니다. 416 00:19:46,210 --> 00:19:47,540 난 그냥 malloc으로 할당했습니다. 417 00:19:47,540 --> 00:19:49,310 의 내가 널 (null)을 검사하고있어 가정 해 봅시다. 418 00:19:49,310 --> 00:19:51,870 >> 자, 초기화하는거야 N 34이어야합니다. 419 00:19:51,870 --> 00:19:53,040 그리고 이것은 N 될 것입니다. 420 00:19:53,040 --> 00:19:54,670 이 옆에있을 것입니다. 421 00:19:54,670 --> 00:19:57,100 그리고 이것은 이전 될 것입니다. 422 00:19:57,100 --> 00:19:59,370 의 확실히 내가하지 않았다 만들어 보자 거꾸로이를 얻을. 423 00:19:59,370 --> 00:20:01,110 이전이 먼저 다 정의. 424 00:20:01,110 --> 00:20:03,070 내가이 문제를 해결하자. 425 00:20:03,070 --> 00:20:04,410 이것은 이전입니다. 426 00:20:04,410 --> 00:20:05,780 이 옆에 있습니다. 427 00:20:05,780 --> 00:20:08,620 이들은 동일, 비록 의 일관성을 유지할 수 있습니다. 428 00:20:08,620 --> 00:20:09,450 >> 이전. 429 00:20:09,450 --> 00:20:11,030 이 옆에 있습니다. 430 00:20:11,030 --> 00:20:16,310 그래서 난 그냥 체크, 내 메모를 malloc으로 할당 한 널 (null)을 위해, 노드에 34을 할당. 431 00:20:16,310 --> 00:20:17,570 이전 null을 가져옵니다. 432 00:20:17,570 --> 00:20:19,480 그래서 나에게 그것을 제공합니다. 433 00:20:19,480 --> 00:20:21,010 다음 목록을 가져옵니다. 434 00:20:21,010 --> 00:20:22,370 그래서 목록이 있습니다. 435 00:20:22,370 --> 00:20:26,520 그래서이 지금 동일이 그리기 등 그들은 하나를 가리 키도록 화살표, 436 00:20:26,520 --> 00:20:27,940 동일합니다. 437 00:20:27,940 --> 00:20:30,400 그리고 제가 알아보고 있어요 경우 목록 null이 동일하지 않습니다. 438 00:20:30,400 --> 00:20:31,740 그리고이 시간이 아니다. 439 00:20:31,740 --> 00:20:35,580 그럼 난 목록을 할거야 이전 포인터를 가져옵니다. 440 00:20:35,580 --> 00:20:39,700 >> 그래서 이전 목록 PTR 가져옵니다. 441 00:20:39,700 --> 00:20:44,300 그래서이 퍼팅의 효과를 갖는다 여기에 그래픽 화살표. 442 00:20:44,300 --> 00:20:46,930 그리고 조금지고 물결 모양의, 선. 443 00:20:46,930 --> 00:20:50,780 그리고, 마지막으로, 나는 업데이트 포인터를 가리 키도록 보여줍니다. 444 00:20:50,780 --> 00:20:55,560 그래서 지금은이 사람을 가리 킵니다. 445 00:20:55,560 --> 00:20:57,170 그리고 지금, 빨리하자 전성 검사. 446 00:20:57,170 --> 00:20:59,470 >> 다음 목록은 어떤의 글로벌 변수입니다. 447 00:20:59,470 --> 00:21:02,850 첫 번째 노드는, 참으로, 34 때문에 그 화살표를 따라하고 있습니다. 448 00:21:02,850 --> 00:21:05,210 내가 할 수 있기 때문에 맞습니다 목록의 시작 부분에 삽입 449 00:21:05,210 --> 00:21:06,070 모든 새로운 노드. 450 00:21:06,070 --> 00:21:08,860 그의 다음 필드는이 사람에 날 리드. 451 00:21:08,860 --> 00:21:10,710 내가 계속하면, 나는 다음 null의 충돌. 452 00:21:10,710 --> 00:21:11,760 그래서 더 이상리스트가 없습니다. 453 00:21:11,760 --> 00:21:14,460 나는 이전에 충돌, 내가 얻을 내가 기대하는 곳 백업합니다. 454 00:21:14,460 --> 00:21:16,435 >> 그래서 몇 가지 포인터는 여전히있다, 분명히, 조작 할 수 있습니다. 455 00:21:16,435 --> 00:21:19,870 하지만 당신이 할 말을 들었다는 사실 이 일정 시간에 당신만을 의미 456 00:21:19,870 --> 00:21:22,910 일의 한정된 수있다 당신은 할 수있어. 457 00:21:22,910 --> 00:21:24,290 그리고 그 수는 무엇입니까? 458 00:21:24,290 --> 00:21:25,185 그것은 하나의 단계가 될 수 있습니다. 459 00:21:25,185 --> 00:21:25,700 그것은 두 가지가 있습니다. 460 00:21:25,700 --> 00:21:26,820 그것은 1000 단계 수 있습니다. 461 00:21:26,820 --> 00:21:30,500 그러나 당신이 할 수없는 의미, 유한의 루프의 모든 종류의 일이 일어나고있다 462 00:21:30,500 --> 00:21:32,010 여기에, 아니 재귀, 아니 루프. 463 00:21:32,010 --> 00:21:37,390 그것은 단지 하드 코드 라인 수있어 우리는이 샘플에서이 코드로. 464 00:21:37,390 --> 00:21:42,330 >> 따라서 다음 문제 (12)에 우리에게 물었다 제거의 구현을 완료 465 00:21:42,330 --> 00:21:46,740 그것을 제거하는 방식으로 아래 N 선형 시간의 목록에서. 466 00:21:46,740 --> 00:21:48,740 그래서 당신은 좀 더이 호기심 지금. 467 00:21:48,740 --> 00:21:52,380 당신은 그 N을 가정 할 경우 현재 목록에서 존재한다 468 00:21:52,380 --> 00:21:53,340 더 이상 두 번 이상 없습니다. 469 00:21:53,340 --> 00:21:56,770 그리고도 퀴즈 기반하기위한 것입니다 단순화 가정, 그래서 470 00:21:56,770 --> 00:21:59,780 당신은 수 50 곳을 발견하면 목록에서, 당신은 또한하지 않습니다 471 00:21:59,780 --> 00:22:02,890 에 계속에 대해 걱정할 필요가 가능한 모든 찾고, 반복 472 00:22:02,890 --> 00:22:06,990 다만 바뀔 것 (50)의 복사, 제한된 시간에 몇 가지의 특징점에. 473 00:22:06,990 --> 00:22:10,460 >> 그래서 제거와 함께, 이것은 분명히했다 더 많은 도전과 더 474 00:22:10,460 --> 00:22:11,640 작성하는 코드입니다. 475 00:22:11,640 --> 00:22:14,990 한눈에보기, 솔직히, 그것은 수도 압도적 인과 같은 모양 476 00:22:14,990 --> 00:22:17,060 당신이 수있는 방법은 없습니다 퀴즈와 함께 제공됩니다. 477 00:22:17,060 --> 00:22:22,450 그러나 우리는 각 단계에 초점을 경우, 바라건대, 갑자기 것 478 00:22:22,450 --> 00:22:26,060 당신을 공격하는 이러한 개인의 각 단계는 분명 의미가 있습니다 479 00:22:26,060 --> 00:22:27,080 생각해 보면. 480 00:22:27,080 --> 00:22:28,200 그럼 살펴 보자. 481 00:22:28,200 --> 00:22:32,570 >> 그래서 첫 번째, 우리는 포인터를 초기화 로 그 자체를 보여줍니다. 482 00:22:32,570 --> 00:22:36,040 내가 선형 시간을 원하기 때문에, 그 수단 나는 약간의 루프가하는거야. 483 00:22:36,040 --> 00:22:39,730 그리고 일반적인 방법은 반복하는 목록 구조 또는 어떤 종류의 노드 484 00:22:39,730 --> 00:22:43,860 구조를 반복적으로하는 것입니다 데이터의 앞의 포인터 485 00:22:43,860 --> 00:22:46,990 구조 후 바로 업데이트를 시작 그것은 당신의 길을 걷기 486 00:22:46,990 --> 00:22:48,650 데이터 구조를 통해. 487 00:22:48,650 --> 00:22:50,040 그래서 정확하게 그렇게 할거야. 488 00:22:50,040 --> 00:22:54,260 >> 포인터 동안, 내 임시 변수, 하자, 널 (null)와 동일하지 489 00:22:54,260 --> 00:22:55,660 가서 확인하세요. 490 00:22:55,660 --> 00:22:56,910 나는 운이 좋은 거죠? 491 00:22:56,910 --> 00:23:01,740 나는 현재 해요 노드에서 N 필드입니다 동일보고 492 00:23:01,740 --> 00:23:03,380 숫자는 내가 찾고 있어요? 493 00:23:03,380 --> 00:23:05,410 그렇다면, 이제 뭔가를 할 수 있습니다. 494 00:23:05,410 --> 00:23:10,020 자,이 발견되면 상태 전체를 둘러싸는 495 00:23:10,020 --> 00:23:11,520 코드의 다음 줄. 496 00:23:11,520 --> 00:23:14,610 이것은 내가 걱정하는 유일한 것입니다 - 문제의 번호를 발견. 497 00:23:14,610 --> 00:23:18,010 그래서 다른, 단순화가 없습니다 개념적 것을 조금. 498 00:23:18,010 --> 00:23:22,040 >> 그러나 지금, 나는 실현, 당신은해야 할 수도 있습니다 만 생각 후에이 실현 499 00:23:22,040 --> 00:23:24,720 그것은 조금을 통해, 거기에 실제로 이가지 경우 여기. 500 00:23:24,720 --> 00:23:28,060 노드에서 어디 하나는 인 목록의 시작 501 00:23:28,060 --> 00:23:31,040 그 때문에, 작은 성가신 특별한 경우, 당신은 거래를하기 때문에 502 00:23:31,040 --> 00:23:33,340 이 것으로, 어떤 만 이상입니다. 503 00:23:33,340 --> 00:23:35,720 다른 곳 목록에서, 그것은 같은 것입니다. 504 00:23:35,720 --> 00:23:38,050 이전 노드와 다음이있다 노드 이전 노드, 다음 노드. 505 00:23:38,050 --> 00:23:40,940 그러나이 사람은 조금 특별하다 그는 처음에의합니다. 506 00:23:40,940 --> 00:23:48,710 >> 그래서 포인터리스트 같으면 자체, 그래서 나는의 시작 부분에있어 경우 507 00:23:48,710 --> 00:23:53,960 목록 및 I n을 발견, 내가 필요 몇 가지 작업을 수행합니다. 508 00:23:53,960 --> 00:23:59,230 하나는, 나는에 목록을 변경해야 다음 필드, 50 가리 킵니다. 509 00:23:59,230 --> 00:24:01,270 그래서 시도하고 있다고 가정 (34)를 제거합니다. 510 00:24:01,270 --> 00:24:03,560 그래서이 사람의 가야 불과 잠시. 511 00:24:03,560 --> 00:24:07,210 >> 그래서 내가 말할거야, 목록 다음 포인터를 가져옵니다. 512 00:24:07,210 --> 00:24:08,570 음,이 포인터입니다. 513 00:24:08,570 --> 00:24:10,360 다음 여기를 가리키는입니다. 514 00:24:10,360 --> 00:24:17,470 따라서 이것은이 화살표를 오른쪽으로 변화 지금 여기이 사람을 가리 키도록. 515 00:24:17,470 --> 00:24:19,580 이제, 우리가 기억 임시 변수. 516 00:24:19,580 --> 00:24:23,520 그래서 우리는 모든 노드를 분리하지 않은, 또한이 사람을 가지고 있기 때문에 내 517 00:24:23,520 --> 00:24:25,010 제거의 구현입니다. 518 00:24:25,010 --> 00:24:29,600 그래서 지금, 경우 목록 자체가 null이 아닌 내가 뭔가를 조금 수정해야합니다. 519 00:24:29,600 --> 00:24:32,690 >> 지금은 확인이 화살표 있는지 확인해야합니다, 이전에 지적 된 520 00:24:32,690 --> 00:24:36,830 50-34이 멀리 가야했다 때문에 제거하기 위해 노력하고있어 경우 521 00:24:36,830 --> 00:24:41,910 34, 50는 더 나은 하나를 유지했으나, 같은 그것의 종류의 역 참조 522 00:24:41,910 --> 00:24:42,820 화살표는 제안했다. 523 00:24:42,820 --> 00:24:44,820 그래서 난 그냥이 줄을했다. 524 00:24:44,820 --> 00:24:46,520 그럼 내가 다 했어. 525 00:24:46,520 --> 00:24:48,040 이 경우는 실제로 매우 간단합니다. 526 00:24:48,040 --> 00:24:51,010 목록의 머리를 자르고 비교적 간단합니다. 527 00:24:51,010 --> 00:24:52,980 >> 불행하게도,이 거기에 다른 성가신 블록. 528 00:24:52,980 --> 00:24:56,170 그래서 지금, 나는 그 사건을 고려해야 중간에 뭔가가 어디. 529 00:24:56,170 --> 00:24:59,880 그러나 그것은 제외하고도 끔찍한 아니다 이 같은 구문. 530 00:24:59,880 --> 00:25:03,080 그래서의 시작 부분에 아니에요 경우 목록, 어딘가에 중간에 있어요. 531 00:25:03,080 --> 00:25:08,160 그리고 여기이 선은 말하고 시작 당신이에있어 어떤 노드에서. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 이전 노드의 다음 필드로 이동 그리고 포인터가 가리 킵니다. 534 00:25:18,550 --> 00:25:20,390 >> 의이 그림으로이 작업을 수행 할 수 있습니다. 535 00:25:20,390 --> 00:25:21,640 그 일이 복잡해졌다. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 그래서 내가 여기에 이​​전 필드가있는 경우 - 이 해 보자 - 여기에 다음 필드. 538 00:25:37,990 --> 00:25:41,200 차라리 내 포인터를 단순화하는거야 전체 무리를 그리는 것보다 539 00:25:41,200 --> 00:25:45,710 앞뒤로 가지 십자 서로. 540 00:25:45,710 --> 00:25:50,870 그리고 지금,, 그냥이 1, 2라고하자 토론을 위해서 3도 541 00:25:50,870 --> 00:25:53,410 그와 일치하지 않는데 문제의 문제. 542 00:25:53,410 --> 00:25:55,900 >> 그래서 여기에 내 링크 목록입니다. 543 00:25:55,900 --> 00:25:59,300 나는이 두 가지를 제거하는 것을 시도하고있다 이야기의 특정 버전. 544 00:25:59,300 --> 00:26:01,960 그래서 난에 포인터를 업데이트 한 이 사람을 가리키는 될 수있다. 545 00:26:01,960 --> 00:26:03,315 그래서 이것은 PTR입니다. 546 00:26:03,315 --> 00:26:04,530 그는 여기를 가리키는 것. 547 00:26:04,530 --> 00:26:07,170 이것은 존재하는 목록입니다 전 세계적으로 이전. 548 00:26:07,170 --> 00:26:09,200 그는 무슨 일이 있어도 여기를 가리키는 없어요. 549 00:26:09,200 --> 00:26:10,800 그리고 지금, 나는 두 가지를 제거하기 위해 노력하고있어. 550 00:26:10,800 --> 00:26:13,850 >> 포인터가 여기 가리키는 그렇다면, 난 분명히, 따라가는 551 00:26:13,850 --> 00:26:17,110 1에 저를두고 이전 포인터. 552 00:26:17,110 --> 00:26:22,290 나는 그 말을거야 그 다음 이 날을 통해 제공 필드, 553 00:26:22,290 --> 00:26:25,410 여기 상자, 예정 동일한 포인터 다음. 554 00:26:25,410 --> 00:26:28,400 그래서이 포인터 경우,이 옆에 있습니다. 555 00:26:28,400 --> 00:26:31,840 그것은 즉,이 화살표 요구 이 사람을 가리 키도록. 556 00:26:31,840 --> 00:26:35,140 >> 그래서 코드 줄은 무엇을 가지고 이 약간은 있습니다 다. 557 00:26:35,140 --> 00:26:37,500 그리고 지금,이 같은보고있다 올바른 방향으로 단계. 558 00:26:37,500 --> 00:26:41,390 우리는 기본적으로 2 아웃 싹둑 할 1과 3의 중간. 559 00:26:41,390 --> 00:26:44,400 그래서 우리가 원하는 그 의미가 주위 노선이 포인터를. 560 00:26:44,400 --> 00:26:50,400 그래서이 다음 줄은 확인 된 경우 포인터 다음 null이 아닌, 거기에 561 00:26:50,400 --> 00:26:54,200 2의 오른쪽에 참으로 사람, 즉, 우리는 또한해야 할 의미 562 00:26:54,200 --> 00:26:55,850 조금 여기 싹둑. 563 00:26:55,850 --> 00:27:00,590 >> 그래서 나는 지금이 포인터를 수행해야 이전 포인터를 업데이트 564 00:27:00,590 --> 00:27:05,410 약간의 작업을 수행하는이 남자 여기에 여기에 점을 해결. 565 00:27:05,410 --> 00:27:07,100 그리고 지금, 시각적으로는 좋은 것입니다. 566 00:27:07,100 --> 00:27:11,930 거기에 있다는 점에서 조금 지저분한 더 이상이 가리키는 아무도 없습니다. 567 00:27:11,930 --> 00:27:13,600 2 왼쪽을 가리키고 있습니다. 568 00:27:13,600 --> 00:27:14,980 그리고 2는 오른쪽을 가리키고 있습니다. 569 00:27:14,980 --> 00:27:17,480 그러나 그는, 자신이 원하는 무엇이든 할 수 있기 때문에 그는 해방 얻는 것을 대략이다. 570 00:27:17,480 --> 00:27:19,480 그리고 그것은 무엇을 중요하지 않습니다 그 값은 더 이상이다. 571 00:27:19,480 --> 00:27:23,040 >> 중요한 것은 남아있는 것입니다 사람들은 위의 라우팅됩니다 572 00:27:23,040 --> 00:27:24,280 지금은 그 아래. 573 00:27:24,280 --> 00:27:25,810 그리고 실제로, 그것은 우리가 다음에 할거야. 574 00:27:25,810 --> 00:27:29,360 우리가 말씀을 의미합니다 우리는 무료 포인터, 운영 체제, 당신은 환영합니다 575 00:27:29,360 --> 00:27:30,906 이를 되찾기 위해. 576 00:27:30,906 --> 00:27:34,900 그리고 마지막으로, 우리는 돌아갑니다. 577 00:27:34,900 --> 00:27:37,220 다른 암시 적으로 만약에 우리 아직 반환되지 않은, 578 00:27:37,220 --> 00:27:38,290 우리는 계속 찾고 있어요. 579 00:27:38,290 --> 00:27:41,485 그래서 포인터가 바로 옆에 포인터와 동일 여기이 사람을 이동을 의미합니다. 580 00:27:41,485 --> 00:27:42,600 여기이 사람을 이동합니다. 581 00:27:42,600 --> 00:27:45,400 여기이 사람을 이동하는 경우, 사실, 우리는 수를 찾을 수 없습니다 582 00:27:45,400 --> 00:27:46,960 우리는 아직 찾고 있습니다. 583 00:27:46,960 --> 00:27:49,630 >> 그래서 솔직히, 그것은 완전히 보인다 압도적 인, 내가 처음에 생각 584 00:27:49,630 --> 00:27:52,180 눈에, 특히 당신이 고생하는 경우 이 함께 퀴즈 동안 다음을 참조하십시오 585 00:27:52,180 --> 00:27:52,850 다음과 같이. 586 00:27:52,850 --> 00:27:55,050 그리고 당신은 뒷면에 자신을 두드려. 587 00:27:55,050 --> 00:27:57,080 글쎄, 내가 가질 수있는 방법이 없습니다 퀴즈에 그와 함께 제공됩니다. 588 00:27:57,080 --> 00:28:00,470 그러나 나는 당신이 할 수있는, 주장 당신이 중단되는 경우 이러한 개별로 다운 589 00:28:00,470 --> 00:28:04,400 다만 케이스와 그것을 통해 도보 신중하게, 틀림없이, 아래,이기는하지만 590 00:28:04,400 --> 00:28:06,300 스트레스 상황. 591 00:28:06,300 --> 00:28:09,470 >> 다행히, 그림이 만들어 행복 다. 592 00:28:09,470 --> 00:28:11,050 당신은이를 그릴 수 방법의 수. 593 00:28:11,050 --> 00:28:12,760 당신은 십자 할 필요가 없습니다 여기 것. 594 00:28:12,760 --> 00:28:14,520 당신은 바로 그것을 할 수 이 같은 라인. 595 00:28:14,520 --> 00:28:18,790 그러나이 문제의 요지, 일반적으로, 실현하는 것을 596 00:28:18,790 --> 00:28:22,060 결국 그림은 조금 보일 것 이런 일 때문에 597 00:28:22,060 --> 00:28:25,030 일정한 시간을 유지할 것을 암시 방해하고 방해하고 방해 598 00:28:25,030 --> 00:28:29,900 처음에 새 노드 목록. 599 00:28:29,900 --> 00:28:31,960 질문? 600 00:28:31,960 --> 00:28:34,565 아마도 가장 도전 확실히 코딩 질문입니다. 601 00:28:34,565 --> 00:28:37,690 >> 청중 : 그래서 유사한 목록입니다 앞의 예에서 머리. 602 00:28:37,690 --> 00:28:39,640 >> 데이비드 J. 마란 : 정확하게, 정확하게. 603 00:28:39,640 --> 00:28:43,130 그냥 다른 이름 전역 변수. 604 00:28:43,130 --> 00:28:44,380 월드 와이드 무엇? 605 00:28:44,380 --> 00:28:48,880 606 00:28:48,880 --> 00:28:49,730 >> ROB 보덴 : OK. 607 00:28:49,730 --> 00:28:52,020 그래서 이것은 어디 하나입니다 단락을 작성했다. 608 00:28:52,020 --> 00:28:56,060 어떤 사람들은 에세이를 썼다 이 질문에 대한. 609 00:28:56,060 --> 00:29:00,230 그러나 당신은이 여섯 가지 용어를 사용할 필요가 때 어떤 일이 일어나는지 설명하는 610 00:29:00,230 --> 00:29:02,440 당신은 facebook.com에 문의하려고합니다. 611 00:29:02,440 --> 00:29:07,930 그래서 난 그냥 과정을 통해 이야기 할 것 이러한 용어를 사용. 612 00:29:07,930 --> 00:29:11,290 그래서 우리의 브라우저에서, 우리는 facebook.com를 입력 입력하고 Enter 키를 누르십시오. 613 00:29:11,290 --> 00:29:17,280 그래서 우리의 브라우저를 구성하는거야 HTTP는 보내려고 것을 요청 614 00:29:17,280 --> 00:29:22,220 페이스 북에 어떤 과정을 통해 페이스 북은 우리에 응답하려면 615 00:29:22,220 --> 00:29:24,450 그 페이지의 HTML. 616 00:29:24,450 --> 00:29:28,800 >> 그래서 프로세스가 무엇입니까 이는 HTTP 요청 617 00:29:28,800 --> 00:29:30,730 실제로 페이스 북에 도착? 618 00:29:30,730 --> 00:29:32,790 그래서 첫 번째, 우리는 번역을해야합니다 Facebook.com. 619 00:29:32,790 --> 00:29:38,780 그래서 그냥 이름 Facebook.com 제공 실제로 HTTP 요청에게 수행 곳 620 00:29:38,780 --> 00:29:39,940 갈 필요가? 621 00:29:39,940 --> 00:29:44,120 그래서 우리는 Facebook.com 번역을해야합니다 IP 주소로, 어떤 고유 622 00:29:44,120 --> 00:29:47,620 어떤 시스템에서 우리는 실제로 식별 이 요청을 보내려고합니다. 623 00:29:47,620 --> 00:29:49,310 노트북은 IP 주소가 있습니다. 624 00:29:49,310 --> 00:29:52,240 인터넷에 연결 아무것도 IP 주소를 갖는다. 625 00:29:52,240 --> 00:29:59,030 >> 그래서 DNS는 도메인 이름 시스템, 즉 어떻게 번역을 처리 할 것 626 00:29:59,030 --> 00:30:03,750 facebook.com에서 IP 주소에 해당 당신은 실제로 문의하십시오. 627 00:30:03,750 --> 00:30:08,075 그래서 우리는 DNS 서버에 연결하고 말하자면, facebook.com은 무엇입니까? 628 00:30:08,075 --> 00:30:16,560 그것은 아, IP 주소 190.212의 말한다 뭔가 뭔가 뭔가. 629 00:30:16,560 --> 00:30:16,900 괜찮아요. 630 00:30:16,900 --> 00:30:18,850 지금, 나는 무엇을 알고 기계 나는 문의하십시오. 631 00:30:18,850 --> 00:30:22,360 >> 그래서 당신은 당신의 HTTP 요청을 보낸다 그 기계에 이상. 632 00:30:22,360 --> 00:30:24,140 그래서 어떻게 그 기계에 도착합니까? 633 00:30:24,140 --> 00:30:27,200 음, 요청에서갑니다 라우터 수신 거부에 라우터. 634 00:30:27,200 --> 00:30:32,630 클래스의 예를 기억 위치 우리는 실제로 길을보고 그 635 00:30:32,630 --> 00:30:35,340 우리가 시도 할 때 패킷했다 통신 할 수 있습니다. 636 00:30:35,340 --> 00:30:38,460 우리는 대서양을 뛰어 보았다 한 지점 또는 무엇이든에서 바다. 637 00:30:38,460 --> 00:30:42,820 >> 그래서 지난 학기 포트. 638 00:30:42,820 --> 00:30:46,520 그래서이 컴퓨터에 지금이다. 639 00:30:46,520 --> 00:30:49,970 현재 여러 가지가있을 수 인터넷과 통신. 640 00:30:49,970 --> 00:30:53,730 그래서, 말, Skype를 실행 할 수 있습니다. 641 00:30:53,730 --> 00:30:55,670 나는 열려있는 웹 브라우저가있을 수 있습니다. 642 00:30:55,670 --> 00:30:59,010 내가 뭔가를해야 할 수도 있습니다 그 파일을 torrenting. 643 00:30:59,010 --> 00:31:00,880 그래서이 모든입니다 통신 644 00:31:00,880 --> 00:31:02,600 어떤 방법으로 인터넷. 645 00:31:02,600 --> 00:31:08,070 >> 그래서 컴퓨터가 일부 데이터를 수신 할 때 인터넷에서, 어떻게하지 646 00:31:08,070 --> 00:31:10,130 알고있는 응용 프로그램이 실제로 데이터를 원하는가? 647 00:31:10,130 --> 00:31:12,610 이 특정 여부를 어떻게 알 수 있습니까 데이터에 대한 의미입니다 648 00:31:12,610 --> 00:31:16,070 반대로 응용 프로그램을 torrenting 웹 브라우저에? 649 00:31:16,070 --> 00:31:20,980 그래서이 점에서 포트의 목적이다 이러한 응용 프로그램의 모든이 650 00:31:20,980 --> 00:31:22,720 컴퓨터의 포트를 주장했다. 651 00:31:22,720 --> 00:31:27,580 그래서 귀하의 웹 브라우저는 헤이 말한다 I 포트 1000에서 수신 대기하고 있습니다. 652 00:31:27,580 --> 00:31:32,240 그리고 당신의 torrenting 프로그램은 말하고있다, I 포트 3000에서 수신 대기하고 있습니다. 653 00:31:32,240 --> 00:31:34,770 그리고 Skype는 I 포트 4000을 사용하고, 말한다. 654 00:31:34,770 --> 00:31:41,950 >> 당신은 어떤 데이터를 얻을 때 그래서 속하는 이들 애플리케이션 중 하나, 데이터 655 00:31:41,950 --> 00:31:45,510 어떤 포트로 표시되어 그것을 실제로 에 함께 전송해야한다. 656 00:31:45,510 --> 00:31:47,950 그래서이 아, 내가 속한 말한다 포트 1000. 657 00:31:47,950 --> 00:31:50,950 그때 나는이를 전달할 필요가 알고 내 웹 브라우저에 따라. 658 00:31:50,950 --> 00:31:56,440 그래서 이유는 현재 관련의 정보 웹 서버가 경향이있다 659 00:31:56,440 --> 00:31:58,240 포트 80에서 수신 대기. 660 00:31:58,240 --> 00:32:02,420 내가 Facebook.com 연락 그래서, 난 일부 컴퓨터와 통신. 661 00:32:02,420 --> 00:32:06,390 하지만 난 그 어느 포트를 말할 필요 I와 통신 할 기계. 662 00:32:06,390 --> 00:32:09,160 그리고 웹 서버는 경향이있다 포트 80에서 수신 대기. 663 00:32:09,160 --> 00:32:14,010 >> 그들이 원하는 경우, 그들은 그것을 설정할 수 있습니다 최대 그래서 포트 7000로 나열합니다. 664 00:32:14,010 --> 00:32:19,090 그리고 웹 브라우저에서, 내가 할 수 7000 : 수동 Facebook.com을 입력 665 00:32:19,090 --> 00:32:24,600 포트 7000에 요청을 보낼 페이스 북의 웹 서버의. 666 00:32:24,600 --> 00:32:26,820 >> 데이비드 J. 마란 :이 경우,도 우리는 필요로하지 않았지만 그 사람들 667 00:32:26,820 --> 00:32:30,000 이것은 물론,이 경우, 어떤 포트 요청 사실에 갈 것인가? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 다시 시도하십시오. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 정확히. 672 00:32:44,300 --> 00:32:47,960 미묘는 찾고 있지만 그가 없음 마지막 없습니다. 673 00:32:47,960 --> 00:32:51,770 >> ROB 보덴 : 그래서 HTTPS, 그것은이기 때문에 특별히 듣고 674 00:32:51,770 --> 00:32:55,180 암호화는 포트 4430에 있습니다. 675 00:32:55,180 --> 00:32:57,680 >> 청중 : 그리고 이메일은 25이다, 그렇지? 676 00:32:57,680 --> 00:33:00,670 >> 데이비드 J. 마란 : 아웃 바운드 이메일, 25, 네. 677 00:33:00,670 --> 00:33:03,760 >> ROB 보덴 : 심지어 대부분 몰라 - 낮은 사람의 모든 경향 678 00:33:03,760 --> 00:33:06,310 정보의 보호를받습니다. 679 00:33:06,310 --> 00:33:09,260 나는 모든에서 생각 1024 예약되어 있습니다. 680 00:33:09,260 --> 00:33:13,450 >> 청중 : 왜 말 했는가 3 잘못된 번호입니까? 681 00:33:13,450 --> 00:33:18,820 >> ROB 보덴 : 때문에 IP 주소, 숫자 네 그룹화가있다. 682 00:33:18,820 --> 00:33:21,090 그리고 그들은 0에서 255입니다. 683 00:33:21,090 --> 00:33:28,060 그래서 192.168.2.1는 일반적입니다 로컬 네트워크 IP 주소입니다. 684 00:33:28,060 --> 00:33:30,840 그 모두가 255보다 작은 알 수 있습니다. 685 00:33:30,840 --> 00:33:33,570 그래서 300으로 시작했을 때, 그 아마도이 없습니다 686 00:33:33,570 --> 00:33:35,210 숫자 중 하나가되었습니다. 687 00:33:35,210 --> 00:33:38,170 >> 데이비드 J. 마란 :하지만 바보 클립 에서 - 그들이 있었다 CSI했다 688 00:33:38,170 --> 00:33:39,970 숫자가 너무 큽니다 IP 주소. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB 보덴이에 대한 질문? 691 00:33:46,110 --> 00:33:51,710 다음 하나에 이렇게 바꿔 주제, 그러나 우리는이 PHP 배열이 692 00:33:51,710 --> 00:33:53,270 쿼드 주택. 693 00:33:53,270 --> 00:33:56,360 그리고 우리는 정렬되지 않은 목록이 있습니다. 694 00:33:56,360 --> 00:33:59,550 그리고 우리는 각 목록 항목을 인쇄 할 그냥 집 이름을 포함. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 그래서 우리는 foreach 루프가있다. 697 00:34:11,870 --> 00:34:17,540 그래서 구문이 foreach 문입니다 기억 배열의 항목으로 배열. 698 00:34:17,540 --> 00:34:22,360 그래서 루프의 각 반복을 통해, 집 중 하나에 걸릴 것입니다 699 00:34:22,360 --> 00:34:24,060 배열의 내부 값. 700 00:34:24,060 --> 00:34:26,530 >> 첫 번째 반복, 집에 캐벗 하우스 될 것입니다. 701 00:34:26,530 --> 00:34:30,370 두 번째 반복, 집에있는 것 그래서 택배 하우스하고. 702 00:34:30,370 --> 00:34:34,370 그래서 집 각 쿼드를 위해, 우리는거야 바로 인쇄 할 것 - 703 00:34:34,370 --> 00:34:37,250 당신은 또한 에코 있었다 - 704 00:34:37,250 --> 00:34:42,199 다음 목록의 항목과 집의 이름 다음 목록의 항목을 닫습니다. 705 00:34:42,199 --> 00:34:45,210 중괄호 여기에 선택 사항입니다. 706 00:34:45,210 --> 00:34:49,480 >> 그리고 우리는 또한 질문을했다 자체가 닫 기억 707 00:34:49,480 --> 00:34:50,770 순서가없는 목록 태그입니다. 708 00:34:50,770 --> 00:34:53,949 그래서 우리는 PHP 모드를 종료해야 이를 위해. 709 00:34:53,949 --> 00:35:00,280 또는 우리는 에코 수도 순서가없는 목록 태그를 닫습니다. 710 00:35:00,280 --> 00:35:02,380 >> 데이비드 J. 마란 : 여기에 또 좋은 것 에 대 한 오래 된 학교를 사용했습니다 711 00:35:02,380 --> 00:35:07,340 = 0 0 $ i를 가진 루프의 카운트를 사용하여 레이의 길이를 알아낼. 712 00:35:07,340 --> 00:35:09,240 완전히 벌금도 단지 조금 wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> 청중 : 그래서 당신은이 생길까 [청취], 당신은 할 것 - 715 00:35:14,742 --> 00:35:16,734 나는 루프가 들리지] 무엇을 잊어 버려요. 716 00:35:16,734 --> 00:35:21,380 당신은 쿼드 브래킷 나는 $시겠습니까? 717 00:35:21,380 --> 00:35:21,850 >> 데이비드 J. 마란 : 그렇습니다. 718 00:35:21,850 --> 00:35:23,100 네, 맞아요. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB 보덴 : 다른 건? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> 데이비드 J. 마란 : 좋습니다. 723 00:35:32,010 --> 00:35:32,300 트레이드 오프. 724 00:35:32,300 --> 00:35:38,290 그래서 대답 큼이 있었다 이들 각각에 대한 가능성. 725 00:35:38,290 --> 00:35:40,510 우리는 정말 그냥 찾고 있었다 상승과에 대한 강력한 무언가 726 00:35:40,510 --> 00:35:41,100 단점. 727 00:35:41,100 --> 00:35:44,830 그리고 수 (16)는 사용자의 유효성을 검사 요청 입력 클라이언트 측 자바 스크립트와 같이, 728 00:35:44,830 --> 00:35:47,280 대신 서버 측의, PHP와 같은. 729 00:35:47,280 --> 00:35:49,450 그렇다면의 상승의 하고 클라이언트 측? 730 00:35:49,450 --> 00:35:53,780 >> 글쎄, 우리는 제안 된 것들 중 하나입니다 당신이 대기 시간을 줄일 수 있음을, 당신 때문에 731 00:35:53,780 --> 00:35:56,750 연락 귀찮게 할 필요가 없습니다 몇 걸릴 수 있습니다 서버, 어떤 732 00:35:56,750 --> 00:36:00,390 밀리 초 (초)도 몇 그 피함으로써 단지 733 00:36:00,390 --> 00:36:04,670 사용자의 입력 클라이언트 측에 의해 유효성을 검사 에 제출 처리기를 트리거링 및 734 00:36:04,670 --> 00:36:06,650 단지 그들이 입력 한 않았다 확인 이름에서 뭔가? 735 00:36:06,650 --> 00:36:08,080 그들은 뭔가를 입력 했 이메일 주소에? 736 00:36:08,080 --> 00:36:10,950 그들은에서 기숙사를 선택 했 드롭 다운 메뉴? 737 00:36:10,950 --> 00:36:14,360 >> 당신은 그들에게 즉각적인 피드백을 제공 할 수 있습니다 기가 헤르츠 컴퓨터를 사용 738 00:36:14,360 --> 00:36:16,770 또는 그들이 그건 뭐든지 실제로 자신의 책상에. 739 00:36:16,770 --> 00:36:19,310 그래서 그것은 단지 더 나은 사용자의 일반적으로 경험한다. 740 00:36:19,310 --> 00:36:24,460 그러나 클라이언트 측을하는 단점 유효성 검사, 당신은 또한없이 할 경우 741 00:36:24,460 --> 00:36:29,860 서버 측 유효성 검사를하는 것은입니다 CS50 나오는 대부분의 사람이 알고 742 00:36:29,860 --> 00:36:33,980 당신은 당신이 원하는 모든 데이터를 보낼 수있는 서버에 임의의 수의 방법. 743 00:36:33,980 --> 00:36:37,030 솔직히, 대부분의 모든 브라우저에서, 당신은 할 수 설정과 단지 주변 클릭 744 00:36:37,030 --> 00:36:40,110 자바 스크립트를 해제하는 것, 따라서 어떤 형태의를 사용하지 않도록 설정 745 00:36:40,110 --> 00:36:41,080 검증. 746 00:36:41,080 --> 00:36:44,460 >> 하지만 당신은 기억을 생각하고 심지어 사용 클래스의 몇 가지 불가사의 한 일을했다 747 00:36:44,460 --> 00:36:47,790 텔넷 실제로 척 GET을 전송하여 브라우저 수 748 00:36:47,790 --> 00:36:49,240 서버에 대한 요청. 749 00:36:49,240 --> 00:36:51,030 그리고 확실히 아니다 모든 자바 스크립트를 사용하여. 750 00:36:51,030 --> 00:36:53,290 그건 그냥 내가 명령을 입력 것 키보드에서. 751 00:36:53,290 --> 00:36:57,410 그래서 정말 충분히 내의 모든 프로그래머 웹 및 HTTP 편안함 752 00:36:57,410 --> 00:37:01,690 그 또는 그녀가 원하는대로 데이터를 보낼 수 확인하지 않고 서버에. 753 00:37:01,690 --> 00:37:05,470 그리고 당신의 서버는 확인되지 않은 경우, 그들이 나에게 이름을 주 었는가이다 754 00:37:05,470 --> 00:37:08,930 이 실제로 유효한 이메일 주소는 않았다 그들은 기숙사를 선택, 당신은 종료 될 수 있습니다 755 00:37:08,930 --> 00:37:12,800 최대 삽입 가짜하거나 빈 데이터 데이터베이스에, 어떤 아마 756 00:37:12,800 --> 00:37:15,450 좋은 일이 될 수 없습니다 경우 당신은 거기 가정 하였다. 757 00:37:15,450 --> 00:37:16,770 >> 그래서이 짜증나는 현실이다. 758 00:37:16,770 --> 00:37:19,890 그러나 일반적으로, 클라이언트 측에서 검증은 좋은 것입니다. 759 00:37:19,890 --> 00:37:21,810 하지만 두 배의 작업을 의미한다. 760 00:37:21,810 --> 00:37:25,970 다양한 존재가 없지만 에 대한 라이브러리, 자바 스크립트 라이브러리 761 00:37:25,970 --> 00:37:28,830 예,이 정도를 확인하는 두통의 더 적은. 762 00:37:28,830 --> 00:37:31,940 그리고 당신은 코드의 일부를 재사용 할 수있다 서버 측, 클라이언트 측. 763 00:37:31,940 --> 00:37:35,980 하지만 일반적으로 실현 않는다 추가 작업. 764 00:37:35,980 --> 00:37:36,415 그래. 765 00:37:36,415 --> 00:37:37,792 >> 청중 : 그래서 만약 우리 단지 덜 안전한 말했다 - 766 00:37:37,792 --> 00:37:39,205 >> 데이비드 J. 마란 : [웃음] 767 00:37:39,205 --> 00:37:39,680 윽. 768 00:37:39,680 --> 00:37:43,105 사람들은 항상 어렵다 판결하는 것. 769 00:37:43,105 --> 00:37:44,480 >> ROB 보덴 : 그 것 받아 들여졌다. 770 00:37:44,480 --> 00:37:44,810 >> 데이비드 J. 마란 : 무엇? 771 00:37:44,810 --> 00:37:45,810 >> ROB 보덴 :이 문제를 만들었습니다. 772 00:37:45,810 --> 00:37:46,735 즉, 허용 된 것입니다. 773 00:37:46,735 --> 00:37:47,220 >> 데이비드 J. 마란 : 네. 774 00:37:47,220 --> 00:37:47,830 >> 청중 : 차가운. 775 00:37:47,830 --> 00:37:51,770 >> ROB 보덴 :하지만 우리는 동의하지 않았다 첫 번째에 대한 - 776 00:37:51,770 --> 00:37:53,630 물론, 우리가 찾고있는 것은 당신 같은 뭔가가 필요가 없습니다 777 00:37:53,630 --> 00:37:55,270 서버와 통신 할 수 있습니다. 778 00:37:55,270 --> 00:37:58,355 우리는 단지 더 빨리 수락하지 않았습니다. 779 00:37:58,355 --> 00:38:00,080 >> 청중 : 무엇에 대한 페이지를 다시로드하지? 780 00:38:00,080 --> 00:38:00,430 >> ROB 보덴 : 예. 781 00:38:00,430 --> 00:38:03,000 즉, 허용 대답했다. 782 00:38:03,000 --> 00:38:06,300 >> 데이비드 J. 마란 : 우리가 생각 아무것도 그것은 가능성이없는보다 더 많은 가능성이 783 00:38:06,300 --> 00:38:09,780 당신은 당신이 무엇인지 알고 있었다 힘든하는 말 784 00:38:09,780 --> 00:38:13,500 가끔 그리는 라인. 785 00:38:13,500 --> 00:38:16,000 대신 링크 된 목록을 사용하여 유지 배열 786 00:38:16,000 --> 00:38:17,590 정수의 목록을 분류. 787 00:38:17,590 --> 00:38:21,000 연결에 따라서 거꾸로 우리는 자주 인용 자신의 전체를 동기 목록 788 00:38:21,000 --> 00:38:22,370 소개는 활력을 얻을 수 있었다. 789 00:38:22,370 --> 00:38:23,030 그들은 증가 할 수 있습니다. 790 00:38:23,030 --> 00:38:23,950 그들은 축소 할 수 있습니다. 791 00:38:23,950 --> 00:38:27,370 그래서 당신은 남이 할 필요가 없습니다 실제로 더 많은 메모리를 만들 수 있습니다 792 00:38:27,370 --> 00:38:28,140 배열. 793 00:38:28,140 --> 00:38:30,310 또는 당신은 필요가 없습니다 그냥 말, 미안, 사용자. 794 00:38:30,310 --> 00:38:31,410 이 배열은 가득합니다. 795 00:38:31,410 --> 00:38:35,850 목록이 너무 역동적 인 성장. 796 00:38:35,850 --> 00:38:37,210 연결리스트의 생각 단점? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> 청중 : 그것은 선형입니다. 799 00:38:43,356 --> 00:38:45,800 연결리스트에 검색하면 선형 대신 당신이 로그인 무엇 800 00:38:45,800 --> 00:38:46,360 >> 데이비드 J. 마란 : 그렇습니다. 801 00:38:46,360 --> 00:38:50,160 연결리스트에 검색하면 선형, 이 분류되어있는 경우에도이 당신이 할 수 있기 때문에 802 00:38:50,160 --> 00:38:53,170 이들 빵 부스러기를 따라,이 포인터리스트로부터 개시 803 00:38:53,170 --> 00:38:53,570 끝. 804 00:38:53,570 --> 00:38:57,970 당신은 임의 접근 및 활용 할 수 따라서, 이진 검색, 그것은 경우에도 805 00:38:57,970 --> 00:39:00,740 분류, 당신은 할 수 그 배열으로한다. 806 00:39:00,740 --> 00:39:02,390 그리고 다른 비용도 있습니다. 807 00:39:02,390 --> 00:39:02,966 그래. 808 00:39:02,966 --> 00:39:03,800 >> 청중 : 메모리 비효율적? 809 00:39:03,800 --> 00:39:04,130 >> 데이비드 J. 마란 : 네. 810 00:39:04,130 --> 00:39:06,940 글쎄, 난 필요없는 것 비효율적 말한다. 811 00:39:06,940 --> 00:39:10,110 그러나 그것은 당신에게 더 많은 메모리를 요 하는가, 당신은 모든 32 비트를 필요로하기 때문에 812 00:39:10,110 --> 00:39:13,400 추가 포인터 노드에서 단일 연결 목록 이상. 813 00:39:13,400 --> 00:39:16,660 지금, 당신은 정수를 저장하는 경우와 포인터를 추가하고, 그의 814 00:39:16,660 --> 00:39:17,830 실제로 종류의 아닌 사소한. 815 00:39:17,830 --> 00:39:19,340 이는 메모리의 양을 두 배로있어. 816 00:39:19,340 --> 00:39:22,330 그러나 현실에서, 경우에 당신은 저장하고 수도 구조체의 연결리스트 817 00:39:22,330 --> 00:39:25,540 8 바이트, 16 바이트, 더욱 보다, 어쩌면 더 적은이다 818 00:39:25,540 --> 00:39:26,500 한계 비용의. 819 00:39:26,500 --> 00:39:28,320 하지만 그럼에도 불구하고 비용입니다. 820 00:39:28,320 --> 00:39:31,880 그래서 그 중 하나가 된거야 단점으로 잘되었습니다. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 작성하는 PHP 대신에 C를 사용하여 명령 줄 프로그램. 823 00:39:36,100 --> 00:39:41,890 그래서 여기에, 그것을 사용하는 것이 더 빠릅니다 PHP 나 루비 또는 파이썬과 같은 언어. 824 00:39:41,890 --> 00:39:43,700 당신은 신속하게 열 텍스트 편집기입니다. 825 00:39:43,700 --> 00:39:45,900 당신은 더 많은 기능을 가지고 사용 가능한. 826 00:39:45,900 --> 00:39:49,325 PHP 함수의 부엌 싱크대가, C에서, 반면에 827 00:39:49,325 --> 00:39:50,420 아주, 아주 조금 있습니다. 828 00:39:50,420 --> 00:39:53,820 사실, 사람들은 하드 방법을 알고 당신이 해시 테이블이 없어. 829 00:39:53,820 --> 00:39:55,000 당신은 목록을 연결하지 않습니다. 830 00:39:55,000 --> 00:39:57,470 당신이 사람들을 원하는 경우에이 그들에게 자신을 구현합니다. 831 00:39:57,470 --> 00:40:00,950 >> PHP의 그래서 하나의 상승 또는 정말 어떤 인터프리터 언어는 신속성이다 832 00:40:00,950 --> 00:40:02,920 있는 당신은 코드를 작성할 수 있습니다. 833 00:40:02,920 --> 00:40:06,660 그러나 단점은, 우리는이를봤을 때 빨리 misspeller을 채찍질 834 00:40:06,660 --> 00:40:11,780 PHP를 사용하여 강의의 구현이며, 그 해석 언어를 사용하여 835 00:40:11,780 --> 00:40:13,570 일반적으로 느리다. 836 00:40:13,570 --> 00:40:18,420 그리고 우리는 함께 명백히 봤어 3 0.3 초​​에서 시간 증가 837 00:40:18,420 --> 00:40:24,440 때문에 해석의 초, 즉, 실제로 발생합니다. 838 00:40:24,440 --> 00:40:27,060 >> 또 다른 상승했다 당신에게 그 컴파일 할 필요는 없습니다. 839 00:40:27,060 --> 00:40:30,130 그래서 그것은 또한 개발 속도 덧붙여 말하자면, 당신은이 없기 때문에 840 00:40:30,130 --> 00:40:31,360 프로그램을 실행하는 두 단계. 841 00:40:31,360 --> 00:40:32,140 당신은 하나를 가지고. 842 00:40:32,140 --> 00:40:35,260 그리고 그 사랑의 경쟁력뿐만 아니라. 843 00:40:35,260 --> 00:40:38,450 SQL 데이터베이스를 사용하는 대신 데이터를 저장하는 CSV 파일. 844 00:40:38,450 --> 00:40:40,230 그래서 SQL 데이터베이스 pset7에 사용됩니다. 845 00:40:40,230 --> 00:40:42,060 CSV 파일은 많이 사용하지 않았다. 846 00:40:42,060 --> 00:40:45,960 하지만 당신은 pset7에 간접적으로 사용 물론 야후 금융 이야기로. 847 00:40:45,960 --> 00:40:49,330 >> 그러나 CSV 그냥 엑셀 파일처럼 만 매우 간단하고, 열이있는 곳 848 00:40:49,330 --> 00:40:54,010 단지 내부 쉼표로 demarked 그렇지 않으면 텍스트 파일. 849 00:40:54,010 --> 00:40:56,740 그리고 SQL 데이터베이스를 사용하는 것은 좀 더 강력한. 850 00:40:56,740 --> 00:41:00,060 당신이 일을 얻을 수 있기 때문에, 거꾸로의 같은 선택 및 삽입과 삭제합니다. 851 00:41:00,060 --> 00:41:03,790 그리고 당신은, 아마도, 인덱스를 얻을이 MySQL과 같은 다른 데이터베이스, 852 00:41:03,790 --> 00:41:07,510 오라클, 메모리에 당신을 위해 구축하는 당신의 선택은 아마 의미 853 00:41:07,510 --> 00:41:09,000 아래로 선형 최고 될 것. 854 00:41:09,000 --> 00:41:11,300 그것은 실제로 뭔가있을거야 이진 검색이나 뭐 같은 855 00:41:11,300 --> 00:41:12,520 정신에는 변함이. 856 00:41:12,520 --> 00:41:13,930 그래서 그들은 더 빠르게입니다. 857 00:41:13,930 --> 00:41:16,040 >> 그러나 단점은 것입니다 그것은 단지 더 많은 작업입니다. 858 00:41:16,040 --> 00:41:16,730 그것은 더 많은 노력이다. 859 00:41:16,730 --> 00:41:18,140 당신은 데이터베이스를 이해해야합니다. 860 00:41:18,140 --> 00:41:18,940 당신은 그것을 설정해야합니다. 861 00:41:18,940 --> 00:41:20,840 당신은 실행하는 서버가 필요 에 해당 데이터베이스. 862 00:41:20,840 --> 00:41:22,750 당신은 이해할 필요가 를 구성하는 방법에 대해 설명합니다. 863 00:41:22,750 --> 00:41:24,930 그래서 이들은 단지이 절충 종류. 864 00:41:24,930 --> 00:41:27,860 CSV 파일, 당신이 할 수있는 반면, gedit를 함께 만들 수 있습니다. 865 00:41:27,860 --> 00:41:28,770 그리고 당신은 갈 수 있어요. 866 00:41:28,770 --> 00:41:31,550 그 외의 복잡가 없습니다. 867 00:41:31,550 --> 00:41:34,870 >> 대신 해시 테이블의 트라이 사용 저장하기 위해 별도의 체인과 함께 868 00:41:34,870 --> 00:41:37,490 연상 단어의 사전 pset5의. 869 00:41:37,490 --> 00:41:42,480 그래서 이론적으로, 상승 시도 적어도, 무엇입니까? 870 00:41:42,480 --> 00:41:46,380 일정 시간, 적어도 당신이있어 경우 개개의 각각에 해싱 871 00:41:46,380 --> 00:41:48,990 당신 같은 단어 문자, pset5에있을 수 있습니다. 872 00:41:48,990 --> 00:41:52,720 즉 다섯 해시, 여섯 수 있습니다 다섯이나 여섯이 있다면 해시 873 00:41:52,720 --> 00:41:53,900 단어의 문자. 874 00:41:53,900 --> 00:41:54,580 그리고 꽤 좋다. 875 00:41:54,580 --> 00:41:56,910 그리고에 상한이 있다면 방법 긴 단어가 될 수 있습니다, 그건 876 00:41:56,910 --> 00:41:59,320 참으로 점근 일정 시간. 877 00:41:59,320 --> 00:42:05,180 >> 반면 별도의와 해시 테이블 그와 함께이 문제를 체인 878 00:42:05,180 --> 00:42:09,070 데이터 구조의 일종이라는 당신의 알고리즘의 성능 보통 879 00:42:09,070 --> 00:42:12,700 사물의 수에 따라 달라집니다 이미 데이터 구조. 880 00:42:12,700 --> 00:42:15,660 그것은 확실히의 경우의 체인, 그것에 당신이 넣어 더 많은 물건 881 00:42:15,660 --> 00:42:18,800 해시 테이블에, 그 이상 체인은 최악의 의미, 이동 882 00:42:18,800 --> 00:42:21,960 경우, 당신이 찾고있을 것 모든 방법의 한 끝에 883 00:42:21,960 --> 00:42:26,000 그 체인의 어느 효과적으로 선형 뭔가에 양도한다. 884 00:42:26,000 --> 00:42:29,450 >> 이제, 실제로, 절대적 있었다 해시 테이블을 가진 경우 일 885 00:42:29,450 --> 00:42:32,820 체인 대응보다 빠르다 트라이 구현. 886 00:42:32,820 --> 00:42:35,570 하지만 그 사이에, 여러 가지 이유로의 시도는 전체를 많이 사용하는 887 00:42:35,570 --> 00:42:39,240 메모리시킬 수있는, 사실, 느린 것들 아래로, 당신이 좋은하지 않기 때문에 888 00:42:39,240 --> 00:42:42,410 캐싱이라는 무언가의 혜택 여기서 서로 가까이있는 것들 889 00:42:42,410 --> 00:42:45,420 메모리에 액세스 할 수 있습니다 종종 더 빨리. 890 00:42:45,420 --> 00:42:48,180 그리고 때때로 당신은 가지고 올 수 정말 좋은 해시 함수. 891 00:42:48,180 --> 00:42:51,060 당신의 비트를 낭비 할 필요도 기억, 당신은 참, 할 수있을 것 892 00:42:51,060 --> 00:42:54,430 빠르고없는 일을 찾아 나쁜로 선형. 893 00:42:54,430 --> 00:42:58,410 >> 그래서 짧은 반드시 없었다 이 하나 또는 두 가지의과 894 00:42:58,410 --> 00:43:00,050 우리가 찾고있는 특정 물건. 895 00:43:00,050 --> 00:43:03,080 설득력 정말 아무것도 위쪽과 아래쪽으로 896 00:43:03,080 --> 00:43:04,800 일반적으로 우리의 눈을 사로 잡은. 897 00:43:04,800 --> 00:43:11,840 >> ROB 보덴 : 그래서 거꾸로, 우리는 한 그 자체로 받아 들일 "빨리." 당신 898 00:43:11,840 --> 00:43:14,540 그것에 대해 뭔가를 말을했다. 899 00:43:14,540 --> 00:43:17,910 이론적으로 빠른했다하더라도, 우리는 당신이 종류의 이해 것을 알고 있었다 900 00:43:17,910 --> 00:43:19,470 그것은 1 0 있다고. 901 00:43:19,470 --> 00:43:22,820 그리고 해시 테이블, 이론, 1 0이 아니다. 902 00:43:22,820 --> 00:43:26,550 런타임에 대해 아무것도 언급 일반적으로 포인트는 당신 얻었다. 903 00:43:26,550 --> 00:43:32,640 그러나 "더 빨리,"솔루션의 대부분에 시도가 있었다 된 큰 보드 904 00:43:32,640 --> 00:43:34,990 솔루션보다 객관적으로 느린 즉, 해시 테이블이었다. 905 00:43:34,990 --> 00:43:37,250 그래서 더 빨리 그 자체 정말 사실이 아니다. 906 00:43:37,250 --> 00:43:41,550 907 00:43:41,550 --> 00:43:44,380 >> 데이비드 J. 마란 : 돔 드 DOM DOM. 908 00:43:44,380 --> 00:43:46,686 아마 실현하는 유일한 사람 그는이 이었어 909 00:43:46,686 --> 00:43:47,500 오른쪽 발음 할 수? 910 00:43:47,500 --> 00:43:50,400 >> ROB 보덴 : 실제로 몰랐다. 911 00:43:50,400 --> 00:43:51,650 >> 데이비드 J. 마란 : 그것은 제 내 머리에 감. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB 보덴 :이 한 일을 해요. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 그래서 이것은 당신이 그릴 수 있었다이다 당신과 비슷한 다이어그램 수도 916 00:44:04,243 --> 00:44:06,040 과거 시험을 볼 수있다. 917 00:44:06,040 --> 00:44:12,200 그래서 그냥이 살펴 보자. 918 00:44:12,200 --> 00:44:18,170 그래서 HTML 노드에서, 우리는이 두 가지 어린이의 머리와 신체. 919 00:44:18,170 --> 00:44:20,570 그래서 우리는 분기 - 머리와 몸을. 920 00:44:20,570 --> 00:44:22,280 머리는 제목 태그가 있습니다. 921 00:44:22,280 --> 00:44:23,710 그래서 우리는 제목이. 922 00:44:23,710 --> 00:44:28,450 >> 이제 한가지 많은 사람들 잊었 이러한 텍스트 노드가 있다는 것입니다 923 00:44:28,450 --> 00:44:30,430 이 트리 내에서 요소. 924 00:44:30,430 --> 00:44:36,260 그래서 여기에 우리는 타원형으로 그들을 그리는 일이 이들로부터 구별하기 925 00:44:36,260 --> 00:44:37,380 노드의 유형. 926 00:44:37,380 --> 00:44:41,450 그러나주의 사항도 여기에 우리는 최고를, 중간, 하단은 끝나게됩니다 927 00:44:41,450 --> 00:44:42,560 텍스트 노드. 928 00:44:42,560 --> 00:44:46,250 그래서 사람들을 잊는 것은 다소이었다 일반적인 실수. 929 00:44:46,250 --> 00:44:48,770 >> 몸은 세 아이가 - 이 세 가지의 div. 930 00:44:48,770 --> 00:44:53,340 따라서 DIV, DIV, DIV 다음 텍스트 이들의 div의 노드 자식. 931 00:44:53,340 --> 00:44:55,900 그건 꽤 많이입니다 그 질문에 대한. 932 00:44:55,900 --> 00:44:57,860 >> 데이비드 J. 마란 : 그리고 그것은 주목할 가치, 우리는이에 연연하지 않더라도 933 00:44:57,860 --> 00:45:01,040 우리가 보내는 시간의 세부 사항 순서가하는 자바 스크립트,,에 934 00:45:01,040 --> 00:45:02,290 사실, 문제가 기술적. 935 00:45:02,290 --> 00:45:06,330 그래서 머리에 몸 앞에 오는 경우 HTML, 그런 다음에 나타납니다 936 00:45:06,330 --> 00:45:08,860 실제 DOM에서 몸의 왼쪽. 937 00:45:08,860 --> 00:45:12,265 자신은 단지 참고로, 일반적으로하는지 문서 순서라는 것을 여기서 938 00:45:12,265 --> 00:45:13,260 그것은 중요하지 않습니다. 939 00:45:13,260 --> 00:45:17,470 그리고 당신은 파서를 구현 한 경우, 건물에 HTML을 읽는 프로그램 940 00:45:17,470 --> 00:45:20,960 메모리에있는 나무까지, 정직하기, 그건 아마 직관적으로 무엇을 당신 941 00:45:20,960 --> 00:45:24,720 어쨌든 - 위에서 아래로, 왼쪽에서 오른쪽으로. 942 00:45:24,720 --> 00:45:26,116 >> ROB 보덴 : 그에 대한 질문? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 내가 다음 하나를 수행해야합니까? 945 00:45:30,000 --> 00:45:32,380 >> 데이비드 J. 마란 : 물론. 946 00:45:32,380 --> 00:45:33,810 >> ROB 보덴 : OK. 947 00:45:33,810 --> 00:45:39,320 그래서 이것은 버퍼 오버런입니다 공격 질문. 948 00:45:39,320 --> 00:45:43,740 여기에서 인식 할 중요한 것은,이다 물론, 어떻게 수도 적 트릭 949 00:45:43,740 --> 00:45:46,170 실행에이 프로그램 임의의 코드? 950 00:45:46,170 --> 00:45:51,860 그래서 argv1, 첫 번째 명령 행 이 프로그램에 인수, 즉이 될 수 있습니다 951 00:45:51,860 --> 00:45:53,920 임의의 길이. 952 00:45:53,920 --> 00:45:59,160 그러나 여기에서 우리는 복사 방어 적이기를 사용하는 argv1, 어떤 여기 바있다. 953 00:45:59,160 --> 00:46:00,165 우리는 인수로 전달하고 있습니다. 954 00:46:00,165 --> 00:46:02,050 그리고 그것은 이름의 줄에 복용. 955 00:46:02,050 --> 00:46:08,040 >> 그래서 우리는 줄을 memcpying입니다 이 버퍼 C에. 956 00:46:08,040 --> 00:46:09,400 우리는 얼마나 많은 바이트를 복사하는? 957 00:46:09,400 --> 00:46:14,040 잘하지만 바이트 바는 어떻게됩니까 그 인수의 길이를 사용. 958 00:46:14,040 --> 00:46:17,930 그러나 C는 12 바이트 넓다. 959 00:46:17,930 --> 00:46:22,280 그래서 우리는 명령 줄 인수를 입력하면 즉, 12 바이트보다 더 긴 시간, 우린 960 00:46:22,280 --> 00:46:25,470 이 넘칠 것 특히 버퍼. 961 00:46:25,470 --> 00:46:31,000 자, 어떻게 공격자는 속일 수 임의의 코드를 실행하도록 프로그램? 962 00:46:31,000 --> 00:46:34,910 >> 그래서 여기에 기억 주요 foo는 호출된다. 963 00:46:34,910 --> 00:46:37,340 그리고 다음 주 호출 foo는. 964 00:46:37,340 --> 00:46:40,408 의이를 그려 보자. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 그래서 우리는 우리의 스택이 있습니다. 967 00:46:46,990 --> 00:46:49,090 메인은 ​​스택 프레임이 맨 아래에. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 어떤 시점에서, 주요 통화 foo는. 970 00:46:53,250 --> 00:46:55,390 음, 바로, 주요 통화 foo는. 971 00:46:55,390 --> 00:46:57,130 그래서 foo는 자체 스택 프레임을 가져옵니다. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> 지금, 어떤 점에서, foo는 반환 할 것입니다. 974 00:47:02,220 --> 00:47:06,810 그리고 foo는 반환을했다, 우리는에서 알 필요가 주 우리의 내부 코드의 어떤 라인 975 00:47:06,810 --> 00:47:10,610 알기 위해 있었던 곳 우리는 주에서 다시 시작해야합니다. 976 00:47:10,610 --> 00:47:13,100 우리는 전체에서 foo는 호출 할 수 있습니다 다른 장소의 무리. 977 00:47:13,100 --> 00:47:14,620 어떻게 우리가 여기서 반환하는 지 알고 있나요? 978 00:47:14,620 --> 00:47:16,460 글쎄, 우리는 어딘가에 저장해야합니다. 979 00:47:16,460 --> 00:47:23,010 >> 그래서 곳 바로 근처에, 우리는 저장 우리는 한 번에 반환해야하는 위치 980 00:47:23,010 --> 00:47:24,070 foo는 돌아​​갑니다. 981 00:47:24,070 --> 00:47:26,350 그리고 이것은 반환 주소입니다. 982 00:47:26,350 --> 00:47:30,490 어떻게 공격자가 활용할 수 이런 사실은 그 983 00:47:30,490 --> 00:47:37,550 이 버퍼 (C)가 저장되고,하자 바로 여기에 C는, 말한다. 984 00:47:37,550 --> 00:47:39,690 그래서 우리는 C에 대한 12 바이트를 가지고있다. 985 00:47:39,690 --> 00:47:40,540 이것은 C입니다. 986 00:47:40,540 --> 00:47:43,030 그리고 이것은 푸즈 스택 링입니다. 987 00:47:43,030 --> 00:47:49,970 악의적 인 사용자가 더 들어이 경우 12 바이트 이하 또는 그들이 명령을 입력 988 00:47:49,970 --> 00:47:54,570 12 이상 라인 인수 문자는, 우리는거야 989 00:47:54,570 --> 00:47:57,540 이 버퍼 오버 플로우. 990 00:47:57,540 --> 00:47:59,910 >> 우리는 계속 할 수 있습니다. 991 00:47:59,910 --> 00:48:02,220 그리고 어떤 시점에서, 우리는 멀리 갈 우리가 시작하는 것이 충분히 992 00:48:02,220 --> 00:48:05,120 이 리턴 주소를 덮어 쓰기. 993 00:48:05,120 --> 00:48:08,310 그래서 일단 우리는 리턴 주소를 덮어 즉, 때 foo는 994 00:48:08,310 --> 00:48:14,220 반환, 우리는 어디를 반환하고 악의적 인 사용자로하는 말하고있다 995 00:48:14,220 --> 00:48:19,490 그것은 무엇에 의해, 입력 값이 무엇이든지간에 문자는 사용자 입력. 996 00:48:19,490 --> 00:48:24,320 그리고 악의적 인 사용자가되는 경우 특히 영리한, 그는이있을 수 있습니다 997 00:48:24,320 --> 00:48:29,255 printDef있는 곳으로 돌아갑니다 함수 또는 malloc에​​있는 곳 998 00:48:29,255 --> 00:48:31,830 기능, 그냥 아무 곳이나 임의의. 999 00:48:31,830 --> 00:48:38,420 >> 그가 가지고 어떤 경우에 더 영리하다 사용자는 여기로 돌아갑니다. 1000 00:48:38,420 --> 00:48:41,920 그리고 당신은 실행을 시작 이러한 코드의 라인으로. 1001 00:48:41,920 --> 00:48:46,610 그래서 그 시점에서, 사용자가 입력 할 수 있습니다 그는이 지역에 원하는대로. 1002 00:48:46,610 --> 00:48:52,210 그는 완벽하게 제어 할 수있다 프로그램에. 1003 00:48:52,210 --> 00:48:53,460 그에 대한 질문? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 그래서 다음 질문은 완료 같은 방법으로 foo는 다시 구현 1006 00:49:00,970 --> 00:49:02,620 더 이상 취약 없다. 1007 00:49:02,620 --> 00:49:03,870 >> 그래서 두 가지 방법이있다 이 작업을 할 수 있었다. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 우리는 여전히 C를 가지고 길이 12 인. 1010 00:49:13,330 --> 00:49:16,480 이 작업을 변경 할 수 있습니다 솔루션의 한 부분으로. 1011 00:49:16,480 --> 00:49:18,930 우리는 또한 확인하는 검사를 추가 확실히 줄은 null이 아니었다. 1012 00:49:18,930 --> 00:49:24,460 당신은 필요하지 않았지만 그 전체의 신용에 대한. 1013 00:49:24,460 --> 00:49:27,690 그래서 우리는 먼저 확인하고 줄의 문자열 길이. 1014 00:49:27,690 --> 00:49:31,650 그러므로, 12보다 큰 경우에 실제로 복사하지 않습니다. 1015 00:49:31,650 --> 00:49:33,010 그래서 그것을 해결하는 방법 중 하나입니다. 1016 00:49:33,010 --> 00:49:36,750 >> 그것을 해결하는 또 다른 방법은 대신 C를 갖는 길이 만 12 수, 그것은이 1017 00:49:36,750 --> 00:49:39,310 길이 나 strlen (바)의 수. 1018 00:49:39,310 --> 00:49:43,370 그것을 해결하는 또 다른 방법은 실제로 그냥 돌아갑니다. 1019 00:49:43,370 --> 00:49:46,690 그래서 그냥 모두 없애 ​​먹은 경우 이, 당신은 모두 삭제 한 경우 1020 00:49:46,690 --> 00:49:51,830 코드 라인, 당신은 얻었을 테고 전체 신용이 기능 이후 1021 00:49:51,830 --> 00:49:54,150 실제로는 아무것도 달성하지 않습니다. 1022 00:49:54,150 --> 00:49:57,650 이 커맨드 라인을 복사있어 일부 배열에 인수 1023 00:49:57,650 --> 00:49:59,960 로컬 스택 프레임. 1024 00:49:59,960 --> 00:50:01,310 그리고 그 일이 반환됩니다. 1025 00:50:01,310 --> 00:50:04,020 그리고 무엇이든 그것을 달성은 사라지고. 1026 00:50:04,020 --> 00:50:09,740 그래서 수익은 충분했다 전체 신용을 얻는 방법입니다. 1027 00:50:09,740 --> 00:50:13,425 >> 데이비드 J. 마란 : 그렇진 정신 질문하지만 당 허용 1028 00:50:13,425 --> 00:50:15,580 그럼에도 불구하고 사양. 1029 00:50:15,580 --> 00:50:18,260 >> ROB 보덴 : 그 중 하나에 대한 질문? 1030 00:50:18,260 --> 00:50:22,270 한 가지는 당신 적어도 코드를 컴파일이 필요. 1031 00:50:22,270 --> 00:50:24,810 기술적으로는되지 않도록하더라도 취약한 코드가없는 경우 1032 00:50:24,810 --> 00:50:29,130 컴파일, 우리는 동의하지 않았다. 1033 00:50:29,130 --> 00:50:31,350 한 질문? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> 데이비드 J. 마란 : 당신이 원하는 마십시오 이 제목을 말을? 1036 00:50:34,580 --> 00:50:37,230 >> ROB 보덴 : 호 1037 00:50:37,230 --> 00:50:40,470 >> 데이비드 J. 마란 : 그래서이 하나,이 좋은 소식이나 나쁜 소식 중 하나였다. 1038 00:50:40,470 --> 00:50:43,870 이것은 말 그대로 같은 문제입니다 첫 번째 퀴즈로. 1039 00:50:43,870 --> 00:50:46,140 그리고 그것은 거의 동일합니다 PSET1 같은 문제. 1040 00:50:46,140 --> 00:50:49,980 그러나 의도적으로 단순화 된 간단한 피라미드, 할 수있는 한 1041 00:50:49,980 --> 00:50:52,330 조금으로 해결 단순 반복. 1042 00:50:52,330 --> 00:50:55,680 정말, 우리는 무엇에지고 있었다 여기에, 너무 많은 로직이 아니었다 1043 00:50:55,680 --> 00:50:58,100 아마이 시점에서, 당신이있어 때문에 당신이 예전보다 훨씬 더 편안하게 1044 00:50:58,100 --> 00:51:01,850 루프 또는 왜 루프와 1 주일에, 하지만 정말 떨어져 애타게 1045 00:51:01,850 --> 00:51:04,790 당신은에 조금 익숙해 PHP는 단지 것에 대해 아니라고 개념 1046 00:51:04,790 --> 00:51:05,290 프로그래밍. 1047 00:51:05,290 --> 00:51:07,820 실제로 언어로서 사용될 수있다 명령 줄 프로그램을 작성할 수 있습니다. 1048 00:51:07,820 --> 00:51:10,060 >> 그리고 실제로, 그것은 우리가하려고했던거야 당신의주의에 그립니다. 1049 00:51:10,060 --> 00:51:12,060 이 명령 줄 PHP 프로그램입니다. 1050 00:51:12,060 --> 00:51:16,690 그래서 여기에 C 코드, 동안 올바른 C에서, PHP에 해결되지. 1051 00:51:16,690 --> 00:51:17,940 그러나 코드는 실제로 동일합니다. 1052 00:51:17,940 --> 00:51:21,720 당신은 퀴즈에 대한 솔루션을 비교하는 경우 퀴즈 1에 0, 당신은 그것을 찾을 수 있습니다 1053 00:51:21,720 --> 00:51:25,630 그것을 제외하고, 거의 동일의 정보 일부 달러 기호 및 용 1054 00:51:25,630 --> 00:51:27,250 데이터 유형의 부재. 1055 00:51:27,250 --> 00:51:31,720 특히, 우리가 여기에서 살펴 경우, 당신이, 우리는 반복하는 것을 볼 수 있습니다 1056 00:51:31,720 --> 00:51:33,730 경우, 1 ~ 7까지. 1057 00:51:33,730 --> 00:51:34,910 >> 우리는 0 인덱스를 할 수 있었다. 1058 00:51:34,910 --> 00:51:37,320 하지만 가끔은, 난 그냥 생각 것들에 대해 생각하는 정신적으로 쉽게 1059 00:51:37,320 --> 00:51:38,200 1-7. 1060 00:51:38,200 --> 00:51:40,300 당신이 하나의 블록을 원하는 경우에, 두 블록, 다음 세 가지, 다음 1061 00:51:40,300 --> 00:51:41,770 점, 점은, 일곱 점. 1062 00:51:41,770 --> 00:51:45,960 우리는 1 J 초기화되고있다 그 때 나는 최대에 계산. 1063 00:51:45,960 --> 00:51:48,150 그리고 여기에 모든 것이있다 그렇지 않으면 동일합니다. 1064 00:51:48,150 --> 00:51:49,790 그러나 메모의 가치는 몇 가지. 1065 00:51:49,790 --> 00:51:53,230 우리는 당신이 두 줄이 첫 번째 줄 goofily 오두막으로 명명 한, 1066 00:51:53,230 --> 00:51:54,560 날카로운 강타하십시오. 1067 00:51:54,560 --> 00:51:58,770 그리고 그것은 단지 경로를 지정, 프로그램 할 수있는 폴더 1068 00:51:58,770 --> 00:52:02,160 당신이 사용하고 싶은 것을 발견 이 파일을 해석합니다. 1069 00:52:02,160 --> 00:52:04,710 >> 그리고 그 후, 행, 과정은 PHP 모드로 전환을 의미한다. 1070 00:52:04,710 --> 00:52:07,740 그리고 맨 아래의 라인 종료 PHP 모드를 의미한다. 1071 00:52:07,740 --> 00:52:09,740 그리고 이것은으로, 일반적으로, 작동 언어를 해석했다. 1072 00:52:09,740 --> 00:52:14,370 당신이 쓰면 좀 짜증나 foo.php라는 파일에있는 프로그램입니다. 1073 00:52:14,370 --> 00:52:17,320 그리고 사용자는이 단지 이 프로그램을 실행하려면, OK, 기억 I 1074 00:52:17,320 --> 00:52:22,320 입력해야 "PHP 공간 foo.php을." 종류 만약 아무것도 성가신. 1075 00:52:22,320 --> 00:52:25,270 그리고 그것은 또한 밝혀 그 프로그램 모든없는 PHP에서 작성 1076 00:52:25,270 --> 00:52:27,060 즉, 사용자를위한 조명. 1077 00:52:27,060 --> 00:52:30,100 >> 그래서 당신은 완전히. PHP를 제거 할 수 있습니다 강의에서 기억합니다. 1078 00:52:30,100 --> 00:52:35,690 그리고 당신은 실제로. / foo는 작업을 수행 할 수있는 경우 당신은 그것을 만들기로 chmodded했습니다 1079 00:52:35,690 --> 00:52:36,500 실행. 1080 00:52:36,500 --> 00:52:39,630 그래서 chmod를 + X foo는 그렇게 할 것입니다. 1081 00:52:39,630 --> 00:52:41,460 그리고 당신은 또한 오두막을 여기에 추가하는 경우. 1082 00:52:41,460 --> 00:52:45,320 하지만 실제로는 문제가에지고 있었다 이런 식으로 뭔가를 인쇄. 1083 00:52:45,320 --> 00:52:51,100 아니 HTML, 확실히 더 C-코드, 그냥 PHP. 1084 00:52:51,100 --> 00:52:54,100 그래서 마일로 다음 문제 25에 반환. 1085 00:52:54,100 --> 00:52:58,050 그리고 25 년, 당신은 다음에게 주어진 했다 골격 코드, 1086 00:52:58,050 --> 00:52:59,730 아주 간단한 웹 페이지. 1087 00:52:59,730 --> 00:53:04,230 그리고 수분이 많은 부분 HTML 방향은 아래로했다 여기에, 우리는 몸의 내부 어디 1088 00:53:04,230 --> 00:53:09,160 입력의 고유 한 ID를 갖는 형태 이는 내부에 두 개의 입력, 하나 1089 00:53:09,160 --> 00:53:11,950 이름, 하나의 아이디어와 함께 버튼의 아이디어와 함께. 1090 00:53:11,950 --> 00:53:14,240 >> 첫 번째는, 텍스트를 입력했다 형의 두 번째 제출합니다. 1091 00:53:14,240 --> 00:53:16,930 그래서 우리는, 실제로 더 준 당신이 너무, 필요 이상으로 재료 1092 00:53:16,930 --> 00:53:19,230 너희들있는 옵션을 가지고 이 문제를 해결하기 위해. 1093 00:53:19,230 --> 00:53:21,130 당신은 엄격하게 필요하지 않습니다 이러한 모든 ID. 1094 00:53:21,130 --> 00:53:23,580 그러나 당신이 해결 할 수 있습니다 그것은 여러 가지 방법으로. 1095 00:53:23,580 --> 00:53:27,050 최대 상단에, 그 통지 목적은 트리거였다 1096 00:53:27,050 --> 00:53:27,960 이 같은 창 - 1097 00:53:27,960 --> 00:53:28,780 안녕하세요, 밀로! - 1098 00:53:28,780 --> 00:53:31,270 사용하는 브라우저에 뜹니다 경우, 초간단 1099 00:53:31,270 --> 00:53:33,190 추하지, 경고 기능. 1100 00:53:33,190 --> 00:53:37,480 그리고, 궁극적으로,이 아래로 비등 개념적으로 어떻게 든 수신하는 1101 00:53:37,480 --> 00:53:41,290 양식 클라이언트 측의 제출 어떻게 든하지 서버 쪽, 1102 00:53:41,290 --> 00:53:45,640 하여 해당 제출에 응답 사용자가 입력 한 값을 잡는 1103 00:53:45,640 --> 00:53:50,120 이름 필드에 입력 한 다음 경고의 몸 표시. 1104 00:53:50,120 --> 00:53:53,460 >> 그래서 당신이 할 수있는 한 가지 방법은 첨부 조금 보이는 jQuery를, 1105 00:53:53,460 --> 00:53:56,880 처음에는 문법적으로 곤혹. 1106 00:53:56,880 --> 00:54:00,760 당신은 순수 DOM 코드와 함께이 작업을 수행 할 수 있습니다 - ID에 의해 document.getelement. 1107 00:54:00,760 --> 00:54:02,530 그러나의이 버전에 대해 살펴 보겠습니다. 1108 00:54:02,530 --> 00:54:05,110 나는 중요한 몇 가지있다 줄 첫 번째. 1109 00:54:05,110 --> 00:54:09,460 그래서 하나, 우리는 어떤이 줄이 당신이 본되는 것과 동일 1110 00:54:09,460 --> 00:54:13,830 나는이 생각에, form2.html 주 9 클래스. 1111 00:54:13,830 --> 00:54:16,960 그리고 이것은 단지 실행 말하는 다음 코드를 할 때 1112 00:54:16,960 --> 00:54:18,430 문서가 준비가되어 있습니다. 1113 00:54:18,430 --> 00:54:21,770 이것은 중요한 것 때문 만 HTML 페이지는 위에서 읽기 1114 00:54:21,770 --> 00:54:23,280 왼쪽에서 오른쪽 하단. 1115 00:54:23,280 --> 00:54:27,910 >> 그러므로, 당신이 할하려고하는 경우 일부 DOM에 여기까지 코드에 뭔가 1116 00:54:27,910 --> 00:54:31,560 요소, 일부 HTML 태그는, 그 아래의 여기, 당신은 너무 빨리 그 일을하고, 1117 00:54:31,560 --> 00:54:34,220 이조차 가지고 있기 때문에 메모리로 읽어되었습니다. 1118 00:54:34,220 --> 00:54:37,740 그래서이 document.ready 말하여 라인은, 우리가 말을하는지, 1119 00:54:37,740 --> 00:54:39,040 여기에 몇 가지 코드, 브라우저입니다. 1120 00:54:39,040 --> 00:54:42,440 그러나 전체 때까지 실행되지 않습니다 문서 준비, 즉 DOM입니다 1121 00:54:42,440 --> 00:54:44,320 나무는 메모리에 존재합니다. 1122 00:54:44,320 --> 00:54:47,110 이쪽은 좀 더 구문의 경우, 간단 1123 00:54:47,110 --> 00:54:51,890 조금 다른, 내 말은, 잡아 그 고유 한 HTML 요소 1124 00:54:51,890 --> 00:54:53,560 식별자를 입력합니다. 1125 00:54:53,560 --> 00:54:56,220 즉, 어떤 해시 태그의 , 고유의 ID를 나타낸다. 1126 00:54:56,220 --> 00:54:58,070 그리고 제가 전화 했어요. 제출합니다. 1127 00:54:58,070 --> 00:55:01,660 >> 그래서. 여기서 제출 함수 그렇지이며 방법으로 알려진, 그건 1128 00:55:01,660 --> 00:55:05,850 왼쪽에있는 개체의 내부 내가 강조하지 않았다가 측면. 1129 00:55:05,850 --> 00:55:08,990 당신은 개체로 입력 생각이 경우 메모리에 - 참으로 그것은이다. 1130 00:55:08,990 --> 00:55:10,440 이 트리에서 노드의 - 1131 00:55:10,440 --> 00:55:16,580 . 수단을 제출할 때이 양식 이 ID가 제출, 실행 1132 00:55:16,580 --> 00:55:17,700 다음 코드. 1133 00:55:17,700 --> 00:55:20,290 난 상관 없어 무엇의 이름 기능은 내가 실행 해요입니다. 1134 00:55:20,290 --> 00:55:23,760 그래서 나는 여기 무엇을, 이전, 사용하고 람다 함수 또는 호출 1135 00:55:23,760 --> 00:55:24,720 익명 함수. 1136 00:55:24,720 --> 00:55:27,640 그것은 모든 지적 아니다 이 이름이없는 흥미로운 다른 것보다, 1137 00:55:27,640 --> 00:55:30,220 만 있다면 괜찮이다 지금까지 한 번 호출하는 것. 1138 00:55:30,220 --> 00:55:34,490 내부가 실제로 처리 양식의 제출. 1139 00:55:34,490 --> 00:55:36,810 먼저 변수를 선언 값이라고. 1140 00:55:36,810 --> 00:55:40,610 그리고 이것의 효과는 무엇인가 여기 부분은 지금 강조? 1141 00:55:40,610 --> 00:55:44,755 그에서 무엇을 하는가 나를 위해 높은 수준? 1142 00:55:44,755 --> 00:55:48,539 >> 청중 : 그것은 값을 가져옵니다 사용자는 아래의 HTML에하지 않았다. 1143 00:55:48,539 --> 00:55:50,920 그런 다음 해당 ID를 얻고, 그것의 값을 찾아 낸다. 1144 00:55:50,920 --> 00:55:51,590 >> 데이비드 J. 마란 : 그렇습니다. 1145 00:55:51,590 --> 00:55:54,300 그것은 누구의 고유 한 노드를 잡고 식별자는 이름입니다. 1146 00:55:54,300 --> 00:55:56,900 또한, 내부 값을 얻고있는 입니다, 아마, 어떤 사용자 1147 00:55:56,900 --> 00:55:58,190 그 사람이나 자신을 입력했습니다. 1148 00:55:58,190 --> 00:56:01,020 그리고, 그것은 저장하는의 변수는 값을했다. 1149 00:56:01,020 --> 00:56:03,720 여담으로, 당신은 또한 가질 수있다 조금 다르게 이런 짓을. 1150 00:56:03,720 --> 00:56:09,250 뭔가를 수행하여 완전히 허용 거짓말 VAR 값 가져 1151 00:56:09,250 --> 00:56:10,500 document.getElementById를. 1152 00:56:10,500 --> 00:56:12,860 1153 00:56:12,860 --> 00:56:15,460 조금의 이유 때문입니다 jQuery를 사용하지 지루한. 1154 00:56:15,460 --> 00:56:16,710 "이름". 값. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 그래서 완전히 허용. 1157 00:56:19,620 --> 00:56:22,770 이 작업을 수행하는 여러 가지 방법. jQuery를 단지 좀 더 간결하고 경향이있다 1158 00:56:22,770 --> 00:56:25,230 확실히 더 인기 프로그래머들. 1159 00:56:25,230 --> 00:56:27,590 >> 지금, 나는 정신의 비트를하고 있어요 때문에 문제의 확인 1160 00:56:27,590 --> 00:56:30,820 문 우리는 명시 적으로 말했다 경우 사용자는 아직 입력하지 않은 자신의 1161 00:56:30,820 --> 00:56:32,580 경고를 표시하지 않는, 이름을 지정합니다. 1162 00:56:32,580 --> 00:56:35,390 하지만 당신은 단지로, 그 확인할 수 있습니다 에 대한 빈 문자열에 대한 검사 1163 00:56:35,390 --> 00:56:37,850 만약 거기에 인용 작자 거기에 실제로 아무 것도 없습니다. 1164 00:56:37,850 --> 00:56:40,880 하지만 견적 작자 같지 않은 경우에, 내가 경고를 호출 할. 1165 00:56:40,880 --> 00:56:45,610 그리고 여기에 흥미로운 부분입니다 우리는 더하기 연산자를 사용하고있는 1166 00:56:45,610 --> 00:56:48,130 자바 스크립트로 무엇을합니까? 1167 00:56:48,130 --> 00:56:48,740 연결합니다. 1168 00:56:48,740 --> 00:56:50,690 그래서 PHPs 도트 연산자처럼. 1169 00:56:50,690 --> 00:56:52,820 같은 생각, 약간 다른 구문. 1170 00:56:52,820 --> 00:56:55,280 그리고 난 그냥 문자열을 만드는거야 그 당신은 스크린 샷에서 본 - 1171 00:56:55,280 --> 00:56:57,750 안녕하세요, 운운. 1172 00:56:57,750 --> 00:56:59,200 >> 그리고 마지막 세부 사항이 있습니다. 1173 00:56:59,200 --> 00:57:04,970 왜 거짓 내부를 돌아 않습니다 이 익명 함수의? 1174 00:57:04,970 --> 00:57:07,420 >> 청중 : 값이 없습니다. 1175 00:57:07,420 --> 00:57:09,380 당신은 형태에 넣어. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 값이없는 경우 그냥 말한다 빈에 해당, 다음 해. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 그 제출에 빈 있었다. 1180 00:57:20,940 --> 00:57:21,170 >> 데이비드 J. 마란 : OK. 1181 00:57:21,170 --> 00:57:21,640 하지만 조심. 1182 00:57:21,640 --> 00:57:22,830 여기에 또 다른 사람은 없습니다. 1183 00:57:22,830 --> 00:57:25,510 그리고 그 반환 거짓이 밖에 조건 경우의. 1184 00:57:25,510 --> 00:57:29,470 그래서이는, false를 돌려 라인을 강조 무슨 일이 있어도 때 실행되지 않습니다 1185 00:57:29,470 --> 00:57:32,310 폼이 제출됩니다. 1186 00:57:32,310 --> 00:57:36,810 어떤이의 거짓 내부를 돌아 않습니다 이 호출로 이벤트 핸들러,, 1187 00:57:36,810 --> 00:57:38,450 문제의 이벤트 제출되고? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> 청중 : 그것 때문에 한 번만 발생합니다. 1190 00:57:44,470 --> 00:57:45,320 >> 데이비드 J. 마란은 : 한 번만 발생합니다. 1191 00:57:45,320 --> 00:57:46,821 꽤. 1192 00:57:46,821 --> 00:57:47,292 그래? 1193 00:57:47,292 --> 00:57:50,589 >> 청중 : 그것은에서 양식을 방지 기본 동작에 제출 1194 00:57:50,589 --> 00:57:52,480 페이지를 다시로드를 만들 것입니다있다. 1195 00:57:52,480 --> 00:57:53,110 >> 데이비드 J. 마란 : 그렇습니다. 1196 00:57:53,110 --> 00:57:56,490 그래서, 그 용어가 여기에 제출 과부하 해요 내가 말하고 있기 때문에, 형태는 1197 00:57:56,490 --> 00:57:57,670 제출된다. 1198 00:57:57,670 --> 00:58:02,240 당신이 제안하지만, 사실은 아니다 진정한 HTTP 방식으로 제출되었습니다. 1199 00:58:02,240 --> 00:58:06,870 당신 때문에 제출을 클릭하면 우리의 가 onsubmit 핸들러, 우리는 차단하고 1200 00:58:06,870 --> 00:58:09,040 해당 양식 제출 말하자면. 1201 00:58:09,040 --> 00:58:11,290 우리는 우리의 일을하고있어 자바 스크립트 코드를. 1202 00:58:11,290 --> 00:58:14,070 하지만 의도적으로 false를 반환 해요 나는 일이 원치 않는 것을 때문에 1203 00:58:14,070 --> 00:58:18,430 분할 초 후 전체 양식입니다 자체 웹 사이트에 제출해야합니다 1204 00:58:18,430 --> 00:58:22,800 변경하여 키 값 쌍을 서버 같은 될 수있는 URL 1205 00:58:22,800 --> 00:58:26,180 Q = 고양이 또는 무엇이든 우리가했던, 예를 들어, 클래스. 1206 00:58:26,180 --> 00:58:29,640 나는 그런 일이 없죠 이에 대한 서버의 청취가 없습니다 1207 00:58:29,640 --> 00:58:30,690 제출을 형성한다. 1208 00:58:30,690 --> 00:58:32,320 그것은 순수 자바 스크립트 코드에서 이루어집니다. 1209 00:58:32,320 --> 00:58:35,760 심지어하지 않았다 이유입니다 동작은 폼에서 속성 때문에 1210 00:58:35,760 --> 00:58:38,870 이 위해하지 않을 지금까지 서버로 이동합니다. 1211 00:58:38,870 --> 00:58:40,780 >> 따라서 제출하는 것. 1212 00:58:40,780 --> 00:58:44,340 그러나 우리는 그 양식을 차단하고 제출 및 기본 예방 1213 00:58:44,340 --> 00:58:47,477 에 실제로 행동, 모든 방법을 서버로 이동합니다. 1214 00:58:47,477 --> 00:58:48,730 >> 청중 : 그래서 그것을 클라이언트 측을 유지. 1215 00:58:48,730 --> 00:58:49,780 >> 데이비드 J. 마란 : 유지 그것은 클라이언트 측. 1216 00:58:49,780 --> 00:58:51,030 정확히 맞아. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 다음은 MySQL의 오이었다. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> ROB 보덴 : OK. 1221 00:59:00,430 --> 00:59:04,990 그래서 첫 번째 질문은 일반적이었다 사람들을위한 거친. 1222 00:59:04,990 --> 00:59:07,270 나중에 사람들이 더 갔다지만. 1223 00:59:07,270 --> 00:59:12,260 그럼 당신은 올바른 데이터를 선택했다 이러한 열 모두 유형. 1224 00:59:12,260 --> 00:59:17,750 그리고이 두 가지가 일부를 가지고 그들에 대한 일이 1225 00:59:17,750 --> 00:59:20,620 선택은 어려워. 1226 00:59:20,620 --> 00:59:24,430 그래서 INT는 유효하지 않습니다 번호를 입력합니다. 1227 00:59:24,430 --> 00:59:29,410 12 자리 계정되는 이유 번호, INT는 충분히 크지 않다 1228 00:59:29,410 --> 00:59:31,070 전체 숫자를 저장합니다. 1229 00:59:31,070 --> 00:59:36,570 그래서 유효한 선택은 큰이었을 것입니다 당신이 알고 일어나는 경우 int는. 1230 00:59:36,570 --> 00:59:42,090 또 다른 선택은 있었다 길이 12의 문자 필드. 1231 00:59:42,090 --> 00:59:44,560 그래서 그 중 하나는 일 것입니다. 1232 00:59:44,560 --> 00:59:46,100 이자는 않을 것입니다. 1233 00:59:46,100 --> 00:59:50,170 >> 이제, 균형, 다시 pset7 생각합니다. 1234 00:59:50,170 --> 00:59:59,540 그래서 우리는 구체적으로 소수를 사용 주 또는 값을 저장 - 1235 00:59:59,540 --> 01:00:00,550 >> 데이비드 J. 마란 : 현금. 1236 01:00:00,550 --> 01:00:01,060 >> ROB 보덴 : 현금. 1237 01:00:01,060 --> 01:00:05,710 우리는 양을 저장하기 위해 소수점을 사용 사용자가 현재이 현금. 1238 01:00:05,710 --> 01:00:10,950 그래서 우리는 그렇게 할 이유는 기억하기 때문에, 수레. 1239 01:00:10,950 --> 01:00:12,480 정밀도 부동 소수점이있다. 1240 01:00:12,480 --> 01:00:18,200 그것은 정확하게 현금을 저장할 수 없습니다 우리와 같은 값은 여기에 원하는. 1241 01:00:18,200 --> 01:00:23,630 그래서 진수는 정확하게 저장할 수 , 할 말, 소수점 이하 두 자리. 1242 01:00:23,630 --> 01:00:27,630 균형, 우리가 원하는 이유 부동 소수점하지합니다. 1243 01:00:27,630 --> 01:00:30,230 >> 데이비드 J. 마란 : 그리고 또한,도하지만 그것은 기타 영리 수도 1244 01:00:30,230 --> 01:00:32,760 생각하는 상황, 어쩌면이 INT의 기회입니다. 1245 01:00:32,760 --> 01:00:34,420 난 그냥 추적합니다 동전에있는 것들. 1246 01:00:34,420 --> 01:00:38,670 우리는 명시 적으로 기본을 보여 주었다 때문에 , 100.00되는 값이 1247 01:00:38,670 --> 01:00:40,380 그냥 INT 될 수 있습니다 의미합니다. 1248 01:00:40,380 --> 01:00:45,310 너무 번호와 다른 미묘한 그것이 의미하지 않은 것이 었습니다 1249 01:00:45,310 --> 01:00:46,180 트릭 질문합니다. 1250 01:00:46,180 --> 01:00:49,860 하지만 기억이 MySQL에서 중간, 같은 C에서, 적어도에 1251 01:00:49,860 --> 01:00:51,440 제품은 32 비트입니다. 1252 01:00:51,440 --> 01:00:53,960 그리고 우리는 당신을 기대하지 않더라도 알고 정확히 얼마나 많은 숫자가 1253 01:00:53,960 --> 01:00:56,910 수단, 기억 않는 가장 큰 수 당신은 잠재적으로 나타낼 수 1254 01:00:56,910 --> 01:01:00,710 32 비트 숫자로 대략 무엇입니까? 1255 01:01:00,710 --> 01:01:02,760 >> 우리는 항상 어떤 수를 말합니까? 1256 01:01:02,760 --> 01:01:04,530 2 어떤 약이다, (32)에? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 당신은 정확하게 알 필요가 없습니다. 1259 01:01:08,780 --> 01:01:10,580 그러나 약의 생활에 도움이됩니다. 1260 01:01:10,580 --> 01:01:12,200 그것은 약 40 억이다. 1261 01:01:12,200 --> 01:01:14,430 그래서 우리는 몇 번이라고했습니다. 1262 01:01:14,430 --> 01:01:16,360 나도 알아, 그 몇 번 말했다. 1263 01:01:16,360 --> 01:01:17,670 그리고 약 40 억이다. 1264 01:01:17,670 --> 01:01:19,710 그리고 좋은 규칙의 엄지 손가락 알고 있습니다. 1265 01:01:19,710 --> 01:01:21,880 당신은 8 비트, 256이있는 경우 마법의 숫자입니다. 1266 01:01:21,880 --> 01:01:24,160 당신은 32 비트, 4를 사용한다면, 억 정도일. 1267 01:01:24,160 --> 01:01:27,140 그래서 그냥 아래로 40 억 작성하는 경우, 당신은보다 적은 숫자의 것을 볼 수 있습니다 1268 01:01:27,140 --> 01:01:30,970 그 명확하지의 의미 (12) 캡처 할 수있을만큼 표현 1269 01:01:30,970 --> 01:01:34,220 12 자리 카드 번호. 1270 01:01:34,220 --> 01:01:34,940 >> ROB 보덴 : OK. 1271 01:01:34,940 --> 01:01:38,520 그래서 다른 사람이 더 갔다. 1272 01:01:38,520 --> 01:01:40,900 그래서 가정이 은행 $ 20 매월 부과 1273 01:01:40,900 --> 01:01:42,400 모든 계정에 대한 유지 보수 비용. 1274 01:01:42,400 --> 01:01:45,506 어떤 SQL 쿼리 할 수​​ 있습니다 은행 경우에도, 모든 조사에서 20 달러 공제 1275 01:01:45,506 --> 01:01:47,520 그것은 부정적인 균형 결과? 1276 01:01:47,520 --> 01:01:50,380 그러니까 기본적으로, 네 가지가 있습니다 쿼리의 주요 유형 - 1277 01:01:50,380 --> 01:01:52,840 삽입, 선택, 업데이트 및 삭제할 수 있습니다. 1278 01:01:52,840 --> 01:01:56,080 그래서 우리는 우리가있어 어떻게 생각하십니까 여기에 사용하려고? 1279 01:01:56,080 --> 01:01:57,000 업데이트합니다. 1280 01:01:57,000 --> 01:01:58,260 >> 그럼 살펴 보자. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 그래서 여기에 우리가 업데이트하고 있습니다. 1283 01:02:05,870 --> 01:02:09,900 어떤 테이블 우리는 계정을 업데이트하는? 1284 01:02:09,900 --> 01:02:11,670 그래서 계정을 업데이트. 1285 01:02:11,670 --> 01:02:15,390 다음 구문을 말하는 계정에 우리가 업데이 트하고 있습니다? 1286 01:02:15,390 --> 01:02:19,520 음, 우리는 동일한 밸런스를 설정하고 균형 마이너스 20의 현재 값. 1287 01:02:19,520 --> 01:02:22,860 그래서이 모든 행을 업데이트합니다 계정의 감산 1288 01:02:22,860 --> 01:02:26,250 균형에서 20달러. 1289 01:02:26,250 --> 01:02:29,260 >> 데이비드 J. 마란 : 여기에 일반적인 실수, 우리는 때때로 용서에도 불구하고, 1290 01:02:29,260 --> 01:02:32,990 실제로 여기에 PHP 코드를 가지고 있었다 쿼리 함수를 호출하거나 퍼팅 1291 01:02:32,990 --> 01:02:35,460 모든 따옴표 그 거기에 필요하지 않았다. 1292 01:02:35,460 --> 01:02:39,780 >> ROB 보덴 : MySQL이 있음을 기억하십시오 PHP는 별도의 언어. 1293 01:02:39,780 --> 01:02:42,410 우리는 PHP에서 MySQL의를 작성하는 일이. 1294 01:02:42,410 --> 01:02:46,180 그리고 PHP는 다음을 보내는 MySQL 서버에 이상. 1295 01:02:46,180 --> 01:02:51,120 에 순서대로하지만 당신은 PHP를 필요로하지 않는다 MySQL 서버와 통신 할 수 있습니다. 1296 01:02:51,120 --> 01:02:51,730 >> 데이비드 J. 마란 : 그렇습니다. 1297 01:02:51,730 --> 01:02:54,240 달러 기호와 그래서 변수 없음 이 컨텍스트에 있어야합니다. 1298 01:02:54,240 --> 01:02:59,550 그것은 단지 수학의 모든 작업을 수행 할 수 있습니다 데이터베이스 자체 내에서. 1299 01:02:59,550 --> 01:03:00,080 >> ROB 보덴 : OK. 1300 01:03:00,080 --> 01:03:01,300 그래서 다음 중 하나. 1301 01:03:01,300 --> 01:03:02,731 이 다음 중 하나인가? 1302 01:03:02,731 --> 01:03:03,210 그래. 1303 01:03:03,210 --> 01:03:06,570 어떤 SQL 쿼리 할 수​​ 있습니다 은행에 따라서 그것의 계좌 번호를 검색 1304 01:03:06,570 --> 01:03:09,300 부유 한 고객과 그 1,000 이상 잔액? 1305 01:03:09,300 --> 01:03:13,280 따라서 네 가지 유형 중 어느 우리는 여기에서 원하는거야? 1306 01:03:13,280 --> 01:03:14,430 선택합니다. 1307 01:03:14,430 --> 01:03:16,650 그래서 우리는 선택합니다. 1308 01:03:16,650 --> 01:03:17,610 우리는 무엇을 선택 하시겠습니까? 1309 01:03:17,610 --> 01:03:19,380 우리가 선택하는 어떤 열 하시겠습니까? 1310 01:03:19,380 --> 01:03:20,970 우리는 구체적으로 할 것 번호를 선택합니다. 1311 01:03:20,970 --> 01:03:23,910 하지만 스타, 우리 말한다면 또한 받아 들였다. 1312 01:03:23,910 --> 01:03:25,820 >> 그래서 테이블에서 번호를 선택? 1313 01:03:25,820 --> 01:03:26,640 계정. 1314 01:03:26,640 --> 01:03:28,370 그리고 우리는 조건 싶어? 1315 01:03:28,370 --> 01:03:30,140 경우 1,000보다 더 큰 균형. 1316 01:03:30,140 --> 01:03:31,720 우리는 또한 더 허용 같거나. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 마지막 하나. 1319 01:03:36,190 --> 01:03:42,940 어떤 SQL 쿼리 할 수​​ 있습니다 은행 가까운, 즉, 모든 계정을 삭제하는 1320 01:03:42,940 --> 01:03:44,480 0 원 밸런스가? 1321 01:03:44,480 --> 01:03:47,620 그래서 네하는 우리는 사용하고 싶은 것? 1322 01:03:47,620 --> 01:03:48,320 삭제합니다. 1323 01:03:48,320 --> 01:03:50,180 그래서 구문? 1324 01:03:50,180 --> 01:03:51,890 어떤 테이블에서 삭제? 1325 01:03:51,890 --> 01:03:53,550 계정. 1326 01:03:53,550 --> 01:03:55,790 그리고 상태에있는 우리는 삭제할 - 1327 01:03:55,790 --> 01:03:57,280 잔액이 0 인 곳. 1328 01:03:57,280 --> 01:04:03,050 그래서 계정에서 모든 행을 삭제 잔액이 제로입니다. 1329 01:04:03,050 --> 01:04:04,300 이들의 질문에? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 큐를 원하십니까? 1332 01:04:10,260 --> 01:04:11,200 >> 데이비드 J. 마란 : 큐 가이드. 1333 01:04:11,200 --> 01:04:17,110 그래서이 하나, 우리는 당신에게 약간을 준 우리가 탐구 익숙한 구조 1334 01:04:17,110 --> 01:04:20,450 구조체와 함께 클래스 비트, 데이터이었다 1335 01:04:20,450 --> 01:04:21,910 정신 관련 구조. 1336 01:04:21,910 --> 01:04:24,670 큐와 생각의 차이는 우리는 어떻게 든 기억한다는 것을 누구 1337 01:04:24,670 --> 01:04:27,900 대형에서, 대기열의 앞쪽에 있었다 우리는 더 만들 수있는 부분 있도록 1338 01:04:27,900 --> 01:04:30,530 메모리의 효율적인 사용, 적어도 우리는 배열을 사용한 경우. 1339 01:04:30,530 --> 01:04:35,460 >> 때문에 리콜, 우리는 배열이있는 경우, 경우, 예를 들어,이 앞면이다 1340 01:04:35,460 --> 01:04:38,470 큐, 여기 큐에 들어갈 경우, 다음 사람이 줄을 가져옵니다 1341 01:04:38,470 --> 01:04:42,710 내 뒤에 내 뒤에 나,,, 뒤에 한 사람이 선에서 단계, 당신 1342 01:04:42,710 --> 01:04:45,930 수 있었다, 우리는 우리의 인간을 본대로 클래스의 자원 봉사자, 모두가 1343 01:04:45,930 --> 01:04:47,100 이러한 방식으로 시프트. 1344 01:04:47,100 --> 01:04:50,880 그러나 일반적으로, 모든 사람이 수행 한 뭔가 시간을 최대한 활용하지 1345 01:04:50,880 --> 01:04:54,600 프로그램에 있기 때문에 그것은 의미 당신의 알고리즘은 무엇에서 실행되는 1346 01:04:54,600 --> 01:04:56,520 점근 실행 시간? 1347 01:04:56,520 --> 01:04:57,420 그것은 선형입니다. 1348 01:04:57,420 --> 01:04:59,600 >> 그 종류의 바보가 된 기분. 1349 01:04:59,600 --> 01:05:02,890 라인에있는 다음 사람이 옆에 있다면 에 가기로되어있어 사람 1350 01:05:02,890 --> 01:05:04,660 저장, 그들은 모두이 없습니다 함께 이동합니다. 1351 01:05:04,660 --> 01:05:08,200 그냥 그 사람이있는 지라 할 수 있도록 시간은, 예를 들어 오면. 1352 01:05:08,200 --> 01:05:09,870 그래서 우리는 거기에 약간의 시간을 절약 할 수 있습니다. 1353 01:05:09,870 --> 01:05:14,840 그리고 이렇게하는 그 생각, 그 수단 그 큐의 헤드 또는 1354 01:05:14,840 --> 01:05:18,060 큐의 전면 예정 점차적으로 더 깊고 더 깊은 이동 1355 01:05:18,060 --> 01:05:23,340 배열에 결국 수도 우리를 사용하는 경우 실제로 주위에 포장 1356 01:05:23,340 --> 01:05:25,790 사람을 저장하는 배열 이 큐에. 1357 01:05:25,790 --> 01:05:28,390 그래서 당신은 거의 생각할 수 원형 데이터로 배열 1358 01:05:28,390 --> 01:05:29,880 그런 의미에서 구조. 1359 01:05:29,880 --> 01:05:33,970 >> 그래서 어떻게 든 추적 할 필요가 그것의 크기 나 정말 끝 1360 01:05:33,970 --> 01:05:36,250 그리고 다음의 시작이다. 1361 01:05:36,250 --> 01:05:39,490 그래서 우리는 당신이 선언 할 것을 제안 하나의 큐, 호출 1362 01:05:39,490 --> 01:05:41,330 그것은 q를 하나의 편지. 1363 01:05:41,330 --> 01:05:44,570 그 다음 우리는 전면이 될 것을 제안 제로 것을 초기화 크기 1364 01:05:44,570 --> 01:05:45,470 0으로 초기화. 1365 01:05:45,470 --> 01:05:47,770 >> 그래서 지금, 아무것도 없어 해당 큐의 내부. 1366 01:05:47,770 --> 01:05:50,910 그리고 우리는 완료하도록 요청 아래의 대기열의 구현 1367 01:05:50,910 --> 01:05:55,250 함수에 N을 추가하는 방식 다음 질문의 끝과는 true를 반환합니다. 1368 01:05:55,250 --> 01:05:58,690 그러나 Q 전체 부정적이면, 함수 대신 false를 반환해야합니다. 1369 01:05:58,690 --> 01:06:01,060 그리고 우리는 당신에게 몇 가지를 준 가정. 1370 01:06:01,060 --> 01:06:04,320 하지만 그들은 정말 기능적 아니에요 관련, 그냥 부울이 존재 1371 01:06:04,320 --> 01:06:06,690 기술적으로, 부울하지 않습니다, 때문에 당신이 포함하지 않는 C에 존재 1372 01:06:06,690 --> 01:06:07,310 특정 헤더 파일. 1373 01:06:07,310 --> 01:06:09,350 그래서 그냥 확인이 확인되었다 어떤이는 속임수 없습니다 1374 01:06:09,350 --> 01:06:10,940 일의 질문 종류. 1375 01:06:10,940 --> 01:06:16,280 >> 그래서 대기열, 우리는 샘플에서 제안 다음과 같은 솔루션을 구현합니다. 1376 01:06:16,280 --> 01:06:20,420 하나, 우리는 먼저 용이성을 확인, 낮은 교수형 과일. 1377 01:06:20,420 --> 01:06:23,820 큐는 전체 또는 숫자 인 경우 그 삽입하려는 것은 작 1378 01:06:23,820 --> 01:06:26,380 우리가 말했다 제로보다 문제의 사양해야 1379 01:06:26,380 --> 01:06:30,320 우리는 원하기 때문에, 허용되지 음수가 아닌 값을, 당신은해야 1380 01:06:30,320 --> 01:06:31,640 다만 즉시 false를 반환합니다. 1381 01:06:31,640 --> 01:06:33,820 그래서 몇 가지 상대적으로 쉽게 오류 검사. 1382 01:06:33,820 --> 01:06:38,720 당신은 그 실제를 추가 할하지만 경우 수, 당신은 약간의 작업을 수행했다 1383 01:06:38,720 --> 01:06:39,440 여기에 생각. 1384 01:06:39,440 --> 01:06:41,330 좀 짜증나 곳이 있습니다 정신적으로, 당신이해야하기 때문에 1385 01:06:41,330 --> 01:06:43,000 랩 어라운드를 처리하는 방법을 알아낼. 1386 01:06:43,000 --> 01:06:46,870 >> 그러나 아이디어의 세균이 여기에 해당이의의 우리의 관심은 랩 어라운드입니다 1387 01:06:46,870 --> 01:06:51,480 자주 모듈러 산술는 의미와 모드 연산자 %의 측면, 1388 01:06:51,480 --> 01:06:55,140 당신은 더 큰 값에서 갈 수있는 곳 다시 0으로 다음 하나, 둘, 1389 01:06:55,140 --> 01:06:58,650 세 후 다시 주변에 제로로, 하나, 둘 등 세 및 1390 01:06:58,650 --> 01:06:59,380 또 다시. 1391 01:06:59,380 --> 01:07:02,880 그래서 우리는이 일을 제안한 방법은 우리는에 인덱싱 할 않는 것이 1392 01:07:02,880 --> 01:07:05,850 숫자 위치라는 배열 우리 정수는 거짓말. 1393 01:07:05,850 --> 01:07:10,740 그러나 거기에 도착하기 위해, 우리는 먼저 수행 할 큐의 크기는하지만, 무엇이든 1394 01:07:10,740 --> 01:07:14,080 그 다음에 추가 어떤 목록의 전면입니다. 1395 01:07:14,080 --> 01:07:17,880 그리고 그 효과는 우리를 넣어하는 것입니다 오른쪽 큐의 위치와 1396 01:07:17,880 --> 01:07:20,970 생각하지 그 라인에있는 첫 번째 사람 시작 부분에, 어떤 그 또는 1397 01:07:20,970 --> 01:07:24,130 그녀는 절대적이 될 수 있다면 우리 또한 모두를 이동했다. 1398 01:07:24,130 --> 01:07:26,710 그러나 우리는 단지 작품을 만드는 우리 자신을 위해 우리가 쓴다면 1399 01:07:26,710 --> 01:07:27,800 특정 경로입니다. 1400 01:07:27,800 --> 01:07:29,330 >> 그래서 우리는 비교적 간단하게 할 수 있습니다. 1401 01:07:29,330 --> 01:07:32,180 우리는 기억해야합니까 우리 단지 큐에 int를 추가했다. 1402 01:07:32,180 --> 01:07:35,850 그리고 우리는 단지 true를 반환. 1403 01:07:35,850 --> 01:07:38,560 한편, 디큐, 우리는 요청 당신은 다음을 수행합니다. 1404 01:07:38,560 --> 01:07:42,260 이러한 방식을 구현하는 것이 그것을 대기열에서 제외하는, 즉, 삭제 해 돌려줍니다 1405 01:07:42,260 --> 01:07:44,190 큐의 앞에 INT. 1406 01:07:44,190 --> 01:07:46,410 INT를 제거하기 위해서는 충분 그것을 잊지. 1407 01:07:46,410 --> 01:07:47,650 당신은 비트를 재정의 할 필요가 없습니다. 1408 01:07:47,650 --> 01:07:48,820 그래서 사실은 아직 거기. 1409 01:07:48,820 --> 01:07:51,930 그냥 하드 드라이브에있는 데이터와 같은, 우리는 단지 사실을 무시하고 1410 01:07:51,930 --> 01:07:52,970 그것은 지금 거기 있다고. 1411 01:07:52,970 --> 01:07:55,520 Q가 비어있는 경우에, 우리는해야 대신 음의 1을 반환합니다. 1412 01:07:55,520 --> 01:07:56,750 그래서 이것은 임의 느낀다. 1413 01:07:56,750 --> 01:08:01,640 왜 마이너스 1을 반환 대신 거짓의? 1414 01:08:01,640 --> 01:08:02,620 그래. 1415 01:08:02,620 --> 01:08:05,070 >> 청중 : Q가 저장됩니다 양의 값. 1416 01:08:05,070 --> 01:08:10,950 당신은 양의 값을 저장하기 때문에 질문에, 음의 오류입니다. 1417 01:08:10,950 --> 01:08:11,510 >> 데이비드 J. 마란 : OK, 사​​실. 1418 01:08:11,510 --> 01:08:14,850 우리는 긍정적 인 저장하고 그래서 때문에 값 또는 0, 그것은 미세의 1419 01:08:14,850 --> 01:08:18,050 감시와 같은 음의 값을 반환 값, 특수 기호. 1420 01:08:18,050 --> 01:08:21,630 하지만, 거기에 역사를 다시 작성하고 때문에 우리는하고있는 이유 1421 01:08:21,630 --> 01:08:25,890 음이 아닌 값을 반환 우리가 원하기 때문입니다 1422 01:08:25,890 --> 01:08:27,670 센티넬 가치가있다. 1423 01:08:27,670 --> 01:08:32,617 그래서보다 구체적으로, 왜 그냥 오류의 경우에 false를 반환? 1424 01:08:32,617 --> 01:08:33,099 그래. 1425 01:08:33,099 --> 01:08:35,510 >> 청중 : 당신은 실패했다 정수를 반환합니다. 1426 01:08:35,510 --> 01:08:36,630 >> 데이비드 J. 마란 : 그렇습니다. 1427 01:08:36,630 --> 01:08:38,569 C가 얻는 곳이 있습니다 아름다운 구속. 1428 01:08:38,569 --> 01:08:40,590 당신은 당신이려고하고 말을하는 경우 int를 반환합니다, 당신이있어 1429 01:08:40,590 --> 01:08:41,279 int를 반환합니다. 1430 01:08:41,279 --> 01:08:43,689 당신은 공상을하고 돌아 시작할 수 없습니다 부울 또는 float 또는 1431 01:08:43,689 --> 01:08:45,040 문자열이나 뭐 그런. 1432 01:08:45,040 --> 01:08:49,370 이제, 그 사이에, 자바 스크립트, PHP와 다른 언어를 할 수있는, 사실, 1433 01:08:49,370 --> 01:08:51,310 당신은 다른 반환 한 값의 종류. 1434 01:08:51,310 --> 01:08:54,819 그리고 실제로 도움이 될 수있는 당신은 양의 정수, 0을 반환 할 수 있습니다, 1435 01:08:54,819 --> 01:08:59,439 음의 정수, 또는 허위 또는 널 (null) 심지어 오류를 의미합니다. 1436 01:08:59,439 --> 01:09:01,890 그러나 우리는 필요가 없습니다 C.의 다양성 1437 01:09:01,890 --> 01:09:04,569 >> 그래서 디큐와 함께, 우리 이다 할 것을 제안 - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB 보덴 : 당신은 false를 반환 할 수 있습니다. 1440 01:09:09,830 --> 01:09:13,189 그것은 해시 그냥 거짓이야 제로 거짓을 정의합니다. 1441 01:09:13,189 --> 01:09:16,000 그래서 당신은 false를 반환하는 경우, 당신은 값을 반환한다입니다. 1442 01:09:16,000 --> 01:09:25,470 제로는, 우리의 큐에 유효한 것입니다 음의 1은없는 반면, 경우 1443 01:09:25,470 --> 01:09:27,000 거짓은 음수 1로 일어났다. 1444 01:09:27,000 --> 01:09:29,972 그러나 당신은해야하지 알고해야합니다. 1445 01:09:29,972 --> 01:09:32,399 >> 데이비드 J. 마란 : 때문입니다 이유는 말하지 않았다. 1446 01:09:32,399 --> 01:09:36,450 >> ROB 보덴 :하지만 그것은 사실이 아니었다 당신은 false를 반환 할 수 없습니다. 1447 01:09:36,450 --> 01:09:37,700 >> 데이비드 J. 마란 : 물론. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 그래서 디큐, 우리가 받아 들일 수있는 알 인수 무효. 1450 01:09:44,240 --> 01:09:45,479 우리가하지 않은 때문에 그건 안으로 아무것도 전달 1451 01:09:45,479 --> 01:09:48,359 우리는 단지 요소를 제거 할 큐의 앞에. 1452 01:09:48,359 --> 01:09:49,819 그렇다면 우리는이 일에 대해 갈 수 있을까요? 1453 01:09:49,819 --> 01:09:51,290 음, 첫 번째,이 해 보자 빠른 상태 검사. 1454 01:09:51,290 --> 01:09:53,350 큐 크기가 0이면, 거기 수행해야 할 작업이 없습니다. 1455 01:09:53,350 --> 01:09:54,210 1 음을 반환합니다. 1456 01:09:54,210 --> 01:09:54,800 완료. 1457 01:09:54,800 --> 01:09:56,340 그래서 내 프로그램의 몇 줄입니다. 1458 01:09:56,340 --> 01:09:58,180 그래서 네 개의 선이 남아있다. 1459 01:09:58,180 --> 01:10:01,310 >> 그래서 나는 여기가 감소하기로 결정 크기. 1460 01:10:01,310 --> 01:10:04,620 효과적으로 사이즈를 감소시키는 내가 잊고 있다는 것을 의미 1461 01:10:04,620 --> 01:10:06,010 뭔가가 있습니다. 1462 01:10:06,010 --> 01:10:09,910 그러나 나는 또한 업데이트해야 할 곳 숫자의 전면입니다. 1463 01:10:09,910 --> 01:10:11,620 그래서 그렇게, 나는 필요 두 가지 작업을 수행합니다. 1464 01:10:11,620 --> 01:10:16,390 먼저 어떤 번호를 기억해야합니다 대기열의 앞쪽에 있고, 1465 01:10:16,390 --> 01:10:17,860 나는 그 물건을 반환 할 필요가 있기 때문이다. 1466 01:10:17,860 --> 01:10:20,910 그래서 내가 실수로 잊고 싶지 않아 그것에 대해 다음을 덮어 씁니다. 1467 01:10:20,910 --> 01:10:22,840 난 그냥 INT에 기억하겠습니다. 1468 01:10:22,840 --> 01:10:27,310 >> 그리고 지금, 나는 업데이트 할 q.front은 +1을 q.front합니다. 1469 01:10:27,310 --> 01:10:30,070 이의 첫 번째 사람이었다 그렇다면 라인은, 지금은에 1을 더한 수행 할 1470 01:10:30,070 --> 01:10:31,930 라인에있는 다음 사람을 가리 킵니다. 1471 01:10:31,930 --> 01:10:33,420 하지만 난 그 랩 어라운드를 처리 할 수​​있다. 1472 01:10:33,420 --> 01:10:37,270 용량은 해외 일정하면, 그 날 확인 할 수 있도록거야 1473 01:10:37,270 --> 01:10:41,140 나는의 맨 마지막 사람에게 포인트로 라인, 모듈 작업이 나타납니다 1474 01:10:41,140 --> 01:10:43,840 에서 0으로 나를 다시 큐의 앞. 1475 01:10:43,840 --> 01:10:46,050 그리고 여기에 랩 어라운드를 처리합니다. 1476 01:10:46,050 --> 01:10:48,950 그리고 나는 N 리턴로 진행합니다. 1477 01:10:48,950 --> 01:10:51,530 >> 이제, 엄밀하게 말하면, 나는하지 않았다 N을 선언해야한다. 1478 01:10:51,530 --> 01:10:53,880 나는 그것을 잡아 보관하지 않았다 임시 값이므로 1479 01:10:53,880 --> 01:10:54,740 아직. 1480 01:10:54,740 --> 01:10:57,490 그래서 난 그냥 오른쪽 연산을 수행 할 수 전 머리가 돌아갑니다 1481 01:10:57,490 --> 01:10:58,450 큐의. 1482 01:10:58,450 --> 01:11:01,850 하지만 난 그냥이 더 명확하다고 생각 실제로 INT를 잡아, 넣어 1483 01:11:01,850 --> 01:11:04,320 N에서 다음 그 반환 명확성뿐만 1484 01:11:04,320 --> 01:11:05,735 꼭 필요한 것은. 1485 01:11:05,735 --> 01:11:09,313 1486 01:11:09,313 --> 01:11:12,130 잠깐만. 1487 01:11:12,130 --> 01:11:13,410 그들은 모두 내 머리에 발음 할 수있어. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB 보덴 : 그래서 첫 번째 질문 이진 트리의 문제입니다. 1490 01:11:19,110 --> 01:11:22,140 그래서 첫 번째 질문은 우리가있어입니다 이 번호가 없습니다. 1491 01:11:22,140 --> 01:11:27,160 그리고 우리는 어떻게 든에 삽입 할 이러한 노드가되도록 1492 01:11:27,160 --> 01:11:30,110 유효한 이진 검색 트리입니다. 1493 01:11:30,110 --> 01:11:36,260 그래서 한 가지 기억해야 이진 검색 나무는 그렇지 않은 것입니다 1494 01:11:36,260 --> 01:11:39,800 그냥 왼쪽에있는 것은 덜하고 일이 1495 01:11:39,800 --> 01:11:41,120 오른쪽이 더 크다. 1496 01:11:41,120 --> 01:11:44,580 그것은 할 필요가있는 전체 트리에 왼쪽은 덜하고, 전체 트리 1497 01:11:44,580 --> 01:11:45,740 오른쪽으로 더 크다. 1498 01:11:45,740 --> 01:11:55,260 >> 그런 다음 상단에 여기에 34을 넣어, 그렇다면 나는 여기에 20을 넣어, 그래서 그렇게 유효한의 1499 01:11:55,260 --> 01:11:56,970 지금까지, 때문에 34 여기. 1500 01:11:56,970 --> 01:11:57,920 (20)는 왼쪽으로 이동합니다. 1501 01:11:57,920 --> 01:11:58,950 그래서 덜합니다. 1502 01:11:58,950 --> 01:12:03,640 하지만 난 다음, 여기에 59을 넣어 할 수 없기 때문에 59은 20의 오른쪽에, 비록 1503 01:12:03,640 --> 01:12:06,140 그것은 (34)의 왼쪽에 아직. 1504 01:12:06,140 --> 01:12:10,760 염두에 제약 조건 때문에, 아마이 문제를 해결하는 가장 쉬운 방법 1505 01:12:10,760 --> 01:12:14,330 문제는 단지 종류 이 숫자의 - 1506 01:12:14,330 --> 01:12:18,720 그래서 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 그리고 그 삽입 왼쪽에서 오른쪽으로. 1508 01:12:21,640 --> 01:12:23,390 >> 그래서 20은 여기에 표시됩니다. 1509 01:12:23,390 --> 01:12:24,630 (34)는 여기에 표시됩니다. 1510 01:12:24,630 --> 01:12:25,830 (36) 여기에 표시됩니다. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 그리고 당신은 또한 함께 알 수있을 일부를 연결하고 실현, 1513 01:12:34,730 --> 01:12:38,830 오, 충분히 숫자가없는, 대기 여기에이 서류를 작성. 1514 01:12:38,830 --> 01:12:42,170 그래서 reshift 필요가있는 무엇을 내 경로 참고가 될 것입니다. 1515 01:12:42,170 --> 01:12:47,490 경우에, 마지막 3에있는 것을 알 수 왼쪽에서 오른쪽으로 읽기, 그것은이다 1516 01:12:47,490 --> 01:12:48,740 증가하는 순서. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> 그래서 지금, 우리는 선언 할 것을 구조체에 대한 될 것입니다 1519 01:12:56,540 --> 01:12:58,300 이 트리의 노드. 1520 01:12:58,300 --> 01:13:02,720 이진 트리에 그래서 우리는 무엇을해야합니까? 1521 01:13:02,720 --> 01:13:05,830 그래서 우리는 형식의 값이 중간, 그래서 어떤 int 값. 1522 01:13:05,830 --> 01:13:07,220 우리라는 것을 모르는 솔루션의 그것 - 1523 01:13:07,220 --> 01:13:08,500 N 값 int. 1524 01:13:08,500 --> 01:13:13,570 우리는 왼쪽 자식에 대한 포인터가 필요 오른쪽 자식에 대한 포인터. 1525 01:13:13,570 --> 01:13:17,540 그래서 다음과 같이 할 것입니다. 1526 01:13:17,540 --> 01:13:20,510 그리고 사실은 전에 볼 것이다 이중 연결 않았을 때 1527 01:13:20,510 --> 01:13:25,090 목록 물건, 그래서 통지 - 1528 01:13:25,090 --> 01:13:27,860 나는 스크롤해야 할거야 모든 다시 길을 내려 문제 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> 그래서,이 동일하게 나타남 통지 우리는이를 호출하는 일을 제외하고 1531 01:13:36,390 --> 01:13:38,590 다른 이름. 1532 01:13:38,590 --> 01:13:41,440 우리는 여전히 정수를이 값과 두 개의 포인터. 1533 01:13:41,440 --> 01:13:44,850 그것은 처리하는 대신 단지의 다음 일을 가리키는 포인터로 1534 01:13:44,850 --> 01:13:47,955 이전 것은, 우리는 치료 중입니다 포인터는 왼쪽 자식을 가리 키도록 1535 01:13:47,955 --> 01:13:49,205 오른쪽 아이. 1536 01:13:49,205 --> 01:13:57,372 1537 01:13:57,372 --> 01:13:57,860 OK. 1538 01:13:57,860 --> 01:13:59,650 그래서 우리의 구조체 노드입니다. 1539 01:13:59,650 --> 01:14:03,920 그리고 지금, 유일한 기능은 우리가 필요 이 이송됩니다에 구현하는 1540 01:14:03,920 --> 01:14:08,320 우리는 나무, 인쇄에 가고 싶어 순서에 따라 트리의 값 중. 1541 01:14:08,320 --> 01:14:15,241 >> 그래서 여기에 찾고, 우리는 인쇄 할 것 중 20, 34, 36, 52, 59, 및 106. 1542 01:14:15,241 --> 01:14:17,970 우리는 어떻게 그 작업을 수행합니까? 1543 01:14:17,970 --> 01:14:18,890 그래서 매우 유사하다. 1544 01:14:18,890 --> 01:14:22,910 당신은 과거 시험에서 본 경우 문제 당신은 인쇄하고 싶었 1545 01:14:22,910 --> 01:14:25,940 그 사이에 쉼표로 전체 트리 모든 것을, 심지어는 사실은 1546 01:14:25,940 --> 01:14:27,320 보다 쉽게​​. 1547 01:14:27,320 --> 01:14:30,950 그래서 여기에 솔루션입니다. 1548 01:14:30,950 --> 01:14:33,110 이것은 매우 쉽고 재귀를 한 경우에. 1549 01:14:33,110 --> 01:14:36,650 사람이 시도 나도 몰라 반복적으로 할 수 있습니다. 1550 01:14:36,650 --> 01:14:38,340 >> 그러나 첫째로, 우리는 우리의 기본 경우가 있습니다. 1551 01:14:38,340 --> 01:14:39,660 어떤 루트가 null의 경우는? 1552 01:14:39,660 --> 01:14:40,610 그런 다음 우리는 단지 반환 될 것입니다. 1553 01:14:40,610 --> 01:14:42,300 우리는 아무것도 인쇄하지 않습니다. 1554 01:14:42,300 --> 01:14:45,940 그렇지 않으면 우리는 통과 할거야 재귀 적으로 내려. 1555 01:14:45,940 --> 01:14:48,140 전체 왼쪽 서브 트리를 인쇄합니다. 1556 01:14:48,140 --> 01:14:51,440 그래서 적은 모든 인쇄 나의 현재의 값보다. 1557 01:14:51,440 --> 01:14:53,930 그리고 나는 나 자신을 인쇄하는거야. 1558 01:14:53,930 --> 01:14:57,310 그리고 나서 아래로 재귀거야 내 전체 오른쪽 서브 트리, 그래서 모든 것을 1559 01:14:57,310 --> 01:14:58,810 내 값 이상. 1560 01:14:58,810 --> 01:15:03,870 그리고 이것은 인쇄 할 것입니다 순서에있는 모든 중. 1561 01:15:03,870 --> 01:15:05,860 어떻게이 사실에 대한 문의 이 작업을 수행합니다? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> 청중 : 나는 질문이 [청취]에. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB 보덴 : 접근하는 그래서 하나의 방법 모든 재귀 문제는 단지 생각하는 것입니다 1566 01:15:23,550 --> 01:15:26,275 그것은 마음에 대해 생각해야 에 대한 모든 코너 케이스. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 그래서 우리가 원하는 것을 고려 이 전체 트리를 인쇄 할 수 있습니다. 1569 01:15:38,110 --> 01:15:42,030 그래서 우리 모두가 관심을 모으는 이 특정 노드 - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 재귀 호출, 우리는 척 사람들은 작동합니다. 1572 01:15:47,420 --> 01:15:54,000 그래서 여기,이 재귀 호출 옆으로, 우리 생각도없이 1573 01:15:54,000 --> 01:15:58,640 그것에 대해, 단지 왼쪽을 통과 세 이미 (20)를 인쇄 상상 1574 01:15:58,640 --> 01:16:00,730 우리 34. 1575 01:16:00,730 --> 01:16:03,350 그리고 그 때 우리는 결국 재귀 에 이송 전화 1576 01:16:03,350 --> 01:16:07,890 오른쪽이 제대로 인쇄됩니다 52, 59, 그리고 우리 (106)를 포함한다. 1577 01:16:07,890 --> 01:16:13,620 >> 그래서이 20, 34를 인쇄 할 수 주어지고, 다른 하나는, 52, 59, (108)을 인쇄 할 수있다 1578 01:16:13,620 --> 01:16:17,180 우리가 할 수 있어야 할 필요가있는 프린트 그 중간에 해결할. 1579 01:16:17,180 --> 01:16:21,250 그래서 우리 앞에 모든 것을 인쇄 할 수 있습니다. 1580 01:16:21,250 --> 01:16:27,710 해결할 인쇄, 그래서 현재 노드 인쇄 36, 일반의 printf 다음 1581 01:16:27,710 --> 01:16:31,170 우리 후 모든 인쇄 할 수 있습니다. 1582 01:16:31,170 --> 01:16:32,730 >> 데이비드 J. 마란 :이 곳 재귀입니다 정말 아름다운 가져옵니다. 1583 01:16:32,730 --> 01:16:36,270 그것은 믿음의 놀라운 도약 곳 당신은 작업의 가장 작은 조금을. 1584 01:16:36,270 --> 01:16:38,460 그리고 당신은 할 사람 다른 나머지를. 1585 01:16:38,460 --> 01:16:40,180 그리고 다른 사람 당신은, 아이러니하게도입니다. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 심각한 브라우니 점, 그렇다면 당신은 질문에 스크롤 - 1588 01:16:48,360 --> 01:16:50,530 >> ROB 보덴 : 질문에? 1589 01:16:50,530 --> 01:16:53,490 >> 데이비드 J. 마란 : 그리고에 약간 아래로 여기서 숫자는 알고 있나요 1590 01:16:53,490 --> 01:16:55,190 이 번호는 온? 1591 01:16:55,190 --> 01:16:56,610 >> ROB 보덴 : 나는 말 그대로 아무 생각이 없습니다. 1592 01:16:56,610 --> 01:16:59,794 >> 데이비드 J. 마란 : 그들은 표시 퀴즈를 통해. 1593 01:16:59,794 --> 01:17:01,150 >> 독자 : 그들은 같은 번호입니까? 1594 01:17:01,150 --> 01:17:01,910 >> 데이비드 J. 마란 : 그 번호. 1595 01:17:01,910 --> 01:17:03,260 작은 부활절 달걀. 1596 01:17:03,260 --> 01:17:08,100 그래서 온라인으로 보는 당신의 사람들을 위해 가정, 당신은에 전자 우편을 통해 저희에게 말할 수있는 경우 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net 무엇을 의미 이러한 반복되는 6 자리 숫자가의 1598 01:17:12,680 --> 01:17:18,560 퀴즈 1을 통해, 우리는 당신을 샤워한다 마지막에 놀라운 관심과 함께 1599 01:17:18,560 --> 01:17:21,610 강의 및 스트레스 공. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 미묘한, 니스. 1602 01:17:27,790 --> 01:17:29,570 >> ROB 보덴 : 어떤 마지막 질문 퀴즈에 아무것도에 대한? 1603 01:17:29,570 --> 01:17:32,608