[00:00:02] [Música tocando] HANNAH: Olá, todos. Obrigado a vocês por terem vindo para fora no tempo repugnante para um teste rever sessão. Como vocês sabem, quiz um é nesta quarta-feira. Então, nós estamos indo para ir através de um grupo de tópicos. DAVIN: Hey, eu posso dizer algo bem rápido? HANNAH: Sim, Davin está acontecendo dizer algo bem rápido. DAVIN: Desculpe. Apenas bem rápido, se você tiver dúvidas sobre o quiz, você pode ir online. Vá a 2014 questionário um, sobre o quiz. Ele tem cerca de logística onde ir, quando ir. Se você estiver inscrito simultaneamente, estamos vai ter um teste de maquiagem às 5:30. Ou se você me enviou um problema, você tem algum outro problema. Mas 5:30 é o make-up vez na quarta-feira. Mas se você tiver dúvidas, questões gerais, on-line tem toda a logística. Portanto, verifique lá primeiro. [00:00:47] HANNAH: Awesome. Então aqui está a grande lista de tópicos que nós vamos passar por hoje. Eu estou indo para cobrir todo o C material, que é a primeira coluna. Assim, o material C que nós abrangidos, após teste zero. Começando com uma lista ligada, que inclui ponteiros. [00:01:05] Tudo bem, então vimos este na última sessão de revisão, então eu vou passar por isso é um pouco mais rápido. Apenas levante a mão se você me quer retardar ou abordar algo mais. Mas usamos listas ligados, porque começamos em C com arrays. E matrizes são grandes, mas o problema é que eles têm um tamanho fixo. Listas ligadas nos permitem criar dimensionada dinamicamente estruturas de dados. [00:01:28] E temos as nossas operações básicas, inserir, excluir e pesquisar. E nós podemos fazer inserir em pior caso de tempo constante se nós apenas colocá-lo logo no início. Apagar e pesquisar, pior caso oh grande de tempo n. Então, novamente, apenas para virar através dessas imagens, Eu sei que nós vimos estes última vez, mas nós quer manter o controle de nossa lista ligada por manter o controle da chefe da nossa lista ligada. Porque nós sabemos que cada um dos seus nodos é só ir para apontar para o próximo nó na nossa lista ligada. [00:01:58] Então é assim que estamos a acompanhar. Mesmo que estes não são peças contínuas de memória, nós podemos encontrá-los por apenas seguindo as setas diferentes. Aqui é a nossa estrutura para um nó de lista ligada. Vimos isso na última vez. Temos o nosso nó struct. E tem duas propriedades. Número um, o real valor que deseja armazenar. Neste caso, é um número inteiro. Poderia ser uma corda, que poderia ser um char, o que quiser. E então, temos que manter o controle de o próximo nó na nossa lista ligada. Então isso vai ser uma ponteiro para o próximo nó. Se você estava apenas fazendo pesquisa, como eu disse antes, você teria que seguir as suas flechas para baixo. Inserção, você iria manter o controle de onde o resto da sua lista é. E você quer redirecionar a cabeça para apontar para o nosso novo elemento, que neste caso é um, e, em seguida, um apontará para o restante da lista ligada. Então, novamente, eu sei que isso é um pouco bit de uma repetição do teste zero. Portanto, temos que ter muito cuidado sobre a ordem em que fazer essas pointings portanto, não fazer perder o controle de parte de trás da lista. OK, as perguntas com apenas vinculada isoladamente listas? Awesome, OK, legal. [00:03:06] Então, agora, nós estamos indo para ir para algo apenas ligeiramente mais complicado, duplamente ligada listas. Assim, além de manter faixa do próximo nó, também queremos manter o controle do nó anterior. E isso permite-nos, se estamos em algum momento da nossa lista ligada, não só ir para a frente, mas também iteração para trás. Porque, como vimos no uma lista vinculada isoladamente, se estivéssemos em algum nó, e de repente, decidimos, na verdade, eu quero ir para a o direito nó antes de mim, você teria que ir com tudo o caminho de volta para a cabeça e iterar até que encontrou o nó que você estava procurando. [00:03:35] Então, isso faz com que as coisas um pouco mais fácil, pois estamos tentando fazer uma iteração através da nossa lista ligada. Mas isso obriga-nos a manter o controle de um mais ponteiro, por isso mais uma estrela nó. Tudo bem, então aqui vem a parte divertida. Nós estamos indo para a prática de execução remover para listas duplamente ligadas. Então, isso é algo que é jogo totalmente justo para o quiz. Ele mostrou-se em questionários passados. Então, definitivamente ser preparado codificar um pouco em C. Não se esqueça que, com toda este divertido PHP e JavaScript, ainda temos que lembrar fazer C. Então retocar em que Se você está se sentindo enferrujado. [00:04:12] Tudo bem, vamos ver se podemos fazer isso. OK, legal. Então, nós estamos indo para tentar para editar bem aqui, e espero que isto acontece como planejado. Tudo bem, alguém quer me dar uma sugestão de como devo começar? A única hipótese que eu sou tomada é que eu já ter uma estrutura definida, o um mostrei na última página, no último slide. E eu estou armazenando a cabeça do meu ligados lista em algum ponteiro lista chamada. Alguém quer me começou? [00:04:42] AUDIÊNCIA: Você pode criar uma nova nó para chamar a lista? [00:04:45] HANNAH: Awesome, de modo vamos criar um novo nó para rastejar através da lista. Eu gosto disso. Eu vou chamá-lo de ponteiro se está tudo OK. E onde deveria inicialmente começar? [00:04:57] AUDIÊNCIA: Provavelmente em o cabeça da lista. HANNAH: Beautiful. Queremos começar na cabeça, o que Eu disse que vai ser armazenada em lista. Impressionante. Por enquanto, tudo bem. E agora, nosso objetivo é percorrer a lista até encontrar o nó com valor n que deseja excluir. OK? [00:05:13] Então agora é a parte onde queremos para percorrer. Alguém pode sugerir uma caminho para percorrer? [00:05:19] AUDIÊNCIA: Um loop. [00:05:20] HANNAH: Um loop. Eu amo isso. Especificamente, podemos tentar um loop while. OK, e nós sabemos que chegamos o fim da nossa lista quando o quê? AUDIÊNCIA: Quando o ponteiro é nulo. HANNAH: Quando o ponteiro é nulo. Bonita, eu adoro isso. OK, legal. Então, desculpe se o meu delimitadora brace é tipo de cair fora da tela. Nós trouxemos de volta. OK, legal. Qual é o próximo? [00:05:48] Então, nós sabemos que deseja excluir o nó que tem valor n. Então, vamos descobrir o que acontece quando nós, na verdade, encontrar o nosso nó. Então, como é que eu iria verificar isso? Eu tinha acabado de dizer se ponteiro, e, em seguida, se eu deseja obter o valor de ponteiro, Eu só arrow n, é igual a n, o parâmetro que demos para esta função, o nó que queremos realmente excluir. Qualquer dúvida até aqui? Tudo certo. OK, então agora vamos tirar uma foto rápida no conselho, a fim de visualizar isso. [00:06:24] Então, digamos que há a nossa linda nó. E isso tem um valor, vou apenas dizer quatro. E aponta para o próximo nó na nossa lista ligada. E não há nada antes dele. Portanto, temos a nossa anterior apontando para nada. Neste caso, apontamos para trás. OK, apenas a criação de meu lista ligada por aqui. E nós temos uma lista que aponta a esta estrutura, para começar. Eu vou chamar mais um para ser exaustivo. OK. Eu vou indicar isso adiante. E eu vou apontar que uma volta. Ops, desculpe. Sim, tenho essa para trás. Fazê-lo novamente. OK, lá vamos nós. Tudo bem, entendi. OK, aqui está a nossa imagem. [00:07:21] OK, por isso queremos considerar dois casos. O primeiro caso é se o nó que deseja excluir é logo no início da nossa lista. E, em seguida, o segundo caso que queremos a considerar é se é em qualquer outro lugar. Eu entendo que isso um totalmente bagunçado desenho com todo o meu apagamento, mas espero que nós vamos tentar deixar isso claro com algum código. [00:07:40] OK, então vamos cobrir o caso onde encontramos o nosso nó, e é no próprio início da nossa lista ligada. Alguém me dar um sugestão quanto ao que aqui Que devo fazer para realmente remover o nosso nó? É um pouco complicado. OK? [00:07:56] AUDIÊNCIA: Você tem que ter o nó que seria antes de e torná-lo apontar para o aquele que seria depois, e tirar o nó que seria após lo e torná- -lo apontar para o nó antes dele. HANNAH: Exatamente. OK, então este é o caso where-- temos dois casos. Temos o caso em que o nó que estamos procurando é a frente da lista. OK, e em seguida, o caso que você descrito é de outra maneira, certo? É em outro lugar na lista. Então você disse, precisamos olhar para o nó anterior, e fazer o nó anterior aponta para o próximo nó. Então, vamos dizer que estamos tentando tirar cinco no meu desenho muito bagunçado aqui. Nós queremos ter certeza de que quatro agora aponta para seis. Quatro é o próximo a seis pontos. E seis de pontos anteriores a quatro. Esse é o nosso objetivo aqui, certo? Isto é o que eu acho que você apenas disse ali. [00:08:56] OK, então vamos começar o primeiro pedaço. Vamos fazer a ter a ponteiro anterior anterior. Então, quatro do próximo deve apontar para o que? Precisamente, neste caso, seis. Assim, devemos dizer ponteiro, em seguida. OK? Tudo certo. Então, vamos nos livrar da imagem feia e tentar tirar um pouco Buscamos um. Nós temos nossa cabeça lista aqui. E que aponta para o primeiro nó nossa lista ligada, o que dissemos é quatro. Aqui está o nosso segundo nó, cinco. E o nosso terceiro nó, seis. Apenas tentando desenhar exatamente o mesmo imagem, apenas um pouco mais limpa. OK, portanto, quatro do próximo originalmente aponta para cinco. Cinco da próximos pontos a seis. Seis de pontos anteriores a cinco. E cinco de pontos anteriores a quatro. Muito mais bonitos! OK, legal. [00:10:04] Então, agora, o que nós fizemos apenas aqui, esta linha de código, que diz ponteiro anterior ao lado, então o que é que isso significa? Isso significa que se nós estamos olhando para cinco, ir para o nó anterior, e é próximo deve agora aponte para cinco do próximo. Então, basicamente, o que é isso que faz é que está apagando esta seta e torná-lo pular sobre cinco. Está claro? Eu sei que pode ser um pouco esboçado. Vejo alguns acenos de cabeça. Isso é bom. OK, legal. Agora, qual é o próximo passo? [00:10:39] Eu redefinir o próximo. Agora, o que a outra seta eu preciso mudar? Este aqui. Seis da anterior. Nós não queremos seis do anterior para apontar para mais de cinco. Queremos que ele aponta para quatro. Será que a imagem faz sentido? Então agora podemos realmente ter cinco. Então, vamos começar essa parte. O que devo fazer antes de eu redefinir seis do anterior para quatro? Todas as idéias lá? [00:11:14] AUDIÊNCIA: Liberte o nó entre -los, definindo-o como nulo? HANNAH: Cool. Definitivamente, nosso objetivo final é vai ser para libertar o nó. Assim, podemos fazer isso aqui mesmo. Ponteiro gratuito. Absolutamente. Mas, mesmo antes disso, vamos só-- nosso direito objetivo aqui é definir ponteiro próximo anterior igual ao ponteiro anterior. Eu sei que isto está a ficar encoberto. OK, vamos take-- legal. Todos podem ver esta linha de fundo? Ou é super pequena? [00:11:50] Então, antes de executar esta linha aqui, queremos para se certificar de que ponteiro próximo não é nulo. Porque se ponteiro próximo é null, que tipo de erro vou receber quando eu tento referência a um ponteiro nulo? AUDIÊNCIA: Seg culpa. HANNAH: uma falha seg, bonito. OK, então, se isso não é null, então nós podemos repor. E nós temos seis pontos novamente para quatro. Perguntas até este ponto? Sim? [00:12:17] AUDIÊNCIA: Em sua primeira if, não é significa ter a seta seguinte, ou [inaudível]? HANNAH: Eu quis dizer seta ponteiro n. Então, basicamente, o que eu estou tentando fazer é dizer, o nó atual que eu sou iteração sobre, o nó atual que Eu estou olhando, estou armazenando no ponteiro. E eu quero saber ponteiro do valor, que neste caso é o n. E eu quero ver, é o nó que eu estou procurando para o nó que eu estou com o objetivo de excluir? Então é por isso que temos aqui ponteiro n. [00:12:47] AUDIÊNCIA: Então, a seta que vai para n, você define o valor e armazená-lo em um nó chamado n? [00:12:55] HANNAH: Então, é como se eu sou passando por essa lista ligada e apontando para cinco. Se eu quiser obter esse valor, se Quero obter esse número, 5, Eu tenho que fazer ponteiro de seta n. Legal? Sim. [00:13:07] AUDIÊNCIA: é N o nome da variável? HANNAH: Sim. Então, se nós virar para trás um deslizante, n é o nome do valor dentro do nó na nossa lista ligada. E eu sei que ele pode ficar um pouco pouco confuso porque nós também estão chamando a coisa que queremos excluir n. Então é aí que uma linha vem. Sim? [00:13:27] AUDIÊNCIA: O que você tem [Inaudível] como eles funcionam? Um ponteiro [inaudível]? [00:13:35] HANNAH: Claro. Você está falando que about-- line? AUDIÊNCIA: A última linha [inaudível]. [00:13:44] HANNAH: Claro, OK. Então, vamos olhar para a imagem em Para tentar explicar isso. Sinto muito, para o câmera, a questão era podemos explicar ponteiro ponteiro de seta próximo anterior. OK, então vamos dizer que estamos em cinco e nosso objetivo é excluir cinco. Então ponteiro seguinte, qual destes três nós que isso nos dá? Isso nos leva ao sexto nó, certo? [00:14:10] OK, então agora nós estamos pedindo para a seis do anterior. OK? E nós estamos redefinindo esta ser igual a quatro, que passou a ser de cinco da anterior. Eu sei, é super difícil de acompanhar. Eu realmente recomendo que você tirar fotos se você receber uma pergunta como esta. Sim? [00:14:30] AUDIÊNCIA: É a razão que não temos um [inaudível]? [00:14:37] HANNAH: Exatamente. Então, a pergunta era: por que fazer não precisa verificar aqui? Por que não temos de verificar que ponteiro anterior não é igual a nulo? E é porque nós temos já separados o caso se do ponteiro logo no início. Muito boa pergunta. Mais alguma coisa sobre isso? OK, legal. Então, vamos terminá-la. Estamos quase lá. [00:14:59] Então, o que se está na cabeça? E se em vez de tentando excluir cinco, nós realmente queria excluir quatro? O que eu tenho que fazer? Bem, eu quero redefinir minha cabeça para o quê? Grito ele para fora? AUDIÊNCIA: A um depois. HANNAH: Beautiful. OK, por isso queremos listar estar apontando a tudo o que o nosso ponteiro próximo nó é. Bom. E apenas para a integralidade da sake, faríamos querer verificar que, enquanto nossa lista não é nulo, desde que nossa lista não é vazio, então nós queremos definir nossa anterior igual a null. Pergunta até agora? A um passo de--? [00:15:53] AUDIÊNCIA: seria se lista não é igual a nulo? [00:15:55] HANNAH: Sim, você está totalmente certo. Eu sinto muito. É lista não é igual a nulo. Impressionante. Tentando trazer tudo isso na tela. É uma espécie de cair. Desculpe, pessoal. E por último mas não menos importante, todos que temos a fazer é retorno. OK. Isso era muito abarrotado em muito rapidamente. Tome um segundo olhar sobre isso. Diga-me se você tiver quaisquer perguntas. Sim? [00:16:20] AUDIÊNCIA: Se a lista está no cabeça, entăo-- esperar, deixa pra lá. [00:16:26] HANNAH: OK, bom. Então, isso é se a lista está na cabeça, nós removê-lo para o que quer que nós inserido. Sim? [00:16:31] AUDIÊNCIA: Você pode explicar a primeira declaração se novamente? Se o ponteiro de n é igual a n? HANNAH: Claro. Assim, nosso objetivo dessa função toda é para excluir o nó que tem valor n. Então, se nós encontrarmos, como estamos iteração através de nossa lista, o nó com valor n, que é aquele que deseja excluir. Então, tudo o apagamento acontece dentro desse grande se comunicado. Será que isso faz sentido? Com estilo. Sim? [00:16:59] AUDIÊNCIA: Talvez você só não pode ver -lo, mas você também não precisa de uma linha para percorrer a lista? HANNAH: Awesome. Vamos trazer isso um pouco, e vamos jogar esse direito na parte inferior. Talvez o conselho teria sido uma idéia um pouco melhor. Então, como é que eu iria mover ponteiro para a frente? [00:17:17] AUDIÊNCIA: Pointer é igual a mais um ponteiro. [00:17:20] HANNAH: Beautiful. Assim que nos permite continuar a iteração através. OK. AUDIÊNCIA: Não haveria uma pessoa? HANNAH: mais uma vez? AUDIÊNCIA: Não haveria uma outra pessoa depois da grande e velho se declaração [inaudível]? HANNAH: Qual parte? Sinto muito. [00:17:38] AUDIÊNCIA: A travessia, não deve haver uma pessoa? HANNAH: Você absolutamente poderia ter um outro lugar. Porque eu tenho o direito de retorno lá, você não precisa de uma outra pessoa. Mas sim, boa pergunta. OK, não é? AUDIÊNCIA: Podemos pensar de ponteiro que está se movendo através da lista como tomar sobre o valor de cada nó na lista? Ou devemos pensar nele como tipo de externo à lista? [00:18:00] HANNAH: Qualquer um dos dois é bom, eu acho. A forma como eu imagino que é Eu digo: OK, estou ponteiro. E isso é comigo. Esta é a minha mão. Eu estou indo para apontar para o diferente coisas que eu quero para percorrer. Em primeiro lugar, eu vou apontar à cabeça da lista. E isso me diz que eu sou indo para apontar para quatro. E assim me, sendo externo à lista, Eu pode apontar para cada um desses elementos. Então, eu penso em mim como ponteiro. AUDIÊNCIA: Então, quando você excluir um desses elementos, você excluir-se, por assim dizer. HANNAH: Exatamente. Então você excluir a coisa você está apontando. Assim, no exemplo que vimos onde estamos tentando excluir cinco, quando eu estou apontando para cinco, Eu quero excluir o coisa que eu estou apontando. Exatamente. Sim? AUDIÊNCIA: tomamos cuidado do caso em que n não está na lista? HANNAH: Se n não está na lista? Tudo o que vai acontecer é que você está indo para percorrer e iterate através de e, em seguida, você vai para chegar ao ponteiro sendo nula, e, em seguida, você vai ser feito. [00:18:48] AUDIÊNCIA: Então nós temos para retornar alguma coisa? HANNAH: podíamos. A maneira que se definiu este função, eu apenas dizer que ele retorna invalidar independentemente. Mas você poderia ter algo como voltar para um número inteiro, e tê-lo retornar 1 negativo se ele falhar. Algo assim. Perguntas com-- sim? AUDIÊNCIA: [inaudível]? HANNAH: Desculpe? AUDIÊNCIA: [inaudível]? HANNAH: Claro. Então essa é a actual-- Assim que tivermos feito todo este trabalho de mover todas estas setas ao redor, todo o nosso objetivo era livrar-se do nó que estamos procurando. Portanto, neste caso, liberando ponteiro, se eu estou apontando para cinco, é como apagar esse nó meio. Essa é a parte ponteiro livre. Isso faz sentido? [00:19:29] AUDIÊNCIA: Então mesmo pensamento você fez não [inaudível]? [00:19:31] HANNAH: Então nós assumido no início tivemos alguma lista que foi já-- eles tinham colocar isso junto. Portanto, a fim de construir esta lista, eles devem ter [inaudível]. Com estilo. Mais alguma coisa com isso? Sim? [00:19:46] AUDIÊNCIA: E se a lista não é igual a linha null? [Inaudível]? HANNAH: Bem aqui? AUDIÊNCIA: Yeah. HANNAH: OK, tudo o que eu estou fazendo é que eu estou apenas certificando-se que antes de eu tentar lista desreferenciava, antes de eu tentar acessar o anterior, Eu quero ter certeza de que não é nula, então eu não receber uma falha seg. Com estilo. [00:20:08] OK, eu sei que isto foi bastante muito para passar. Então este slide será disponibilizado para você. Assim, você pode passar por isso com mais detalhe. Sim? [00:20:17] AUDIÊNCIA: Por que a lista [inaudível]? HANNAH: Claro. Então lista realmente aponta para esse elemento aqui, o primeiro elemento na lista. Portanto, não pode ter um anterior. Sim? [00:20:31] AUDIÊNCIA: Será que o ponto de ponteiro para o mesmo endereço na memória? Será que apontam para o mesmo endereço na memória como o nó que ele está apontando para? [00:20:40] HANNAH: Sim, ele aponta a este nó na memória. [00:20:43] AUDIÊNCIA: Certo, então quando você [inaudível]? [00:20:47] HANNAH: Em certo sentido, sim. OK. Tudo bem, vamos passar junto com este. E se você tiver mais dúvidas, ficar por aqui no final, e nós podemos passar por isso novamente. OK, legal. Agora, temos de seguir em frente hash tabelas, tentativas, e árvores, o que você tem super- familiarizados com in-p definir cinco, Speller. [00:21:04] Então tabela hash é apenas um matriz com listas individualmente ligados ou duplamente ligada listas que saem dela. Então nós temos algum tipo de matriz associativa. E como sabemos qual delas matrizes baldes para entrar, usamos uma função hash. Portanto, neste caso, alguém pode adivinhar o que a função hash seriam apenas com base em alguns de entrada e de saída? [00:21:31] AUDIÊNCIA: número letra do alfabeto. HANNAH: Exatamente. Ele só coloca-los em ordem alfabética. Tudo que começa com um Um é colocado no primeiro recipiente. Tudo com um B é colocado no segundo balde, assim por diante, e assim por diante. Awesome, OK. E é uma função hash qualquer função que leva em uma palavra e vai dizer o que caçamba pertence in. Assim que a entrada em nossa matriz que pertence. [00:21:55] Então, toda vez que eu dou a minha hash de funcionar uma palavra, ele deve dizer-me o mesmo coloque a cada momento. Então, se nós usamos a função hash a partir do slide anterior onde estamos a ordenação pelo primeira letra do alfabeto, toda vez que eu dou a minha função hash "maçã" ele deve sempre dar-me de volta 0. Então, se eu tenho uma maçã para colocar no meu tabela hash, se eu der "maçã" na minha função hash, ele deve dizer, vai colocá-lo no balde 0. Se eu estou procurando uma maçã na minha tabela hash e eu digo, onde forças de maçã ao vivo, você pergunta a função hash. E diz, vá para o balde 0. Tudo certo? Perguntas com funções hash? Impressionante. [00:22:34] Aqui é um pouco mais explicação detalhada do que uma função hash pode parecer. Tudo certo. Agora, o problema com haxixe funções é em um mundo ideal, só teríamos um coisa em cada balde. Mas, na realidade, não há não apenas uma palavra que começa com A. Não há apenas uma palavra que começa com B. Então, neste caso, se de repente ficar "berry", e queremos colocá-lo em nossa tabela hash, e vemos, oh, não, banana é já está lá, o que vamos fazer? [00:23:03] Bem, nós temos duas opções. A primeira opção é linear de sondagem, que significa apenas que vão encontrar o recipiente vazio seguinte. Vá encontrar a próxima entrada matriz vazia. E só colocar "berry" ali. Então eu sei que é suposto ir com banana no balde um. Mas basta colocá-lo no balde três, porque três balde está vazio. Outra opção é provavelmente o que você implementar em sua p-set, onde você teve encadeamento separado. Assim, cada um de seus baldes, cada um dos seus elementos da matriz, não só mantém uma palavras, mas, na verdade, contém um ponteiro para uma lista de palavras. Assim que se você tivesse banana em seu tabela hash e de repente você queria adicionar berry, não há problema. Basta adicionar berry até o fim, ou para o início, da sua lista encadeada. OK, impressionante. Perguntas com haxixe tabelas antes de ir em frente? [00:23:58] Tudo certo. As árvores e as tentativas. OK, então isso foi uma outra opção para a implementação de dicionário. Você poderia ter feito uma tentativa. Portanto, é um tipo especial de árvore que comporta-se como uma tabela hash multi-nível. Então, você vai ver a foto onde você tem uma matriz que aponta para um grupo de matrizes que apontam para um grupo de matrizes que apontam para um grupo de arrays. E vamos ver exatamente o que ficaria em um futuro slide. E de modo mais geral, uma árvore é qualquer estrutura de dados no qual os dados organizadas em alguns hierarquia. Então, onde vimos que temos algum tipo de entendimento de um nível superior, um nível próximo, um próximo nível, um nível seguinte. Portanto, este é provavelmente o mais claro com alguns exemplos específicos. Então aqui está a nossa árvore. Você pode ver que ele tem determinados níveis que começamos com esse nó raiz, um. E nós podemos ir para baixo através de nossa árvore. [00:24:50] Uma árvore binária é um determinado tipo de árvore. E a única especificação para uma árvore binária é que cada nó possui no máximo duas folhas. Então você não vai ver nenhuma destes nós tem três ou quatro ou algum outro número de folhas. E, em seguida, ainda mais específico é uma árvore de busca binária onde cada nó à esquerda do nó vai ter um valor menor. E cada valor para a direito vai ser maior. Então, se você ver 44 é a nossa raiz, para a esquerda, 11, 22, e 33 são tudo menos do que a nossa raiz. E à direita são todos bigger-- números 66, 55 e 77. E esta propriedade é válido em todos os níveis da árvore. [00:25:37] Por isso, quando descemos a 22, 11 e 33, ainda 11 é menor do que 22 e 33 é maior do que 22. E isso faz com que seja mais fácil a busca porque se nós estamos olhando para um número, nós sabemos exatamente o que ramo de seguir para baixo. Portanto, este deve lembrá-lo um pouco de busca binária. Sim? [00:25:56] AUDIÊNCIA: Então, quando você está descrevendo binário, você disse que tem no máximo duas folhas? HANNAH: Hum-hum. AUDIÊNCIA: Poderia ter menos? HANNAH: Yeah. Então, vamos dizer, por exemplo, você não têm um número par de coisas e você não poderia encher todo o seu folhas, é bom quando se tem um. OK? Impressionante. Quaisquer outras perguntas sobre as árvores? OK. [00:26:16] Voltar para nossas tentativas como eu estava falando cerca de um pouco mais cedo, como nós temos essas matrizes multi-nível. Portanto, neste caso, nós começamos no topo. E nós pode seguir qualquer palavra para baixo. Então, vamos dizer que queríamos procurar Turing. Começamos em T, siga-o para baixo para uma matriz que contém U, e segui-lo para baixo, até que chegar a este pequeno delta que diz-nos, sim, você encontrou uma palavra. Limpar em tentativas? Qualquer coisa de ir até lá? Sim? AUDIÊNCIA: Será que o símbolo do delta tem que ocupar o espaço dentro do try? HANNAH: Sim, por isso não faz necessariamente precisa nem ser um delta. Mas precisamos de alguma forma para dizer o nosso Computador-- sorry, para que possamos saber que TUR não é uma palavra. Porque vamos dizer que não tem este conceito de um delta, este conceito de parabéns, você encontrou uma palavra, ele iria passar e interagir T-U-R, e, em seguida, dizer, impressionante, eu achei! Deve ser uma palavra. Mas na verdade não é. Queremos todo Turing ser uma palavra. Portanto, temos de ter algo no final que diz, parabéns, você encontrou uma palavra legítima. AUDIÊNCIA: Então se você tivesse como 26 letras no alfabeto, se você realmente tem 27 chaves em sua tentativa? [00:27:24] HANNAH: Awesome, sim. Então, na verdade, eu acho que será no próximo slide. Ta-da! Sempre que se você tem um nó em sua tentativa, você é vai ter 27 crianças, em vez de 26. Qualquer dúvida com isso? Sim? AUDIÊNCIA: Por que você tenta pegar tão muito espaço [inaudível] como você vai? Por que é considerado [inaudível]? HANNAH: Claro. Vamos voltar. A questão é, por que são tentativas muito maior do que algo como uma tabela hash. Assim, para cada um destes níveis, mesmo que eles não são atraídos aqui, você tem que ter todos os 26 caracteres. E a razão que você não pode digo, oh, mas como para Turing, I Não precisa ter nenhum daqueles mesmas coisas sobre o nível de U. Bem, Se de repente você quiser adicionar algo que era como T-H, você precisa ter a capacidade de adicionar essa palavra. Assim, para cada única letra, você vai ter para ter um monte de matrizes que saem dela. Assim, você pode ver como ele ia ficar realmente grande, muito rápido. Alguma outra pergunta? Tudo certo. Sim? [00:28:29] AUDIÊNCIA: Quando são tentativas mais rápido do que tabelas de hash? [00:28:33] HANNAH: Quando são tentativas mais rápido do que tabelas de hash? Então, se você teve realmente um função hash ruim. Então, digamos que eu era como, aqui está a sua função hash. Não importa o que a palavra você me dá, eu estou sempre vai colocá-lo em ordem de entrada 0. E assim vamos acabar com apenas colocando tudo em uma longa lista ligada grande. E assim um tempo de pesquisa levaria pelo pior n se é no final de nossa lista. Com a tentativa, só temos de fazer uma iteração através das letras da palavra. Assim, mesmo que nós adicionamos um monte Mais palavras para nossa tentativa, não nos levaria mais tempo para encontrar uma determinada palavra. [00:29:09] Tudo o que temos a fazer é, por exemplo, neste caso, vamos dizer que estamos à procura de zoom, nós apenas temos que interagir sobre Z-O-O-H, quatro cartas. Então, isso é apenas o comprimento da palavra de zoom. Não importa quantas mais palavras que colocamos nesta tentativa. Nós sempre pode obtê-lo nesses quatro passos. Impressionante. Sim? [00:29:32] AUDIÊNCIA: Então [inaudível] é uma matriz, certo? [00:29:34] HANNAH: Hum-hum. Audiência: Se você é procurando [inaudível], você teria que passar por sua matriz para encontrar [inaudível]? HANNAH: Claro. AUDIÊNCIA: Não que levam mais tempo? HANNAH: Se eu vou dizer que a minha matriz é sempre vai ser A, B, C, D, E, F, G, blá, blá, blá, por isso, se eu sempre sei que é na mesma ordem, se eu sempre sei que é em ordem alfabética, Posso apenas dizer que é O número assim e assim no alfabeto. Basta saltar para aquele lugar. Porque lembre-se, com matrizes, podemos acessar qualquer elemento dessa matriz em constante tempo, se sabemos para onde estamos olhando. Sim? [00:30:09] AUDIÊNCIA: No anterior deslize [inaudível] 27, 26, mas para o primeiro. [00:30:14] HANNAH: Desculpe? [00:30:15] AUDIÊNCIA: Não é a primeira um 0, portanto, não seria 26? [00:30:18] HANNAH: Claro, por isso, quando dizemos 27, isso é vai dar-nos índices de 0 a 26. Mas se você realmente contar os para fora, ele vai ser 27. Boa pergunta. Algo mais? Sim? [00:30:31] AUDIÊNCIA: Então são tentativas mais lento do que tabelas de hash? [00:30:34] HANNAH: Tries vão ser, em teoria, mais rápido do que tabelas de hash mas ocupam mais memória. Sim? AUDIÊNCIA: [inaudível]? [00:30:45] HANNAH: Me desculpe, eu não ouvi-lo. AUDIÊNCIA: [inaudível]. 0-25 dá-lhe 26. [00:30:54] HANNAH: 0-25 faria dar-lhe 26, à direita. [00:30:56] AUDIÊNCIA: E então [inaudível]. HANNAH: Certo. Portanto, o número estamos especificando é o número de coisas em nossa matriz. Então, se temos 27, é vai nos dar 0 a 26, o que dará quarto-nos para, neste caso, Eu não estou incluindo um apóstrofo. Então, nós estamos recebendo de 0 a 25 anos são as primeiras 26 letras do alfabeto, ou todas as 26 letras do alfabeto. E, em seguida, que a última coisa, no início do 26, é vai ser o cheque sinal, ou o delta. Algo mais? Impressionante. Perdi meu espaço. OK, legal. [00:31:31] Então, nós já tocou em cima deste. Mas a grande trade off entre tentativas e tabelas de hash é que tenta prever, em teoria, constante olhar para cima vezes, mas usar um monte de memória. Tudo bem, agora nós temos um pouco estruturas menos complicados, e vamos ser feito com C, e vamos passar o tempo todo. [00:31:49] Então, pilhas, vimos este em palestra onde você ter algo como um pilha de bandejas onde a última coisa que você colocar na pilha vai de ser a primeira coisa que você decolar. Então, isso é o que realmente define uma pilha é que a última coisa que você colocar na vai ser o primeiro coisa que você decolar. E a terminologia que usamos se nós vamos colocar alguma coisa, se nós estamos indo para adicionar algo a nossa stack, chamamos isso de empurrar. E se tomarmos alguma coisa off, chamamos isso de popping. E, se nós estamos indo para implementa um stack, nós precisa ter certeza de manter o controle de tanto o tamanho e a capacidade. Assim, o número total de elementos que pudermos segurar e o número atual de elementos que estamos a realizar. [00:32:27] E de forma muito semelhante, temos filas. E a única diferença é, em vez de com as pilhas, que disse que a última coisa que colocar em é a primeira coisa que tirar. Assim, com as filas, o primeira coisa que colocamos em vai ser o primeira coisa que tirar. Então, isso é como se você é realmente fazendo fila em uma loja e você está sendo ajudado, em seguida, a primeira pessoa na linha deve ser a primeira pessoa a ser ajudado. Então, isso seria uma fila. [00:32:52] Então, precisamos manter o controle da tamanho, capacidade e cabeça desde que nós somos vai levar todo mundo fora da parte dianteira da lista, em vez da parte de trás. Perguntas sobre isso? Qualquer dúvida C que estão incomodando? As estruturas de dados, nada disso se divertir? Tudo bem, legal. Então, eu vou entregá-la a Alison para saltar para mais alguma programação. [00:33:14] ALISON: Oh, vamos ver. Vamos ver o quão bem eu faço aqui. OK, eu vou tentar e voar através deste material, pessoal. Hannah correu muito em aprofundado sobre todas as suas coisas. Vou tentar dar -lhe uma visão rápida explosão para que possamos chegar a Davin com tudo a diversão JavaScript e segurança as coisas que talvez você realmente quero ouvir mais sobre. [00:33:33] OK, como disse Hannah, se Você tem dúvidas, Eu estou indo rápido demais, por favor, me avise. Vou responder perguntas, se necessário. Então, para começar, vamos começar com provavelmente uma das primeiras coisas você aprendeu com web programação, permissões. Então chmod, vocês deveriam ter sido mestres nisso com toda a web programação que você tem feito ultimamente. É basicamente apenas um comando que altera as permissões ou as permissões de acesso dos nossos objetos do sistema de arquivos. É claro que, para efectivamente vê isso, se você estiver tendo algum problema com estes durante seus conjuntos de problemas, você pode ter usado ls -l, que é longa, para obter o tipo de visão como esta, onde você realmente ver tudo as permissões para um arquivo. [00:34:16] E realmente, nós apenas estamos indo para ir através de muito rapidamente apenas bonita muito o que cada um deles significa. Então, temos que d aqui, que apenas significa o diretório. Obviamente, aqui, vemos rwx, que é legível, gravável e executável. Estes também podem ser representados como bits, que nós vamos entrar na página seguinte. Assim, cada tríade que vimos aqui, por isso é três tríades. Temos rwx, r nada x e r nada x para este primeiro arquivo. É esta estrutura geral. [00:34:49] Portanto, temos algum diretório. Temos algum grupo de usuários com essas permissões. Alguns grupo que tenha essas permissões, e um mundo que tem uma permissão. Você pode pensar nisso como uma tríade. Você pode pensar nisso como três bits. Assim, eles podem manter valores em qualquer lugar a partir de 0 até a 7, razão pela qual, por vezes, tivemos de fazer chmod 600 em vez de chmod rw o que quer. Nós vamos entrar em um exemplo lá. Mas, basicamente, você pode pensar destes como quer apenas rwx, ou você pode pensar neles como alguns número onde este primeiro aqui representa um número entre 0 e 7, esta segunda representa um número entre 0 e 7, e o terceiro representa um número entre 0 e 7, OK? [00:35:38] r tem um valor de 4. w tem um valor de 2, e x tem um valor de 1, o que é por isso que este permissão aqui seria chmod 700. Porque neste caso aqui, ele diz que ter o primeiro bit há acendeu. Portanto, temos 4 para leitura. O segundo bit é mudado por w, que é 2, então agora temos 6. E o terceiro bit é mudado em para x, que é 1, então temos sete. E, claro, o nosso grupo e nosso mundo são cada 0. Portanto, este é também o equivalente de chmod 700. E eu com certeza gostaria de tentar entender o mapeamento entre aqueles. Eu não tenho certeza se ele tem chegar em um questionário antes, mas seria um pergunta que eu poderia pedir. [00:36:18] Só um pouquinho vai mesmo ainda mais em chmod aqui, aqui é o muito geral estrutura de uma chamada de chmod. Então, é claro, temos chmod aqui. Referências, o que esta se refere é quem estamos dando a essas permissões para ou quem estamos tendo estes permissões de distância. Portanto, temos uma aqui nas permissões, como nós te dei chmod um plus x, como veremos em breve. um significa apenas dar a estes específico permissões para todos. Dê-lhes a todos. Então, você poderia muito bem ter mais u x ou mais x g ou mais x o ou múltipla da mesma. Assim que a primeira parte é sempre vai ser referências. Quem será que estamos dando essas permissões para, ou quem estamos levando-os longe de? [00:37:03] O segundo é o operador. Então, vocês têm em sua maioria tratou plus. Isto dá permissões para quem quer que você está dando-lhes, Considerando menos, logicamente, remove-los. Então, nada de muito terrível lá. E então os modos é o que falamos com leitura, escrita, ou de execução. Então, um plus x significa dar executável permissões para todos. E então, é claro, no qual arquivo ou diretório específico. OK? Todo mundo bom com chmod? Não é tão ruim? [00:37:37] OK, então HTML, qualquer um de vocês são idade suficiente a-- MySpace idade? Enviei esta a minha seção, e, literalmente, metade das pessoas olhou para mim como se eu fosse louco. E eu estava tipo, gente, nós não somos tão velho. Venha. Então HyperText Markup Language, é honestamente apenas um caminho para você para exibir certas coisas na web. Portanto, é uma linguagem de marcação. Não é uma linguagem de script. Não há lógica nisso. É simplesmente para mudar a forma como algo é apresentado. OK, então isso é um importante distinção a fazer. É considerada uma linguagem de marcação, não uma linguagem de script. [00:38:12] Então aqui nós temos as nossas tags HTML. Neste slide são, provavelmente, a maior parte do aquelas que você deve estar familiarizado com e ser muito confortável. Então, obviamente, temos nossa tag HTML, que designa que tudo na entre estes dois será HTML. Temos algum link, que obviamente, vai lhe dar um link para uma página web externa. Alguns título, dentro de nossa cabeça aqui. E nós temos o nosso corpo com h1, que é um cabeçalho, por isso vai torná-lo agradável e arrojado e maior. E então, nós temos algumas p, que é um número. Você provavelmente deve saber e estar familiarizado com as coisas como a forma como você inserir uma imagem, são Existem outras classes de cabeçalho? Eu seria definitivamente confortável com div. Assim, estes têm a maioria de tags que você deve estar familiarizado. Mas, claro, como em tudo na CS 50, a lista não é exaustiva. Então, certifique-se de escovar acima em que. [00:39:08] CSS, de modo CSS, se algum de vocês assistir meu seminário de duas semanas atrás, é realmente apenas uma maneira o estilo do seu página web? OK, então nós temos algumas linguagens de marcação. HTML, que cuida de apenas o texto e onde ele pode estar na página. Mas CSS é realmente o que o torna bastante. Você poderia ter estes em seu HTML arquivos, mas como vamos falar mais tarde, Eu tenho certeza que ele pode ser o próximo slide, ele É prática comum, e, na verdade, prática que realmente incentivar, para que você possa mantê-los separados quando nós falar sobre MVC e todo esse paradigma. Isso é realmente o que isso alimenta. [00:39:42] Então CSS é apenas uma maneira de fazer as coisas parecem muito. As coisas aqui, como corpo e #title e .info, estes são chamados seletores e que que eles fazem é selecionar coisas específicas dentro de seu arquivo HTML e aplicar qualquer estilo, qualquer outro tipo de coisas que você quer, a esse elemento específico do seu web página. Então, aqui, temos uma cor de fundo e uma cor e uma família de fontes que está sendo aplicado a tudo o que está no corpo. Então, se nós olhamos para trás aqui, não se aplicaria ao título. Ela só se aplicaria ao que é nestes seletores do corpo, OK? [00:40:22] Com o título aqui, este é vai ser a mesma coisa, a cor do texto sendo azul vai apenas para afectar o que está dentro os seletores de título. Bem como informações aqui, o texto será rosa, do que informação, que é aqui mesmo. Então a única coisa que seria rosa nesta página é hoje, segunda-feira, 17 novembro, 2014. OK, então CSS é apenas uma maneira de ter mais controle over-- sim? [00:40:48] AUDIÊNCIA: Por que você tem para usar o hash com o título? [00:40:51] HANNAH: Next slide, prometo! Nós vamos chegar lá. Então é por isso que temos que usar hash. Então seletores assumir três principais formas que falar com vocês sobre. I fyou quiser saber mais, há muito lá fora. Há uma grande documentação CSS. Há um nome tag, que tem a ver com apenas suas tags normais em HTML. Então h1, p, div, h2, esses tipos de coisas. E nós podemos apenas citar os como é. Então, como podemos ver aqui com corpo, é uma tag normal. Assim, podemos apenas colocar corpo quando estamos falando em nosso arquivo CSS. [00:41:26] Com título, toda a razão, ter esse hash é que temos o que é considerada uma ID. Assim, um ID deve ser sempre único dentro de sua página HTML de modo que quando você está referindo-se a ele, você sei que você está se referindo apenas para uma coisa específica. Portanto, neste caso aqui, com a nossa h1 aqui, CS 50 revisar sessão, temos um id título. Assim, para apenas referir-se a que pedaço de nossa HTML, fazemos um título hash. Apenas por convenção, IDs são designados com um hash na frente deles. Da mesma forma, vemos informações aqui é uma classe. E assim classe com CSS é designado como uma classe ponto dot ou seja lá o que é classe. Portanto, neste caso aqui, é info. [00:42:10] Então eu levá-la de volta. Ambos seriam rosa para o nosso CSS aqui porque ambos têm uma classe de info. E em nosso arquivo CSS, nós designamos que qualquer coisa com uma classe de Informação deve ser rosa. Isso faz sentido? Sim? [00:42:27] Audiência: Se você fosse fazer tudo no branco corpo, e, em seguida, você tenta fazer algo dentro dele azul, teria que causar problemas? [00:42:34] HANNAH: Então é CSS folhas de estilo em cascata. Então, tudo o que é em direção ao bottom terá precedência. Então, se você faz algo com o corpo, e você faz tudo branco, e depois, mais tarde, você alterar o título ou você mudar o texto dentro do corpo, ele substitui isso. Assim, qualquer coisa para a bottom terá precedência. Sim? [00:42:56] Audiência: e IDs são únicos, mas as aulas podem ser mais? HANNAH: Certo. Então IDs deve ser único, e as aulas podem referem-se a tantas coisas quanto você gostaria. Alguma outra pergunta? Sim. [00:43:09] AUDIÊNCIA: [inaudível]. Eu estou querendo saber se que faz a diferença. HANNAH: Eu sinto muito, qual foi a pergunta? AUDIÊNCIA: Há pequena "F" e de capital "F." HANNAH: Então a diferença entre as pequenas "f" e "F" não deve fazer a diferença. Assim, "f" será 15 de qualquer maneira. Cool, qualquer outra coisa? Todo mundo bom, CSS? Sim? [00:43:30] AUDIÊNCIA: Desculpe. Você pode ter uma classe e um ID? [00:43:35] HANNAH: Sim, você pode. As coisas podem ter tanto uma classe e um ID. E eu recomendo testar estes em seu próprio país. CSS você vai aprender melhor apenas fazendo algo, página web muito simples, elaboração de alguns CSS, e apenas vendo como eles interagem. E você vai ganhar um muito bom, senso intuitivo de como ele funciona. [00:43:56] OK, todo mundo bem com CSS? Você está tudo indo fazer belas sites com CSS agora. OK, melhores práticas, apenas coisas para manter em mente, coisas isso-- é por isso que atracar você para o designer e outros enfeites. Então feche todas as suas tags HTML. Então se você tem um corpo aberto, deve haver um corpo próximo. Se você tem um parágrafo aberto, deve haver um parágrafo perto. Verifique para ver sua página valida. Vocês devem estar muito familiarizado com isso a partir de-p definir sete CS com 50 finanças com o validador W3. E como eu disse antes, um dos nossos grandes paradigmas está separando seu estilo com CSS a partir de sua marcação, o que é HTML. E depois, claro, temos este grande XKCD aqui embaixo. Yay, alívio cômico! [00:44:38] OK, TCP / IP. Entre estes e HTTP, basicamente, eles são ambos os protocolos. Então, você poderia apenas pensar deles como um conjunto de regras que determinam como as coisas mover-se através da internet. Então, controle de transmissão protocolo, ou protocolo de internet, é apenas uma maneira de certificar-se de que os dados cheguem onde ele vai e que sabemos se estamos sempre a falta de dados. Então, se vocês pensam de volta para palestra um par de semanas atrás, com David onde tivemos quatro envelopes, eles foram todos contados como um dos quatro, dois de quatro, três de quatro, quatro dos quatro, este é apenas um conjunto de regras. Nós dissemos, OK, sempre que estamos enviar mais do que um pacote, vamos numerar com o que o número é e quantos total que o usuário deve obter. [00:45:19] E este é apenas dizer quem está a receber os dados, sejam eles ter começado tudo ou se algo se perdeu ao longo do caminho. E eles precisam perguntar para ele novamente. Isto é realmente apenas um conjunto de regras. É assim que você pode pensar nisso, OK? E também, ele especifica a porta, o que vocês can-- Sei durante palestra, eles tinham toda uma lista de portos. Mas nós não tê-los aqui agora. [00:45:41] Protocolo de transferência de hipertexto Então é, mais uma vez, é um outro protocolo. Portanto, é um outro conjunto de regras que governam, neste caso, como o hipertexto é transferido. Por isso, apenas permite aos navegadores para falar com servidores web. E, como dissemos aqui, é como aperto de mão humana. É apenas uma forma de governar como o servidor web é vai interagir com o seu navegador. E nós temos apenas um par de exemplos. Temos alguns pedidos aqui onde o método é GET. Temos HTTP 1.1, que é versão de protocolo para nós. E, em seguida, o anfitrião, que é o que na verdade estamos tentando acessar. E então, como você vê aqui, obter alguma resposta com este 200 OK como o nosso código de resposta HTTP. Temos uma lista grande que eu vou para puxar para cima em um segundo que vocês devem estar familiarizados com. E nós temos este tipo de conteúdo text / HTML, que apenas diz que tipo de dados estamos recebendo do servidor, OK? Este host e este tipo de conteúdo fazem parte dos cabeçalhos HTTP. Você pode ter como poucos ou tão pouco como necessárias para o contexto do que você está lidando. Às vezes, você vai ter um monte de informações provenientes de seu servidor. Talvez eles estão pedindo um monte de informações do usuário. Esta varia dependendo do contexto. Se você olhar para CS 50 Study, há muito mais sobre isso. Mas temos muito para chegar através, por isso eu vou para ir em frente se tudo bem com vocês? Com estilo. Aguente. Eu definitivamente tenho que lista inteira de-- huh! Eu não sei por que isso é todo o caminho até aqui. Eu pensei que eu, literalmente, mudou-se -lo enquanto eu estava sitting-- [00:47:15] DAVIN: Você quer ensiná-lo? Ou você quer que eu ensiná-lo? [00:47:17] AUDIÊNCIA: Eu pensei que pudéssemos apenas mostrar-lhes para começar. Quero dizer, você pode entrar em -los ainda mais, mas eu pensei que fazia mais sentido desde que eu estava apenas falando de status HTTP. Então aqui está a lista inteira. Acho que o que vai acontecer é Davin está indo para ir para eles mais tarde. Mas há toda uma lista, um pré-visualização do gosto de vir. OK, vamos blow-- isso vai para ser um curso intensivo PHP como nenhum outro. [00:47:41] Então PHP, pré-processador de hipertexto, é um backronym recursivo, o que significa que foi nomeado outra coisa. E então eles eram como, este não faz muito sentido. Então, eles só chamado ele-- e foi uma sigla, para que eles apenas fizeram PHP pré-processador de hipertexto, que apenas não faz sentido. História engraçada. É uma linguagem de programação. Assim, tanto quanto eu enfatizo que HTML não é uma linguagem de programação, é linguagem de marcação, um PHP é uma linguagem de programação. Como você sabe que este é porque não é lógica. Existem condicionais. Temos variáveis, enquanto nós ter nenhuma dessas coisas em HTML. [00:48:12] Tudo bem, então temos esta pequena bit aqui que é como o sabor do PHP. Assim básico, nomes de variáveis começar com um sinal de dólar. Muitas pessoas gostam. Lembra-nos dinheiro. Está tudo ótimo. Nós todos queremos PHP. Então, nós não especificar um tipo mais variável. Ele é determinado em tempo de execução. O intérprete como será, oh, vamos percorrer, e de acordo com o contexto, Vamos ver o que os tipos de tipos essas variáveis ​​precisa ter. Não há nenhuma função principal. As coisas simplesmente será executado. Vocês com a sua importação em seu última p definida, você vai perceber isso. Não houve realmente uma função principal. Você acabou de escrever o que você queria que acontecesse. E isso simplesmente aconteceu. Então, isso é PHP para você. [00:48:56] Arrays são muito semelhantes. Nós ainda temos esse suporte. Aqui, nós temos alguma variável arr chamado, e é igual a-- temos o nosso normal, notação suporte. E nós temos algum valor fundamental. E a grande diferença entre C e PHP matrizes é que nós podemos ter este associate-- podemos associar valores para chaves. Então, ao invés de ter apenas uma matriz que é indexado pelo número ou a posição desse elemento na matriz, nós realmente podemos associá-lo com uma chave. Onde podemos dizer, OK, eu quero o que quer valor é associado a fruta. E talvez nós temos fruta foi para a banana. Então ele iria retornar banana para nós. [00:49:41] Mas, basicamente, a mais coisa poderosa sobre esta é que, se vocês lembram o demo da palestra em que basicamente Speller reescreveu em PHP, e lookup foi-- foi realmente apenas gosta, é que esta chave existir? Isso é realmente uma espécie de o poder dele. Você não precisa fazer uma iteração através de sua matriz. Você não precisa saber o espaço é in. Pode ser no final ou no início. Contanto que você sabe a chave que está associado com o valor, PHP pode apenas cuspir esse valor de volta à direita para fora em você, OK? [00:50:09] E então, nós também só ter apenas porque nós pode ter pares de valores-chave não significa que você precisa. Você também pode simplesmente criar uma matriz normal como aqui, na parte inferior, onde está apenas um, dois, três, quatro. Esses são os nossos valores. E, de fato, as chaves são os índices. Portanto, a chave para um seria zero. A chave para dois seria um. Assim por diante e assim por diante, a menos que você atribuir explicitamente uma chave, você poderia supor que o valor é apenas seu índice. Isso faz sentido para todos? Não há perguntas? Impressionante. [00:50:38] OK, foreach é uma forma de iteração através de suas matrizes. Então nós temos alguma coisa aqui, apenas a estrutura geral. Então foreach, o nome de nossa matriz, como o que quer você quer chamar cada elemento em sua matriz, e nós podemos fazer alguma coisa com esse elemento ou com esse valor. Portanto, temos um exemplo aqui. Temos uma associativa matriz com estas duas entradas com bar sendo associado com foo e Qux sendo associado com Baz. Assim, as chaves são foo e baz. Os valores são bar e Qux. Então foreach, temos a nossa disposição aqui, como o par de valor de chave. Isso nos permite acesso tanto a chave e valor. Talvez você só quer o valor, em cujo caso você poderia apenas fazer como arr quanto $ valor, e então você são apenas acessar o valor da como você iterar. Mas talvez, para alguns razão, você quer a chave, é por isso que eu escolhi Neste exemplo, em vez. Então você pode realmente manipular chave e valor neste caso. OK? Pergunta? [00:51:41] Audiência: Se você quisesse apenas manipular a tecla, seria você tem que fazer foreach-- [00:51:45] ALISON: Certo. Então, se você queria manipular apenas a chave, você ainda precisa esta sintaxe, porque se você apenas ter arr como algo, como uma coisa, é indo supor que você quer o valor, não a chave. Então, se você já só tem apenas como arr como, talvez isso é como US $ elemento, ele vai assumir que você está pedindo para apenas o valor em cada ponto. Se você quiser explicitamente fazer algo com a chave, mesmo se você não está indo para fazer qualquer coisa com o valor, você precisa dessa estrutura que temos aqui onde você está pedindo explicitamente tanto para a chave e o valor. Ótima pergunta. Algo mais? Com estilo. [00:52:27] Tudo bem, PHP e HTML. Oh, estamos de volta para-p definir sete novamente. Portanto, este deve ser um pouco familiar. Portanto, esta é uma forma simples de HTML que tem algum nome da entrada de Olá. E vemos que temos o nosso método de GET. E se nos lembrarmos da nossa p-set, quando este formulário é enviado, ele envia um array chamado $ _GET que tem Todos esses insumos ou variáveis a forma que deve ser manipulado no nosso PHP. Portanto, neste caso, o usuário colocaria em seu nome. Eles apresentá-lo. E vemos que temos algum matriz aqui. Nós temos nossa matriz GET. E estamos acessando o nome. [00:53:11] Então, que diz: OK, dá-me a valor que está associado com o nome, nome sendo a chave aqui. E que mapeia diretamente para o Nós dissemos que nosso nome de entrada é. Portanto, este foi o que lhe dá a chave para o que está indo para a sua matriz aqui. Isso faz sentido para todos? Sim? [00:53:32] AUDIÊNCIA: Será que o nome em GET consulte para a linha roxa em [inaudível]? [00:53:36] ALISON: Refere-se a isso aqui. Portanto, este campo aqui mesmo, refere-se a este nome aqui. Portanto, este poderia ter sido nomeado como número de telefone, ou o que quer. Este nome, na verdade, diz, o que você está chamando neste campo? Como você está indo para referem-se a este campo? E esse nome é, na verdade, gosto, estamos dizendo que este campo é chamado de nome. É assim que nós estamos indo para acessá-lo. [00:53:59] AUDIÊNCIA: Assim é que gosta, nome de entrada é igual a Bob, e- [00:54:02] ALISON: Certo, então você obteria Bob lá em baixo. Exatamente. Todo mundo cool? Tudo bem, assim que começar contra o POST, estas são as duas principais formas que passar dados em uma solicitação HTTP. Vocês devem ter visto ambos estes esperançoso. Assim, com GET, as informações é passada através do URL. Então, se você nunca fazer Google buscas, YouTube, você vai provavelmente notar algum ponto de interrogação. E então, todas as palavras que você acabou de colocar lá. E POST passa os dados no corpo da mensagem HTTP. Portanto, ao contrário GET, você meio que considere que os dados são escondidos do usuário. Mas o que é realmente importante compreender é que este ainda é tão inseguro como GET. A analogia que eu gosto de usar é se você tem o seu número de conta bancária e você escrevê-lo do lado de fora um envelope, que é muito inseguro. Se você tivesse que escrever em um pedaço de papel e colocá-lo dentro do envelope, ainda é muito insegura porque tudo que você tem a fazer é abrir-se que e olhar para o conteúdo real da mensagem para ver isso. Portanto, este é "escondido", e as pessoas gostam de acho que é seguro, mas não é realmente. E eu tenho certeza que vai Davin entrar nisso mais, talvez. Mas é um importante distinção a fazer e algo realmente bom para entender. [00:55:15] OK, SQL, Structured Query Language. Todas as coisas que temos visto até recentemente! Então é basicamente projetado, obviamente, para o gerenciamento de dados. Vocês tiveram muita experiência com isso em suas tabelas com PHP MyAdmin. E há quatro consultas comuns que quero que vocês conhecem. Portanto, não há atualização, inserção selecionar e excluir. Portanto, verifique se você sabe quem realmente bem. Nós estamos indo para ir através deles muito rápido. [00:55:40] Então atualizar, realmente, como o que você poderia pensar que ele faz, ele apenas atualiza os dados em seu banco de dados. Portanto, temos alguns exemplos aqui. Este é o geral estrutura de uma consulta atualização. Por isso, atualizar a tabela que nós estamos falando. E nós queremos definir certo valores, determinadas colunas igual a valores específicos. Portanto, este apenas atualiza a tabela, mudando valores em todas as linhas no presente caso. Assim, em um presente para baixo aqui, um verdadeiro exemplo, temos insert-- desculpe. Esse slide avançado sem me dar conta. [00:56:17] Então esta tabela atualizações definir col1 igual para val1 onde a casa é igual a "Currier." O que isto se faz é só muda, ela só atualiza esses valores em lugares específicos. Assim, neste primeiro, ele muda estes valores para tudo em sua mesa, OK? Vai mudar isso coluna para cada entrada única, para cada linha. Mas este, onde, você poderia pense nisso como um qualificador. Por isso, só vai mudar -lo em lugares muito específicos. Assim, em-p definir sete, quando você talvez atualizou a quantidade de dinheiro que o usuário teve, você provavelmente teve alguns onde ID é igual a sessão ID, certo? [00:56:53] Porque você não quis alterar a quantidade de dinheiro para cada pessoa que estava usando o seu site. Você queria mudá-lo para um determinada pessoa, essa pessoa estar quem estava a usá-lo naquele momento. Certo? OK, então inserir, inserção certos valores em tabelas. Isto é como quando você está a criação de um novo usuário. A estrutura geral aqui se inserir em qualquer mesa estamos falando. Valores, sendo os valores que nós realmente deseja inserir. OK, assim como vemos aqui, nós ter inserir na tabela. Este é colunas específicas com os respectivos valores correspondiam. Portanto, este diz, insert uma nova linha contendo valores val1 e val2 sob estas colunas específicas. [00:57:33] Então, talvez você só quer encher a metade das coisas nesta linha. Isso é o que esta parte aqui permite que você faça. Ele permite que você realmente determinar qual parte. Sim? [00:57:44] AUDIÊNCIA: Você pode apenas [inaudível] células na linha [inaudível]? [00:57:52] ALISON: Se você só preencher certas partes de sua linha, o resto dessas células são apenas vazio. Contanto que você permitir que eles estar vazio, não é um problema. Se você tentar acessá-los, é vai voltar algum elemento vazio. Mas é importante saber que em certos quadros, Eles têm que ser autorizados a ser nulo. Você pode ter executado em um problema durante a sua p-set porque não deixar que qualquer de seus valores ser nulo. Mas você pode especificar um valor opcional em sua mesa. [00:58:26] OK, selecione, por isso esta é apenas uma maneira de começar dados específicos a partir de uma tabela na algum identificador que você deseja. Então, selecione Estrela mesa onde col é igual a algo apenas significa, dá-me todos os dados associados em que esta coluna específica é verdadeiro. Então, a estrela, neste caso, retornar a linha inteira para você, OK? [00:58:49] E então, nesse caso, selecione Estrela mesa apenas dá-lhe toda a tabela. E, em seguida, apagar, obviamente, ele só elimina a linha a partir da tabela. Então excluir da tabela, qualquer mesa que estamos referenciamento, onde alguns específicos identificador ou alguma condição for verdadeira. Sim? [00:59:07] AUDIÊNCIA: Pergunta. Por que você está usando duplo citações, e se você fazer aspas simples ou duplas citações, isso faz alguma diferença? [00:59:13] ALISON: As aspas duplas ou aspas simples não fazer a diferença no SQL. Eu pensei que eu vi uma outra pergunta. Sim? [00:59:20] AUDIÊNCIA: Não lhe afetar o que fica escapou da consulta? [00:59:25] ALISON: Rob? [00:59:27] ROB: O que você quer dizer com escapado da consulta? [00:59:31] AUDIÊNCIA: Se alguém tem uma consulta única na forma de-- [00:59:36] ROB: Se alguém colocar uma única citação em, então, enquanto você está saneantes sua entrada, então não importa. Mas se você estiver usando um único Citação e você está incorretamente escapando suas entradas, então sim, eles precisam para colocar uma única citação, a fim de quebrar seu código. se você usar aspas duplas, eles precisam colocar um duplo citar a quebrar seu código. Mas, enquanto você escapar coisas corretamente, isso não importa. É só passar a ser traduzido para o símbolo correto de qualquer maneira. [00:59:59] AUDIÊNCIA: O que significa fuga significa? ALISON: Bem, como saneantes e fuga. O exame que temos, o grande XKCD comic que puxar para cima, onde você tem, Oh-- ROB: É o último slide. ALISON: É o último slide, realmente? Meu Deus. Lá vamos nós, perfeito. OK, então, basicamente, você pode injetar algo para essa consulta SQL onde ele quebra o seu código, ou como David mostrou em sala de aula, se tivermos algum único Citação 1 é igual a 1 e se em nosso código, nós apenas copiar diretamente em que, e temos uma aspa única de fim, o que acontece é chegarmos que alguma expressão avalia a verdade que vai deixar alguém entrar na nossa base de dados e obter dados que não quer que eles fiquem. Então higienização das entradas significa apenas certificando-se que estamos escapando estes personagens e designando- como caracteres e não coisas que deve ser permitido deve ser tomada literalmente como a nossa instrução SQL. [01:01:04] Assim, a grande coisa que dissemos que vocês deveriam estar usando eram HTML caracteres especiais, que é algo que você pode querer dar uma olhada. OK, excluir. Os tipos de dados, tudo isso vai estar on-line. Uma vez que temos 15 minutos para a esquerda, eu sou só vai dar certo por isso. PHP e SQL, basicamente, este é apenas tivemos uma função de consulta que ajudou a proteger contra esses ataques maliciosos. Assim, sempre que você usa consulta, nós estávamos fazendo certo que as coisas foram higienizados e outros enfeites. [01:01:36] MVC é apenas um paradigma design, assim model, view, controller. É apenas uma maneira de manter as coisas agradável e dividido da mesma forma que temos a tendência de fator código em funções. Este é apenas um quadro de web design que permite que você faça a mesma coisa. Eu vou pular esta. [01:01:54] Isso é algo que eu Seria super confortável com. É uma grande mesa pouco ali. Dá-lhe a função de exemplo do modelo. Eu só estou passando por isso porque eu realmente quer Davin para ser capaz de falar. Se você tiver alguma dúvida, por favor, sinta-se livre. Eu vou estar aqui depois. Basta vir falar comigo. Com isso, temos um status HTTP. E Davin vai explodir através desta em 15 minutos. Isso vai ser ótimo. [01:02:17] DAVIN: OK. Uh, seu microfone? Sim. Desculpe. ALISON: Caminho para ser preparado. DAVIN: Não, eu estou pronto. Estou pronto. Vamos fazer isso. Ele está pronto. OK. Desculpe. Eu derramei café em mim mesmo. Eu não sei se eu sou mais chateado que eu parecer ridículo, ou que eu não tenho mais café. De qualquer forma, apenas um anúncio rápido sobre a folha de vocês têm. Portanto, esta folha de vocês têm não é o funcionário que está no quiz. Este é o oficial que está no quiz. Além disso, no site, nós dizemos você, OK, isso vai estar no quiz. Então, na pequena cábula você tem, não oficial. E há erros nele. Então, melhor não apenas usá-lo cegamente. Então, sim, é isso. Então, vamos entrar neste real rápido. [01:03:05] Assim status HTTP. Então o que acontece quando o website, está tudo bem. Está tudo OK. Tudo vem de volta para do jeito que você quer que seja. Você ganha um 200 OK. 301, onde vimos que 301 antes? Espere, o que está acontecendo? Desculpe. Vimos i palestra estanho durante segurança. Assim, durante segurança, por isso, se David digitou http e, em seguida, fechar um pacote cs50.net, você vai ver 301 movido. Por quê? Porque ele vai redirecionar você automaticamente para a nossa HTTPS. [01:03:35] Então 301 movido, apenas é basicamente um redirecionamento. E você pode pensar nisso como este. Qualquer um dos estados que começam com 2 do, aqueles são como, OK, está tudo OK. Qualquer um dos estados que começam com 3, esses são redirecionamento. Os status que começam com 4, o que significa há algum tipo de erro de cliente. Os status que começam com 5, isso é algum tipo de erro no servidor. Então você meio que quebrar os status assim. Então não 304 não modificado, portanto, em seu server.c p-sets, então vamos dizer que você cat.html carregado. Tudo vem de volta, você começa 200s, OK, ótimo. [01:04:03] Vamos dizer que você refrescou-lo. Bem, dentro desse cat.html, você tem um JPEG. Bem, isso não é JPEG vai ser recarregado. Você não está indo para postar outra Pedido GET para o servidor, e, em seguida, obter todas as informações de volta. Vai apenas ser-- essa imagem é vai ser armazenada em cache em sua máquina. E assim que a imagem será um 304. Por isso, não foi modificado. Se você, em seguida, fechar, claro cookies, e em seguida, atualize e tentar carregar a página mais uma vez, você vai ver 200s. Você não vai ver que 304. [01:04:28] 400, mau pedido, bens rápido como se você, estavam indo para enviar uma JSON objeto para o servidor e seu objeto JSON estava incorreta, você vai ver algo como isso. 403, proibido. Quando você ver um proibido? Provavelmente Provavelmente? AUDIÊNCIA: Chmod. DAVIN: Chmod, sim. Então você não tiver definido permissões corretamente. 404, não foi encontrado. É simplesmente não existe. Então, se você digitar a URL errada. 500, erro interno do servidor, o servidor provavelmente não foi configurado corretamente. Algo que não é do seu lado, mas algo no lado do servidor. E 503? Muita gente viu 503s no último p-set. Quando isso acontecer? Eu ouvi sussurros. [01:05:05] AUDIÊNCIA: Quando o Google decide você é um robô. DAVIN: Sim, quando o Google decide você é um robô, você começa 503s. Então, isso é uma sobrecarga. Se você tiver solicitado do servidor demais, geralmente é temporário. E a maioria de vocês perceberam. Então você viu 503. Você poderia ter tomado um pouco pausa, em seguida, os 503s foi embora, e tudo estava bem. [01:05:20] GABE: Real rápida, quando é que vocês se 500 em, provavelmente, este último conjunto de problemas? Sim? [01:05:27] AUDIÊNCIA: Normalmente, se o servidor tem um arquivo perdido ou [inaudível] sua máquina [inaudível]. [01:05:34] GABE: Portanto, pode ser uma configuração problema em seu PHP em seu servidor. Mas pode ser apenas algo como um ponto e vírgula que o esqueceu. Se você está digitando PHP, alguns sintaxe incorreta pode te deixar algo assim. OK? [01:05:46] DAVIN: Cool. Você quer que eu faça apenas até AJAX? [01:05:51] GABE: [inaudível]. DAVIN: OK. Então, qual é o DOM? O que o DOM representa? [01:05:55] AUDIÊNCIA: Document Object Model. DAVIN: Nice. E por que nós gostamos? Impressionante. Certo, por isso só nos permite acesso o HTML, acesse nossa página muito rapidamente. Por quê? Porque nós estamos tratando o nosso página, tratando nossos tags HTML, tratar tudo como se fossem objetos. Se vamos tratá-los como eles são objetos, então o que podemos fazer? Bem, podemos chamar funções neles. E isso é importante porquê? Bem, porque nós estamos indo para usar JavaScript para atualizar o nosso HTML, atualizar esses objetos. Então, se nós tratá-las como objetos, Podemos então chamar funções neles. Eu vou entrar neste um pouco mais quando eu entro em JavaScript, mas todos vimos como document.getElementById. Então documento é o seu elemento, obter elemento por ID, então você está indo olhar para alguns ID em uma tag HTML. E então, você pode fazer outra coisa para isso. Por exemplo, como document.body, em seguida, você pode acrescentar criança. Então, você vai encontrar o documento. Você tem o documento. Você vai encontrar o corpo. Você encontrou o corpo. E então, você vai chamar alguma função nele. Então acrescente criança, e você pode acrescentar alguns HTML para o final dentro do seu corpo. Então, basicamente, você é apenas tratando-o como um objeto. Você está tratando HTML tags como um objeto. E isso faz com que seja muito fácil e rápido para passar por eles. Mas também permite que você para chamar funções neles para que você possa manipular e mudar os elementos. [01:07:04] GABE: Diante disso, por que é JavaScript, tais uma linguagem agradável para interagir com HTML? As probabilidades são, quando as pessoas estavam escolhendo o idioma do browser, para o lado do cliente, JavaScript é muito bom, é realmente bom para lidar com objetos. E os objetos são o tipo de gosto os objetos que aparecem no HTML, por isso é muito fácil para JavaScript para fazer esse tipo de manipulação. DAVIN: Nice. Então, aqui é apenas um exemplo. Então eu acho que no teste do ano passado, ou talvez dois anos atrás, nós pediu-lhe para criar uma árvore. Portanto, este é exatamente o que você faria. Então você começa com documento. E então você basicamente basta olhar para as tags. Então, se você olhar, nós começar com uma tag HTML. E então, você tem pistas sobre como a fazer isso com base no recuo. Assim, tipo cabeça de ramos off. Dentro da cabeça, temos outra tag para o título. Então, temos uma tag título. E dentro disso, temos alguns string. E assim nós representamos uma corda em um círculo. E todas as marcas estão em praças. [01:07:54] E se você olhar, se nós pensar nisso como uma árvore, e digamos que é HTML um pai, em seguida, cabeça e corpo vão ser irmãos. Ambos estão indo para ser filhos de que o pai. Então, porque eles são ambos os irmãos, eles são vai ser tipo de ao lado uns aos outros em nosso modelo de árvore. E então, você basicamente fazer exatamente a mesma coisa. Então, não é difícil, mas nós pedimos perguntas como esta antes no questionário. GABE: Alguém tem perguntas até agora? Isso é bom? DAVIN: Cool. JavaScript, OK, as coisas boas. Então JavaScript, o que é JavaScript? Bem, JavaScript é-- é complicada, mas estes são alguns dos destaques que você deve ter em mente. Em primeiro lugar, é vagamente digitado. O que isso significa? Então PHP foi-- sim, qual é? [01:08:35] AUDIÊNCIA: Você não tem que explicitamente estado que tipo de variável que é. DAVIN: Perfect. Então, ele disse que você não tem que mencionar explicitamente o tipo de variável. Isto é exatamente correto. Assim, em C, se eu tivesse int i é igual a 50, em seguida, em PHP, é só assim, $ i, é igual a 50. Então, em JavaScript, qual seria a resposta? Var, certo? Seria como var i é igual a 50. Mas você não tem que ser como, OK, este é um int. OK, este é um string. Não há necessidade de fazer isso. É uma linguagem interpretada. Então, o que isso significa? [01:09:04] AUDIÊNCIA: Não compilado. [01:09:06] DAVIN: O que não compilado significa? Sim? [01:09:11] AUDIÊNCIA: Você não tem para reestruturar o código para obtê-lo pronto para o computador para executá-lo. É só tomada no momento de execução e o computador [inaudível]. DAVIN: Sim, por isso vai para passar através de um intérprete. Mas você está absolutamente certo. Então, você nunca vai compilá-lo, certo? Quando você estava fazendo o seu PHP e código JavaScript, você nunca chamado de compilação. Você nunca chamado algo como fazer ou qualquer coisa assim. Isso porque ele é interpretado. Então, toda vez que passa pelo browser, ele passa por um intérprete. E que vai interpretá-lo apenas em tempo real de imediato para você. Então, quais são alguns pontos positivos e negativos para ter uma linguagem interpretada e tendo uma linguagem compilada? Então compiling-- sim, qual é? [01:09:50] AUDIÊNCIA: Interpretado é mais lento. DAVIN: Em que sentido? [01:09:57] AUDIÊNCIA: Depois que você compilar, você não tem fazer quaisquer medidas adicionais para executar -lo, considerando que esta [inaudível]. [01:10:04] DAVIN: Certo, perfeito. Então, o que você disse é basicamente, que a compilação, quando compilar, você tem um monte de custos iniciais, certo? Você está indo para compilá-lo. Mas depois de compilá-lo, o compilador vai para otimizá-lo. Vai ser rápido. Vai basicamente ser tão rápido quanto ele pode ser. Com a interpretação, você nunca tem que custo inicial. Em vez disso, ele vai ser um pouco mais lento cada vez que você interpretá-lo. E você vai ter que interpretá-la a cada momento. Então, ao invés de ter este um custo de tempo, agora que você está vai ter que interpretá-lo cada vez que a página é processada. [01:10:29] Então intérpretes são boas, porque você não tem que compilá-lo, mas eles são ruins em que cada cronometrar a página é carregada, é vai ter que interpretar esta JavaScript. E está indo para executar um pouco mais lento do que se estivesse a compilá-lo. Permite communicate-- oh, espera. Usado para manipular o conteúdo e aparência. Acabamos de falar sobre isso. Ele usa o DOM. AJAX, nós vamos entrar em AJAX em um pouco. E então, é do lado do cliente. Então PHP é do lado do servidor. JavaScript é do lado do cliente. O que são positivos para que? Ele diz ele. É mais rápido, certo? Porque você não tem a-- que é mais rápido. Você não tem de se comunicar com algum outro dispositivo. Se você está apenas em seu cliente, você nunca está vai ter que ir e ver o que está no servidor e, em seguida, informar ou algo parecido. Assim, do lado do cliente tende a ser um pouco mais rápido. [01:11:15] GABE: Sim, mas isso não significa PHP é mais rápido do que o JavaScript ou qualquer coisa do género. Correm do tipo da mesma velocidade, porque eles são ambos linguagens interpretadas. A coisa que é lento aqui é o pedido. Então você está realmente indo todo o caminho para o Brasil para obter algumas informações que vive lá. Mas PHP e JavaScript, eles tipo de correr na mesma velocidade. Não é que um é mais rápido do que o outro. Isto, também, pegadinha aqui. Assim, nunca se torna JavaScript código de máquina, verdadeiro ou falso? [01:11:47] AUDIÊNCIA: False. GABE: False. Tem que se tornar máquina código porque o código de máquina é a única coisa que a máquina entende. Mesmo que ele não está compilado, ele ainda se torna o código de máquina porque o intérprete é apenas um programa que vai linha por linha e transforma essa linha em algo que o computador entende. OK? Com estilo. [01:12:08] DAVIN: Aqui é apenas uma base muito Olá programa JavaScript mundo. Então, eu não sei se-- você já viu isso. Mas você só tem HTML aqui. E em vez de realmente colocar o JavaScript nas tags de script, assim você normalmente colocá-lo em cabeça. Você tem marcas de script. Você deixá-la lá. Tudo o que fizemos aqui é que nós ligados em-- por isso temos ligada em um arquivo JavaScript assim. E você tudo feito isso, certo? Então, quando você estava usando jQuery e underscore.js no último p-set, você não tem toneladas de código em suas marcas de script, em sua cabeça. Você poderia fazer isso, mas, em vez você está apenas ligando-in. E você está ligando-o em assim como você faz com o CSS. Por isso, apenas torna mais fácil de ler de forma seu código não é como mil linhas de longo com toneladas de funções que você não pode estar usando. [01:12:52] Em vez disso, você só ligá-lo em. É compartimenta ele. É como escrever algum arquivo de cabeçalho, e em seguida, incluindo o arquivo de cabeçalho no C. Pense nisso como este. Então, o que isso faz? Bem, isso vai ser executado. Vai para alertar. Então, você está indo para obter um pouco pop up Olá mundo chamado. Pergunta rápida, apenas verificação de sanidade, de modo que você vê aqui no corpo, dizer corpo, HTML aqui. O que vem primeiro? Eu ver o corpo, HTML aqui, ou posso ver o alerta pela primeira vez? [01:13:19] AUDIÊNCIA: Alerta. [01:13:20] DAVIN: Certo. Ele diz alerta. Por quê? [01:13:22] AUDIÊNCIA: Porque você ir de cima para baixo. [01:13:24] DAVIN: Sim. Perfeito. Então ele diz, você vai de cima para fundo, o que é absolutamente correto. Você está indo para ir de cima para baixo. E em JavaScript, jQuery, você tem um função que é onload like, ou pronto, e que diz, OK, espere até tudo isso HTML foi carregado. E, em seguida, chamar o JavaScript. Porque nós não temos isso aqui, o primeira coisa que vai acontecer se ele está indo para ir de cima para baixo. Vai bater esse JS chamar, ele vai para alertar. Depois que você clicar em OK, que alerta vai embora. Em seguida, ele vai mostrar você o HTML corpo aqui. Nice. [01:13:54] OK, então apenas rapidinho, escrita em JavaScript é super rápido. A fim de declarar uma variável, nome var. Assim, em C, você tem int i, você tem para declarar que tipo de tipo é. PHP, $. JavaScript, var. Nós conversamos sobre isso. Tudo bem, vamos lá. [01:14:11] Loops, a mesma coisa. Mesma coisa. Declarações de função, de modo assim como você já viu em C. A única coisa diferente é assim, quando você começa a outras linguagens de programação, como quando você toma 51 próximo semestre e você está fazendo com OCaml, você pode lidar com funções anônimas. Então, isso é exatamente o que você tem aqui. Então você quer colocar em suma, algum tipo de valor da soma. Mas você só pode estar fazendo isso uma vez. Então você não quiser chamá-lo de função suma, dar-lhe uma declaração de função. Em vez disso, você só usá-lo como uma função anônima. E você já viu isso muito. Você vai ver um exemplo de isso em um par de slides. Sim, vamos ver. GABE: Boa pergunta. Quando você pode querer usar uma função anônima aqui? Basicamente, quando você quer alguma coisa, como um evento, a acontecer. Então, quando o mouse está clicado, por exemplo, você quer alguma função a ser chamada. Então você passa para o evento manipulador, você passa para o evento, de tipo, a função que você quer ser chamado. E o que você está passando é como, na extremidade do dia, apenas um ponteiro para essa instrução, para a função. Então, não é como se você está passando o código inteiro, tal como um ponteiro para a função. E então, quando alguém clica no rato, em seguida, que a função é chamada. [01:15:17] Davin: Arrays, assim você ter uma declaração de matriz. Em seguida, uma matriz para colocar as coisas em. Bem rápido, o que vai esta imprimir? Qual será o terceiro elemento ser? [01:15:31] AUDIÊNCIA: "JS". [01:15:32] DAVIN: Direito, seria "JS". Espere, voltar. Qual é o comprimento? [01:15:37] AUDIÊNCIA: Três. DAVIN: Três, certo? Exatamente o que você pensa. OK, agora vá. Arrays, você pode adicionar as coisas para eles. Então você pode ir além seus limites iniciais. Só uma coisa a ter em mente. PHP, JavaScript, eles estão um pouco pouco mais indulgente em termos de coisas assim. Objetos, muito parecido com estruturas em C, muito como matrizes de associação em PHP. Vocês todos já tinham experiência com isso. Então, JSON, quando você está passando JSON frente e para trás em-p definir oito, esse é o seu objeto. [01:16:03] Então, sim, exemplo, exemplo rápido real. Aqui é um objeto. A forma como você faz referência a este objeto, por isso bem rápido, digamos que eu queria encontrar para fora, OK, o que é o curso? E assim o nome do objeto aqui é CS50. E, em seguida, se eu tivesse um associativa array, como eu faria isso? Eu vou estar usando uma chave, certo? Então, eu tenho o nome do array. Eu tenho suporte, citações, chave, citações finais, suporte de final, e que será referência que elemento dentro da minha matriz associativa. Como faço para referenciado Claro que dentro de meu objeto? Alguém sabe? [01:16:39] AUDIÊNCIA: [inaudível]. [01:16:40] DAVIN: Qual é? AUDIÊNCIA: CS50.course. DAVIN: Direito, sim. Então CS50.course. Assim, a maneira você faz referência a coisas dentro de um objeto JSON é com um ponto. [01:16:48] AUDIÊNCIA: Você também pode usar sintaxe de array. [01:16:53] DAVIN: OK, tudo bem. [01:16:54] GABE: Você também pode usar o suporte CS50, corda, como aspas. AUDIÊNCIA: Eu acho que é idêntico ao PHP. GABE: É a mesma coisa. DAVIN: Fine! Mas você vai ver isso em outros lugares. Sim, por isso vai manter. Isto é o que eu disse. Assim, em um exemplo JavaScript jQuery. Portanto, este é o meu DOM, certo? Bem rápido, então eu tenho um cabeça, Olá mundo, corpo. Eu tenho um botão. Diz que "empurrar me", assim que eu quero para empurrá-lo. E eu quero fazer algo quando é clicado. Direita, em seguida. [01:17:31] Certo, então este é o meu JavaScript. Então jQuery é apenas um mais fácil maneira de escrever JavaScript. Portanto, este, eo que eu vou mostrar você próximo, vai ser jQuery, são idênticos. Então, eles vão fazer as mesmas coisas. Apenas jQuery tende a ser um pouco mais fácil. As pessoas tendem a gostar mais. Tem um monte de funcionalidade. Então, as pessoas tendem a usar jQuery. Você usados ​​jQuery no último p-set. Então, o que vai fazer isto? O que isto vai JavaScript-- assim este é simplesmente JavaScript. O que vai fazer isto? O que vai fazer? [01:18:03] Então, primeiro, você vê a janela onload. Certo? Então, nós não vimos isso antes. Então, isso vai esperar até que toda a carga de janela. Por isso, vai esperar até a carga HTML, todas as imagens antes que ele faz qualquer coisa. Então, digamos que o nosso DOM foi carregado. Tudo está lá. Então, o que vai acontecer? Sim? [01:18:19] AUDIÊNCIA: aparece Button. [01:18:22] DAVIN: O botão já está lá. Sim, então o botão já está lá. Mas isso vai dizer: OK, se eu clicar no botão, de modo que o botão é já lá, como que tag HTML. Espere, voltar rapidinho. Esta tag direito aqui é vai ser um botão já. Já existe um botão. Mas, em seguida, o JavaScript tag, aqui mesmo, ele diz, OK, eu quero para obter pelo elemento de identificação, assim botão de pesquisa apenas diz, OK, eu quero para mapear esta variável para o botão. Então, essa variável é apenas um maneira mais fácil de acessar esse botão. E eu digo: OK, se eu clicar em que botão, então se eu clicar nesse elemento, e refere-se a este elemento o botão, se eu clicar nele, então eu quero chamar uma função. Aqui é um daqueles anônimo funções que estavam falando. [01:19:03] Basta ligar para alguma função. Dentro dessa função, basicamente, algo que já vimos um monte, alerta. Você clica no botão de busca. Vai basicamente tem um botão. Você clica nele. Você começa a alerta. X para fora. É isso aí. Sim? [01:19:16] AUDIÊNCIA: Então, se você colocar o script [Inaudível], tag script em seu HTML? [01:19:21] DAVIN: Você pode colocar o script straight tag na cabeça porque você tem este onload. Também é que você tem um clique. Por isso, vai esperar até clicar em alguma coisa. Mas onload é apenas para ser seguro, para fazer se de tudo é carregada em seu HTML antemão. Sim? Você quer dizer algo? [01:19:40] GABE: [inaudível]. DAVIN: Yeah. [01:19:42] AUDIÊNCIA: evita Então onload definir o botão de pesquisa variável por apenas dizendo document.getElementById Pesquisa botão dot [inaudível]. [01:19:49] DAVIN: Com certeza, mas, em seguida, sua seqüência só fica enorme. Exatamente, por isso esta é apenas para tornar mais fácil para você, sim. Sim? [01:19:56] AUDIÊNCIA: Onde é que nós criar window.onload? Ou document.ready? [01:19:58] DAVIN: Sim, existe. Sim, lá está, eu verifiquei. [01:20:02] GABE: Não para que eles se preocupam. [01:20:03] DAVIN: OK, então eu vou para dizer-lhe de qualquer maneira. Então, basicamente, apenas em geral, de modo window.onload espera até que o seu DOM, todos seu HTML, cargas. Ele espera até que sua carga de imagens. Ele espera até que tudo cargas. document.ready, ele só espera até que suas cargas DOM. Uma vez que o HTML é tudo que existe, uma vez que o DOM está lá, começa a funcionar. Essa é a única diferença. [01:20:23] GABE: sanidade rápida confira aqui. Então, isso pode ser visto tipo de como uma linha de código, certo? Porque é window.onload é igual a um monte de coisas. Quando JavaScript lê este, verdadeiro ou falsa, a função é executada. Falso. OK? O que acontece aqui, você está só de passagem este funcionar como funções anônimas para Window. E então, quando é que vai para realmente começar executado? Quando as cargas de janela. Esse é um evento. Então, isso é coisa t jus estamos falando antes, certo? Assim, quando o evento acontecer, a função acontece. Mesma coisa com o onclick. [01:20:59] DAVIN: OK, então alguém pegou afastado o document.ready. Mas este será o same-- exata AUDIÊNCIA: O sinal de dólar, que é um document.ready. Isso é um atalho. [01:21:07] DAVIN: Ah, que é isso? OK, então isso significa document.ready, atalho. Mas esta é a mesma que window.OnLoad exceto para que pouca diferença Eu lhe falei. E este é jQuery. Portanto, este é exatamente o mesmo coisa-- este é JavaScript. Este é só-- algumas pessoas pensam dele como um peso mais leve, elegante versão que tem muita funcionalidade que você provavelmente estará usando. Então, isso faz exatamente a mesma coisa. [01:21:34] Então as coisas de tipo de apontar. Assim, em outro exemplo, nós teve document.getElementById, por isso, tivemos essa longa string que vai ficar o elemento por o ID que tem. Isso é substituída por esta chamada aqui. Então você vê o sinal de dólar, então você vê citações, hashtag. Hashtag é sempre um selector. Ela diz, OK, isso tem a ver com um ID. Qual é o seletor para uma classe? [01:21:56] AUDIÊNCIA: Dot. [01:21:57] DAVIN: Dot, certo. Se você está indo só para selecionar uma tag, o que é? É apenas o tag, exatamente. E você poderia usar isso aqui, também. [01:22:05] GABE: E por tag, queremos dizer como div, por exemplo, ou na cabeça. [01:22:08] DAVIN: Ou corpo ou p ou nada parecido, sim. Então, aqui, OK, em vez de dizer document.getElementById, esta é apenas a exata mesma coisa. Apenas no jQuery, é mais curto. Portanto, é mais simples. Então, não mais onclick, basta clicar. função jQuery, chamar essa função. Alerta é exatamente o mesmo. Portanto, é um pouco menor, ou pouco mais curto, um povo pouco bit-- pensar é um pouco mais fácil de escrever, um pouco mais fácil de entender. Mas isso é jQuery. Um monte de gente ficar um pouco pouco confuso e preocupado e eles pensam, OK, jQuery é diferente do JavaScript. Eu tenho que lembrar estes duas coisas diferentes. Não é. Quero dizer, é uma sintaxe diferente. Mas jQuery é JavaScript. É apenas um aparentemente melhor versão que pode ser mais fácil compreender que as pessoas usam. GABE: Sim, para ser Honesto, que cifrão que você vê no jQuery, isso é apenas o nome de uma função que define jQuery. Ele não tem nada de especial. É apenas o nome de uma função, assim como você poderia definir cifrão. [01:23:03] DAVIN: Sim, então conversamos sobre isso. Algumas coisas úteis. Eu estava olhando para os antigos quizzes. Nos últimos dois questionários, eles têm tive que usar coisas como esta. Assim document.ready, assim certificar-se de que tudo está carregada antes de começar a fazer as coisas. Selecione uma ID ou selecione uma classe, ele tinha acabado de Citação ser dot alguma classe, citações final. Enviar, por isso, se você está envio de um formulário e chamada essa função após o formulário envia. Value, então vamos dizer que eu tinha uma forma submissão, como um nome de usuário, um e-mail, tanto faz. Eu tinha uma caixa de texto. Então, eu estou digitando em que a caixa de texto. Bem, se você quiser obter o valor fora dessa caixa de texto, você usa dot val. E então, aqui em baixo, dot HTML é a mesma é como documento dot getElementByID dot innerHTML. Então, isso vai voltar você o código HTML que ID. Aqui, você só usar algum ID ou qualquer ponto HTML. Isso vai ter o código HTML esse elemento. Se você quisesse então mudar isso HTML, você pode passá-lo algo. Então você seria como HTML ponto, e, em seguida, dentro, citações, novo HTML ou algo assim. [01:24:05] GABE: OK, então AJAX. Eu realmente gostaria de entender AJAX muito bem. Então, eu quero que vocês AJAX entender muito bem. Porque se você fizer isso, você está muito bem indo para entender tudo o que tem a ver com HTTP, PHP, JavaScript porque todos vem junto em AJAX. AJAX não é uma linguagem. AJAX é uma técnica. E ele usa muitas ferramentas diferentes. AJAX significa XML JavaScript assíncrono. Assim, o método, a língua, os dados. [01:24:36] Assim, a principal linguagem que usamos em AJAX para acionar tudo e para lidar com tudo mais tarde é JavaScript. É por isso que ele se relaciona muito perto de JavaScript. E, em seguida, é assíncrona porque não fazê-lo tudo de uma vez quando estamos carregando a página. Esta é a única coisa que nós podemos fazer coisas tipo de em paralelo. A principal idéia por trás AJAX é que você quer -lo para obter algumas informações específicas. Por exemplo, quando você está digitando novo nome de usuário quando você registrar um nome de usuário, meu nome de usuário é abc123. E depois, no final do forma, você tem que clicar em Enviar. E tinha que ir para o servidor, e, em seguida, verificar se no banco de dados, abc123 já está lá. E se ele já está lá, ele diz: nome de usuário já na base de dados. E eles, você tem que preencher o formulário inteiro novamente. E foi muito, muito ruim. [01:25:23] E então as pessoas dizem, OK, por que não podemos simplesmente fazer um pequeno pedido HTTP para apenas verificar para ver se o usuário está no banco de dados antes que o usuário tinha que enviar o formulário inteiro? Assim, por exemplo, quando o usuário termina a digitação abc123, vamos apenas ir para o servidor um pouco bit e é só pegar um verdadeiro ou falso a partir do servidor para ver se que é um nome de usuário ou não válido. OK, então isso é um dos principais usa de AJAX ainda hoje. [01:25:49] DAVIN: Então bem rápido, em uma chamada Ajax no jQuery, você poderia significar que você quer que seja síncrona. Você não deve fazer isso. Mas você pode fazer isso. E se você fez isso, o que aconteceria? Bem, por exemplo, quando você está recebendo notícias ou o que quer, o seu navegador está indo só para esperar até que toda a chamada está completa em vez de deixá-lo fazer outra as coisas direito após você clicar nele. [01:26:14] GABE: Ele não está passando mais. Meu Deus. Desculpe! Sim. "No passado, o cliente precisava pedido todo o conteúdo de um site ". Isso é o que eu disse. Ela nos permite enviar GET ou POST adicional pedidos sem ter para recarregar o nosso browser. Assim, no final do dia, estamos realmente fazendo um solicitações HTTP aqui, usando JavaScript. Porque antes, nós só usamos JavaScript para alterar o código HTML que já veio. E agora, podemos usá-lo para fazer a interface com os servidores web também. A maneira como isso acontece é que temos o cliente. Davin é um cliente. E ele tem todo o JavaScript correndo porque HTML é burro. JavaScript é inteligente. Então davin Davin tem a sua inteligente parte e sua parte mudo. Ele vai usar sua parte inteligente agora. Ele vai usar JavaScript a pedido, por exemplo, se abc123 é em a base de dados ou não. [01:27:04] Então Davin, por favor, você só enviar-me um pedido HTTP. Obrigado. Assim, ele acabou de enviar uma solicitação HTTP. Você vê isso? E isso é só o mesmo caminho que qualquer pedido HTTP é enviado. O navegador, o Google Chrome ou algo assim, é vai ver que Davin de tentando enviar uma solicitação HTTP, vai ajudá-hm um pouco. E isso está indo para ir todo o caminho para o servidor. Agora, o servidor vai ter PHP aqui, ou qualquer outra língua. Assim como em uma solicitação HTTP normal. É praticamente uma solicitação HTTP normal. [01:27:31] E então, o servidor vai dizer, OK, Davin me quer para verificar se este abc123 é na base de dados. Vá falar com o modelo. O modelo diz que não é. abc123 é um bom nome de usuário. E, em seguida, o servidor web vai usar o PHP para tornar algum tipo de arquivo. Poderia ser, literalmente, apenas um arquivo que contém "sim" na mesma, ou "não, ou algo parecido. Poderia ser qualquer arquivo. [01:27:54] Pode ser como eu vou Davin enviar uma imagem de um pato se é no banco de dados e enviar uma imagem de um hamster se não é no banco de dados. Isso seria uma espécie de idiota, mas ele vai trabalhar. OK, então eu enviar um pato para Davin. Davin tenho um pato. E agora, quem vai para lidar com o pato? Parte inteligente da Davin novamente, assim JavaScript, certo? JavaScript enviou o pedido, e JavaScript vai receber o pedido e interpretá-lo de alguma forma. [01:28:22] E, neste sentido, que vai dizer, OK, se pato então eu sou bom. Se hamster, então eu vou quer dizer, não, nome de usuário já existe na base de dados. Mas, geralmente, você não está vai enviar um pato. Você está indo para enviar algo um pouco mais esperto. E o que nós usamos é XML. E, mais recentemente, usamos JSON. JSON é apenas JavaScript Object Notation, que é, basicamente, você recebe um todo objeto JavaScript. E você colocá-lo em um arquivo, assim como esse objeto CS50 que vocês viram. Você colocá-lo em um arquivo, e enviá-lo ao longo de Davin. [01:28:53] Portanto, neste caso, eu o faria fazer um objeto JavaScript e apenas dizer, usuário existe, sim. Ou usuário existe, não. E enviá-lo de volta para ele. E por JSON? Porque a pessoa quem está recebendo este é vai usar JavaScript para lidar com a resposta. E JavaScript funciona tão bem porque ele é chamado de JavaScript Object Notation. Certo? Assim, ele pode simplesmente chamar uma função e obter este objeto agradável a partir da resposta. E, em seguida, ele vai saber se que o usuário está no banco de dados ou não. [01:29:22] Então você vê, tudo isso que vem juntos no servidor web, e depois há um HTTP ao pedido e uma resposta HTTP e tudo. Então, certifique-se de caras compreender esta chamada AJAX porque ajuda a compreender tudo dos conceitos que estamos falando. [01:29:37] Então, aqui está um exemplo de AJAX com jQuery. E aqui, o que fazemos com get JSON. Portanto, não estamos tentando obter uma imagem de um gato aqui, ou um pato. Estamos tentando obter um arquivo JSON. E então vamos esperar até ele é feito, ponto feito. Isso significa que eu estou esperando a resposta. Pode demorar um pouco. Então, você vê um pouco de carga. Se você quiser fazer isso em seu site. Então dot feito, e então o que acontece quando ele é feito? Você passa um anônimo função, assim como vimos antes. Porque feito é um evento, apenas como clicar em um mouse ou o que quer, para jQuery. Então você passa nesta função com dados, textos, status, e jqXHR. E, basicamente, é isso apenas algumas variáveis que você pode usar mais tarde, para ter o estado do pedido HTTP, os dados que ele vai para enviar de volta para você. Então você pode, mais tarde, interpretá-lo e fazer algo significativo com ele. E se ele falhar, quando pode-lo falhar? Bem, quando a solicitação HTTP dá -lhe um 500 ou algo parecido. Em seguida, ele vai dizer-lhe a status, que tipo de falha que foi, e todos os tipos de coisas. Você tem que ter certeza para lidar com ambos os casos, caso contrário, o programa vai a loucura. [01:30:42] DAVIN: Então, sim, este é exatamente o que você viu em seu último p-set. A chamada real AJAX está no get JSON. Essa é a chamada. E então, ponto feito é como ele verifica se é bem sucedido. Se for bem sucedido, você quer de fazer alguma coisa com os dados. Você recebe de volta a partir desse Dados de solicitação JSON. Isso é o que você recebe de volta. Então, se você se lembrar de sua p-set, muitos de vocês eram como suporte de dados i ou o que quer, ligação de pontos ou título. O que quer que está voltando desde que o JSON, independentemente os campos são nesse objeto JSON, isso é o que você está ficando para trás. Dados é o que você está ficando para trás. Estado do texto, apenas algo que permite que você saiba o que aconteceu. E então, o jqXHR, isso é apenas a solicitação HTTP XML jQuery. Isso é apenas como um objeto. E, em seguida, falhar, assim como Gabe disse. GABE: No nosso pequeno exemplo de abc123 apenas para verificar se o que está no banco de dados ou não, os dados seria algo que você faria, se o nome do usuário dot dados existem, que é o que o seu PHP gerado para você, se o nome do usuário dados dot existe, então Eu estou indo para alertar, user nome já existe. Outra coisa, eu estou indo só para deixar o user proceder o preenchimento do formulário. OK, segurança, cool. [01:31:50] DAVIN: Quer que eu? [01:31:52] GABE: Eu gosto deste. Então, algo que parece familiar. Estamos quase terminando. Portanto, este é apenas o exemplo vocês viram em sala de aula. Você estava usando argv1 aqui. Isso é como um argumento de linha de comando. E nós estamos mem cópia que para um tampão de tamanho 12. Qual é o problema aqui? Buffer overflow! Porque nós temos um buffer de tamanho 12. argv1 pode ter um tamanho de dois mil milhões. Nós não fazemos qualquer checagem de limites. Assim, poderíamos copiar uma grande quantidade de memória. E nós vamos ser particularmente ruim sobre isso. O que poderíamos fazer isso é muito, muito significa, neste caso? Sim? AUDIÊNCIA: Parte dos dois mil milhões de coisas contém código executável que retorna [Inaudível]. GABE: Exatamente. Então esse é o tipo de coisa que as pessoas usam para fazer o jailbreak um iPhone, por exemplo. Então, esse tipo de coisa. Porque você pode apenas fazer o dispositivo executar qualquer código que você gosta. A correção, para que a correção é fácil. Basta verificar os limites. Você verificar a nulidade porque nós sempre verificar a nulidade quando estamos lidando com strings. E então, você pega o comprimento da corda antes. E se a cadeia comprimento é uma seqüência válida comprimento, que está dentro 0 e 12, então estamos bem. [01:33:03] DAVIN: Se você não buscar por null, bem rápido, o que vai acontecer? Vai SEG falha. Por que será que vai SEG culpa? Porque você está chamando strlen em null. GABE: Yeah. A verdadeira ou falsa, usando um password é uma boa idéia. [01:33:19] AUDIÊNCIA: False. [01:33:20] GABE: False. Use muitas senhas, e grandes, longos. Ícones Cadeado garantir a segurança. [01:33:26] AUDIÊNCIA: False. [01:33:27] GABE: False. Isso não quer dizer nada. É apenas um ícone. SSL protege contra um homem no meio ataque. AUDIÊNCIA: False. GABE: False. OK, para que todos aqueles são falsas. Nice. [Inaudível] Quer falar sobre isso? Sua vez. Davin: Tipos de ataques, homem no meio. O que é um homem no meio ataque? AUDIÊNCIA: [inaudível]. DAVIN: Se você enviar um HTTP pedido, eles poderiam fazer isso, certo? Mas se você está enviando HTTPS, eles provavelmente não será capaz de fazer isso. Há muitos pontos ao longo de sua conexão. Você tem roteadores. Você tem servidores DNS. Se alguém é capaz de fisicamente ver o que você está enviando, assim que alguém é capaz de realmente chegar entre você, o cliente eo servidor, e é capaz de ver o que você está enviando, este é um homem no meio ataque. Então, para ver o que você está tentando fazer com que a partir de o servidor, ou é capaz de see-- pior, você pode ser capaz de ver cookies ou algo parecido. [01:34:16] Assim, por exemplo, se você não estiver usando SSL, ele pode ser capaz de ver os cookies de identificação de sessão. E isso é chamado de seqüestro de sessão porque ele vê seus cookies de identificação, e, em seguida, ele é capaz de ir para esse website e fingir ser você. Porque assim como em PHP, lembre- quando logado, o que vamos fazer? Montamos ID sessão igual a ID. Assim que o identifica. É por isso que você pode ver a sua carteira e carteira não de todo mundo. [01:34:38] Bem, se eu sou capaz de conseguir esse cookie, então eu posso registrar em que página. E então, eu só posso ver o seu material e começar a comprar e vender coisas. Então, isso é o seqüestro de sessão. Mas você não deve ser capaz a-- assim você pode usar o homem no meio ataque mesmo se eles estão usando SSL. Mas você não deve ser capaz de fazer. Se eles estão usando SSL, você não pode seqüestrar sessão. Por quê? Porque tudo é criptografado, certo? se ele é criptografado, e eu ainda sou um homem na meio, eu ainda obter seus dados. Isso é bom. Mas está criptografado. Então, eu realmente não posso usá-lo. Então, isso é dois. [01:35:09] Rapidinho, cross site request forgery. Isso é apenas se há um link e essa ligação faz algo que você não acha que ele deve fazer. Assim, por exemplo, se o link foi vai comprar ações ou vender ações, e você não sabia disso. Você clicou no link, enviou um pedido, comprou ou algo que vendido você não queria fazer. É isso. [01:35:25] Cross site scripting, por isso aqui, você está passando na via q variável, em vez de passar em algum tipo de valor, talvez q é como um nome. Então, ao invés de passar iguais q Davin ou algo parecido, Se você não usar o HTML caracteres especiais, se você não escapa a esta para se certificar de que é OK, então eu poderia passar em vez disso, vamos dizer aqui que eu estou dizendo impressão ou algo assim, então eu poderia passar aqui uma chamada de script. [01:35:51] Então, em vez de apenas começando uma variável, Eu, então, executar esta chamada script. Então, dentro desse script chamada, o que ele faz? Documento localização do ponto, que vai mudar a localização do documento. Então, eu estou indo para redirecionar para outro lugar. É chamado de bandido em Neste exemplo, muito bom. Não foi possível pensar na palavra. E então, o que é ainda pior é que eu vou para então definir cookie, que é algum variável que eu tenho neste website. Eu estou indo para defini-la igual para o cookie documento ponto. Portanto, eu vou para roubar seu cookie. E eu estou indo para redirecionar algumas informações para um site que você não deve estar acessando. E tudo isso acontece porque você é não escapar o que você já viu. Sim? [01:36:29] AUDIÊNCIA: Então, só para deixar isso claro, é vulnerable.com que é vulnerável a esse. Então, esse link pode aparecer em qualquer página. Alguém clica nele, vai para vulnerable.com. Você tem um cookie para vulnerable.com. Vamos dizer que o Facebook é vulnerável, tão facebook.com. Você tem o seu cookie Facebook. O que isto está fazendo, você está vai facebook.com, ele é imediatamente redirecionando você badguy.com, mas incluindo as informações de cookie. Portanto, é um redirecionamento rápida, mas o seu cookie Facebook está incluído no que redirecionamento, e é assim que eles [inaudível]. GABE: Sim, há algumas coisas muito médios que as pessoas podem fazer se há este. Por exemplo, se o Facebook permitiu todo mundo para mudar seu nome de usuário, e eles não fizeram qualquer checagens, assim você Pode inserir uma coisa JavaScript que muda a sua imagem a um hamster. E que insere o mesmo JavaScript em todo mundo que vê a sua página. Então todo mundo que vê sua página tem a mesma coisa em nome do usuário. E porque é um vírus, espalha-se exponencialmente. DAVIN: Nós vamos pular o último um, e então estamos a fazer. Portanto, este é apenas mais um exemplo. Então, isso é que eles não são escapando sua tabela SQL. Assim, você pode deixá-lo cair. Então você quer escapar coisas. Esse foi o exemplo anterior com o cross site scripting. Desculpe, mas correu um pouco tarde. Amanhã, sorry! Amanhã, temos o horário de expediente. Assim, o horário de expediente em Cabbot 8:00-11:00. Os horários de funcionamento são estritamente para as perguntas do quiz.