>> 데이비드 J. 마란 : 좋습니다.
사상 처음으로 이렇게 환영 퀴즈 CS50의 사후.
우리는 우리가 열다 줄 알았는데 이 전통이 올해.
그리고이 기회가 될 것입니다 를 통해 산책
퀴즈에 대한 솔루션을 제공합니다.
그리고 우리는 속도를 높이거나 기반으로 속도를 줄인다 여기에 사람들의 관심에.
>> 당신이이기 때문에 그래서 당신은 아마 여기 당신이 수있는 방법에 관심이 나
어떤 대답해야 이러한 문제.
그럼 왜 우리가 살펴하지 않는다 먼저이 섹션?
그래서 문자열을 받고.
이렇게하면 세 가지 다른 버전을 준 이었다 프로그램의 궁극적
사용자로부터 문자열을 얻을 것을 의미했다.
했다가 그런 적이 있는지 여부 결정하기 위해 당신에게 떠났다.
>> 그리고 우리는, 질문 0에 요청 버전 1이라고 가정
컴파일 및 실행.
왜 프로그램은 세그 폴트 수 있는가?
언뜻 보면, 어떤 제안 같은 이유?
그래.
>> 청중 : 그래서이 본 기억 보고의 이전 예
문자 * s와의의 스캔을보고하고 이 포인터, 방법이기 때문에보고
당신이 스캔 무엇을 그것은 어떤 영향을 미쳤는가?
s 그것 또는 s의 주소는?
>> 데이비드 J. 마란 : OK.
좋은.
그래서 궁극적으로, 모든 문제의 원인 아마 줄일 것입니다
그 변수 s의.
그리고 그것은 참으로 변수입니다.
그 변수의 데이터 타입은 숯불 *, 어떤는 것 의미
문자의 주소를 포함하고있다.
그리고 거기에 대한 통찰력이있다.
그것은의 주소를 포함 할 것 더 일반적으로 문자 나,,
첫 번째 문자의 주소 문자의 전체 블록.
>> 그러나 캐치는 그 검사의 목적에 인생은, 주소를 부여하고 부여
형식 코드는 % s의 같은 읽기 청크에 문자열
해당 주소의 메모리.
하지만 등호 전에이 없기 때문에 처음에 그 세미콜론
코드의 라인, 우리가 실제로하지 않기 때문에 어떤 메모리를 할당
malloc에​​, 그것을하지 않았기 때문에 실제로 어떤 크기의 어레이 모두를 할당
당신이하고있는 사용자의를 읽고 일부 전체에 키보드 입력
쓰레기 값, 어떤 기본적으로들입니다.
그래서 확률은 당신이 세그 폴트려고하는 경우 그 주소는 그냥 그렇게 발생하지 않습니다
당신이 할 수있는 값으로, 사실,에 기록.
할당 할 수 없습니다 그래서 나쁜 거기에 당신의 기억.
>> 그래서 질문 1, 우리는 물었다, 버전 2가 있다고 가정
컴파일 및 실행.
왜이 프로그램은 세그 폴트 수 있는가?
그래서이 사람은 적은 버그가 있습니다.
그리고 하나는 정말 거기 확실한 방법은 어디에 당신이 할 수있는
여기 세그먼트 폴트를 발생시킨다.
그리고이 주제입니다.
우리가 메모리에 C를 사용하는 모든 시간, 무엇을 당신은 세그먼트 폴트를 유도 할 수있는
버전 2?
>> 청중 : 당신은에 그 입력을 사용하는 경우 49보다 더 긴 문자열
문자.
>> 데이비드 J. 마란 : 그렇습니다.
당신이 뭔가 고정 길이를 볼 때마다 그것은 배열에 올 때, 당신의
레이더이 될 수 있음을 꺼한다 문제는에게 확인하지 않는 경우
배열의 경계.
그리고 그 문제는 여기에 있습니다.
우리는 여전히 scanf와를 사용하고 있습니다.
우리는 여전히 노력을 의미하는 % s을 (를) 사용하는 사용자로부터 문자열을 읽을 수 있습니다.
즉, 어떤의에 읽을 것 이 시점에서, 효율적이며
메모리 청크의 주소 또는 등가의 정보.
이 배열의 이름의 메모리의 문자.
>> 그러나 정확하게, 당신은 문자열을 읽으면 즉, 49 자, 49 이상입니다
백 슬래시를위한 공간이 필요하기 때문에 0, 당신은 오버 플로우거야
그 버퍼.
그리고 당신은 운이하고 할 수있을 것 51 문자, 52, 53를 작성합니다.
그러나 어떤 시점에서, OS 말할 것입니다, 아니.
이것은 확실히 기억하지 않습니다 당신은 접촉 할 수있어.
그리고 프로그램은 세그 폴트 것입니다.
>> 그래서 거기 추론은해야한다 당신이 고정 길이를 가지고있어 시간, 당신은이
당신이 길이를 확인하고 만들려면 당신이 노력하고 무엇이든의
그것으로 읽을 수 있습니다.
>> 청중 : 그래서를, 당신이 할 수 해결 실제로 검사 문이 있었다
길이 큰에게 있습니다 이상 또는 이하?
>> 데이비드 J. 마란 : 물론입니다.
당신은 조건이 라고, 만약 그 -
또는 오히려 당신은 반드시 모르는 사전에있는 문자
사용자가 입력하는 것입니다 때문에 당신은 닭고기와 계란이 있습니다.
당신은 scanf와 함께 읽은 적이 없습니다 때까지 당신은 얼마나 오래 알아낼 수 있습니다.
그러나 그 시점에서, 그것은 너무 늦었 어 당신은 이미 그것을로 읽어했기 때문에
일부 메모리 블록.
옆으로, CS50 라이브러리가 일어나지 않도록 그래서 이 문제를 모두 리콜
는 fgetc를 사용하여.
그리고, 한 번에 한 문자를 읽 팁 팔자 걸음을 알고, 따라서 당신에게 그
문자의 경우 오버 플로우를 할 수 없습니다 당신은 한 번에 하나를 읽어보십시오.
>> 캐치하는 GetString 리콜로입니다 우리에게 지속적으로 다시 크기를 가지고
메모리의 덩어리, 한 바로 고통이다.
이 라인의 많은의 이 작업을 수행하는 코드입니다.
그래서 또 다른 방법 일 것입니다 실제로 사촌을 사용하기 때문에
scanf와의, 말하자면.
이들의 많은 변종이 있습니다 실제로 확인 기능
길이 얼마나 많은 문자 당신은 최대로 읽을 수 있습니다.
그리고 당신은 읽지 않는다, 지정할 수 50 개 이상의 문자.
그래서 다른 방법이 될 것입니다 만, 큰 입력 덜 수용.
>> 그래서 버전을 가정 해 묻는 질문 2 3 컴파일 및 실행됩니다.
왜 프로그램은 세그 폴트 수 있는가?
그래서이 사람은 실제로 동일합니다 대답도 비록
조금 애호가 보인다.
우리는 같은 느낌의 malloc을 사용하는 우리는 우리 자신에게 더 많은 옵션을 제공하고 있습니다.
그리고 우리는 자유롭게하고 끝에 메모리.
그것은 여전히​​ 메모리의 단지 50 바이트입니다.
그래서 우리는 여전히 읽기 시도 할 수 있습니다 51, 52, 1000 바이트.
그것은을 위해 세그 폴트 것 정확히 같은 이유.
>> 그러나 또 다른 이유도있다.
게다가 수익을 MALLOC 수있는 다른 어떤 메모리 청크의 주소?
null을 반환 할 수 있습니다.
그리고 우리는 검사하지 않을 때문에 즉, 우리가 어떤 일을 할 수 있습니다
것이 또 다른 이유는, 어리석은 우리는 scanf와 이야기 할 수있는 읽기
키보드로부터 사용자 입력 0 위치로, 일명 널 (null).
그리고 역시,은 확실히 세그먼트 폴트를 발생시킨다.
그래서 퀴즈의 목적을 위해, 우리는 것 로 그 중 하나를 수락 한
타당한 이유.
하나는 동일합니다.
하나는 좀 더 미묘한입니다.
>> 마지막으로, 프로그램에 대한 메모리의 사용 방법에 버전 2를하고
버전 3는 다른?
그래서 가치가 무엇인지, 우리는 보았다 수의 끝없이 공급
이에 대한 답변.
그리고 사람들의 대답 사이에, 우리는 무엇인가 을 기대하지만, 우리는 다른 허용
가지, 몇 가지 언급했다 버전 2가 사용하고있는 사실
소위 스택.
버전 3은 힙을 사용하고 있습니다.
기능적으로, 이것은 정말하지 않습니다 차이의 모든 것을 중시하고 있습니다.
하루의 끝에서, 우리는 여전히있어 다만 메모리의 50 바이트를 받고.
>> 하지만 그게 가능한 대답 중 하나 우리는보고 있다고.
당신이 퀴즈를 얻을하지만 당신은 볼 것이다 다시 TF가에서, 우리가했던 것을
다른 토론을 받아 자신의 서로 다른 메모리의 사용뿐만 아니라.
그러나 스택과 힙이되었을 것 갈 쉽게 대답.
질문?
나는 당신에게 롭을 제공합니다.
>> ROB 보덴 : 그래서 문제 4.
이것은 당신이 기입했다입니다 모두 밖으로 바이트의 수
사용이 다른 유형.
우리가 볼 그래서 일단.
32 비트 구조를 가정 이 CS50 기기 등을들 수있다.
에 대한 기본적인 것들을 이렇게 1 32 비트 아키텍처, 즉 우리에게 알려줍니다
정확히 얼마나 큰 포인터는 것입니다 건축한다.
>> 그래서 바로, 우리가 알고있는 어떤 포인터 유형은 32 비트 또는 4 바이트입니다.
따라서이 표를보고, 노드 *는 포인터 타입입니다.
즉, 4 바이트가 될 것.
구조체 노드 *, 그 말 그대로 노드 스타와 동일합니다.
그리고 그 4 바이트가 될 것.
문자열, 그래서 보이지 않는 아직 포인터하지만, 형식 정의,
문자열은 char *로, 인 포인터 타입입니다.
그래서 4 바이트가 될 것.
>> 그래서이 세 가지가 모두 4 바이트입니다.
이제 노드와 학생은 조금 더 복잡합니다.
그래서 노드와 학생을보고, 우리가 참조 정수와 포인터로 노드.
그리고 학생은 두 개의 포인터입니다 그것의 내부.
그래서 적어도 여기에 우리의 경우를 들어, 방법 우리의 크기를 계산 결국 그
이 구조체는 그냥 모든 것을 추가한다 즉, 구조체의 내부입니다.
>> 그래서 노드에 대해, 우리는 정수를 가지고, 이는 4 바이트입니다.
우리는 4 바이트 포인터를 보유하고 있습니다.
그리고 하나의 노드는 것입니다 8 바이트를 차지합니다.
마찬가지로 학생을 위해, 우리는이가 4 바이트와 다른의 포인터
4 바이트의 포인터.
그래서 끝날 것 최대 8 바이트 인.
그래서 노드와 학생은 8 바이트입니다.
그리고이 세 가지가 모두 4 바이트입니다.
그에 대한 질문?
예.
>> 청중 : 그것은 64 비트 되었나요 아키텍처 것이라고
그들 모두 배?
>> ROB 보덴 : 그것은 않을 것 그들 모두를 두배로한다.
그래서 64 비트 아키텍처, 그것은 다시, 변경하는 기본적인 것은 그
포인터가 이제 64 비트입니다.
그래.
그래서 포인터는 8 바이트입니다.
그래서이 4 바이트가 있다고 8 바이트가 될 수 있습니다.
두 개의 포인터였다 학생, 물론, 지금은 것
8 바이트, 8 바이트입니다.
그것은 16 바이트를 할 것입니다.
>> 그러나 노드는 여전히 4 바이트입니다.
그래서이 포인터는 것입니다 8 바이트이어야합니다.
이 4 바이트입니다.
따라서 노드는 예정 12 바이트가 될 수 있습니다.
그 중 하나에 대한 다른 질문?
그래서 다음 사람이 있습니다 HTTP 상태 코드.
그리고 당신은 상황을 설명했다 어떤에서 이러한 힘
당신에게 반환.
내가 어떤 학생들을 듣고 한 가지 문제 이 그들이 만들려고한다는 것입니다
오류가 클라이언트의 단부에있을.
우리는 요구를 만들려고 할 때 그래서 서버에 뭔가가 간다
우리의 말에 잘못.
그러나 일반적으로 이러한 코드는 서버에 의해 반환되는.
그래서 우리는 무슨 일이 일어나고 있는지 알아 내야 잘못이나 오른쪽으로 서버에 그
이러한 일들이 반환됩니다.
왜 서버에서 반환 수도 상태 코드 200?
어떤 생각을?
>> 그래.
그래서 뭔가에 대해 성공적으로 요청을 통해 갔다.
그리고 그들은 돌아갈 수있어 당신은 요구대로.
그래서 아무 문제가 없었어요.
(302)에 대해 무엇을 발견?
그래.
>> 대상 : 서버가보고되었다 당신이 요구하는 것에 대해.
하지만 그것을 찾을 수 없습니다.
그래서 오류가있다.
>> ROB 보덴 : 그래서 서버였다 당신이 원하는 무엇을 찾고.
그래서 그냥 여기보고, 302 발견, 그것을 발견 할 수 있었다.
>> 청중 : 미안 해요.
발견은 그들이 그것을 발견 한 것을 의미한다.
미안 해요.
>> ROB 보덴 : 그래서 302났습니다.
서버를 찾을 수 있습니다 당신이 원하는 것을.
>> 청중 :하지만 그것을 표시하지 않는거야?
>> ROB 보덴 : 차이 이 302과 200은 그것이
당신이 원하는 것을 알고있다.
그러나 정확히하지 않습니다 당신이 물어 싶었어요.
그래서 302 전형적인 리디렉션이다.
그래서 당신은 페이지를 요청했다.
그것은 오, 내가 원하는, 알고 당신이 돌아갑니다.
그러나 이것은 다른 URL에 있습니다.
그래서 이봐, 당신은 실제로 원하는.
>> 데이비드 J. 마란 : 그것은 말했다 조각의 우리는 당신들에게 리디렉션을 준
헤더 함수를 사용한 함수 즉, 차례로, 위치를 인쇄
콜론 다음 URL되는 당신은 사용자를 거부합니다.
당신은 (302)가 표시되지 않은 경우에도 명시 적으로도, 그 무엇 PHP입니다
마술 헤더로 삽입합니다 롭이 말했다 정확히 말 -
발견.
대신 여기에 이​​동합니다.
>> ROB 보덴 : OK.
그래서 403에 대해 무엇을 금지?
>> 청중 : 나는 그것을 생각하는 서버 기본적으로 말하는 것을 클라이언트
홈 페이지에 액세스 할 수 없다.
>> ROB 보덴 : 그래서 그래.
음, 전형적인 대답은 우리가 있었다 기대는 무엇인가 등의 파일입니다
적절하게 chmodded되지 않습니다.
그건 아마 아래의 어떤 상황 당신이 그들을 보았다.
그러나 이유가 그 클라이언트 여기에서 잘못 될 수 있습니다.
다른 상태 코드는 실제로 있습니다 -
401.
그래서 이들은 매우 유사합니다.
>> (401)는 무단입니다.
그리고 403은 금지되어 있습니다.
그리고 무단 당신 독점적으로 당신이 로그인하지 경우 얻을
그러나 로그인하면 의미 할 수 있습니다 당신은 권한이 부여됩니다.
하지만 당신은 이미 로그인하고 있다면 여전히 다음, 권한이 없습니다
당신은 또한 금지 얻을 수 있습니다.
그래서 당신은 로그인하고이없는 경우 허가, 금지도
당신이 얻을 수있는 무언가.
>> 데이비드 J. 마란 : 그리고기구에 의해 이러한 문제는 일반적으로 어느
서버에 해결 어떤 명령을 통해?
chmod를, 그것의 경우, 실제로 사용 권한 파일이나 디렉토리에 실행합니다.
>> ROB 보덴 : 다음 404를 찾을 수 없습니다.
그래.
그래서 302과는 달리 정확히 어디 아니었다 당신 만을 요구하고 어디에 무엇을 알고
당신이 원하는이, 그냥가 당신이 원하는 아무 생각 없습니다.
그리고 당신이 요청하지 않음 유효 뭔가.
(418) 나는 그 주전자이고 500 내부 서버.
왜 당신은 얻을 수 있는가?
>> 그래서 세그 폴트 -
사실 등급을 모르는 이 표준.
하지만 당신의 PHP 코드는 뭔가가 있다면 그것은 잘못된 이론에서는 할 수
실제로, 세그 폴트하는 경우,이 500 내부 서버 오류, 뭔가
서버의 문제입니다 구성.
또는 구문 오류가 있습니다 PHP 코드에서.
아니면 뭔가 나쁜 일이 일어나고있다.
>> 데이비드 J. 마란 : 우리는 세그먼트 폴트를 봤어 몇 사람의 답변들.
그리고 기술적으로는 일어날 수 있습니다.
하지만 PHP, 프로그램이 될 것입니다 실제로, 다른 사람에 의해 쓰여진
오류를 발생시키고 말았다, 어떤 경우에만 그 사람들 나사로와에 버그가있는 코드를 작성
자신의 통역 것 PHP 자체가 세그 폴트.
(500)는 세그먼트 폴트처럼 순간에도 정신, 그것은 거의 항상
구성 파일 문제의 결과 웹 서버 또는 롭 말했듯이,
당신 같은 구문 오류, 견적을 닫지 않았다.
또는 당신은 어딘가에 세미콜론을 잃었다.
>> 청중 : 그래서 셔틀 PSET, 나는 내가 해냈어 때 클릭 한 번 생각
브라우저,하지만 아무것도, 와서 그들은 흰색 페이지라는 것을.
그러나 그것 때문에 코드이었다.
그 자바 스크립트 생각, 오른쪽?
>> ROB 보덴 : 네.
>> 청중 : 것이라고 오류 여전히 오는가?
>> ROB 보덴 : 그래서 당신은 못했을 이 오류 때문에 모든
웹 서버의 관점에서 완전 좋았어요.
하지만 당신은 index.html을 요청했다.
당신은 shuttle.js 요청 및 service.js.
그리고 그것은 성공적으로 복귀 할 수 있었다 당신이 그 모든 것들에 -
200.
OK.
이 브라우저는에 시도하는 경우에만의 자바 스크립트 코드를 해석하는
이 같은 기다릴거야,이 아니다 유효한 자바 스크립트 오류가 발생했습니다.
다른 질문?
괜찮아요.
>> 데이비드 J. 마란 : 그래서 다음 최대 11 번이었다.
그리고 11은 무서운했다 많은 사람들을 위해.
그래서 가장 중요한 것은 여기에서주의해야 할 이, 참으로, 약이었다이었다
이중 연결리스트.
그러나 이것은 작년 같은 아니었다 이중 연결리스트의 문제,
이는 당신에게주의를주지 않았다 목록, 사실, 정렬되지 않은 수 있습니다.
>> 목록이 정렬되지 않은 것을 그래서 사실 그 단어가 있다는 사실
전달이 의미 된 밑줄 이 사실은 단순화입니다
그렇지 않으면이었을 것입니다 무슨의 더 어려운 문제
그리고 하나 더.
그래서 여기에 일반적인 실수는 넣어했다 당신의 하나에 작년의 솔루션
호출기 후 무작정 것을 복사 맞는 대답으로 다운
다른 질문에 대한 답변 정신에는 변함이.
하지만, 여기에 미묘한 다음과 같이했다.
>> 그래서 하나, 우리는 노드를 선언하고있다 여기에서 일반적인 방법으로 정의 하였다.
그 다음 우리는 목록 글로벌 수 정의 포인터는 null에 초기화.
그럼 분명히, 두 가지 기능이있다 우리는 여기에 대한 프로토 타입을 삽입
제거합니다.
그리고 우리는 여기에 몇 가지 예제 코드를 가지고 의 삽입의 무리를하고.
그리고 우리는 완료하도록 요청 등의 아래에 삽입의 구현
이리스트에 N을 삽입하는 방법 일정 시간에, 또한 밑줄,
심지어 이미 존재하는 경우.
>> 그래서 삽입 할 수있는 아름다움 일정 시간에이 의미하는 것입니다
당신은 삽입 할 것을 새 노드 어디?
전면에.
그래서 다행히도, 제거 이상 요구하도록 사용 사례 중 하나
그것과 같은 더욱 많은 양의 코드는, 한 작년에도 클래스의 경우 우리
이런 종류의 일을 통해 이야기 인간과 일부와
언어 적 의사 코드.
그래서 여기에 용액에,의는 건너 보자 그에게 단지 시각에이하는
화면.
>> 우리는 다음과 같은 일을하고 있는지 알 수 있습니다.
그리고 또 다른 단순화 통지 이 되었나요는 경우에도
이미 존재하는, 그래서 이것은 의미 경우에도 숫자는 당신이 할 수있는, 거기에 이미
그냥 맹목적으로 서로를 삽입 그것의 사본.
그리고는,도 될 운명이되었다 단순화, 당신이 할 수 있도록
, 더 정말, 몇 가지에 초점을 지적으로 흥미로운 부분과
검사를 일부 추가 오류뿐만 아니라 시간 제한이 없습니다.
>> 따라서이 시료 용액에, 우리는 할당 왼쪽에 포인터
노드에 여기에 사이드.
지금으로, 그 포인터를 실현 롭은 말했다, 32 비트입니다.
그리고 실제로는 포함되어 있지 않습니다 당신까지 주소
그에게 주소를 할당합니다.
그리고 우리는 오른쪽에 그렇게 의 malloc을 통해 측면.
좋은 시민처럼, 우리는 확인 의 malloc이 아닌, 사실, 널 (null), 그 때문에
우리는 실수로 작성하지 않습니다 여기 세그먼트 폴트.
그리고 언제 당신이 인생에서 당신을의 malloc을 사용 않도록, 널 (null)을 검사해야한다
당신은 미묘한 버그가 있습니다.
>> 그 다음 우리는하여 해당 널 (null)를 초기화 N과 이전 및 다음을 지정.
그리고 여기이 경우는 초기화 이 때문에 새로운 NULL로 이전
노드는 새로운 될 것입니다 내 목록의 시작.
그래서이있을거야 그 전에 아무 것도 없습니다.
그리고 기본적으로 추가 할 하여 새 노드에 기존 목록
자체 목록 옆에 같은 설정.
그러나 나는 아직 안 끝났어요.
목록 자체가 이미 존재하고,이 경우 적어도 하나의 노드가 있었다
이미에서,이 목록에 있는지 여기 내가 여기에 새 노드를 삽입
있는지 확인해야 예전의 노드 나의 새로운 노드에 거꾸로 포인트,
이 다시이기 때문에 이중 연결리스트.
>> 그래서 우리는 온 전성 검사를 수행.
이미이 있다면 목록, null가 아닌 경우 다음이 하나 이상의 노드,
말하자면 참조가 다시 추가.
그리고 우리가 필요로하는 매우 마지막으로 어떻게 실제로 세계를 업데이트한다
가리 변수 목록 자체 그 새로운 노드.
그래.
>> 청중 : 포인터가 화살표 [들리지 않는, 널 (null)와 동일 함
목록을 처리하기 때문에 리스트가 null?
>> 데이비드 J. 마란 : 아니.
즉, 사전되고 단순히 저입니다 이것이 나의 경우는 점에서주의
아마 좀 더 많은 노드가 원래 목록 여기에 내가 삽입하고있어 내
여기에 새로운 노드가 무슨 여기에 아무것도 없습니다.
그리고 그 아이디어를 캡처 할 이전 설정하여
새 노드에 널 (null).
그리고 아마도, 내 코드가 맞다면 삽입 할 다른 방법이 없습니다
이 기능 이외의 노드, 아마도 경우에도 목록이 이미 있습니다
그것의 하나 이상의 노드, 아마도 목록의 첫 번째 노드는 것
널 (null) 자체의 이전 포인터.
>> 청중 : 그냥 후속.
다음에 등호 포인터를 넣어 이유 목록에는 포인터를 들어갔다는거야
이 향하고있는 것을 목록에서 이전 다음에, 그런 것 같아요 -
전 좀 ... -
그냥 나열?
>> 데이비드 J. 마란 : 그렇습니다.
그리고 그럼 실제로 두 사례를 살펴 보자 여기 정말, 비록
우리가 그들을 고려합니다 순서는 없습니다 코드와 완전히 동일.
그러나 높은 수준에있는 경우이 나타냅니다 목록이 32 비트이다
포인터, 간단한 시나리오는 이것은 기본적으로 널 (null)입니다.
그리고 삽입한다고 가정 수 (50)는 첫 번째 숫자였다.
그래서 내가 가서 할당 할거야 포함 된 것입니다 노드,
세 개의 필드 -
N, 이전 및 다음.
>> 나는 숫자 50을 넣어 갈거야 여기,이 N되기 때문에.
이 옆에있을 것입니다.
그리고 이것은 이전 될 것입니다.
그래서 저는이 경우 어떻게해야합니까?
글쎄, 난 그냥 여기에 1 행을 완료했습니다.
포인터 N은 N 가져옵니다.
나는 그 이전, 말하는거야 null을 얻어야한다.
그래서이 널 (null)이 될 것입니다.
그럼 난 다음에 말할거야 목록을 얻을 것입니다.
>> 그리고 이것은 단지 잘 작동합니다.
이 널 (null)입니다.
그래서 저는 새로운 노드의 다음 말을 해요 필드는이 무엇이든 얻을 수 있어야합니다.
그래서 거기에 다른 널 (null)을 넣습니다.
그리고 마지막으로 나는 여기에서 확인된다 않습니다.
목록은 널 (null)에 해당하지 않지만 경우 널 (null)와 동일하다, 그래서 우리는 이동하는
모두.
그래서 내가 모두 다음 목록 가져입니다 그림으로 결과 포인터,
같은 그림.
그래서 하나의 시나리오입니다.
>> 그리고 당신에 대해 물어 된 하나 특히이 같은 상황은,
우리는 이미 하나의 노드 목록이 곳.
그리고 원래의 백업 가면 문제 설명, 우리는거야 다음
단지를 위해, 말은 34입니다 삽입 토론을 위해서.
그래서 난 그냥 편리에 갈거야 여기에 그립니다.
난 그냥 malloc으로 할당했습니다.
의 내가 널 (null)을 검사하고있어 가정 해 봅시다.
>> 자, 초기화하는거야 N 34이어야합니다.
그리고 이것은 N 될 것입니다.
이 옆에있을 것입니다.
그리고 이것은 이전 될 것입니다.
의 확실히 내가하지 않았다 만들어 보자 거꾸로이를 얻을.
이전이 먼저 다 정의.
내가이 문제를 해결하자.
이것은 이전입니다.
이 옆에 있습니다.
이들은 동일, 비록 의 일관성을 유지할 수 있습니다.
>> 이전.
이 옆에 있습니다.
그래서 난 그냥 체크, 내 메모를 malloc으로 할당 한 널 (null)을 위해, 노드에 34을 할당.
이전 null을 가져옵니다.
그래서 나에게 그것을 제공합니다.
다음 목록을 가져옵니다.
그래서 목록이 있습니다.
그래서이 지금 동일이 그리기 등 그들은 하나를 가리 키도록 화살표,
동일합니다.
그리고 제가 알아보고 있어요 경우 목록 null이 동일하지 않습니다.
그리고이 시간이 아니다.
그럼 난 목록을 할거야 이전 포인터를 가져옵니다.
>> 그래서 이전 목록 PTR 가져옵니다.
그래서이 퍼팅의 효과를 갖는다 여기에 그래픽 화살표.
그리고 조금지고 물결 모양의, 선.
그리고, 마지막으로, 나는 업데이트 포인터를 가리 키도록 보여줍니다.
그래서 지금은이 사람을 가리 킵니다.
그리고 지금, 빨리하자 전성 검사.
>> 다음 목록은 어떤의 글로벌 변수입니다.
첫 번째 노드는, 참으로, 34 때문에 그 화살표를 따라하고 있습니다.
내가 할 수 있기 때문에 맞습니다 목록의 시작 부분에 삽입
모든 새로운 노드.
그의 다음 필드는이 사람에 날 리드.
내가 계속하면, 나는 다음 null의 충돌.
그래서 더 이상리스트가 없습니다.
나는 이전에 충돌, 내가 얻을 내가 기대하는 곳 백업합니다.
>> 그래서 몇 가지 포인터는 여전히있다, 분명히, 조작 할 수 있습니다.
하지만 당신이 할 말을 들었다는 사실 이 일정 시간에 당신만을 의미
일의 한정된 수있다 당신은 할 수있어.
그리고 그 수는 무엇입니까?
그것은 하나의 단계가 될 수 있습니다.
그것은 두 가지가 있습니다.
그것은 1000 단계 수 있습니다.
그러나 당신이 할 수없는 의미, 유한의 루프의 모든 종류의 일이 일어나고있다
여기에, 아니 재귀, 아니 루프.
그것은 단지 하드 코드 라인 수있어 우리는이 샘플에서이 코드로.
>> 따라서 다음 문제 (12)에 우리에게 물었다 제거의 구현을 완료
그것을 제거하는 방식으로 아래 N 선형 시간의 목록에서.
그래서 당신은 좀 더이 호기심 지금.
당신은 그 N을 가정 할 경우 현재 목록에서 존재한다
더 이상 두 번 이상 없습니다.
그리고도 퀴즈 기반하기위한 것입니다 단순화 가정, 그래서
당신은 수 50 곳을 발견하면 목록에서, 당신은 또한하지 않습니다
에 계속에 대해 걱정할 필요가 가능한 모든 찾고, 반복
다만 바뀔 것 (50)의 복사, 제한된 시간에 몇 가지의 특징점에.
>> 그래서 제거와 함께, 이것은 분명히했다 더 많은 도전과 더
작성하는 코드입니다.
한눈에보기, 솔직히, 그것은 수도 압도적 인과 같은 모양
당신이 수있는 방법은 없습니다 퀴즈와 함께 제공됩니다.
그러나 우리는 각 단계에 초점을 경우, 바라건대, 갑자기 것
당신을 공격하는 이러한 개인의 각 단계는 분명 의미가 있습니다
생각해 보면.
그럼 살펴 보자.
>> 그래서 첫 번째, 우리는 포인터를 초기화 로 그 자체를 보여줍니다.
내가 선형 시간을 원하기 때문에, 그 수단 나는 약간의 루프가하는거야.
그리고 일반적인 방법은 반복하는 목록 구조 또는 어떤 종류의 노드
구조를 반복적으로하는 것입니다 데이터의 앞의 포인터
구조 후 바로 업데이트를 시작 그것은 당신의 길을 걷기
데이터 구조를 통해.
그래서 정확하게 그렇게 할거야.
>> 포인터 동안, 내 임시 변수, 하자, 널 (null)와 동일하지
가서 확인하세요.
나는 운이 좋은 거죠?
나는 현재 해요 노드에서 N 필드입니다 동일보고
숫자는 내가 찾고 있어요?
그렇다면, 이제 뭔가를 할 수 있습니다.
자,이 발견되면 상태 전체를 둘러싸는
코드의 다음 줄.
이것은 내가 걱정하는 유일한 것입니다 - 문제의 번호를 발견.
그래서 다른, 단순화가 없습니다 개념적 것을 조금.
>> 그러나 지금, 나는 실현, 당신은해야 할 수도 있습니다 만 생각 후에이 실현
그것은 조금을 통해, 거기에 실제로 이가지 경우 여기.
노드에서 어디 하나는 인 목록의 시작
그 때문에, 작은 성가신 특별한 경우, 당신은 거래를하기 때문에
이 것으로, 어떤 만 이상입니다.
다른 곳 목록에서, 그것은 같은 것입니다.
이전 노드와 다음이있다 노드 이전 노드, 다음 노드.
그러나이 사람은 조금 특별하다 그는 처음에의합니다.
>> 그래서 포인터리스트 같으면 자체, 그래서 나는의 시작 부분에있어 경우
목록 및 I n을 발견, 내가 필요 몇 가지 작업을 수행합니다.
하나는, 나는에 목록을 변경해야 다음 필드, 50 가리 킵니다.
그래서 시도하고 있다고 가정 (34)를 제거합니다.
그래서이 사람의 가야 불과 잠시.
>> 그래서 내가 말할거야, 목록 다음 포인터를 가져옵니다.
음,이 포인터입니다.
다음 여기를 가리키는입니다.
따라서 이것은이 화살표를 오른쪽으로 변화 지금 여기이 사람을 가리 키도록.
이제, 우리가 기억 임시 변수.
그래서 우리는 모든 노드를 분리하지 않은, 또한이 사람을 가지고 있기 때문에 내
제거의 구현입니다.
그래서 지금, 경우 목록 자체가 null이 아닌 내가 뭔가를 조금 수정해야합니다.
>> 지금은 확인이 화살표 있는지 확인해야합니다, 이전에 지적 된
50-34이 멀리 가야했다 때문에 제거하기 위해 노력하고있어 경우
34, 50는 더 나은 하나를 유지했으나, 같은 그것의 종류의 역 참조
화살표는 제안했다.
그래서 난 그냥이 줄을했다.
그럼 내가 다 했어.
이 경우는 실제로 매우 간단합니다.
목록의 머리를 자르고 비교적 간단합니다.
>> 불행하게도,이 거기에 다른 성가신 블록.
그래서 지금, 나는 그 사건을 고려해야 중간에 뭔가가 어디.
그러나 그것은 제외하고도 끔찍한 아니다 이 같은 구문.
그래서의 시작 부분에 아니에요 경우 목록, 어딘가에 중간에 있어요.
그리고 여기이 선은 말하고 시작 당신이에있어 어떤 노드에서.
이전 노드의 다음 필드로 이동 그리고 포인터가 가리 킵니다.
>> 의이 그림으로이 작업을 수행 할 수 있습니다.
그 일이 복잡해졌다.
그래서 내가 여기에 이​​전 필드가있는 경우 - 이 해 보자 - 여기에 다음 필드.
차라리 내 포인터를 단순화하는거야 전체 무리를 그리는 것보다
앞뒤로 가지 십자 서로.
그리고 지금,, 그냥이 1, 2라고하자 토론을 위해서 3도
그와 일치하지 않는데 문제의 문제.
>> 그래서 여기에 내 링크 목록입니다.
나는이 두 가지를 제거하는 것을 시도하고있다 이야기의 특정 버전.
그래서 난에 포인터를 업데이트 한 이 사람을 가리키는 될 수있다.
그래서 이것은 PTR입니다.
그는 여기를 가리키는 것.
이것은 존재하는 목록입니다 전 세계적으로 이전.
그는 무슨 일이 있어도 여기를 가리키는 없어요.
그리고 지금, 나는 두 가지를 제거하기 위해 노력하고있어.
>> 포인터가 여기 가리키는 그렇다면, 난 분명히, 따라가는
1에 저를두고 이전 포인터.
나는 그 말을거야 그 다음 이 날을 통해 제공 필드,
여기 상자, 예정 동일한 포인터 다음.
그래서이 포인터 경우,이 옆에 있습니다.
그것은 즉,이 화살표 요구 이 사람을 가리 키도록.
>> 그래서 코드 줄은 무엇을 가지고 이 약간은 있습니다 다.
그리고 지금,이 같은보고있다 올바른 방향으로 단계.
우리는 기본적으로 2 아웃 싹둑 할 1과 3의 중간.
그래서 우리가 원하는 그 의미가 주위 노선이 포인터를.
그래서이 다음 줄은 확인 된 경우 포인터 다음 null이 아닌, 거기에
2의 오른쪽에 참으로 사람, 즉, 우리는 또한해야 할 의미
조금 여기 싹둑.
>> 그래서 나는 지금이 포인터를 수행해야 이전 포인터를 업데이트
약간의 작업을 수행하는이 남자 여기에 여기에 점을 해결.
그리고 지금, 시각적으로는 좋은 것입니다.
거기에 있다는 점에서 조금 지저분한 더 이상이 가리키는 아무도 없습니다.
2 왼쪽을 가리키고 있습니다.
그리고 2는 오른쪽을 가리키고 있습니다.
그러나 그는, 자신이 원하는 무엇이든 할 수 있기 때문에 그는 해방 얻는 것을 대략이다.
그리고 그것은 무엇을 중요하지 않습니다 그 값은 더 이상이다.
>> 중요한 것은 남아있는 것입니다 사람들은 위의 라우팅됩니다
지금은 그 아래.
그리고 실제로, 그것은 우리가 다음에 할거야.
우리가 말씀을 의미합니다 우리는 무료 포인터, 운영 체제, 당신은 환영합니다
이를 되찾기 위해.
그리고 마지막으로, 우리는 돌아갑니다.
다른 암시 적으로 만약에 우리 아직 반환되지 않은,
우리는 계속 찾고 있어요.
그래서 포인터가 바로 옆에 포인터와 동일 여기이 사람을 이동을 의미합니다.
여기이 사람을 이동합니다.
여기이 사람을 이동하는 경우, 사실, 우리는 수를 찾을 수 없습니다
우리는 아직 찾고 있습니다.
>> 그래서 솔직히, 그것은 완전히 보인다 압도적 인, 내가 처음에 생각
눈에, 특히 당신이 고생하는 경우 이 함께 퀴즈 동안 다음을 참조하십시오
다음과 같이.
그리고 당신은 뒷면에 자신을 두드려.
글쎄, 내가 가질 수있는 방법이 없습니다 퀴즈에 그와 함께 제공됩니다.
그러나 나는 당신이 할 수있는, 주장 당신이 중단되는 경우 이러한 개별로 다운
다만 케이스와 그것을 통해 도보 신중하게, 틀림없이, 아래,이기는하지만
스트레스 상황.
>> 다행히, 그림이 만들어 행복 다.
당신은이를 그릴 수 방법의 수.
당신은 십자 할 필요가 없습니다 여기 것.
당신은 바로 그것을 할 수 이 같은 라인.
그러나이 문제의 요지, 일반적으로, 실현하는 것을
결국 그림은 조금 보일 것 이런 일 때문에
일정한 시간을 유지할 것을 암시 방해하고 방해하고 방해
처음에 새 노드 목록.
질문?
아마도 가장 도전 확실히 코딩 질문입니다.
>> 청중 : 그래서 유사한 목록입니다 앞의 예에서 머리.
>> 데이비드 J. 마란 : 정확하게, 정확하게.
그냥 다른 이름 전역 변수.
월드 와이드 무엇?
>> ROB 보덴 : OK.
그래서 이것은 어디 하나입니다 단락을 작성했다.
어떤 사람들은 에세이를 썼다 이 질문에 대한.
그러나 당신은이 여섯 가지 용어를 사용할 필요가 때 어떤 일이 일어나는지 설명하는
당신은 facebook.com에 문의하려고합니다.
그래서 난 그냥 과정을 통해 이야기 할 것 이러한 용어를 사용.
그래서 우리의 브라우저에서, 우리는 facebook.com를 입력 입력하고 Enter 키를 누르십시오.
그래서 우리의 브라우저를 구성하는거야 HTTP는 보내려고 것을 요청
페이스 북에 어떤 과정을 통해 페이스 북은 우리에 응답하려면
그 페이지의 HTML.
>> 그래서 프로세스가 무엇입니까 이는 HTTP 요청
실제로 페이스 북에 도착?
그래서 첫 번째, 우리는 번역을해야합니다 Facebook.com.
그래서 그냥 이름 Facebook.com 제공 실제로 HTTP 요청에게 수행 곳
갈 필요가?
그래서 우리는 Facebook.com 번역을해야합니다 IP 주소로, 어떤 고유
어떤 시스템에서 우리는 실제로 식별 이 요청을 보내려고합니다.
노트북은 IP 주소가 있습니다.
인터넷에 연결 아무것도 IP 주소를 갖는다.
>> 그래서 DNS는 도메인 이름 시스템, 즉 어떻게 번역을 처리 할 것
facebook.com에서 IP 주소에 해당 당신은 실제로 문의하십시오.
그래서 우리는 DNS 서버에 연결하고 말하자면, facebook.com은 무엇입니까?
그것은 아, IP 주소 190.212의 말한다 뭔가 뭔가 뭔가.
괜찮아요.
지금, 나는 무엇을 알고 기계 나는 문의하십시오.
>> 그래서 당신은 당신의 HTTP 요청을 보낸다 그 기계에 이상.
그래서 어떻게 그 기계에 도착합니까?
음, 요청에서갑니다 라우터 수신 거부에 라우터.
클래스의 예를 기억 위치 우리는 실제로 길을보고 그
우리가 시도 할 때 패킷했다 통신 할 수 있습니다.
우리는 대서양을 뛰어 보았다 한 지점 또는 무엇이든에서 바다.
>> 그래서 지난 학기 포트.
그래서이 컴퓨터에 지금이다.
현재 여러 가지가있을 수 인터넷과 통신.
그래서, 말, Skype를 실행 할 수 있습니다.
나는 열려있는 웹 브라우저가있을 수 있습니다.
내가 뭔가를해야 할 수도 있습니다 그 파일을 torrenting.
그래서이 모든입니다 통신
어떤 방법으로 인터넷.
>> 그래서 컴퓨터가 일부 데이터를 수신 할 때 인터넷에서, 어떻게하지
알고있는 응용 프로그램이 실제로 데이터를 원하는가?
이 특정 여부를 어떻게 알 수 있습니까 데이터에 대한 의미입니다
반대로 응용 프로그램을 torrenting 웹 브라우저에?
그래서이 점에서 포트의 목적이다 이러한 응용 프로그램의 모든이
컴퓨터의 포트를 주장했다.
그래서 귀하의 웹 브라우저는 헤이 말한다 I 포트 1000에서 수신 대기하고 있습니다.
그리고 당신의 torrenting 프로그램은 말하고있다, I 포트 3000에서 수신 대기하고 있습니다.
그리고 Skype는 I 포트 4000을 사용하고, 말한다.
>> 당신은 어떤 데이터를 얻을 때 그래서 속하는 이들 애플리케이션 중 하나, 데이터
어떤 포트로 표시되어 그것을 실제로 에 함께 전송해야한다.
그래서이 아, 내가 속한 말한다 포트 1000.
그때 나는이를 전달할 필요가 알고 내 웹 브라우저에 따라.
그래서 이유는 현재 관련의 정보 웹 서버가 경향이있다
포트 80에서 수신 대기.
내가 Facebook.com 연락 그래서, 난 일부 컴퓨터와 통신.
하지만 난 그 어느 포트를 말할 필요 I와 통신 할 기계.
그리고 웹 서버는 경향이있다 포트 80에서 수신 대기.
>> 그들이 원하는 경우, 그들은 그것을 설정할 수 있습니다 최대 그래서 포트 7000로 나열합니다.
그리고 웹 브라우저에서, 내가 할 수 7000 : 수동 Facebook.com을 입력
포트 7000에 요청을 보낼 페이스 북의 웹 서버의.
>> 데이비드 J. 마란 :이 경우,도 우리는 필요로하지 않았지만 그 사람들
이것은 물론,이 경우, 어떤 포트 요청 사실에 갈 것인가?
다시 시도하십시오.
정확히.
미묘는 찾고 있지만 그가 없음 마지막 없습니다.
>> ROB 보덴 : 그래서 HTTPS, 그것은이기 때문에 특별히 듣고
암호화는 포트 4430에 있습니다.
>> 청중 : 그리고 이메일은 25이다, 그렇지?
>> 데이비드 J. 마란 : 아웃 바운드 이메일, 25, 네.
>> ROB 보덴 : 심지어 대부분 몰라 - 낮은 사람의 모든 경향
정보의 보호를받습니다.
나는 모든에서 생각 1024 예약되어 있습니다.
>> 청중 : 왜 말 했는가 3 잘못된 번호입니까?
>> ROB 보덴 : 때문에 IP 주소, 숫자 네 그룹화가있다.
그리고 그들은 0에서 255입니다.
그래서 192.168.2.1는 일반적입니다 로컬 네트워크 IP 주소입니다.
그 모두가 255보다 작은 알 수 있습니다.
그래서 300으로 시작했을 때, 그 아마도이 없습니다
숫자 중 하나가되었습니다.
>> 데이비드 J. 마란 :하지만 바보 클립 에서 - 그들이 있었다 CSI했다
숫자가 너무 큽니다 IP 주소.
>> ROB 보덴이에 대한 질문?
다음 하나에 이렇게 바꿔 주제, 그러나 우리는이 PHP 배열이
쿼드 주택.
그리고 우리는 정렬되지 않은 목록이 있습니다.
그리고 우리는 각 목록 항목을 인쇄 할 그냥 집 이름을 포함.
그래서 우리는 foreach 루프가있다.
그래서 구문이 foreach 문입니다 기억 배열의 항목으로 배열.
그래서 루프의 각 반복을 통해, 집 중 하나에 걸릴 것입니다
배열의 내부 값.
>> 첫 번째 반복, 집에 캐벗 하우스 될 것입니다.
두 번째 반복, 집에있는 것 그래서 택배 하우스하고.
그래서 집 각 쿼드를 위해, 우리는거야 바로 인쇄 할 것 -
당신은 또한 에코 있었다 -
다음 목록의 항목과 집의 이름 다음 목록의 항목을 닫습니다.
중괄호 여기에 선택 사항입니다.
>> 그리고 우리는 또한 질문을했다 자체가 닫 기억
순서가없는 목록 태그입니다.
그래서 우리는 PHP 모드를 종료해야 이를 위해.
또는 우리는 에코 수도 순서가없는 목록 태그를 닫습니다.
>> 데이비드 J. 마란 : 여기에 또 좋은 것 에 대 한 오래 된 학교를 사용했습니다
= 0 0 $ i를 가진 루프의 카운트를 사용하여 레이의 길이를 알아낼.
완전히 벌금도 단지 조금 wordier.
>> 청중 : 그래서 당신은이 생길까 [청취], 당신은 할 것 -
나는 루프가 들리지] 무엇을 잊어 버려요.
당신은 쿼드 브래킷 나는 $시겠습니까?
>> 데이비드 J. 마란 : 그렇습니다.
네, 맞아요.
>> ROB 보덴 : 다른 건?
>> 데이비드 J. 마란 : 좋습니다.
트레이드 오프.
그래서 대답 큼이 있었다 이들 각각에 대한 가능성.
우리는 정말 그냥 찾고 있었다 상승과에 대한 강력한 무언가
단점.
그리고 수 (16)는 사용자의 유효성을 검사 요청 입력 클라이언트 측 자바 스크립트와 같이,
대신 서버 측의, PHP와 같은.
그렇다면의 상승의 하고 클라이언트 측?
>> 글쎄, 우리는 제안 된 것들 중 하나입니다 당신이 대기 시간을 줄일 수 있음을, 당신 때문에
연락 귀찮게 할 필요가 없습니다 몇 걸릴 수 있습니다 서버, 어떤
밀리 초 (초)도 몇 그 피함으로써 단지
사용자의 입력 클라이언트 측에 의해 유효성을 검사 에 제출 처리기를 트리거링 및
단지 그들이 입력 한 않았다 확인 이름에서 뭔가?
그들은 뭔가를 입력 했 이메일 주소에?
그들은에서 기숙사를 선택 했 드롭 다운 메뉴?
>> 당신은 그들에게 즉각적인 피드백을 제공 할 수 있습니다 기가 헤르츠 컴퓨터를 사용
또는 그들이 그건 뭐든지 실제로 자신의 책상에.
그래서 그것은 단지 더 나은 사용자의 일반적으로 경험한다.
그러나 클라이언트 측을하는 단점 유효성 검사, 당신은 또한없이 할 경우
서버 측 유효성 검사를하는 것은입니다 CS50 나오는 대부분의 사람이 알고
당신은 당신이 원하는 모든 데이터를 보낼 수있는 서버에 임의의 수의 방법.
솔직히, 대부분의 모든 브라우저에서, 당신은 할 수 설정과 단지 주변 클릭
자바 스크립트를 해제하는 것, 따라서 어떤 형태의를 사용하지 않도록 설정
검증.
>> 하지만 당신은 기억을 생각하고 심지어 사용 클래스의 몇 가지 불가사의 한 일을했다
텔넷 실제로 척 GET을 전송하여 브라우저 수
서버에 대한 요청.
그리고 확실히 아니다 모든 자바 스크립트를 사용하여.
그건 그냥 내가 명령을 입력 것 키보드에서.
그래서 정말 충분히 내의 모든 프로그래머 웹 및 HTTP 편안함
그 또는 그녀가 원하는대로 데이터를 보낼 수 확인하지 않고 서버에.
그리고 당신의 서버는 확인되지 않은 경우, 그들이 나에게 이름을 주 었는가이다
이 실제로 유효한 이메일 주소는 않았다 그들은 기숙사를 선택, 당신은 종료 될 수 있습니다
최대 삽입 가짜하거나 빈 데이터 데이터베이스에, 어떤 아마
좋은 일이 될 수 없습니다 경우 당신은 거기 가정 하였다.
>> 그래서이 짜증나는 현실이다.
그러나 일반적으로, 클라이언트 측에서 검증은 좋은 것입니다.
하지만 두 배의 작업을 의미한다.
다양한 존재가 없지만 에 대한 라이브러리, 자바 스크립트 라이브러리
예,이 정도를 확인하는 두통의 더 적은.
그리고 당신은 코드의 일부를 재사용 할 수있다 서버 측, 클라이언트 측.
하지만 일반적으로 실현 않는다 추가 작업.
그래.
>> 청중 : 그래서 만약 우리 단지 덜 안전한 말했다 -
>> 데이비드 J. 마란 : [웃음]
윽.
사람들은 항상 어렵다 판결하는 것.
>> ROB 보덴 : 그 것 받아 들여졌다.
>> 데이비드 J. 마란 : 무엇?
>> ROB 보덴 :이 문제를 만들었습니다.
즉, 허용 된 것입니다.
>> 데이비드 J. 마란 : 네.
>> 청중 : 차가운.
>> ROB 보덴 :하지만 우리는 동의하지 않았다 첫 번째에 대한 -
물론, 우리가 찾고있는 것은 당신 같은 뭔가가 필요가 없습니다
서버와 통신 할 수 있습니다.
우리는 단지 더 빨리 수락하지 않았습니다.
>> 청중 : 무엇에 대한 페이지를 다시로드하지?
>> ROB 보덴 : 예.
즉, 허용 대답했다.
>> 데이비드 J. 마란 : 우리가 생각 아무것도 그것은 가능성이없는보다 더 많은 가능성이
당신은 당신이 무엇인지 알고 있었다 힘든하는 말
가끔 그리는 라인.
대신 링크 된 목록을 사용하여 유지 배열
정수의 목록을 분류.
연결에 따라서 거꾸로 우리는 자주 인용 자신의 전체를 동기 목록
소개는 활력을 얻을 수 있었다.
그들은 증가 할 수 있습니다.
그들은 축소 할 수 있습니다.
그래서 당신은 남이 할 필요가 없습니다 실제로 더 많은 메모리를 만들 수 있습니다
배열.
또는 당신은 필요가 없습니다 그냥 말, 미안, 사용자.
이 배열은 가득합니다.
목록이 너무 역동적 인 성장.
연결리스트의 생각 단점?
>> 청중 : 그것은 선형입니다.
연결리스트에 검색하면 선형 대신 당신이 로그인 무엇
>> 데이비드 J. 마란 : 그렇습니다.
연결리스트에 검색하면 선형, 이 분류되어있는 경우에도이 당신이 할 수 있기 때문에
이들 빵 부스러기를 따라,이 포인터리스트로부터 개시
끝.
당신은 임의 접근 및 활용 할 수 따라서, 이진 검색, 그것은 경우에도
분류, 당신은 할 수 그 배열으로한다.
그리고 다른 비용도 있습니다.
그래.
>> 청중 : 메모리 비효율적?
>> 데이비드 J. 마란 : 네.
글쎄, 난 필요없는 것 비효율적 말한다.
그러나 그것은 당신에게 더 많은 메모리를 요 하는가, 당신은 모든 32 비트를 필요로하기 때문에
추가 포인터 노드에서 단일 연결 목록 이상.
지금, 당신은 정수를 저장하는 경우와 포인터를 추가하고, 그의
실제로 종류의 아닌 사소한.
이는 메모리의 양을 두 배로있어.
그러나 현실에서, 경우에 당신은 저장하고 수도 구조체의 연결리스트
8 바이트, 16 바이트, 더욱 보다, 어쩌면 더 적은이다
한계 비용의.
하지만 그럼에도 불구하고 비용입니다.
그래서 그 중 하나가 된거야 단점으로 잘되었습니다.
>> 18.
작성하는 PHP 대신에 C를 사용하여 명령 줄 프로그램.
그래서 여기에, 그것을 사용하는 것이 더 빠릅니다 PHP 나 루비 또는 파이썬과 같은 언어.
당신은 신속하게 열 텍스트 편집기입니다.
당신은 더 많은 기능을 가지고 사용 가능한.
PHP 함수의 부엌 싱크대가, C에서, 반면에
아주, 아주 조금 있습니다.
사실, 사람들은 하드 방법을 알고 당신이 해시 테이블이 없어.
당신은 목록을 연결하지 않습니다.
당신이 사람들을 원하는 경우에이 그들에게 자신을 구현합니다.
>> PHP의 그래서 하나의 상승 또는 정말 어떤 인터프리터 언어는 신속성이다
있는 당신은 코드를 작성할 수 있습니다.
그러나 단점은, 우리는이를봤을 때 빨리 misspeller을 채찍질
PHP를 사용하여 강의의 구현이며, 그 해석 언어를 사용하여
일반적으로 느리다.
그리고 우리는 함께 명백히 봤어 3 0.3 초​​에서 시간 증가
때문에 해석의 초, 즉, 실제로 발생합니다.
>> 또 다른 상승했다 당신에게 그 컴파일 할 필요는 없습니다.
그래서 그것은 또한 개발 속도 덧붙여 말하자면, 당신은이 없기 때문에
프로그램을 실행하는 두 단계.
당신은 하나를 가지고.
그리고 그 사랑의 경쟁력뿐만 아니라.
SQL 데이터베이스를 사용하는 대신 데이터를 저장하는 CSV 파일.
그래서 SQL 데이터베이스 pset7에 사용됩니다.
CSV 파일은 많이 사용하지 않았다.
하지만 당신은 pset7에 간접적으로 사용 물론 야후 금융 이야기로.
>> 그러나 CSV 그냥 엑셀 파일처럼 만 매우 간단하고, 열이있는 곳
단지 내부 쉼표로 demarked 그렇지 않으면 텍스트 파일.
그리고 SQL 데이터베이스를 사용하는 것은 좀 더 강력한.
당신이 일을 얻을 수 있기 때문에, 거꾸로의 같은 선택 및 삽입과 삭제합니다.
그리고 당신은, 아마도, 인덱스를 얻을이 MySQL과 같은 다른 데이터베이스,
오라클, 메모리에 당신을 위해 구축하는 당신의 선택은 아마 의미
아래로 선형 최고 될 것.
그것은 실제로 뭔가있을거야 이진 검색이나 뭐 같은
정신에는 변함이.
그래서 그들은 더 빠르게입니다.
>> 그러나 단점은 것입니다 그것은 단지 더 많은 작업입니다.
그것은 더 많은 노력이다.
당신은 데이터베이스를 이해해야합니다.
당신은 그것을 설정해야합니다.
당신은 실행하는 서버가 필요 에 해당 데이터베이스.
당신은 이해할 필요가 를 구성하는 방법에 대해 설명합니다.
그래서 이들은 단지이 절충 종류.
CSV 파일, 당신이 할 수있는 반면, gedit를 함께 만들 수 있습니다.
그리고 당신은 갈 수 있어요.
그 외의 복잡가 없습니다.
>> 대신 해시 테이블의 트라이 사용 저장하기 위해 별도의 체인과 함께
연상 단어의 사전 pset5의.
그래서 이론적으로, 상승 시도 적어도, 무엇입니까?
일정 시간, 적어도 당신이있어 경우 개개의 각각에 해싱
당신 같은 단어 문자, pset5에있을 수 있습니다.
즉 다섯 해시, 여섯 수 있습니다 다섯이나 여섯이 있다면 해시
단어의 문자.
그리고 꽤 좋다.
그리고에 상한이 있다면 방법 긴 단어가 될 수 있습니다, 그건
참으로 점근 일정 시간.
>> 반면 별도의와 해시 테이블 그와 함께이 문제를 체인
데이터 구조의 일종이라는 당신의 알고리즘의 성능 보통
사물의 수에 따라 달라집니다 이미 데이터 구조.
그것은 확실히의 경우의 체인, 그것에 당신이 넣어 더 많은 물건
해시 테이블에, 그 이상 체인은 최악의 의미, 이동
경우, 당신이 찾고있을 것 모든 방법의 한 끝에
그 체인의 어느 효과적으로 선형 뭔가에 양도한다.
>> 이제, 실제로, 절대적 있었다 해시 테이블을 가진 경우 일
체인 대응보다 빠르다 트라이 구현.
하지만 그 사이에, 여러 가지 이유로의 시도는 전체를 많이 사용하는
메모리시킬 수있는, 사실, 느린 것들 아래로, 당신이 좋은하지 않기 때문에
캐싱이라는 무언가의 혜택 여기서 서로 가까이있는 것들
메모리에 액세스 할 수 있습니다 종종 더 빨리.
그리고 때때로 당신은 가지고 올 수 정말 좋은 해시 함수.
당신의 비트를 낭비 할 필요도 기억, 당신은 참, 할 수있을 것
빠르고없는 일을 찾아 나쁜로 선형.
>> 그래서 짧은 반드시 없었다 이 하나 또는 두 가지의과
우리가 찾고있는 특정 물건.
설득력 정말 아무것도 위쪽과 아래쪽으로
일반적으로 우리의 눈을 사로 잡은.
>> ROB 보덴 : 그래서 거꾸로, 우리는 한 그 자체로 받아 들일 "빨리." 당신
그것에 대해 뭔가를 말을했다.
이론적으로 빠른했다하더라도, 우리는 당신이 종류의 이해 것을 알고 있었다
그것은 1 0 있다고.
그리고 해시 테이블, 이론, 1 0이 아니다.
런타임에 대해 아무것도 언급 일반적으로 포인트는 당신 얻었다.
그러나 "더 빨리,"솔루션의 대부분에 시도가 있었다 된 큰 보드
솔루션보다 객관적으로 느린 즉, 해시 테이블이었다.
그래서 더 빨리 그 자체 정말 사실이 아니다.
>> 데이비드 J. 마란 : 돔 드 DOM DOM.
아마 실현하는 유일한 사람 그는이 이었어
오른쪽 발음 할 수?
>> ROB 보덴 : 실제로 몰랐다.
>> 데이비드 J. 마란 : 그것은 제 내 머리에 감.
>> ROB 보덴 :이 한 일을 해요.
OK.
그래서 이것은 당신이 그릴 수 있었다이다 당신과 비슷한 다이어그램 수도
과거 시험을 볼 수있다.
그래서 그냥이 살펴 보자.
그래서 HTML 노드에서, 우리는이 두 가지 어린이의 머리와 신체.
그래서 우리는 분기 - 머리와 몸을.
머리는 제목 태그가 있습니다.
그래서 우리는 제목이.
>> 이제 한가지 많은 사람들 잊었 이러한 텍스트 노드가 있다는 것입니다
이 트리 내에서 요소.
그래서 여기에 우리는 타원형으로 그들을 그리는 일이 이들로부터 구별하기
노드의 유형.
그러나주의 사항도 여기에 우리는 최고를, 중간, 하단은 끝나게됩니다
텍스트 노드.
그래서 사람들을 잊는 것은 다소이었다 일반적인 실수.
>> 몸은 세 아이가 - 이 세 가지의 div.
따라서 DIV, DIV, DIV 다음 텍스트 이들의 div의 노드 자식.
그건 꽤 많이입니다 그 질문에 대한.
>> 데이비드 J. 마란 : 그리고 그것은 주목할 가치, 우리는이에 연연하지 않더라도
우리가 보내는 시간의 세부 사항 순서가하는 자바 스크립트,,에
사실, 문제가 기술적.
그래서 머리에 몸 앞에 오는 경우 HTML, 그런 다음에 나타납니다
실제 DOM에서 몸의 왼쪽.
자신은 단지 참고로, 일반적으로하는지 문서 순서라는 것을 여기서
그것은 중요하지 않습니다.
그리고 당신은 파서를 구현 한 경우, 건물에 HTML을 읽는 프로그램
메모리에있는 나무까지, 정직하기, 그건 아마 직관적으로 무엇을 당신
어쨌든 - 위에서 아래로, 왼쪽에서 오른쪽으로.
>> ROB 보덴 : 그에 대한 질문?
내가 다음 하나를 수행해야합니까?
>> 데이비드 J. 마란 : 물론.
>> ROB 보덴 : OK.
그래서 이것은 버퍼 오버런입니다 공격 질문.
여기에서 인식 할 중요한 것은,이다 물론, 어떻게 수도 적 트릭
실행에이 프로그램 임의의 코드?
그래서 argv1, 첫 번째 명령 행 이 프로그램에 인수, 즉이 될 수 있습니다
임의의 길이.
그러나 여기에서 우리는 복사 방어 적이기를 사용하는 argv1, 어떤 여기 바있다.
우리는 인수로 전달하고 있습니다.
그리고 그것은 이름의 줄에 복용.
>> 그래서 우리는 줄을 memcpying입니다 이 버퍼 C에.
우리는 얼마나 많은 바이트를 복사하는?
잘하지만 바이트 바는 어떻게됩니까 그 인수의 길이를 사용.
그러나 C는 12 바이트 넓다.
그래서 우리는 명령 줄 인수를 입력하면 즉, 12 바이트보다 더 긴 시간, 우린
이 넘칠 것 특히 버퍼.
자, 어떻게 공격자는 속일 수 임의의 코드를 실행하도록 프로그램?
>> 그래서 여기에 기억 주요 foo는 호출된다.
그리고 다음 주 호출 foo는.
의이를 그려 보자.
그래서 우리는 우리의 스택이 있습니다.
메인은 ​​스택 프레임이 맨 아래에.
어떤 시점에서, 주요 통화 foo는.
음, 바로, 주요 통화 foo는.
그래서 foo는 자체 스택 프레임을 가져옵니다.
>> 지금, 어떤 점에서, foo는 반환 할 것입니다.
그리고 foo는 반환을했다, 우리는에서 알 필요가 주 우리의 내부 코드의 어떤 라인
알기 위해 있었던 곳 우리는 주에서 다시 시작해야합니다.
우리는 전체에서 foo는 호출 할 수 있습니다 다른 장소의 무리.
어떻게 우리가 여기서 반환하는 지 알고 있나요?
글쎄, 우리는 어딘가에 저장해야합니다.
>> 그래서 곳 바로 근처에, 우리는 저장 우리는 한 번에 반환해야하는 위치
foo는 돌아​​갑니다.
그리고 이것은 반환 주소입니다.
어떻게 공격자가 활용할 수 이런 사실은 그
이 버퍼 (C)가 저장되고,하자 바로 여기에 C는, 말한다.
그래서 우리는 C에 대한 12 바이트를 가지고있다.
이것은 C입니다.
그리고 이것은 푸즈 스택 링입니다.
악의적 인 사용자가 더 들어이 경우 12 바이트 이하 또는 그들이 명령을 입력
12 이상 라인 인수 문자는, 우리는거야
이 버퍼 오버 플로우.
>> 우리는 계속 할 수 있습니다.
그리고 어떤 시점에서, 우리는 멀리 갈 우리가 시작하는 것이 충분히
이 리턴 주소를 덮어 쓰기.
그래서 일단 우리는 리턴 주소를 덮어 즉, 때 foo는
반환, 우리는 어디를 반환하고 악의적 인 사용자로하는 말하고있다
그것은 무엇에 의해, 입력 값이 무엇이든지간에 문자는 사용자 입력.
그리고 악의적 인 사용자가되는 경우 특히 영리한, 그는이있을 수 있습니다
printDef있는 곳으로 돌아갑니다 함수 또는 malloc에​​있는 곳
기능, 그냥 아무 곳이나 임의의.
>> 그가 가지고 어떤 경우에 더 영리하다 사용자는 여기로 돌아갑니다.
그리고 당신은 실행을 시작 이러한 코드의 라인으로.
그래서 그 시점에서, 사용자가 입력 할 수 있습니다 그는이 지역에 원하는대로.
그는 완벽하게 제어 할 수있다 프로그램에.
그에 대한 질문?
그래서 다음 질문은 완료 같은 방법으로 foo는 다시 구현
더 이상 취약 없다.
>> 그래서 두 가지 방법이있다 이 작업을 할 수 있었다.
우리는 여전히 C를 가지고 길이 12 인.
이 작업을 변경 할 수 있습니다 솔루션의 한 부분으로.
우리는 또한 확인하는 검사를 추가 확실히 줄은 null이 아니었다.
당신은 필요하지 않았지만 그 전체의 신용에 대한.
그래서 우리는 먼저 확인하고 줄의 문자열 길이.
그러므로, 12보다 큰 경우에 실제로 복사하지 않습니다.
그래서 그것을 해결하는 방법 중 하나입니다.
>> 그것을 해결하는 또 다른 방법은 대신 C를 갖는 길이 만 12 수, 그것은이
길이 나 strlen (바)의 수.
그것을 해결하는 또 다른 방법은 실제로 그냥 돌아갑니다.
그래서 그냥 모두 없애 ​​먹은 경우 이, 당신은 모두 삭제 한 경우
코드 라인, 당신은 얻었을 테고 전체 신용이 기능 이후
실제로는 아무것도 달성하지 않습니다.
이 커맨드 라인을 복사있어 일부 배열에 인수
로컬 스택 프레임.
그리고 그 일이 반환됩니다.
그리고 무엇이든 그것을 달성은 사라지고.
그래서 수익은 충분했다 전체 신용을 얻는 방법입니다.
>> 데이비드 J. 마란 : 그렇진 정신 질문하지만 당 허용
그럼에도 불구하고 사양.
>> ROB 보덴 : 그 중 하나에 대한 질문?
한 가지는 당신 적어도 코드를 컴파일이 필요.
기술적으로는되지 않도록하더라도 취약한 코드가없는 경우
컴파일, 우리는 동의하지 않았다.
한 질문?
OK.
>> 데이비드 J. 마란 : 당신이 원하는 마십시오 이 제목을 말을?
>> ROB 보덴 : 호
>> 데이비드 J. 마란 : 그래서이 하나,이 좋은 소식이나 나쁜 소식 중 하나였다.
이것은 말 그대로 같은 문제입니다 첫 번째 퀴즈로.
그리고 그것은 거의 동일합니다 PSET1 같은 문제.
그러나 의도적으로 단순화 된 간단한 피라미드, 할 수있는 한
조금으로 해결 단순 반복.
정말, 우리는 무엇에지고 있었다 여기에, 너무 많은 로직이 아니었다
아마이 시점에서, 당신이있어 때문에 당신이 예전보다 훨씬 더 편안하게
루프 또는 왜 루프와 1 주일에, 하지만 정말 떨어져 애타게
당신은에 조금 익숙해 PHP는 단지 것에 대해 아니라고 개념
프로그래밍.
실제로 언어로서 사용될 수있다 명령 줄 프로그램을 작성할 수 있습니다.
>> 그리고 실제로, 그것은 우리가하려고했던거야 당신의주의에 그립니다.
이 명령 줄 PHP 프로그램입니다.
그래서 여기에 C 코드, 동안 올바른 C에서, PHP에 해결되지.
그러나 코드는 실제로 동일합니다.
당신은 퀴즈에 대한 솔루션을 비교하는 경우 퀴즈 1에 0, 당신은 그것을 찾을 수 있습니다
그것을 제외하고, 거의 동일의 정보 일부 달러 기호 및 용
데이터 유형의 부재.
특히, 우리가 여기에서 살펴 경우, 당신이, 우리는 반복하는 것을 볼 수 있습니다
경우, 1 ~ 7까지.
>> 우리는 0 인덱스를 할 수 있었다.
하지만 가끔은, 난 그냥 생각 것들에 대해 생각하는 정신적으로 쉽게
1-7.
당신이 하나의 블록을 원하는 경우에, 두 블록, 다음 세 가지, 다음
점, 점은, 일곱 점.
우리는 1 J 초기화되고있다 그 때 나는 최대에 계산.
그리고 여기에 모든 것이있다 그렇지 않으면 동일합니다.
그러나 메모의 가치는 몇 가지.
우리는 당신이 두 줄이 첫 번째 줄 goofily 오두막으로 명명 한,
날카로운 강타하십시오.
그리고 그것은 단지 경로를 지정, 프로그램 할 수있는 폴더
당신이 사용하고 싶은 것을 발견 이 파일을 해석합니다.
>> 그리고 그 후, 행, 과정은 PHP 모드로 전환을 의미한다.
그리고 맨 아래의 라인 종료 PHP 모드를 의미한다.
그리고 이것은으로, 일반적으로, 작동 언어를 해석했다.
당신이 쓰면 좀 짜증나 foo.php라는 파일에있는 프로그램입니다.
그리고 사용자는이 단지 이 프로그램을 실행하려면, OK, 기억 I
입력해야 "PHP 공간 foo.php을." 종류 만약 아무것도 성가신.
그리고 그것은 또한 밝혀 그 프로그램 모든없는 PHP에서 작성
즉, 사용자를위한 조명.
>> 그래서 당신은 완전히. PHP를 제거 할 수 있습니다 강의에서 기억합니다.
그리고 당신은 실제로. / foo는 작업을 수행 할 수있는 경우 당신은 그것을 만들기로 chmodded했습니다
실행.
그래서 chmod를 + X foo는 그렇게 할 것입니다.
그리고 당신은 또한 오두막을 여기에 추가하는 경우.
하지만 실제로는 문제가에지고 있었다 이런 식으로 뭔가를 인쇄.
아니 HTML, 확실히 더 C-코드, 그냥 PHP.
그래서 마일로 다음 문제 25에 반환.
그리고 25 년, 당신은 다음에게 주어진 했다 골격 코드,
아주 간단한 웹 페이지.
그리고 수분이 많은 부분 HTML 방향은 아래로했다 여기에, 우리는 몸의 내부 어디
입력의 고유 한 ID를 갖는 형태 이는 내부에 두 개의 입력, 하나
이름, 하나의 아이디어와 함께 버튼의 아이디어와 함께.
>> 첫 번째는, 텍스트를 입력했다 형의 두 번째 제출합니다.
그래서 우리는, 실제로 더 준 당신이 너무, 필요 이상으로 재료
너희들있는 옵션을 가지고 이 문제를 해결하기 위해.
당신은 엄격하게 필요하지 않습니다 이러한 모든 ID.
그러나 당신이 해결 할 수 있습니다 그것은 여러 가지 방법으로.
최대 상단에, 그 통지 목적은 트리거였다
이 같은 창 -
안녕하세요, 밀로! -
사용하는 브라우저에 뜹니다 경우, 초간단
추하지, 경고 기능.
그리고, 궁극적으로,이 아래로 비등 개념적으로 어떻게 든 수신하는
양식 클라이언트 측의 제출 어떻게 든하지 서버 쪽,
하여 해당 제출에 응답 사용자가 입력 한 값을 잡는
이름 필드에 입력 한 다음 경고의 몸 표시.
>> 그래서 당신이 할 수있는 한 가지 방법은 첨부 조금 보이는 jQuery를,
처음에는 문법적으로 곤혹.
당신은 순수 DOM 코드와 함께이 작업을 수행 할 수 있습니다 - ID에 의해 document.getelement.
그러나의이 버전에 대해 살펴 보겠습니다.
나는 중요한 몇 가지있다 줄 첫 번째.
그래서 하나, 우리는 어떤이 줄이 당신이 본되는 것과 동일
나는이 생각에, form2.html 주 9 클래스.
그리고 이것은 단지 실행 말하는 다음 코드를 할 때
문서가 준비가되어 있습니다.
이것은 중요한 것 때문 만 HTML 페이지는 위에서 읽기
왼쪽에서 오른쪽 하단.
>> 그러므로, 당신이 할하려고하는 경우 일부 DOM에 여기까지 코드에 뭔가
요소, 일부 HTML 태그는, 그 아래의 여기, 당신은 너무 빨리 그 일을하고,
이조차 가지고 있기 때문에 메모리로 읽어되었습니다.
그래서이 document.ready 말하여 라인은, 우리가 말을하는지,
여기에 몇 가지 코드, 브라우저입니다.
그러나 전체 때까지 실행되지 않습니다 문서 준비, 즉 DOM입니다
나무는 메모리에 존재합니다.
이쪽은 좀 더 구문의 경우, 간단
조금 다른, 내 말은, 잡아 그 고유 한 HTML 요소
식별자를 입력합니다.
즉, 어떤 해시 태그의 , 고유의 ID를 나타낸다.
그리고 제가 전화 했어요. 제출합니다.
>> 그래서. 여기서 제출 함수 그렇지이며 방법으로 알려진, 그건
왼쪽에있는 개체의 내부 내가 강조하지 않았다가 측면.
당신은 개체로 입력 생각이 경우 메모리에 - 참으로 그것은이다.
이 트리에서 노드의 -
. 수단을 제출할 때이 양식 이 ID가 제출, 실행
다음 코드.
난 상관 없어 무엇의 이름 기능은 내가 실행 해요입니다.
그래서 나는 여기 무엇을, 이전, 사용하고 람다 함수 또는 호출
익명 함수.
그것은 모든 지적 아니다 이 이름이없는 흥미로운 다른 것보다,
만 있다면 괜찮이다 지금까지 한 번 호출하는 것.
내부가 실제로 처리 양식의 제출.
먼저 변수를 선언 값이라고.
그리고 이것의 효과는 무엇인가 여기 부분은 지금 강조?
그에서 무엇을 하는가 나를 위해 높은 수준?
>> 청중 : 그것은 값을 가져옵니다 사용자는 아래의 HTML에하지 않았다.
그런 다음 해당 ID를 얻고, 그것의 값을 찾아 낸다.
>> 데이비드 J. 마란 : 그렇습니다.
그것은 누구의 고유 한 노드를 잡고 식별자는 이름입니다.
또한, 내부 값을 얻고있는 입니다, 아마, 어떤 사용자
그 사람이나 자신을 입력했습니다.
그리고, 그것은 저장하는의 변수는 값을했다.
여담으로, 당신은 또한 가질 수있다 조금 다르게 이런 짓을.
뭔가를 수행하여 완전히 허용 거짓말 VAR 값 가져
document.getElementById를.
조금의 이유 때문입니다 jQuery를 사용하지 지루한.
"이름". 값.
그래서 완전히 허용.
이 작업을 수행하는 여러 가지 방법. jQuery를 단지 좀 더 간결하고 경향이있다
확실히 더 인기 프로그래머들.
>> 지금, 나는 정신의 비트를하고 있어요 때문에 문제의 확인
문 우리는 명시 적으로 말했다 경우 사용자는 아직 입력하지 않은 자신의
경고를 표시하지 않는, 이름을 지정합니다.
하지만 당신은 단지로, 그 확인할 수 있습니다 에 대한 빈 문자열에 대한 검사
만약 거기에 인용 작자 거기에 실제로 아무 것도 없습니다.
하지만 견적 작자 같지 않은 경우에, 내가 경고를 호출 할.
그리고 여기에 흥미로운 부분입니다 우리는 더하기 연산자를 사용하고있는
자바 스크립트로 무엇을합니까?
연결합니다.
그래서 PHPs 도트 연산자처럼.
같은 생각, 약간 다른 구문.
그리고 난 그냥 문자열을 만드는거야 그 당신은 스크린 샷에서 본 -
안녕하세요, 운운.
>> 그리고 마지막 세부 사항이 있습니다.
왜 거짓 내부를 돌아 않습니다 이 익명 함수의?
>> 청중 : 값이 없습니다.
당신은 형태에 넣어.
값이없는 경우 그냥 말한다 빈에 해당, 다음 해.
그 제출에 빈 있었다.
>> 데이비드 J. 마란 : OK.
하지만 조심.
여기에 또 다른 사람은 없습니다.
그리고 그 반환 거짓이 밖에 조건 경우의.
그래서이는, false를 돌려 라인을 강조 무슨 일이 있어도 때 실행되지 않습니다
폼이 제출됩니다.
어떤이의 거짓 내부를 돌아 않습니다 이 호출로 이벤트 핸들러,,
문제의 이벤트 제출되고?
>> 청중 : 그것 때문에 한 번만 발생합니다.
>> 데이비드 J. 마란은 : 한 번만 발생합니다.
꽤.
그래?
>> 청중 : 그것은에서 양식을 방지 기본 동작에 제출
페이지를 다시로드를 만들 것입니다있다.
>> 데이비드 J. 마란 : 그렇습니다.
그래서, 그 용어가 여기에 제출 과부하 해요 내가 말하고 있기 때문에, 형태는
제출된다.
당신이 제안하지만, 사실은 아니다 진정한 HTTP 방식으로 제출되었습니다.
당신 때문에 제출을 클릭하면 우리의 가 onsubmit 핸들러, 우리는 차단하고
해당 양식 제출 말하자면.
우리는 우리의 일을하고있어 자바 스크립트 코드를.
하지만 의도적으로 false를 반환 해요 나는 일이 원치 않는 것을 때문에
분할 초 후 전체 양식입니다 자체 웹 사이트에 제출해야합니다
변경하여 키 값 쌍을 서버 같은 될 수있는 URL
Q = 고양이 또는 무엇이든 우리가했던, 예를 들어, 클래스.
나는 그런 일이 없죠 이에 대한 서버의 청취가 없습니다
제출을 형성한다.
그것은 순수 자바 스크립트 코드에서 이루어집니다.
심지어하지 않았다 이유입니다 동작은 폼에서 속성 때문에
이 위해하지 않을 지금까지 서버로 이동합니다.
>> 따라서 제출하는 것.
그러나 우리는 그 양식을 차단하고 제출 및 기본 예방
에 실제로 행동, 모든 방법을 서버로 이동합니다.
>> 청중 : 그래서 그것을 클라이언트 측을 유지.
>> 데이비드 J. 마란 : 유지 그것은 클라이언트 측.
정확히 맞아.
다음은 MySQL의 오이었다.
>> ROB 보덴 : OK.
그래서 첫 번째 질문은 일반적이었다 사람들을위한 거친.
나중에 사람들이 더 갔다지만.
그럼 당신은 올바른 데이터를 선택했다 이러한 열 모두 유형.
그리고이 두 가지가 일부를 가지고 그들에 대한 일이
선택은 어려워.
그래서 INT는 유효하지 않습니다 번호를 입력합니다.
12 자리 계정되는 이유 번호, INT는 충분히 크지 않다
전체 숫자를 저장합니다.
그래서 유효한 선택은 큰이었을 것입니다 당신이 알고 일어나는 경우 int는.
또 다른 선택은 있었다 길이 12의 문자 필드.
그래서 그 중 하나는 일 것입니다.
이자는 않을 것입니다.
>> 이제, 균형, 다시 pset7 생각합니다.
그래서 우리는 구체적으로 소수를 사용 주 또는 값을 저장 -
>> 데이비드 J. 마란 : 현금.
>> ROB 보덴 : 현금.
우리는 양을 저장하기 위해 소수점을 사용 사용자가 현재이 현금.
그래서 우리는 그렇게 할 이유는 기억하기 때문에, 수레.
정밀도 부동 소수점이있다.
그것은 정확하게 현금을 저장할 수 없습니다 우리와 같은 값은 여기에 원하는.
그래서 진수는 정확하게 저장할 수 , 할 말, 소수점 이하 두 자리.
균형, 우리가 원하는 이유 부동 소수점하지합니다.
>> 데이비드 J. 마란 : 그리고 또한,도하지만 그것은 기타 영리 수도
생각하는 상황, 어쩌면이 INT의 기회입니다.
난 그냥 추적합니다 동전에있는 것들.
우리는 명시 적으로 기본을 보여 주었다 때문에 , 100.00되는 값이
그냥 INT 될 수 있습니다 의미합니다.
너무 번호와 다른 미묘한 그것이 의미하지 않은 것이 었습니다
트릭 질문합니다.
하지만 기억이 MySQL에서 중간, 같은 C에서, 적어도에
제품은 32 비트입니다.
그리고 우리는 당신을 기대하지 않더라도 알고 정확히 얼마나 많은 숫자가
수단, 기억 않는 가장 큰 수 당신은 잠재적으로 나타낼 수
32 비트 숫자로 대략 무엇입니까?
>> 우리는 항상 어떤 수를 말합니까?
2 어떤 약이다, (32)에?
당신은 정확하게 알 필요가 없습니다.
그러나 약의 생활에 도움이됩니다.
그것은 약 40 억이다.
그래서 우리는 몇 번이라고했습니다.
나도 알아, 그 몇 번 말했다.
그리고 약 40 억이다.
그리고 좋은 규칙의 엄지 손가락 알고 있습니다.
당신은 8 비트, 256이있는 경우 마법의 숫자입니다.
당신은 32 비트, 4를 사용한다면, 억 정도일.
그래서 그냥 아래로 40 억 작성하는 경우, 당신은보다 적은 숫자의 것을 볼 수 있습니다
그 명확하지의 의미 (12) 캡처 할 수있을만큼 표현
12 자리 카드 번호.
>> ROB 보덴 : OK.
그래서 다른 사람이 더 갔다.
그래서 가정이 은행 $ 20 매월 부과
모든 계정에 대한 유지 보수 비용.
어떤 SQL 쿼리 할 수​​ 있습니다 은행 경우에도, 모든 조사에서 20 달러 공제
그것은 부정적인 균형 결과?
그러니까 기본적으로, 네 가지가 있습니다 쿼리의 주요 유형 -
삽입, 선택, 업데이트 및 삭제할 수 있습니다.
그래서 우리는 우리가있어 어떻게 생각하십니까 여기에 사용하려고?
업데이트합니다.
>> 그럼 살펴 보자.
그래서 여기에 우리가 업데이트하고 있습니다.
어떤 테이블 우리는 계정을 업데이트하는?
그래서 계정을 업데이트.
다음 구문을 말하는 계정에 우리가 업데이 트하고 있습니다?
음, 우리는 동일한 밸런스를 설정하고 균형 마이너스 20의 현재 값.
그래서이 모든 행을 업데이트합니다 계정의 감산
균형에서 20달러.
>> 데이비드 J. 마란 : 여기에 일반적인 실수, 우리는 때때로 용서에도 불구하고,
실제로 여기에 PHP 코드를 가지고 있었다 쿼리 함수를 호출하거나 퍼팅
모든 따옴표 그 거기에 필요하지 않았다.
>> ROB 보덴 : MySQL이 있음을 기억하십시오 PHP는 별도의 언어.
우리는 PHP에서 MySQL의를 작성하는 일이.
그리고 PHP는 다음을 보내는 MySQL 서버에 이상.
에 순서대로하지만 당신은 PHP를 필요로하지 않는다 MySQL 서버와 통신 할 수 있습니다.
>> 데이비드 J. 마란 : 그렇습니다.
달러 기호와 그래서 변수 없음 이 컨텍스트에 있어야합니다.
그것은 단지 수학의 모든 작업을 수행 할 수 있습니다 데이터베이스 자체 내에서.
>> ROB 보덴 : OK.
그래서 다음 중 하나.
이 다음 중 하나인가?
그래.
어떤 SQL 쿼리 할 수​​ 있습니다 은행에 따라서 그것의 계좌 번호를 검색
부유 한 고객과 그 1,000 이상 잔액?
따라서 네 가지 유형 중 어느 우리는 여기에서 원하는거야?
선택합니다.
그래서 우리는 선택합니다.
우리는 무엇을 선택 하시겠습니까?
우리가 선택하는 어떤 열 하시겠습니까?
우리는 구체적으로 할 것 번호를 선택합니다.
하지만 스타, 우리 말한다면 또한 받아 들였다.
>> 그래서 테이블에서 번호를 선택?
계정.
그리고 우리는 조건 싶어?
경우 1,000보다 더 큰 균형.
우리는 또한 더 허용 같거나.
마지막 하나.
어떤 SQL 쿼리 할 수​​ 있습니다 은행 가까운, 즉, 모든 계정을 삭제하는
0 원 밸런스가?
그래서 네하는 우리는 사용하고 싶은 것?
삭제합니다.
그래서 구문?
어떤 테이블에서 삭제?
계정.
그리고 상태에있는 우리는 삭제할 -
잔액이 0 인 곳.
그래서 계정에서 모든 행을 삭제 잔액이 제로입니다.
이들의 질문에?
큐를 원하십니까?
>> 데이비드 J. 마란 : 큐 가이드.
그래서이 하나, 우리는 당신에게 약간을 준 우리가 탐구 익숙한 구조
구조체와 함께 클래스 비트, 데이터이었다
정신 관련 구조.
큐와 생각의 차이는 우리는 어떻게 든 기억한다는 것을 누구
대형에서, 대기열의 앞쪽에 있었다 우리는 더 만들 수있는 부분 있도록
메모리의 효율적인 사용, 적어도 우리는 배열을 사용한 경우.
>> 때문에 리콜, 우리는 배열이있는 경우, 경우, 예를 들어,이 앞면이다
큐, 여기 큐에 들어갈 경우, 다음 사람이 줄을 가져옵니다
내 뒤에 내 뒤에 나,,, 뒤에 한 사람이 선에서 단계, 당신
수 있었다, 우리는 우리의 인간을 본대로 클래스의 자원 봉사자, 모두가
이러한 방식으로 시프트.
그러나 일반적으로, 모든 사람이 수행 한 뭔가 시간을 최대한 활용하지
프로그램에 있기 때문에 그것은 의미 당신의 알고리즘은 무엇에서 실행되는
점근 실행 시간?
그것은 선형입니다.
>> 그 종류의 바보가 된 기분.
라인에있는 다음 사람이 옆에 있다면 에 가기로되어있어 사람
저장, 그들은 모두이 없습니다 함께 이동합니다.
그냥 그 사람이있는 지라 할 수 있도록 시간은, 예를 들어 오면.
그래서 우리는 거기에 약간의 시간을 절약 할 수 있습니다.
그리고 이렇게하는 그 생각, 그 수단 그 큐의 헤드 또는
큐의 전면 예정 점차적으로 더 깊고 더 깊은 이동
배열에 결국 수도 우리를 사용하는 경우 실제로 주위에 포장
사람을 저장하는 배열 이 큐에.
그래서 당신은 거의 생각할 수 원형 데이터로 배열
그런 의미에서 구조.
>> 그래서 어떻게 든 추적 할 필요가 그것의 크기 나 정말 끝
그리고 다음의 시작이다.
그래서 우리는 당신이 선언 할 것을 제안 하나의 큐, 호출
그것은 q를 하나의 편지.
그 다음 우리는 전면이 될 것을 제안 제로 것을 초기화 크기
0으로 초기화.
>> 그래서 지금, 아무것도 없어 해당 큐의 내부.
그리고 우리는 완료하도록 요청 아래의 대기열의 구현
함수에 N을 추가하는 방식 다음 질문의 끝과는 true를 반환합니다.
그러나 Q 전체 부정적이면, 함수 대신 false를 반환해야합니다.
그리고 우리는 당신에게 몇 가지를 준 가정.
하지만 그들은 정말 기능적 아니에요 관련, 그냥 부울이 존재
기술적으로, 부울하지 않습니다, 때문에 당신이 포함하지 않는 C에 존재
특정 헤더 파일.
그래서 그냥 확인이 확인되었다 어떤이는 속임수 없습니다
일의 질문 종류.
>> 그래서 대기열, 우리는 샘플에서 제안 다음과 같은 솔루션을 구현합니다.
하나, 우리는 먼저 용이성을 확인, 낮은 교수형 과일.
큐는 전체 또는 숫자 인 경우 그 삽입하려는 것은 작
우리가 말했다 제로보다 문제의 사양해야
우리는 원하기 때문에, 허용되지 음수가 아닌 값을, 당신은해야
다만 즉시 false를 반환합니다.
그래서 몇 가지 상대적으로 쉽게 오류 검사.
당신은 그 실제를 추가 할하지만 경우 수, 당신은 약간의 작업을 수행했다
여기에 생각.
좀 짜증나 곳이 있습니다 정신적으로, 당신이해야하기 때문에
랩 어라운드를 처리하는 방법을 알아낼.
>> 그러나 아이디어의 세균이 여기에 해당이의의 우리의 관심은 랩 어라운드입니다
자주 모듈러 산술는 의미와 모드 연산자 %의 측면,
당신은 더 큰 값에서 갈 수있는 곳 다시 0으로 다음 하나, 둘,
세 후 다시 주변에 제로로, 하나, 둘 등 세 및
또 다시.
그래서 우리는이 일을 제안한 방법은 우리는에 인덱싱 할 않는 것이
숫자 위치라는 배열 우리 정수는 거짓말.
그러나 거기에 도착하기 위해, 우리는 먼저 수행 할 큐의 크기는하지만, 무엇이든
그 다음에 추가 어떤 목록의 전면입니다.
그리고 그 효과는 우리를 넣어하는 것입니다 오른쪽 큐의 위치와
생각하지 그 라인에있는 첫 번째 사람 시작 부분에, 어떤 그 또는
그녀는 절대적이 될 수 있다면 우리 또한 모두를 이동했다.
그러나 우리는 단지 작품을 만드는 우리 자신을 위해 우리가 쓴다면
특정 경로입니다.
>> 그래서 우리는 비교적 간단하게 할 수 있습니다.
우리는 기억해야합니까 우리 단지 큐에 int를 추가했다.
그리고 우리는 단지 true를 반환.
한편, 디큐, 우리는 요청 당신은 다음을 수행합니다.
이러한 방식을 구현하는 것이 그것을 대기열에서 제외하는, 즉, 삭제 해 돌려줍니다
큐의 앞에 INT.
INT를 제거하기 위해서는 충분 그것을 잊지.
당신은 비트를 재정의 할 필요가 없습니다.
그래서 사실은 아직 거기.
그냥 하드 드라이브에있는 데이터와 같은, 우리는 단지 사실을 무시하고
그것은 지금 거기 있다고.
Q가 비어있는 경우에, 우리는해야 대신 음의 1을 반환합니다.
그래서 이것은 임의 느낀다.
왜 마이너스 1을 반환 대신 거짓의?
그래.
>> 청중 : Q가 저장됩니다 양의 값.
당신은 양의 값을 저장하기 때문에 질문에, 음의 오류입니다.
>> 데이비드 J. 마란 : OK, 사​​실.
우리는 긍정적 인 저장하고 그래서 때문에 값 또는 0, 그것은 미세의
감시와 같은 음의 값을 반환 값, 특수 기호.
하지만, 거기에 역사를 다시 작성하고 때문에 우리는하고있는 이유
음이 아닌 값을 반환 우리가 원하기 때문입니다
센티넬 가치가있다.
그래서보다 구체적으로, 왜 그냥 오류의 경우에 false를 반환?
그래.
>> 청중 : 당신은 실패했다 정수를 반환합니다.
>> 데이비드 J. 마란 : 그렇습니다.
C가 얻는 곳이 있습니다 아름다운 구속.
당신은 당신이려고하고 말을하는 경우 int를 반환합니다, 당신이있어
int를 반환합니다.
당신은 공상을하고 돌아 시작할 수 없습니다 부울 또는 float 또는
문자열이나 뭐 그런.
이제, 그 사이에, 자바 스크립트, PHP와 다른 언어를 할 수있는, 사실,
당신은 다른 반환 한 값의 종류.
그리고 실제로 도움이 될 수있는 당신은 양의 정수, 0을 반환 할 수 있습니다,
음의 정수, 또는 허위 또는 널 (null) 심지어 오류를 의미합니다.
그러나 우리는 필요가 없습니다 C.의 다양성
>> 그래서 디큐와 함께, 우리 이다 할 것을 제안 -
>> ROB 보덴 : 당신은 false를 반환 할 수 있습니다.
그것은 해시 그냥 거짓이야 제로 거짓을 정의합니다.
그래서 당신은 false를 반환하는 경우, 당신은 값을 반환한다입니다.
제로는, 우리의 큐에 유효한 것입니다 음의 1은없는 반면, 경우
거짓은 음수 1로 일어났다.
그러나 당신은해야하지 알고해야합니다.
>> 데이비드 J. 마란 : 때문입니다 이유는 말하지 않았다.
>> ROB 보덴 :하지만 그것은 사실이 아니었다 당신은 false를 반환 할 수 없습니다.
>> 데이비드 J. 마란 : 물론.
그래서 디큐, 우리가 받아 들일 수있는 알 인수 무효.
우리가하지 않은 때문에 그건 안으로 아무것도 전달
우리는 단지 요소를 제거 할 큐의 앞에.
그렇다면 우리는이 일에 대해 갈 수 있을까요?
음, 첫 번째,이 해 보자 빠른 상태 검사.
큐 크기가 0이면, 거기 수행해야 할 작업이 없습니다.
1 음을 반환합니다.
완료.
그래서 내 프로그램의 몇 줄입니다.
그래서 네 개의 선이 남아있다.
>> 그래서 나는 여기가 감소하기로 결정 크기.
효과적으로 사이즈를 감소시키는 내가 잊고 있다는 것을 의미
뭔가가 있습니다.
그러나 나는 또한 업데이트해야 할 곳 숫자의 전면입니다.
그래서 그렇게, 나는 필요 두 가지 작업을 수행합니다.
먼저 어떤 번호를 기억해야합니다 대기열의 앞쪽에 있고,
나는 그 물건을 반환 할 필요가 있기 때문이다.
그래서 내가 실수로 잊고 싶지 않아 그것에 대해 다음을 덮어 씁니다.
난 그냥 INT에 기억하겠습니다.
>> 그리고 지금, 나는 업데이트 할 q.front은 +1을 q.front합니다.
이의 첫 번째 사람이었다 그렇다면 라인은, 지금은에 1을 더한 수행 할
라인에있는 다음 사람을 가리 킵니다.
하지만 난 그 랩 어라운드를 처리 할 수​​있다.
용량은 해외 일정하면, 그 날 확인 할 수 있도록거야
나는의 맨 마지막 사람에게 포인트로 라인, 모듈 작업이 나타납니다
에서 0으로 나를 다시 큐의 앞.
그리고 여기에 랩 어라운드를 처리합니다.
그리고 나는 N 리턴로 진행합니다.
>> 이제, 엄밀하게 말하면, 나는하지 않았다 N을 선언해야한다.
나는 그것을 잡아 보관하지 않았다 임시 값이므로
아직.
그래서 난 그냥 오른쪽 연산을 수행 할 수 전 머리가 돌아갑니다
큐의.
하지만 난 그냥이 더 명확하다고 생각 실제로 INT를 잡아, 넣어
N에서 다음 그 반환 명확성뿐만
꼭 필요한 것은.
잠깐만.
그들은 모두 내 머리에 발음 할 수있어.
>> ROB 보덴 : 그래서 첫 번째 질문 이진 트리의 문제입니다.
그래서 첫 번째 질문은 우리가있어입니다 이 번호가 없습니다.
그리고 우리는 어떻게 든에 삽입 할 이러한 노드가되도록
유효한 이진 검색 트리입니다.
그래서 한 가지 기억해야 이진 검색 나무는 그렇지 않은 것입니다
그냥 왼쪽에있는 것은 덜하고 일이
오른쪽이 더 크다.
그것은 할 필요가있는 전체 트리에 왼쪽은 덜하고, 전체 트리
오른쪽으로 더 크다.
>> 그런 다음 상단에 여기에 34을 넣어, 그렇다면 나는 여기에 20을 넣어, 그래서 그렇게 유효한의
지금까지, 때문에 34 여기.
(20)는 왼쪽으로 이동합니다.
그래서 덜합니다.
하지만 난 다음, 여기에 59을 넣어 할 수 없기 때문에 59은 20의 오른쪽에, 비록
그것은 (34)의 왼쪽에 아직.
염두에 제약 조건 때문에, 아마이 문제를 해결하는 가장 쉬운 방법
문제는 단지 종류 이 숫자의 -
그래서 20, 34, 36, 52, 59, 106.
그리고 그 삽입 왼쪽에서 오른쪽으로.
>> 그래서 20은 여기에 표시됩니다.
(34)는 여기에 표시됩니다.
(36) 여기에 표시됩니다.
52, 59, 106.
그리고 당신은 또한 함께 알 수있을 일부를 연결하고 실현,
오, 충분히 숫자가없는, 대기 여기에이 서류를 작성.
그래서 reshift 필요가있는 무엇을 내 경로 참고가 될 것입니다.
경우에, 마지막 3에있는 것을 알 수 왼쪽에서 오른쪽으로 읽기, 그것은이다
증가하는 순서.
>> 그래서 지금, 우리는 선언 할 것을 구조체에 대한 될 것입니다
이 트리의 노드.
이진 트리에 그래서 우리는 무엇을해야합니까?
그래서 우리는 형식의 값이 중간, 그래서 어떤 int 값.
우리라는 것을 모르는 솔루션의 그것 -
N 값 int.
우리는 왼쪽 자식에 대한 포인터가 필요 오른쪽 자식에 대한 포인터.
그래서 다음과 같이 할 것입니다.
그리고 사실은 전에 볼 것이다 이중 연결 않았을 때
목록 물건, 그래서 통지 -
나는 스크롤해야 할거야 모든 다시 길을 내려 문제 11.
>> 그래서,이 동일하게 나타남 통지 우리는이를 호출하는 일을 제외하고
다른 이름.
우리는 여전히 정수를이 값과 두 개의 포인터.
그것은 처리하는 대신 단지의 다음 일을 가리키는 포인터로
이전 것은, 우리는 치료 중입니다 포인터는 왼쪽 자식을 가리 키도록
오른쪽 아이.
OK.
그래서 우리의 구조체 노드입니다.
그리고 지금, 유일한 기능은 우리가 필요 이 이송됩니다에 구현하는
우리는 나무, 인쇄에 가고 싶어 순서에 따라 트리의 값 중.
>> 그래서 여기에 찾고, 우리는 인쇄 할 것 중 20, 34, 36, 52, 59, 및 106.
우리는 어떻게 그 작업을 수행합니까?
그래서 매우 유사하다.
당신은 과거 시험에서 본 경우 문제 당신은 인쇄하고 싶었
그 사이에 쉼표로 전체 트리 모든 것을, 심지어는 사실은
보다 쉽게​​.
그래서 여기에 솔루션입니다.
이것은 매우 쉽고 재귀를 한 경우에.
사람이 시도 나도 몰라 반복적으로 할 수 있습니다.
>> 그러나 첫째로, 우리는 우리의 기본 경우가 있습니다.
어떤 루트가 null의 경우는?
그런 다음 우리는 단지 반환 될 것입니다.
우리는 아무것도 인쇄하지 않습니다.
그렇지 않으면 우리는 통과 할거야 재귀 적으로 내려.
전체 왼쪽 서브 트리를 인쇄합니다.
그래서 적은 모든 인쇄 나의 현재의 값보다.
그리고 나는 나 자신을 인쇄하는거야.
그리고 나서 아래로 재귀거야 내 전체 오른쪽 서브 트리, 그래서 모든 것을
내 값 이상.
그리고 이것은 인쇄 할 것입니다 순서에있는 모든 중.
어떻게이 사실에 대한 문의 이 작업을 수행합니다?
>> 청중 : 나는 질문이 [청취]에.
>> ROB 보덴 : 접근하는 그래서 하나의 방법 모든 재귀 문제는 단지 생각하는 것입니다
그것은 마음에 대해 생각해야 에 대한 모든 코너 케이스.
그래서 우리가 원하는 것을 고려 이 전체 트리를 인쇄 할 수 있습니다.
그래서 우리 모두가 관심을 모으는 이 특정 노드 -
36.
재귀 호출, 우리는 척 사람들은 작동합니다.
그래서 여기,이 재귀 호출 옆으로, 우리 생각도없이
그것에 대해, 단지 왼쪽을 통과 세 이미 (20)를 인쇄 상상
우리 34.
그리고 그 때 우리는 결국 재귀 에 이송 전화
오른쪽이 제대로 인쇄됩니다 52, 59, 그리고 우리 (106)를 포함한다.
>> 그래서이 20, 34를 인쇄 할 수 주어지고, 다른 하나는, 52, 59, (108)을 인쇄 할 수있다
우리가 할 수 있어야 할 필요가있는 프린트 그 중간에 해결할.
그래서 우리 앞에 모든 것을 인쇄 할 수 있습니다.
해결할 인쇄, 그래서 현재 노드 인쇄 36, 일반의 printf 다음
우리 후 모든 인쇄 할 수 있습니다.
>> 데이비드 J. 마란 :이 곳 재귀입니다 정말 아름다운 가져옵니다.
그것은 믿음의 놀라운 도약 곳 당신은 작업의 가장 작은 조금을.
그리고 당신은 할 사람 다른 나머지를.
그리고 다른 사람 당신은, 아이러니하게도입니다.
심각한 브라우니 점, 그렇다면 당신은 질문에 스크롤 -
>> ROB 보덴 : 질문에?
>> 데이비드 J. 마란 : 그리고에 약간 아래로 여기서 숫자는 알고 있나요
이 번호는 온?
>> ROB 보덴 : 나는 말 그대로 아무 생각이 없습니다.
>> 데이비드 J. 마란 : 그들은 표시 퀴즈를 통해.
>> 독자 : 그들은 같은 번호입니까?
>> 데이비드 J. 마란 : 그 번호.
작은 부활절 달걀.
그래서 온라인으로 보는 당신의 사람들을 위해 가정, 당신은에 전자 우편을 통해 저희에게 말할 수있는 경우
heads@CS50.net 무엇을 의미 이러한 반복되는 6 자리 숫자가의
퀴즈 1을 통해, 우리는 당신을 샤워한다 마지막에 놀라운 관심과 함께
강의 및 스트레스 공.
미묘한, 니스.
>> ROB 보덴 : 어떤 마지막 질문 퀴즈에 아무것도에 대한?