1 00:00:00,000 --> 00:00:08,090 2 00:00:08,090 --> 00:00:09,810 >> JASON HIRSCHHORN: Bem-vindo, todos, para a semana 10. 3 00:00:09,810 --> 00:00:15,130 Esta é uma semana emocionante porque amanhã é Teste 1, o que teremos 4 00:00:15,130 --> 00:00:16,400 para em um segundo. 5 00:00:16,400 --> 00:00:21,770 Hoje, na seção, estamos indo para ir mais alguns recursos para o teste, e 6 00:00:21,770 --> 00:00:24,890 então eu vou responder a toda e qualquer perguntas que vocês têm. 7 00:00:24,890 --> 00:00:27,880 E vamos finalmente acabar com alguns problemas práticos. 8 00:00:27,880 --> 00:00:30,940 >> Podemos passar toda a seção responder a perguntas. 9 00:00:30,940 --> 00:00:33,240 Podemos passar toda a seção passando por cima de problemas práticos. 10 00:00:33,240 --> 00:00:36,890 Nós apenas expandir-se para preencher o espaço e tempo que temos. 11 00:00:36,890 --> 00:00:40,590 >> Então eu coloquei esta lista a cada semana, mas é particularmente importante nesta semana. 12 00:00:40,590 --> 00:00:44,980 Para estudar, se você não tiver já começou, oh boy. 13 00:00:44,980 --> 00:00:46,400 Mas espero que você começou já. 14 00:00:46,400 --> 00:00:50,710 E você está passando os materiais e recursos listados aqui. 15 00:00:50,710 --> 00:00:54,300 Eu recomendo um número destes. 16 00:00:54,300 --> 00:00:58,780 >> Em particular, notas de aula são extremamente importante e útil. 17 00:00:58,780 --> 00:01:02,880 O study.cs50.net fornece uma grande cartilha sobre um monte de 18 00:01:02,880 --> 00:01:04,250 os tópicos que coberto. 19 00:01:04,250 --> 00:01:07,810 Ele também tem alguns grandes praticar problemas. 20 00:01:07,810 --> 00:01:11,260 E então, o Google é grande, também. 21 00:01:11,260 --> 00:01:12,360 Eu não sei o que você usá-lo. 22 00:01:12,360 --> 00:01:14,090 Mas usar o Google, também. 23 00:01:14,090 --> 00:01:16,680 >> Estenda a mão para mim, se você tem alguma perguntas, comentários ou preocupações. 24 00:01:16,680 --> 00:01:19,420 Olhar sobre a sessão de revisão slides de ontem à noite. 25 00:01:19,420 --> 00:01:21,540 Ou, se você tiver algum tempo, assistir ao vídeo. 26 00:01:21,540 --> 00:01:24,930 Eles fornecem um monte de útil material e informação. 27 00:01:24,930 --> 00:01:29,730 E tentar cobrir, se não todos, muitos os tópicos que cobrimos e que você 28 00:01:29,730 --> 00:01:32,610 pode ver no quiz. 29 00:01:32,610 --> 00:01:35,590 >> Falando do questionário, que será amanhã. 30 00:01:35,590 --> 00:01:37,260 Ele tem 75 minutos de duração. 31 00:01:37,260 --> 00:01:40,740 Muitos de vocês estão levando isso em 1 horas, e alguns de vocês estão 32 00:01:40,740 --> 00:01:42,740 levando-o às 5:30. 33 00:01:42,740 --> 00:01:45,300 Para o tempo que você está tomando-o eo local que você está tomando isso, certifique-se 34 00:01:45,300 --> 00:01:49,400 você verifique o documento na página inicial CS50.net. 35 00:01:49,400 --> 00:01:54,340 >> Lembre-se que você pode obter um 8 1/2 11 por folha para levar com você. 36 00:01:54,340 --> 00:01:57,310 Muitas vezes, as pessoas não usam esse folha durante todo o teste. 37 00:01:57,310 --> 00:01:59,740 Mas, realmente, é uma incrivelmente ferramenta de estudo útil. 38 00:01:59,740 --> 00:02:04,370 Então, juntando essa folha é o que Passei provavelmente três ou quatro horas 39 00:02:04,370 --> 00:02:07,110 fazendo quando eu estava estudando para CS50 e que era de longe o mais útil 40 00:02:07,110 --> 00:02:08,740 maneira que eu poderia estudar para o quiz. 41 00:02:08,740 --> 00:02:10,949 Assim, mesmo se você tem algumas outras pessoas da guias de estudo para olhar e 42 00:02:10,949 --> 00:02:14,740 usar como referência, eu recomendo fazer o seu próprio guia de estudo, colocando 43 00:02:14,740 --> 00:02:15,490 essas coisas juntos. 44 00:02:15,490 --> 00:02:17,335 Isso realmente ajuda a aprender todo o material. 45 00:02:17,335 --> 00:02:20,270 46 00:02:20,270 --> 00:02:24,810 >> Por último, mas não menos importante nesta seção, após o teste de amanhã há uma 47 00:02:24,810 --> 00:02:25,940 mais palestra - 48 00:02:25,940 --> 00:02:26,960 próxima segunda-feira. 49 00:02:26,960 --> 00:02:30,430 Há mais uma seção, não na próxima Terça-feira antes de Ação de Graças, mas o 50 00:02:30,430 --> 00:02:31,630 Terça-feira depois que. 51 00:02:31,630 --> 00:02:36,600 Estaremos reunidos para uma final adeus festa e também fazer alguma legal 52 00:02:36,600 --> 00:02:41,530 coisas para se vocês animado sobre mais estudos em ciência da computação. 53 00:02:41,530 --> 00:02:45,040 >> Há mais um projecto, mais uma justo, mais uma maratona hacker. 54 00:02:45,040 --> 00:02:47,900 Estamos chegando ao fim de CS50, que é emocionante - 55 00:02:47,900 --> 00:02:50,950 mas também, se você é como me, um pouco triste. 56 00:02:50,950 --> 00:02:53,950 Antes de eu seguir em frente, alguém tem qualquer dúvida sobre o que 57 00:02:53,950 --> 00:02:55,200 cobrimos até agora? 58 00:02:55,200 --> 00:03:02,760 59 00:03:02,760 --> 00:03:08,730 >> OK, bem, vamos passar por cima de algumas questões que você tem para o quiz e tópicos 60 00:03:08,730 --> 00:03:09,960 podemos cobrir. 61 00:03:09,960 --> 00:03:11,540 Portanto, esta é uma lista que eu coloquei. 62 00:03:11,540 --> 00:03:15,500 Ele não é de forma exaustiva, mas espero venha a refrescar sua memória, se você 63 00:03:15,500 --> 00:03:20,310 tem alguma dúvida sobre qualquer um destes tópicos, ou se você tiver dúvidas sobre 64 00:03:20,310 --> 00:03:23,260 problemas práticos de quizzes nos últimos anos. 65 00:03:23,260 --> 00:03:27,470 >> Eu tinha algumas perguntas que eram por e-mail para mim, mas eu quero adiar 66 00:03:27,470 --> 00:03:29,490 sobre aqueles por um segundo. 67 00:03:29,490 --> 00:03:34,570 Alguém tem alguma dúvida, problemas que não entendia, 68 00:03:34,570 --> 00:03:38,100 respostas que eles não entendiam para começarmos? 69 00:03:38,100 --> 00:03:39,520 Avi. 70 00:03:39,520 --> 00:03:41,585 >> AUDIÊNCIA: Você pode apenas passar por cima DOM e Ajax realmente rápida? 71 00:03:41,585 --> 00:03:46,540 Como, o que precisamos saber ou deveria entender sobre eles? 72 00:03:46,540 --> 00:03:49,750 >> JASON HIRSCHHORN: Eu vou responder geralmente essa questão da, o que eu 73 00:03:49,750 --> 00:03:52,100 precisa saber sobre determinado assunto x? 74 00:03:52,100 --> 00:03:55,280 Porque eu tenho a sensação de que muitos de vocês vão me perguntar isso, ou são 75 00:03:55,280 --> 00:03:56,570 curioso sobre isso. 76 00:03:56,570 --> 00:04:02,920 Então, na medida em que o tema foi coberto de aula, ou seção, ou em 77 00:04:02,920 --> 00:04:06,460 study.cs50.net, um conjunto de problemas, você deve estar familiarizado com ele. 78 00:04:06,460 --> 00:04:10,580 >> Assim você não precisa saber todos os tipos de tag que está disponível em HTML ou 79 00:04:10,580 --> 00:04:15,950 todo o tipo de atributo ou propriedade você pode dar algo em CSS. 80 00:04:15,950 --> 00:04:20,204 Mas se você viu em um exemplo de aula, se você viu em um problema 81 00:04:20,204 --> 00:04:23,290 conjunto, provavelmente você deve estar familiarizado com ela, particularmente coisas que você viu 82 00:04:23,290 --> 00:04:24,260 na palestra. 83 00:04:24,260 --> 00:04:28,510 Então, nós discutimos o documento modelo de objeto de um pouco em 84 00:04:28,510 --> 00:04:30,530 seção, ainda mais em palestra. 85 00:04:30,530 --> 00:04:32,990 Você deve estar familiarizado com que grande parte dela. 86 00:04:32,990 --> 00:04:34,750 >> E você deve estar familiarizado com Ajax na mesma medida. 87 00:04:34,750 --> 00:04:38,105 Nós nunca vimos incrivelmente avançado ou exemplos complicados de Ajax, de modo 88 00:04:38,105 --> 00:04:40,920 você não vai ser solicitado fazer algo incrivelmente complicado. 89 00:04:40,920 --> 00:04:45,180 Mas você deve estar se perguntado, como faço fazer uma chamada Ajax usando jQuery? 90 00:04:45,180 --> 00:04:47,350 Que é algo que você já viu um número de vezes antes, tanto no 91 00:04:47,350 --> 00:04:51,370 rever sessão e na palestra, e é apenas de duas linhas ish de código. 92 00:04:51,370 --> 00:04:53,190 >> Então, isso é algo que deveria estar familiarizado. 93 00:04:53,190 --> 00:04:55,550 Mas, novamente, para todos esses tópicos, se você já viu 94 00:04:55,550 --> 00:04:59,220 antes, é um jogo justo. 95 00:04:59,220 --> 00:05:01,540 E podemos perguntar-lhe - obviamente, estamos vai pedir coisas que você 96 00:05:01,540 --> 00:05:02,340 não tenha visto antes. 97 00:05:02,340 --> 00:05:04,240 Codificação algo que você não tem visto antes. 98 00:05:04,240 --> 00:05:06,570 O que não quer dizer que você não tem visto as ferramentas para resolver 99 00:05:06,570 --> 00:05:08,120 esse problema antes. 100 00:05:08,120 --> 00:05:09,200 Você já viu essas ferramentas. 101 00:05:09,200 --> 00:05:11,160 >> Por exemplo, no Teste 1, se você precisa codificar strlen. 102 00:05:11,160 --> 00:05:12,790 Nós não codificado strlen antes. 103 00:05:12,790 --> 00:05:14,980 Mas você sabe como usar um loop for, você sabe como usá-se condições. 104 00:05:14,980 --> 00:05:18,570 Você sabe como escrever variáveis ​​em C. Vai ser a mesma coisa aqui. 105 00:05:18,570 --> 00:05:22,350 Você não vai ser convidado a fazer qualquer coisa que você não tenha visto antes, mas 106 00:05:22,350 --> 00:05:25,150 você pode ser solicitado para, tipo, colocar algo juntos de uma nova maneira, ou 107 00:05:25,150 --> 00:05:27,650 resolver um tipo diferente de problema. 108 00:05:27,650 --> 00:05:30,830 >> Desculpe, não foi específico para o seu pergunta, mas eu não posso responder sobre 109 00:05:30,830 --> 00:05:34,390 cada tópico único que você fazer ou não precisa de saber. 110 00:05:34,390 --> 00:05:36,830 Mas também, muito, última coisa sobre isso. 111 00:05:36,830 --> 00:05:42,900 Nós gastamos muito mais tempo em listas de links que temos no Ajax. 112 00:05:42,900 --> 00:05:46,160 Você não usou Ajax em um conjunto de problemas. 113 00:05:46,160 --> 00:05:48,510 Uma das características centrais do que conjunto de problemas que estava listas de links. 114 00:05:48,510 --> 00:05:50,370 E passamos muito tempo em palestra e seção de usá-lo. 115 00:05:50,370 --> 00:05:57,080 >> Assim, as probabilidades são lista de links vai aparecer mais muitas vezes no teste do que Ajax vontade. 116 00:05:57,080 --> 00:06:00,390 Ou as perguntas que têm a ver com a ligação lista valerá mais pontos. 117 00:06:00,390 --> 00:06:03,520 Então, certamente você pode se concentrar e estreito em em coisas que são mais 118 00:06:03,520 --> 00:06:06,720 provável que venha, porque temos passei mais tempo com eles. 119 00:06:06,720 --> 00:06:08,700 >> OK quaisquer outras perguntas? 120 00:06:08,700 --> 00:06:09,890 É. 121 00:06:09,890 --> 00:06:13,660 >> AUDIÊNCIA: Podemos falar sobre o uso de funções anônimas em JavaScript? 122 00:06:13,660 --> 00:06:17,140 Sou um são pouco confuso sobre isso. 123 00:06:17,140 --> 00:06:20,180 >> JASON HIRSCHHORN: Então, em JavaScript - 124 00:06:20,180 --> 00:06:24,400 Estou tentando pensar como eu poderia escrever isso em - 125 00:06:24,400 --> 00:06:27,590 então vamos realmente abrir este código. 126 00:06:27,590 --> 00:06:31,830 127 00:06:31,830 --> 00:06:36,030 Portanto, este é o código que fizemos na semana passada. 128 00:06:36,030 --> 00:06:41,400 E você já viu isso antes, se você estavam aqui na seção, na semana passada. 129 00:06:41,400 --> 00:06:43,180 Ou você já viu alguma coisa semelhante a este antes. 130 00:06:43,180 --> 00:06:44,800 >> Mas você pode olhar para esta primeira linha. 131 00:06:44,800 --> 00:06:46,950 É assim que você começar - 132 00:06:46,950 --> 00:06:48,010 todo mundo já viu isso antes. 133 00:06:48,010 --> 00:06:51,930 Se você quiser colocar algum código JavaScript, você colocá-lo dentro deste, assumindo 134 00:06:51,930 --> 00:06:53,520 você está usando JQuery. 135 00:06:53,520 --> 00:06:56,940 Isto está dizendo, não faça nada até carregado do documento. 136 00:06:56,940 --> 00:06:59,940 >> E depois, Curt, você vê aqui estamos fazendo algo parecido com isso - 137 00:06:59,940 --> 00:07:02,560 função parêntese aberto, fechado parêntese. 138 00:07:02,560 --> 00:07:05,250 Portanto, não estamos dando a este funcionar um nome. 139 00:07:05,250 --> 00:07:09,160 Nós não estamos indo para definir esta função é suposto funcionar e depois 140 00:07:09,160 --> 00:07:10,830 chamá-lo de um monte de vezes. 141 00:07:10,830 --> 00:07:15,140 Estamos apenas dizendo que este documento já tem uma função. 142 00:07:15,140 --> 00:07:16,690 Um par de coisas para fazer. 143 00:07:16,690 --> 00:07:20,670 >> E nós não queremos passar o tempo dando-lhe um nome ou guardá-lo para 144 00:07:20,670 --> 00:07:21,650 perpetuidade. 145 00:07:21,650 --> 00:07:24,150 Nós apenas queremos executar algumas coisas. 146 00:07:24,150 --> 00:07:27,500 Assim, uma função tipo anônimo de serve esse propósito. 147 00:07:27,500 --> 00:07:30,280 Quando você não está indo para usar algo uma e outra vez, de modo que você não precisa 148 00:07:30,280 --> 00:07:32,420 para dar-lhe um nome - você só quiser usá-lo uma vez - 149 00:07:32,420 --> 00:07:36,720 você teria apenas que dizer função, por exemplo, neste caso, e você é apenas 150 00:07:36,720 --> 00:07:38,280 definir algo que você poderia dar um nome. 151 00:07:38,280 --> 00:07:40,920 >> Como, nós conseguimos extrair esta função fora e dar-lhe um nome e, em seguida, chamar esse 152 00:07:40,920 --> 00:07:41,760 funcionar aqui. 153 00:07:41,760 --> 00:07:44,270 Mas não precisa, porque nós não quer perder tempo dando-lhe um nome ou 154 00:07:44,270 --> 00:07:46,240 desperdiçando algo em nosso espaço de nome. 155 00:07:46,240 --> 00:07:47,530 E você vai ver que um monte. 156 00:07:47,530 --> 00:07:52,810 Por exemplo, vemos que muito neste código, mas você já viu isso antes, quando 157 00:07:52,810 --> 00:07:54,010 você clica em alguma coisa - 158 00:07:54,010 --> 00:07:55,980 executar este tipo de código. 159 00:07:55,980 --> 00:07:59,850 >> Poderíamos definir o código que queremos para ser executado quando clicamos, neste caso, 160 00:07:59,850 --> 00:08:03,450 este ID, como uma função separada e em seguida, executar essa função. 161 00:08:03,450 --> 00:08:07,940 Mas, neste caso, estamos apenas ignorando esse passo e movê-lo para aqui e 162 00:08:07,940 --> 00:08:10,340 apenas para definir tudo que queremos que aconteça e 163 00:08:10,340 --> 00:08:12,450 não dar-lhe um nome. 164 00:08:12,450 --> 00:08:15,550 Isso ainda não pode ter respondi a sua pergunta. 165 00:08:15,550 --> 00:08:15,960 >> AUDIÊNCIA: Não, ele faz. 166 00:08:15,960 --> 00:08:18,290 Quer dizer, eu acho que eu realmente não entendo por que seria uma 167 00:08:18,290 --> 00:08:20,800 funcionar em tudo, no entanto. 168 00:08:20,800 --> 00:08:21,590 Porque ele não está realmente sendo chamado. 169 00:08:21,590 --> 00:08:23,170 Ele realmente não tem um nome. 170 00:08:23,170 --> 00:08:25,510 >> JASON HIRSCHHORN: É uma função no sentido de que é uma série de etapas, 171 00:08:25,510 --> 00:08:28,460 como você iria colocar em uma função. 172 00:08:28,460 --> 00:08:29,970 E então é por isso que chamamos que função anônima. 173 00:08:29,970 --> 00:08:30,815 Nós não estamos indo para dar-lhe um nome. 174 00:08:30,815 --> 00:08:33,159 Nós não estamos indo para o lixo tentando nomeá-lo, mas o que pudemos. 175 00:08:33,159 --> 00:08:34,890 >> Funções anônimas, você sempre pode dar um nome. 176 00:08:34,890 --> 00:08:37,620 Assim, por exemplo, este código aqui, poderíamos colocar este código dentro de um 177 00:08:37,620 --> 00:08:39,929 função e, em seguida, chamar esta função aqui. 178 00:08:39,929 --> 00:08:41,600 Em vez disso, nós dizemos, nós não vamos para se preocupar com isso. 179 00:08:41,600 --> 00:08:44,390 Nós apenas estamos indo para escrever tudo aqui. 180 00:08:44,390 --> 00:08:49,840 >> É como se, por vezes, quando você está escrevendo quatro laço em C - vocês 181 00:08:49,840 --> 00:08:51,630 já vi isso antes - talvez você esteja iteração através de um forloop 182 00:08:51,630 --> 00:08:53,090 em i é igual a 0. 183 00:08:53,090 --> 00:08:54,830 I é inferior a strlen. 184 00:08:54,830 --> 00:08:59,520 Ou você está passando por alguma array, você pode salvar disposição 185 00:08:59,520 --> 00:09:01,580 índice i, de alguma variável. 186 00:09:01,580 --> 00:09:02,830 E você usa essa variável. 187 00:09:02,830 --> 00:09:06,550 Assim, você não precisa reescrever disposição suporte de i mais e mais e mais. 188 00:09:06,550 --> 00:09:08,160 >> E isso é mais ou menos como uma variável dummy. 189 00:09:08,160 --> 00:09:10,790 Não está servindo muito outros fins que não para tornar seu código um pouco mais limpo 190 00:09:10,790 --> 00:09:12,120 e mais fácil de ler. 191 00:09:12,120 --> 00:09:13,290 Função semelhante aqui. 192 00:09:13,290 --> 00:09:15,665 Apenas o torna um pouco mais fácil, mas funcionalmente não há nenhuma diferença. 193 00:09:15,665 --> 00:09:18,620 194 00:09:18,620 --> 00:09:19,330 Isso responde a sua pergunta? 195 00:09:19,330 --> 00:09:19,970 >> AUDIÊNCIA: sim. 196 00:09:19,970 --> 00:09:20,720 >> JASON HIRSCHHORN: OK .. 197 00:09:20,720 --> 00:09:21,880 Mario? 198 00:09:21,880 --> 00:09:25,380 >> AUDIÊNCIA: Ontem eles muitas vezes colocam função parênteses evento. 199 00:09:25,380 --> 00:09:26,420 Será que isso significa alguma coisa? 200 00:09:26,420 --> 00:09:30,500 Ou é para coisas como que fariam 201 00:09:30,500 --> 00:09:35,100 document.ready evento função. 202 00:09:35,100 --> 00:09:37,130 >> JASON HIRSCHHORN: Nós já vimos isso, e novamente, estas são coisas menores, que 203 00:09:37,130 --> 00:09:39,590 provavelmente eu não quero gastar muito tempo em. 204 00:09:39,590 --> 00:09:43,200 Porque às vezes eu não quero que as pessoas se apavorou ​​que eles não têm 205 00:09:43,200 --> 00:09:44,220 ouviu falar sobre essas coisas muito. 206 00:09:44,220 --> 00:09:46,200 Mas nós conversamos um pouco sobre manipuladores de eventos. 207 00:09:46,200 --> 00:09:50,360 Então, alguma coisa acontece, e, em seguida, esta função é executada. 208 00:09:50,360 --> 00:09:53,210 E então nós também queremos saber alguns detalhes sobre o que 209 00:09:53,210 --> 00:09:54,450 aconteceu neste evento. 210 00:09:54,450 --> 00:09:55,730 >> Então, acho que volta para conjunto de problemas 4. 211 00:09:55,730 --> 00:09:58,390 Essa é provavelmente a maneira mais fácil de entender que na pausa para fora. 212 00:09:58,390 --> 00:09:59,740 Houve algum código - 213 00:09:59,740 --> 00:10:01,980 como um evento que iria acontecer, mas evento pode significar muitas coisas. 214 00:10:01,980 --> 00:10:06,240 Se poderia significar o mouse é clicado, ele poderia significar que você bater uma tecla de seta, et 215 00:10:06,240 --> 00:10:07,190 cetera, et cetera. 216 00:10:07,190 --> 00:10:09,800 >> Mas está tudo guardado neste genérico coisa chamada eventos. 217 00:10:09,800 --> 00:10:12,340 E então, o que podemos dizer, é este evento esta coisa? 218 00:10:12,340 --> 00:10:13,640 Ou este é o evento esta coisa? 219 00:10:13,640 --> 00:10:15,500 Ou, que tipo de acontecido com esse evento? 220 00:10:15,500 --> 00:10:18,660 Então é por isso que você criar essa variável lá para salvar a informação extra 221 00:10:18,660 --> 00:10:21,420 sobre o que exatamente aconteceu naquela você vai querer 222 00:10:21,420 --> 00:10:24,840 utilizar na função. 223 00:10:24,840 --> 00:10:28,200 Mas, novamente, isso é provavelmente um dos coisas menos importantes para ser super 224 00:10:28,200 --> 00:10:29,450 familiarizado. 225 00:10:29,450 --> 00:10:31,470 226 00:10:31,470 --> 00:10:36,110 >> OK, que outras questões têm pessoas tido, ou obstáculos que eles 227 00:10:36,110 --> 00:10:37,360 encontrado durante a revisão? 228 00:10:37,360 --> 00:10:41,260 229 00:10:41,260 --> 00:10:42,510 Nós vamos voltar a essa lista. 230 00:10:42,510 --> 00:10:52,550 231 00:10:52,550 --> 00:10:56,080 E quanto durante testes práticos, se pessoas tomaram as já? 232 00:10:56,080 --> 00:10:59,110 Quais foram alguns dos problemas que tropeçou vocês em cima? 233 00:10:59,110 --> 00:11:08,970 234 00:11:08,970 --> 00:11:12,720 Eu sei para um fato que no ano passado questionário foi muito difícil. 235 00:11:12,720 --> 00:11:15,670 >> AUDIÊNCIA: Você pode explicar o que um ataque de injeção SQL é? 236 00:11:15,670 --> 00:11:18,970 >> JASON HIRSCHHORN: OK, ótimo. 237 00:11:18,970 --> 00:11:20,440 Então nós conversamos um pouco sobre isso. 238 00:11:20,440 --> 00:11:22,050 Há uma palestra sobre segurança. 239 00:11:22,050 --> 00:11:25,670 E mais uma vez, como já referi anteriormente, este é um aparte. 240 00:11:25,670 --> 00:11:30,010 Mas você ficará frustrado no questionário quando você lê alguma pequena de dois pontos 241 00:11:30,010 --> 00:11:33,040 pergunta, e você fica tipo, quando eu nunca aprendeu isso? 242 00:11:33,040 --> 00:11:35,560 >> Todas essas coisas nessas palestras que você não acha que você precisava para 243 00:11:35,560 --> 00:11:38,290 sabe, ou você pode passar por cima porque eles não têm a ver com o 244 00:11:38,290 --> 00:11:41,860 conjunto de problemas, aqueles que provavelmente vai subir novamente no quiz. 245 00:11:41,860 --> 00:11:45,030 Assim, fresco, coisas divertidas que você acabou de pensei que David estava dizendo para você 246 00:11:45,030 --> 00:11:49,070 gozar, ele estava dizendo para você apreciar e para torná-lo apenas ser super 247 00:11:49,070 --> 00:11:50,550 animado sobre a aprendizagem de tudo existe a aprender 248 00:11:50,550 --> 00:11:51,670 sobre ciência da computação. 249 00:11:51,670 --> 00:11:53,680 Essas coisas também vêm em testes. 250 00:11:53,680 --> 00:11:56,440 Assim, mesmo essas pequenas coisas que não fez se relacionam diretamente com o seu problema 251 00:11:56,440 --> 00:11:59,630 definido, como vocês estão familiarizados com a partir de Teste 0, provavelmente vai vir para cima. 252 00:11:59,630 --> 00:12:01,530 E este é um bom exemplo de alguma coisa. 253 00:12:01,530 --> 00:12:10,140 >> Assim, uma injeção SQL ataques é quando você obter algumas informações do usuário e 254 00:12:10,140 --> 00:12:15,090 você deseja inseri-lo em uma tabela usando uma inserção de instrução SQL, mas você 255 00:12:15,090 --> 00:12:17,680 Não esterilizar a entrada antes do tempo. 256 00:12:17,680 --> 00:12:21,560 Então, obviamente que temos visto Instruções SQL. 257 00:12:21,560 --> 00:12:22,810 Eu vou abrir - 258 00:12:22,810 --> 00:12:25,590 259 00:12:25,590 --> 00:12:26,840 vamos - 260 00:12:26,840 --> 00:12:31,290 261 00:12:31,290 --> 00:12:31,960 vamos para a revisão - 262 00:12:31,960 --> 00:12:35,180 Eu acho, que o cobriu? 263 00:12:35,180 --> 00:12:36,350 Acho Samala fez. 264 00:12:36,350 --> 00:12:39,292 Assim, podemos obter - 265 00:12:39,292 --> 00:12:41,270 >> AUDIÊNCIA: Onde você encontrou isso? 266 00:12:41,270 --> 00:12:44,990 >> JASON HIRSCHHORN: Então, se você vai para CS50.net, quizzes, e então você pode 267 00:12:44,990 --> 00:12:47,170 rolar e obter lâminas da sessão de revisão. 268 00:12:47,170 --> 00:12:49,860 Mas você pode ver este é um bom exemplo de um ataque de injeção SQL. 269 00:12:49,860 --> 00:12:53,690 Tomamos algumas informações do usuário e eles nos dão uma string, e então nós 270 00:12:53,690 --> 00:12:55,780 pretende inserir essa seqüência em um banco de dados. 271 00:12:55,780 --> 00:12:59,780 Geralmente vamos higienizar que de entrada, o que significa que há alguns 272 00:12:59,780 --> 00:13:01,050 caracteres que são perigosos. 273 00:13:01,050 --> 00:13:04,000 >> Por exemplo, em seqüências de SQL, estas citações - 274 00:13:04,000 --> 00:13:05,000 aspas simples ou duplas - 275 00:13:05,000 --> 00:13:05,620 significar alguma coisa. 276 00:13:05,620 --> 00:13:08,380 Elas significam acabar com essa corda aqui. 277 00:13:08,380 --> 00:13:13,090 E assim, se o usuário lhe dá uma única ou aspas, eles poderiam ser 278 00:13:13,090 --> 00:13:18,970 tentando viagem até sua consulta SQL e inserir algumas coisas ruins para ele. 279 00:13:18,970 --> 00:13:23,130 E se eles fazem isso, eles poderiam ganhar controle de seu banco de dados ou fazer alguma 280 00:13:23,130 --> 00:13:24,760 coisas que você não quer que eles façam. 281 00:13:24,760 --> 00:13:28,300 >> É por isso que sempre que tomamos SQL consultas, nós higienizar a entrada antes 282 00:13:28,300 --> 00:13:31,090 colocá-lo no banco de dados, que significa que escapar esses caracteres. 283 00:13:31,090 --> 00:13:32,590 Falaremos sobre isso em um segundo. 284 00:13:32,590 --> 00:13:35,820 , Uma injeção de SQL Mas short longo da história ataque é, se você não fazer isso - 285 00:13:35,820 --> 00:13:39,760 se você não cuidar da entrada deram-lhe antes de colocar seu 286 00:13:39,760 --> 00:13:46,830 banco de dados, eles podem, como você vê abaixo aqui, executar uma consulta que, na verdade - 287 00:13:46,830 --> 00:13:52,470 eles colocaram em seu código aqui e esta linha de escolha aqui irá selecionar 288 00:13:52,470 --> 00:13:56,360 tudo, desde a mesa, independentemente de que a senha é dada. 289 00:13:56,360 --> 00:13:58,960 Porque você tem a 1 ou igual a 1. 290 00:13:58,960 --> 00:14:02,750 >> Então, é basicamente, longa história curta, uma maneira de assumir o banco de dados. 291 00:14:02,750 --> 00:14:07,570 A questão, então, para vocês, é onde em p conjuntos 7 que você higienizar tudo 292 00:14:07,570 --> 00:14:10,010 as entradas para suas consultas SQL? 293 00:14:10,010 --> 00:14:11,230 Onde é que esse passo aconteceria? 294 00:14:11,230 --> 00:14:14,150 Onde você evitar a injeção de SQL ataques de acontecer na p set 7? 295 00:14:14,150 --> 00:14:20,100 296 00:14:20,100 --> 00:14:20,490 É. 297 00:14:20,490 --> 00:14:21,870 >> AUDIÊNCIA: Crypt? 298 00:14:21,870 --> 00:14:23,120 >> JASON HIRSCHHORN: Então não foi cripta. 299 00:14:23,120 --> 00:14:52,360 300 00:14:52,360 --> 00:14:55,380 Nós não fazer você fazer isso para este determinado conjunto de problemas, mas acontece 301 00:14:55,380 --> 00:14:58,190 na função de consulta. 302 00:14:58,190 --> 00:15:00,930 Nós realmente escreveu isso para você, e cuidou da 303 00:15:00,930 --> 00:15:03,040 saneantes entradas para você. 304 00:15:03,040 --> 00:15:07,790 Mas no ano passado, os alunos tiveram digitar as entradas por conta própria. 305 00:15:07,790 --> 00:15:10,020 Em p set 7, que muitos de vocês - 306 00:15:10,020 --> 00:15:11,270 deixe-me abrir um outro arquivo. 307 00:15:11,270 --> 00:15:18,530 308 00:15:18,530 --> 00:15:22,590 >> Então, você vai notar-se aqui uma grande quantidade de pessoas, no conjunto de problemas 7, não ligou 309 00:15:22,590 --> 00:15:25,240 esta função em cordas. 310 00:15:25,240 --> 00:15:27,880 Esta função, htmlspecialchars, novamente - 311 00:15:27,880 --> 00:15:31,410 essa string pode ter algumas coisas que em HTML significa outra coisa. 312 00:15:31,410 --> 00:15:36,160 Como uma cinta, uma praça, ou um ângulo suporte de significar algo em HTML. 313 00:15:36,160 --> 00:15:38,980 >> E por isso, se você imprime que para o tela ou se você tomar apenas que e 314 00:15:38,980 --> 00:15:42,260 imprimir isso ao seu HTML, que o poder fazer algo que você não espera. 315 00:15:42,260 --> 00:15:45,180 Então htmlspecialchars vai sobre todos aqueles personagens que têm especial 316 00:15:45,180 --> 00:15:47,030 reunião e lhes escapa. 317 00:15:47,030 --> 00:15:51,450 Então ele fica impresso como o texto você quer ver, ao invés de 318 00:15:51,450 --> 00:15:53,280 estragar o seu HTML. 319 00:15:53,280 --> 00:15:55,040 Chamamos essa função no cabeçalho. 320 00:15:55,040 --> 00:15:57,390 E um monte de gente se esqueceu de chamar essa função no 321 00:15:57,390 --> 00:15:58,700 código que você estava escrevendo. 322 00:15:58,700 --> 00:16:03,970 >> Assim, por exemplo, se um nome de material tinha um suporte de ângulo nele e você esqueceu 323 00:16:03,970 --> 00:16:06,675 para chamar esta função, que ângulo suporte poderia ter jogado fora o que 324 00:16:06,675 --> 00:16:08,250 seu HTML parecia. 325 00:16:08,250 --> 00:16:11,810 Mas chamar esta função irá escapar que por isso, na verdade, imprime como um 326 00:16:11,810 --> 00:16:15,870 suporte de ângulo e não joga fora de seu código HTML. 327 00:16:15,870 --> 00:16:18,760 >> A mesma razão que nós vimos, às vezes, barras antes de aspas duplas em uma 328 00:16:18,760 --> 00:16:22,310 linha printf porque não queremos que o aspas duplas para baixo a corda. 329 00:16:22,310 --> 00:16:24,050 Queremos imprimi-los fora para a tela. 330 00:16:24,050 --> 00:16:26,920 Então tudo isso é a mesma idéia. 331 00:16:26,920 --> 00:16:28,260 Isso responde a sua pergunta? 332 00:16:28,260 --> 00:16:31,529 333 00:16:31,529 --> 00:16:33,870 >> AUDIÊNCIA: Mais ou menos. 334 00:16:33,870 --> 00:16:35,300 >> JASON HIRSCHHORN: Você ter um follow-up? 335 00:16:35,300 --> 00:16:43,252 >> AUDIÊNCIA: Eu acho que a injeção de SQL ataque tem a ver com isso? 336 00:16:43,252 --> 00:16:45,720 Eu não entendo como os dois estão relacionados. 337 00:16:45,720 --> 00:16:47,610 Por que você faria as specialChars? 338 00:16:47,610 --> 00:16:51,200 >> JASON HIRSCHHORN: OK, então o SQL ataque de injeção é quando você injeta 339 00:16:51,200 --> 00:16:59,180 algumas cordas maliciosos em alguém do programa, e eles apenas tomá-lo e executá- 340 00:16:59,180 --> 00:17:01,230 a consulta SQL com uma corda que lhes deu. 341 00:17:01,230 --> 00:17:04,220 Como você pode ver aqui em baixo, que poderia ser problemático. 342 00:17:04,220 --> 00:17:07,480 Então, a maneira como você prevenir contra isso é você levar a sua seqüência que eles dão 343 00:17:07,480 --> 00:17:09,220 você - assim essa string aqui - 344 00:17:09,220 --> 00:17:11,240 e você higienizar-lo. 345 00:17:11,240 --> 00:17:14,305 Você escapar de todas as coisas que são potencialmente problemáticas. 346 00:17:14,305 --> 00:17:18,626 Então você não interpretá-los como algo isso significa alguma coisa. 347 00:17:18,626 --> 00:17:23,390 >> E um exemplo de que, com HTML é esta função. 348 00:17:23,390 --> 00:17:26,060 Então, é a mesma idéia aqui. 349 00:17:26,060 --> 00:17:27,579 E eu estava apenas mostrando-lhe outro exemplos de quando você tem 350 00:17:27,579 --> 00:17:29,030 visto essa idéia antes. 351 00:17:29,030 --> 00:17:33,913 De escapar a entrada do usuário antes de imprimir lo para uma tela ou de colocá-lo 352 00:17:33,913 --> 00:17:36,782 dentro de uma instrução SQL. 353 00:17:36,782 --> 00:17:40,790 >> AUDIÊNCIA: Portanto, neste caso, o usuário está mexendo com o programador. 354 00:17:40,790 --> 00:17:41,240 >> JASON HIRSCHHORN: sim. 355 00:17:41,240 --> 00:17:44,800 Com todos esses ataques de segurança, que é sempre geral, o usuário, ou 356 00:17:44,800 --> 00:17:47,470 alguém está tentando mexer com você, o programador. 357 00:17:47,470 --> 00:17:51,038 E estas são as maneiras que puder prevenir contra eles. 358 00:17:51,038 --> 00:17:54,280 >> AUDIÊNCIA: Então, eu tenho uma pergunta sobre as funções de hash. 359 00:17:54,280 --> 00:17:59,340 No Teste 1 a partir de 2011, há dois perguntas sobre hashes unilateral. 360 00:17:59,340 --> 00:18:02,540 E eu só estava me perguntando o que isso significava. 361 00:18:02,540 --> 00:18:03,660 >> JASON HIRSCHHORN: OK, que teste? 362 00:18:03,660 --> 00:18:03,770 2011? 363 00:18:03,770 --> 00:18:04,705 >> AUDIÊNCIA: Yeah. 364 00:18:04,705 --> 00:18:06,720 >> AUDIÊNCIA: Quiz 1? 365 00:18:06,720 --> 00:18:08,620 >> AUDIÊNCIA: [inaudível]. 366 00:18:08,620 --> 00:18:09,940 É como hash de uma senha. 367 00:18:09,940 --> 00:18:12,220 Isso não é colocar as coisas - 368 00:18:12,220 --> 00:18:13,440 >> JASON HIRSCHHORN: Que página foi isso? 369 00:18:13,440 --> 00:18:15,720 >> AUDIÊNCIA: Eu acho que foi 9 ou 10, ou ambos. 370 00:18:15,720 --> 00:18:16,720 >> JASON HIRSCHHORN: Tudo bem, vá em frente, Curt. 371 00:18:16,720 --> 00:18:17,780 Você pode responder, enquanto nós olhamos. 372 00:18:17,780 --> 00:18:19,540 >> AUDIÊNCIA: Eu acho que está falando sobre hash de uma senha. 373 00:18:19,540 --> 00:18:24,430 Tipo, quando alguém entra em uma senha, você transformá-lo em uma coisa criptografada. 374 00:18:24,430 --> 00:18:27,395 Esse é o hash de senha, o que é diferente de uma função hash que 375 00:18:27,395 --> 00:18:30,900 coloca algo em uma tabela hash. 376 00:18:30,900 --> 00:18:31,610 >> JASON HIRSCHHORN: Vamos ver. 377 00:18:31,610 --> 00:18:33,930 Deixe-me puxar para cima o que eles dar como resposta. 378 00:18:33,930 --> 00:18:35,440 E então nós vamos atravessá-la. 379 00:18:35,440 --> 00:18:42,430 380 00:18:42,430 --> 00:18:45,400 >> Então, Curt deu um grande exemplo de um hash de mão única. 381 00:18:45,400 --> 00:18:48,800 Quando vi isso antes, nós tirar a senha e voltar - 382 00:18:48,800 --> 00:18:53,040 lembre-se, em conjunto p 7, alguém pode ter uma senha que só senha, 383 00:18:53,040 --> 00:18:55,300 mas, em seguida, ele fica criptografado em alguma coisa muito longo. 384 00:18:55,300 --> 00:18:59,830 O one-way hash significa que é muito fácil para ir de um lado para o outro, mas 385 00:18:59,830 --> 00:19:02,800 é muito difícil para ir de o outro caminho de volta. 386 00:19:02,800 --> 00:19:05,230 >> E assim, você sabe, quando você estava verificando senhas das pessoas no problema 387 00:19:05,230 --> 00:19:08,820 ajuste 7, você levaria seu - 388 00:19:08,820 --> 00:19:11,953 assim, por exemplo, dizer que eles queriam alterar sua senha, você perguntar-lhes 389 00:19:11,953 --> 00:19:13,130 para sua senha antiga. 390 00:19:13,130 --> 00:19:13,910 Você tomou sua senha antiga. 391 00:19:13,910 --> 00:19:15,150 Você criptografado ele. 392 00:19:15,150 --> 00:19:19,240 E então, compararam os dois criptografias em vez de unencrypting original 393 00:19:19,240 --> 00:19:20,780 um, porque é realmente difícil de ir por esse caminho. 394 00:19:20,780 --> 00:19:27,070 395 00:19:27,070 --> 00:19:28,035 É. 396 00:19:28,035 --> 00:19:31,430 >> AUDIÊNCIA: Como em profundidade é que a nossa compreensão do TelNet tem que ser? 397 00:19:31,430 --> 00:19:34,870 398 00:19:34,870 --> 00:19:41,360 >> JASON HIRSCHHORN: Se foi mencionado brevemente na palestra, apenas uma breve 399 00:19:41,360 --> 00:19:43,260 entendimento. 400 00:19:43,260 --> 00:19:45,585 Mais uma vez, volta para a resposta à pergunta de Avi - 401 00:19:45,585 --> 00:19:48,260 402 00:19:48,260 --> 00:19:50,430 quanto mais as coisas vêm para cima, o mais provável é que você tem que ser super 403 00:19:50,430 --> 00:19:51,530 familiarizado com eles. 404 00:19:51,530 --> 00:19:54,730 Se eles só chegar na aula, isso é apenas um lugar. 405 00:19:54,730 --> 00:19:57,180 Mas se eles vêm para cima em palestra, seção, e um conjunto de problemas, então você 406 00:19:57,180 --> 00:19:58,710 provavelmente tem que ser super familiarizado com eles. 407 00:19:58,710 --> 00:20:01,320 408 00:20:01,320 --> 00:20:03,960 >> Então, eu tinha uma pergunta de anteriormente sobre - 409 00:20:03,960 --> 00:20:06,950 é era o outono de 2010 - 410 00:20:06,950 --> 00:20:08,520 Teste 1, vamos puxar para cima - 411 00:20:08,520 --> 00:20:17,390 412 00:20:17,390 --> 00:20:21,790 esta questão em pilhas e filas, que fizemos passar um pouco de tempo 413 00:20:21,790 --> 00:20:23,720 falando na aula, mesmo embora nós realmente não 414 00:20:23,720 --> 00:20:26,020 nunca atingi-lo na seção. 415 00:20:26,020 --> 00:20:33,190 Portanto, esta questão está a dar-lhe uma série de comandos e perguntando-lhe o que 416 00:20:33,190 --> 00:20:35,560 será impresso neste caso. 417 00:20:35,560 --> 00:20:40,180 Portanto, esta é uma questão totalmente razoável que possam ser colocadas de você 418 00:20:40,180 --> 00:20:43,090 caras, e então vocês devem ser capaz de respondê-la. 419 00:20:43,090 --> 00:20:50,020 >> Então, por que você não olha para ele por 30 segundos, e então se alguém quer 420 00:20:50,020 --> 00:20:52,140 propor as respostas para mim, e então vamos atravessá-la. 421 00:20:52,140 --> 00:21:22,590 422 00:21:22,590 --> 00:21:24,235 Tudo bem, que tem uma resposta à questão 27? 423 00:21:24,235 --> 00:21:31,740 424 00:21:31,740 --> 00:21:33,860 É. 425 00:21:33,860 --> 00:21:40,250 >> AUDIÊNCIA: É 1, 2, 3, 3? 426 00:21:40,250 --> 00:21:40,780 >> JASON HIRSCHHORN: Isso mesmo. 427 00:21:40,780 --> 00:21:42,570 27 é 1, 2, 3, 3. 428 00:21:42,570 --> 00:21:44,510 Então, vamos ver como nós temos isso. 429 00:21:44,510 --> 00:21:48,930 >> Em primeiro lugar, estamos dizendo, se s é uma fila, o que será impresso? 430 00:21:48,930 --> 00:21:53,360 Assim, um q é first in, first out. 431 00:21:53,360 --> 00:21:54,680 Nós já vimos isso antes. 432 00:21:54,680 --> 00:21:56,820 Nós vimos a imagem das pessoas esperando no Apple 433 00:21:56,820 --> 00:21:58,400 Loja para comprar algum produto. 434 00:21:58,400 --> 00:22:00,900 As primeiras pessoas são as primeiras pessoas para fora. 435 00:22:00,900 --> 00:22:02,940 As primeiras coisas em uma fila são as primeiras coisas. 436 00:22:02,940 --> 00:22:08,320 >> Então, se nós empurrar algo em uma fila, você apertar o 1, então vamos pra cima do 1. 437 00:22:08,320 --> 00:22:09,630 Pop significa apenas tirar. 438 00:22:09,630 --> 00:22:11,080 Neste caso, basta levar alguma coisa. 439 00:22:11,080 --> 00:22:12,910 Tomamos o primeiro coisa, isso é um 1. 440 00:22:12,910 --> 00:22:15,200 Então, vamos colocar as coisas nos imprimir-se aqui. 441 00:22:15,200 --> 00:22:18,110 Isso não está mais em nossa fila. 442 00:22:18,110 --> 00:22:23,500 >> Em seguida, empurrar a 2 ea 3, e que saltam a primeira coisa. 443 00:22:23,500 --> 00:22:25,030 Mais uma vez, porque é uma fila. 444 00:22:25,030 --> 00:22:33,320 Então nós começamos a 2, então vamos colocar em outro 3 e chamar pop novamente. 445 00:22:33,320 --> 00:22:34,980 Nossa 3 é em primeiro lugar. 446 00:22:34,980 --> 00:22:40,940 >> E então nós tivemos um monte de outras coisas e apelo pop. 447 00:22:40,940 --> 00:22:43,740 Mas, novamente, uma vez que esta é uma fila, first in, first out. 448 00:22:43,740 --> 00:22:45,980 Tomamos a primeira coisa que já foi colocado dentro 449 00:22:45,980 --> 00:22:47,100 Esse é o nosso 3. 450 00:22:47,100 --> 00:22:50,060 E, neste caso, não se preocupe sobre todas as outras coisas. 451 00:22:50,060 --> 00:22:51,310 Então é isso, se esta é uma fila. 452 00:22:51,310 --> 00:22:58,917 453 00:22:58,917 --> 00:23:00,167 Qualquer dúvida sobre uma fila? 454 00:23:00,167 --> 00:23:03,290 455 00:23:03,290 --> 00:23:04,040 >> Uma pilha é diferente. 456 00:23:04,040 --> 00:23:07,782 O que é a sigla que temos para a compreensão de uma pilha? 457 00:23:07,782 --> 00:23:08,750 >> AUDIÊNCIA: último a entrar, primeiro a sair. 458 00:23:08,750 --> 00:23:10,130 >> JASON HIRSCHHORN: LIFO, eu acho. 459 00:23:10,130 --> 00:23:11,830 Último a entrar, primeiro a sair. 460 00:23:11,830 --> 00:23:15,630 Então vimos um exemplo de uma pilha de bandejas em uma sala de jantar. 461 00:23:15,630 --> 00:23:17,590 Seja qual for a bandeja está no topo se apanhada. 462 00:23:17,590 --> 00:23:19,550 E então, se as novas bandejas vir , eles se colocar no topo. 463 00:23:19,550 --> 00:23:21,070 E então, o que está em top se apanhada. 464 00:23:21,070 --> 00:23:24,010 Portanto, estas bandejas sobre o poder de fundo ficar lá por algum tempo. 465 00:23:24,010 --> 00:23:28,480 >> Nesse caso, mais uma vez, vamos desenhar isso. 466 00:23:28,480 --> 00:23:31,770 Nós empurrar um, então um é o primeiro da fila. 467 00:23:31,770 --> 00:23:32,790 E nós pop algo fora. 468 00:23:32,790 --> 00:23:37,280 E só há uma coisa lá dentro, então passamos um aqui em baixo. 469 00:23:37,280 --> 00:23:41,940 Então nós colocamos em 2 e 3 e nós pop algo fora. 470 00:23:41,940 --> 00:23:43,650 >> Mas, novamente, uma vez que esta é uma fila - 471 00:23:43,650 --> 00:23:45,010 ou esta é uma pilha, em vez - 472 00:23:45,010 --> 00:23:47,480 levamos tudo o que estava em último. 473 00:23:47,480 --> 00:23:49,300 Tudo o que é em última vem em primeiro lugar. 474 00:23:49,300 --> 00:23:50,890 E 3 está em último. 475 00:23:50,890 --> 00:23:56,110 Então nós colocamos a 3 para baixo lá, então colocamos em outro 3 e nós 476 00:23:56,110 --> 00:23:57,360 pop algo de novo. 477 00:23:57,360 --> 00:23:59,990 478 00:23:59,990 --> 00:24:05,710 Finalmente, colocamos no 4, 5, 6 e 7, e aqui nós pop. 479 00:24:05,710 --> 00:24:09,060 E porque é uma pilha, tomamos tudo o que foi colocado em último e escrever 480 00:24:09,060 --> 00:24:10,240 que aqui em baixo. 481 00:24:10,240 --> 00:24:14,256 Então vamos acabar com 1, 3, 3, 7. 482 00:24:14,256 --> 00:24:17,380 483 00:24:17,380 --> 00:24:21,380 Alguém tem alguma dúvida sobre pilhas ou filas, ou este exemplo? 484 00:24:21,380 --> 00:24:27,540 485 00:24:27,540 --> 00:24:29,030 >> OK. 486 00:24:29,030 --> 00:24:30,440 Vamos voltar para a lista de tópicos. 487 00:24:30,440 --> 00:24:32,510 Não que aqui, por aqui. 488 00:24:32,510 --> 00:24:34,280 Que outras questões que as pessoas têm? 489 00:24:34,280 --> 00:24:37,550 490 00:24:37,550 --> 00:24:39,480 >> AUDIÊNCIA: Eu não sei o quão importante este é, mas eu estava confuso com a 491 00:24:39,480 --> 00:24:43,550 diferença entre os diferentes tipos de linguagens como marcação, compilados, 492 00:24:43,550 --> 00:24:45,980 interpretado. 493 00:24:45,980 --> 00:24:46,750 >> JASON HIRSCHHORN: Isso é uma boa pergunta. 494 00:24:46,750 --> 00:24:50,500 Eu acho que é um pouco importante, então vamos passar por isso rapidamente. 495 00:24:50,500 --> 00:24:56,850 As grandes línguas que temos visto até agora são C, PHP e JavaScript, em termos 496 00:24:56,850 --> 00:24:58,330 de linguagens de programação. 497 00:24:58,330 --> 00:25:01,060 HTML, como você mencionou, não é uma linguagem de programação. 498 00:25:01,060 --> 00:25:02,260 É uma linguagem de marcação. 499 00:25:02,260 --> 00:25:05,700 E então nós temos CSS, que também é não é uma linguagem de programação. 500 00:25:05,700 --> 00:25:10,330 >> Também vimos SQL, que não é uma linguagem de programação também. 501 00:25:10,330 --> 00:25:15,695 Então SQL permite escrever consultas para um banco de dados. 502 00:25:15,695 --> 00:25:18,370 503 00:25:18,370 --> 00:25:20,140 HTML é uma linguagem de marcação. 504 00:25:20,140 --> 00:25:22,570 Ele define como as coisas estão estruturadas. 505 00:25:22,570 --> 00:25:26,250 E CSS permite estilizar as coisas. 506 00:25:26,250 --> 00:25:28,520 Essa é provavelmente a medida para o que você precisa saber sobre os três. 507 00:25:28,520 --> 00:25:32,920 Mas é mais interessante figura as diferenças entre C, PHP, 508 00:25:32,920 --> 00:25:34,320 e JavaScript. 509 00:25:34,320 --> 00:25:37,900 >> Portanto, uma das maiores diferenças, como você mencionou, é a forma como eles são 510 00:25:37,900 --> 00:25:40,550 compilado, ou o que quer o equivalente é. 511 00:25:40,550 --> 00:25:42,580 Então C é compilado. 512 00:25:42,580 --> 00:25:43,950 Nós sempre executar um compilador. 513 00:25:43,950 --> 00:25:51,100 E então onde estão os seus erros quando você executar o compilador C? 514 00:25:51,100 --> 00:25:55,740 Onde isso vai mostrar-lhe o erros em seu código? 515 00:25:55,740 --> 00:25:57,860 Como você sabe que há uma erro no seu código em C? 516 00:25:57,860 --> 00:25:58,770 >> AUDIÊNCIA: Ele mostra no terminal. 517 00:25:58,770 --> 00:26:00,410 >> JASON HIRSCHHORN: Ele mostra no terminal como você está compilando. 518 00:26:00,410 --> 00:26:02,620 E se houver erros, que realmente não vai compilar. 519 00:26:02,620 --> 00:26:04,830 Então você sabe que há erros direita distância, antes do tempo, antes de 520 00:26:04,830 --> 00:26:06,050 até mesmo executar seu código. 521 00:26:06,050 --> 00:26:10,010 >> Claro, você pode executar o seu código e obter uma falha de segmentação, mas isso era 522 00:26:10,010 --> 00:26:12,350 provavelmente porque você fez alguma coisa lógica boba. 523 00:26:12,350 --> 00:26:15,770 Mas o seu código com tecnicamente todos corretos e poderia ser executado. 524 00:26:15,770 --> 00:26:18,210 Assim, o código C é compilado antes do tempo. 525 00:26:18,210 --> 00:26:19,760 Que tal código PHP? 526 00:26:19,760 --> 00:26:21,430 Onde estavam os erros no seu código PHP? 527 00:26:21,430 --> 00:26:23,170 Como você sabia que você tinha erros em seu código PHP? 528 00:26:23,170 --> 00:26:26,038 529 00:26:26,038 --> 00:26:28,430 >> AUDIÊNCIA: Tempo de execução? 530 00:26:28,430 --> 00:26:31,230 >> JASON HIRSCHHORN: Sim, quando você iria executá-lo, você deve executar o 531 00:26:31,230 --> 00:26:32,180 Código PHP nas costas. 532 00:26:32,180 --> 00:26:33,300 E então você iria exibir uma tela. 533 00:26:33,300 --> 00:26:35,260 Você pode ver algumas coisas na parte superior, mas então você ia ver, como, alguns 534 00:26:35,260 --> 00:26:36,710 laranja, mesa feia. 535 00:26:36,710 --> 00:26:41,420 E isso iria dar-lhe um número de linha e digamos, blah, blah, blah, essas coisas 536 00:26:41,420 --> 00:26:42,400 não funcionou. 537 00:26:42,400 --> 00:26:48,730 >> Então, PHP é interpretado linha por linha e executado no servidor. 538 00:26:48,730 --> 00:26:52,380 E, em seguida, o resultado é enviadas de volta para você. 539 00:26:52,380 --> 00:26:53,340 Grande. 540 00:26:53,340 --> 00:26:56,410 Executado na linha de servidores por linha e, em seguida, enviado a você. 541 00:26:56,410 --> 00:26:59,010 E se há um erro, ele vai enviar você o erro, mas você pode ter 542 00:26:59,010 --> 00:27:00,400 conseguido algumas coisas antes do tempo. 543 00:27:00,400 --> 00:27:02,730 Assim, alguns dos que poderia ter funcionado, mas mais tarde, algumas coisas podem não ter 544 00:27:02,730 --> 00:27:03,890 não funcionou. 545 00:27:03,890 --> 00:27:04,600 >> E sobre JavaScript? 546 00:27:04,600 --> 00:27:06,065 Onde você viu erros de JavaScript? 547 00:27:06,065 --> 00:27:10,860 548 00:27:10,860 --> 00:27:12,870 Em p set 8, quando você tem um erro, como você sabia? 549 00:27:12,870 --> 00:27:13,710 Onde é que ele apareceu? 550 00:27:13,710 --> 00:27:15,900 >> AUDIÊNCIA: No console, na parte inferior. 551 00:27:15,900 --> 00:27:17,650 >> Jason HIRSCHHORN: No consola, na parte inferior. 552 00:27:17,650 --> 00:27:20,160 Ele também lhe daria a número da linha, e que seria 553 00:27:20,160 --> 00:27:21,330 aparecer na parte inferior. 554 00:27:21,330 --> 00:27:24,320 E JavaScript não foi executado no servidor. 555 00:27:24,320 --> 00:27:27,800 JavaScript foi enviado para o seu computador, e então, quando chegou a hora de executar o 556 00:27:27,800 --> 00:27:31,670 JavaScript, o JavaScript era executar linha por linha no 557 00:27:31,670 --> 00:27:33,410 cliente, do seu lado. 558 00:27:33,410 --> 00:27:35,570 Não é no servidor, o lado do cliente. 559 00:27:35,570 --> 00:27:37,690 >> E da mesma forma, foi executar linha por linha. 560 00:27:37,690 --> 00:27:40,630 E então, quando você receber um erro, ele iria aparecer na parte inferior. 561 00:27:40,630 --> 00:27:44,580 À semelhança do PHP, parte dela pode executar e, em seguida, você pode ter uma 562 00:27:44,580 --> 00:27:46,310 erro mais tarde. 563 00:27:46,310 --> 00:27:49,910 >> Além disso, ao contrário de um pouco de PHP, se você tem um erro de JavaScript - 564 00:27:49,910 --> 00:27:52,780 dizer que você não fez a direita código para uma caixa de alerta - 565 00:27:52,780 --> 00:27:55,800 você poderia manter a execução de seu programa. 566 00:27:55,800 --> 00:27:58,180 A caixa de alerta não iria funcionar, mas seu programa seria ótimo. 567 00:27:58,180 --> 00:28:00,490 Apenas talvez essa função seria um fracasso. 568 00:28:00,490 --> 00:28:02,610 >> Portanto, há alguns dos maiores diferença em termos de como estes 569 00:28:02,610 --> 00:28:09,230 línguas, ou como o código de programação você escreve são realmente avaliados. 570 00:28:09,230 --> 00:28:11,970 Há também outras diferenças em termos de - a maior diferença 571 00:28:11,970 --> 00:28:15,590 temos visto em termos de variáveis nas diferentes línguas. 572 00:28:15,590 --> 00:28:19,660 Então, alguém pode me dar uma diferença entre as variáveis 573 00:28:19,660 --> 00:28:20,910 nas três línguas? 574 00:28:20,910 --> 00:28:24,802 575 00:28:24,802 --> 00:28:25,770 Sim. 576 00:28:25,770 --> 00:28:27,130 >> AUDIÊNCIA: Em C, eles são estritamente digitado. 577 00:28:27,130 --> 00:28:28,550 Nos outros dois, eles são vagamente digitado. 578 00:28:28,550 --> 00:28:30,040 >> JASON HIRSCHHORN: E O que isso significa? 579 00:28:30,040 --> 00:28:31,775 >> AUDIÊNCIA: Que em C, você tem que declarar o tipo da variável quando 580 00:28:31,775 --> 00:28:36,140 você declarar a variável, como interbool ou char. 581 00:28:36,140 --> 00:28:36,990 >> JASON HIRSCHHORN: Excelente. 582 00:28:36,990 --> 00:28:39,780 No C, a gente sempre teve que colocar um tipo de uma variável. 583 00:28:39,780 --> 00:28:41,360 E nós realmente não podia misturar tipos. 584 00:28:41,360 --> 00:28:45,750 Você não poderia fazer um inteiro além de uma string. 585 00:28:45,750 --> 00:28:48,760 Mas, como já vimos noutros línguas, na verdade você pode misturar os tipos, 586 00:28:48,760 --> 00:28:51,230 e você nunca tem que dar algo tipo, nunca. 587 00:28:51,230 --> 00:28:53,905 >> Então como é que sabemos que as coisas são variáveis em PHP e JavaScript? 588 00:28:53,905 --> 00:28:57,120 589 00:28:57,120 --> 00:28:58,685 >> AUDIÊNCIA: Em PHP, eles começam com um cifrão. 590 00:28:58,685 --> 00:29:00,810 Em JavaScript, quando você declara eles, você tem que ter um bar. 591 00:29:00,810 --> 00:29:01,760 >> JASON HIRSCHHORN: Certo. 592 00:29:01,760 --> 00:29:03,535 Assim, em PHP, eles começam com um cifrão. 593 00:29:03,535 --> 00:29:06,300 Em JavaScript, eles têm que ter bar, embora às vezes não, na verdade, 594 00:29:06,300 --> 00:29:07,520 tem que ter bar. 595 00:29:07,520 --> 00:29:09,240 Mas isso é correto. 596 00:29:09,240 --> 00:29:13,300 >> Então, isso é uma grande diferença entre as variáveis. 597 00:29:13,300 --> 00:29:16,140 Eu acho que esses são provavelmente, fora do topo da minha cabeça, os dois maiores 598 00:29:16,140 --> 00:29:19,250 diferenças entre estes três idiomas. 599 00:29:19,250 --> 00:29:20,594 Mas, sim. 600 00:29:20,594 --> 00:29:24,720 >> AUDIÊNCIA: E o escopo de variáveis ​​C se restringe às chaves, 601 00:29:24,720 --> 00:29:27,760 onde os outros, é como, ele morre se for em apenas uma função, 602 00:29:27,760 --> 00:29:29,650 mas por outro lado, é - 603 00:29:29,650 --> 00:29:30,240 >> JASON HIRSCHHORN: Certo. 604 00:29:30,240 --> 00:29:36,780 Então alcance é ligeiramente diferente em C. Como Você se lembra, as chaves definir 605 00:29:36,780 --> 00:29:37,710 o escopo de variáveis. 606 00:29:37,710 --> 00:29:41,680 Então, se ele foi definido dentro de um se condição, o que está dentro de um loop for, 607 00:29:41,680 --> 00:29:44,290 a variável só existe lá. 608 00:29:44,290 --> 00:29:47,760 >> Em JavaScript, se uma variável é definida dentro de uma condição if - 609 00:29:47,760 --> 00:29:50,750 dentro de um loop - que vai existir para esta função, mas que não irá existir 610 00:29:50,750 --> 00:29:52,330 fora essa função. 611 00:29:52,330 --> 00:29:59,250 Então escopo é um pouco mais flexível em JavaScript e PHP. 612 00:29:59,250 --> 00:30:00,500 Isso responde a pergunta? 613 00:30:00,500 --> 00:30:03,110 614 00:30:03,110 --> 00:30:04,635 OK, alguma pergunta? 615 00:30:04,635 --> 00:30:07,260 616 00:30:07,260 --> 00:30:08,865 Nós podemos fazer mais quatro minutos de perguntas, em seguida, 617 00:30:08,865 --> 00:30:10,740 vamos saltar para codificação. 618 00:30:10,740 --> 00:30:12,645 >> AUDIÊNCIA: Podemos entrar em Ajax e falar sobre o que é isso? 619 00:30:12,645 --> 00:30:15,670 620 00:30:15,670 --> 00:30:17,800 >> JASON HIRSCHHORN: Fale com Avi depois. 621 00:30:17,800 --> 00:30:19,170 Ele fez essa pergunta antes. 622 00:30:19,170 --> 00:30:19,630 >> AUDIÊNCIA: My bad. 623 00:30:19,630 --> 00:30:20,880 >> JASON HIRSCHHORN: Não se preocupe. 624 00:30:20,880 --> 00:30:22,740 625 00:30:22,740 --> 00:30:24,290 >> AUDIÊNCIA: O que exatamente é JSON? 626 00:30:24,290 --> 00:30:28,360 627 00:30:28,360 --> 00:30:28,900 >> JASON HIRSCHHORN: O que é JSON? 628 00:30:28,900 --> 00:30:29,930 Qual é a sua pergunta? 629 00:30:29,930 --> 00:30:31,350 >> AUDIÊNCIA: Só muito rapidamente, a diferença entre 630 00:30:31,350 --> 00:30:32,870 print e echo em PHP. 631 00:30:32,870 --> 00:30:36,200 632 00:30:36,200 --> 00:30:38,490 >> JASON HIRSCHHORN: Por que você não google a diferença entre print e echo? 633 00:30:38,490 --> 00:30:40,670 Diferença ligeira. 634 00:30:40,670 --> 00:30:42,020 Não que de um grande negócio. 635 00:30:42,020 --> 00:30:44,960 Mas você deve definitivamente google, e que vai te dar uma boa resposta. 636 00:30:44,960 --> 00:30:46,910 >> JSON, provavelmente maior de um negócio. 637 00:30:46,910 --> 00:30:49,300 Suportes para JavaScript Object Notation. 638 00:30:49,300 --> 00:30:51,865 E quando vimos JSON sendo usado? 639 00:30:51,865 --> 00:30:55,110 640 00:30:55,110 --> 00:30:55,900 Quando você já viu - 641 00:30:55,900 --> 00:30:57,400 por que você mesmo sabe a palavra JSON? 642 00:30:57,400 --> 00:30:59,140 Quando foi que você viu? 643 00:30:59,140 --> 00:31:02,200 >> AUDIÊNCIA: Quando estávamos recebendo cotações de ações para financiamento. 644 00:31:02,200 --> 00:31:02,690 >> JASON HIRSCHHORN: Então você viu quando você estava começando 645 00:31:02,690 --> 00:31:04,830 cotações de ações para financiamento. 646 00:31:04,830 --> 00:31:07,340 E por que você vê isso? 647 00:31:07,340 --> 00:31:09,000 >> AUDIÊNCIA: Quando estávamos recuperando toda a informação de que 648 00:31:09,000 --> 00:31:10,400 veio nesse formato. 649 00:31:10,400 --> 00:31:11,700 >> JASON HIRSCHHORN: Então você iria ficar - 650 00:31:11,700 --> 00:31:12,540 sim. 651 00:31:12,540 --> 00:31:13,020 Vá em frente. 652 00:31:13,020 --> 00:31:15,210 >> AUDIÊNCIA: [inaudível] informações de um objeto? 653 00:31:15,210 --> 00:31:17,170 >> JASON HIRSCHHORN: Ambos os juntos é a resposta 654 00:31:17,170 --> 00:31:18,100 que estamos procurando. 655 00:31:18,100 --> 00:31:21,240 Você quer que a informação de esta outra página da web. 656 00:31:21,240 --> 00:31:23,790 E espero que quando você está obter essa informação, seria 657 00:31:23,790 --> 00:31:26,720 apresentado a você em algum tipo de formato padronizado. 658 00:31:26,720 --> 00:31:29,530 >> Todo mundo é provavelmente familiar com valores separados por vírgulas. 659 00:31:29,530 --> 00:31:32,970 Você pode exportar uma planilha do Excel ou qualquer tipo de planilha como uma lista de 660 00:31:32,970 --> 00:31:34,540 valores separados por vírgulas. 661 00:31:34,540 --> 00:31:37,370 E as vírgulas dividir tudo os diferentes campos. 662 00:31:37,370 --> 00:31:38,780 JavaScript Object Notation - 663 00:31:38,780 --> 00:31:39,440 JSON - 664 00:31:39,440 --> 00:31:43,540 é um outro tipo de padronizado disposição das coisas. 665 00:31:43,540 --> 00:31:49,010 E isso é muitas vezes como nós recuperamos informações de nossos consultas Ajax. 666 00:31:49,010 --> 00:31:51,770 >> Portanto, neste caso, temos que a partir do site do Yahoo. 667 00:31:51,770 --> 00:31:53,600 Eles voltam para as coisas nós em um objeto JSON. 668 00:31:53,600 --> 00:31:56,790 E então sabemos, porque é um padrão, o que é 669 00:31:56,790 --> 00:31:57,250 vai parecer. 670 00:31:57,250 --> 00:32:00,760 Assim, pode percorrer a matriz que é devolvido para nós, a matriz de 671 00:32:00,760 --> 00:32:03,180 objetos que são retornados para nós. 672 00:32:03,180 --> 00:32:07,770 >> Nós provavelmente não precisa saber as chaves, mas eles geralmente dão-lhe 673 00:32:07,770 --> 00:32:11,370 documentação no site quando você está buscando algum JSON 674 00:32:11,370 --> 00:32:12,170 notação para eles. 675 00:32:12,170 --> 00:32:16,940 Da mesma forma, você pode JSON codificar um objeto. 676 00:32:16,940 --> 00:32:19,900 Portanto, há uma função JSON ressaltam codificação. 677 00:32:19,900 --> 00:32:22,970 E assim você pode tirar um objeto que que você criou, JSON codificá-lo, e 678 00:32:22,970 --> 00:32:26,390 passá-lo para alguma coisa outra coisa, se você quiser. 679 00:32:26,390 --> 00:32:30,770 E JSON decodificar também existe para um propósito similar, ou para 680 00:32:30,770 --> 00:32:31,780 o objetivo oposto. 681 00:32:31,780 --> 00:32:36,570 >> AUDIÊNCIA: Não precisamos saber de codificação para tabelas de hash e tentativas? 682 00:32:36,570 --> 00:32:40,300 Ou será que só precisa entender como eles são usados, conceitualmente? 683 00:32:40,300 --> 00:32:44,570 >> JASON HIRSCHHORN: Então, levante a mão se você fez uma tabela hash para p set 4 684 00:32:44,570 --> 00:32:46,920 com uma lista de links. 685 00:32:46,920 --> 00:32:47,960 Ou p ajuste 5. 686 00:32:47,960 --> 00:32:49,060 Então isso foi uma grande maioria das pessoas. 687 00:32:49,060 --> 00:32:50,390 P ajuste 5, 6, quem sabe. 688 00:32:50,390 --> 00:32:51,240 Há muito tempo atrás. 689 00:32:51,240 --> 00:32:54,140 >> Assim, a grande maioria dos que você fez tabelas hash com listas de links. 690 00:32:54,140 --> 00:32:56,525 E porque essa é provavelmente a mais abordagem comum, e porque passamos 691 00:32:56,525 --> 00:32:59,460 uma grande quantidade de tempo fazendo listas de links e de hash tabelas, você provavelmente deve ser 692 00:32:59,460 --> 00:33:02,600 bastante familiarizado com a forma de código uma tabela hash e uma lista de links. 693 00:33:02,600 --> 00:33:05,060 >> E se você acha que volta para esse problema definido, ele não era realmente 694 00:33:05,060 --> 00:33:06,410 tão duro como você esperava. 695 00:33:06,410 --> 00:33:08,120 E havia muito menos código do que você esperava. 696 00:33:08,120 --> 00:33:11,150 697 00:33:11,150 --> 00:33:14,650 Eu diria que você deve saber codificar uma tabela hash ou uma lista de link. 698 00:33:14,650 --> 00:33:17,010 Não que você será solicitado que, necessariamente, mas você deve 699 00:33:17,010 --> 00:33:19,730 certamente sabe disso. 700 00:33:19,730 --> 00:33:21,860 >> Além disso, se você olhar através de testes passados, tem havido uma grande quantidade de 701 00:33:21,860 --> 00:33:26,450 perguntas sobre como escrever funções em listas de links ou listas duplamente ligadas. 702 00:33:26,450 --> 00:33:28,370 Isso parece vir-se a cada ano. 703 00:33:28,370 --> 00:33:31,940 Inserir o botão direito em uma lista de links, certo excluir uma lista de links, certo inserir 704 00:33:31,940 --> 00:33:33,610 para uma lista duplamente ligada, et cetera. 705 00:33:33,610 --> 00:33:36,170 Então isso, me sinto muito confortável dizendo que você deve saber disso. 706 00:33:36,170 --> 00:33:40,600 >> Para tentar, eu diria que você deve certamente sabe como ele funciona, e talvez 707 00:33:40,600 --> 00:33:43,570 dar algum pseudocódigo para saber como para codificá-lo e configurá-lo. 708 00:33:43,570 --> 00:33:45,600 Mas não seria a pior coisa o mundo se você não sabe como 709 00:33:45,600 --> 00:33:48,870 codificá-lo em C. Seria ótimo se você sabia como código em C, mas eu acho que 710 00:33:48,870 --> 00:33:52,516 provavelmente pseudocódigo para uma tentativa seria ser o mais que você precisa 711 00:33:52,516 --> 00:33:53,270 saber para uma tentativa. 712 00:33:53,270 --> 00:33:53,930 >> AUDIÊNCIA: Crédito extra? 713 00:33:53,930 --> 00:33:58,290 >> JASON HIRSCHHORN: E mesmo com, se entrar em árvores de busca binária, você pode 714 00:33:58,290 --> 00:34:02,320 precisa - e você já viu no passado, fizemos um monte de - você sabe como 715 00:34:02,320 --> 00:34:03,380 árvore binária de busca funciona. 716 00:34:03,380 --> 00:34:07,150 Provavelmente deve ser capaz de configurá-la em código pseudo. 717 00:34:07,150 --> 00:34:10,510 Mas porque a grande maioria das pessoas não fez isso no problema 718 00:34:10,510 --> 00:34:13,880 set, eu diria que é provavelmente menos importante que você saiba como codificar 719 00:34:13,880 --> 00:34:17,380 e montou uma árvore assim. 720 00:34:17,380 --> 00:34:19,679 >> Alguma outra pergunta? 721 00:34:19,679 --> 00:34:23,234 Além disso, podemos perguntar-lhes por todo como passamos por alguns problemas. 722 00:34:23,234 --> 00:34:27,170 OK, vamos seguir em frente. 723 00:34:27,170 --> 00:34:28,230 Ir esse slide por enquanto. 724 00:34:28,230 --> 00:34:32,449 >> Falando de árvores, que é o primeiro pergunta que eu tenho para vocês. 725 00:34:32,449 --> 00:34:34,270 Porque este é um problema. 726 00:34:34,270 --> 00:34:37,380 Eu diria que é altamente provável que você vai obter um problema como este em seu quiz 727 00:34:37,380 --> 00:34:43,659 pedindo-lhe para codificar algum tipo de inserção, excluir, busca, para um tipo 728 00:34:43,659 --> 00:34:45,270 de estrutura de dados que já vimos. 729 00:34:45,270 --> 00:34:47,719 >> Isso vem a cada ano e passamos muito tempo o segundo semestre deste 730 00:34:47,719 --> 00:34:50,270 semestre repassando esses tipos de dados. 731 00:34:50,270 --> 00:34:54,170 Então, agora, eu defini um nó em uma árvore de busca binária. 732 00:34:54,170 --> 00:34:58,490 E o que eu gostaria que você faça é dada uma árvore de busca binária, que começa 733 00:34:58,490 --> 00:35:05,450 neste raiz estrela nó, preencha o implementação da função abaixo, 734 00:35:05,450 --> 00:35:07,430 que passa a ser uma função find. 735 00:35:07,430 --> 00:35:09,260 E fazê-lo com e sem recursividade. 736 00:35:09,260 --> 00:35:10,860 >> Então, eu quero que você escreva duas funções. 737 00:35:10,860 --> 00:35:14,310 Uma fazendo isso com a recursividade, uma fazer isso sem recursão. 738 00:35:14,310 --> 00:35:18,050 E não pense que o raiz será não-nulo. 739 00:35:18,050 --> 00:35:21,790 Então, nós estamos olhando para o número inteiro i em a árvore a partir de raiz, e precisamos 740 00:35:21,790 --> 00:35:25,280 para escrever este recursivamente e de forma iterativa. 741 00:35:25,280 --> 00:35:26,300 É. 742 00:35:26,300 --> 00:35:29,730 >> AUDIÊNCIA: Então você quer que a gente retornar true se encontrá-lo, e falso se 743 00:35:29,730 --> 00:35:30,480 não encontrá-lo. 744 00:35:30,480 --> 00:35:32,160 >> JASON HIRSCHHORN: Como você sabe? 745 00:35:32,160 --> 00:35:33,100 Como é que você sabe disso? 746 00:35:33,100 --> 00:35:36,500 >> AUDIÊNCIA: Eu estava pedindo a primeira, mas eu estava assumindo, porque ele diz que a bool 747 00:35:36,500 --> 00:35:37,490 o início da função. 748 00:35:37,490 --> 00:35:37,880 >> JASON HIRSCHHORN: Certo. 749 00:35:37,880 --> 00:35:41,020 Diz bool, para que eu não precisa nem dizer-lhe o que eu espero que você retorne 750 00:35:41,020 --> 00:35:41,350 porque ele diz ali mesmo. 751 00:35:41,350 --> 00:35:42,280 Mas é isso mesmo. 752 00:35:42,280 --> 00:35:43,510 Retorne, verdadeiro ou falso. 753 00:35:43,510 --> 00:35:47,630 >> Portanto, antes de começar, eu recomendaria, se você não estiver familiarizado com 754 00:35:47,630 --> 00:35:51,300 árvores de busca binária, desenho rapidamente uma foto dele para obter o seu 755 00:35:51,300 --> 00:35:51,750 compreensão, certo. 756 00:35:51,750 --> 00:35:54,720 Isso também irá ajudá-lo ao escrever seu código e verificar. 757 00:35:54,720 --> 00:35:57,830 Mais uma vez, você também não tem que muito tempo no quiz para fazer todas as coisas 758 00:35:57,830 --> 00:35:59,030 que pedimos que você faça. 759 00:35:59,030 --> 00:36:02,350 Assim, a escrita de código pseudo é muito útil. 760 00:36:02,350 --> 00:36:05,310 >> E nós geralmente dão cerca de - 761 00:36:05,310 --> 00:36:06,820 se o pseudocódigo é perfeitamente correto, isso é 762 00:36:06,820 --> 00:36:08,910 geralmente 50% sobre uma questão. 763 00:36:08,910 --> 00:36:11,410 Portanto, não é uma regra dura e rápida, mas se você acabou de escrever pseudocódigo e é 764 00:36:11,410 --> 00:36:13,460 correta, é geralmente de 50%. 765 00:36:13,460 --> 00:36:14,970 Então, eu sempre recomendo - 766 00:36:14,970 --> 00:36:16,870 se você está pressionado pelo tempo, ou mesmo se você está apenas tentando descobrir isso - 767 00:36:16,870 --> 00:36:18,290 começando com o pseudocódigo. 768 00:36:18,290 --> 00:36:24,840 E, finalmente, se você pudesse escrever este tudo em C, que seria fantástico. 769 00:36:24,840 --> 00:36:29,010 >> Portanto, vamos ter três minutos para trabalhar neste programa. 770 00:36:29,010 --> 00:36:33,120 E então nós estamos indo para escrever pseudocódigo para ele apenas uma vez, e, em seguida, 771 00:36:33,120 --> 00:36:35,455 vamos codificá-lo de forma recursiva e, em seguida, de forma iterativa. 772 00:36:35,455 --> 00:37:28,720 773 00:37:28,720 --> 00:37:30,760 >> Se você tiver alguma dúvida, sinta-se livre, levante a mão. 774 00:37:30,760 --> 00:37:34,270 Feliz para passear e respondê-las antes de começar como um grupo. 775 00:37:34,270 --> 00:39:22,600 776 00:39:22,600 --> 00:39:27,200 >> Vamos continuar, e nós vamos Pseudocódigo a versão recursiva 777 00:39:27,200 --> 00:39:29,830 isso, e então vamos codificá-lo. 778 00:39:29,830 --> 00:39:33,380 Assim, uma função recursiva precisa de duas coisas. 779 00:39:33,380 --> 00:39:35,960 Isso pode ser uma pergunta que você pode ser solicitado. 780 00:39:35,960 --> 00:39:37,950 Necessidades duas coisas. 781 00:39:37,950 --> 00:39:40,610 Quem pode levantar a mão e dizer-me que as duas coisas uma recursiva 782 00:39:40,610 --> 00:39:43,680 função precisa? 783 00:39:43,680 --> 00:39:45,030 Por definição, tem duas coisas. 784 00:39:45,030 --> 00:39:46,280 O que são essas duas coisas? 785 00:39:46,280 --> 00:39:48,580 786 00:39:48,580 --> 00:39:49,830 Novas mãos. 787 00:39:49,830 --> 00:39:55,050 788 00:39:55,050 --> 00:39:56,390 Sim, Alden. 789 00:39:56,390 --> 00:39:57,980 >> AUDIÊNCIA: Então eu não sei exatamente se esta é a terminologia, mas - 790 00:39:57,980 --> 00:39:59,715 >> JASON HIRSCHHORN: Estou feliz você está levantando sua mão. 791 00:39:59,715 --> 00:40:03,380 >> AUDIÊNCIA: Ela precisa de um caso base, e ele precisa de um passo recursivo. 792 00:40:03,380 --> 00:40:03,960 >> JASON HIRSCHHORN: Perfeito. 793 00:40:03,960 --> 00:40:06,340 Ela precisa de um caso base e um passo recursiva. 794 00:40:06,340 --> 00:40:10,430 Então, qual é o nosso caso base aqui? 795 00:40:10,430 --> 00:40:12,950 >> AUDIÊNCIA: F é igual a raiz é igual a nulo. 796 00:40:12,950 --> 00:40:15,110 Desculpe, apenas em pseudocódigo, se é nulo. 797 00:40:15,110 --> 00:40:16,360 Se a raiz é nulo. 798 00:40:16,360 --> 00:40:21,900 799 00:40:21,900 --> 00:40:23,540 >> JASON HIRSCHHORN: Se a raiz é nulo. 800 00:40:23,540 --> 00:40:23,850 Isso é excelente. 801 00:40:23,850 --> 00:40:24,610 Esse é o nosso caso base. 802 00:40:24,610 --> 00:40:25,910 Isso é o que vamos de verificar o tempo todo. 803 00:40:25,910 --> 00:40:28,000 E caso base é a primeira coisa a fazer. 804 00:40:28,000 --> 00:40:29,720 Se você acertar o caso base, você está feito. 805 00:40:29,720 --> 00:40:34,140 >> Agora precisamos de nossa chamada recursiva, e eu estar disposto a apostar que precisamos de um casal 806 00:40:34,140 --> 00:40:35,440 recursiva chama aqui. 807 00:40:35,440 --> 00:40:39,630 Porque é uma árvore, e nós poderia ir várias maneiras. 808 00:40:39,630 --> 00:40:43,190 Então, se a raiz é nulo, estamos bem. 809 00:40:43,190 --> 00:40:44,970 >> O que você propõe? 810 00:40:44,970 --> 00:40:49,640 E agora eu vou começar a chamar em vocês, porque eu sei que vocês 811 00:40:49,640 --> 00:40:50,540 todos sabem disso. 812 00:40:50,540 --> 00:40:52,610 Mas Annie, o que deve a próxima linha de ser? 813 00:40:52,610 --> 00:40:53,570 O que se encontrou? 814 00:40:53,570 --> 00:40:55,526 O que vamos fazer? 815 00:40:55,526 --> 00:40:57,300 >> AUDIÊNCIA: Se encontrou? 816 00:40:57,300 --> 00:40:59,160 >> JASON HIRSCHHORN: Ou o que que deve ser - 817 00:40:59,160 --> 00:41:02,124 dá-me o pseudocódigo para o linha onde o encontramos. 818 00:41:02,124 --> 00:41:04,700 >> AUDIÊNCIA: Se i é igual a raiz i? 819 00:41:04,700 --> 00:41:06,650 >> JASON HIRSCHHORN: E então o que é que fazemos? 820 00:41:06,650 --> 00:41:07,590 >> AUDIÊNCIA: Return verdade. 821 00:41:07,590 --> 00:41:08,530 >> JASON HIRSCHHORN: Ótimo. 822 00:41:08,530 --> 00:41:16,890 Então, se eu é que eu - 823 00:41:16,890 --> 00:41:17,400 Oh, eles são ambos chamados i. 824 00:41:17,400 --> 00:41:18,470 Isso fica confuso. 825 00:41:18,470 --> 00:41:23,830 Mas se eu é que eu retornar true. 826 00:41:23,830 --> 00:41:25,620 Isso é provavelmente a próxima coisa que devemos fazer. 827 00:41:25,620 --> 00:41:27,300 Faz sentido. 828 00:41:27,300 --> 00:41:30,610 >> OK, agora nós não fizemos o nosso recursiva chamar ainda, porém, porque a recursiva 829 00:41:30,610 --> 00:41:32,300 chamada chamaria essa função novamente. 830 00:41:32,300 --> 00:41:41,460 Então, o que deve ser o próximo linha de pseudocódigo ser? 831 00:41:41,460 --> 00:41:42,730 Anna. 832 00:41:42,730 --> 00:41:43,980 >> AUDIÊNCIA: A ala esquerda. 833 00:41:43,980 --> 00:41:47,040 834 00:41:47,040 --> 00:41:47,590 >> JASON HIRSCHHORN: Seja específico, no entanto. 835 00:41:47,590 --> 00:41:50,600 Esta é uma árvore de busca binária, então o que se verificar o lado esquerdo envolve? 836 00:41:50,600 --> 00:41:51,890 >> AUDIÊNCIA: Então nó - 837 00:41:51,890 --> 00:41:53,342 Sinto muito, raiz. 838 00:41:53,342 --> 00:41:55,306 E, em seguida, seta para a esquerda. 839 00:41:55,306 --> 00:41:59,234 840 00:41:59,234 --> 00:42:00,720 Nó, nó, me desculpe. 841 00:42:00,720 --> 00:42:01,978 Eu não vou lê-lo corretamente. 842 00:42:01,978 --> 00:42:05,700 É chamado de nó, certo? 843 00:42:05,700 --> 00:42:09,270 >> JASON HIRSCHHORN: Ele será chamado raiz nessa função, mas de qualquer forma. 844 00:42:09,270 --> 00:42:10,925 O lado esquerdo - É mesmo? 845 00:42:10,925 --> 00:42:13,780 >> AUDIÊNCIA: Se ele não é igual i, então vamos chamar 846 00:42:13,780 --> 00:42:15,130 a função de novo? 847 00:42:15,130 --> 00:42:15,490 >> JASON HIRSCHHORN: Isso mesmo. 848 00:42:15,490 --> 00:42:17,870 Se isso não acontecer igual eu, vamos para chamar a função novamente. 849 00:42:17,870 --> 00:42:21,435 Mas o lado da árvore que vamos para chamar a função de novo? 850 00:42:21,435 --> 00:42:22,685 >> AUDIÊNCIA: No lado esquerdo. 851 00:42:22,685 --> 00:42:25,932 852 00:42:25,932 --> 00:42:27,670 >> JASON HIRSCHHORN: Nós não somos sempre vai chamá-lo à esquerda, se 853 00:42:27,670 --> 00:42:29,190 não igual a ele. 854 00:42:29,190 --> 00:42:29,610 >> AUDIÊNCIA: Oh, desculpe. 855 00:42:29,610 --> 00:42:31,200 Chamar à direita. 856 00:42:31,200 --> 00:42:33,680 >> JASON HIRSCHHORN: Queremos saber especificamente, embora - lembre-se, em um 857 00:42:33,680 --> 00:42:37,700 árvore binária de busca, tudo para O lado esquerdo é menor. 858 00:42:37,700 --> 00:42:40,460 Tudo à direita lado é maior. 859 00:42:40,460 --> 00:42:43,990 Portanto, não é apenas - sim, vá em frente. 860 00:42:43,990 --> 00:42:46,805 >> AUDIÊNCIA: Se é menor do que eu, então - 861 00:42:46,805 --> 00:42:52,130 862 00:42:52,130 --> 00:42:53,380 se é à esquerda - 863 00:42:53,380 --> 00:42:56,160 864 00:42:56,160 --> 00:42:58,606 >> JASON HIRSCHHORN: Então, se ri é inferior a - 865 00:42:58,606 --> 00:43:01,854 866 00:43:01,854 --> 00:43:09,110 por isso, se o nosso número é menor do que eu, de que lado queremos ir? 867 00:43:09,110 --> 00:43:15,120 >> AUDIÊNCIA: Nós queremos ir para o lado direito. 868 00:43:15,120 --> 00:43:16,250 >> JASON HIRSCHHORN: Nós queremos ir - 869 00:43:16,250 --> 00:43:19,210 deixe-me desenhar uma árvore rápida. 870 00:43:19,210 --> 00:43:23,850 Se este é 5, esta será de 3. 871 00:43:23,850 --> 00:43:29,410 Portanto, se ri é inferior a cinco, o que lado queremos ir? 872 00:43:29,410 --> 00:43:30,390 >> AUDIÊNCIA: Desculpe, o quê? 873 00:43:30,390 --> 00:43:33,190 >> JASON HIRSCHHORN: Nosso número é menor que o número que estamos 874 00:43:33,190 --> 00:43:34,710 olhando agora. 875 00:43:34,710 --> 00:43:35,890 >> AUDIÊNCIA: Ah, então nós queremos para ir para o lado esquerdo. 876 00:43:35,890 --> 00:43:36,240 É. 877 00:43:36,240 --> 00:43:36,920 Desculpe. 878 00:43:36,920 --> 00:43:37,230 >> JASON HIRSCHHORN: Exatamente. 879 00:43:37,230 --> 00:43:38,480 Não se preocupe. 880 00:43:38,480 --> 00:43:41,020 Na busca binária árvore, tudo é inferior à esquerda, 881 00:43:41,020 --> 00:43:42,110 é maior para a direita. 882 00:43:42,110 --> 00:43:46,700 Portanto, se o nosso número é menor do que o i estamos verificando - 883 00:43:46,700 --> 00:43:48,790 porque você vê no nó, que tem uma i - 884 00:43:48,790 --> 00:43:50,040 então você quer ir para a esquerda. 885 00:43:50,040 --> 00:43:55,480 886 00:43:55,480 --> 00:43:56,720 >> E este é um caminho fácil. 887 00:43:56,720 --> 00:44:01,700 O que é que a outra linha de pseudocódigo precisamos escrever? 888 00:44:01,700 --> 00:44:02,910 Carlos? 889 00:44:02,910 --> 00:44:05,970 >> AUDIÊNCIA: É a mesma coisa, você só mudar lo para um sinal de maior que 890 00:44:05,970 --> 00:44:07,420 e vá para a direita. 891 00:44:07,420 --> 00:44:08,350 >> JASON HIRSCHHORN: Você pode dizê-lo mais uma vez? 892 00:44:08,350 --> 00:44:11,640 >> AUDIÊNCIA: Se o nosso número é maior do que eu, vá para a direita. 893 00:44:11,640 --> 00:44:24,900 894 00:44:24,900 --> 00:44:26,690 >> JASON HIRSCHHORN: Excelente trabalho no pseudocódigo. 895 00:44:26,690 --> 00:44:28,700 Vamos fazer isso no código real. 896 00:44:28,700 --> 00:44:33,280 E mais uma vez, este pseudocódigo vontade provavelmente levá-lo, porque é 897 00:44:33,280 --> 00:44:35,480 correto, 50% sobre esta questão. 898 00:44:35,480 --> 00:44:39,720 Mas isto também se traduz um pseudocódigo a uma, essencialmente, em código. 899 00:44:39,720 --> 00:44:44,380 >> Por isso, vamos fazer isso em C. Quem pode dar me a primeira linha de código? 900 00:44:44,380 --> 00:44:48,390 Na verdade, em primeiro lugar, antes de eu fazer que, deixe-me encostar - 901 00:44:48,390 --> 00:44:49,260 >> AUDIÊNCIA: Eu tenho uma pergunta. 902 00:44:49,260 --> 00:44:52,430 Por que você fez recuar o linha que eu te dei? 903 00:44:52,430 --> 00:44:54,160 >> JASON HIRSCHHORN: Porque Eu não podia escrever. 904 00:44:54,160 --> 00:44:55,240 Eu não sei. 905 00:44:55,240 --> 00:44:55,650 Você está certo. 906 00:44:55,650 --> 00:44:57,780 Essa linha deve estar por lá. 907 00:44:57,780 --> 00:45:11,600 908 00:45:11,600 --> 00:45:14,480 >> OK, aqui é a nossa função. 909 00:45:14,480 --> 00:45:18,090 E deixe-me encostar, também, nossa definição de um nó. 910 00:45:18,090 --> 00:45:23,320 911 00:45:23,320 --> 00:45:27,180 O que acontece se não o fizéssemos escrever typedef? 912 00:45:27,180 --> 00:45:30,240 Alguém sabe? 913 00:45:30,240 --> 00:45:32,570 >> AUDIÊNCIA: Não seria compilar. 914 00:45:32,570 --> 00:45:33,860 >> JASON HIRSCHHORN: seria compilar, sim. 915 00:45:33,860 --> 00:45:37,120 >> AUDIÊNCIA: Seria apenas declarar um exemplo, em vez de torná-lo um novo 916 00:45:37,120 --> 00:45:39,840 o tipo que você poderia declarar múltipla casos de? 917 00:45:39,840 --> 00:45:41,700 >> JASON HIRSCHHORN: Então não faria sabe - não seria 918 00:45:41,700 --> 00:45:43,120 apenas declarar um tipo. 919 00:45:43,120 --> 00:45:46,150 Você ainda pode fazer um monte de nós. 920 00:45:46,150 --> 00:45:48,070 >> AUDIÊNCIA: Mas não temos que escrever struct nó de cada vez? 921 00:45:48,070 --> 00:45:48,640 >> JASON HIRSCHHORN: Isso mesmo. 922 00:45:48,640 --> 00:45:50,960 Você teria que escrever nó struct de cada vez, em vez de apenas nó. 923 00:45:50,960 --> 00:45:55,270 Mas com typedef, você pode simplesmente escrever nó cada vez. 924 00:45:55,270 --> 00:45:58,240 OK, que não tenha dado - sim, Avica. 925 00:45:58,240 --> 00:46:01,520 >> AUDIÊNCIA: Se a raiz é igual a iguais nulo, retorna false. 926 00:46:01,520 --> 00:46:07,130 927 00:46:07,130 --> 00:46:09,490 >> JASON HIRSCHHORN: Ótimo, e esse é o nosso caso base. 928 00:46:09,490 --> 00:46:11,200 Próxima linha de código. 929 00:46:11,200 --> 00:46:13,999 Alguém que não tenha dado me uma linha de código ainda? 930 00:46:13,999 --> 00:46:14,945 É. 931 00:46:14,945 --> 00:46:23,360 >> AUDIÊNCIA: arrow Root i é igual igual a i. 932 00:46:23,360 --> 00:46:27,260 Em seguida, retornar true. 933 00:46:27,260 --> 00:46:29,162 >> JASON HIRSCHHORN: Ótimo. 934 00:46:29,162 --> 00:46:32,048 Próxima linha? 935 00:46:32,048 --> 00:46:32,790 É. 936 00:46:32,790 --> 00:46:34,010 Alguém mais? 937 00:46:34,010 --> 00:46:36,774 E então você pode ir em seguida. 938 00:46:36,774 --> 00:46:44,820 >> AUDIÊNCIA: Else se seta raiz i é inferior a i regresso 939 00:46:44,820 --> 00:46:47,737 função chamada raiz achado - 940 00:46:47,737 --> 00:46:50,611 >> JASON HIRSCHHORN: Desculpe. 941 00:46:50,611 --> 00:46:56,272 >> AUDIÊNCIA: root Voltar achado aponta para a esquerda vírgula i. 942 00:46:56,272 --> 00:47:01,760 943 00:47:01,760 --> 00:47:08,440 >> JASON HIRSCHHORN: Então, se ri é maior que a coisa na árvore, nós queremos 944 00:47:08,440 --> 00:47:09,573 ir para a esquerda? 945 00:47:09,573 --> 00:47:11,790 >> AUDIÊNCIA: Não, eu tinha que comutada. 946 00:47:11,790 --> 00:47:13,040 >> JASON HIRSCHHORN: Qual? 947 00:47:13,040 --> 00:47:16,310 948 00:47:16,310 --> 00:47:16,950 >> AUDIÊNCIA: Não, sim. 949 00:47:16,950 --> 00:47:19,050 Eu tenho um menor que assinar lá. 950 00:47:19,050 --> 00:47:22,890 >> JASON HIRSCHHORN: Certo, se ri é menos do que o que está na raiz - 951 00:47:22,890 --> 00:47:25,660 nossa raiz atual - então nós quer ir para a esquerda. 952 00:47:25,660 --> 00:47:26,960 E o que é a última linha, você? 953 00:47:26,960 --> 00:47:30,930 >> AUDIÊNCIA: Basicamente a mesma coisa, excepto mudar o maior ou 954 00:47:30,930 --> 00:47:34,690 igual a menos do que e esquerda para a direita. 955 00:47:34,690 --> 00:47:43,590 956 00:47:43,590 --> 00:47:43,680 >> JASON HIRSCHHORN: Excelente. 957 00:47:43,680 --> 00:47:48,430 Alguém tem alguma dúvida sobre isso? 958 00:47:48,430 --> 00:47:52,560 Por isso, algumas outras coisas que faria ter sido correta é que 959 00:47:52,560 --> 00:47:53,810 pode ser a-ltiff. 960 00:47:53,810 --> 00:47:56,520 961 00:47:56,520 --> 00:47:59,520 Guess, tecnicamente, nenhum destes realmente necessita também ser-ltiff. 962 00:47:59,520 --> 00:48:00,950 >> Além disso, há, provavelmente, só um caso aqui em baixo. 963 00:48:00,950 --> 00:48:02,380 Então, isso é, provavelmente, o seu último caso. 964 00:48:02,380 --> 00:48:04,000 Você não precisa sequer de que-ltiff. 965 00:48:04,000 --> 00:48:06,160 Mas, provavelmente, bom para escrever que, para ser claro. 966 00:48:06,160 --> 00:48:06,660 É. 967 00:48:06,660 --> 00:48:09,200 >> AUDIÊNCIA: Então você não acha que o teste - se cometer erros, por exemplo, 968 00:48:09,200 --> 00:48:11,725 na sintaxe - 969 00:48:11,725 --> 00:48:13,990 erros pequenos de sintaxe - 970 00:48:13,990 --> 00:48:17,810 como é que se começa a tomar no questionário? 971 00:48:17,810 --> 00:48:21,300 >> JASON HIRSCHHORN: Geralmente no questionário, pequeno erro de sintaxe ou pequeno 972 00:48:21,300 --> 00:48:24,010 erros de estilo não perder pontos. 973 00:48:24,010 --> 00:48:26,610 Então, se você se esqueceu de um ponto e vírgula aqui, seria OK. 974 00:48:26,610 --> 00:48:30,290 Se você esqueceu de fechar este parêntese, que seria OK. 975 00:48:30,290 --> 00:48:34,880 >> Erros de sintaxe enormes que alteram a significado funcional do seu código 976 00:48:34,880 --> 00:48:37,600 dramaticamente, você pode obter tirado pontos para. 977 00:48:37,600 --> 00:48:40,330 Ou geralmente, só você classificação sobre se ou não o seu 978 00:48:40,330 --> 00:48:42,150 funções de código, mesmo - 979 00:48:42,150 --> 00:48:44,830 não a sua concepção tanto, e não seu estilo. 980 00:48:44,830 --> 00:48:50,780 981 00:48:50,780 --> 00:48:55,480 >> Vamos agora codificar um iterativo versão do achado. 982 00:48:55,480 --> 00:49:00,400 983 00:49:00,400 --> 00:49:03,450 Então, ele vai ser muito semelhante, mas há certamente vai ser 984 00:49:03,450 --> 00:49:06,250 algumas diferenças fundamentais. 985 00:49:06,250 --> 00:49:09,160 No entanto, nosso pseudocódigo provavelmente pode ir - 986 00:49:09,160 --> 00:49:11,610 ainda podemos ter uma linha do pseudocódigo e descobrir o que o 987 00:49:11,610 --> 00:49:14,160 A linha é neste caso. 988 00:49:14,160 --> 00:49:18,010 >> Assim, em uma versão interativa, o que que você acha, Julia, se 989 00:49:18,010 --> 00:49:19,260 ser a primeira linha? 990 00:49:19,260 --> 00:49:23,100 991 00:49:23,100 --> 00:49:26,920 >> AUDIÊNCIA: Mais uma vez, em boolean iterativo, você precisa configurar um loop for, certo? 992 00:49:26,920 --> 00:49:27,660 >> JASON HIRSCHHORN: OK. 993 00:49:27,660 --> 00:49:38,480 >> AUDIÊNCIA: Assim como para, k, para x é igual a 0, x é inferior a i. 994 00:49:38,480 --> 00:49:42,260 Ou não, x é menor que o tamanho da árvore. 995 00:49:42,260 --> 00:49:42,760 >> JASON HIRSCHHORN: A árvore. 996 00:49:42,760 --> 00:49:46,660 Então, nós realmente não sabemos o tamanho da árvore, e nós realmente não sei para 997 00:49:46,660 --> 00:49:48,900 quantas vezes nós podemos ir, por isso, o que é um diferente tipo de loop que pode ser 998 00:49:48,900 --> 00:49:50,150 melhor neste caso? 999 00:49:50,150 --> 00:49:53,250 1000 00:49:53,250 --> 00:49:55,244 >> AUDIÊNCIA: Se mais? 1001 00:49:55,244 --> 00:49:57,070 >> JASON HIRSCHHORN: Se outra pessoa não pode ser uma malha. 1002 00:49:57,070 --> 00:49:58,935 Assim que é um tipo de loop podemos apenas ir até algum caso for atendida? 1003 00:49:58,935 --> 00:50:07,250 1004 00:50:07,250 --> 00:50:11,560 Qual é o único outro tipo de loop em C, além de um loop? 1005 00:50:11,560 --> 00:50:11,930 >> AUDIÊNCIA: While. 1006 00:50:11,930 --> 00:50:13,380 >> JASON HIRSCHHORN: Enquanto, exatamente. 1007 00:50:13,380 --> 00:50:16,430 Em um loop while, não precisa saber como - 1008 00:50:16,430 --> 00:50:18,450 um loop while e for loop pode fazer o exatamente a mesma coisa, mas a coisa boa 1009 00:50:18,450 --> 00:50:21,500 cerca de um loop while é que não precisamos saber o quão grande é a nossa árvore. 1010 00:50:21,500 --> 00:50:23,060 Então, nós estamos indo para ir até o quê? 1011 00:50:23,060 --> 00:50:25,880 1012 00:50:25,880 --> 00:50:28,032 >> AUDIÊNCIA: Até que ele é igual a o tamanho da - 1013 00:50:28,032 --> 00:50:32,320 >> JASON HIRSCHHORN: Bem, é muito semelhante ao nosso processo recursivo. 1014 00:50:32,320 --> 00:50:33,360 So - 1015 00:50:33,360 --> 00:50:36,470 >> AUDIÊNCIA: Enquanto raiz i não é igual a i. 1016 00:50:36,470 --> 00:50:37,620 >> JASON HIRSCHHORN: Isso é realmente muito próximos. 1017 00:50:37,620 --> 00:50:39,430 Enquanto raiz i - 1018 00:50:39,430 --> 00:50:40,610 vamos tentar. 1019 00:50:40,610 --> 00:50:41,180 Eu não acho que [inaudível] 1020 00:50:41,180 --> 00:50:43,026 onde i raiz não é igual a i. 1021 00:50:43,026 --> 00:50:47,380 1022 00:50:47,380 --> 00:50:49,460 Podemos precisar mudá-lo em um pouco pouco, mas isso parece que é bastante 1023 00:50:49,460 --> 00:50:50,160 bom, por enquanto. 1024 00:50:50,160 --> 00:50:51,710 Então, vamos fazer isso. 1025 00:50:51,710 --> 00:50:55,660 >> Além disso, lembre-se, não podemos assumir por questão. 1026 00:50:55,660 --> 00:50:57,880 Você não assumir que o raiz será não-nulo. 1027 00:50:57,880 --> 00:51:01,914 Então, o que você acha que a muito primeira coisa que devemos fazer é? 1028 00:51:01,914 --> 00:51:02,770 >> AUDIÊNCIA: Basta fazer o mesmo coisa como antes. 1029 00:51:02,770 --> 00:51:05,260 Se a raiz é igual a iguais nulo, retorna false. 1030 00:51:05,260 --> 00:51:11,030 1031 00:51:11,030 --> 00:51:12,130 >> JASON HIRSCHHORN: Ótimo. 1032 00:51:12,130 --> 00:51:13,820 Assim, poderia ser nulo. 1033 00:51:13,820 --> 00:51:15,810 Por isso, queremos nos livrar de la imediatamente. 1034 00:51:15,810 --> 00:51:19,560 E então vamos verificar se raiz i não é igual a i. 1035 00:51:19,560 --> 00:51:24,480 Então, dizer que estamos buscando nesta árvore para 3, raiz i não é igual a i, agora 1036 00:51:24,480 --> 00:51:25,950 estamos em nosso loop while. 1037 00:51:25,950 --> 00:51:27,500 O que queremos fazer? 1038 00:51:27,500 --> 00:51:32,320 1039 00:51:32,320 --> 00:51:35,430 E, novamente, ele vai ser bastante semelhante à nossa versão recursiva. 1040 00:51:35,430 --> 00:51:36,230 É. 1041 00:51:36,230 --> 00:51:40,470 >> AUDIÊNCIA: Então você gostaria de iteração, ou continue indo para baixo da árvore, desde que 1042 00:51:40,470 --> 00:51:42,400 a raiz não é igual a nulo. 1043 00:51:42,400 --> 00:51:45,120 1044 00:51:45,120 --> 00:51:46,640 >> Jason HIRSCHHORN: Enquanto o raiz não é igual a nulo? 1045 00:51:46,640 --> 00:51:50,200 >> AUDIÊNCIA: O traço raiz i não é igual a nulo. 1046 00:51:50,200 --> 00:51:51,220 Apenas a raiz, sim. 1047 00:51:51,220 --> 00:51:52,920 Como desde a raiz é não é igual a null. 1048 00:51:52,920 --> 00:51:54,240 >> JASON HIRSCHHORN: Então você quer para mudar isso em raiz 1049 00:51:54,240 --> 00:51:56,590 não é igual a zero? 1050 00:51:56,590 --> 00:51:59,020 >> AUDIÊNCIA: Yeah. 1051 00:51:59,020 --> 00:52:00,800 >> AUDIÊNCIA: Podíamos combinar estes, certo? 1052 00:52:00,800 --> 00:52:02,990 Nós não precisamos de o caso, inicialmente. 1053 00:52:02,990 --> 00:52:05,180 >> JASON HIRSCHHORN: OK, então se nós não - 1054 00:52:05,180 --> 00:52:08,140 se combiná-los, então nós vamos fazer enquanto raiz não é igual a zero, e 1055 00:52:08,140 --> 00:52:10,800 se a raiz passa a ser nulo no começando, o que fazemos aqui? 1056 00:52:10,800 --> 00:52:11,450 >> AUDIÊNCIA: Return false. 1057 00:52:11,450 --> 00:52:12,730 >> JASON HIRSCHHORN: Ótimo. 1058 00:52:12,730 --> 00:52:14,110 Assim, em ambos os sentidos, provavelmente, teria funcionado. 1059 00:52:14,110 --> 00:52:15,645 Esta é uma forma diferente, e essa combina-lo. 1060 00:52:15,645 --> 00:52:18,950 Mas, novamente, se você fez uma ou outra maneira, estamos não vai tirar design 1061 00:52:18,950 --> 00:52:19,800 pontos no quiz. 1062 00:52:19,800 --> 00:52:21,020 Mas isso parece ser bom. 1063 00:52:21,020 --> 00:52:23,940 >> Assim, enquanto a raiz não é igual nula, o que é o primeiro 1064 00:52:23,940 --> 00:52:25,400 coisa que deseja verificar? 1065 00:52:25,400 --> 00:52:26,330 Alguém mais? 1066 00:52:26,330 --> 00:52:29,720 Null, qual é a primeira coisa? 1067 00:52:29,720 --> 00:52:32,850 >> AUDIÊNCIAS: Se ri é inferior a - 1068 00:52:32,850 --> 00:52:36,140 oh, eu acho que, se já verificou-se na raiz. 1069 00:52:36,140 --> 00:52:40,830 Então, se a seta raiz i é igual a i - 1070 00:52:40,830 --> 00:52:40,990 >> JASON HIRSCHHORN: Desculpe? 1071 00:52:40,990 --> 00:52:45,840 >> AUDIÊNCIA: Se a seta raiz i é igual é igual a i - 1072 00:52:45,840 --> 00:52:47,090 >> JASON HIRSCHHORN: O que vamos fazer? 1073 00:52:47,090 --> 00:52:50,300 1074 00:52:50,300 --> 00:52:51,550 >> AUDIÊNCIA: Return verdade. 1075 00:52:51,550 --> 00:52:58,850 1076 00:52:58,850 --> 00:52:59,280 >> JASON HIRSCHHORN: Ótimo. 1077 00:52:59,280 --> 00:53:00,530 E o que vem a seguir? 1078 00:53:00,530 --> 00:53:04,510 1079 00:53:04,510 --> 00:53:06,843 Jeff, qual é a próxima linha de código? 1080 00:53:06,843 --> 00:53:16,190 >> AUDIÊNCIA: Se i é inferior a seta raiz i, então é igual a raiz raiz seta esquerda. 1081 00:53:16,190 --> 00:53:21,550 >> JASON Hirschhorn: iguais Raiz seta raiz esquerda. 1082 00:53:21,550 --> 00:53:24,530 Então, isso é provavelmente o maior diferença aqui neste iterativo 1083 00:53:24,530 --> 00:53:26,600 versão oposta à versão recursiva. 1084 00:53:26,600 --> 00:53:28,970 A versão recursiva chamar a função novamente. 1085 00:53:28,970 --> 00:53:32,640 Estaremos atualizando raiz quando chamamos a nova função. 1086 00:53:32,640 --> 00:53:34,170 Aqui não estamos chamando uma nova função. 1087 00:53:34,170 --> 00:53:37,610 Estamos simplesmente atualizando raiz nesta função. 1088 00:53:37,610 --> 00:53:38,880 Isso é excelente. 1089 00:53:38,880 --> 00:53:40,730 E o que é a última linha de código? 1090 00:53:40,730 --> 00:53:43,950 1091 00:53:43,950 --> 00:53:44,880 Sim, Mario? 1092 00:53:44,880 --> 00:53:48,290 >> AUDIÊNCIA: iguais raiz Else seta para a direita da raiz. 1093 00:53:48,290 --> 00:53:49,492 >> JASON HIRSCHHORN: Desculpe? 1094 00:53:49,492 --> 00:53:52,340 >> Iguais Raiz: Público seta para a direita da raiz. 1095 00:53:52,340 --> 00:53:55,590 1096 00:53:55,590 --> 00:53:57,140 >> JASON HIRSCHHORN: Você poderia também escrever algo como isto? 1097 00:53:57,140 --> 00:54:02,786 1098 00:54:02,786 --> 00:54:03,890 >> AUDIÊNCIA: Eu não tenho idéia. 1099 00:54:03,890 --> 00:54:05,140 >> JASON HIRSCHHORN: Você não pode. 1100 00:54:05,140 --> 00:54:07,302 1101 00:54:07,302 --> 00:54:08,270 Você não pode fazer é igual a mais. 1102 00:54:08,270 --> 00:54:10,780 OK, então isso parece ser bom. 1103 00:54:10,780 --> 00:54:13,620 Por que não vamos apenas fazer isso para limpá-lo. 1104 00:54:13,620 --> 00:54:15,220 Isso parece ótimo, e isso iria funcionar. 1105 00:54:15,220 --> 00:54:16,920 E gostaríamos de sair. 1106 00:54:16,920 --> 00:54:21,460 >> Se esquerdo raiz estava certo nulo ou raiz foi nula, chegaríamos até aqui. 1107 00:54:21,460 --> 00:54:22,470 Root seria igual a nulo. 1108 00:54:22,470 --> 00:54:24,270 Nós sair do nosso loop, e nós return false. 1109 00:54:24,270 --> 00:54:26,280 Assim, quando sair do loop, nós retornar false. 1110 00:54:26,280 --> 00:54:29,520 1111 00:54:29,520 --> 00:54:32,793 >> E, novamente, a um loop while foi perfeita aqui, porque nós não sabemos como 1112 00:54:32,793 --> 00:54:33,850 grande árvore é nossa. 1113 00:54:33,850 --> 00:54:36,460 Nós tentamos escrever o loop for, mas nós percebi que você tem que descobrir como 1114 00:54:36,460 --> 00:54:37,410 grande é antes do tempo. 1115 00:54:37,410 --> 00:54:38,720 É. 1116 00:54:38,720 --> 00:54:41,790 >> AUDIÊNCIA: Se este não fosse um arquivo binário árvore de busca, seria verdadeira matemática-y 1117 00:54:41,790 --> 00:54:44,220 escrevê-lo de forma iterativa, certo? 1118 00:54:44,220 --> 00:54:47,170 Como, se fosse uma árvore, mas não necessariamente - 1119 00:54:47,170 --> 00:54:49,730 por isso não foi tudo menor, à esquerda, e todo maior, à direita. 1120 00:54:49,730 --> 00:54:52,540 Seria muito difícil iterar sobre isso, certo? 1121 00:54:52,540 --> 00:54:55,720 Nós teríamos que salvar o que era antes em na árvore e voltar, 1122 00:54:55,720 --> 00:54:56,970 e coisas assim. 1123 00:54:56,970 --> 00:54:59,690 1124 00:54:59,690 --> 00:55:02,010 >> JASON HIRSCHHORN: Se não fosse um binário Pesquisa árvore, se foi apenas uma 1125 00:55:02,010 --> 00:55:04,740 árvore e as coisas não eram classificadas como esta - 1126 00:55:04,740 --> 00:55:07,440 e percebemos antes, quando Anna estava ajudando-nos que o que torna 1127 00:55:07,440 --> 00:55:08,800 classificada nos ajuda muito - 1128 00:55:08,800 --> 00:55:12,610 seria preciso, sim, sempre guardar onde estávamos anteriormente. 1129 00:55:12,610 --> 00:55:14,430 Mas pode haver um monte de onde estávamos previouslys. 1130 00:55:14,430 --> 00:55:17,730 Não poderia haver um monte de nós pai. 1131 00:55:17,730 --> 00:55:22,530 >> Provavelmente a melhor maneira de fazer isso seria ser a de continuar a empurrar as coisas para alguns 1132 00:55:22,530 --> 00:55:24,170 tipo de pilha ou fila. 1133 00:55:24,170 --> 00:55:26,030 Você nunca precisa codificar esta porque é um problema difícil. 1134 00:55:26,030 --> 00:55:30,820 Mas você empurrar algumas coisas para uma pilha ou fila e, em seguida, pop-los fora, e 1135 00:55:30,820 --> 00:55:31,890 depois avaliá-los. 1136 00:55:31,890 --> 00:55:34,200 >> E então tem alguma outra coisa onde na verdade você está colocando os nós e 1137 00:55:34,200 --> 00:55:36,090 em seguida, criar que, em seguida, procurar por isso. 1138 00:55:36,090 --> 00:55:38,700 Isso pode ser a melhor maneira de fazê-lo. 1139 00:55:38,700 --> 00:55:42,410 OK, qualquer dúvida sobre este problema? 1140 00:55:42,410 --> 00:55:44,670 >> AUDIÊNCIA: Trata-se de uma nota relacionada. 1141 00:55:44,670 --> 00:55:50,460 Será que vamos ter de comparar os tempos de execução para tabelas de hash, binário 1142 00:55:50,460 --> 00:55:52,160 árvores de busca, et cetera? 1143 00:55:52,160 --> 00:55:54,310 >> JASON HIRSCHHORN: Provavelmente. 1144 00:55:54,310 --> 00:55:56,150 Então, vamos fazer isso muito rapidamente. 1145 00:55:56,150 --> 00:55:58,490 Tempo de execução para a tabela de hash - 1146 00:55:58,490 --> 00:55:59,090 quais são os outros? 1147 00:55:59,090 --> 00:56:00,050 Árvore binária? 1148 00:56:00,050 --> 00:56:02,920 >> AUDIÊNCIA: listas de links. 1149 00:56:02,920 --> 00:56:04,780 >> JASON HIRSCHHORN: OK, vamos fazer de inserção. 1150 00:56:04,780 --> 00:56:09,980 Qual é o grande O de inserção em uma tabela hash? 1151 00:56:09,980 --> 00:56:13,080 1152 00:56:13,080 --> 00:56:15,285 Quais são os pressupostos você está fazendo? 1153 00:56:15,285 --> 00:56:17,760 >> AUDIÊNCIA: Você está inserindo no no início da lista de link. 1154 00:56:17,760 --> 00:56:19,860 >> JASON HIRSCHHORN: Provavelmente a primeira suposição é que não há colisões. 1155 00:56:19,860 --> 00:56:22,340 Se não há colisões, então o tempo de inserção é uma delas. 1156 00:56:22,340 --> 00:56:26,560 Se houver colisões, e você está fazendo encadeamento separado e inserindo 1157 00:56:26,560 --> 00:56:31,880 no início da lista de ligação, em seguida, a inserção é também constante. 1158 00:56:31,880 --> 00:56:34,700 >> Se você estiver fazendo uma tabela hash, mas você dispor de um método diferente de tratar 1159 00:56:34,700 --> 00:56:36,040 com colisões, o que é um método diferente? 1160 00:56:36,040 --> 00:56:41,580 1161 00:56:41,580 --> 00:56:42,960 O que há é um método diferente de tratar 1162 00:56:42,960 --> 00:56:44,205 colisão em uma tabela hash? 1163 00:56:44,205 --> 00:56:44,915 >> AUDIÊNCIA: Programação Linear. 1164 00:56:44,915 --> 00:56:45,540 >> JASON HIRSCHHORN: Programação Linear. 1165 00:56:45,540 --> 00:56:47,770 Então, vamos continuar procurando para o próximo ponto em aberto. 1166 00:56:47,770 --> 00:56:50,390 Isso não é tempo de inserção constante. 1167 00:56:50,390 --> 00:56:52,266 Você pode ter que passar por toda a tabela, de modo que 1168 00:56:52,266 --> 00:56:53,936 poderia ser grande O de n. 1169 00:56:53,936 --> 00:56:54,740 É. 1170 00:56:54,740 --> 00:56:57,690 >> AUDIÊNCIA: Caso contrário apenas o encadeamento? 1171 00:56:57,690 --> 00:57:00,160 >> JASON HIRSCHHORN: Nós fizemos encadeamento separado. 1172 00:57:00,160 --> 00:57:00,720 Essa foi a primeira. 1173 00:57:00,720 --> 00:57:01,560 Isso é o que a lista de link. 1174 00:57:01,560 --> 00:57:03,720 O nome fantasia é encadeamento separado. 1175 00:57:03,720 --> 00:57:06,880 Poderia ser qualquer tipo de estrutura de lista acontecer de fazer na lista de link. 1176 00:57:06,880 --> 00:57:10,490 >> Então, novamente, a inserção em uma tabela hash poderia ser de tempo constante. 1177 00:57:10,490 --> 00:57:13,160 E quanto a inserção em uma fila de empilhador? 1178 00:57:13,160 --> 00:57:19,260 1179 00:57:19,260 --> 00:57:20,640 >> AUDIÊNCIA: Isso não é constante? 1180 00:57:20,640 --> 00:57:21,530 >> JASON HIRSCHHORN: É tempo constante. 1181 00:57:21,530 --> 00:57:23,420 Você está apenas empurrando-o. 1182 00:57:23,420 --> 00:57:24,120 OK. 1183 00:57:24,120 --> 00:57:25,380 Inclusão, quais foram os outros? 1184 00:57:25,380 --> 00:57:27,100 Em uma tentativa? 1185 00:57:27,100 --> 00:57:30,252 O que é grande O de inserção em uma tentativa? 1186 00:57:30,252 --> 00:57:32,808 >> AUDIÊNCIA: Comprimento é constante. 1187 00:57:32,808 --> 00:57:34,560 Comprimento das mais longas - 1188 00:57:34,560 --> 00:57:36,998 o comprimento da palavra você está inserindo. 1189 00:57:36,998 --> 00:57:38,210 >> JASON HIRSCHHORN: Desculpe? 1190 00:57:38,210 --> 00:57:39,120 Espera, então o que eu ouço? 1191 00:57:39,120 --> 00:57:40,260 Você disse - o que foi que você disse? 1192 00:57:40,260 --> 00:57:41,650 Qual foi a sua resposta, Marcus? 1193 00:57:41,650 --> 00:57:43,640 >> AUDIÊNCIAS: O comprimento da palavra você está inserindo em caracteres, 1194 00:57:43,640 --> 00:57:45,480 assumindo que é uma tentativa personagem. 1195 00:57:45,480 --> 00:57:46,840 >> JASON HIRSCHHORN: OK, então o comprimento da palavra. 1196 00:57:46,840 --> 00:57:49,500 Nós vamos fazer uma suposição de que é uma seqüência de caracteres. 1197 00:57:49,500 --> 00:57:51,930 Você disse algo diferente, no entanto. 1198 00:57:51,930 --> 00:57:55,490 Você disse que o comprimento da palavra mais longa. 1199 00:57:55,490 --> 00:57:57,600 >> AUDIÊNCIA: Isso é apenas constante, certo? 1200 00:57:57,600 --> 00:57:58,440 >> JASON HIRSCHHORN: Por que seja constante? 1201 00:57:58,440 --> 00:58:00,970 >> AUDIÊNCIA: Como, se você usar grande O notação, então não variam de acordo com 1202 00:58:00,970 --> 00:58:04,680 sobre o número de coisas que já estão na tentativa. 1203 00:58:04,680 --> 00:58:07,344 >> JASON HIRSCHHORN: Então, faríamos dizer que é tempo constante. 1204 00:58:07,344 --> 00:58:11,840 É inserção constante, e isso é porque essa idéia - 1205 00:58:11,840 --> 00:58:14,820 dizer que temos uma palavra que é de 45 anos, ou uma palavra que é 60, que 1206 00:58:14,820 --> 00:58:16,800 tem um número constante. 1207 00:58:16,800 --> 00:58:21,050 E que seria apenas ser inserido em tempo constante. 1208 00:58:21,050 --> 00:58:26,060 >> Na prática, porém, não seria, obviamente, acontecem em um milésimo de segundo, 1209 00:58:26,060 --> 00:58:26,590 por exemplo. 1210 00:58:26,590 --> 00:58:28,880 Mas diríamos grande S é constante para uma tentativa. 1211 00:58:28,880 --> 00:58:31,330 E isso é um dos seus maiores vantagens. 1212 00:58:31,330 --> 00:58:33,330 >> E quanto a inserção em uma lista de links? 1213 00:58:33,330 --> 00:58:37,220 Apenas um genérico, lista de links ordenados? 1214 00:58:37,220 --> 00:58:37,700 É. 1215 00:58:37,700 --> 00:58:38,530 >> AUDIÊNCIA: eu tinha uma pergunta. 1216 00:58:38,530 --> 00:58:42,670 No teste, que eles nunca nos a perguntar tempo de inserção que é quatro etapas, 1217 00:58:42,670 --> 00:58:43,270 ou algo assim? 1218 00:58:43,270 --> 00:58:44,300 Ou é apenas - 1219 00:58:44,300 --> 00:58:47,670 quando você diz que tempo de inserção é um, isso apenas significa constante de tempo? 1220 00:58:47,670 --> 00:58:49,770 >> JASON HIRSCHHORN: Sim, eles iriam sempre perguntar, é grande O de n? 1221 00:58:49,770 --> 00:58:51,440 Big O log de n? 1222 00:58:51,440 --> 00:58:53,960 N ao quadrado constante. 1223 00:58:53,960 --> 00:58:56,520 Essas são realmente a única que você precisa saber. 1224 00:58:56,520 --> 00:58:58,420 E quanto a inserção no lista de links ordenados? 1225 00:58:58,420 --> 00:58:59,440 >> AUDIÊNCIA: eu tinha uma pergunta - 1226 00:58:59,440 --> 00:58:59,980 uma pergunta - 1227 00:58:59,980 --> 00:59:01,060 >> JASON HIRSCHHORN: Qual é a resposta a essa pergunta, embora? 1228 00:59:01,060 --> 00:59:02,120 >> AUDIÊNCIA: Espere, o que você pergunta? 1229 00:59:02,120 --> 00:59:06,750 >> JASON HIRSCHHORN: O que é grande O de inserção em uma lista de links ordenados? 1230 00:59:06,750 --> 00:59:07,070 >> AUDIÊNCIA: One? 1231 00:59:07,070 --> 00:59:09,400 Não espere, não espera, n. 1232 00:59:09,400 --> 00:59:11,420 >> JASON HIRSCHHORN: N. Além a lista de link. 1233 00:59:11,420 --> 00:59:12,706 E qual foi a sua pergunta? 1234 00:59:12,706 --> 00:59:16,440 >> AUDIÊNCIA: Então você escreveria o de k ou o de 1 para o - 1235 00:59:16,440 --> 00:59:18,150 >> JASON HIRSCHHORN: Ah. 1236 00:59:18,150 --> 00:59:21,830 Eu ia escrever o de 1, provavelmente. 1237 00:59:21,830 --> 00:59:24,160 Houve uma outra estrutura de dados que teria sido bom. 1238 00:59:24,160 --> 00:59:25,730 Árvore, árvore binária de busca. 1239 00:59:25,730 --> 00:59:27,510 O que há de inserção em uma árvore binária de busca? 1240 00:59:27,510 --> 00:59:31,190 1241 00:59:31,190 --> 00:59:33,900 >> AUDIÊNCIA: Login. 1242 00:59:33,900 --> 00:59:39,260 >> JASON HIRSCHHORN: Então, qual é o pior caso em uma árvore de busca binária? 1243 00:59:39,260 --> 00:59:45,350 Então, se acontecer para começar às 5, e cada número é superior a 5, em seguida, 1244 00:59:45,350 --> 00:59:48,760 temos 5, 7, 9, 11, et cetera. 1245 00:59:48,760 --> 00:59:52,255 Neste caso, é basicamente um link lista, e precisamos inserir todos 1246 00:59:52,255 --> 00:59:52,680 o caminho no final. 1247 00:59:52,680 --> 00:59:54,350 Por isso, é grande O de n. 1248 00:59:54,350 --> 00:59:57,720 >> Isso poderia ser o nosso pior caso em uma árvore de busca binária. 1249 00:59:57,720 --> 01:00:00,890 Obviamente, você nunca iria construir uma árvore de busca binária com 5 no 1250 01:00:00,890 --> 01:00:04,270 meio, sabendo que 5 ser o menor número. 1251 01:00:04,270 --> 01:00:08,030 Mas pode ser, se você estiver começando do zero. 1252 01:00:08,030 --> 01:00:10,980 Qualquer dúvida sobre isso antes de eu passar para outra pergunta? 1253 01:00:10,980 --> 01:00:11,560 Essa foi uma boa pergunta. 1254 01:00:11,560 --> 01:00:15,100 Eu gostaria de saber grande O de - 1255 01:00:15,100 --> 01:00:18,620 >> AUDIÊNCIA: E sobre a pesquisa para aqueles quatro? 1256 01:00:18,620 --> 01:00:20,400 >> JASON HIRSCHHORN: Definitivamente nós que pesquisa e classificação. 1257 01:00:20,400 --> 01:00:22,160 Fizemos todos os algoritmos, certo. 1258 01:00:22,160 --> 01:00:23,390 Espere, é que para Quiz 1? 1259 01:00:23,390 --> 01:00:23,980 Foi que cobria - 1260 01:00:23,980 --> 01:00:25,860 se você já tem que pergunta sobre Teste 1? 1261 01:00:25,860 --> 01:00:29,650 A grande O tempo de execução de busca binária, tipo de inserção, bubble sort? 1262 01:00:29,650 --> 01:00:30,160 >> AUDIÊNCIA: Yeah. 1263 01:00:30,160 --> 01:00:32,790 >> JASON HIRSCHHORN: Se você tivesse que pergunta sobre Teste 0, as probabilidades são que você não vai 1264 01:00:32,790 --> 01:00:35,180 obter exatamente a mesma pergunta em Teste 1. 1265 01:00:35,180 --> 01:00:36,300 Pode ser ainda bom saber desses. 1266 01:00:36,300 --> 01:00:38,520 Felizmente você deve saber gh já. 1267 01:00:38,520 --> 01:00:40,740 >> Mas outros tempos de execução logarítmicas são, provavelmente, bom saber. 1268 01:00:40,740 --> 01:00:42,890 Coisas que não foram abordados no quiz 0. 1269 01:00:42,890 --> 01:00:47,300 Como todos esses operadores estes tipos de dados abstratos. 1270 01:00:47,300 --> 01:00:50,760 >> OK, vamos seguir em frente. 1271 01:00:50,760 --> 01:00:52,190 Este deve ser muito rápido. 1272 01:00:52,190 --> 01:00:56,170 E esta é uma nova linguagem que não tem realmente codificado em antes. 1273 01:00:56,170 --> 01:00:59,300 Esta é uma pergunta perguntando de código em PHP. 1274 01:00:59,300 --> 01:01:01,950 Então, considere a matriz PHP abaixo. 1275 01:01:01,950 --> 01:01:06,150 Faça PHP códigos e / ou HTML tal que gera uma tabela de duas colunas com o TFS 1276 01:01:06,150 --> 01:01:08,810 nomes e casas. 1277 01:01:08,810 --> 01:01:11,600 >> Você nunca fez isso antes, esse problema específico. 1278 01:01:11,600 --> 01:01:16,270 Mas isso deve ser muito familiar para o que você fez em conjunto de problemas 7. 1279 01:01:16,270 --> 01:01:21,250 Então, eu estaria disposto a apostar que você vai ser pediu para codificar algo em PHP que 1280 01:01:21,250 --> 01:01:23,880 é muito semelhante ao que se fez em conjunto de problemas 7. 1281 01:01:23,880 --> 01:01:26,300 >> Em primeiro lugar, array não é tão específico. 1282 01:01:26,300 --> 01:01:28,140 Qual o tipo de matriz é isso? 1283 01:01:28,140 --> 01:01:29,080 >> AUDIÊNCIA: Associativo. 1284 01:01:29,080 --> 01:01:31,250 >> JASON HIRSCHHORN: É uma matriz associativa. 1285 01:01:31,250 --> 01:01:33,750 E qual é a diferença entre um matriz associativa e um objeto? 1286 01:01:33,750 --> 01:01:41,780 1287 01:01:41,780 --> 01:01:44,857 >> AUDIÊNCIA: uma matriz de objeto tem um índice de números inteiros, e uma matriz associativa 1288 01:01:44,857 --> 01:01:47,814 é um índice de uma string, ou algo parecido. 1289 01:01:47,814 --> 01:01:50,570 1290 01:01:50,570 --> 01:01:54,880 >> JASON HIRSCHHORN: Então, uma série de objetos teriam índices de 1291 01:01:54,880 --> 01:01:57,090 inteiros, mas um objeto tem campos. 1292 01:01:57,090 --> 01:02:01,590 Tem esses nomes campos como nome, casa, estudante. 1293 01:02:01,590 --> 01:02:03,720 Você tem uma idéia? 1294 01:02:03,720 --> 01:02:06,630 >> AUDIÊNCIA: Bem, associativo matriz é em PHP, certo? 1295 01:02:06,630 --> 01:02:07,880 E objeto está em JavaScript? 1296 01:02:07,880 --> 01:02:12,330 1297 01:02:12,330 --> 01:02:14,820 >> JASON HIRSCHHORN: Honestamente, não há nenhuma diferença real entre os dois. 1298 01:02:14,820 --> 01:02:19,540 Ambos têm seqüências como as chaves, e pode tem basicamente qualquer coisa como o valor. 1299 01:02:19,540 --> 01:02:21,250 Diferentes linguagens chamar um coisa matriz associativa, 1300 01:02:21,250 --> 01:02:22,750 uma coisa um objeto. 1301 01:02:22,750 --> 01:02:25,960 Então, honestamente, não existe uma verdadeira diferença, mas não há dúvida alguma 1302 01:02:25,960 --> 01:02:27,730 diferenças sintáticas entre os dois. 1303 01:02:27,730 --> 01:02:28,200 É. 1304 01:02:28,200 --> 01:02:33,580 >> AUDIÊNCIA: Então é objeto também codificado sob o capô como uma tabela hash, então? 1305 01:02:33,580 --> 01:02:35,796 >> JASON HIRSCHHORN: O que você faz Quer dizer, codificado sob o capô? 1306 01:02:35,796 --> 01:02:38,017 >> AUDIÊNCIA: Fomos informados de que associativa disposição era tecnicamente um 1307 01:02:38,017 --> 01:02:39,960 Tabela de Hash. 1308 01:02:39,960 --> 01:02:44,510 Então, é objeto também tecnicamente uma tabela hash? 1309 01:02:44,510 --> 01:02:45,350 >> JASON HIRSCHHORN: Eu não vou para responder a essa pergunta. 1310 01:02:45,350 --> 01:02:46,600 Eu vou voltar para você sobre isso. 1311 01:02:46,600 --> 01:02:48,980 Mas eu não acho que de qualquer daqueles assim. 1312 01:02:48,980 --> 01:02:53,790 Mas, em qualquer maneira, uma matriz associativa e objeto, geralmente, as pessoas usam os 1313 01:02:53,790 --> 01:02:54,910 termos como sinônimos. 1314 01:02:54,910 --> 01:02:57,630 Neste caso, a parte legal é que você pode usar as teclas. 1315 01:02:57,630 --> 01:03:00,580 Cordas como chaves, ao invés de apenas números simples. 1316 01:03:00,580 --> 01:03:02,070 >> Então, eu tenho falado sobre isso por algum tempo. 1317 01:03:02,070 --> 01:03:04,090 Felizmente, algumas pessoas têm chegado começou com isso. 1318 01:03:04,090 --> 01:03:08,050 Nós vamos escrever algum PHP e HTML código, de modo que temos uma de duas colunas 1319 01:03:08,050 --> 01:03:11,830 tabela com os nomes e as casas do TFS. 1320 01:03:11,830 --> 01:03:15,380 >> OK, eu também gostaria de um cabeçalho linha nesta tabela. 1321 01:03:15,380 --> 01:03:18,410 Então, eu estou indo para ir direto para isso. 1322 01:03:18,410 --> 01:03:20,770 Estamos indo para o arquivo, novo, e nós vamos - 1323 01:03:20,770 --> 01:03:27,780 1324 01:03:27,780 --> 01:03:28,320 >> OK. 1325 01:03:28,320 --> 01:03:29,970 Como faço para iniciar uma mesa? 1326 01:03:29,970 --> 01:03:32,090 Qual é a tag, Michael, para iniciar uma mesa? 1327 01:03:32,090 --> 01:03:32,890 >> AUDIÊNCIA: Table. 1328 01:03:32,890 --> 01:03:34,020 >> JASON HIRSCHHORN: Table. 1329 01:03:34,020 --> 01:03:37,870 E se eu abrir uma tag, o que mais eu preciso? 1330 01:03:37,870 --> 01:03:39,810 >> AUDIÊNCIA: Uma cabeça? 1331 01:03:39,810 --> 01:03:41,040 Ou, eu acho, de classe. 1332 01:03:41,040 --> 01:03:41,730 >> JASON HIRSCHHORN: Então, me desculpe. 1333 01:03:41,730 --> 01:03:45,430 Suponha que já escrevi doctab, HTML, todas essas coisas. 1334 01:03:45,430 --> 01:03:50,230 Mas se eu abrir essa tag da tabela, o que mais eu preciso para escrever? 1335 01:03:50,230 --> 01:03:53,450 para validar HTML? 1336 01:03:53,450 --> 01:03:55,000 >> AUDIÊNCIA: Feche-lo. 1337 01:03:55,000 --> 01:03:56,050 >> JASON HIRSCHHORN: Feche a tag. 1338 01:03:56,050 --> 01:03:57,575 Como faço para escrever uma tag close-mesa? 1339 01:03:57,575 --> 01:03:59,580 >> AUDIÊNCIA: Dot cortar mesa. 1340 01:03:59,580 --> 01:04:00,960 >> JASON HIRSCHHORN: Corte mesa, ótimo. 1341 01:04:00,960 --> 01:04:02,730 Provavelmente faz sentido escrever tanto dos em conjunto porque 1342 01:04:02,730 --> 01:04:03,870 você tem que fazê-lo. 1343 01:04:03,870 --> 01:04:08,575 OK, se eu quiser uma linha de cabeçalho, como fazer Eu escrevo uma linha de cabeçalho com títulos? 1344 01:04:08,575 --> 01:04:11,650 1345 01:04:11,650 --> 01:04:19,290 >> AUDIÊNCIA: É menos de 10 horas perto - 1346 01:04:19,290 --> 01:04:21,550 TR, sim. 1347 01:04:21,550 --> 01:04:22,100 >> JASON HIRSCHHORN: TR? 1348 01:04:22,100 --> 01:04:25,080 >> AUDIÊNCIA: Então mesma coisa, a barra, sim. 1349 01:04:25,080 --> 01:04:26,610 >> JASON HIRSCHHORN: OK, e dá-me duas colunas. 1350 01:04:26,610 --> 01:04:30,100 1351 01:04:30,100 --> 01:04:33,210 >> AUDIÊNCIA: T D? 1352 01:04:33,210 --> 01:04:34,460 >> JASON HIRSCHHORN: OK. 1353 01:04:34,460 --> 01:04:37,730 1354 01:04:37,730 --> 01:04:39,520 Eu quero duas colunas. 1355 01:04:39,520 --> 01:04:40,960 Isso me dá duas colunas? 1356 01:04:40,960 --> 01:04:43,880 Quantas colunas é isso? 1357 01:04:43,880 --> 01:04:45,920 Uma. 1358 01:04:45,920 --> 01:04:47,170 Então, vamos copiar e colar este. 1359 01:04:47,170 --> 01:04:59,750 1360 01:04:59,750 --> 01:05:03,390 >> Então, na verdade, no questionário, todo este código que temos escrito até agora foi 1361 01:05:03,390 --> 01:05:04,710 realmente dado a você. 1362 01:05:04,710 --> 01:05:06,200 Mas você deve, provavelmente, ainda sabe como escrevê-lo. 1363 01:05:06,200 --> 01:05:06,470 É. 1364 01:05:06,470 --> 01:05:10,636 >> AUDIÊNCIA: Sua casa situa-se entre os dois. 1365 01:05:10,636 --> 01:05:11,130 >> JASON HIRSCHHORN: Lança. 1366 01:05:11,130 --> 01:05:12,720 Deve ir lá, certo? 1367 01:05:12,720 --> 01:05:14,600 Boa chamada. 1368 01:05:14,600 --> 01:05:17,760 Então, novamente, todo este código é realmente dada a você no teste real. 1369 01:05:17,760 --> 01:05:19,570 Mas é divertido escrevê-lo, e você deve saber como escrevê-lo. 1370 01:05:19,570 --> 01:05:23,640 Portanto, este é o lugar onde você precisa para começar o seu código. 1371 01:05:23,640 --> 01:05:25,150 O que precisamos para escrever aqui? 1372 01:05:25,150 --> 01:05:28,640 1373 01:05:28,640 --> 01:05:30,565 >> Desculpe, eu preciso mudar o nome desse arquivo. 1374 01:05:30,565 --> 01:05:41,180 1375 01:05:41,180 --> 01:05:44,270 Por isso, ele foi salvo em um arquivo HTML., não em um arquivo PHP.. 1376 01:05:44,270 --> 01:05:47,030 Essas coisas não significaria nada em um arquivo PHP.. 1377 01:05:47,030 --> 01:05:48,500 Então, nós estamos em um arquivo HTML.. 1378 01:05:48,500 --> 01:05:50,090 Qual é a primeira coisa Eu preciso escrever? 1379 01:05:50,090 --> 01:05:52,990 Eu quero colocar um pouco de PHP código em uma página HTML. 1380 01:05:52,990 --> 01:05:57,300 >> AUDIÊNCIA: PHP, como outra cenoura e ponto de interrogação PHP, certo? 1381 01:05:57,300 --> 01:05:58,310 >> JASON HIRSCHHORN: Ótimo. 1382 01:05:58,310 --> 01:05:59,360 E como faço para acabar com isso? 1383 01:05:59,360 --> 01:06:02,510 >> AUDIÊNCIA: Com um ponto de interrogação. 1384 01:06:02,510 --> 01:06:03,120 >> JASON HIRSCHHORN: Isso é ótimo. 1385 01:06:03,120 --> 01:06:07,090 Essa é a primeira coisa que eu preciso, se eu quiser colocar algum código PHP aqui. 1386 01:06:07,090 --> 01:06:11,210 >> AUDIÊNCIA:. Pensei PHP arquivo pode demorar HTML. 1387 01:06:11,210 --> 01:06:12,290 >> JASON HIRSCHHORN: Yeah. 1388 01:06:12,290 --> 01:06:15,330 Um arquivo PHP. Pode levar algum HTML e ser exibido. 1389 01:06:15,330 --> 01:06:16,450 Esse foi o meu mal. 1390 01:06:16,450 --> 01:06:18,300 Eu estava apenas tentando imitar o que era no quiz. 1391 01:06:18,300 --> 01:06:21,910 1392 01:06:21,910 --> 01:06:24,720 >> OK, desculpe para confundi-lo. 1393 01:06:24,720 --> 01:06:25,550 Sim, practice.HTML. 1394 01:06:25,550 --> 01:06:27,340 Agora vamos colocar algum código PHP dentro 1395 01:06:27,340 --> 01:06:30,530 O que é a primeira linha de Código PHP que devo escrever? 1396 01:06:30,530 --> 01:06:33,360 Eu vou passar por essa matriz e torná-lo em uma tabela. 1397 01:06:33,360 --> 01:06:34,600 É. 1398 01:06:34,600 --> 01:06:37,160 >> AUDIÊNCIA: Você pode usar um loop for H ou um loop for. 1399 01:06:37,160 --> 01:06:38,415 >> JASON HIRSCHHORN: OK, o que você quer usar? 1400 01:06:38,415 --> 01:06:40,720 >> AUDIÊNCIA: Gostaria de usar um loop for. 1401 01:06:40,720 --> 01:06:48,700 Para, em seguida, você faz sinal de dólar i é igual a 0 ponto e vírgula dólar 1402 01:06:48,700 --> 01:06:51,580 assinar i inferior a 2. 1403 01:06:51,580 --> 01:06:55,455 E então vírgula i dólar assinar i plus plus. 1404 01:06:55,455 --> 01:07:01,890 1405 01:07:01,890 --> 01:07:03,880 >> JASON HIRSCHHORN: Como fazer você sabe usar um 2? 1406 01:07:03,880 --> 01:07:10,444 >> AUDIÊNCIA: Porque havia dois arrays associativos dentro do maior 1407 01:07:10,444 --> 01:07:11,960 array associativo. 1408 01:07:11,960 --> 01:07:13,610 >> JASON HIRSCHHORN: Então, a coisa mais importante do não uma matriz associado. 1409 01:07:13,610 --> 01:07:15,500 A grande coisa é apenas uma matriz normal. 1410 01:07:15,500 --> 01:07:17,380 Mas você está certo, há duas matrizes associativas 1411 01:07:17,380 --> 01:07:18,910 dentro da nossa matriz maior. 1412 01:07:18,910 --> 01:07:20,310 É por isso que você usa dois. 1413 01:07:20,310 --> 01:07:24,270 Eu me sinto desconfortável assumindo que eles são dois, então o que é uma maneira de escrever 1414 01:07:24,270 --> 01:07:26,810 isso sem assumir que eles são 2? 1415 01:07:26,810 --> 01:07:27,507 >> AUDIÊNCIA: [inaudível]? 1416 01:07:27,507 --> 01:07:29,165 >> JASON HIRSCHHORN: OK, como você escreve isso? 1417 01:07:29,165 --> 01:07:35,262 >> AUDIÊNCIA: Foreach cifrão tfs ou como sinal de dólar tf. 1418 01:07:35,262 --> 01:07:38,360 1419 01:07:38,360 --> 01:07:41,960 >> JASON HIRSCHHORN: OK, então para cada tfs como tfs, eu quero, agora 1420 01:07:41,960 --> 01:07:43,650 mais uma vez, ter a minha mesa. 1421 01:07:43,650 --> 01:07:45,250 Então, quem pode me dar o próxima linha de código? 1422 01:07:45,250 --> 01:07:52,870 1423 01:07:52,870 --> 01:07:59,810 >> AUDIÊNCIA: Imprimir e, em seguida, em citações, o fim do suporte tr 1424 01:07:59,810 --> 01:08:02,670 suporte, citações final. 1425 01:08:02,670 --> 01:08:05,300 Parênteses End, ponto e vírgula. 1426 01:08:05,300 --> 01:08:07,135 >> JASON HIRSCHHORN: OK, e o que é que vai fazer? 1427 01:08:07,135 --> 01:08:08,610 >> AUDIÊNCIA: Vai dizer, nova linha. 1428 01:08:08,610 --> 01:08:11,070 Vai colocar o marca para uma nova linha. 1429 01:08:11,070 --> 01:08:13,000 >> JASON HIRSCHHORN: Certo, esta PHP, como falamos anteriormente - este 1430 01:08:13,000 --> 01:08:22,160 PHP vai ser avaliado, e, em seguida, que vai imprimir a este arquivo um 1431 01:08:22,160 --> 01:08:26,350 mesa de reboque, e, em seguida, que HTML será avaliada. 1432 01:08:26,350 --> 01:08:27,810 Nós estamos apenas copiando este HTML tivemos até aqui. 1433 01:08:27,810 --> 01:08:28,120 É. 1434 01:08:28,120 --> 01:08:29,470 >> AUDIÊNCIA: [inaudível]? 1435 01:08:29,470 --> 01:08:30,290 >> JASON HIRSCHHORN: Desculpe? 1436 01:08:30,290 --> 01:08:31,240 É aqui mesmo. 1437 01:08:31,240 --> 01:08:33,590 Outono 2012. 1438 01:08:33,590 --> 01:08:35,970 Não olhe para as respostas, vamos resolver isso juntos. 1439 01:08:35,970 --> 01:08:37,330 Então, nós imprimimos linha da tabela. 1440 01:08:37,330 --> 01:08:38,550 Então, provavelmente você está no o balanço das coisas. 1441 01:08:38,550 --> 01:08:41,060 Qual é a próxima linha de código que precisamos para escrever? 1442 01:08:41,060 --> 01:08:42,926 Assam, dá-me a próxima linha de código. 1443 01:08:42,926 --> 01:08:46,290 >> AUDIÊNCIA: É necessário o nome do tf. 1444 01:08:46,290 --> 01:08:54,319 Tf suportes aspa aberta nomear colchetes fechados. 1445 01:08:54,319 --> 01:08:57,310 >> JASON HIRSCHHORN: Dê-me seu nome. 1446 01:08:57,310 --> 01:08:58,540 >> AUDIÊNCIA: Você precisa imprimir isso. 1447 01:08:58,540 --> 01:08:59,790 >> [VOZES interpondo] 1448 01:08:59,790 --> 01:09:01,963 1449 01:09:01,963 --> 01:09:03,430 >> JASON HIRSCHHORN: OK, como faço para imprimi-lo? 1450 01:09:03,430 --> 01:09:04,680 >> [VOZES interpondo] 1451 01:09:04,680 --> 01:09:08,609 1452 01:09:08,609 --> 01:09:10,350 >> JASON HIRSCHHORN: Eu estou sentindo falta alguma coisa agora. 1453 01:09:10,350 --> 01:09:12,470 O que eu estou ausente? 1454 01:09:12,470 --> 01:09:13,720 >> AUDIÊNCIA: Você precisa de um sinal de dólar. 1455 01:09:13,720 --> 01:09:15,960 1456 01:09:15,960 --> 01:09:17,210 >> JASON HIRSCHHORN: O que mais eu estou ausente? 1457 01:09:17,210 --> 01:09:20,100 1458 01:09:20,100 --> 01:09:21,650 Todos nós já impresso até agora é o tr. 1459 01:09:21,650 --> 01:09:25,589 1460 01:09:25,589 --> 01:09:27,470 >> AUDIÊNCIA: Feche a tr depois. 1461 01:09:27,470 --> 01:09:28,720 >> JASON HIRSCHHORN: Então, nós precisamos para fechar a tr depois. 1462 01:09:28,720 --> 01:09:34,390 1463 01:09:34,390 --> 01:09:37,906 Quem vê o que está faltando na linha 16? 1464 01:09:37,906 --> 01:09:39,340 Sim, Anna. 1465 01:09:39,340 --> 01:09:47,050 >> AUDIÊNCIA: Você precisa abrir um td e chaves. 1466 01:09:47,050 --> 01:09:49,380 >> JASON HIRSCHHORN: E onde é que vamos colocar chaves? 1467 01:09:49,380 --> 01:09:51,790 >> AUDIÊNCIA: Em torno do nome tf. 1468 01:09:51,790 --> 01:09:53,080 >> JASON HIRSCHHORN: Gostou? 1469 01:09:53,080 --> 01:09:55,420 >> AUDIÊNCIA: Yeah. 1470 01:09:55,420 --> 01:09:59,000 E, em seguida, fechar o td. 1471 01:09:59,000 --> 01:10:00,250 >> JASON HIRSCHHORN: Assim? 1472 01:10:00,250 --> 01:10:03,370 1473 01:10:03,370 --> 01:10:06,950 >> AUDIÊNCIA: Você precisa de aspas duplas marcas ao lado das chaves? 1474 01:10:06,950 --> 01:10:07,460 >> JASON HIRSCHHORN: Aqui? 1475 01:10:07,460 --> 01:10:08,710 Não, você não. 1476 01:10:08,710 --> 01:10:10,820 1477 01:10:10,820 --> 01:10:12,550 Então, isso é exatamente correto. 1478 01:10:12,550 --> 01:10:12,940 É. 1479 01:10:12,940 --> 01:10:15,290 >> AUDIÊNCIA: Então, a diferença entre o que e encatenating com pontos é, se 1480 01:10:15,290 --> 01:10:18,420 você usa pontos, você tem que ter o aspas duplas, em seguida, um ponto, 1481 01:10:18,420 --> 01:10:20,370 em seguida, o ponto - 1482 01:10:20,370 --> 01:10:20,520 >> JASON HIRSCHHORN: Correto. 1483 01:10:20,520 --> 01:10:23,800 Então você está dizendo que há uma final maneira de escrever este como aquele. 1484 01:10:23,800 --> 01:10:26,760 1485 01:10:26,760 --> 01:10:28,966 O que o operador de concatenação em JavaScript? 1486 01:10:28,966 --> 01:10:31,200 >> AUDIÊNCIA: Um sinal de mais. 1487 01:10:31,200 --> 01:10:34,710 Você esqueceu de colocar o encaracolado cinta de volta. 1488 01:10:34,710 --> 01:10:35,760 >> JASON HIRSCHHORN: Ótimo. 1489 01:10:35,760 --> 01:10:38,850 E há mais uma linha de código faltando. 1490 01:10:38,850 --> 01:10:40,130 Quem pode me dar a última linha de código que está faltando? 1491 01:10:40,130 --> 01:10:43,940 1492 01:10:43,940 --> 01:10:47,602 >> AUDIÊNCIA: Apenas a exata mesma coisa, apenas com a casa em vez do nome. 1493 01:10:47,602 --> 01:10:52,960 1494 01:10:52,960 --> 01:10:53,450 Grande 1495 01:10:53,450 --> 01:10:54,390 >> JASON HIRSCHHORN: Ótimo. 1496 01:10:54,390 --> 01:10:59,320 E a sua sintaxe é exatamente certo para fazer as coisas em uma matriz associado. 1497 01:10:59,320 --> 01:11:04,450 Assim, no teste real, você é realmente dado até aqui. 1498 01:11:04,450 --> 01:11:05,710 Portanto, este código foi dado a você. 1499 01:11:05,710 --> 01:11:07,750 Tudo o que tinha para escrever eram estes quatro linhas e lembre-se 1500 01:11:07,750 --> 01:11:09,190 fechar a tag mesa. 1501 01:11:09,190 --> 01:11:11,370 Vocês realmente fizeram tudo isso e muito mais. 1502 01:11:11,370 --> 01:11:11,810 É. 1503 01:11:11,810 --> 01:11:14,850 >> AUDIÊNCIA: Então seria funcionalmente o mesmo se você só tinha que tudo em 1504 01:11:14,850 --> 01:11:17,250 uma grande chamada de impressão, certo? 1505 01:11:17,250 --> 01:11:19,630 E então apenas concatenados lo, et cetera? 1506 01:11:19,630 --> 01:11:20,730 >> JASON HIRSCHHORN: Assim? 1507 01:11:20,730 --> 01:11:21,980 >> AUDIÊNCIA: Yeah. 1508 01:11:21,980 --> 01:11:23,810 1509 01:11:23,810 --> 01:11:26,940 Ele só não ficaria bem se você fosse olhá-lo quando você está inspecionando 1510 01:11:26,940 --> 01:11:28,550 o elemento em seu site, certo? 1511 01:11:28,550 --> 01:11:29,800 >> JASON HIRSCHHORN: Concordo. 1512 01:11:29,800 --> 01:11:35,410 1513 01:11:35,410 --> 01:11:38,710 Se eu carreguei esta página, eu seria capaz de ver o código PHP, sempre? 1514 01:11:38,710 --> 01:11:39,240 >> AUDIÊNCIA: Não. 1515 01:11:39,240 --> 01:11:40,080 >> JASON HIRSCHHORN: Não. 1516 01:11:40,080 --> 01:11:42,240 E na verdade, eu não faria. 1517 01:11:42,240 --> 01:11:43,920 >> AUDIÊNCIA: Este não é HTML, certo? 1518 01:11:43,920 --> 01:11:45,000 Então você pode ser capaz de - 1519 01:11:45,000 --> 01:11:46,780 >> JASON HIRSCHHORN: Então este seria PHP ser avaliada lado do servidor. 1520 01:11:46,780 --> 01:11:51,020 PHP é sempre avaliada lado do servidor, de modo você nunca é capaz de ver o código PHP. 1521 01:11:51,020 --> 01:11:52,980 >> AUDIÊNCIA: Mas você seria capaz de ver o resultado das impressões. 1522 01:11:52,980 --> 01:11:53,480 >> JASON HIRSCHHORN: Certo. 1523 01:11:53,480 --> 01:11:55,510 E honestamente, não pode colocar tudo na linha. 1524 01:11:55,510 --> 01:11:59,740 Pode formatá-lo muito bem para você, ou pode colocá-lo em uma linha. 1525 01:11:59,740 --> 01:12:01,521 Obscura. 1526 01:12:01,521 --> 01:12:03,596 Mas sim, bom ponto. 1527 01:12:03,596 --> 01:12:06,470 >> AUDIÊNCIA: Como é que lá está não destacar texto para 1528 01:12:06,470 --> 01:12:07,550 qualquer um dos comandos PHP? 1529 01:12:07,550 --> 01:12:09,370 Porque eu lembro de ter visto isso. 1530 01:12:09,370 --> 01:12:11,620 >> JASON HIRSCHHORN: Porque é um Arquivo. HTML aqui no topo. 1531 01:12:11,620 --> 01:12:20,390 1532 01:12:20,390 --> 01:12:21,650 Lá você vai. 1533 01:12:21,650 --> 01:12:25,752 1534 01:12:25,752 --> 01:12:28,800 >> AUDIÊNCIA: Se fizéssemos o método inicial com a loops, à direita, se nós 1535 01:12:28,800 --> 01:12:33,500 queria acessar um tfs, queremos fazer suporte tfs 0 suporte, em seguida, 1536 01:12:33,500 --> 01:12:35,180 [Inaudível]? 1537 01:12:35,180 --> 01:12:35,970 >> JASON HIRSCHHORN: Você faria - 1538 01:12:35,970 --> 01:12:40,560 então você está dizendo para o loop for, você faria em dólar sinal suporte tfs 1 1539 01:12:40,560 --> 01:12:41,850 ou i, certo. 1540 01:12:41,850 --> 01:12:46,780 Ou cifrão eu fechar colchete e, em seguida, suporte quadrado 1541 01:12:46,780 --> 01:12:49,600 aspas, sim. 1542 01:12:49,600 --> 01:12:50,640 >> OK, excelente. 1543 01:12:50,640 --> 01:12:53,020 Temos mais uma uma rápida. 1544 01:12:53,020 --> 01:12:55,090 Sete minutos, então eu quero para passar por cima deste. 1545 01:12:55,090 --> 01:12:56,160 Este é outro exemplo. 1546 01:12:56,160 --> 01:12:58,740 Estamos agora totalmente outra língua. 1547 01:12:58,740 --> 01:12:59,990 >> Nós temos um código HTML. 1548 01:12:59,990 --> 01:13:02,480 1549 01:13:02,480 --> 01:13:07,460 É uma espécie de pequena na tela, mas Eu quero que você olhe por ela realmente 1550 01:13:07,460 --> 01:13:11,140 rapidamente, e alguém pode me dizer, se eu fosse para carregar esta página web, 1551 01:13:11,140 --> 01:13:12,390 o que eu veria? 1552 01:13:12,390 --> 01:13:22,710 1553 01:13:22,710 --> 01:13:26,450 Descreva tudo sobre esta página. 1554 01:13:26,450 --> 01:13:28,630 Noé? 1555 01:13:28,630 --> 01:13:30,450 O que eu vejo? 1556 01:13:30,450 --> 01:13:38,140 >> AUDIÊNCIA: Code no final frente Google com uma idéia de texto e um 1557 01:13:38,140 --> 01:13:39,190 botão enviar. 1558 01:13:39,190 --> 01:13:41,180 >> JASON HIRSCHHORN: E o se o botão de dizer? 1559 01:13:41,180 --> 01:13:42,430 >> AUDIÊNCIA: Enviar. 1560 01:13:42,430 --> 01:13:44,620 1561 01:13:44,620 --> 01:13:45,160 Oh, pesquisa. 1562 01:13:45,160 --> 01:13:45,840 Sinto muito. 1563 01:13:45,840 --> 01:13:46,830 >> JASON HIRSCHHORN: Diria pesquisa. 1564 01:13:46,830 --> 01:13:47,520 Lembre-se, o nome. 1565 01:13:47,520 --> 01:13:50,550 O que queremos usar o nome de? 1566 01:13:50,550 --> 01:13:53,774 Este atributo nome, o que é que serve? 1567 01:13:53,774 --> 01:13:55,470 >> [VOZES interpondo] 1568 01:13:55,470 --> 01:13:59,300 >> AUDIÊNCIA: É o seu nome para quando é clicado? 1569 01:13:59,300 --> 01:14:00,160 >> JASON HIRSCHHORN: Isso poderia ser. 1570 01:14:00,160 --> 01:14:02,690 Mas o que geralmente vemos - por que estamos dando esta fila nome? 1571 01:14:02,690 --> 01:14:03,830 Por que vemos isso? 1572 01:14:03,830 --> 01:14:05,220 É. 1573 01:14:05,220 --> 01:14:08,600 >> AUDIÊNCIA: Não que se tornam índice da variável de super global? 1574 01:14:08,600 --> 01:14:12,740 >> JASON HIRSCHHORN: Sim, geralmente quando esta forma iria apresentar, em seguida, onde 1575 01:14:12,740 --> 01:14:13,500 seria submeter-se a este? 1576 01:14:13,500 --> 01:14:14,750 Qual página? 1577 01:14:14,750 --> 01:14:16,820 1578 01:14:16,820 --> 01:14:18,460 Noé, o que seria esta página enviar para? 1579 01:14:18,460 --> 01:14:25,710 1580 01:14:25,710 --> 01:14:27,700 >> AUDIÊNCIA: Eu não tenho certeza. 1581 01:14:27,700 --> 01:14:28,920 >> JASON HIRSCHHORN: Onde poderia podemos encontrá-lo? 1582 01:14:28,920 --> 01:14:31,025 Onde você encontra o que página que se submete a? 1583 01:14:31,025 --> 01:14:32,850 Que linha de código? 1584 01:14:32,850 --> 01:14:34,040 >> AUDIÊNCIA: ação Form. 1585 01:14:34,040 --> 01:14:34,650 >> JASON HIRSCHHORN: Exatamente. 1586 01:14:34,650 --> 01:14:35,130 Acção. 1587 01:14:35,130 --> 01:14:37,100 Por isso, submete-se à página de pesquisa. 1588 01:14:37,100 --> 01:14:38,630 Pesquisa barra invertida. 1589 01:14:38,630 --> 01:14:40,140 Então, isso é exatamente correto. 1590 01:14:40,140 --> 01:14:40,680 Qual o método? 1591 01:14:40,680 --> 01:14:42,090 >> AUDIÊNCIA: Obter. 1592 01:14:42,090 --> 01:14:42,490 >> JASON HIRSCHHORN: Obter. 1593 01:14:42,490 --> 01:14:43,420 Exatamente. 1594 01:14:43,420 --> 01:14:44,490 Por isso, leia isto. 1595 01:14:44,490 --> 01:14:45,180 Este vai ser um formulário. 1596 01:14:45,180 --> 01:14:45,910 Você está absolutamente certo. 1597 01:14:45,910 --> 01:14:50,340 Duas coisas sobre a forma, o título da página eo topo seria Google. 1598 01:14:50,340 --> 01:14:54,270 >> Então, aqui estão duas perguntas que você deve ser capaz de responder sobre esta página. 1599 01:14:54,270 --> 01:15:01,760 Se este HTML vive neste site e o usuário insere bug para este texto 1600 01:15:01,760 --> 01:15:06,900 campo à direita aqui, o URL será o usuário encontrar-se em cima 1601 01:15:06,900 --> 01:15:08,150 enviar o formulário? 1602 01:15:08,150 --> 01:15:10,980 1603 01:15:10,980 --> 01:15:12,510 >> Então nós temos isso aqui. 1604 01:15:12,510 --> 01:15:13,720 Eu vou voltar para a Nesta página, no entanto. 1605 01:15:13,720 --> 01:15:16,980 Vou escrever esta primeira parte. 1606 01:15:16,980 --> 01:15:18,230 Todos podem ver aqui? 1607 01:15:18,230 --> 01:15:30,620 1608 01:15:30,620 --> 01:15:32,906 OK, Mario, você acha que sabe? 1609 01:15:32,906 --> 01:15:34,700 Qual página? 1610 01:15:34,700 --> 01:15:37,630 >> AUDIÊNCIA: procure barra invertida. 1611 01:15:37,630 --> 01:15:38,880 >> JASON HIRSCHHORN: Eu vou para descer aqui. 1612 01:15:38,880 --> 01:15:44,800 1613 01:15:44,800 --> 01:15:49,155 OK, barra invertida pesquisa pergunta marca q é igual a bug. 1614 01:15:49,155 --> 01:15:53,560 1615 01:15:53,560 --> 01:15:55,165 Alguém tem uma sugestão diferente? 1616 01:15:55,165 --> 01:15:57,910 1617 01:15:57,910 --> 01:15:59,160 É. 1618 01:15:59,160 --> 01:16:01,700 1619 01:16:01,700 --> 01:16:03,740 >> Então, como vamos conseguir isso? 1620 01:16:03,740 --> 01:16:05,520 Bem, já vimos isso antes. 1621 01:16:05,520 --> 01:16:07,170 E você veio com essa antes. 1622 01:16:07,170 --> 01:16:08,870 Você estava certo, Noah, que o ação está nos dizendo o que 1623 01:16:08,870 --> 01:16:11,700 Página vamos. 1624 01:16:11,700 --> 01:16:12,820 >> Sabemos também que o método. 1625 01:16:12,820 --> 01:16:13,420 Estamos fazendo get. 1626 01:16:13,420 --> 01:16:17,040 E a diferença entre get e pós se que obter exibido na URL 1627 01:16:17,040 --> 01:16:18,490 e pós não. 1628 01:16:18,490 --> 01:16:22,760 Então, se eu escrevi poste direito lá no método, o que seria diferente? 1629 01:16:22,760 --> 01:16:24,250 >> AUDIÊNCIA: seria apenas ser busca barra. 1630 01:16:24,250 --> 01:16:25,400 >> JASON HIRSCHHORN: seria apenas ser barra de pesquisa. 1631 01:16:25,400 --> 01:16:27,400 Nada aqui iria acontecer. 1632 01:16:27,400 --> 01:16:30,030 Mas porque é um começa, o URL é apresentado como segue. 1633 01:16:30,030 --> 01:16:35,140 Primeiro vamos ver um ponto de interrogação e vemos o nome eo valor. 1634 01:16:35,140 --> 01:16:42,730 Dizer que havia um campo de texto de outro e Eu dei-lhe um nome de r e eu introduzir um 1635 01:16:42,730 --> 01:16:45,220 valor, lagarta. 1636 01:16:45,220 --> 01:16:48,560 O que seria isso agora parece? 1637 01:16:48,560 --> 01:16:52,040 Eu tenho um campo de texto mais, eu dou um Nome do r e um valor de lagarta. 1638 01:16:52,040 --> 01:16:56,990 >> AUDIÊNCIA: Após bar você teria a lagarta e comercial. 1639 01:16:56,990 --> 01:16:58,380 >> JASON HIRSCHHORN: Isso é não ampersand. 1640 01:16:58,380 --> 01:17:00,500 >> AUDIÊNCIA: Ou apenas o que quer o e símbolo. 1641 01:17:00,500 --> 01:17:01,330 >> JASON HIRSCHHORN: Sim, não. 1642 01:17:01,330 --> 01:17:03,700 Você estava certo, eu estava errado. 1643 01:17:03,700 --> 01:17:05,660 Isso é como um g. 1644 01:17:05,660 --> 01:17:06,910 >> AUDIÊNCIA: Caterpillar. 1645 01:17:06,910 --> 01:17:08,840 1646 01:17:08,840 --> 01:17:11,090 r é igual a lagarta, desculpe. 1647 01:17:11,090 --> 01:17:13,970 1648 01:17:13,970 --> 01:17:14,700 >> JASON HIRSCHHORN: Existe não r aí? 1649 01:17:14,700 --> 01:17:16,680 >> AUDIÊNCIA: Não, não é. 1650 01:17:16,680 --> 01:17:18,030 >> JASON HIRSCHHORN: Falaremos sobre isso depois da aula. 1651 01:17:18,030 --> 01:17:18,930 Isto é exatamente correto. 1652 01:17:18,930 --> 01:17:20,530 Assim, o e está correto. 1653 01:17:20,530 --> 01:17:23,430 E então você pode ter muitos deles, e todos eles seriam concatenados 1654 01:17:23,430 --> 01:17:24,950 em conjunto com o que e. 1655 01:17:24,950 --> 01:17:25,900 Então, isso é exatamente correto. 1656 01:17:25,900 --> 01:17:27,700 >> Há mais uma questão. 1657 01:17:27,700 --> 01:17:30,676 Desenhe DOM deste HTML, começando com documento. 1658 01:17:30,676 --> 01:17:33,330 1659 01:17:33,330 --> 01:17:34,570 Podemos fazer isso em dois minutos. 1660 01:17:34,570 --> 01:17:36,790 Nós vamos fazer isso aqui. 1661 01:17:36,790 --> 01:17:38,040 Eu vou voltar para esta página. 1662 01:17:38,040 --> 01:17:40,630 1663 01:17:40,630 --> 01:17:42,160 OK, vamos começar com o documento. 1664 01:17:42,160 --> 01:17:49,698 1665 01:17:49,698 --> 01:17:52,090 >> Qual é o próximo? 1666 01:17:52,090 --> 01:17:53,910 Então, quando você está lendo através de - 1667 01:17:53,910 --> 01:17:54,540 >> AUDIÊNCIA: HTML. 1668 01:17:54,540 --> 01:17:55,790 >> JASON HIRSCHHORN: HTML é o próximo. 1669 01:17:55,790 --> 01:17:57,850 Nós estamos indo para ir tag por tag. 1670 01:17:57,850 --> 01:18:00,890 O que há depois de HTML? 1671 01:18:00,890 --> 01:18:01,550 >> AUDIÊNCIA: Head. 1672 01:18:01,550 --> 01:18:02,800 >> JASON HIRSCHHORN: Head. 1673 01:18:02,800 --> 01:18:05,090 1674 01:18:05,090 --> 01:18:08,520 O que está atrás de cabeça? 1675 01:18:08,520 --> 01:18:09,770 >> AUDIÊNCIA: Título. 1676 01:18:09,770 --> 01:18:11,880 1677 01:18:11,880 --> 01:18:12,560 >> JASON HIRSCHHORN: Título. 1678 01:18:12,560 --> 01:18:14,740 E título tem um valor de Google, mas eu não vou 1679 01:18:14,740 --> 01:18:16,240 escrever que em por agora. 1680 01:18:16,240 --> 01:18:18,750 OK, onde faz corpo ir? 1681 01:18:18,750 --> 01:18:20,890 >> AUDIÊNCIA: Também saindo do HTML. 1682 01:18:20,890 --> 01:18:21,490 >> JASON HIRSCHHORN: Exatamente. 1683 01:18:21,490 --> 01:18:22,820 Corpo sai daqui. 1684 01:18:22,820 --> 01:18:25,970 1685 01:18:25,970 --> 01:18:30,330 Será que todo mundo ver porque esse é o caso? 1686 01:18:30,330 --> 01:18:32,970 Você provavelmente deve ser capaz de descobrir isso, também, mesmo que eu não tinha 1687 01:18:32,970 --> 01:18:33,665 este recuo agradável. 1688 01:18:33,665 --> 01:18:37,680 >> O recuo tipo de dá-lo afastado, mas você pode ver que a tag cabeça tem 1689 01:18:37,680 --> 01:18:41,240 foi fechado, o que significa que, provavelmente, não pode ir por aqui. 1690 01:18:41,240 --> 01:18:43,460 Precisamos voltar-se para o que Foi logo antes da cabeça 1691 01:18:43,460 --> 01:18:44,730 tag, ou sob que. 1692 01:18:44,730 --> 01:18:46,720 Estamos mesmo com a tag cabeça. 1693 01:18:46,720 --> 01:18:48,560 >> E sob o corpo vai formulário. 1694 01:18:48,560 --> 01:18:50,300 Sob forma, existem duas entradas. 1695 01:18:50,300 --> 01:18:53,330 1696 01:18:53,330 --> 01:18:54,420 OK. 1697 01:18:54,420 --> 01:18:55,490 Isso é tudo que eu tenho. 1698 01:18:55,490 --> 01:18:56,980 Teste 1 é amanhã. 1699 01:18:56,980 --> 01:18:58,350 Estou tão animado para vocês. 1700 01:18:58,350 --> 01:18:59,690 Vai ser uma explosão. 1701 01:18:59,690 --> 01:19:00,250 >> Se você tem - 1702 01:19:00,250 --> 01:19:00,600 >> AUDIÊNCIA: [aplausos] 1703 01:19:00,600 --> 01:19:02,460 >> JASON HIRSCHHORN: Oh pare, pare. 1704 01:19:02,460 --> 01:19:04,520 Mas não, eu estou brincando. 1705 01:19:04,520 --> 01:19:07,220 Se você tiver alguma dúvida, certo após a seção, eu vou estar fora. 1706 01:19:07,220 --> 01:19:11,700 Se você tiver alguma dúvida, esta noite, não hesite em chamar, email, Gchat, 1707 01:19:11,700 --> 01:19:12,740 transportadora me pombo. 1708 01:19:12,740 --> 01:19:13,950 Boa sorte amanhã. 1709 01:19:13,950 --> 01:19:16,220 Tenha um maravilhoso quebra de Ação de Graças, se eu não vê-lo antes disso. 1710 01:19:16,220 --> 01:19:19,320 E eu vou te ver de Ação de Graças na terça-feira para o nosso último 1711 01:19:19,320 --> 01:19:20,295 partido seção nunca. 1712 01:19:20,295 --> 01:19:21,545 >> AUDIÊNCIA: [inaudível]. 1713 01:19:21,545 --> 01:19:25,270 1714 01:19:25,270 --> 01:19:25,790 >> JASON HIRSCHHORN: Ótimo. 1715 01:19:25,790 --> 01:19:28,900 OK, eu vou ver vocês na próxima semana, ou em duas semanas. 1716 01:19:28,900 --> 01:19:30,150 E boa sorte amanhã. 1717 01:19:30,150 --> 01:19:32,203