JASON HIRSCHHORN: Bem-vindo, todos, para a semana 10. Esta é uma semana emocionante porque amanhã é Teste 1, o que teremos para em um segundo. Hoje, na seção, estamos indo para ir mais alguns recursos para o teste, e então eu vou responder a toda e qualquer perguntas que vocês têm. E vamos finalmente acabar com alguns problemas práticos. Podemos passar toda a seção responder a perguntas. Podemos passar toda a seção passando por cima de problemas práticos. Nós apenas expandir-se para preencher o espaço e tempo que temos. Então eu coloquei esta lista a cada semana, mas é particularmente importante nesta semana. Para estudar, se você não tiver já começou, oh boy. Mas espero que você começou já. E você está passando os materiais e recursos listados aqui. Eu recomendo um número destes. Em particular, notas de aula são extremamente importante e útil. O study.cs50.net fornece uma grande cartilha sobre um monte de os tópicos que coberto. Ele também tem alguns grandes praticar problemas. E então, o Google é grande, também. Eu não sei o que você usá-lo. Mas usar o Google, também. Estenda a mão para mim, se você tem alguma perguntas, comentários ou preocupações. Olhar sobre a sessão de revisão slides de ontem à noite. Ou, se você tiver algum tempo, assistir ao vídeo. Eles fornecem um monte de útil material e informação. E tentar cobrir, se não todos, muitos os tópicos que cobrimos e que você pode ver no quiz. Falando do questionário, que será amanhã. Ele tem 75 minutos de duração. Muitos de vocês estão levando isso em 1 horas, e alguns de vocês estão levando-o às 5:30. Para o tempo que você está tomando-o eo local que você está tomando isso, certifique-se você verifique o documento na página inicial CS50.net. Lembre-se que você pode obter um 8 1/2 11 por folha para levar com você. Muitas vezes, as pessoas não usam esse folha durante todo o teste. Mas, realmente, é uma incrivelmente ferramenta de estudo útil. Então, juntando essa folha é o que Passei provavelmente três ou quatro horas fazendo quando eu estava estudando para CS50 e que era de longe o mais útil maneira que eu poderia estudar para o quiz. Assim, mesmo se você tem algumas outras pessoas da guias de estudo para olhar e usar como referência, eu recomendo fazer o seu próprio guia de estudo, colocando essas coisas juntos. Isso realmente ajuda a aprender todo o material. Por último, mas não menos importante nesta seção, após o teste de amanhã há uma mais palestra - próxima segunda-feira. Há mais uma seção, não na próxima Terça-feira antes de Ação de Graças, mas o Terça-feira depois que. Estaremos reunidos para uma final adeus festa e também fazer alguma legal coisas para se vocês animado sobre mais estudos em ciência da computação. Há mais um projecto, mais uma justo, mais uma maratona hacker. Estamos chegando ao fim de CS50, que é emocionante - mas também, se você é como me, um pouco triste. Antes de eu seguir em frente, alguém tem qualquer dúvida sobre o que cobrimos até agora? OK, bem, vamos passar por cima de algumas questões que você tem para o quiz e tópicos podemos cobrir. Portanto, esta é uma lista que eu coloquei. Ele não é de forma exaustiva, mas espero venha a refrescar sua memória, se você tem alguma dúvida sobre qualquer um destes tópicos, ou se você tiver dúvidas sobre problemas práticos de quizzes nos últimos anos. Eu tinha algumas perguntas que eram por e-mail para mim, mas eu quero adiar sobre aqueles por um segundo. Alguém tem alguma dúvida, problemas que não entendia, respostas que eles não entendiam para começarmos? Avi. AUDIÊNCIA: Você pode apenas passar por cima DOM e Ajax realmente rápida? Como, o que precisamos saber ou deveria entender sobre eles? JASON HIRSCHHORN: Eu vou responder geralmente essa questão da, o que eu precisa saber sobre determinado assunto x? Porque eu tenho a sensação de que muitos de vocês vão me perguntar isso, ou são curioso sobre isso. Então, na medida em que o tema foi coberto de aula, ou seção, ou em study.cs50.net, um conjunto de problemas, você deve estar familiarizado com ele. Assim você não precisa saber todos os tipos de tag que está disponível em HTML ou todo o tipo de atributo ou propriedade você pode dar algo em CSS. Mas se você viu em um exemplo de aula, se você viu em um problema conjunto, provavelmente você deve estar familiarizado com ela, particularmente coisas que você viu na palestra. Então, nós discutimos o documento modelo de objeto de um pouco em seção, ainda mais em palestra. Você deve estar familiarizado com que grande parte dela. E você deve estar familiarizado com Ajax na mesma medida. Nós nunca vimos incrivelmente avançado ou exemplos complicados de Ajax, de modo você não vai ser solicitado fazer algo incrivelmente complicado. Mas você deve estar se perguntado, como faço fazer uma chamada Ajax usando jQuery? Que é algo que você já viu um número de vezes antes, tanto no rever sessão e na palestra, e é apenas de duas linhas ish de código. Então, isso é algo que deveria estar familiarizado. Mas, novamente, para todos esses tópicos, se você já viu antes, é um jogo justo. E podemos perguntar-lhe - obviamente, estamos vai pedir coisas que você não tenha visto antes. Codificação algo que você não tem visto antes. O que não quer dizer que você não tem visto as ferramentas para resolver esse problema antes. Você já viu essas ferramentas. Por exemplo, no Teste 1, se você precisa codificar strlen. Nós não codificado strlen antes. Mas você sabe como usar um loop for, você sabe como usá-se condições. Você sabe como escrever variáveis ​​em C. Vai ser a mesma coisa aqui. Você não vai ser convidado a fazer qualquer coisa que você não tenha visto antes, mas você pode ser solicitado para, tipo, colocar algo juntos de uma nova maneira, ou resolver um tipo diferente de problema. Desculpe, não foi específico para o seu pergunta, mas eu não posso responder sobre cada tópico único que você fazer ou não precisa de saber. Mas também, muito, última coisa sobre isso. Nós gastamos muito mais tempo em listas de links que temos no Ajax. Você não usou Ajax em um conjunto de problemas. Uma das características centrais do que conjunto de problemas que estava listas de links. E passamos muito tempo em palestra e seção de usá-lo. Assim, as probabilidades são lista de links vai aparecer mais muitas vezes no teste do que Ajax vontade. Ou as perguntas que têm a ver com a ligação lista valerá mais pontos. Então, certamente você pode se concentrar e estreito em em coisas que são mais provável que venha, porque temos passei mais tempo com eles. OK quaisquer outras perguntas? É. AUDIÊNCIA: Podemos falar sobre o uso de funções anônimas em JavaScript? Sou um são pouco confuso sobre isso. JASON HIRSCHHORN: Então, em JavaScript - Estou tentando pensar como eu poderia escrever isso em - então vamos realmente abrir este código. Portanto, este é o código que fizemos na semana passada. E você já viu isso antes, se você estavam aqui na seção, na semana passada. Ou você já viu alguma coisa semelhante a este antes. Mas você pode olhar para esta primeira linha. É assim que você começar - todo mundo já viu isso antes. Se você quiser colocar algum código JavaScript, você colocá-lo dentro deste, assumindo você está usando JQuery. Isto está dizendo, não faça nada até carregado do documento. E depois, Curt, você vê aqui estamos fazendo algo parecido com isso - função parêntese aberto, fechado parêntese. Portanto, não estamos dando a este funcionar um nome. Nós não estamos indo para definir esta função é suposto funcionar e depois chamá-lo de um monte de vezes. Estamos apenas dizendo que este documento já tem uma função. Um par de coisas para fazer. E nós não queremos passar o tempo dando-lhe um nome ou guardá-lo para perpetuidade. Nós apenas queremos executar algumas coisas. Assim, uma função tipo anônimo de serve esse propósito. Quando você não está indo para usar algo uma e outra vez, de modo que você não precisa para dar-lhe um nome - você só quiser usá-lo uma vez - você teria apenas que dizer função, por exemplo, neste caso, e você é apenas definir algo que você poderia dar um nome. Como, nós conseguimos extrair esta função fora e dar-lhe um nome e, em seguida, chamar esse funcionar aqui. Mas não precisa, porque nós não quer perder tempo dando-lhe um nome ou desperdiçando algo em nosso espaço de nome. E você vai ver que um monte. Por exemplo, vemos que muito neste código, mas você já viu isso antes, quando você clica em alguma coisa - executar este tipo de código. Poderíamos definir o código que queremos para ser executado quando clicamos, neste caso, este ID, como uma função separada e em seguida, executar essa função. Mas, neste caso, estamos apenas ignorando esse passo e movê-lo para aqui e apenas para definir tudo que queremos que aconteça e não dar-lhe um nome. Isso ainda não pode ter respondi a sua pergunta. AUDIÊNCIA: Não, ele faz. Quer dizer, eu acho que eu realmente não entendo por que seria uma funcionar em tudo, no entanto. Porque ele não está realmente sendo chamado. Ele realmente não tem um nome. JASON HIRSCHHORN: É uma função no sentido de que é uma série de etapas, como você iria colocar em uma função. E então é por isso que chamamos que função anônima. Nós não estamos indo para dar-lhe um nome. Nós não estamos indo para o lixo tentando nomeá-lo, mas o que pudemos. Funções anônimas, você sempre pode dar um nome. Assim, por exemplo, este código aqui, poderíamos colocar este código dentro de um função e, em seguida, chamar esta função aqui. Em vez disso, nós dizemos, nós não vamos para se preocupar com isso. Nós apenas estamos indo para escrever tudo aqui. É como se, por vezes, quando você está escrevendo quatro laço em C - vocês já vi isso antes - talvez você esteja iteração através de um forloop em i é igual a 0. I é inferior a strlen. Ou você está passando por alguma array, você pode salvar disposição índice i, de alguma variável. E você usa essa variável. Assim, você não precisa reescrever disposição suporte de i mais e mais e mais. E isso é mais ou menos como uma variável dummy. Não está servindo muito outros fins que não para tornar seu código um pouco mais limpo e mais fácil de ler. Função semelhante aqui. Apenas o torna um pouco mais fácil, mas funcionalmente não há nenhuma diferença. Isso responde a sua pergunta? AUDIÊNCIA: sim. JASON HIRSCHHORN: OK .. Mario? AUDIÊNCIA: Ontem eles muitas vezes colocam função parênteses evento. Será que isso significa alguma coisa? Ou é para coisas como que fariam document.ready evento função. JASON HIRSCHHORN: Nós já vimos isso, e novamente, estas são coisas menores, que provavelmente eu não quero gastar muito tempo em. Porque às vezes eu não quero que as pessoas se apavorou ​​que eles não têm ouviu falar sobre essas coisas muito. Mas nós conversamos um pouco sobre manipuladores de eventos. Então, alguma coisa acontece, e, em seguida, esta função é executada. E então nós também queremos saber alguns detalhes sobre o que aconteceu neste evento. Então, acho que volta para conjunto de problemas 4. Essa é provavelmente a maneira mais fácil de entender que na pausa para fora. Houve algum código - como um evento que iria acontecer, mas evento pode significar muitas coisas. Se poderia significar o mouse é clicado, ele poderia significar que você bater uma tecla de seta, et cetera, et cetera. Mas está tudo guardado neste genérico coisa chamada eventos. E então, o que podemos dizer, é este evento esta coisa? Ou este é o evento esta coisa? Ou, que tipo de acontecido com esse evento? Então é por isso que você criar essa variável lá para salvar a informação extra sobre o que exatamente aconteceu naquela você vai querer utilizar na função. Mas, novamente, isso é provavelmente um dos coisas menos importantes para ser super familiarizado. OK, que outras questões têm pessoas tido, ou obstáculos que eles encontrado durante a revisão? Nós vamos voltar a essa lista. E quanto durante testes práticos, se pessoas tomaram as já? Quais foram alguns dos problemas que tropeçou vocês em cima? Eu sei para um fato que no ano passado questionário foi muito difícil. AUDIÊNCIA: Você pode explicar o que um ataque de injeção SQL é? JASON HIRSCHHORN: OK, ótimo. Então nós conversamos um pouco sobre isso. Há uma palestra sobre segurança. E mais uma vez, como já referi anteriormente, este é um aparte. Mas você ficará frustrado no questionário quando você lê alguma pequena de dois pontos pergunta, e você fica tipo, quando eu nunca aprendeu isso? Todas essas coisas nessas palestras que você não acha que você precisava para sabe, ou você pode passar por cima porque eles não têm a ver com o conjunto de problemas, aqueles que provavelmente vai subir novamente no quiz. Assim, fresco, coisas divertidas que você acabou de pensei que David estava dizendo para você gozar, ele estava dizendo para você apreciar e para torná-lo apenas ser super animado sobre a aprendizagem de tudo existe a aprender sobre ciência da computação. Essas coisas também vêm em testes. Assim, mesmo essas pequenas coisas que não fez se relacionam diretamente com o seu problema definido, como vocês estão familiarizados com a partir de Teste 0, provavelmente vai vir para cima. E este é um bom exemplo de alguma coisa. Assim, uma injeção SQL ataques é quando você obter algumas informações do usuário e você deseja inseri-lo em uma tabela usando uma inserção de instrução SQL, mas você Não esterilizar a entrada antes do tempo. Então, obviamente que temos visto Instruções SQL. Eu vou abrir - vamos - vamos para a revisão - Eu acho, que o cobriu? Acho Samala fez. Assim, podemos obter - AUDIÊNCIA: Onde você encontrou isso? JASON HIRSCHHORN: Então, se você vai para CS50.net, quizzes, e então você pode rolar e obter lâminas da sessão de revisão. Mas você pode ver este é um bom exemplo de um ataque de injeção SQL. Tomamos algumas informações do usuário e eles nos dão uma string, e então nós pretende inserir essa seqüência em um banco de dados. Geralmente vamos higienizar que de entrada, o que significa que há alguns caracteres que são perigosos. Por exemplo, em seqüências de SQL, estas citações - aspas simples ou duplas - significar alguma coisa. Elas significam acabar com essa corda aqui. E assim, se o usuário lhe dá uma única ou aspas, eles poderiam ser tentando viagem até sua consulta SQL e inserir algumas coisas ruins para ele. E se eles fazem isso, eles poderiam ganhar controle de seu banco de dados ou fazer alguma coisas que você não quer que eles façam. É por isso que sempre que tomamos SQL consultas, nós higienizar a entrada antes colocá-lo no banco de dados, que significa que escapar esses caracteres. Falaremos sobre isso em um segundo. , Uma injeção de SQL Mas short longo da história ataque é, se você não fazer isso - se você não cuidar da entrada deram-lhe antes de colocar seu banco de dados, eles podem, como você vê abaixo aqui, executar uma consulta que, na verdade - eles colocaram em seu código aqui e esta linha de escolha aqui irá selecionar tudo, desde a mesa, independentemente de que a senha é dada. Porque você tem a 1 ou igual a 1. Então, é basicamente, longa história curta, uma maneira de assumir o banco de dados. A questão, então, para vocês, é onde em p conjuntos 7 que você higienizar tudo as entradas para suas consultas SQL? Onde é que esse passo aconteceria? Onde você evitar a injeção de SQL ataques de acontecer na p set 7? É. AUDIÊNCIA: Crypt? JASON HIRSCHHORN: Então não foi cripta. Nós não fazer você fazer isso para este determinado conjunto de problemas, mas acontece na função de consulta. Nós realmente escreveu isso para você, e cuidou da saneantes entradas para você. Mas no ano passado, os alunos tiveram digitar as entradas por conta própria. Em p set 7, que muitos de vocês - deixe-me abrir um outro arquivo. Então, você vai notar-se aqui uma grande quantidade de pessoas, no conjunto de problemas 7, não ligou esta função em cordas. Esta função, htmlspecialchars, novamente - essa string pode ter algumas coisas que em HTML significa outra coisa. Como uma cinta, uma praça, ou um ângulo suporte de significar algo em HTML. E por isso, se você imprime que para o tela ou se você tomar apenas que e imprimir isso ao seu HTML, que o poder fazer algo que você não espera. Então htmlspecialchars vai sobre todos aqueles personagens que têm especial reunião e lhes escapa. Então ele fica impresso como o texto você quer ver, ao invés de estragar o seu HTML. Chamamos essa função no cabeçalho. E um monte de gente se esqueceu de chamar essa função no código que você estava escrevendo. Assim, por exemplo, se um nome de material tinha um suporte de ângulo nele e você esqueceu para chamar esta função, que ângulo suporte poderia ter jogado fora o que seu HTML parecia. Mas chamar esta função irá escapar que por isso, na verdade, imprime como um suporte de ângulo e não joga fora de seu código HTML. A mesma razão que nós vimos, às vezes, barras antes de aspas duplas em uma linha printf porque não queremos que o aspas duplas para baixo a corda. Queremos imprimi-los fora para a tela. Então tudo isso é a mesma idéia. Isso responde a sua pergunta? AUDIÊNCIA: Mais ou menos. JASON HIRSCHHORN: Você ter um follow-up? AUDIÊNCIA: Eu acho que a injeção de SQL ataque tem a ver com isso? Eu não entendo como os dois estão relacionados. Por que você faria as specialChars? JASON HIRSCHHORN: OK, então o SQL ataque de injeção é quando você injeta algumas cordas maliciosos em alguém do programa, e eles apenas tomá-lo e executá- a consulta SQL com uma corda que lhes deu. Como você pode ver aqui em baixo, que poderia ser problemático. Então, a maneira como você prevenir contra isso é você levar a sua seqüência que eles dão você - assim essa string aqui - e você higienizar-lo. Você escapar de todas as coisas que são potencialmente problemáticas. Então você não interpretá-los como algo isso significa alguma coisa. E um exemplo de que, com HTML é esta função. Então, é a mesma idéia aqui. E eu estava apenas mostrando-lhe outro exemplos de quando você tem visto essa idéia antes. De escapar a entrada do usuário antes de imprimir lo para uma tela ou de colocá-lo dentro de uma instrução SQL. AUDIÊNCIA: Portanto, neste caso, o usuário está mexendo com o programador. JASON HIRSCHHORN: sim. Com todos esses ataques de segurança, que é sempre geral, o usuário, ou alguém está tentando mexer com você, o programador. E estas são as maneiras que puder prevenir contra eles. AUDIÊNCIA: Então, eu tenho uma pergunta sobre as funções de hash. No Teste 1 a partir de 2011, há dois perguntas sobre hashes unilateral. E eu só estava me perguntando o que isso significava. JASON HIRSCHHORN: OK, que teste? 2011? AUDIÊNCIA: Yeah. AUDIÊNCIA: Quiz 1? AUDIÊNCIA: [inaudível]. É como hash de uma senha. Isso não é colocar as coisas - JASON HIRSCHHORN: Que página foi isso? AUDIÊNCIA: Eu acho que foi 9 ou 10, ou ambos. JASON HIRSCHHORN: Tudo bem, vá em frente, Curt. Você pode responder, enquanto nós olhamos. AUDIÊNCIA: Eu acho que está falando sobre hash de uma senha. Tipo, quando alguém entra em uma senha, você transformá-lo em uma coisa criptografada. Esse é o hash de senha, o que é diferente de uma função hash que coloca algo em uma tabela hash. JASON HIRSCHHORN: Vamos ver. Deixe-me puxar para cima o que eles dar como resposta. E então nós vamos atravessá-la. Então, Curt deu um grande exemplo de um hash de mão única. Quando vi isso antes, nós tirar a senha e voltar - lembre-se, em conjunto p 7, alguém pode ter uma senha que só senha, mas, em seguida, ele fica criptografado em alguma coisa muito longo. O one-way hash significa que é muito fácil para ir de um lado para o outro, mas é muito difícil para ir de o outro caminho de volta. E assim, você sabe, quando você estava verificando senhas das pessoas no problema ajuste 7, você levaria seu - assim, por exemplo, dizer que eles queriam alterar sua senha, você perguntar-lhes para sua senha antiga. Você tomou sua senha antiga. Você criptografado ele. E então, compararam os dois criptografias em vez de unencrypting original um, porque é realmente difícil de ir por esse caminho. É. AUDIÊNCIA: Como em profundidade é que a nossa compreensão do TelNet tem que ser? JASON HIRSCHHORN: Se foi mencionado brevemente na palestra, apenas uma breve entendimento. Mais uma vez, volta para a resposta à pergunta de Avi - quanto mais as coisas vêm para cima, o mais provável é que você tem que ser super familiarizado com eles. Se eles só chegar na aula, isso é apenas um lugar. Mas se eles vêm para cima em palestra, seção, e um conjunto de problemas, então você provavelmente tem que ser super familiarizado com eles. Então, eu tinha uma pergunta de anteriormente sobre - é era o outono de 2010 - Teste 1, vamos puxar para cima - esta questão em pilhas e filas, que fizemos passar um pouco de tempo falando na aula, mesmo embora nós realmente não nunca atingi-lo na seção. Portanto, esta questão está a dar-lhe uma série de comandos e perguntando-lhe o que será impresso neste caso. Portanto, esta é uma questão totalmente razoável que possam ser colocadas de você caras, e então vocês devem ser capaz de respondê-la. Então, por que você não olha para ele por 30 segundos, e então se alguém quer propor as respostas para mim, e então vamos atravessá-la. Tudo bem, que tem uma resposta à questão 27? É. AUDIÊNCIA: É 1, 2, 3, 3? JASON HIRSCHHORN: Isso mesmo. 27 é 1, 2, 3, 3. Então, vamos ver como nós temos isso. Em primeiro lugar, estamos dizendo, se s é uma fila, o que será impresso? Assim, um q é first in, first out. Nós já vimos isso antes. Nós vimos a imagem das pessoas esperando no Apple Loja para comprar algum produto. As primeiras pessoas são as primeiras pessoas para fora. As primeiras coisas em uma fila são as primeiras coisas. Então, se nós empurrar algo em uma fila, você apertar o 1, então vamos pra cima do 1. Pop significa apenas tirar. Neste caso, basta levar alguma coisa. Tomamos o primeiro coisa, isso é um 1. Então, vamos colocar as coisas nos imprimir-se aqui. Isso não está mais em nossa fila. Em seguida, empurrar a 2 ea 3, e que saltam a primeira coisa. Mais uma vez, porque é uma fila. Então nós começamos a 2, então vamos colocar em outro 3 e chamar pop novamente. Nossa 3 é em primeiro lugar. E então nós tivemos um monte de outras coisas e apelo pop. Mas, novamente, uma vez que esta é uma fila, first in, first out. Tomamos a primeira coisa que já foi colocado dentro Esse é o nosso 3. E, neste caso, não se preocupe sobre todas as outras coisas. Então é isso, se esta é uma fila. Qualquer dúvida sobre uma fila? Uma pilha é diferente. O que é a sigla que temos para a compreensão de uma pilha? AUDIÊNCIA: último a entrar, primeiro a sair. JASON HIRSCHHORN: LIFO, eu acho. Último a entrar, primeiro a sair. Então vimos um exemplo de uma pilha de bandejas em uma sala de jantar. Seja qual for a bandeja está no topo se apanhada. E então, se as novas bandejas vir , eles se colocar no topo. E então, o que está em top se apanhada. Portanto, estas bandejas sobre o poder de fundo ficar lá por algum tempo. Nesse caso, mais uma vez, vamos desenhar isso. Nós empurrar um, então um é o primeiro da fila. E nós pop algo fora. E só há uma coisa lá dentro, então passamos um aqui em baixo. Então nós colocamos em 2 e 3 e nós pop algo fora. Mas, novamente, uma vez que esta é uma fila - ou esta é uma pilha, em vez - levamos tudo o que estava em último. Tudo o que é em última vem em primeiro lugar. E 3 está em último. Então nós colocamos a 3 para baixo lá, então colocamos em outro 3 e nós pop algo de novo. Finalmente, colocamos no 4, 5, 6 e 7, e aqui nós pop. E porque é uma pilha, tomamos tudo o que foi colocado em último e escrever que aqui em baixo. Então vamos acabar com 1, 3, 3, 7. Alguém tem alguma dúvida sobre pilhas ou filas, ou este exemplo? OK. Vamos voltar para a lista de tópicos. Não que aqui, por aqui. Que outras questões que as pessoas têm? AUDIÊNCIA: Eu não sei o quão importante este é, mas eu estava confuso com a diferença entre os diferentes tipos de linguagens como marcação, compilados, interpretado. JASON HIRSCHHORN: Isso é uma boa pergunta. Eu acho que é um pouco importante, então vamos passar por isso rapidamente. As grandes línguas que temos visto até agora são C, PHP e JavaScript, em termos de linguagens de programação. HTML, como você mencionou, não é uma linguagem de programação. É uma linguagem de marcação. E então nós temos CSS, que também é não é uma linguagem de programação. Também vimos SQL, que não é uma linguagem de programação também. Então SQL permite escrever consultas para um banco de dados. HTML é uma linguagem de marcação. Ele define como as coisas estão estruturadas. E CSS permite estilizar as coisas. Essa é provavelmente a medida para o que você precisa saber sobre os três. Mas é mais interessante figura as diferenças entre C, PHP, e JavaScript. Portanto, uma das maiores diferenças, como você mencionou, é a forma como eles são compilado, ou o que quer o equivalente é. Então C é compilado. Nós sempre executar um compilador. E então onde estão os seus erros quando você executar o compilador C? Onde isso vai mostrar-lhe o erros em seu código? Como você sabe que há uma erro no seu código em C? AUDIÊNCIA: Ele mostra no terminal. JASON HIRSCHHORN: Ele mostra no terminal como você está compilando. E se houver erros, que realmente não vai compilar. Então você sabe que há erros direita distância, antes do tempo, antes de até mesmo executar seu código. Claro, você pode executar o seu código e obter uma falha de segmentação, mas isso era provavelmente porque você fez alguma coisa lógica boba. Mas o seu código com tecnicamente todos corretos e poderia ser executado. Assim, o código C é compilado antes do tempo. Que tal código PHP? Onde estavam os erros no seu código PHP? Como você sabia que você tinha erros em seu código PHP? AUDIÊNCIA: Tempo de execução? JASON HIRSCHHORN: Sim, quando você iria executá-lo, você deve executar o Código PHP nas costas. E então você iria exibir uma tela. Você pode ver algumas coisas na parte superior, mas então você ia ver, como, alguns laranja, mesa feia. E isso iria dar-lhe um número de linha e digamos, blah, blah, blah, essas coisas não funcionou. Então, PHP é interpretado linha por linha e executado no servidor. E, em seguida, o resultado é enviadas de volta para você. Grande. Executado na linha de servidores por linha e, em seguida, enviado a você. E se há um erro, ele vai enviar você o erro, mas você pode ter conseguido algumas coisas antes do tempo. Assim, alguns dos que poderia ter funcionado, mas mais tarde, algumas coisas podem não ter não funcionou. E sobre JavaScript? Onde você viu erros de JavaScript? Em p set 8, quando você tem um erro, como você sabia? Onde é que ele apareceu? AUDIÊNCIA: No console, na parte inferior. Jason HIRSCHHORN: No consola, na parte inferior. Ele também lhe daria a número da linha, e que seria aparecer na parte inferior. E JavaScript não foi executado no servidor. JavaScript foi enviado para o seu computador, e então, quando chegou a hora de executar o JavaScript, o JavaScript era executar linha por linha no cliente, do seu lado. Não é no servidor, o lado do cliente. E da mesma forma, foi executar linha por linha. E então, quando você receber um erro, ele iria aparecer na parte inferior. À semelhança do PHP, parte dela pode executar e, em seguida, você pode ter uma erro mais tarde. Além disso, ao contrário de um pouco de PHP, se você tem um erro de JavaScript - dizer que você não fez a direita código para uma caixa de alerta - você poderia manter a execução de seu programa. A caixa de alerta não iria funcionar, mas seu programa seria ótimo. Apenas talvez essa função seria um fracasso. Portanto, há alguns dos maiores diferença em termos de como estes línguas, ou como o código de programação você escreve são realmente avaliados. Há também outras diferenças em termos de - a maior diferença temos visto em termos de variáveis nas diferentes línguas. Então, alguém pode me dar uma diferença entre as variáveis nas três línguas? Sim. AUDIÊNCIA: Em C, eles são estritamente digitado. Nos outros dois, eles são vagamente digitado. JASON HIRSCHHORN: E O que isso significa? AUDIÊNCIA: Que em C, você tem que declarar o tipo da variável quando você declarar a variável, como interbool ou char. JASON HIRSCHHORN: Excelente. No C, a gente sempre teve que colocar um tipo de uma variável. E nós realmente não podia misturar tipos. Você não poderia fazer um inteiro além de uma string. Mas, como já vimos noutros línguas, na verdade você pode misturar os tipos, e você nunca tem que dar algo tipo, nunca. Então como é que sabemos que as coisas são variáveis em PHP e JavaScript? AUDIÊNCIA: Em PHP, eles começam com um cifrão. Em JavaScript, quando você declara eles, você tem que ter um bar. JASON HIRSCHHORN: Certo. Assim, em PHP, eles começam com um cifrão. Em JavaScript, eles têm que ter bar, embora às vezes não, na verdade, tem que ter bar. Mas isso é correto. Então, isso é uma grande diferença entre as variáveis. Eu acho que esses são provavelmente, fora do topo da minha cabeça, os dois maiores diferenças entre estes três idiomas. Mas, sim. AUDIÊNCIA: E o escopo de variáveis ​​C se restringe às chaves, onde os outros, é como, ele morre se for em apenas uma função, mas por outro lado, é - JASON HIRSCHHORN: Certo. Então alcance é ligeiramente diferente em C. Como Você se lembra, as chaves definir o escopo de variáveis. Então, se ele foi definido dentro de um se condição, o que está dentro de um loop for, a variável só existe lá. Em JavaScript, se uma variável é definida dentro de uma condição if - dentro de um loop - que vai existir para esta função, mas que não irá existir fora essa função. Então escopo é um pouco mais flexível em JavaScript e PHP. Isso responde a pergunta? OK, alguma pergunta? Nós podemos fazer mais quatro minutos de perguntas, em seguida, vamos saltar para codificação. AUDIÊNCIA: Podemos entrar em Ajax e falar sobre o que é isso? JASON HIRSCHHORN: Fale com Avi depois. Ele fez essa pergunta antes. AUDIÊNCIA: My bad. JASON HIRSCHHORN: Não se preocupe. AUDIÊNCIA: O que exatamente é JSON? JASON HIRSCHHORN: O que é JSON? Qual é a sua pergunta? AUDIÊNCIA: Só muito rapidamente, a diferença entre print e echo em PHP. JASON HIRSCHHORN: Por que você não google a diferença entre print e echo? Diferença ligeira. Não que de um grande negócio. Mas você deve definitivamente google, e que vai te dar uma boa resposta. JSON, provavelmente maior de um negócio. Suportes para JavaScript Object Notation. E quando vimos JSON sendo usado? Quando você já viu - por que você mesmo sabe a palavra JSON? Quando foi que você viu? AUDIÊNCIA: Quando estávamos recebendo cotações de ações para financiamento. JASON HIRSCHHORN: Então você viu quando você estava começando cotações de ações para financiamento. E por que você vê isso? AUDIÊNCIA: Quando estávamos recuperando toda a informação de que veio nesse formato. JASON HIRSCHHORN: Então você iria ficar - sim. Vá em frente. AUDIÊNCIA: [inaudível] informações de um objeto? JASON HIRSCHHORN: Ambos os juntos é a resposta que estamos procurando. Você quer que a informação de esta outra página da web. E espero que quando você está obter essa informação, seria apresentado a você em algum tipo de formato padronizado. Todo mundo é provavelmente familiar com valores separados por vírgulas. Você pode exportar uma planilha do Excel ou qualquer tipo de planilha como uma lista de valores separados por vírgulas. E as vírgulas dividir tudo os diferentes campos. JavaScript Object Notation - JSON - é um outro tipo de padronizado disposição das coisas. E isso é muitas vezes como nós recuperamos informações de nossos consultas Ajax. Portanto, neste caso, temos que a partir do site do Yahoo. Eles voltam para as coisas nós em um objeto JSON. E então sabemos, porque é um padrão, o que é vai parecer. Assim, pode percorrer a matriz que é devolvido para nós, a matriz de objetos que são retornados para nós. Nós provavelmente não precisa saber as chaves, mas eles geralmente dão-lhe documentação no site quando você está buscando algum JSON notação para eles. Da mesma forma, você pode JSON codificar um objeto. Portanto, há uma função JSON ressaltam codificação. E assim você pode tirar um objeto que que você criou, JSON codificá-lo, e passá-lo para alguma coisa outra coisa, se você quiser. E JSON decodificar também existe para um propósito similar, ou para o objetivo oposto. AUDIÊNCIA: Não precisamos saber de codificação para tabelas de hash e tentativas? Ou será que só precisa entender como eles são usados, conceitualmente? JASON HIRSCHHORN: Então, levante a mão se você fez uma tabela hash para p set 4 com uma lista de links. Ou p ajuste 5. Então isso foi uma grande maioria das pessoas. P ajuste 5, 6, quem sabe. Há muito tempo atrás. Assim, a grande maioria dos que você fez tabelas hash com listas de links. E porque essa é provavelmente a mais abordagem comum, e porque passamos uma grande quantidade de tempo fazendo listas de links e de hash tabelas, você provavelmente deve ser bastante familiarizado com a forma de código uma tabela hash e uma lista de links. E se você acha que volta para esse problema definido, ele não era realmente tão duro como você esperava. E havia muito menos código do que você esperava. Eu diria que você deve saber codificar uma tabela hash ou uma lista de link. Não que você será solicitado que, necessariamente, mas você deve certamente sabe disso. Além disso, se você olhar através de testes passados, tem havido uma grande quantidade de perguntas sobre como escrever funções em listas de links ou listas duplamente ligadas. Isso parece vir-se a cada ano. Inserir o botão direito em uma lista de links, certo excluir uma lista de links, certo inserir para uma lista duplamente ligada, et cetera. Então isso, me sinto muito confortável dizendo que você deve saber disso. Para tentar, eu diria que você deve certamente sabe como ele funciona, e talvez dar algum pseudocódigo para saber como para codificá-lo e configurá-lo. Mas não seria a pior coisa o mundo se você não sabe como codificá-lo em C. Seria ótimo se você sabia como código em C, mas eu acho que provavelmente pseudocódigo para uma tentativa seria ser o mais que você precisa saber para uma tentativa. AUDIÊNCIA: Crédito extra? JASON HIRSCHHORN: E mesmo com, se entrar em árvores de busca binária, você pode precisa - e você já viu no passado, fizemos um monte de - você sabe como árvore binária de busca funciona. Provavelmente deve ser capaz de configurá-la em código pseudo. Mas porque a grande maioria das pessoas não fez isso no problema set, eu diria que é provavelmente menos importante que você saiba como codificar e montou uma árvore assim. Alguma outra pergunta? Além disso, podemos perguntar-lhes por todo como passamos por alguns problemas. OK, vamos seguir em frente. Ir esse slide por enquanto. Falando de árvores, que é o primeiro pergunta que eu tenho para vocês. Porque este é um problema. Eu diria que é altamente provável que você vai obter um problema como este em seu quiz pedindo-lhe para codificar algum tipo de inserção, excluir, busca, para um tipo de estrutura de dados que já vimos. Isso vem a cada ano e passamos muito tempo o segundo semestre deste semestre repassando esses tipos de dados. Então, agora, eu defini um nó em uma árvore de busca binária. E o que eu gostaria que você faça é dada uma árvore de busca binária, que começa neste raiz estrela nó, preencha o implementação da função abaixo, que passa a ser uma função find. E fazê-lo com e sem recursividade. Então, eu quero que você escreva duas funções. Uma fazendo isso com a recursividade, uma fazer isso sem recursão. E não pense que o raiz será não-nulo. Então, nós estamos olhando para o número inteiro i em a árvore a partir de raiz, e precisamos para escrever este recursivamente e de forma iterativa. É. AUDIÊNCIA: Então você quer que a gente retornar true se encontrá-lo, e falso se não encontrá-lo. JASON HIRSCHHORN: Como você sabe? Como é que você sabe disso? AUDIÊNCIA: Eu estava pedindo a primeira, mas eu estava assumindo, porque ele diz que a bool o início da função. JASON HIRSCHHORN: Certo. Diz bool, para que eu não precisa nem dizer-lhe o que eu espero que você retorne porque ele diz ali mesmo. Mas é isso mesmo. Retorne, verdadeiro ou falso. Portanto, antes de começar, eu recomendaria, se você não estiver familiarizado com árvores de busca binária, desenho rapidamente uma foto dele para obter o seu compreensão, certo. Isso também irá ajudá-lo ao escrever seu código e verificar. Mais uma vez, você também não tem que muito tempo no quiz para fazer todas as coisas que pedimos que você faça. Assim, a escrita de código pseudo é muito útil. E nós geralmente dão cerca de - se o pseudocódigo é perfeitamente correto, isso é geralmente 50% sobre uma questão. Portanto, não é uma regra dura e rápida, mas se você acabou de escrever pseudocódigo e é correta, é geralmente de 50%. Então, eu sempre recomendo - se você está pressionado pelo tempo, ou mesmo se você está apenas tentando descobrir isso - começando com o pseudocódigo. E, finalmente, se você pudesse escrever este tudo em C, que seria fantástico. Portanto, vamos ter três minutos para trabalhar neste programa. E então nós estamos indo para escrever pseudocódigo para ele apenas uma vez, e, em seguida, vamos codificá-lo de forma recursiva e, em seguida, de forma iterativa. Se você tiver alguma dúvida, sinta-se livre, levante a mão. Feliz para passear e respondê-las antes de começar como um grupo. Vamos continuar, e nós vamos Pseudocódigo a versão recursiva isso, e então vamos codificá-lo. Assim, uma função recursiva precisa de duas coisas. Isso pode ser uma pergunta que você pode ser solicitado. Necessidades duas coisas. Quem pode levantar a mão e dizer-me que as duas coisas uma recursiva função precisa? Por definição, tem duas coisas. O que são essas duas coisas? Novas mãos. Sim, Alden. AUDIÊNCIA: Então eu não sei exatamente se esta é a terminologia, mas - JASON HIRSCHHORN: Estou feliz você está levantando sua mão. AUDIÊNCIA: Ela precisa de um caso base, e ele precisa de um passo recursivo. JASON HIRSCHHORN: Perfeito. Ela precisa de um caso base e um passo recursiva. Então, qual é o nosso caso base aqui? AUDIÊNCIA: F é igual a raiz é igual a nulo. Desculpe, apenas em pseudocódigo, se é nulo. Se a raiz é nulo. JASON HIRSCHHORN: Se a raiz é nulo. Isso é excelente. Esse é o nosso caso base. Isso é o que vamos de verificar o tempo todo. E caso base é a primeira coisa a fazer. Se você acertar o caso base, você está feito. Agora precisamos de nossa chamada recursiva, e eu estar disposto a apostar que precisamos de um casal recursiva chama aqui. Porque é uma árvore, e nós poderia ir várias maneiras. Então, se a raiz é nulo, estamos bem. O que você propõe? E agora eu vou começar a chamar em vocês, porque eu sei que vocês todos sabem disso. Mas Annie, o que deve a próxima linha de ser? O que se encontrou? O que vamos fazer? AUDIÊNCIA: Se encontrou? JASON HIRSCHHORN: Ou o que que deve ser - dá-me o pseudocódigo para o linha onde o encontramos. AUDIÊNCIA: Se i é igual a raiz i? JASON HIRSCHHORN: E então o que é que fazemos? AUDIÊNCIA: Return verdade. JASON HIRSCHHORN: Ótimo. Então, se eu é que eu - Oh, eles são ambos chamados i. Isso fica confuso. Mas se eu é que eu retornar true. Isso é provavelmente a próxima coisa que devemos fazer. Faz sentido. OK, agora nós não fizemos o nosso recursiva chamar ainda, porém, porque a recursiva chamada chamaria essa função novamente. Então, o que deve ser o próximo linha de pseudocódigo ser? Anna. AUDIÊNCIA: A ala esquerda. JASON HIRSCHHORN: Seja específico, no entanto. Esta é uma árvore de busca binária, então o que se verificar o lado esquerdo envolve? AUDIÊNCIA: Então nó - Sinto muito, raiz. E, em seguida, seta para a esquerda. Nó, nó, me desculpe. Eu não vou lê-lo corretamente. É chamado de nó, certo? JASON HIRSCHHORN: Ele será chamado raiz nessa função, mas de qualquer forma. O lado esquerdo - É mesmo? AUDIÊNCIA: Se ele não é igual i, então vamos chamar a função de novo? JASON HIRSCHHORN: Isso mesmo. Se isso não acontecer igual eu, vamos para chamar a função novamente. Mas o lado da árvore que vamos para chamar a função de novo? AUDIÊNCIA: No lado esquerdo. JASON HIRSCHHORN: Nós não somos sempre vai chamá-lo à esquerda, se não igual a ele. AUDIÊNCIA: Oh, desculpe. Chamar à direita. JASON HIRSCHHORN: Queremos saber especificamente, embora - lembre-se, em um árvore binária de busca, tudo para O lado esquerdo é menor. Tudo à direita lado é maior. Portanto, não é apenas - sim, vá em frente. AUDIÊNCIA: Se é menor do que eu, então - se é à esquerda - JASON HIRSCHHORN: Então, se ri é inferior a - por isso, se o nosso número é menor do que eu, de que lado queremos ir? AUDIÊNCIA: Nós queremos ir para o lado direito. JASON HIRSCHHORN: Nós queremos ir - deixe-me desenhar uma árvore rápida. Se este é 5, esta será de 3. Portanto, se ri é inferior a cinco, o que lado queremos ir? AUDIÊNCIA: Desculpe, o quê? JASON HIRSCHHORN: Nosso número é menor que o número que estamos olhando agora. AUDIÊNCIA: Ah, então nós queremos para ir para o lado esquerdo. É. Desculpe. JASON HIRSCHHORN: Exatamente. Não se preocupe. Na busca binária árvore, tudo é inferior à esquerda, é maior para a direita. Portanto, se o nosso número é menor do que o i estamos verificando - porque você vê no nó, que tem uma i - então você quer ir para a esquerda. E este é um caminho fácil. O que é que a outra linha de pseudocódigo precisamos escrever? Carlos? AUDIÊNCIA: É a mesma coisa, você só mudar lo para um sinal de maior que e vá para a direita. JASON HIRSCHHORN: Você pode dizê-lo mais uma vez? AUDIÊNCIA: Se o nosso número é maior do que eu, vá para a direita. JASON HIRSCHHORN: Excelente trabalho no pseudocódigo. Vamos fazer isso no código real. E mais uma vez, este pseudocódigo vontade provavelmente levá-lo, porque é correto, 50% sobre esta questão. Mas isto também se traduz um pseudocódigo a uma, essencialmente, em código. Por isso, vamos fazer isso em C. Quem pode dar me a primeira linha de código? Na verdade, em primeiro lugar, antes de eu fazer que, deixe-me encostar - AUDIÊNCIA: Eu tenho uma pergunta. Por que você fez recuar o linha que eu te dei? JASON HIRSCHHORN: Porque Eu não podia escrever. Eu não sei. Você está certo. Essa linha deve estar por lá. OK, aqui é a nossa função. E deixe-me encostar, também, nossa definição de um nó. O que acontece se não o fizéssemos escrever typedef? Alguém sabe? AUDIÊNCIA: Não seria compilar. JASON HIRSCHHORN: seria compilar, sim. AUDIÊNCIA: Seria apenas declarar um exemplo, em vez de torná-lo um novo o tipo que você poderia declarar múltipla casos de? JASON HIRSCHHORN: Então não faria sabe - não seria apenas declarar um tipo. Você ainda pode fazer um monte de nós. AUDIÊNCIA: Mas não temos que escrever struct nó de cada vez? JASON HIRSCHHORN: Isso mesmo. Você teria que escrever nó struct de cada vez, em vez de apenas nó. Mas com typedef, você pode simplesmente escrever nó cada vez. OK, que não tenha dado - sim, Avica. AUDIÊNCIA: Se a raiz é igual a iguais nulo, retorna false. JASON HIRSCHHORN: Ótimo, e esse é o nosso caso base. Próxima linha de código. Alguém que não tenha dado me uma linha de código ainda? É. AUDIÊNCIA: arrow Root i é igual igual a i. Em seguida, retornar true. JASON HIRSCHHORN: Ótimo. Próxima linha? É. Alguém mais? E então você pode ir em seguida. AUDIÊNCIA: Else se seta raiz i é inferior a i regresso função chamada raiz achado - JASON HIRSCHHORN: Desculpe. AUDIÊNCIA: root Voltar achado aponta para a esquerda vírgula i. JASON HIRSCHHORN: Então, se ri é maior que a coisa na árvore, nós queremos ir para a esquerda? AUDIÊNCIA: Não, eu tinha que comutada. JASON HIRSCHHORN: Qual? AUDIÊNCIA: Não, sim. Eu tenho um menor que assinar lá. JASON HIRSCHHORN: Certo, se ri é menos do que o que está na raiz - nossa raiz atual - então nós quer ir para a esquerda. E o que é a última linha, você? AUDIÊNCIA: Basicamente a mesma coisa, excepto mudar o maior ou igual a menos do que e esquerda para a direita. JASON HIRSCHHORN: Excelente. Alguém tem alguma dúvida sobre isso? Por isso, algumas outras coisas que faria ter sido correta é que pode ser a-ltiff. Guess, tecnicamente, nenhum destes realmente necessita também ser-ltiff. Além disso, há, provavelmente, só um caso aqui em baixo. Então, isso é, provavelmente, o seu último caso. Você não precisa sequer de que-ltiff. Mas, provavelmente, bom para escrever que, para ser claro. É. AUDIÊNCIA: Então você não acha que o teste - se cometer erros, por exemplo, na sintaxe - erros pequenos de sintaxe - como é que se começa a tomar no questionário? JASON HIRSCHHORN: Geralmente no questionário, pequeno erro de sintaxe ou pequeno erros de estilo não perder pontos. Então, se você se esqueceu de um ponto e vírgula aqui, seria OK. Se você esqueceu de fechar este parêntese, que seria OK. Erros de sintaxe enormes que alteram a significado funcional do seu código dramaticamente, você pode obter tirado pontos para. Ou geralmente, só você classificação sobre se ou não o seu funções de código, mesmo - não a sua concepção tanto, e não seu estilo. Vamos agora codificar um iterativo versão do achado. Então, ele vai ser muito semelhante, mas há certamente vai ser algumas diferenças fundamentais. No entanto, nosso pseudocódigo provavelmente pode ir - ainda podemos ter uma linha do pseudocódigo e descobrir o que o A linha é neste caso. Assim, em uma versão interativa, o que que você acha, Julia, se ser a primeira linha? AUDIÊNCIA: Mais uma vez, em boolean iterativo, você precisa configurar um loop for, certo? JASON HIRSCHHORN: OK. AUDIÊNCIA: Assim como para, k, para x é igual a 0, x é inferior a i. Ou não, x é menor que o tamanho da árvore. JASON HIRSCHHORN: A árvore. Então, nós realmente não sabemos o tamanho da árvore, e nós realmente não sei para quantas vezes nós podemos ir, por isso, o que é um diferente tipo de loop que pode ser melhor neste caso? AUDIÊNCIA: Se mais? JASON HIRSCHHORN: Se outra pessoa não pode ser uma malha. Assim que é um tipo de loop podemos apenas ir até algum caso for atendida? Qual é o único outro tipo de loop em C, além de um loop? AUDIÊNCIA: While. JASON HIRSCHHORN: Enquanto, exatamente. Em um loop while, não precisa saber como - um loop while e for loop pode fazer o exatamente a mesma coisa, mas a coisa boa cerca de um loop while é que não precisamos saber o quão grande é a nossa árvore. Então, nós estamos indo para ir até o quê? AUDIÊNCIA: Até que ele é igual a o tamanho da - JASON HIRSCHHORN: Bem, é muito semelhante ao nosso processo recursivo. So - AUDIÊNCIA: Enquanto raiz i não é igual a i. JASON HIRSCHHORN: Isso é realmente muito próximos. Enquanto raiz i - vamos tentar. Eu não acho que [inaudível] onde i raiz não é igual a i. Podemos precisar mudá-lo em um pouco pouco, mas isso parece que é bastante bom, por enquanto. Então, vamos fazer isso. Além disso, lembre-se, não podemos assumir por questão. Você não assumir que o raiz será não-nulo. Então, o que você acha que a muito primeira coisa que devemos fazer é? AUDIÊNCIA: Basta fazer o mesmo coisa como antes. Se a raiz é igual a iguais nulo, retorna false. JASON HIRSCHHORN: Ótimo. Assim, poderia ser nulo. Por isso, queremos nos livrar de la imediatamente. E então vamos verificar se raiz i não é igual a i. Então, dizer que estamos buscando nesta árvore para 3, raiz i não é igual a i, agora estamos em nosso loop while. O que queremos fazer? E, novamente, ele vai ser bastante semelhante à nossa versão recursiva. É. AUDIÊNCIA: Então você gostaria de iteração, ou continue indo para baixo da árvore, desde que a raiz não é igual a nulo. Jason HIRSCHHORN: Enquanto o raiz não é igual a nulo? AUDIÊNCIA: O traço raiz i não é igual a nulo. Apenas a raiz, sim. Como desde a raiz é não é igual a null. JASON HIRSCHHORN: Então você quer para mudar isso em raiz não é igual a zero? AUDIÊNCIA: Yeah. AUDIÊNCIA: Podíamos combinar estes, certo? Nós não precisamos de o caso, inicialmente. JASON HIRSCHHORN: OK, então se nós não - se combiná-los, então nós vamos fazer enquanto raiz não é igual a zero, e se a raiz passa a ser nulo no começando, o que fazemos aqui? AUDIÊNCIA: Return false. JASON HIRSCHHORN: Ótimo. Assim, em ambos os sentidos, provavelmente, teria funcionado. Esta é uma forma diferente, e essa combina-lo. Mas, novamente, se você fez uma ou outra maneira, estamos não vai tirar design pontos no quiz. Mas isso parece ser bom. Assim, enquanto a raiz não é igual nula, o que é o primeiro coisa que deseja verificar? Alguém mais? Null, qual é a primeira coisa? AUDIÊNCIAS: Se ri é inferior a - oh, eu acho que, se já verificou-se na raiz. Então, se a seta raiz i é igual a i - JASON HIRSCHHORN: Desculpe? AUDIÊNCIA: Se a seta raiz i é igual é igual a i - JASON HIRSCHHORN: O que vamos fazer? AUDIÊNCIA: Return verdade. JASON HIRSCHHORN: Ótimo. E o que vem a seguir? Jeff, qual é a próxima linha de código? AUDIÊNCIA: Se i é inferior a seta raiz i, então é igual a raiz raiz seta esquerda. JASON Hirschhorn: iguais Raiz seta raiz esquerda. Então, isso é provavelmente o maior diferença aqui neste iterativo versão oposta à versão recursiva. A versão recursiva chamar a função novamente. Estaremos atualizando raiz quando chamamos a nova função. Aqui não estamos chamando uma nova função. Estamos simplesmente atualizando raiz nesta função. Isso é excelente. E o que é a última linha de código? Sim, Mario? AUDIÊNCIA: iguais raiz Else seta para a direita da raiz. JASON HIRSCHHORN: Desculpe? Iguais Raiz: Público seta para a direita da raiz. JASON HIRSCHHORN: Você poderia também escrever algo como isto? AUDIÊNCIA: Eu não tenho idéia. JASON HIRSCHHORN: Você não pode. Você não pode fazer é igual a mais. OK, então isso parece ser bom. Por que não vamos apenas fazer isso para limpá-lo. Isso parece ótimo, e isso iria funcionar. E gostaríamos de sair. Se esquerdo raiz estava certo nulo ou raiz foi nula, chegaríamos até aqui. Root seria igual a nulo. Nós sair do nosso loop, e nós return false. Assim, quando sair do loop, nós retornar false. E, novamente, a um loop while foi perfeita aqui, porque nós não sabemos como grande árvore é nossa. Nós tentamos escrever o loop for, mas nós percebi que você tem que descobrir como grande é antes do tempo. É. AUDIÊNCIA: Se este não fosse um arquivo binário árvore de busca, seria verdadeira matemática-y escrevê-lo de forma iterativa, certo? Como, se fosse uma árvore, mas não necessariamente - por isso não foi tudo menor, à esquerda, e todo maior, à direita. Seria muito difícil iterar sobre isso, certo? Nós teríamos que salvar o que era antes em na árvore e voltar, e coisas assim. JASON HIRSCHHORN: Se não fosse um binário Pesquisa árvore, se foi apenas uma árvore e as coisas não eram classificadas como esta - e percebemos antes, quando Anna estava ajudando-nos que o que torna classificada nos ajuda muito - seria preciso, sim, sempre guardar onde estávamos anteriormente. Mas pode haver um monte de onde estávamos previouslys. Não poderia haver um monte de nós pai. Provavelmente a melhor maneira de fazer isso seria ser a de continuar a empurrar as coisas para alguns tipo de pilha ou fila. Você nunca precisa codificar esta porque é um problema difícil. Mas você empurrar algumas coisas para uma pilha ou fila e, em seguida, pop-los fora, e depois avaliá-los. E então tem alguma outra coisa onde na verdade você está colocando os nós e em seguida, criar que, em seguida, procurar por isso. Isso pode ser a melhor maneira de fazê-lo. OK, qualquer dúvida sobre este problema? AUDIÊNCIA: Trata-se de uma nota relacionada. Será que vamos ter de comparar os tempos de execução para tabelas de hash, binário árvores de busca, et cetera? JASON HIRSCHHORN: Provavelmente. Então, vamos fazer isso muito rapidamente. Tempo de execução para a tabela de hash - quais são os outros? Árvore binária? AUDIÊNCIA: listas de links. JASON HIRSCHHORN: OK, vamos fazer de inserção. Qual é o grande O de inserção em uma tabela hash? Quais são os pressupostos você está fazendo? AUDIÊNCIA: Você está inserindo no no início da lista de link. JASON HIRSCHHORN: Provavelmente a primeira suposição é que não há colisões. Se não há colisões, então o tempo de inserção é uma delas. Se houver colisões, e você está fazendo encadeamento separado e inserindo no início da lista de ligação, em seguida, a inserção é também constante. Se você estiver fazendo uma tabela hash, mas você dispor de um método diferente de tratar com colisões, o que é um método diferente? O que há é um método diferente de tratar colisão em uma tabela hash? AUDIÊNCIA: Programação Linear. JASON HIRSCHHORN: Programação Linear. Então, vamos continuar procurando para o próximo ponto em aberto. Isso não é tempo de inserção constante. Você pode ter que passar por toda a tabela, de modo que poderia ser grande O de n. É. AUDIÊNCIA: Caso contrário apenas o encadeamento? JASON HIRSCHHORN: Nós fizemos encadeamento separado. Essa foi a primeira. Isso é o que a lista de link. O nome fantasia é encadeamento separado. Poderia ser qualquer tipo de estrutura de lista acontecer de fazer na lista de link. Então, novamente, a inserção em uma tabela hash poderia ser de tempo constante. E quanto a inserção em uma fila de empilhador? AUDIÊNCIA: Isso não é constante? JASON HIRSCHHORN: É tempo constante. Você está apenas empurrando-o. OK. Inclusão, quais foram os outros? Em uma tentativa? O que é grande O de inserção em uma tentativa? AUDIÊNCIA: Comprimento é constante. Comprimento das mais longas - o comprimento da palavra você está inserindo. JASON HIRSCHHORN: Desculpe? Espera, então o que eu ouço? Você disse - o que foi que você disse? Qual foi a sua resposta, Marcus? AUDIÊNCIAS: O comprimento da palavra você está inserindo em caracteres, assumindo que é uma tentativa personagem. JASON HIRSCHHORN: OK, então o comprimento da palavra. Nós vamos fazer uma suposição de que é uma seqüência de caracteres. Você disse algo diferente, no entanto. Você disse que o comprimento da palavra mais longa. AUDIÊNCIA: Isso é apenas constante, certo? JASON HIRSCHHORN: Por que seja constante? AUDIÊNCIA: Como, se você usar grande O notação, então não variam de acordo com sobre o número de coisas que já estão na tentativa. JASON HIRSCHHORN: Então, faríamos dizer que é tempo constante. É inserção constante, e isso é porque essa idéia - dizer que temos uma palavra que é de 45 anos, ou uma palavra que é 60, que tem um número constante. E que seria apenas ser inserido em tempo constante. Na prática, porém, não seria, obviamente, acontecem em um milésimo de segundo, por exemplo. Mas diríamos grande S é constante para uma tentativa. E isso é um dos seus maiores vantagens. E quanto a inserção em uma lista de links? Apenas um genérico, lista de links ordenados? É. AUDIÊNCIA: eu tinha uma pergunta. No teste, que eles nunca nos a perguntar tempo de inserção que é quatro etapas, ou algo assim? Ou é apenas - quando você diz que tempo de inserção é um, isso apenas significa constante de tempo? JASON HIRSCHHORN: Sim, eles iriam sempre perguntar, é grande O de n? Big O log de n? N ao quadrado constante. Essas são realmente a única que você precisa saber. E quanto a inserção no lista de links ordenados? AUDIÊNCIA: eu tinha uma pergunta - uma pergunta - JASON HIRSCHHORN: Qual é a resposta a essa pergunta, embora? AUDIÊNCIA: Espere, o que você pergunta? JASON HIRSCHHORN: O que é grande O de inserção em uma lista de links ordenados? AUDIÊNCIA: One? Não espere, não espera, n. JASON HIRSCHHORN: N. Além a lista de link. E qual foi a sua pergunta? AUDIÊNCIA: Então você escreveria o de k ou o de 1 para o - JASON HIRSCHHORN: Ah. Eu ia escrever o de 1, provavelmente. Houve uma outra estrutura de dados que teria sido bom. Árvore, árvore binária de busca. O que há de inserção em uma árvore binária de busca? AUDIÊNCIA: Login. JASON HIRSCHHORN: Então, qual é o pior caso em uma árvore de busca binária? Então, se acontecer para começar às 5, e cada número é superior a 5, em seguida, temos 5, 7, 9, 11, et cetera. Neste caso, é basicamente um link lista, e precisamos inserir todos o caminho no final. Por isso, é grande O de n. Isso poderia ser o nosso pior caso em uma árvore de busca binária. Obviamente, você nunca iria construir uma árvore de busca binária com 5 no meio, sabendo que 5 ser o menor número. Mas pode ser, se você estiver começando do zero. Qualquer dúvida sobre isso antes de eu passar para outra pergunta? Essa foi uma boa pergunta. Eu gostaria de saber grande O de - AUDIÊNCIA: E sobre a pesquisa para aqueles quatro? JASON HIRSCHHORN: Definitivamente nós que pesquisa e classificação. Fizemos todos os algoritmos, certo. Espere, é que para Quiz 1? Foi que cobria - se você já tem que pergunta sobre Teste 1? A grande O tempo de execução de busca binária, tipo de inserção, bubble sort? AUDIÊNCIA: Yeah. JASON HIRSCHHORN: Se você tivesse que pergunta sobre Teste 0, as probabilidades são que você não vai obter exatamente a mesma pergunta em Teste 1. Pode ser ainda bom saber desses. Felizmente você deve saber gh já. Mas outros tempos de execução logarítmicas são, provavelmente, bom saber. Coisas que não foram abordados no quiz 0. Como todos esses operadores estes tipos de dados abstratos. OK, vamos seguir em frente. Este deve ser muito rápido. E esta é uma nova linguagem que não tem realmente codificado em antes. Esta é uma pergunta perguntando de código em PHP. Então, considere a matriz PHP abaixo. Faça PHP códigos e / ou HTML tal que gera uma tabela de duas colunas com o TFS nomes e casas. Você nunca fez isso antes, esse problema específico. Mas isso deve ser muito familiar para o que você fez em conjunto de problemas 7. Então, eu estaria disposto a apostar que você vai ser pediu para codificar algo em PHP que é muito semelhante ao que se fez em conjunto de problemas 7. Em primeiro lugar, array não é tão específico. Qual o tipo de matriz é isso? AUDIÊNCIA: Associativo. JASON HIRSCHHORN: É uma matriz associativa. E qual é a diferença entre um matriz associativa e um objeto? AUDIÊNCIA: uma matriz de objeto tem um índice de números inteiros, e uma matriz associativa é um índice de uma string, ou algo parecido. JASON HIRSCHHORN: Então, uma série de objetos teriam índices de inteiros, mas um objeto tem campos. Tem esses nomes campos como nome, casa, estudante. Você tem uma idéia? AUDIÊNCIA: Bem, associativo matriz é em PHP, certo? E objeto está em JavaScript? JASON HIRSCHHORN: Honestamente, não há nenhuma diferença real entre os dois. Ambos têm seqüências como as chaves, e pode tem basicamente qualquer coisa como o valor. Diferentes linguagens chamar um coisa matriz associativa, uma coisa um objeto. Então, honestamente, não existe uma verdadeira diferença, mas não há dúvida alguma diferenças sintáticas entre os dois. É. AUDIÊNCIA: Então é objeto também codificado sob o capô como uma tabela hash, então? JASON HIRSCHHORN: O que você faz Quer dizer, codificado sob o capô? AUDIÊNCIA: Fomos informados de que associativa disposição era tecnicamente um Tabela de Hash. Então, é objeto também tecnicamente uma tabela hash? JASON HIRSCHHORN: Eu não vou para responder a essa pergunta. Eu vou voltar para você sobre isso. Mas eu não acho que de qualquer daqueles assim. Mas, em qualquer maneira, uma matriz associativa e objeto, geralmente, as pessoas usam os termos como sinônimos. Neste caso, a parte legal é que você pode usar as teclas. Cordas como chaves, ao invés de apenas números simples. Então, eu tenho falado sobre isso por algum tempo. Felizmente, algumas pessoas têm chegado começou com isso. Nós vamos escrever algum PHP e HTML código, de modo que temos uma de duas colunas tabela com os nomes e as casas do TFS. OK, eu também gostaria de um cabeçalho linha nesta tabela. Então, eu estou indo para ir direto para isso. Estamos indo para o arquivo, novo, e nós vamos - OK. Como faço para iniciar uma mesa? Qual é a tag, Michael, para iniciar uma mesa? AUDIÊNCIA: Table. JASON HIRSCHHORN: Table. E se eu abrir uma tag, o que mais eu preciso? AUDIÊNCIA: Uma cabeça? Ou, eu acho, de classe. JASON HIRSCHHORN: Então, me desculpe. Suponha que já escrevi doctab, HTML, todas essas coisas. Mas se eu abrir essa tag da tabela, o que mais eu preciso para escrever? para validar HTML? AUDIÊNCIA: Feche-lo. JASON HIRSCHHORN: Feche a tag. Como faço para escrever uma tag close-mesa? AUDIÊNCIA: Dot cortar mesa. JASON HIRSCHHORN: Corte mesa, ótimo. Provavelmente faz sentido escrever tanto dos em conjunto porque você tem que fazê-lo. OK, se eu quiser uma linha de cabeçalho, como fazer Eu escrevo uma linha de cabeçalho com títulos? AUDIÊNCIA: É menos de 10 horas perto - TR, sim. JASON HIRSCHHORN: TR? AUDIÊNCIA: Então mesma coisa, a barra, sim. JASON HIRSCHHORN: OK, e dá-me duas colunas. AUDIÊNCIA: T D? JASON HIRSCHHORN: OK. Eu quero duas colunas. Isso me dá duas colunas? Quantas colunas é isso? Uma. Então, vamos copiar e colar este. Então, na verdade, no questionário, todo este código que temos escrito até agora foi realmente dado a você. Mas você deve, provavelmente, ainda sabe como escrevê-lo. É. AUDIÊNCIA: Sua casa situa-se entre os dois. JASON HIRSCHHORN: Lança. Deve ir lá, certo? Boa chamada. Então, novamente, todo este código é realmente dada a você no teste real. Mas é divertido escrevê-lo, e você deve saber como escrevê-lo. Portanto, este é o lugar onde você precisa para começar o seu código. O que precisamos para escrever aqui? Desculpe, eu preciso mudar o nome desse arquivo. Por isso, ele foi salvo em um arquivo HTML., não em um arquivo PHP.. Essas coisas não significaria nada em um arquivo PHP.. Então, nós estamos em um arquivo HTML.. Qual é a primeira coisa Eu preciso escrever? Eu quero colocar um pouco de PHP código em uma página HTML. AUDIÊNCIA: PHP, como outra cenoura e ponto de interrogação PHP, certo? JASON HIRSCHHORN: Ótimo. E como faço para acabar com isso? AUDIÊNCIA: Com um ponto de interrogação. JASON HIRSCHHORN: Isso é ótimo. Essa é a primeira coisa que eu preciso, se eu quiser colocar algum código PHP aqui. AUDIÊNCIA:. Pensei PHP arquivo pode demorar HTML. JASON HIRSCHHORN: Yeah. Um arquivo PHP. Pode levar algum HTML e ser exibido. Esse foi o meu mal. Eu estava apenas tentando imitar o que era no quiz. OK, desculpe para confundi-lo. Sim, practice.HTML. Agora vamos colocar algum código PHP dentro O que é a primeira linha de Código PHP que devo escrever? Eu vou passar por essa matriz e torná-lo em uma tabela. É. AUDIÊNCIA: Você pode usar um loop for H ou um loop for. JASON HIRSCHHORN: OK, o que você quer usar? AUDIÊNCIA: Gostaria de usar um loop for. Para, em seguida, você faz sinal de dólar i é igual a 0 ponto e vírgula dólar assinar i inferior a 2. E então vírgula i dólar assinar i plus plus. JASON HIRSCHHORN: Como fazer você sabe usar um 2? AUDIÊNCIA: Porque havia dois arrays associativos dentro do maior array associativo. JASON HIRSCHHORN: Então, a coisa mais importante do não uma matriz associado. A grande coisa é apenas uma matriz normal. Mas você está certo, há duas matrizes associativas dentro da nossa matriz maior. É por isso que você usa dois. Eu me sinto desconfortável assumindo que eles são dois, então o que é uma maneira de escrever isso sem assumir que eles são 2? AUDIÊNCIA: [inaudível]? JASON HIRSCHHORN: OK, como você escreve isso? AUDIÊNCIA: Foreach cifrão tfs ou como sinal de dólar tf. JASON HIRSCHHORN: OK, então para cada tfs como tfs, eu quero, agora mais uma vez, ter a minha mesa. Então, quem pode me dar o próxima linha de código? AUDIÊNCIA: Imprimir e, em seguida, em citações, o fim do suporte tr suporte, citações final. Parênteses End, ponto e vírgula. JASON HIRSCHHORN: OK, e o que é que vai fazer? AUDIÊNCIA: Vai dizer, nova linha. Vai colocar o marca para uma nova linha. JASON HIRSCHHORN: Certo, esta PHP, como falamos anteriormente - este PHP vai ser avaliado, e, em seguida, que vai imprimir a este arquivo um mesa de reboque, e, em seguida, que HTML será avaliada. Nós estamos apenas copiando este HTML tivemos até aqui. É. AUDIÊNCIA: [inaudível]? JASON HIRSCHHORN: Desculpe? É aqui mesmo. Outono 2012. Não olhe para as respostas, vamos resolver isso juntos. Então, nós imprimimos linha da tabela. Então, provavelmente você está no o balanço das coisas. Qual é a próxima linha de código que precisamos para escrever? Assam, dá-me a próxima linha de código. AUDIÊNCIA: É necessário o nome do tf. Tf suportes aspa aberta nomear colchetes fechados. JASON HIRSCHHORN: Dê-me seu nome. AUDIÊNCIA: Você precisa imprimir isso. [VOZES interpondo] JASON HIRSCHHORN: OK, como faço para imprimi-lo? [VOZES interpondo] JASON HIRSCHHORN: Eu estou sentindo falta alguma coisa agora. O que eu estou ausente? AUDIÊNCIA: Você precisa de um sinal de dólar. JASON HIRSCHHORN: O que mais eu estou ausente? Todos nós já impresso até agora é o tr. AUDIÊNCIA: Feche a tr depois. JASON HIRSCHHORN: Então, nós precisamos para fechar a tr depois. Quem vê o que está faltando na linha 16? Sim, Anna. AUDIÊNCIA: Você precisa abrir um td e chaves. JASON HIRSCHHORN: E onde é que vamos colocar chaves? AUDIÊNCIA: Em torno do nome tf. JASON HIRSCHHORN: Gostou? AUDIÊNCIA: Yeah. E, em seguida, fechar o td. JASON HIRSCHHORN: Assim? AUDIÊNCIA: Você precisa de aspas duplas marcas ao lado das chaves? JASON HIRSCHHORN: Aqui? Não, você não. Então, isso é exatamente correto. É. AUDIÊNCIA: Então, a diferença entre o que e encatenating com pontos é, se você usa pontos, você tem que ter o aspas duplas, em seguida, um ponto, em seguida, o ponto - JASON HIRSCHHORN: Correto. Então você está dizendo que há uma final maneira de escrever este como aquele. O que o operador de concatenação em JavaScript? AUDIÊNCIA: Um sinal de mais. Você esqueceu de colocar o encaracolado cinta de volta. JASON HIRSCHHORN: Ótimo. E há mais uma linha de código faltando. Quem pode me dar a última linha de código que está faltando? AUDIÊNCIA: Apenas a exata mesma coisa, apenas com a casa em vez do nome. Grande JASON HIRSCHHORN: Ótimo. E a sua sintaxe é exatamente certo para fazer as coisas em uma matriz associado. Assim, no teste real, você é realmente dado até aqui. Portanto, este código foi dado a você. Tudo o que tinha para escrever eram estes quatro linhas e lembre-se fechar a tag mesa. Vocês realmente fizeram tudo isso e muito mais. É. AUDIÊNCIA: Então seria funcionalmente o mesmo se você só tinha que tudo em uma grande chamada de impressão, certo? E então apenas concatenados lo, et cetera? JASON HIRSCHHORN: Assim? AUDIÊNCIA: Yeah. Ele só não ficaria bem se você fosse olhá-lo quando você está inspecionando o elemento em seu site, certo? JASON HIRSCHHORN: Concordo. Se eu carreguei esta página, eu seria capaz de ver o código PHP, sempre? AUDIÊNCIA: Não. JASON HIRSCHHORN: Não. E na verdade, eu não faria. AUDIÊNCIA: Este não é HTML, certo? Então você pode ser capaz de - JASON HIRSCHHORN: Então este seria PHP ser avaliada lado do servidor. PHP é sempre avaliada lado do servidor, de modo você nunca é capaz de ver o código PHP. AUDIÊNCIA: Mas você seria capaz de ver o resultado das impressões. JASON HIRSCHHORN: Certo. E honestamente, não pode colocar tudo na linha. Pode formatá-lo muito bem para você, ou pode colocá-lo em uma linha. Obscura. Mas sim, bom ponto. AUDIÊNCIA: Como é que lá está não destacar texto para qualquer um dos comandos PHP? Porque eu lembro de ter visto isso. JASON HIRSCHHORN: Porque é um Arquivo. HTML aqui no topo. Lá você vai. AUDIÊNCIA: Se fizéssemos o método inicial com a loops, à direita, se nós queria acessar um tfs, queremos fazer suporte tfs 0 suporte, em seguida, [Inaudível]? JASON HIRSCHHORN: Você faria - então você está dizendo para o loop for, você faria em dólar sinal suporte tfs 1 ou i, certo. Ou cifrão eu fechar colchete e, em seguida, suporte quadrado aspas, sim. OK, excelente. Temos mais uma uma rápida. Sete minutos, então eu quero para passar por cima deste. Este é outro exemplo. Estamos agora totalmente outra língua. Nós temos um código HTML. É uma espécie de pequena na tela, mas Eu quero que você olhe por ela realmente rapidamente, e alguém pode me dizer, se eu fosse para carregar esta página web, o que eu veria? Descreva tudo sobre esta página. Noé? O que eu vejo? AUDIÊNCIA: Code no final frente Google com uma idéia de texto e um botão enviar. JASON HIRSCHHORN: E o se o botão de dizer? AUDIÊNCIA: Enviar. Oh, pesquisa. Sinto muito. JASON HIRSCHHORN: Diria pesquisa. Lembre-se, o nome. O que queremos usar o nome de? Este atributo nome, o que é que serve? [VOZES interpondo] AUDIÊNCIA: É o seu nome para quando é clicado? JASON HIRSCHHORN: Isso poderia ser. Mas o que geralmente vemos - por que estamos dando esta fila nome? Por que vemos isso? É. AUDIÊNCIA: Não que se tornam índice da variável de super global? JASON HIRSCHHORN: Sim, geralmente quando esta forma iria apresentar, em seguida, onde seria submeter-se a este? Qual página? Noé, o que seria esta página enviar para? AUDIÊNCIA: Eu não tenho certeza. JASON HIRSCHHORN: Onde poderia podemos encontrá-lo? Onde você encontra o que página que se submete a? Que linha de código? AUDIÊNCIA: ação Form. JASON HIRSCHHORN: Exatamente. Acção. Por isso, submete-se à página de pesquisa. Pesquisa barra invertida. Então, isso é exatamente correto. Qual o método? AUDIÊNCIA: Obter. JASON HIRSCHHORN: Obter. Exatamente. Por isso, leia isto. Este vai ser um formulário. Você está absolutamente certo. Duas coisas sobre a forma, o título da página eo topo seria Google. Então, aqui estão duas perguntas que você deve ser capaz de responder sobre esta página. Se este HTML vive neste site e o usuário insere bug para este texto campo à direita aqui, o URL será o usuário encontrar-se em cima enviar o formulário? Então nós temos isso aqui. Eu vou voltar para a Nesta página, no entanto. Vou escrever esta primeira parte. Todos podem ver aqui? OK, Mario, você acha que sabe? Qual página? AUDIÊNCIA: procure barra invertida. JASON HIRSCHHORN: Eu vou para descer aqui. OK, barra invertida pesquisa pergunta marca q é igual a bug. Alguém tem uma sugestão diferente? É. Então, como vamos conseguir isso? Bem, já vimos isso antes. E você veio com essa antes. Você estava certo, Noah, que o ação está nos dizendo o que Página vamos. Sabemos também que o método. Estamos fazendo get. E a diferença entre get e pós se que obter exibido na URL e pós não. Então, se eu escrevi poste direito lá no método, o que seria diferente? AUDIÊNCIA: seria apenas ser busca barra. JASON HIRSCHHORN: seria apenas ser barra de pesquisa. Nada aqui iria acontecer. Mas porque é um começa, o URL é apresentado como segue. Primeiro vamos ver um ponto de interrogação e vemos o nome eo valor. Dizer que havia um campo de texto de outro e Eu dei-lhe um nome de r e eu introduzir um valor, lagarta. O que seria isso agora parece? Eu tenho um campo de texto mais, eu dou um Nome do r e um valor de lagarta. AUDIÊNCIA: Após bar você teria a lagarta e comercial. JASON HIRSCHHORN: Isso é não ampersand. AUDIÊNCIA: Ou apenas o que quer o e símbolo. JASON HIRSCHHORN: Sim, não. Você estava certo, eu estava errado. Isso é como um g. AUDIÊNCIA: Caterpillar. r é igual a lagarta, desculpe. JASON HIRSCHHORN: Existe não r aí? AUDIÊNCIA: Não, não é. JASON HIRSCHHORN: Falaremos sobre isso depois da aula. Isto é exatamente correto. Assim, o e está correto. E então você pode ter muitos deles, e todos eles seriam concatenados em conjunto com o que e. Então, isso é exatamente correto. Há mais uma questão. Desenhe DOM deste HTML, começando com documento. Podemos fazer isso em dois minutos. Nós vamos fazer isso aqui. Eu vou voltar para esta página. OK, vamos começar com o documento. Qual é o próximo? Então, quando você está lendo através de - AUDIÊNCIA: HTML. JASON HIRSCHHORN: HTML é o próximo. Nós estamos indo para ir tag por tag. O que há depois de HTML? AUDIÊNCIA: Head. JASON HIRSCHHORN: Head. O que está atrás de cabeça? AUDIÊNCIA: Título. JASON HIRSCHHORN: Título. E título tem um valor de Google, mas eu não vou escrever que em por agora. OK, onde faz corpo ir? AUDIÊNCIA: Também saindo do HTML. JASON HIRSCHHORN: Exatamente. Corpo sai daqui. Será que todo mundo ver porque esse é o caso? Você provavelmente deve ser capaz de descobrir isso, também, mesmo que eu não tinha este recuo agradável. O recuo tipo de dá-lo afastado, mas você pode ver que a tag cabeça tem foi fechado, o que significa que, provavelmente, não pode ir por aqui. Precisamos voltar-se para o que Foi logo antes da cabeça tag, ou sob que. Estamos mesmo com a tag cabeça. E sob o corpo vai formulário. Sob forma, existem duas entradas. OK. Isso é tudo que eu tenho. Teste 1 é amanhã. Estou tão animado para vocês. Vai ser uma explosão. Se você tem - AUDIÊNCIA: [aplausos] JASON HIRSCHHORN: Oh pare, pare. Mas não, eu estou brincando. Se você tiver alguma dúvida, certo após a seção, eu vou estar fora. Se você tiver alguma dúvida, esta noite, não hesite em chamar, email, Gchat, transportadora me pombo. Boa sorte amanhã. Tenha um maravilhoso quebra de Ação de Graças, se eu não vê-lo antes disso. E eu vou te ver de Ação de Graças na terça-feira para o nosso último partido seção nunca. AUDIÊNCIA: [inaudível]. JASON HIRSCHHORN: Ótimo. OK, eu vou ver vocês na próxima semana, ou em duas semanas. E boa sorte amanhã.