1 00:00:00,000 --> 00:00:02,964 2 00:00:02,964 --> 00:00:05,434 >> [Música tocando] 3 00:00:05,434 --> 00:00:11,825 4 00:00:11,825 --> 00:00:12,700 HANNAH: Olá, todos. 5 00:00:12,700 --> 00:00:15,866 Obrigado a vocês por terem vindo para fora no tempo repugnante para um teste 6 00:00:15,866 --> 00:00:16,910 rever sessão. 7 00:00:16,910 --> 00:00:20,020 Como vocês sabem, quiz um é nesta quarta-feira. 8 00:00:20,020 --> 00:00:22,209 Então, nós estamos indo para ir através de um grupo de tópicos. 9 00:00:22,209 --> 00:00:24,000 DAVIN: Hey, eu posso dizer algo bem rápido? 10 00:00:24,000 --> 00:00:25,215 HANNAH: Sim, Davin está acontecendo dizer algo bem rápido. 11 00:00:25,215 --> 00:00:25,780 DAVIN: Desculpe. 12 00:00:25,780 --> 00:00:29,490 Apenas bem rápido, se você tiver dúvidas sobre o quiz, você pode ir online. 13 00:00:29,490 --> 00:00:32,420 Vá a 2014 questionário um, sobre o quiz. 14 00:00:32,420 --> 00:00:34,680 Ele tem cerca de logística onde ir, quando ir. 15 00:00:34,680 --> 00:00:38,100 Se você estiver inscrito simultaneamente, estamos vai ter um teste de maquiagem às 5:30. 16 00:00:38,100 --> 00:00:40,350 Ou se você me enviou um problema, você tem algum outro problema. 17 00:00:40,350 --> 00:00:42,640 Mas 5:30 é o make-up vez na quarta-feira. 18 00:00:42,640 --> 00:00:44,540 Mas se você tiver dúvidas, questões gerais, 19 00:00:44,540 --> 00:00:45,748 on-line tem toda a logística. 20 00:00:45,748 --> 00:00:47,690 Portanto, verifique lá primeiro. 21 00:00:47,690 --> 00:00:49,070 >> HANNAH: Awesome. 22 00:00:49,070 --> 00:00:53,030 Então aqui está a grande lista de tópicos que nós vamos passar por hoje. 23 00:00:53,030 --> 00:00:57,390 Eu estou indo para cobrir todo o C material, que é a primeira coluna. 24 00:00:57,390 --> 00:01:00,710 Assim, o material C que nós abrangidos, após teste zero. 25 00:01:00,710 --> 00:01:05,459 Começando com uma lista ligada, que inclui ponteiros. 26 00:01:05,459 --> 00:01:07,668 >> Tudo bem, então vimos este na última sessão de revisão, 27 00:01:07,668 --> 00:01:10,000 então eu vou passar por isso é um pouco mais rápido. 28 00:01:10,000 --> 00:01:13,500 Apenas levante a mão se você me quer retardar ou abordar algo mais. 29 00:01:13,500 --> 00:01:17,150 Mas usamos listas ligados, porque começamos em C com arrays. 30 00:01:17,150 --> 00:01:20,920 E matrizes são grandes, mas o problema é que eles têm um tamanho fixo. 31 00:01:20,920 --> 00:01:24,925 Listas ligadas nos permitem criar dimensionada dinamicamente estruturas de dados. 32 00:01:24,925 --> 00:01:28,520 33 00:01:28,520 --> 00:01:32,320 >> E temos as nossas operações básicas, inserir, excluir e pesquisar. 34 00:01:32,320 --> 00:01:36,780 E nós podemos fazer inserir em pior caso de tempo constante 35 00:01:36,780 --> 00:01:39,140 se nós apenas colocá-lo logo no início. 36 00:01:39,140 --> 00:01:45,220 Apagar e pesquisar, pior caso oh grande de tempo n. 37 00:01:45,220 --> 00:01:47,140 Então, novamente, apenas para virar através dessas imagens, 38 00:01:47,140 --> 00:01:50,860 Eu sei que nós vimos estes última vez, mas nós quer manter o controle de nossa lista ligada 39 00:01:50,860 --> 00:01:53,440 por manter o controle da chefe da nossa lista ligada. 40 00:01:53,440 --> 00:01:55,580 Porque nós sabemos que cada um dos seus nodos 41 00:01:55,580 --> 00:01:58,610 é só ir para apontar para o próximo nó na nossa lista ligada. 42 00:01:58,610 --> 00:02:00,460 >> Então é assim que estamos a acompanhar. 43 00:02:00,460 --> 00:02:02,910 Mesmo que estes não são peças contínuas de memória, 44 00:02:02,910 --> 00:02:07,410 nós podemos encontrá-los por apenas seguindo as setas diferentes. 45 00:02:07,410 --> 00:02:09,800 Aqui é a nossa estrutura para um nó de lista ligada. 46 00:02:09,800 --> 00:02:11,440 Vimos isso na última vez. 47 00:02:11,440 --> 00:02:13,080 Temos o nosso nó struct. 48 00:02:13,080 --> 00:02:14,340 E tem duas propriedades. 49 00:02:14,340 --> 00:02:17,020 Número um, o real valor que deseja armazenar. 50 00:02:17,020 --> 00:02:18,290 Neste caso, é um número inteiro. 51 00:02:18,290 --> 00:02:21,100 Poderia ser uma corda, que poderia ser um char, o que quiser. 52 00:02:21,100 --> 00:02:24,710 E então, temos que manter o controle de o próximo nó na nossa lista ligada. 53 00:02:24,710 --> 00:02:29,797 Então isso vai ser uma ponteiro para o próximo nó. 54 00:02:29,797 --> 00:02:31,880 Se você estava apenas fazendo pesquisa, como eu disse antes, 55 00:02:31,880 --> 00:02:34,900 você teria que seguir as suas flechas para baixo. 56 00:02:34,900 --> 00:02:40,720 Inserção, você iria manter o controle de onde o resto da sua lista é. 57 00:02:40,720 --> 00:02:44,150 E você quer redirecionar a cabeça para apontar para o nosso novo elemento, que 58 00:02:44,150 --> 00:02:46,640 neste caso é um, e, em seguida, um apontará 59 00:02:46,640 --> 00:02:49,480 para o restante da lista ligada. 60 00:02:49,480 --> 00:02:52,996 Então, novamente, eu sei que isso é um pouco bit de uma repetição do teste zero. 61 00:02:52,996 --> 00:02:55,370 Portanto, temos que ter muito cuidado sobre a ordem em que 62 00:02:55,370 --> 00:03:00,390 fazer essas pointings portanto, não fazer perder o controle de parte de trás da lista. 63 00:03:00,390 --> 00:03:04,122 OK, as perguntas com apenas vinculada isoladamente listas? 64 00:03:04,122 --> 00:03:06,060 Awesome, OK, legal. 65 00:03:06,060 --> 00:03:09,410 >> Então, agora, nós estamos indo para ir para algo apenas ligeiramente mais complicado, 66 00:03:09,410 --> 00:03:10,920 duplamente ligada listas. 67 00:03:10,920 --> 00:03:13,680 Assim, além de manter faixa do próximo nó, 68 00:03:13,680 --> 00:03:16,220 também queremos manter o controle do nó anterior. 69 00:03:16,220 --> 00:03:19,580 E isso permite-nos, se estamos em algum momento da nossa lista ligada, 70 00:03:19,580 --> 00:03:23,110 não só ir para a frente, mas também iteração para trás. 71 00:03:23,110 --> 00:03:25,220 Porque, como vimos no uma lista vinculada isoladamente, 72 00:03:25,220 --> 00:03:27,980 se estivéssemos em algum nó, e de repente, decidimos, 73 00:03:27,980 --> 00:03:30,160 na verdade, eu quero ir para a o direito nó antes de mim, 74 00:03:30,160 --> 00:03:32,034 você teria que ir com tudo o caminho de volta para a cabeça 75 00:03:32,034 --> 00:03:35,710 e iterar até que encontrou o nó que você estava procurando. 76 00:03:35,710 --> 00:03:37,680 >> Então, isso faz com que as coisas um pouco mais fácil, pois estamos 77 00:03:37,680 --> 00:03:39,670 tentando fazer uma iteração através da nossa lista ligada. 78 00:03:39,670 --> 00:03:47,870 Mas isso obriga-nos a manter o controle de um mais ponteiro, por isso mais uma estrela nó. 79 00:03:47,870 --> 00:03:50,830 Tudo bem, então aqui vem a parte divertida. 80 00:03:50,830 --> 00:03:55,600 Nós estamos indo para a prática de execução remover para listas duplamente ligadas. 81 00:03:55,600 --> 00:03:58,660 Então, isso é algo que é jogo totalmente justo para o quiz. 82 00:03:58,660 --> 00:04:00,750 Ele mostrou-se em questionários passados. 83 00:04:00,750 --> 00:04:04,220 Então, definitivamente ser preparado codificar um pouco em C. 84 00:04:04,220 --> 00:04:07,900 Não se esqueça que, com toda este divertido PHP e JavaScript, 85 00:04:07,900 --> 00:04:10,560 ainda temos que lembrar fazer C. Então retocar em que 86 00:04:10,560 --> 00:04:12,146 Se você está se sentindo enferrujado. 87 00:04:12,146 --> 00:04:14,580 >> Tudo bem, vamos ver se podemos fazer isso. 88 00:04:14,580 --> 00:04:16,312 OK, legal. 89 00:04:16,312 --> 00:04:18,600 Então, nós estamos indo para tentar para editar bem aqui, 90 00:04:18,600 --> 00:04:20,707 e espero que isto acontece como planejado. 91 00:04:20,707 --> 00:04:23,915 Tudo bem, alguém quer me dar uma sugestão de como devo começar? 92 00:04:23,915 --> 00:04:27,030 A única hipótese que eu sou tomada é que eu já 93 00:04:27,030 --> 00:04:30,180 ter uma estrutura definida, o um mostrei na última página, 94 00:04:30,180 --> 00:04:31,420 no último slide. 95 00:04:31,420 --> 00:04:39,250 E eu estou armazenando a cabeça do meu ligados lista em algum ponteiro lista chamada. 96 00:04:39,250 --> 00:04:42,190 Alguém quer me começou? 97 00:04:42,190 --> 00:04:45,410 >> AUDIÊNCIA: Você pode criar uma nova nó para chamar a lista? 98 00:04:45,410 --> 00:04:46,410 >> HANNAH: Awesome, de modo vamos criar 99 00:04:46,410 --> 00:04:47,951 um novo nó para rastejar através da lista. 100 00:04:47,951 --> 00:04:48,570 Eu gosto disso. 101 00:04:48,570 --> 00:04:50,799 Eu vou chamá-lo de ponteiro se está tudo OK. 102 00:04:50,799 --> 00:04:52,340 E onde deveria inicialmente começar? 103 00:04:52,340 --> 00:04:57,280 104 00:04:57,280 --> 00:04:59,840 >> AUDIÊNCIA: Provavelmente em o cabeça da lista. 105 00:04:59,840 --> 00:05:00,590 HANNAH: Beautiful. 106 00:05:00,590 --> 00:05:03,670 Queremos começar na cabeça, o que Eu disse que vai ser armazenada em lista. 107 00:05:03,670 --> 00:05:04,170 Impressionante. 108 00:05:04,170 --> 00:05:05,220 Por enquanto, tudo bem. 109 00:05:05,220 --> 00:05:08,260 E agora, nosso objetivo é percorrer a lista 110 00:05:08,260 --> 00:05:12,870 até encontrar o nó com valor n que deseja excluir. 111 00:05:12,870 --> 00:05:13,540 OK? 112 00:05:13,540 --> 00:05:15,910 >> Então agora é a parte onde queremos para percorrer. 113 00:05:15,910 --> 00:05:19,488 Alguém pode sugerir uma caminho para percorrer? 114 00:05:19,488 --> 00:05:20,979 >> AUDIÊNCIA: Um loop. 115 00:05:20,979 --> 00:05:21,840 >> HANNAH: Um loop. 116 00:05:21,840 --> 00:05:22,620 Eu amo isso. 117 00:05:22,620 --> 00:05:25,550 Especificamente, podemos tentar um loop while. 118 00:05:25,550 --> 00:05:30,919 OK, e nós sabemos que chegamos o fim da nossa lista quando o quê? 119 00:05:30,919 --> 00:05:32,210 AUDIÊNCIA: Quando o ponteiro é nulo. 120 00:05:32,210 --> 00:05:33,418 HANNAH: Quando o ponteiro é nulo. 121 00:05:33,418 --> 00:05:34,320 Bonita, eu adoro isso. 122 00:05:34,320 --> 00:05:35,110 OK, legal. 123 00:05:35,110 --> 00:05:39,300 124 00:05:39,300 --> 00:05:43,190 Então, desculpe se o meu delimitadora brace é tipo de cair fora da tela. 125 00:05:43,190 --> 00:05:44,090 Nós trouxemos de volta. 126 00:05:44,090 --> 00:05:46,610 OK, legal. 127 00:05:46,610 --> 00:05:48,690 Qual é o próximo? 128 00:05:48,690 --> 00:05:51,950 >> Então, nós sabemos que deseja excluir o nó que tem valor n. 129 00:05:51,950 --> 00:05:56,340 Então, vamos descobrir o que acontece quando nós, na verdade, encontrar o nosso nó. 130 00:05:56,340 --> 00:05:57,840 Então, como é que eu iria verificar isso? 131 00:05:57,840 --> 00:06:02,210 Eu tinha acabado de dizer se ponteiro, e, em seguida, se eu deseja obter o valor de ponteiro, 132 00:06:02,210 --> 00:06:08,940 Eu só arrow n, é igual a n, o parâmetro 133 00:06:08,940 --> 00:06:14,490 que demos para esta função, o nó que queremos realmente excluir. 134 00:06:14,490 --> 00:06:17,090 Qualquer dúvida até aqui? 135 00:06:17,090 --> 00:06:18,360 Tudo certo. 136 00:06:18,360 --> 00:06:24,140 OK, então agora vamos tirar uma foto rápida no conselho, a fim de visualizar isso. 137 00:06:24,140 --> 00:06:30,710 >> Então, digamos que há a nossa linda nó. 138 00:06:30,710 --> 00:06:34,480 E isso tem um valor, vou apenas dizer quatro. 139 00:06:34,480 --> 00:06:40,340 E aponta para o próximo nó na nossa lista ligada. 140 00:06:40,340 --> 00:06:42,220 E não há nada antes dele. 141 00:06:42,220 --> 00:06:45,800 Portanto, temos a nossa anterior apontando para nada. 142 00:06:45,800 --> 00:06:48,110 Neste caso, apontamos para trás. 143 00:06:48,110 --> 00:06:50,960 OK, apenas a criação de meu lista ligada por aqui. 144 00:06:50,960 --> 00:06:53,630 E nós temos uma lista que aponta a esta estrutura, para começar. 145 00:06:53,630 --> 00:06:57,220 146 00:06:57,220 --> 00:07:00,485 Eu vou chamar mais um para ser exaustivo. 147 00:07:00,485 --> 00:07:04,209 148 00:07:04,209 --> 00:07:06,117 OK. 149 00:07:06,117 --> 00:07:07,480 Eu vou indicar isso adiante. 150 00:07:07,480 --> 00:07:09,550 E eu vou apontar que uma volta. 151 00:07:09,550 --> 00:07:10,360 Ops, desculpe. 152 00:07:10,360 --> 00:07:12,710 Sim, tenho essa para trás. 153 00:07:12,710 --> 00:07:15,548 154 00:07:15,548 --> 00:07:16,967 Fazê-lo novamente. 155 00:07:16,967 --> 00:07:18,330 OK, lá vamos nós. 156 00:07:18,330 --> 00:07:19,910 Tudo bem, entendi. 157 00:07:19,910 --> 00:07:21,780 OK, aqui está a nossa imagem. 158 00:07:21,780 --> 00:07:24,860 >> OK, por isso queremos considerar dois casos. 159 00:07:24,860 --> 00:07:27,330 O primeiro caso é se o nó que deseja excluir 160 00:07:27,330 --> 00:07:29,420 é logo no início da nossa lista. 161 00:07:29,420 --> 00:07:34,070 E, em seguida, o segundo caso que queremos a considerar é se é em qualquer outro lugar. 162 00:07:34,070 --> 00:07:37,660 Eu entendo que isso um totalmente bagunçado desenho com todo o meu apagamento, 163 00:07:37,660 --> 00:07:40,400 mas espero que nós vamos tentar deixar isso claro com algum código. 164 00:07:40,400 --> 00:07:45,450 >> OK, então vamos cobrir o caso onde encontramos o nosso nó, 165 00:07:45,450 --> 00:07:48,900 e é no próprio início da nossa lista ligada. 166 00:07:48,900 --> 00:07:50,810 Alguém me dar um sugestão quanto ao que aqui 167 00:07:50,810 --> 00:07:54,684 Que devo fazer para realmente remover o nosso nó? 168 00:07:54,684 --> 00:07:55,970 É um pouco complicado. 169 00:07:55,970 --> 00:07:56,470 OK? 170 00:07:56,470 --> 00:07:59,628 >> AUDIÊNCIA: Você tem que ter o nó que seria antes de 171 00:07:59,628 --> 00:08:01,794 e torná-lo apontar para o aquele que seria depois, 172 00:08:01,794 --> 00:08:03,004 e tirar o nó que seria após lo e torná- 173 00:08:03,004 --> 00:08:04,554 -lo apontar para o nó antes dele. 174 00:08:04,554 --> 00:08:05,220 HANNAH: Exatamente. 175 00:08:05,220 --> 00:08:10,640 OK, então este é o caso where-- temos dois casos. 176 00:08:10,640 --> 00:08:14,100 Temos o caso em que o nó que estamos procurando 177 00:08:14,100 --> 00:08:18,270 é a frente da lista. 178 00:08:18,270 --> 00:08:23,110 OK, e em seguida, o caso que você descrito é de outra maneira, certo? 179 00:08:23,110 --> 00:08:24,500 É em outro lugar na lista. 180 00:08:24,500 --> 00:08:27,460 181 00:08:27,460 --> 00:08:32,840 Então você disse, precisamos olhar para o nó anterior, 182 00:08:32,840 --> 00:08:36,500 e fazer o nó anterior aponta para o próximo nó. 183 00:08:36,500 --> 00:08:40,510 Então, vamos dizer que estamos tentando tirar cinco 184 00:08:40,510 --> 00:08:43,059 no meu desenho muito bagunçado aqui. 185 00:08:43,059 --> 00:08:47,530 Nós queremos ter certeza de que quatro agora aponta para seis. 186 00:08:47,530 --> 00:08:49,590 Quatro é o próximo a seis pontos. 187 00:08:49,590 --> 00:08:52,150 E seis de pontos anteriores a quatro. 188 00:08:52,150 --> 00:08:53,960 Esse é o nosso objetivo aqui, certo? 189 00:08:53,960 --> 00:08:56,150 Isto é o que eu acho que você apenas disse ali. 190 00:08:56,150 --> 00:08:58,450 >> OK, então vamos começar o primeiro pedaço. 191 00:08:58,450 --> 00:09:02,300 Vamos fazer a ter a ponteiro anterior anterior. 192 00:09:02,300 --> 00:09:06,550 193 00:09:06,550 --> 00:09:09,690 Então, quatro do próximo deve apontar para o que? 194 00:09:09,690 --> 00:09:13,210 195 00:09:13,210 --> 00:09:14,900 Precisamente, neste caso, seis. 196 00:09:14,900 --> 00:09:18,470 Assim, devemos dizer ponteiro, em seguida. 197 00:09:18,470 --> 00:09:20,600 OK? 198 00:09:20,600 --> 00:09:21,150 Tudo certo. 199 00:09:21,150 --> 00:09:24,870 Então, vamos nos livrar da imagem feia e tentar tirar um pouco Buscamos um. 200 00:09:24,870 --> 00:09:29,040 201 00:09:29,040 --> 00:09:31,172 Nós temos nossa cabeça lista aqui. 202 00:09:31,172 --> 00:09:36,440 203 00:09:36,440 --> 00:09:42,740 E que aponta para o primeiro nó nossa lista ligada, o que dissemos é quatro. 204 00:09:42,740 --> 00:09:45,620 Aqui está o nosso segundo nó, cinco. 205 00:09:45,620 --> 00:09:47,307 E o nosso terceiro nó, seis. 206 00:09:47,307 --> 00:09:50,265 Apenas tentando desenhar exatamente o mesmo imagem, apenas um pouco mais limpa. 207 00:09:50,265 --> 00:09:52,780 208 00:09:52,780 --> 00:09:56,280 OK, portanto, quatro do próximo originalmente aponta para cinco. 209 00:09:56,280 --> 00:09:58,620 Cinco da próximos pontos a seis. 210 00:09:58,620 --> 00:10:00,170 Seis de pontos anteriores a cinco. 211 00:10:00,170 --> 00:10:02,470 E cinco de pontos anteriores a quatro. 212 00:10:02,470 --> 00:10:03,360 Muito mais bonitos! 213 00:10:03,360 --> 00:10:04,530 OK, legal. 214 00:10:04,530 --> 00:10:07,770 >> Então, agora, o que nós fizemos apenas aqui, esta linha de código, 215 00:10:07,770 --> 00:10:12,680 que diz ponteiro anterior ao lado, então o que é que isso significa? 216 00:10:12,680 --> 00:10:17,540 Isso significa que se nós estamos olhando para cinco, ir para o nó anterior, 217 00:10:17,540 --> 00:10:21,970 e é próximo deve agora aponte para cinco do próximo. 218 00:10:21,970 --> 00:10:27,840 Então, basicamente, o que é isso que faz é que está apagando esta seta 219 00:10:27,840 --> 00:10:29,640 e torná-lo pular sobre cinco. 220 00:10:29,640 --> 00:10:31,360 Está claro? 221 00:10:31,360 --> 00:10:33,200 Eu sei que pode ser um pouco esboçado. 222 00:10:33,200 --> 00:10:34,480 Vejo alguns acenos de cabeça. 223 00:10:34,480 --> 00:10:35,390 Isso é bom. 224 00:10:35,390 --> 00:10:36,670 OK, legal. 225 00:10:36,670 --> 00:10:39,590 Agora, qual é o próximo passo? 226 00:10:39,590 --> 00:10:42,060 >> Eu redefinir o próximo. 227 00:10:42,060 --> 00:10:45,297 Agora, o que a outra seta eu preciso mudar? 228 00:10:45,297 --> 00:10:46,130 Este aqui. 229 00:10:46,130 --> 00:10:47,560 Seis da anterior. 230 00:10:47,560 --> 00:10:50,620 Nós não queremos seis do anterior para apontar para mais de cinco. 231 00:10:50,620 --> 00:10:54,580 Queremos que ele aponta para quatro. 232 00:10:54,580 --> 00:10:56,190 Será que a imagem faz sentido? 233 00:10:56,190 --> 00:10:58,370 Então agora podemos realmente ter cinco. 234 00:10:58,370 --> 00:10:59,370 Então, vamos começar essa parte. 235 00:10:59,370 --> 00:11:03,390 236 00:11:03,390 --> 00:11:11,180 O que devo fazer antes de eu redefinir seis do anterior para quatro? 237 00:11:11,180 --> 00:11:14,360 Todas as idéias lá? 238 00:11:14,360 --> 00:11:17,369 >> AUDIÊNCIA: Liberte o nó entre -los, definindo-o como nulo? 239 00:11:17,369 --> 00:11:17,910 HANNAH: Cool. 240 00:11:17,910 --> 00:11:21,100 Definitivamente, nosso objetivo final é vai ser para libertar o nó. 241 00:11:21,100 --> 00:11:22,490 Assim, podemos fazer isso aqui mesmo. 242 00:11:22,490 --> 00:11:23,540 Ponteiro gratuito. 243 00:11:23,540 --> 00:11:24,810 Absolutamente. 244 00:11:24,810 --> 00:11:29,160 Mas, mesmo antes disso, vamos só-- nosso direito objetivo 245 00:11:29,160 --> 00:11:38,730 aqui é definir ponteiro próximo anterior igual ao ponteiro anterior. 246 00:11:38,730 --> 00:11:40,760 Eu sei que isto está a ficar encoberto. 247 00:11:40,760 --> 00:11:45,440 OK, vamos take-- legal. 248 00:11:45,440 --> 00:11:46,990 Todos podem ver esta linha de fundo? 249 00:11:46,990 --> 00:11:47,840 Ou é super pequena? 250 00:11:47,840 --> 00:11:50,430 251 00:11:50,430 --> 00:11:54,300 >> Então, antes de executar esta linha aqui, queremos 252 00:11:54,300 --> 00:11:58,375 para se certificar de que ponteiro próximo não é nulo. 253 00:11:58,375 --> 00:12:00,500 Porque se ponteiro próximo é null, que tipo de erro 254 00:12:00,500 --> 00:12:02,727 vou receber quando eu tento referência a um ponteiro nulo? 255 00:12:02,727 --> 00:12:03,560 AUDIÊNCIA: Seg culpa. 256 00:12:03,560 --> 00:12:05,660 HANNAH: uma falha seg, bonito. 257 00:12:05,660 --> 00:12:09,690 OK, então, se isso não é null, então nós podemos repor. 258 00:12:09,690 --> 00:12:14,420 E nós temos seis pontos novamente para quatro. 259 00:12:14,420 --> 00:12:17,440 Perguntas até este ponto? 260 00:12:17,440 --> 00:12:17,940 Sim? 261 00:12:17,940 --> 00:12:19,814 >> AUDIÊNCIA: Em sua primeira if, não é 262 00:12:19,814 --> 00:12:23,817 significa ter a seta seguinte, ou [inaudível]? 263 00:12:23,817 --> 00:12:25,150 HANNAH: Eu quis dizer seta ponteiro n. 264 00:12:25,150 --> 00:12:30,270 Então, basicamente, o que eu estou tentando fazer é dizer, o nó atual que eu sou 265 00:12:30,270 --> 00:12:34,100 iteração sobre, o nó atual que Eu estou olhando, estou armazenando no ponteiro. 266 00:12:34,100 --> 00:12:37,630 E eu quero saber ponteiro do valor, que neste caso é o n. 267 00:12:37,630 --> 00:12:39,500 E eu quero ver, é o nó que eu estou procurando 268 00:12:39,500 --> 00:12:42,790 para o nó que eu estou com o objetivo de excluir? 269 00:12:42,790 --> 00:12:47,657 Então é por isso que temos aqui ponteiro n. 270 00:12:47,657 --> 00:12:49,857 >> AUDIÊNCIA: Então, a seta que vai para n, você define o valor 271 00:12:49,857 --> 00:12:52,058 e armazená-lo em um nó chamado n? 272 00:12:52,058 --> 00:12:55,410 273 00:12:55,410 --> 00:12:58,820 >> HANNAH: Então, é como se eu sou passando por essa lista ligada 274 00:12:58,820 --> 00:13:00,310 e apontando para cinco. 275 00:13:00,310 --> 00:13:03,600 Se eu quiser obter esse valor, se Quero obter esse número, 5, 276 00:13:03,600 --> 00:13:06,400 Eu tenho que fazer ponteiro de seta n. 277 00:13:06,400 --> 00:13:06,900 Legal? 278 00:13:06,900 --> 00:13:07,900 Sim. 279 00:13:07,900 --> 00:13:11,200 >> AUDIÊNCIA: é N o nome da variável? 280 00:13:11,200 --> 00:13:11,700 HANNAH: Sim. 281 00:13:11,700 --> 00:13:14,870 Então, se nós virar para trás um deslizante, n é o nome 282 00:13:14,870 --> 00:13:18,660 do valor dentro do nó na nossa lista ligada. 283 00:13:18,660 --> 00:13:21,510 E eu sei que ele pode ficar um pouco pouco confuso porque nós também 284 00:13:21,510 --> 00:13:24,680 estão chamando a coisa que queremos excluir n. 285 00:13:24,680 --> 00:13:26,717 Então é aí que uma linha vem. 286 00:13:26,717 --> 00:13:27,671 Sim? 287 00:13:27,671 --> 00:13:31,010 >> AUDIÊNCIA: O que você tem [Inaudível] como eles funcionam? 288 00:13:31,010 --> 00:13:33,872 289 00:13:33,872 --> 00:13:35,780 Um ponteiro [inaudível]? 290 00:13:35,780 --> 00:13:37,520 >> HANNAH: Claro. 291 00:13:37,520 --> 00:13:40,027 Você está falando que about-- line? 292 00:13:40,027 --> 00:13:41,526 AUDIÊNCIA: A última linha [inaudível]. 293 00:13:41,526 --> 00:13:44,280 294 00:13:44,280 --> 00:13:45,250 >> HANNAH: Claro, OK. 295 00:13:45,250 --> 00:13:48,540 Então, vamos olhar para a imagem em Para tentar explicar isso. 296 00:13:48,540 --> 00:13:51,030 Sinto muito, para o câmera, a questão era 297 00:13:51,030 --> 00:13:54,580 podemos explicar ponteiro ponteiro de seta próximo anterior. 298 00:13:54,580 --> 00:14:01,510 OK, então vamos dizer que estamos em cinco e nosso objetivo é excluir cinco. 299 00:14:01,510 --> 00:14:07,240 Então ponteiro seguinte, qual destes três nós que isso nos dá? 300 00:14:07,240 --> 00:14:10,840 Isso nos leva ao sexto nó, certo? 301 00:14:10,840 --> 00:14:16,490 >> OK, então agora nós estamos pedindo para a seis do anterior. 302 00:14:16,490 --> 00:14:17,060 OK? 303 00:14:17,060 --> 00:14:20,210 E nós estamos redefinindo esta ser igual a quatro, 304 00:14:20,210 --> 00:14:23,214 que passou a ser de cinco da anterior. 305 00:14:23,214 --> 00:14:25,180 Eu sei, é super difícil de acompanhar. 306 00:14:25,180 --> 00:14:29,286 Eu realmente recomendo que você tirar fotos se você receber uma pergunta como esta. 307 00:14:29,286 --> 00:14:30,242 Sim? 308 00:14:30,242 --> 00:14:32,617 >> AUDIÊNCIA: É a razão que não temos um [inaudível]? 309 00:14:32,617 --> 00:14:37,430 310 00:14:37,430 --> 00:14:38,570 >> HANNAH: Exatamente. 311 00:14:38,570 --> 00:14:44,800 Então, a pergunta era: por que fazer não precisa verificar aqui? 312 00:14:44,800 --> 00:14:48,160 Por que não temos de verificar que ponteiro anterior não é igual a nulo? 313 00:14:48,160 --> 00:14:50,070 E é porque nós temos já separados 314 00:14:50,070 --> 00:14:52,490 o caso se do ponteiro logo no início. 315 00:14:52,490 --> 00:14:54,060 Muito boa pergunta. 316 00:14:54,060 --> 00:14:56,880 Mais alguma coisa sobre isso? 317 00:14:56,880 --> 00:14:57,380 OK, legal. 318 00:14:57,380 --> 00:14:58,360 Então, vamos terminá-la. 319 00:14:58,360 --> 00:14:59,890 Estamos quase lá. 320 00:14:59,890 --> 00:15:01,310 >> Então, o que se está na cabeça? 321 00:15:01,310 --> 00:15:03,360 E se em vez de tentando excluir cinco, 322 00:15:03,360 --> 00:15:06,240 nós realmente queria excluir quatro? 323 00:15:06,240 --> 00:15:07,270 O que eu tenho que fazer? 324 00:15:07,270 --> 00:15:09,610 Bem, eu quero redefinir minha cabeça para o quê? 325 00:15:09,610 --> 00:15:14,288 326 00:15:14,288 --> 00:15:15,585 Grito ele para fora? 327 00:15:15,585 --> 00:15:16,710 AUDIÊNCIA: A um depois. 328 00:15:16,710 --> 00:15:17,460 HANNAH: Beautiful. 329 00:15:17,460 --> 00:15:26,430 OK, por isso queremos listar estar apontando a tudo o que o nosso ponteiro próximo nó é. 330 00:15:26,430 --> 00:15:29,040 Bom. 331 00:15:29,040 --> 00:15:30,810 E apenas para a integralidade da sake, faríamos 332 00:15:30,810 --> 00:15:35,590 querer verificar que, enquanto nossa lista não é nulo, desde que nossa lista não é 333 00:15:35,590 --> 00:15:42,730 vazio, então nós queremos definir nossa anterior igual a null. 334 00:15:42,730 --> 00:15:46,960 335 00:15:46,960 --> 00:15:50,230 Pergunta até agora? 336 00:15:50,230 --> 00:15:53,205 A um passo de--? 337 00:15:53,205 --> 00:15:55,530 >> AUDIÊNCIA: seria se lista não é igual a nulo? 338 00:15:55,530 --> 00:15:56,950 >> HANNAH: Sim, você está totalmente certo. 339 00:15:56,950 --> 00:15:58,130 Eu sinto muito. 340 00:15:58,130 --> 00:16:00,040 É lista não é igual a nulo. 341 00:16:00,040 --> 00:16:01,915 Impressionante. 342 00:16:01,915 --> 00:16:04,245 Tentando trazer tudo isso na tela. 343 00:16:04,245 --> 00:16:06,870 É uma espécie de cair. 344 00:16:06,870 --> 00:16:07,730 Desculpe, pessoal. 345 00:16:07,730 --> 00:16:11,874 E por último mas não menos importante, todos que temos a fazer é retorno. 346 00:16:11,874 --> 00:16:12,840 OK. 347 00:16:12,840 --> 00:16:15,400 Isso era muito abarrotado em muito rapidamente. 348 00:16:15,400 --> 00:16:16,800 Tome um segundo olhar sobre isso. 349 00:16:16,800 --> 00:16:18,216 Diga-me se você tiver quaisquer perguntas. 350 00:16:18,216 --> 00:16:20,232 351 00:16:20,232 --> 00:16:20,732 Sim? 352 00:16:20,732 --> 00:16:26,940 >> AUDIÊNCIA: Se a lista está no cabeça, entăo-- esperar, deixa pra lá. 353 00:16:26,940 --> 00:16:27,700 >> HANNAH: OK, bom. 354 00:16:27,700 --> 00:16:30,987 Então, isso é se a lista está na cabeça, nós removê-lo para o que quer que nós inserido. 355 00:16:30,987 --> 00:16:31,486 Sim? 356 00:16:31,486 --> 00:16:33,777 >> AUDIÊNCIA: Você pode explicar a primeira declaração se novamente? 357 00:16:33,777 --> 00:16:36,149 Se o ponteiro de n é igual a n? 358 00:16:36,149 --> 00:16:36,690 HANNAH: Claro. 359 00:16:36,690 --> 00:16:42,780 Assim, nosso objetivo dessa função toda é para excluir o nó que tem valor n. 360 00:16:42,780 --> 00:16:47,460 Então, se nós encontrarmos, como estamos iteração através de nossa lista, 361 00:16:47,460 --> 00:16:51,770 o nó com valor n, que é aquele que deseja excluir. 362 00:16:51,770 --> 00:16:57,286 Então, tudo o apagamento acontece dentro desse grande se comunicado. 363 00:16:57,286 --> 00:16:58,593 Será que isso faz sentido? 364 00:16:58,593 --> 00:16:59,480 Com estilo. 365 00:16:59,480 --> 00:16:59,990 Sim? 366 00:16:59,990 --> 00:17:02,864 >> AUDIÊNCIA: Talvez você só não pode ver -lo, mas você também não precisa de uma linha 367 00:17:02,864 --> 00:17:06,024 para percorrer a lista? 368 00:17:06,024 --> 00:17:06,690 HANNAH: Awesome. 369 00:17:06,690 --> 00:17:10,896 Vamos trazer isso um pouco, e vamos jogar esse direito na parte inferior. 370 00:17:10,896 --> 00:17:13,282 371 00:17:13,282 --> 00:17:15,490 Talvez o conselho teria sido uma idéia um pouco melhor. 372 00:17:15,490 --> 00:17:17,829 Então, como é que eu iria mover ponteiro para a frente? 373 00:17:17,829 --> 00:17:20,184 >> AUDIÊNCIA: Pointer é igual a mais um ponteiro. 374 00:17:20,184 --> 00:17:21,599 >> HANNAH: Beautiful. 375 00:17:21,599 --> 00:17:25,050 Assim que nos permite continuar a iteração através. 376 00:17:25,050 --> 00:17:26,251 OK. 377 00:17:26,251 --> 00:17:27,750 AUDIÊNCIA: Não haveria uma pessoa? 378 00:17:27,750 --> 00:17:29,028 HANNAH: mais uma vez? 379 00:17:29,028 --> 00:17:32,444 AUDIÊNCIA: Não haveria uma outra pessoa depois da grande e velho se 380 00:17:32,444 --> 00:17:35,519 declaração [inaudível]? 381 00:17:35,519 --> 00:17:36,310 HANNAH: Qual parte? 382 00:17:36,310 --> 00:17:38,350 Sinto muito. 383 00:17:38,350 --> 00:17:41,800 >> AUDIÊNCIA: A travessia, não deve haver uma pessoa? 384 00:17:41,800 --> 00:17:43,550 HANNAH: Você absolutamente poderia ter um outro lugar. 385 00:17:43,550 --> 00:17:46,930 Porque eu tenho o direito de retorno lá, você não precisa de uma outra pessoa. 386 00:17:46,930 --> 00:17:48,760 Mas sim, boa pergunta. 387 00:17:48,760 --> 00:17:50,170 OK, não é? 388 00:17:50,170 --> 00:17:52,878 AUDIÊNCIA: Podemos pensar de ponteiro que está se movendo através da lista 389 00:17:52,878 --> 00:17:56,610 como tomar sobre o valor de cada nó na lista? 390 00:17:56,610 --> 00:18:00,650 Ou devemos pensar nele como tipo de externo à lista? 391 00:18:00,650 --> 00:18:02,350 >> HANNAH: Qualquer um dos dois é bom, eu acho. 392 00:18:02,350 --> 00:18:05,880 A forma como eu imagino que é Eu digo: OK, estou ponteiro. 393 00:18:05,880 --> 00:18:06,520 E isso é comigo. 394 00:18:06,520 --> 00:18:07,150 Esta é a minha mão. 395 00:18:07,150 --> 00:18:09,960 Eu estou indo para apontar para o diferente coisas que eu quero para percorrer. 396 00:18:09,960 --> 00:18:12,270 Em primeiro lugar, eu vou apontar à cabeça da lista. 397 00:18:12,270 --> 00:18:14,144 E isso me diz que eu sou indo para apontar para quatro. 398 00:18:14,144 --> 00:18:18,060 E assim me, sendo externo à lista, Eu pode apontar para cada um desses elementos. 399 00:18:18,060 --> 00:18:19,520 Então, eu penso em mim como ponteiro. 400 00:18:19,520 --> 00:18:21,645 AUDIÊNCIA: Então, quando você excluir um desses elementos, 401 00:18:21,645 --> 00:18:23,404 você excluir-se, por assim dizer. 402 00:18:23,404 --> 00:18:24,070 HANNAH: Exatamente. 403 00:18:24,070 --> 00:18:25,920 Então você excluir a coisa você está apontando. 404 00:18:25,920 --> 00:18:28,340 Assim, no exemplo que vimos onde estamos 405 00:18:28,340 --> 00:18:31,670 tentando excluir cinco, quando eu estou apontando para cinco, 406 00:18:31,670 --> 00:18:34,200 Eu quero excluir o coisa que eu estou apontando. 407 00:18:34,200 --> 00:18:35,870 Exatamente. 408 00:18:35,870 --> 00:18:36,577 Sim? 409 00:18:36,577 --> 00:18:39,410 AUDIÊNCIA: tomamos cuidado do caso em que n não está na lista? 410 00:18:39,410 --> 00:18:40,460 HANNAH: Se n não está na lista? 411 00:18:40,460 --> 00:18:43,501 Tudo o que vai acontecer é que você está indo para percorrer e iterate 412 00:18:43,501 --> 00:18:47,616 através de e, em seguida, você vai para chegar ao ponteiro sendo nula, 413 00:18:47,616 --> 00:18:48,990 e, em seguida, você vai ser feito. 414 00:18:48,990 --> 00:18:50,812 >> AUDIÊNCIA: Então nós temos para retornar alguma coisa? 415 00:18:50,812 --> 00:18:51,520 HANNAH: podíamos. 416 00:18:51,520 --> 00:18:54,500 A maneira que se definiu este função, eu apenas dizer que ele retorna 417 00:18:54,500 --> 00:18:55,770 invalidar independentemente. 418 00:18:55,770 --> 00:18:58,360 Mas você poderia ter algo como voltar para um número inteiro, 419 00:18:58,360 --> 00:19:00,920 e tê-lo retornar 1 negativo se ele falhar. 420 00:19:00,920 --> 00:19:03,070 Algo assim. 421 00:19:03,070 --> 00:19:04,494 Perguntas com-- sim? 422 00:19:04,494 --> 00:19:05,410 AUDIÊNCIA: [inaudível]? 423 00:19:05,410 --> 00:19:05,993 HANNAH: Desculpe? 424 00:19:05,993 --> 00:19:07,419 AUDIÊNCIA: [inaudível]? 425 00:19:07,419 --> 00:19:07,960 HANNAH: Claro. 426 00:19:07,960 --> 00:19:11,730 Então essa é a actual-- Assim que tivermos feito todo este trabalho de mover 427 00:19:11,730 --> 00:19:16,530 todas estas setas ao redor, todo o nosso objetivo era livrar-se do nó 428 00:19:16,530 --> 00:19:18,230 que estamos procurando. 429 00:19:18,230 --> 00:19:21,610 Portanto, neste caso, liberando ponteiro, se eu estou apontando para cinco, 430 00:19:21,610 --> 00:19:24,670 é como apagar esse nó meio. 431 00:19:24,670 --> 00:19:27,250 Essa é a parte ponteiro livre. 432 00:19:27,250 --> 00:19:29,090 Isso faz sentido? 433 00:19:29,090 --> 00:19:31,390 >> AUDIÊNCIA: Então mesmo pensamento você fez não [inaudível]? 434 00:19:31,390 --> 00:19:36,060 >> HANNAH: Então nós assumido no início tivemos alguma lista que foi já-- 435 00:19:36,060 --> 00:19:37,220 eles tinham colocar isso junto. 436 00:19:37,220 --> 00:19:39,761 Portanto, a fim de construir esta lista, eles devem ter [inaudível]. 437 00:19:39,761 --> 00:19:42,190 438 00:19:42,190 --> 00:19:42,750 Com estilo. 439 00:19:42,750 --> 00:19:44,490 Mais alguma coisa com isso? 440 00:19:44,490 --> 00:19:46,386 Sim? 441 00:19:46,386 --> 00:19:49,204 >> AUDIÊNCIA: E se a lista não é igual a linha null? 442 00:19:49,204 --> 00:19:49,704 [Inaudível]? 443 00:19:49,704 --> 00:19:52,289 444 00:19:52,289 --> 00:19:53,080 HANNAH: Bem aqui? 445 00:19:53,080 --> 00:19:53,840 AUDIÊNCIA: Yeah. 446 00:19:53,840 --> 00:19:57,370 HANNAH: OK, tudo o que eu estou fazendo é que eu estou apenas certificando-se 447 00:19:57,370 --> 00:20:03,250 que antes de eu tentar lista desreferenciava, antes de eu tentar acessar o anterior, 448 00:20:03,250 --> 00:20:07,210 Eu quero ter certeza de que não é nula, então eu não receber uma falha seg. 449 00:20:07,210 --> 00:20:08,400 Com estilo. 450 00:20:08,400 --> 00:20:10,820 >> OK, eu sei que isto foi bastante muito para passar. 451 00:20:10,820 --> 00:20:14,950 Então este slide será disponibilizado para você. 452 00:20:14,950 --> 00:20:17,341 Assim, você pode passar por isso com mais detalhe. 453 00:20:17,341 --> 00:20:17,841 Sim? 454 00:20:17,841 --> 00:20:19,749 >> AUDIÊNCIA: Por que a lista [inaudível]? 455 00:20:19,749 --> 00:20:24,129 456 00:20:24,129 --> 00:20:24,670 HANNAH: Claro. 457 00:20:24,670 --> 00:20:27,390 Então lista realmente aponta para esse elemento aqui, 458 00:20:27,390 --> 00:20:29,200 o primeiro elemento na lista. 459 00:20:29,200 --> 00:20:30,748 Portanto, não pode ter um anterior. 460 00:20:30,748 --> 00:20:31,736 Sim? 461 00:20:31,736 --> 00:20:35,194 >> AUDIÊNCIA: Será que o ponto de ponteiro para o mesmo endereço na memória? 462 00:20:35,194 --> 00:20:38,404 Será que apontam para o mesmo endereço na memória como o nó 463 00:20:38,404 --> 00:20:40,640 que ele está apontando para? 464 00:20:40,640 --> 00:20:43,865 >> HANNAH: Sim, ele aponta a este nó na memória. 465 00:20:43,865 --> 00:20:47,190 >> AUDIÊNCIA: Certo, então quando você [inaudível]? 466 00:20:47,190 --> 00:20:50,580 >> HANNAH: Em certo sentido, sim. 467 00:20:50,580 --> 00:20:51,280 OK. 468 00:20:51,280 --> 00:20:52,997 Tudo bem, vamos passar junto com este. 469 00:20:52,997 --> 00:20:55,330 E se você tiver mais dúvidas, ficar por aqui no final, 470 00:20:55,330 --> 00:20:57,130 e nós podemos passar por isso novamente. 471 00:20:57,130 --> 00:20:58,120 OK, legal. 472 00:20:58,120 --> 00:21:00,490 Agora, temos de seguir em frente hash tabelas, tentativas, 473 00:21:00,490 --> 00:21:04,940 e árvores, o que você tem super- familiarizados com in-p definir cinco, Speller. 474 00:21:04,940 --> 00:21:11,020 >> Então tabela hash é apenas um matriz com listas individualmente ligados 475 00:21:11,020 --> 00:21:14,050 ou duplamente ligada listas que saem dela. 476 00:21:14,050 --> 00:21:16,380 Então nós temos algum tipo de matriz associativa. 477 00:21:16,380 --> 00:21:21,280 E como sabemos qual delas matrizes baldes para entrar, 478 00:21:21,280 --> 00:21:24,137 usamos uma função hash. 479 00:21:24,137 --> 00:21:26,470 Portanto, neste caso, alguém pode adivinhar o que a função hash 480 00:21:26,470 --> 00:21:28,636 seriam apenas com base em alguns de entrada e de saída? 481 00:21:28,636 --> 00:21:31,392 482 00:21:31,392 --> 00:21:33,194 >> AUDIÊNCIA: número letra do alfabeto. 483 00:21:33,194 --> 00:21:33,860 HANNAH: Exatamente. 484 00:21:33,860 --> 00:21:36,160 Ele só coloca-los em ordem alfabética. 485 00:21:36,160 --> 00:21:39,280 Tudo que começa com um Um é colocado no primeiro recipiente. 486 00:21:39,280 --> 00:21:43,340 Tudo com um B é colocado no segundo balde, assim por diante, e assim por diante. 487 00:21:43,340 --> 00:21:45,620 Awesome, OK. 488 00:21:45,620 --> 00:21:48,980 E é uma função hash qualquer função que leva em uma palavra 489 00:21:48,980 --> 00:21:51,910 e vai dizer o que caçamba pertence in. 490 00:21:51,910 --> 00:21:55,150 Assim que a entrada em nossa matriz que pertence. 491 00:21:55,150 --> 00:21:58,080 >> Então, toda vez que eu dou a minha hash de funcionar uma palavra, 492 00:21:58,080 --> 00:22:00,660 ele deve dizer-me o mesmo coloque a cada momento. 493 00:22:00,660 --> 00:22:03,270 Então, se nós usamos a função hash a partir do slide anterior 494 00:22:03,270 --> 00:22:05,950 onde estamos a ordenação pelo primeira letra do alfabeto, 495 00:22:05,950 --> 00:22:08,230 toda vez que eu dou a minha função hash "maçã" 496 00:22:08,230 --> 00:22:10,180 ele deve sempre dar-me de volta 0. 497 00:22:10,180 --> 00:22:12,890 Então, se eu tenho uma maçã para colocar no meu tabela hash, 498 00:22:12,890 --> 00:22:17,700 se eu der "maçã" na minha função hash, ele deve dizer, vai colocá-lo no balde 0. 499 00:22:17,700 --> 00:22:19,980 Se eu estou procurando uma maçã na minha tabela hash 500 00:22:19,980 --> 00:22:24,340 e eu digo, onde forças de maçã ao vivo, você pergunta a função hash. 501 00:22:24,340 --> 00:22:26,900 E diz, vá para o balde 0. 502 00:22:26,900 --> 00:22:29,150 Tudo certo? 503 00:22:29,150 --> 00:22:32,660 Perguntas com funções hash? 504 00:22:32,660 --> 00:22:34,570 Impressionante. 505 00:22:34,570 --> 00:22:37,320 >> Aqui é um pouco mais explicação detalhada 506 00:22:37,320 --> 00:22:39,570 do que uma função hash pode parecer. 507 00:22:39,570 --> 00:22:42,230 508 00:22:42,230 --> 00:22:42,960 Tudo certo. 509 00:22:42,960 --> 00:22:45,960 Agora, o problema com haxixe funções é em um mundo ideal, 510 00:22:45,960 --> 00:22:48,870 só teríamos um coisa em cada balde. 511 00:22:48,870 --> 00:22:50,900 Mas, na realidade, não há não apenas uma palavra 512 00:22:50,900 --> 00:22:54,280 que começa com A. Não há apenas uma palavra que começa com B. Então, 513 00:22:54,280 --> 00:22:56,960 neste caso, se de repente ficar "berry", 514 00:22:56,960 --> 00:22:58,710 e queremos colocá-lo em nossa tabela hash, 515 00:22:58,710 --> 00:23:03,640 e vemos, oh, não, banana é já está lá, o que vamos fazer? 516 00:23:03,640 --> 00:23:05,900 >> Bem, nós temos duas opções. 517 00:23:05,900 --> 00:23:07,990 A primeira opção é linear de sondagem, que 518 00:23:07,990 --> 00:23:11,100 significa apenas que vão encontrar o recipiente vazio seguinte. 519 00:23:11,100 --> 00:23:14,100 Vá encontrar a próxima entrada matriz vazia. 520 00:23:14,100 --> 00:23:15,750 E só colocar "berry" ali. 521 00:23:15,750 --> 00:23:18,880 Então eu sei que é suposto ir com banana no balde um. 522 00:23:18,880 --> 00:23:22,155 Mas basta colocá-lo no balde três, porque três balde está vazio. 523 00:23:22,155 --> 00:23:24,806 524 00:23:24,806 --> 00:23:26,680 Outra opção é provavelmente o que você implementar 525 00:23:26,680 --> 00:23:29,220 em sua p-set, onde você teve encadeamento separado. 526 00:23:29,220 --> 00:23:33,990 Assim, cada um de seus baldes, cada um dos seus elementos da matriz, 527 00:23:33,990 --> 00:23:38,410 não só mantém uma palavras, mas, na verdade, contém um ponteiro para uma lista de palavras. 528 00:23:38,410 --> 00:23:41,880 Assim que se você tivesse banana em seu tabela hash 529 00:23:41,880 --> 00:23:44,740 e de repente você queria adicionar berry, não há problema. 530 00:23:44,740 --> 00:23:51,110 Basta adicionar berry até o fim, ou para o início, da sua lista encadeada. 531 00:23:51,110 --> 00:23:54,040 OK, impressionante. 532 00:23:54,040 --> 00:23:58,490 Perguntas com haxixe tabelas antes de ir em frente? 533 00:23:58,490 --> 00:23:59,850 >> Tudo certo. 534 00:23:59,850 --> 00:24:01,070 As árvores e as tentativas. 535 00:24:01,070 --> 00:24:07,980 OK, então isso foi uma outra opção para a implementação de dicionário. 536 00:24:07,980 --> 00:24:09,100 Você poderia ter feito uma tentativa. 537 00:24:09,100 --> 00:24:13,420 Portanto, é um tipo especial de árvore que comporta-se como uma tabela hash multi-nível. 538 00:24:13,420 --> 00:24:16,862 Então, você vai ver a foto onde você tem uma matriz que 539 00:24:16,862 --> 00:24:19,320 aponta para um grupo de matrizes que apontam para um grupo de matrizes 540 00:24:19,320 --> 00:24:20,390 que apontam para um grupo de arrays. 541 00:24:20,390 --> 00:24:23,140 E vamos ver exatamente o que ficaria em um futuro slide. 542 00:24:23,140 --> 00:24:26,070 E de modo mais geral, uma árvore é qualquer estrutura de dados 543 00:24:26,070 --> 00:24:29,710 no qual os dados organizadas em alguns hierarquia. 544 00:24:29,710 --> 00:24:32,610 Então, onde vimos que temos algum tipo de entendimento 545 00:24:32,610 --> 00:24:36,130 de um nível superior, um nível próximo, um próximo nível, um nível seguinte. 546 00:24:36,130 --> 00:24:39,690 Portanto, este é provavelmente o mais claro com alguns exemplos específicos. 547 00:24:39,690 --> 00:24:40,880 Então aqui está a nossa árvore. 548 00:24:40,880 --> 00:24:42,970 Você pode ver que ele tem determinados níveis 549 00:24:42,970 --> 00:24:45,480 que começamos com esse nó raiz, um. 550 00:24:45,480 --> 00:24:47,640 E nós podemos ir para baixo através de nossa árvore. 551 00:24:47,640 --> 00:24:50,730 552 00:24:50,730 --> 00:24:53,910 >> Uma árvore binária é um determinado tipo de árvore. 553 00:24:53,910 --> 00:24:56,770 E a única especificação para uma árvore binária 554 00:24:56,770 --> 00:25:01,130 é que cada nó possui no máximo duas folhas. 555 00:25:01,130 --> 00:25:03,960 Então você não vai ver nenhuma destes nós tem três ou quatro 556 00:25:03,960 --> 00:25:06,880 ou algum outro número de folhas. 557 00:25:06,880 --> 00:25:11,310 E, em seguida, ainda mais específico é uma árvore de busca binária 558 00:25:11,310 --> 00:25:18,010 onde cada nó à esquerda do nó vai ter um valor menor. 559 00:25:18,010 --> 00:25:21,180 E cada valor para a direito vai ser maior. 560 00:25:21,180 --> 00:25:26,900 Então, se você ver 44 é a nossa raiz, para a esquerda, 11, 22, e 33 561 00:25:26,900 --> 00:25:28,940 são tudo menos do que a nossa raiz. 562 00:25:28,940 --> 00:25:33,890 E à direita são todos bigger-- números 66, 55 e 77. 563 00:25:33,890 --> 00:25:37,380 E esta propriedade é válido em todos os níveis da árvore. 564 00:25:37,380 --> 00:25:42,690 >> Por isso, quando descemos a 22, 11 e 33, ainda 11 565 00:25:42,690 --> 00:25:46,950 é menor do que 22 e 33 é maior do que 22. 566 00:25:46,950 --> 00:25:50,160 E isso faz com que seja mais fácil a busca porque se nós estamos olhando para um número, 567 00:25:50,160 --> 00:25:53,877 nós sabemos exatamente o que ramo de seguir para baixo. 568 00:25:53,877 --> 00:25:56,210 Portanto, este deve lembrá-lo um pouco de busca binária. 569 00:25:56,210 --> 00:25:56,967 Sim? 570 00:25:56,967 --> 00:25:58,835 >> AUDIÊNCIA: Então, quando você está descrevendo binário, 571 00:25:58,835 --> 00:26:00,587 você disse que tem no máximo duas folhas? 572 00:26:00,587 --> 00:26:01,170 HANNAH: Hum-hum. 573 00:26:01,170 --> 00:26:02,580 AUDIÊNCIA: Poderia ter menos? 574 00:26:02,580 --> 00:26:03,121 HANNAH: Yeah. 575 00:26:03,121 --> 00:26:06,720 Então, vamos dizer, por exemplo, você não têm um número par de coisas 576 00:26:06,720 --> 00:26:11,791 e você não poderia encher todo o seu folhas, é bom quando se tem um. 577 00:26:11,791 --> 00:26:12,290 OK? 578 00:26:12,290 --> 00:26:12,789 Impressionante. 579 00:26:12,789 --> 00:26:15,930 Quaisquer outras perguntas sobre as árvores? 580 00:26:15,930 --> 00:26:16,670 OK. 581 00:26:16,670 --> 00:26:20,110 >> Voltar para nossas tentativas como eu estava falando cerca de um pouco mais cedo, 582 00:26:20,110 --> 00:26:23,900 como nós temos essas matrizes multi-nível. 583 00:26:23,900 --> 00:26:26,280 Portanto, neste caso, nós começamos no topo. 584 00:26:26,280 --> 00:26:29,030 E nós pode seguir qualquer palavra para baixo. 585 00:26:29,030 --> 00:26:30,780 Então, vamos dizer que queríamos procurar Turing. 586 00:26:30,780 --> 00:26:34,380 Começamos em T, siga-o para baixo para uma matriz que contém U, 587 00:26:34,380 --> 00:26:37,350 e segui-lo para baixo, até que chegar a este pequeno delta que 588 00:26:37,350 --> 00:26:39,060 diz-nos, sim, você encontrou uma palavra. 589 00:26:39,060 --> 00:26:43,200 590 00:26:43,200 --> 00:26:44,120 Limpar em tentativas? 591 00:26:44,120 --> 00:26:48,138 Qualquer coisa de ir até lá? 592 00:26:48,138 --> 00:26:48,908 Sim? 593 00:26:48,908 --> 00:26:51,866 AUDIÊNCIA: Será que o símbolo do delta tem que ocupar o espaço dentro do try? 594 00:26:51,866 --> 00:26:54,532 HANNAH: Sim, por isso não faz necessariamente precisa nem ser um delta. 595 00:26:54,532 --> 00:26:57,760 Mas precisamos de alguma forma para dizer o nosso Computador-- sorry, 596 00:26:57,760 --> 00:27:01,130 para que possamos saber que TUR não é uma palavra. 597 00:27:01,130 --> 00:27:04,180 Porque vamos dizer que não tem este conceito de um delta, este conceito 598 00:27:04,180 --> 00:27:09,850 de parabéns, você encontrou uma palavra, ele iria passar e interagir T-U-R, 599 00:27:09,850 --> 00:27:11,300 e, em seguida, dizer, impressionante, eu achei! 600 00:27:11,300 --> 00:27:12,670 Deve ser uma palavra. 601 00:27:12,670 --> 00:27:13,720 Mas na verdade não é. 602 00:27:13,720 --> 00:27:15,310 Queremos todo Turing ser uma palavra. 603 00:27:15,310 --> 00:27:17,760 Portanto, temos de ter algo no final que diz, parabéns, 604 00:27:17,760 --> 00:27:19,051 você encontrou uma palavra legítima. 605 00:27:19,051 --> 00:27:21,680 AUDIÊNCIA: Então se você tivesse como 26 letras no alfabeto, 606 00:27:21,680 --> 00:27:24,560 se você realmente tem 27 chaves em sua tentativa? 607 00:27:24,560 --> 00:27:26,010 >> HANNAH: Awesome, sim. 608 00:27:26,010 --> 00:27:28,210 Então, na verdade, eu acho que será no próximo slide. 609 00:27:28,210 --> 00:27:29,440 Ta-da! 610 00:27:29,440 --> 00:27:32,880 Sempre que se você tem um nó em sua tentativa, você é 611 00:27:32,880 --> 00:27:35,800 vai ter 27 crianças, em vez de 26. 612 00:27:35,800 --> 00:27:39,010 613 00:27:39,010 --> 00:27:40,050 Qualquer dúvida com isso? 614 00:27:40,050 --> 00:27:40,550 Sim? 615 00:27:40,550 --> 00:27:44,569 AUDIÊNCIA: Por que você tenta pegar tão muito espaço [inaudível] como você vai? 616 00:27:44,569 --> 00:27:47,629 Por que é considerado [inaudível]? 617 00:27:47,629 --> 00:27:48,170 HANNAH: Claro. 618 00:27:48,170 --> 00:27:48,790 Vamos voltar. 619 00:27:48,790 --> 00:27:52,350 A questão é, por que são tentativas muito maior 620 00:27:52,350 --> 00:27:54,620 do que algo como uma tabela hash. 621 00:27:54,620 --> 00:27:57,790 Assim, para cada um destes níveis, mesmo que eles não são atraídos aqui, 622 00:27:57,790 --> 00:28:01,250 você tem que ter todos os 26 caracteres. 623 00:28:01,250 --> 00:28:04,420 E a razão que você não pode digo, oh, mas como para Turing, I 624 00:28:04,420 --> 00:28:07,570 Não precisa ter nenhum daqueles mesmas coisas sobre o nível de U. Bem, 625 00:28:07,570 --> 00:28:11,390 Se de repente você quiser adicionar algo que era como T-H, 626 00:28:11,390 --> 00:28:14,800 você precisa ter a capacidade de adicionar essa palavra. 627 00:28:14,800 --> 00:28:17,330 Assim, para cada única letra, você vai ter 628 00:28:17,330 --> 00:28:19,730 para ter um monte de matrizes que saem dela. 629 00:28:19,730 --> 00:28:24,060 Assim, você pode ver como ele ia ficar realmente grande, muito rápido. 630 00:28:24,060 --> 00:28:26,560 Alguma outra pergunta? 631 00:28:26,560 --> 00:28:28,980 Tudo certo. 632 00:28:28,980 --> 00:28:29,832 Sim? 633 00:28:29,832 --> 00:28:33,210 >> AUDIÊNCIA: Quando são tentativas mais rápido do que tabelas de hash? 634 00:28:33,210 --> 00:28:36,280 >> HANNAH: Quando são tentativas mais rápido do que tabelas de hash? 635 00:28:36,280 --> 00:28:39,120 Então, se você teve realmente um função hash ruim. 636 00:28:39,120 --> 00:28:41,840 Então, digamos que eu era como, aqui está a sua função hash. 637 00:28:41,840 --> 00:28:43,660 Não importa o que a palavra você me dá, eu estou sempre 638 00:28:43,660 --> 00:28:47,740 vai colocá-lo em ordem de entrada 0. 639 00:28:47,740 --> 00:28:52,000 E assim vamos acabar com apenas colocando tudo em uma longa lista ligada grande. 640 00:28:52,000 --> 00:28:58,740 E assim um tempo de pesquisa levaria pelo pior n se é no final de nossa lista. 641 00:28:58,740 --> 00:29:03,150 Com a tentativa, só temos de fazer uma iteração através das letras da palavra. 642 00:29:03,150 --> 00:29:07,080 Assim, mesmo que nós adicionamos um monte Mais palavras para nossa tentativa, 643 00:29:07,080 --> 00:29:09,620 não nos levaria mais tempo para encontrar uma determinada palavra. 644 00:29:09,620 --> 00:29:11,750 >> Tudo o que temos a fazer é, por exemplo, neste caso, 645 00:29:11,750 --> 00:29:17,170 vamos dizer que estamos à procura de zoom, nós apenas temos que interagir sobre 646 00:29:17,170 --> 00:29:19,840 Z-O-O-H, quatro cartas. 647 00:29:19,840 --> 00:29:22,250 Então, isso é apenas o comprimento da palavra de zoom. 648 00:29:22,250 --> 00:29:25,400 Não importa quantas mais palavras que colocamos nesta tentativa. 649 00:29:25,400 --> 00:29:30,225 Nós sempre pode obtê-lo nesses quatro passos. 650 00:29:30,225 --> 00:29:31,215 Impressionante. 651 00:29:31,215 --> 00:29:32,205 Sim? 652 00:29:32,205 --> 00:29:34,185 >> AUDIÊNCIA: Então [inaudível] é uma matriz, certo? 653 00:29:34,185 --> 00:29:35,322 >> HANNAH: Hum-hum. 654 00:29:35,322 --> 00:29:37,155 Audiência: Se você é procurando [inaudível], 655 00:29:37,155 --> 00:29:40,929 você teria que passar por sua matriz para encontrar [inaudível]? 656 00:29:40,929 --> 00:29:41,470 HANNAH: Claro. 657 00:29:41,470 --> 00:29:44,000 AUDIÊNCIA: Não que levam mais tempo? 658 00:29:44,000 --> 00:29:46,370 HANNAH: Se eu vou dizer que a minha matriz é sempre 659 00:29:46,370 --> 00:29:49,250 vai ser A, B, C, D, E, F, G, blá, blá, blá, 660 00:29:49,250 --> 00:29:51,630 por isso, se eu sempre sei que é na mesma ordem, 661 00:29:51,630 --> 00:29:53,880 se eu sempre sei que é em ordem alfabética, 662 00:29:53,880 --> 00:29:57,860 Posso apenas dizer que é O número assim e assim no alfabeto. 663 00:29:57,860 --> 00:29:59,620 Basta saltar para aquele lugar. 664 00:29:59,620 --> 00:30:01,860 Porque lembre-se, com matrizes, podemos acessar 665 00:30:01,860 --> 00:30:06,590 qualquer elemento dessa matriz em constante tempo, se sabemos para onde estamos olhando. 666 00:30:06,590 --> 00:30:09,080 667 00:30:09,080 --> 00:30:09,580 Sim? 668 00:30:09,580 --> 00:30:12,005 >> AUDIÊNCIA: No anterior deslize [inaudível] 27, 669 00:30:12,005 --> 00:30:14,430 26, mas para o primeiro. 670 00:30:14,430 --> 00:30:15,400 >> HANNAH: Desculpe? 671 00:30:15,400 --> 00:30:18,800 >> AUDIÊNCIA: Não é a primeira um 0, portanto, não seria 26? 672 00:30:18,800 --> 00:30:24,900 >> HANNAH: Claro, por isso, quando dizemos 27, isso é vai dar-nos índices de 0 a 26. 673 00:30:24,900 --> 00:30:28,220 Mas se você realmente contar os para fora, ele vai ser 27. 674 00:30:28,220 --> 00:30:30,007 Boa pergunta. 675 00:30:30,007 --> 00:30:30,590 Algo mais? 676 00:30:30,590 --> 00:30:31,200 Sim? 677 00:30:31,200 --> 00:30:34,420 >> AUDIÊNCIA: Então são tentativas mais lento do que tabelas de hash? 678 00:30:34,420 --> 00:30:37,920 >> HANNAH: Tries vão ser, em teoria, mais rápido do que tabelas de hash 679 00:30:37,920 --> 00:30:39,760 mas ocupam mais memória. 680 00:30:39,760 --> 00:30:40,534 Sim? 681 00:30:40,534 --> 00:30:41,450 AUDIÊNCIA: [inaudível]? 682 00:30:41,450 --> 00:30:45,770 683 00:30:45,770 --> 00:30:47,484 >> HANNAH: Me desculpe, eu não ouvi-lo. 684 00:30:47,484 --> 00:30:48,400 AUDIÊNCIA: [inaudível]. 685 00:30:48,400 --> 00:30:51,250 686 00:30:51,250 --> 00:30:54,100 0-25 dá-lhe 26. 687 00:30:54,100 --> 00:30:56,958 >> HANNAH: 0-25 faria dar-lhe 26, à direita. 688 00:30:56,958 --> 00:30:58,457 >> AUDIÊNCIA: E então [inaudível]. 689 00:30:58,457 --> 00:30:59,040 HANNAH: Certo. 690 00:30:59,040 --> 00:31:04,760 Portanto, o número estamos especificando é o número de coisas em nossa matriz. 691 00:31:04,760 --> 00:31:07,260 Então, se temos 27, é vai nos dar 0 692 00:31:07,260 --> 00:31:10,620 a 26, o que dará quarto-nos para, neste caso, 693 00:31:10,620 --> 00:31:12,770 Eu não estou incluindo um apóstrofo. 694 00:31:12,770 --> 00:31:17,040 Então, nós estamos recebendo de 0 a 25 anos são as primeiras 26 letras do alfabeto, 695 00:31:17,040 --> 00:31:18,990 ou todas as 26 letras do alfabeto. 696 00:31:18,990 --> 00:31:21,190 E, em seguida, que a última coisa, no início do 26, é 697 00:31:21,190 --> 00:31:24,598 vai ser o cheque sinal, ou o delta. 698 00:31:24,598 --> 00:31:26,960 Algo mais? 699 00:31:26,960 --> 00:31:29,130 Impressionante. 700 00:31:29,130 --> 00:31:30,020 Perdi meu espaço. 701 00:31:30,020 --> 00:31:31,020 OK, legal. 702 00:31:31,020 --> 00:31:33,240 >> Então, nós já tocou em cima deste. 703 00:31:33,240 --> 00:31:37,430 Mas a grande trade off entre tentativas e tabelas de hash 704 00:31:37,430 --> 00:31:39,720 é que tenta prever, em teoria, constante olhar para cima 705 00:31:39,720 --> 00:31:42,890 vezes, mas usar um monte de memória. 706 00:31:42,890 --> 00:31:46,495 Tudo bem, agora nós temos um pouco estruturas menos complicados, 707 00:31:46,495 --> 00:31:49,640 e vamos ser feito com C, e vamos passar o tempo todo. 708 00:31:49,640 --> 00:31:51,930 >> Então, pilhas, vimos este em palestra onde você 709 00:31:51,930 --> 00:31:55,020 ter algo como um pilha de bandejas onde 710 00:31:55,020 --> 00:31:57,330 a última coisa que você colocar na pilha vai 711 00:31:57,330 --> 00:31:59,500 de ser a primeira coisa que você decolar. 712 00:31:59,500 --> 00:32:02,880 Então, isso é o que realmente define uma pilha é que a última coisa que você colocar na 713 00:32:02,880 --> 00:32:06,080 vai ser o primeiro coisa que você decolar. 714 00:32:06,080 --> 00:32:09,279 E a terminologia que usamos se nós vamos colocar alguma coisa, 715 00:32:09,279 --> 00:32:12,070 se nós estamos indo para adicionar algo a nossa stack, chamamos isso de empurrar. 716 00:32:12,070 --> 00:32:14,970 E se tomarmos alguma coisa off, chamamos isso de popping. 717 00:32:14,970 --> 00:32:17,080 E, se nós estamos indo para implementa um stack, nós 718 00:32:17,080 --> 00:32:20,660 precisa ter certeza de manter o controle de tanto o tamanho e a capacidade. 719 00:32:20,660 --> 00:32:24,940 Assim, o número total de elementos que pudermos segurar e o número atual de elementos 720 00:32:24,940 --> 00:32:27,880 que estamos a realizar. 721 00:32:27,880 --> 00:32:29,885 >> E de forma muito semelhante, temos filas. 722 00:32:29,885 --> 00:32:34,510 E a única diferença é, em vez de com as pilhas, 723 00:32:34,510 --> 00:32:37,630 que disse que a última coisa que colocar em é a primeira coisa que tirar. 724 00:32:37,630 --> 00:32:40,940 Assim, com as filas, o primeira coisa que colocamos em 725 00:32:40,940 --> 00:32:43,129 vai ser o primeira coisa que tirar. 726 00:32:43,129 --> 00:32:45,420 Então, isso é como se você é realmente fazendo fila em uma loja 727 00:32:45,420 --> 00:32:48,140 e você está sendo ajudado, em seguida, a primeira pessoa na linha 728 00:32:48,140 --> 00:32:50,880 deve ser a primeira pessoa a ser ajudado. 729 00:32:50,880 --> 00:32:52,220 Então, isso seria uma fila. 730 00:32:52,220 --> 00:32:55,880 >> Então, precisamos manter o controle da tamanho, capacidade e cabeça desde que nós somos 731 00:32:55,880 --> 00:33:01,130 vai levar todo mundo fora da parte dianteira da lista, em vez da parte de trás. 732 00:33:01,130 --> 00:33:03,480 Perguntas sobre isso? 733 00:33:03,480 --> 00:33:06,330 Qualquer dúvida C que estão incomodando? 734 00:33:06,330 --> 00:33:09,590 As estruturas de dados, nada disso se divertir? 735 00:33:09,590 --> 00:33:10,530 Tudo bem, legal. 736 00:33:10,530 --> 00:33:14,120 Então, eu vou entregá-la a Alison para saltar para mais alguma programação. 737 00:33:14,120 --> 00:33:15,965 >> ALISON: Oh, vamos ver. 738 00:33:15,965 --> 00:33:17,370 Vamos ver o quão bem eu faço aqui. 739 00:33:17,370 --> 00:33:21,410 OK, eu vou tentar e voar através deste material, pessoal. 740 00:33:21,410 --> 00:33:24,540 Hannah correu muito em aprofundado sobre todas as suas coisas. 741 00:33:24,540 --> 00:33:26,900 Vou tentar dar -lhe uma visão rápida explosão 742 00:33:26,900 --> 00:33:31,290 para que possamos chegar a Davin com tudo a diversão JavaScript e segurança as coisas 743 00:33:31,290 --> 00:33:33,380 que talvez você realmente quero ouvir mais sobre. 744 00:33:33,380 --> 00:33:36,600 >> OK, como disse Hannah, se Você tem dúvidas, 745 00:33:36,600 --> 00:33:39,170 Eu estou indo rápido demais, por favor, me avise. 746 00:33:39,170 --> 00:33:42,114 Vou responder perguntas, se necessário. 747 00:33:42,114 --> 00:33:45,280 Então, para começar, vamos começar com provavelmente uma das primeiras coisas 748 00:33:45,280 --> 00:33:48,730 você aprendeu com web programação, permissões. 749 00:33:48,730 --> 00:33:52,720 Então chmod, vocês deveriam ter sido mestres nisso com toda a web 750 00:33:52,720 --> 00:33:54,870 programação que você tem feito ultimamente. 751 00:33:54,870 --> 00:33:57,320 É basicamente apenas um comando que altera as permissões 752 00:33:57,320 --> 00:34:00,779 ou as permissões de acesso dos nossos objetos do sistema de arquivos. 753 00:34:00,779 --> 00:34:02,570 É claro que, para efectivamente vê isso, se você estiver 754 00:34:02,570 --> 00:34:04,910 tendo algum problema com estes durante seus conjuntos de problemas, 755 00:34:04,910 --> 00:34:11,460 você pode ter usado ls -l, que é longa, para obter o tipo de visão como esta, 756 00:34:11,460 --> 00:34:14,209 onde você realmente ver tudo as permissões para um arquivo. 757 00:34:14,209 --> 00:34:16,850 758 00:34:16,850 --> 00:34:20,732 >> E realmente, nós apenas estamos indo para ir através de muito rapidamente apenas bonita 759 00:34:20,732 --> 00:34:21,940 muito o que cada um deles significa. 760 00:34:21,940 --> 00:34:24,481 Então, temos que d aqui, que apenas significa o diretório. 761 00:34:24,481 --> 00:34:26,790 762 00:34:26,790 --> 00:34:31,739 Obviamente, aqui, vemos rwx, que é legível, gravável e executável. 763 00:34:31,739 --> 00:34:37,090 Estes também podem ser representados como bits, que nós vamos entrar na página seguinte. 764 00:34:37,090 --> 00:34:40,699 Assim, cada tríade que vimos aqui, por isso é três tríades. 765 00:34:40,699 --> 00:34:48,120 Temos rwx, r nada x e r nada x para este primeiro arquivo. 766 00:34:48,120 --> 00:34:49,690 É esta estrutura geral. 767 00:34:49,690 --> 00:34:50,940 >> Portanto, temos algum diretório. 768 00:34:50,940 --> 00:34:53,999 Temos algum grupo de usuários com essas permissões. 769 00:34:53,999 --> 00:34:57,040 Alguns grupo que tenha essas permissões, e um mundo que tem uma permissão. 770 00:34:57,040 --> 00:34:59,420 Você pode pensar nisso como uma tríade. 771 00:34:59,420 --> 00:35:01,130 Você pode pensar nisso como três bits. 772 00:35:01,130 --> 00:35:04,060 Assim, eles podem manter valores em qualquer lugar a partir de 0 até 773 00:35:04,060 --> 00:35:07,350 a 7, razão pela qual, por vezes, tivemos de fazer chmod 774 00:35:07,350 --> 00:35:17,510 600 em vez de chmod rw o que quer. 775 00:35:17,510 --> 00:35:19,170 Nós vamos entrar em um exemplo lá. 776 00:35:19,170 --> 00:35:24,260 Mas, basicamente, você pode pensar destes como quer apenas rwx, 777 00:35:24,260 --> 00:35:28,520 ou você pode pensar neles como alguns número onde este primeiro aqui 778 00:35:28,520 --> 00:35:31,480 representa um número entre 0 e 7, esta segunda 779 00:35:31,480 --> 00:35:33,970 representa um número entre 0 e 7, e o terceiro 780 00:35:33,970 --> 00:35:38,245 representa um número entre 0 e 7, OK? 781 00:35:38,245 --> 00:35:42,700 >> r tem um valor de 4. w tem um valor de 2, e x 782 00:35:42,700 --> 00:35:49,230 tem um valor de 1, o que é por isso que este permissão aqui seria chmod 700. 783 00:35:49,230 --> 00:35:53,520 Porque neste caso aqui, ele diz que ter o primeiro bit há acendeu. 784 00:35:53,520 --> 00:35:55,380 Portanto, temos 4 para leitura. 785 00:35:55,380 --> 00:35:58,730 O segundo bit é mudado por w, que é 2, então agora temos 6. 786 00:35:58,730 --> 00:36:02,070 E o terceiro bit é mudado em para x, que é 1, então temos sete. 787 00:36:02,070 --> 00:36:04,820 E, claro, o nosso grupo e nosso mundo são cada 0. 788 00:36:04,820 --> 00:36:07,770 Portanto, este é também o equivalente de chmod 700. 789 00:36:07,770 --> 00:36:12,081 E eu com certeza gostaria de tentar entender o mapeamento entre aqueles. 790 00:36:12,081 --> 00:36:14,080 Eu não tenho certeza se ele tem chegar em um questionário antes, 791 00:36:14,080 --> 00:36:18,590 mas seria um pergunta que eu poderia pedir. 792 00:36:18,590 --> 00:36:22,110 >> Só um pouquinho vai mesmo ainda mais em chmod aqui, aqui 793 00:36:22,110 --> 00:36:27,730 é o muito geral estrutura de uma chamada de chmod. 794 00:36:27,730 --> 00:36:29,500 Então, é claro, temos chmod aqui. 795 00:36:29,500 --> 00:36:34,410 Referências, o que esta se refere é quem estamos dando a essas permissões para 796 00:36:34,410 --> 00:36:36,570 ou quem estamos tendo estes permissões de distância. 797 00:36:36,570 --> 00:36:44,330 Portanto, temos uma aqui nas permissões, como nós te dei chmod um plus x, 798 00:36:44,330 --> 00:36:45,440 como veremos em breve. 799 00:36:45,440 --> 00:36:48,460 um significa apenas dar a estes específico permissões para todos. 800 00:36:48,460 --> 00:36:49,600 Dê-lhes a todos. 801 00:36:49,600 --> 00:36:55,370 Então, você poderia muito bem ter mais u x ou mais x g ou mais x o ou múltipla 802 00:36:55,370 --> 00:36:55,870 da mesma. 803 00:36:55,870 --> 00:36:59,280 Assim que a primeira parte é sempre vai ser referências. 804 00:36:59,280 --> 00:37:03,220 Quem será que estamos dando essas permissões para, ou quem estamos levando-os longe de? 805 00:37:03,220 --> 00:37:04,850 >> O segundo é o operador. 806 00:37:04,850 --> 00:37:07,350 Então, vocês têm em sua maioria tratou plus. 807 00:37:07,350 --> 00:37:12,140 Isto dá permissões para quem quer que você está dando-lhes, 808 00:37:12,140 --> 00:37:14,840 Considerando menos, logicamente, remove-los. 809 00:37:14,840 --> 00:37:16,880 Então, nada de muito terrível lá. 810 00:37:16,880 --> 00:37:23,060 E então os modos é o que falamos com leitura, escrita, ou de execução. 811 00:37:23,060 --> 00:37:29,070 Então, um plus x significa dar executável permissões para todos. 812 00:37:29,070 --> 00:37:33,430 E então, é claro, no qual arquivo ou diretório específico. 813 00:37:33,430 --> 00:37:33,980 OK? 814 00:37:33,980 --> 00:37:36,010 Todo mundo bom com chmod? 815 00:37:36,010 --> 00:37:37,850 Não é tão ruim? 816 00:37:37,850 --> 00:37:42,417 >> OK, então HTML, qualquer um de vocês são idade suficiente a-- MySpace idade? 817 00:37:42,417 --> 00:37:44,750 Enviei esta a minha seção, e, literalmente, metade das pessoas 818 00:37:44,750 --> 00:37:45,790 olhou para mim como se eu fosse louco. 819 00:37:45,790 --> 00:37:47,498 E eu estava tipo, gente, nós não somos tão velho. 820 00:37:47,498 --> 00:37:48,910 Venha. 821 00:37:48,910 --> 00:37:53,360 Então HyperText Markup Language, é honestamente apenas um caminho para você 822 00:37:53,360 --> 00:37:57,990 para exibir certas coisas na web. 823 00:37:57,990 --> 00:37:59,210 Portanto, é uma linguagem de marcação. 824 00:37:59,210 --> 00:38:00,640 Não é uma linguagem de script. 825 00:38:00,640 --> 00:38:02,160 Não há lógica nisso. 826 00:38:02,160 --> 00:38:05,710 É simplesmente para mudar a forma como algo é apresentado. 827 00:38:05,710 --> 00:38:07,670 OK, então isso é um importante distinção a fazer. 828 00:38:07,670 --> 00:38:12,030 É considerada uma linguagem de marcação, não uma linguagem de script. 829 00:38:12,030 --> 00:38:15,100 >> Então aqui nós temos as nossas tags HTML. 830 00:38:15,100 --> 00:38:20,390 Neste slide são, provavelmente, a maior parte do aquelas que você deve estar familiarizado com 831 00:38:20,390 --> 00:38:22,390 e ser muito confortável. 832 00:38:22,390 --> 00:38:25,700 Então, obviamente, temos nossa tag HTML, que 833 00:38:25,700 --> 00:38:29,930 designa que tudo na entre estes dois será HTML. 834 00:38:29,930 --> 00:38:33,070 Temos algum link, que obviamente, vai lhe dar 835 00:38:33,070 --> 00:38:34,990 um link para uma página web externa. 836 00:38:34,990 --> 00:38:37,520 Alguns título, dentro de nossa cabeça aqui. 837 00:38:37,520 --> 00:38:40,020 E nós temos o nosso corpo com h1, que é um cabeçalho, 838 00:38:40,020 --> 00:38:42,260 por isso vai torná-lo agradável e arrojado e maior. 839 00:38:42,260 --> 00:38:46,040 E então, nós temos algumas p, que é um número. 840 00:38:46,040 --> 00:38:49,000 Você provavelmente deve saber e estar familiarizado com as coisas 841 00:38:49,000 --> 00:38:54,030 como a forma como você inserir uma imagem, são Existem outras classes de cabeçalho? 842 00:38:54,030 --> 00:38:57,240 Eu seria definitivamente confortável com div. 843 00:38:57,240 --> 00:39:00,840 Assim, estes têm a maioria de tags que você deve estar familiarizado. 844 00:39:00,840 --> 00:39:04,370 Mas, claro, como em tudo na CS 50, a lista não é exaustiva. 845 00:39:04,370 --> 00:39:08,200 Então, certifique-se de escovar acima em que. 846 00:39:08,200 --> 00:39:13,260 >> CSS, de modo CSS, se algum de vocês assistir meu seminário de duas semanas atrás, 847 00:39:13,260 --> 00:39:16,250 é realmente apenas uma maneira o estilo do seu página web? 848 00:39:16,250 --> 00:39:18,950 OK, então nós temos algumas linguagens de marcação. 849 00:39:18,950 --> 00:39:23,220 HTML, que cuida de apenas o texto e onde ele pode estar na página. 850 00:39:23,220 --> 00:39:25,760 Mas CSS é realmente o que o torna bastante. 851 00:39:25,760 --> 00:39:30,690 Você poderia ter estes em seu HTML arquivos, mas como vamos falar mais tarde, 852 00:39:30,690 --> 00:39:32,660 Eu tenho certeza que ele pode ser o próximo slide, ele 853 00:39:32,660 --> 00:39:35,620 É prática comum, e, na verdade, prática que realmente incentivar, 854 00:39:35,620 --> 00:39:40,670 para que você possa mantê-los separados quando nós falar sobre MVC e todo esse paradigma. 855 00:39:40,670 --> 00:39:42,490 Isso é realmente o que isso alimenta. 856 00:39:42,490 --> 00:39:46,110 >> Então CSS é apenas uma maneira de fazer as coisas parecem muito. 857 00:39:46,110 --> 00:39:50,500 As coisas aqui, como corpo e #title e .info, 858 00:39:50,500 --> 00:39:54,340 estes são chamados seletores e que que eles fazem é selecionar coisas específicas 859 00:39:54,340 --> 00:39:59,260 dentro de seu arquivo HTML e aplicar qualquer estilo, 860 00:39:59,260 --> 00:40:04,090 qualquer outro tipo de coisas que você quer, a esse elemento específico do seu web 861 00:40:04,090 --> 00:40:04,590 página. 862 00:40:04,590 --> 00:40:08,820 Então, aqui, temos uma cor de fundo e uma cor 863 00:40:08,820 --> 00:40:12,450 e uma família de fontes que está sendo aplicado a tudo o que está no corpo. 864 00:40:12,450 --> 00:40:15,530 Então, se nós olhamos para trás aqui, não se aplicaria ao título. 865 00:40:15,530 --> 00:40:22,340 Ela só se aplicaria ao que é nestes seletores do corpo, OK? 866 00:40:22,340 --> 00:40:25,250 >> Com o título aqui, este é vai ser a mesma coisa, 867 00:40:25,250 --> 00:40:28,410 a cor do texto sendo azul vai apenas 868 00:40:28,410 --> 00:40:33,870 para afectar o que está dentro os seletores de título. 869 00:40:33,870 --> 00:40:36,580 Bem como informações aqui, o texto será rosa, 870 00:40:36,580 --> 00:40:38,600 do que informação, que é aqui mesmo. 871 00:40:38,600 --> 00:40:40,860 Então a única coisa que seria rosa nesta página 872 00:40:40,860 --> 00:40:44,100 é hoje, segunda-feira, 17 novembro, 2014. 873 00:40:44,100 --> 00:40:48,770 OK, então CSS é apenas uma maneira de ter mais controle over-- sim? 874 00:40:48,770 --> 00:40:51,850 >> AUDIÊNCIA: Por que você tem para usar o hash com o título? 875 00:40:51,850 --> 00:40:55,170 >> HANNAH: Next slide, prometo! 876 00:40:55,170 --> 00:40:56,810 Nós vamos chegar lá. 877 00:40:56,810 --> 00:40:59,830 Então é por isso que temos que usar hash. 878 00:40:59,830 --> 00:41:03,429 Então seletores assumir três principais formas que falar com vocês sobre. 879 00:41:03,429 --> 00:41:05,595 I fyou quiser saber mais, há muito lá fora. 880 00:41:05,595 --> 00:41:07,540 Há uma grande documentação CSS. 881 00:41:07,540 --> 00:41:12,680 Há um nome tag, que tem a ver com apenas suas tags normais em HTML. 882 00:41:12,680 --> 00:41:17,210 Então h1, p, div, h2, esses tipos de coisas. 883 00:41:17,210 --> 00:41:20,320 E nós podemos apenas citar os como é. 884 00:41:20,320 --> 00:41:22,650 Então, como podemos ver aqui com corpo, é uma tag normal. 885 00:41:22,650 --> 00:41:26,660 Assim, podemos apenas colocar corpo quando estamos falando em nosso arquivo CSS. 886 00:41:26,660 --> 00:41:29,730 >> Com título, toda a razão, ter esse hash é que temos o que é 887 00:41:29,730 --> 00:41:31,010 considerada uma ID. 888 00:41:31,010 --> 00:41:35,400 Assim, um ID deve ser sempre único dentro de sua página HTML 889 00:41:35,400 --> 00:41:37,930 de modo que quando você está referindo-se a ele, você 890 00:41:37,930 --> 00:41:41,990 sei que você está se referindo apenas para uma coisa específica. 891 00:41:41,990 --> 00:41:46,270 Portanto, neste caso aqui, com a nossa h1 aqui, CS 50 revisar sessão, 892 00:41:46,270 --> 00:41:47,810 temos um id título. 893 00:41:47,810 --> 00:41:54,280 Assim, para apenas referir-se a que pedaço de nossa HTML, fazemos um título hash. 894 00:41:54,280 --> 00:41:58,080 Apenas por convenção, IDs são designados com um hash na frente deles. 895 00:41:58,080 --> 00:42:01,650 Da mesma forma, vemos informações aqui é uma classe. 896 00:42:01,650 --> 00:42:06,070 E assim classe com CSS é designado como uma classe ponto 897 00:42:06,070 --> 00:42:08,895 dot ou seja lá o que é classe. 898 00:42:08,895 --> 00:42:10,850 Portanto, neste caso aqui, é info. 899 00:42:10,850 --> 00:42:13,090 >> Então eu levá-la de volta. 900 00:42:13,090 --> 00:42:16,200 Ambos seriam rosa para o nosso CSS aqui 901 00:42:16,200 --> 00:42:18,430 porque ambos têm uma classe de info. 902 00:42:18,430 --> 00:42:23,070 E em nosso arquivo CSS, nós designamos que qualquer coisa com uma classe de Informação 903 00:42:23,070 --> 00:42:24,120 deve ser rosa. 904 00:42:24,120 --> 00:42:25,968 Isso faz sentido? 905 00:42:25,968 --> 00:42:27,435 Sim? 906 00:42:27,435 --> 00:42:30,731 >> Audiência: Se você fosse fazer tudo no branco corpo, 907 00:42:30,731 --> 00:42:32,814 e, em seguida, você tenta fazer algo dentro dele azul, 908 00:42:32,814 --> 00:42:34,770 teria que causar problemas? 909 00:42:34,770 --> 00:42:37,310 >> HANNAH: Então é CSS folhas de estilo em cascata. 910 00:42:37,310 --> 00:42:40,730 Então, tudo o que é em direção ao bottom terá precedência. 911 00:42:40,730 --> 00:42:44,080 Então, se você faz algo com o corpo, e você faz tudo branco, 912 00:42:44,080 --> 00:42:49,300 e depois, mais tarde, você alterar o título ou você mudar o texto dentro do corpo, 913 00:42:49,300 --> 00:42:50,560 ele substitui isso. 914 00:42:50,560 --> 00:42:55,360 Assim, qualquer coisa para a bottom terá precedência. 915 00:42:55,360 --> 00:42:56,730 Sim? 916 00:42:56,730 --> 00:42:59,627 >> Audiência: e IDs são únicos, mas as aulas podem ser mais? 917 00:42:59,627 --> 00:43:00,210 HANNAH: Certo. 918 00:43:00,210 --> 00:43:06,320 Então IDs deve ser único, e as aulas podem referem-se a tantas coisas quanto você gostaria. 919 00:43:06,320 --> 00:43:07,580 Alguma outra pergunta? 920 00:43:07,580 --> 00:43:09,800 Sim. 921 00:43:09,800 --> 00:43:11,210 >> AUDIÊNCIA: [inaudível]. 922 00:43:11,210 --> 00:43:13,509 Eu estou querendo saber se que faz a diferença. 923 00:43:13,509 --> 00:43:15,217 HANNAH: Eu sinto muito, qual foi a pergunta? 924 00:43:15,217 --> 00:43:18,960 AUDIÊNCIA: Há pequena "F" e de capital "F." 925 00:43:18,960 --> 00:43:21,440 HANNAH: Então a diferença entre as pequenas "f" e "F" 926 00:43:21,440 --> 00:43:22,606 não deve fazer a diferença. 927 00:43:22,606 --> 00:43:26,330 Assim, "f" será 15 de qualquer maneira. 928 00:43:26,330 --> 00:43:28,130 Cool, qualquer outra coisa? 929 00:43:28,130 --> 00:43:29,930 Todo mundo bom, CSS? 930 00:43:29,930 --> 00:43:30,850 Sim? 931 00:43:30,850 --> 00:43:31,790 >> AUDIÊNCIA: Desculpe. 932 00:43:31,790 --> 00:43:35,550 Você pode ter uma classe e um ID? 933 00:43:35,550 --> 00:43:38,030 >> HANNAH: Sim, você pode. 934 00:43:38,030 --> 00:43:40,420 As coisas podem ter tanto uma classe e um ID. 935 00:43:40,420 --> 00:43:44,670 E eu recomendo testar estes em seu próprio país. 936 00:43:44,670 --> 00:43:50,480 CSS você vai aprender melhor apenas fazendo algo, página web muito simples, 937 00:43:50,480 --> 00:43:53,440 elaboração de alguns CSS, e apenas vendo como eles interagem. 938 00:43:53,440 --> 00:43:56,970 E você vai ganhar um muito bom, senso intuitivo de como ele funciona. 939 00:43:56,970 --> 00:43:58,810 >> OK, todo mundo bem com CSS? 940 00:43:58,810 --> 00:44:01,280 Você está tudo indo fazer belas sites com CSS agora. 941 00:44:01,280 --> 00:44:05,460 OK, melhores práticas, apenas coisas para manter em mente, coisas 942 00:44:05,460 --> 00:44:09,810 isso-- é por isso que atracar você para o designer e outros enfeites. 943 00:44:09,810 --> 00:44:11,820 Então feche todas as suas tags HTML. 944 00:44:11,820 --> 00:44:14,840 Então se você tem um corpo aberto, deve haver um corpo próximo. 945 00:44:14,840 --> 00:44:18,180 Se você tem um parágrafo aberto, deve haver um parágrafo perto. 946 00:44:18,180 --> 00:44:19,555 Verifique para ver sua página valida. 947 00:44:19,555 --> 00:44:23,330 Vocês devem estar muito familiarizado com isso a partir de-p definir sete 948 00:44:23,330 --> 00:44:26,350 CS com 50 finanças com o validador W3. 949 00:44:26,350 --> 00:44:28,340 E como eu disse antes, um dos nossos grandes paradigmas 950 00:44:28,340 --> 00:44:33,780 está separando seu estilo com CSS a partir de sua marcação, o que é HTML. 951 00:44:33,780 --> 00:44:36,900 E depois, claro, temos este grande XKCD aqui embaixo. 952 00:44:36,900 --> 00:44:38,280 Yay, alívio cômico! 953 00:44:38,280 --> 00:44:41,340 >> OK, TCP / IP. 954 00:44:41,340 --> 00:44:44,650 Entre estes e HTTP, basicamente, eles são ambos os protocolos. 955 00:44:44,650 --> 00:44:46,810 Então, você poderia apenas pensar deles como um conjunto de regras 956 00:44:46,810 --> 00:44:50,110 que determinam como as coisas mover-se através da internet. 957 00:44:50,110 --> 00:44:53,410 Então, controle de transmissão protocolo, ou protocolo de internet, 958 00:44:53,410 --> 00:44:57,280 é apenas uma maneira de certificar-se de que os dados cheguem onde ele vai 959 00:44:57,280 --> 00:45:00,030 e que sabemos se estamos sempre a falta de dados. 960 00:45:00,030 --> 00:45:03,520 Então, se vocês pensam de volta para palestra um par de semanas atrás, com David 961 00:45:03,520 --> 00:45:06,980 onde tivemos quatro envelopes, eles foram todos contados como um dos quatro, 962 00:45:06,980 --> 00:45:11,300 dois de quatro, três de quatro, quatro dos quatro, este é apenas um conjunto de regras. 963 00:45:11,300 --> 00:45:13,830 Nós dissemos, OK, sempre que estamos enviar mais do que um pacote, 964 00:45:13,830 --> 00:45:16,610 vamos numerar com o que o número é 965 00:45:16,610 --> 00:45:19,040 e quantos total que o usuário deve obter. 966 00:45:19,040 --> 00:45:22,540 >> E este é apenas dizer quem está a receber os dados, sejam eles 967 00:45:22,540 --> 00:45:26,120 ter começado tudo ou se algo se perdeu ao longo do caminho. 968 00:45:26,120 --> 00:45:28,840 E eles precisam perguntar para ele novamente. 969 00:45:28,840 --> 00:45:31,140 Isto é realmente apenas um conjunto de regras. 970 00:45:31,140 --> 00:45:33,650 É assim que você pode pensar nisso, OK? 971 00:45:33,650 --> 00:45:37,700 E também, ele especifica a porta, o que vocês can-- Sei durante palestra, 972 00:45:37,700 --> 00:45:39,170 eles tinham toda uma lista de portos. 973 00:45:39,170 --> 00:45:41,630 Mas nós não tê-los aqui agora. 974 00:45:41,630 --> 00:45:45,290 >> Protocolo de transferência de hipertexto Então é, mais uma vez, é um outro protocolo. 975 00:45:45,290 --> 00:45:48,630 Portanto, é um outro conjunto de regras que governam, neste caso, 976 00:45:48,630 --> 00:45:51,130 como o hipertexto é transferido. 977 00:45:51,130 --> 00:45:54,340 Por isso, apenas permite aos navegadores para falar com servidores web. 978 00:45:54,340 --> 00:45:56,910 E, como dissemos aqui, é como aperto de mão humana. 979 00:45:56,910 --> 00:46:00,480 É apenas uma forma de governar como o servidor web é 980 00:46:00,480 --> 00:46:02,690 vai interagir com o seu navegador. 981 00:46:02,690 --> 00:46:05,660 E nós temos apenas um par de exemplos. 982 00:46:05,660 --> 00:46:09,100 Temos alguns pedidos aqui onde o método é GET. 983 00:46:09,100 --> 00:46:13,760 Temos HTTP 1.1, que é versão de protocolo para nós. 984 00:46:13,760 --> 00:46:17,230 E, em seguida, o anfitrião, que é o que na verdade estamos tentando acessar. 985 00:46:17,230 --> 00:46:21,800 E então, como você vê aqui, obter alguma resposta com este 200 986 00:46:21,800 --> 00:46:25,032 OK como o nosso código de resposta HTTP. 987 00:46:25,032 --> 00:46:27,240 Temos uma lista grande que eu vou para puxar para cima em um segundo 988 00:46:27,240 --> 00:46:29,430 que vocês devem estar familiarizados com. 989 00:46:29,430 --> 00:46:35,750 E nós temos este tipo de conteúdo text / HTML, que apenas diz que tipo de dados 990 00:46:35,750 --> 00:46:39,990 estamos recebendo do servidor, OK? 991 00:46:39,990 --> 00:46:44,230 Este host e este tipo de conteúdo fazem parte dos cabeçalhos HTTP. 992 00:46:44,230 --> 00:46:49,610 Você pode ter como poucos ou tão pouco como necessárias para o contexto do que 993 00:46:49,610 --> 00:46:50,580 você está lidando. 994 00:46:50,580 --> 00:46:53,371 Às vezes, você vai ter um monte de informações provenientes de seu servidor. 995 00:46:53,371 --> 00:46:56,040 Talvez eles estão pedindo um monte de informações do usuário. 996 00:46:56,040 --> 00:46:57,600 Esta varia dependendo do contexto. 997 00:46:57,600 --> 00:47:01,144 Se você olhar para CS 50 Study, há muito mais sobre isso. 998 00:47:01,144 --> 00:47:03,060 Mas temos muito para chegar através, por isso eu vou 999 00:47:03,060 --> 00:47:05,760 para ir em frente se tudo bem com vocês? 1000 00:47:05,760 --> 00:47:07,960 Com estilo. 1001 00:47:07,960 --> 00:47:08,460 Aguente. 1002 00:47:08,460 --> 00:47:11,182 Eu definitivamente tenho que lista inteira de-- huh! 1003 00:47:11,182 --> 00:47:13,140 Eu não sei por que isso é todo o caminho até aqui. 1004 00:47:13,140 --> 00:47:15,660 Eu pensei que eu, literalmente, mudou-se -lo enquanto eu estava sitting-- 1005 00:47:15,660 --> 00:47:16,540 >> DAVIN: Você quer ensiná-lo? 1006 00:47:16,540 --> 00:47:17,420 Ou você quer que eu ensiná-lo? 1007 00:47:17,420 --> 00:47:20,010 >> AUDIÊNCIA: Eu pensei que pudéssemos apenas mostrar-lhes para começar. 1008 00:47:20,010 --> 00:47:22,210 Quero dizer, você pode entrar em -los ainda mais, mas eu 1009 00:47:22,210 --> 00:47:26,030 pensei que fazia mais sentido desde que eu estava apenas falando de status HTTP. 1010 00:47:26,030 --> 00:47:28,200 Então aqui está a lista inteira. 1011 00:47:28,200 --> 00:47:31,730 Acho que o que vai acontecer é Davin está indo para ir para eles mais tarde. 1012 00:47:31,730 --> 00:47:35,330 Mas há toda uma lista, um pré-visualização do gosto de vir. 1013 00:47:35,330 --> 00:47:41,640 OK, vamos blow-- isso vai para ser um curso intensivo PHP como nenhum outro. 1014 00:47:41,640 --> 00:47:44,874 >> Então PHP, pré-processador de hipertexto, é um backronym recursivo, 1015 00:47:44,874 --> 00:47:46,540 o que significa que foi nomeado outra coisa. 1016 00:47:46,540 --> 00:47:49,050 E então eles eram como, este não faz muito sentido. 1017 00:47:49,050 --> 00:47:52,210 Então, eles só chamado ele-- e foi uma sigla, 1018 00:47:52,210 --> 00:47:54,840 para que eles apenas fizeram PHP pré-processador de hipertexto, que 1019 00:47:54,840 --> 00:47:55,980 apenas não faz sentido. 1020 00:47:55,980 --> 00:47:57,714 História engraçada. 1021 00:47:57,714 --> 00:47:58,880 É uma linguagem de programação. 1022 00:47:58,880 --> 00:48:02,360 Assim, tanto quanto eu enfatizo que HTML não é uma linguagem de programação, 1023 00:48:02,360 --> 00:48:05,350 é linguagem de marcação, um PHP é uma linguagem de programação. 1024 00:48:05,350 --> 00:48:07,422 Como você sabe que este é porque não é lógica. 1025 00:48:07,422 --> 00:48:08,380 Existem condicionais. 1026 00:48:08,380 --> 00:48:12,750 Temos variáveis, enquanto nós ter nenhuma dessas coisas em HTML. 1027 00:48:12,750 --> 00:48:16,960 >> Tudo bem, então temos esta pequena bit aqui que é como o sabor do PHP. 1028 00:48:16,960 --> 00:48:20,510 Assim básico, nomes de variáveis começar com um sinal de dólar. 1029 00:48:20,510 --> 00:48:21,500 Muitas pessoas gostam. 1030 00:48:21,500 --> 00:48:22,371 Lembra-nos dinheiro. 1031 00:48:22,371 --> 00:48:22,995 Está tudo ótimo. 1032 00:48:22,995 --> 00:48:25,280 Nós todos queremos PHP. 1033 00:48:25,280 --> 00:48:28,020 Então, nós não especificar um tipo mais variável. 1034 00:48:28,020 --> 00:48:29,995 Ele é determinado em tempo de execução. 1035 00:48:29,995 --> 00:48:32,710 1036 00:48:32,710 --> 00:48:35,890 O intérprete como será, oh, vamos percorrer, 1037 00:48:35,890 --> 00:48:39,565 e de acordo com o contexto, Vamos ver o que os tipos de tipos 1038 00:48:39,565 --> 00:48:41,560 essas variáveis ​​precisa ter. 1039 00:48:41,560 --> 00:48:42,815 Não há nenhuma função principal. 1040 00:48:42,815 --> 00:48:43,690 As coisas simplesmente será executado. 1041 00:48:43,690 --> 00:48:47,851 Vocês com a sua importação em seu última p definida, você vai perceber isso. 1042 00:48:47,851 --> 00:48:49,350 Não houve realmente uma função principal. 1043 00:48:49,350 --> 00:48:52,070 Você acabou de escrever o que você queria que acontecesse. 1044 00:48:52,070 --> 00:48:53,280 E isso simplesmente aconteceu. 1045 00:48:53,280 --> 00:48:56,760 Então, isso é PHP para você. 1046 00:48:56,760 --> 00:48:59,180 >> Arrays são muito semelhantes. 1047 00:48:59,180 --> 00:49:01,270 Nós ainda temos esse suporte. 1048 00:49:01,270 --> 00:49:05,940 Aqui, nós temos alguma variável arr chamado, e é igual 1049 00:49:05,940 --> 00:49:08,540 a-- temos o nosso normal, notação suporte. 1050 00:49:08,540 --> 00:49:10,630 E nós temos algum valor fundamental. 1051 00:49:10,630 --> 00:49:14,630 E a grande diferença entre C e PHP matrizes 1052 00:49:14,630 --> 00:49:19,330 é que nós podemos ter este associate-- podemos associar valores para chaves. 1053 00:49:19,330 --> 00:49:22,440 Então, ao invés de ter apenas uma matriz que é indexado 1054 00:49:22,440 --> 00:49:26,630 pelo número ou a posição desse elemento na matriz, 1055 00:49:26,630 --> 00:49:29,060 nós realmente podemos associá-lo com uma chave. 1056 00:49:29,060 --> 00:49:36,700 Onde podemos dizer, OK, eu quero o que quer valor é associado a fruta. 1057 00:49:36,700 --> 00:49:39,280 E talvez nós temos fruta foi para a banana. 1058 00:49:39,280 --> 00:49:41,760 Então ele iria retornar banana para nós. 1059 00:49:41,760 --> 00:49:44,100 >> Mas, basicamente, a mais coisa poderosa sobre esta 1060 00:49:44,100 --> 00:49:47,960 é que, se vocês lembram o demo da palestra em que basicamente 1061 00:49:47,960 --> 00:49:53,050 Speller reescreveu em PHP, e lookup foi-- foi realmente apenas gosta, 1062 00:49:53,050 --> 00:49:55,007 é que esta chave existir? 1063 00:49:55,007 --> 00:49:56,590 Isso é realmente uma espécie de o poder dele. 1064 00:49:56,590 --> 00:49:58,560 Você não precisa fazer uma iteração através de sua matriz. 1065 00:49:58,560 --> 00:50:00,311 Você não precisa saber o espaço é in. 1066 00:50:00,311 --> 00:50:01,976 Pode ser no final ou no início. 1067 00:50:01,976 --> 00:50:04,790 Contanto que você sabe a chave que está associado com o valor, 1068 00:50:04,790 --> 00:50:09,740 PHP pode apenas cuspir esse valor de volta à direita para fora em você, OK? 1069 00:50:09,740 --> 00:50:12,960 >> E então, nós também só ter apenas porque nós 1070 00:50:12,960 --> 00:50:16,750 pode ter pares de valores-chave não significa que você precisa. 1071 00:50:16,750 --> 00:50:19,180 Você também pode simplesmente criar uma matriz normal como aqui, 1072 00:50:19,180 --> 00:50:21,540 na parte inferior, onde está apenas um, dois, três, quatro. 1073 00:50:21,540 --> 00:50:22,510 Esses são os nossos valores. 1074 00:50:22,510 --> 00:50:25,320 E, de fato, as chaves são os índices. 1075 00:50:25,320 --> 00:50:26,830 Portanto, a chave para um seria zero. 1076 00:50:26,830 --> 00:50:28,610 A chave para dois seria um. 1077 00:50:28,610 --> 00:50:31,910 Assim por diante e assim por diante, a menos que você atribuir explicitamente uma chave, 1078 00:50:31,910 --> 00:50:34,630 você poderia supor que o valor é apenas seu índice. 1079 00:50:34,630 --> 00:50:37,290 Isso faz sentido para todos? 1080 00:50:37,290 --> 00:50:38,070 Não há perguntas? 1081 00:50:38,070 --> 00:50:38,930 Impressionante. 1082 00:50:38,930 --> 00:50:44,420 >> OK, foreach é uma forma de iteração através de suas matrizes. 1083 00:50:44,420 --> 00:50:47,490 Então nós temos alguma coisa aqui, apenas a estrutura geral. 1084 00:50:47,490 --> 00:50:51,020 Então foreach, o nome de nossa matriz, como o que quer 1085 00:50:51,020 --> 00:50:53,930 você quer chamar cada elemento em sua matriz, 1086 00:50:53,930 --> 00:50:57,270 e nós podemos fazer alguma coisa com esse elemento ou com esse valor. 1087 00:50:57,270 --> 00:50:58,680 Portanto, temos um exemplo aqui. 1088 00:50:58,680 --> 00:51:05,770 Temos uma associativa matriz com estas duas entradas 1089 00:51:05,770 --> 00:51:10,080 com bar sendo associado com foo e Qux sendo associado com Baz. 1090 00:51:10,080 --> 00:51:12,180 Assim, as chaves são foo e baz. 1091 00:51:12,180 --> 00:51:13,650 Os valores são bar e Qux. 1092 00:51:13,650 --> 00:51:18,560 Então foreach, temos a nossa disposição aqui, como o par de valor de chave. 1093 00:51:18,560 --> 00:51:21,560 Isso nos permite acesso tanto a chave e valor. 1094 00:51:21,560 --> 00:51:23,680 Talvez você só quer o valor, em cujo caso 1095 00:51:23,680 --> 00:51:27,640 você poderia apenas fazer como arr quanto $ valor, e então você 1096 00:51:27,640 --> 00:51:30,640 são apenas acessar o valor da como você iterar. 1097 00:51:30,640 --> 00:51:32,600 Mas talvez, para alguns razão, você quer a chave, 1098 00:51:32,600 --> 00:51:35,460 é por isso que eu escolhi Neste exemplo, em vez. 1099 00:51:35,460 --> 00:51:40,240 Então você pode realmente manipular chave e valor neste caso. 1100 00:51:40,240 --> 00:51:41,070 OK? 1101 00:51:41,070 --> 00:51:41,905 Pergunta? 1102 00:51:41,905 --> 00:51:44,279 >> Audiência: Se você quisesse apenas manipular a tecla, seria 1103 00:51:44,279 --> 00:51:45,910 você tem que fazer foreach-- 1104 00:51:45,910 --> 00:51:47,360 >> ALISON: Certo. 1105 00:51:47,360 --> 00:51:50,560 Então, se você queria manipular apenas a chave, 1106 00:51:50,560 --> 00:51:53,680 você ainda precisa esta sintaxe, porque se você apenas 1107 00:51:53,680 --> 00:51:56,930 ter arr como algo, como uma coisa, é 1108 00:51:56,930 --> 00:52:00,070 indo supor que você quer o valor, não a chave. 1109 00:52:00,070 --> 00:52:06,780 Então, se você já só tem apenas como arr como, talvez isso é como US $ elemento, 1110 00:52:06,780 --> 00:52:11,670 ele vai assumir que você está pedindo para apenas o valor em cada ponto. 1111 00:52:11,670 --> 00:52:13,879 Se você quiser explicitamente fazer algo com a chave, 1112 00:52:13,879 --> 00:52:16,170 mesmo se você não está indo para fazer qualquer coisa com o valor, 1113 00:52:16,170 --> 00:52:18,430 você precisa dessa estrutura que temos aqui 1114 00:52:18,430 --> 00:52:22,330 onde você está pedindo explicitamente tanto para a chave e o valor. 1115 00:52:22,330 --> 00:52:24,170 Ótima pergunta. 1116 00:52:24,170 --> 00:52:25,940 Algo mais? 1117 00:52:25,940 --> 00:52:27,490 Com estilo. 1118 00:52:27,490 --> 00:52:29,911 >> Tudo bem, PHP e HTML. 1119 00:52:29,911 --> 00:52:31,410 Oh, estamos de volta para-p definir sete novamente. 1120 00:52:31,410 --> 00:52:35,380 Portanto, este deve ser um pouco familiar. 1121 00:52:35,380 --> 00:52:41,760 Portanto, esta é uma forma simples de HTML que tem algum nome da entrada de Olá. 1122 00:52:41,760 --> 00:52:43,820 E vemos que temos o nosso método de GET. 1123 00:52:43,820 --> 00:52:47,430 E se nos lembrarmos da nossa p-set, quando este formulário é enviado, 1124 00:52:47,430 --> 00:52:58,130 ele envia um array chamado $ _GET que tem Todos esses insumos ou variáveis 1125 00:52:58,130 --> 00:53:00,490 a forma que deve ser manipulado no nosso PHP. 1126 00:53:00,490 --> 00:53:03,320 Portanto, neste caso, o usuário colocaria em seu nome. 1127 00:53:03,320 --> 00:53:04,370 Eles apresentá-lo. 1128 00:53:04,370 --> 00:53:07,810 E vemos que temos algum matriz aqui. 1129 00:53:07,810 --> 00:53:09,080 Nós temos nossa matriz GET. 1130 00:53:09,080 --> 00:53:11,510 E estamos acessando o nome. 1131 00:53:11,510 --> 00:53:15,070 >> Então, que diz: OK, dá-me a valor que está associado com o nome, 1132 00:53:15,070 --> 00:53:16,550 nome sendo a chave aqui. 1133 00:53:16,550 --> 00:53:21,400 E que mapeia diretamente para o Nós dissemos que nosso nome de entrada é. 1134 00:53:21,400 --> 00:53:28,960 Portanto, este foi o que lhe dá a chave para o que está indo para a sua matriz aqui. 1135 00:53:28,960 --> 00:53:31,220 Isso faz sentido para todos? 1136 00:53:31,220 --> 00:53:32,070 Sim? 1137 00:53:32,070 --> 00:53:36,240 >> AUDIÊNCIA: Será que o nome em GET consulte para a linha roxa em [inaudível]? 1138 00:53:36,240 --> 00:53:37,740 >> ALISON: Refere-se a isso aqui. 1139 00:53:37,740 --> 00:53:43,840 Portanto, este campo aqui mesmo, refere-se a este nome aqui. 1140 00:53:43,840 --> 00:53:47,800 Portanto, este poderia ter sido nomeado como número de telefone, ou o que quer. 1141 00:53:47,800 --> 00:53:51,790 Este nome, na verdade, diz, o que você está chamando neste campo? 1142 00:53:51,790 --> 00:53:53,600 Como você está indo para referem-se a este campo? 1143 00:53:53,600 --> 00:53:57,670 E esse nome é, na verdade, gosto, estamos dizendo que este campo é chamado de nome. 1144 00:53:57,670 --> 00:53:59,224 É assim que nós estamos indo para acessá-lo. 1145 00:53:59,224 --> 00:54:02,070 >> AUDIÊNCIA: Assim é que gosta, nome de entrada é igual a Bob, e- 1146 00:54:02,070 --> 00:54:04,380 >> ALISON: Certo, então você obteria Bob lá em baixo. 1147 00:54:04,380 --> 00:54:06,090 Exatamente. 1148 00:54:06,090 --> 00:54:07,800 Todo mundo cool? 1149 00:54:07,800 --> 00:54:10,990 Tudo bem, assim que começar contra o POST, estas são as duas principais formas 1150 00:54:10,990 --> 00:54:14,880 que passar dados em uma solicitação HTTP. 1151 00:54:14,880 --> 00:54:17,370 Vocês devem ter visto ambos estes esperançoso. 1152 00:54:17,370 --> 00:54:20,940 Assim, com GET, as informações é passada através do URL. 1153 00:54:20,940 --> 00:54:23,490 Então, se você nunca fazer Google buscas, YouTube, você vai 1154 00:54:23,490 --> 00:54:25,130 provavelmente notar algum ponto de interrogação. 1155 00:54:25,130 --> 00:54:28,230 E então, todas as palavras que você acabou de colocar lá. 1156 00:54:28,230 --> 00:54:31,410 E POST passa os dados no corpo da mensagem HTTP. 1157 00:54:31,410 --> 00:54:36,922 Portanto, ao contrário GET, você meio que considere que os dados são escondidos do usuário. 1158 00:54:36,922 --> 00:54:38,630 Mas o que é realmente importante compreender 1159 00:54:38,630 --> 00:54:44,040 é que este ainda é tão inseguro como GET. 1160 00:54:44,040 --> 00:54:48,780 A analogia que eu gosto de usar é se você tem o seu número de conta bancária 1161 00:54:48,780 --> 00:54:52,795 e você escrevê-lo do lado de fora um envelope, que é muito inseguro. 1162 00:54:52,795 --> 00:54:55,920 Se você tivesse que escrever em um pedaço de papel e colocá-lo dentro do envelope, 1163 00:54:55,920 --> 00:54:58,850 ainda é muito insegura porque tudo que você tem a fazer é abrir-se que 1164 00:54:58,850 --> 00:55:03,480 e olhar para o conteúdo real da mensagem para ver isso. 1165 00:55:03,480 --> 00:55:08,310 Portanto, este é "escondido", e as pessoas gostam de acho que é seguro, mas não é realmente. 1166 00:55:08,310 --> 00:55:11,000 E eu tenho certeza que vai Davin entrar nisso mais, talvez. 1167 00:55:11,000 --> 00:55:12,850 Mas é um importante distinção a fazer 1168 00:55:12,850 --> 00:55:15,820 e algo realmente bom para entender. 1169 00:55:15,820 --> 00:55:19,220 >> OK, SQL, Structured Query Language. 1170 00:55:19,220 --> 00:55:22,220 Todas as coisas que temos visto até recentemente! 1171 00:55:22,220 --> 00:55:25,400 Então é basicamente projetado, obviamente, para o gerenciamento de dados. 1172 00:55:25,400 --> 00:55:30,560 Vocês tiveram muita experiência com isso em suas tabelas com PHP MyAdmin. 1173 00:55:30,560 --> 00:55:34,100 E há quatro consultas comuns que quero que vocês conhecem. 1174 00:55:34,100 --> 00:55:37,304 Portanto, não há atualização, inserção selecionar e excluir. 1175 00:55:37,304 --> 00:55:38,970 Portanto, verifique se você sabe quem realmente bem. 1176 00:55:38,970 --> 00:55:40,960 Nós estamos indo para ir através deles muito rápido. 1177 00:55:40,960 --> 00:55:44,340 >> Então atualizar, realmente, como o que você poderia pensar que ele faz, 1178 00:55:44,340 --> 00:55:46,740 ele apenas atualiza os dados em seu banco de dados. 1179 00:55:46,740 --> 00:55:48,750 Portanto, temos alguns exemplos aqui. 1180 00:55:48,750 --> 00:55:53,310 Este é o geral estrutura de uma consulta atualização. 1181 00:55:53,310 --> 00:55:56,150 Por isso, atualizar a tabela que nós estamos falando. 1182 00:55:56,150 --> 00:56:00,520 E nós queremos definir certo valores, determinadas colunas 1183 00:56:00,520 --> 00:56:02,600 igual a valores específicos. 1184 00:56:02,600 --> 00:56:07,500 Portanto, este apenas atualiza a tabela, mudando valores em todas as linhas no presente caso. 1185 00:56:07,500 --> 00:56:13,690 Assim, em um presente para baixo aqui, um verdadeiro exemplo, temos insert-- desculpe. 1186 00:56:13,690 --> 00:56:17,630 Esse slide avançado sem me dar conta. 1187 00:56:17,630 --> 00:56:22,230 >> Então esta tabela atualizações definir col1 igual para val1 onde a casa é igual a "Currier." 1188 00:56:22,230 --> 00:56:25,300 O que isto se faz é só muda, ela só 1189 00:56:25,300 --> 00:56:28,130 atualiza esses valores em lugares específicos. 1190 00:56:28,130 --> 00:56:32,300 Assim, neste primeiro, ele muda estes valores para tudo em sua mesa, 1191 00:56:32,300 --> 00:56:32,860 OK? 1192 00:56:32,860 --> 00:56:35,820 Vai mudar isso coluna para cada entrada única, 1193 00:56:35,820 --> 00:56:37,020 para cada linha. 1194 00:56:37,020 --> 00:56:40,840 Mas este, onde, você poderia pense nisso como um qualificador. 1195 00:56:40,840 --> 00:56:44,020 Por isso, só vai mudar -lo em lugares muito específicos. 1196 00:56:44,020 --> 00:56:47,840 Assim, em-p definir sete, quando você talvez atualizou a quantidade de dinheiro 1197 00:56:47,840 --> 00:56:53,050 que o usuário teve, você provavelmente teve alguns onde ID é igual a sessão ID, certo? 1198 00:56:53,050 --> 00:56:55,280 >> Porque você não quis alterar a quantidade de dinheiro 1199 00:56:55,280 --> 00:56:57,630 para cada pessoa que estava usando o seu site. 1200 00:56:57,630 --> 00:57:00,480 Você queria mudá-lo para um determinada pessoa, essa pessoa estar 1201 00:57:00,480 --> 00:57:02,410 quem estava a usá-lo naquele momento. 1202 00:57:02,410 --> 00:57:04,320 Certo? 1203 00:57:04,320 --> 00:57:07,510 OK, então inserir, inserção certos valores em tabelas. 1204 00:57:07,510 --> 00:57:11,650 Isto é como quando você está a criação de um novo usuário. 1205 00:57:11,650 --> 00:57:14,240 A estrutura geral aqui se inserir em qualquer mesa 1206 00:57:14,240 --> 00:57:15,680 estamos falando. 1207 00:57:15,680 --> 00:57:18,910 Valores, sendo os valores que nós realmente deseja inserir. 1208 00:57:18,910 --> 00:57:23,060 OK, assim como vemos aqui, nós ter inserir na tabela. 1209 00:57:23,060 --> 00:57:27,790 Este é colunas específicas com os respectivos valores correspondiam. 1210 00:57:27,790 --> 00:57:29,940 Portanto, este diz, insert uma nova linha contendo 1211 00:57:29,940 --> 00:57:33,660 valores val1 e val2 sob estas colunas específicas. 1212 00:57:33,660 --> 00:57:39,240 >> Então, talvez você só quer encher a metade das coisas nesta linha. 1213 00:57:39,240 --> 00:57:41,150 Isso é o que esta parte aqui permite que você faça. 1214 00:57:41,150 --> 00:57:43,280 Ele permite que você realmente determinar qual parte. 1215 00:57:43,280 --> 00:57:44,244 Sim? 1216 00:57:44,244 --> 00:57:52,150 >> AUDIÊNCIA: Você pode apenas [inaudível] células na linha [inaudível]? 1217 00:57:52,150 --> 00:57:55,000 >> ALISON: Se você só preencher certas partes de sua linha, 1218 00:57:55,000 --> 00:57:57,480 o resto dessas células são apenas vazio. 1219 00:57:57,480 --> 00:58:02,730 1220 00:58:02,730 --> 00:58:05,660 Contanto que você permitir que eles estar vazio, não é um problema. 1221 00:58:05,660 --> 00:58:09,570 Se você tentar acessá-los, é vai voltar algum elemento vazio. 1222 00:58:09,570 --> 00:58:13,850 Mas é importante saber que em certos quadros, 1223 00:58:13,850 --> 00:58:16,690 Eles têm que ser autorizados a ser nulo. 1224 00:58:16,690 --> 00:58:18,890 Você pode ter executado em um problema durante a sua p-set 1225 00:58:18,890 --> 00:58:21,320 porque não deixar que qualquer de seus valores ser nulo. 1226 00:58:21,320 --> 00:58:26,110 Mas você pode especificar um valor opcional em sua mesa. 1227 00:58:26,110 --> 00:58:29,640 >> OK, selecione, por isso esta é apenas uma maneira de começar 1228 00:58:29,640 --> 00:58:33,790 dados específicos a partir de uma tabela na algum identificador que você deseja. 1229 00:58:33,790 --> 00:58:37,990 Então, selecione Estrela mesa onde col é igual a algo apenas significa, 1230 00:58:37,990 --> 00:58:43,820 dá-me todos os dados associados em que esta coluna específica é verdadeiro. 1231 00:58:43,820 --> 00:58:49,020 Então, a estrela, neste caso, retornar a linha inteira para você, OK? 1232 00:58:49,020 --> 00:58:54,880 >> E então, nesse caso, selecione Estrela mesa apenas dá-lhe toda a tabela. 1233 00:58:54,880 --> 00:58:58,940 E, em seguida, apagar, obviamente, ele só elimina a linha a partir da tabela. 1234 00:58:58,940 --> 00:59:01,320 Então excluir da tabela, qualquer mesa que estamos 1235 00:59:01,320 --> 00:59:06,830 referenciamento, onde alguns específicos identificador ou alguma condição for verdadeira. 1236 00:59:06,830 --> 00:59:07,720 Sim? 1237 00:59:07,720 --> 00:59:08,700 >> AUDIÊNCIA: Pergunta. 1238 00:59:08,700 --> 00:59:10,699 Por que você está usando duplo citações, e se você 1239 00:59:10,699 --> 00:59:13,600 fazer aspas simples ou duplas citações, isso faz alguma diferença? 1240 00:59:13,600 --> 00:59:18,235 >> ALISON: As aspas duplas ou aspas simples não fazer a diferença no SQL. 1241 00:59:18,235 --> 00:59:19,610 Eu pensei que eu vi uma outra pergunta. 1242 00:59:19,610 --> 00:59:20,814 Sim? 1243 00:59:20,814 --> 00:59:25,070 >> AUDIÊNCIA: Não lhe afetar o que fica escapou da consulta? 1244 00:59:25,070 --> 00:59:27,945 >> ALISON: Rob? 1245 00:59:27,945 --> 00:59:31,410 >> ROB: O que você quer dizer com escapado da consulta? 1246 00:59:31,410 --> 00:59:36,870 >> AUDIÊNCIA: Se alguém tem uma consulta única na forma de-- 1247 00:59:36,870 --> 00:59:39,862 >> ROB: Se alguém colocar uma única citação em, 1248 00:59:39,862 --> 00:59:43,560 então, enquanto você está saneantes sua entrada, então não importa. 1249 00:59:43,560 --> 00:59:46,205 Mas se você estiver usando um único Citação e você está incorretamente 1250 00:59:46,205 --> 00:59:47,914 escapando suas entradas, então sim, eles precisam 1251 00:59:47,914 --> 00:59:51,079 para colocar uma única citação, a fim de quebrar seu código. se você usar aspas duplas, 1252 00:59:51,079 --> 00:59:53,580 eles precisam colocar um duplo citar a quebrar seu código. 1253 00:59:53,580 --> 00:59:56,163 Mas, enquanto você escapar coisas corretamente, isso não importa. 1254 00:59:56,163 --> 00:59:59,220 É só passar a ser traduzido para o símbolo correto de qualquer maneira. 1255 00:59:59,220 --> 01:00:02,332 >> AUDIÊNCIA: O que significa fuga significa? 1256 01:00:02,332 --> 01:00:04,040 ALISON: Bem, como saneantes e fuga. 1257 01:00:04,040 --> 01:00:06,810 1258 01:00:06,810 --> 01:00:13,820 O exame que temos, o grande XKCD comic que puxar para cima, onde você tem, 1259 01:00:13,820 --> 01:00:15,629 Oh-- 1260 01:00:15,629 --> 01:00:16,670 ROB: É o último slide. 1261 01:00:16,670 --> 01:00:18,500 ALISON: É o último slide, realmente? 1262 01:00:18,500 --> 01:00:20,200 Meu Deus. 1263 01:00:20,200 --> 01:00:21,780 Lá vamos nós, perfeito. 1264 01:00:21,780 --> 01:00:27,900 OK, então, basicamente, você pode injetar algo para essa consulta SQL 1265 01:00:27,900 --> 01:00:30,560 onde ele quebra o seu código, ou como David mostrou 1266 01:00:30,560 --> 01:00:38,460 em sala de aula, se tivermos algum único Citação 1 é igual a 1 e se em nosso código, 1267 01:00:38,460 --> 01:00:41,230 nós apenas copiar diretamente em que, e temos uma aspa única de fim, 1268 01:00:41,230 --> 01:00:44,740 o que acontece é chegarmos que alguma expressão 1269 01:00:44,740 --> 01:00:48,680 avalia a verdade que vai deixar alguém entrar na nossa base de dados 1270 01:00:48,680 --> 01:00:51,720 e obter dados que não quer que eles fiquem. 1271 01:00:51,720 --> 01:00:54,240 Então higienização das entradas significa apenas certificando-se 1272 01:00:54,240 --> 01:00:57,680 que estamos escapando estes personagens e designando- 1273 01:00:57,680 --> 01:01:01,720 como caracteres e não coisas que deve ser permitido 1274 01:01:01,720 --> 01:01:04,990 deve ser tomada literalmente como a nossa instrução SQL. 1275 01:01:04,990 --> 01:01:09,980 >> Assim, a grande coisa que dissemos que vocês deveriam estar usando 1276 01:01:09,980 --> 01:01:13,650 eram HTML caracteres especiais, que é algo 1277 01:01:13,650 --> 01:01:15,730 que você pode querer dar uma olhada. 1278 01:01:15,730 --> 01:01:17,240 OK, excluir. 1279 01:01:17,240 --> 01:01:19,450 Os tipos de dados, tudo isso vai estar on-line. 1280 01:01:19,450 --> 01:01:23,510 Uma vez que temos 15 minutos para a esquerda, eu sou só vai dar certo por isso. 1281 01:01:23,510 --> 01:01:28,500 PHP e SQL, basicamente, este é apenas tivemos uma função de consulta que 1282 01:01:28,500 --> 01:01:31,520 ajudou a proteger contra esses ataques maliciosos. 1283 01:01:31,520 --> 01:01:33,970 Assim, sempre que você usa consulta, nós estávamos fazendo certo 1284 01:01:33,970 --> 01:01:36,560 que as coisas foram higienizados e outros enfeites. 1285 01:01:36,560 --> 01:01:41,070 >> MVC é apenas um paradigma design, assim model, view, controller. 1286 01:01:41,070 --> 01:01:44,200 É apenas uma maneira de manter as coisas agradável e dividido da mesma forma 1287 01:01:44,200 --> 01:01:47,100 que temos a tendência de fator código em funções. 1288 01:01:47,100 --> 01:01:53,390 Este é apenas um quadro de web design que permite que você faça a mesma coisa. 1289 01:01:53,390 --> 01:01:54,760 Eu vou pular esta. 1290 01:01:54,760 --> 01:01:58,530 >> Isso é algo que eu Seria super confortável com. 1291 01:01:58,530 --> 01:02:01,132 É uma grande mesa pouco ali. 1292 01:02:01,132 --> 01:02:03,090 Dá-lhe a função de exemplo do modelo. 1293 01:02:03,090 --> 01:02:05,473 Eu só estou passando por isso porque eu realmente quer Davin para ser capaz de falar. 1294 01:02:05,473 --> 01:02:07,140 Se você tiver alguma dúvida, por favor, sinta-se livre. 1295 01:02:07,140 --> 01:02:07,931 Eu vou estar aqui depois. 1296 01:02:07,931 --> 01:02:10,360 Basta vir falar comigo. 1297 01:02:10,360 --> 01:02:13,380 Com isso, temos um status HTTP. 1298 01:02:13,380 --> 01:02:16,270 E Davin vai explodir através desta em 15 minutos. 1299 01:02:16,270 --> 01:02:17,560 Isso vai ser ótimo. 1300 01:02:17,560 --> 01:02:18,893 >> DAVIN: OK. 1301 01:02:18,893 --> 01:02:20,312 Uh, seu microfone? 1302 01:02:20,312 --> 01:02:22,210 Sim. 1303 01:02:22,210 --> 01:02:23,336 Desculpe. 1304 01:02:23,336 --> 01:02:24,460 ALISON: Caminho para ser preparado. 1305 01:02:24,460 --> 01:02:25,335 DAVIN: Não, eu estou pronto. 1306 01:02:25,335 --> 01:02:25,860 Estou pronto. 1307 01:02:25,860 --> 01:02:28,790 Vamos fazer isso. 1308 01:02:28,790 --> 01:02:29,290 Ele está pronto. 1309 01:02:29,290 --> 01:02:30,041 OK. 1310 01:02:30,041 --> 01:02:30,540 Desculpe. 1311 01:02:30,540 --> 01:02:31,664 Eu derramei café em mim mesmo. 1312 01:02:31,664 --> 01:02:36,037 1313 01:02:36,037 --> 01:02:38,210 Eu não sei se eu sou mais chateado que eu parecer ridículo, 1314 01:02:38,210 --> 01:02:40,600 ou que eu não tenho mais café. 1315 01:02:40,600 --> 01:02:44,480 De qualquer forma, apenas um anúncio rápido sobre a folha de vocês têm. 1316 01:02:44,480 --> 01:02:47,994 Portanto, esta folha de vocês têm não é o funcionário que está no quiz. 1317 01:02:47,994 --> 01:02:49,660 Este é o oficial que está no quiz. 1318 01:02:49,660 --> 01:02:52,520 Além disso, no site, nós dizemos você, OK, isso vai estar no quiz. 1319 01:02:52,520 --> 01:02:55,020 Então, na pequena cábula você tem, não oficial. 1320 01:02:55,020 --> 01:02:56,690 E há erros nele. 1321 01:02:56,690 --> 01:03:01,490 Então, melhor não apenas usá-lo cegamente. 1322 01:03:01,490 --> 01:03:04,390 Então, sim, é isso. 1323 01:03:04,390 --> 01:03:05,980 Então, vamos entrar neste real rápido. 1324 01:03:05,980 --> 01:03:07,420 >> Assim status HTTP. 1325 01:03:07,420 --> 01:03:10,430 Então o que acontece quando o website, está tudo bem. 1326 01:03:10,430 --> 01:03:11,144 Está tudo OK. 1327 01:03:11,144 --> 01:03:13,310 Tudo vem de volta para do jeito que você quer que seja. 1328 01:03:13,310 --> 01:03:15,370 Você ganha um 200 OK. 1329 01:03:15,370 --> 01:03:19,250 301, onde vimos que 301 antes? 1330 01:03:19,250 --> 01:03:20,890 Espere, o que está acontecendo? 1331 01:03:20,890 --> 01:03:23,250 Desculpe. 1332 01:03:23,250 --> 01:03:24,980 Vimos i palestra estanho durante segurança. 1333 01:03:24,980 --> 01:03:30,690 Assim, durante segurança, por isso, se David digitou http e, em seguida, fechar um pacote cs50.net, 1334 01:03:30,690 --> 01:03:31,940 você vai ver 301 movido. 1335 01:03:31,940 --> 01:03:32,440 Por quê? 1336 01:03:32,440 --> 01:03:35,570 Porque ele vai redirecionar você automaticamente para a nossa HTTPS. 1337 01:03:35,570 --> 01:03:38,649 >> Então 301 movido, apenas é basicamente um redirecionamento. 1338 01:03:38,649 --> 01:03:40,190 E você pode pensar nisso como este. 1339 01:03:40,190 --> 01:03:43,790 Qualquer um dos estados que começam com 2 do, aqueles são como, OK, está tudo OK. 1340 01:03:43,790 --> 01:03:46,530 Qualquer um dos estados que começam com 3, esses são redirecionamento. 1341 01:03:46,530 --> 01:03:49,571 Os status que começam com 4, o que significa há algum tipo de erro de cliente. 1342 01:03:49,571 --> 01:03:52,440 Os status que começam com 5, isso é algum tipo de erro no servidor. 1343 01:03:52,440 --> 01:03:54,680 Então você meio que quebrar os status assim. 1344 01:03:54,680 --> 01:03:59,120 Então não 304 não modificado, portanto, em seu server.c p-sets, então vamos dizer que você 1345 01:03:59,120 --> 01:04:00,600 cat.html carregado. 1346 01:04:00,600 --> 01:04:03,360 Tudo vem de volta, você começa 200s, OK, ótimo. 1347 01:04:03,360 --> 01:04:04,540 >> Vamos dizer que você refrescou-lo. 1348 01:04:04,540 --> 01:04:07,310 Bem, dentro desse cat.html, você tem um JPEG. 1349 01:04:07,310 --> 01:04:09,520 Bem, isso não é JPEG vai ser recarregado. 1350 01:04:09,520 --> 01:04:12,140 Você não está indo para postar outra Pedido GET para o servidor, 1351 01:04:12,140 --> 01:04:13,980 e, em seguida, obter todas as informações de volta. 1352 01:04:13,980 --> 01:04:17,560 Vai apenas ser-- essa imagem é vai ser armazenada em cache em sua máquina. 1353 01:04:17,560 --> 01:04:19,540 E assim que a imagem será um 304. 1354 01:04:19,540 --> 01:04:20,720 Por isso, não foi modificado. 1355 01:04:20,720 --> 01:04:24,600 Se você, em seguida, fechar, claro cookies, e em seguida, atualize 1356 01:04:24,600 --> 01:04:27,490 e tentar carregar a página mais uma vez, você vai ver 200s. 1357 01:04:27,490 --> 01:04:28,910 Você não vai ver que 304. 1358 01:04:28,910 --> 01:04:32,340 >> 400, mau pedido, bens rápido como se você, 1359 01:04:32,340 --> 01:04:34,880 estavam indo para enviar uma JSON objeto para o servidor 1360 01:04:34,880 --> 01:04:38,090 e seu objeto JSON estava incorreta, você vai ver algo como isso. 1361 01:04:38,090 --> 01:04:39,000 403, proibido. 1362 01:04:39,000 --> 01:04:40,330 Quando você ver um proibido? 1363 01:04:40,330 --> 01:04:41,394 Provavelmente Provavelmente? 1364 01:04:41,394 --> 01:04:42,060 AUDIÊNCIA: Chmod. 1365 01:04:42,060 --> 01:04:42,950 DAVIN: Chmod, sim. 1366 01:04:42,950 --> 01:04:44,730 Então você não tiver definido permissões corretamente. 1367 01:04:44,730 --> 01:04:45,577 404, não foi encontrado. 1368 01:04:45,577 --> 01:04:46,410 É simplesmente não existe. 1369 01:04:46,410 --> 01:04:48,670 Então, se você digitar a URL errada. 1370 01:04:48,670 --> 01:04:53,500 500, erro interno do servidor, o servidor provavelmente não foi configurado corretamente. 1371 01:04:53,500 --> 01:04:56,260 Algo que não é do seu lado, mas algo no lado do servidor. 1372 01:04:56,260 --> 01:04:57,240 E 503? 1373 01:04:57,240 --> 01:04:59,502 Muita gente viu 503s no último p-set. 1374 01:04:59,502 --> 01:05:00,460 Quando isso acontecer? 1375 01:05:00,460 --> 01:05:04,180 1376 01:05:04,180 --> 01:05:05,660 Eu ouvi sussurros. 1377 01:05:05,660 --> 01:05:07,767 >> AUDIÊNCIA: Quando o Google decide você é um robô. 1378 01:05:07,767 --> 01:05:10,350 DAVIN: Sim, quando o Google decide você é um robô, você começa 503s. 1379 01:05:10,350 --> 01:05:11,560 Então, isso é uma sobrecarga. 1380 01:05:11,560 --> 01:05:14,620 Se você tiver solicitado do servidor demais, geralmente é temporário. 1381 01:05:14,620 --> 01:05:15,560 E a maioria de vocês perceberam. 1382 01:05:15,560 --> 01:05:16,185 Então você viu 503. 1383 01:05:16,185 --> 01:05:19,282 Você poderia ter tomado um pouco pausa, em seguida, os 503s foi embora, 1384 01:05:19,282 --> 01:05:20,490 e tudo estava bem. 1385 01:05:20,490 --> 01:05:26,640 >> GABE: Real rápida, quando é que vocês se 500 em, provavelmente, este último conjunto de problemas? 1386 01:05:26,640 --> 01:05:27,954 Sim? 1387 01:05:27,954 --> 01:05:30,906 >> AUDIÊNCIA: Normalmente, se o servidor tem um arquivo perdido 1388 01:05:30,906 --> 01:05:34,650 ou [inaudível] sua máquina [inaudível]. 1389 01:05:34,650 --> 01:05:38,870 >> GABE: Portanto, pode ser uma configuração problema em seu PHP em seu servidor. 1390 01:05:38,870 --> 01:05:42,250 Mas pode ser apenas algo como um ponto e vírgula que o esqueceu. 1391 01:05:42,250 --> 01:05:44,130 Se você está digitando PHP, alguns sintaxe incorreta 1392 01:05:44,130 --> 01:05:46,000 pode te deixar algo assim. 1393 01:05:46,000 --> 01:05:46,960 OK? 1394 01:05:46,960 --> 01:05:48,610 >> DAVIN: Cool. 1395 01:05:48,610 --> 01:05:51,180 Você quer que eu faça apenas até AJAX? 1396 01:05:51,180 --> 01:05:52,950 >> GABE: [inaudível]. 1397 01:05:52,950 --> 01:05:53,450 DAVIN: OK. 1398 01:05:53,450 --> 01:05:54,230 Então, qual é o DOM? 1399 01:05:54,230 --> 01:05:55,290 O que o DOM representa? 1400 01:05:55,290 --> 01:05:56,990 >> AUDIÊNCIA: Document Object Model. 1401 01:05:56,990 --> 01:05:57,490 DAVIN: Nice. 1402 01:05:57,490 --> 01:06:00,775 E por que nós gostamos? 1403 01:06:00,775 --> 01:06:02,670 Impressionante. 1404 01:06:02,670 --> 01:06:06,651 Certo, por isso só nos permite acesso o HTML, acesse nossa página muito rapidamente. 1405 01:06:06,651 --> 01:06:07,150 Por quê? 1406 01:06:07,150 --> 01:06:09,980 Porque nós estamos tratando o nosso página, tratando nossos tags HTML, 1407 01:06:09,980 --> 01:06:11,730 tratar tudo como se fossem objetos. 1408 01:06:11,730 --> 01:06:13,710 Se vamos tratá-los como eles são objetos, então o que podemos fazer? 1409 01:06:13,710 --> 01:06:15,210 Bem, podemos chamar funções neles. 1410 01:06:15,210 --> 01:06:16,460 E isso é importante porquê? 1411 01:06:16,460 --> 01:06:19,200 Bem, porque nós estamos indo para usar JavaScript para atualizar o nosso HTML, 1412 01:06:19,200 --> 01:06:20,500 atualizar esses objetos. 1413 01:06:20,500 --> 01:06:23,869 Então, se nós tratá-las como objetos, Podemos então chamar funções neles. 1414 01:06:23,869 --> 01:06:26,660 Eu vou entrar neste um pouco mais quando eu entro em JavaScript, 1415 01:06:26,660 --> 01:06:30,510 mas todos vimos como document.getElementById. 1416 01:06:30,510 --> 01:06:32,870 Então documento é o seu elemento, obter elemento por ID, 1417 01:06:32,870 --> 01:06:35,087 então você está indo olhar para alguns ID em uma tag HTML. 1418 01:06:35,087 --> 01:06:36,920 E então, você pode fazer outra coisa para isso. 1419 01:06:36,920 --> 01:06:40,089 Por exemplo, como document.body, em seguida, você pode acrescentar criança. 1420 01:06:40,089 --> 01:06:41,630 Então, você vai encontrar o documento. 1421 01:06:41,630 --> 01:06:42,340 Você tem o documento. 1422 01:06:42,340 --> 01:06:43,629 Você vai encontrar o corpo. 1423 01:06:43,629 --> 01:06:44,420 Você encontrou o corpo. 1424 01:06:44,420 --> 01:06:46,545 E então, você vai chamar alguma função nele. 1425 01:06:46,545 --> 01:06:50,312 Então acrescente criança, e você pode acrescentar alguns HTML para o final dentro do seu corpo. 1426 01:06:50,312 --> 01:06:52,520 Então, basicamente, você é apenas tratando-o como um objeto. 1427 01:06:52,520 --> 01:06:54,515 Você está tratando HTML tags como um objeto. 1428 01:06:54,515 --> 01:06:57,071 E isso faz com que seja muito fácil e rápido para passar por eles. 1429 01:06:57,071 --> 01:06:59,070 Mas também permite que você para chamar funções neles 1430 01:06:59,070 --> 01:07:04,410 para que você possa manipular e mudar os elementos. 1431 01:07:04,410 --> 01:07:10,162 >> GABE: Diante disso, por que é JavaScript, tais uma linguagem agradável para interagir com HTML? 1432 01:07:10,162 --> 01:07:12,870 As probabilidades são, quando as pessoas estavam escolhendo o idioma do browser, 1433 01:07:12,870 --> 01:07:14,990 para o lado do cliente, JavaScript é muito bom, 1434 01:07:14,990 --> 01:07:16,765 é realmente bom para lidar com objetos. 1435 01:07:16,765 --> 01:07:20,620 E os objetos são o tipo de gosto os objetos que aparecem no HTML, 1436 01:07:20,620 --> 01:07:23,940 por isso é muito fácil para JavaScript para fazer esse tipo de manipulação. 1437 01:07:23,940 --> 01:07:24,440 DAVIN: Nice. 1438 01:07:24,440 --> 01:07:25,670 Então, aqui é apenas um exemplo. 1439 01:07:25,670 --> 01:07:29,020 Então eu acho que no teste do ano passado, ou talvez dois anos atrás, nós 1440 01:07:29,020 --> 01:07:30,840 pediu-lhe para criar uma árvore. 1441 01:07:30,840 --> 01:07:32,660 Portanto, este é exatamente o que você faria. 1442 01:07:32,660 --> 01:07:34,255 Então você começa com documento. 1443 01:07:34,255 --> 01:07:36,130 E então você basicamente basta olhar para as tags. 1444 01:07:36,130 --> 01:07:38,100 Então, se você olhar, nós começar com uma tag HTML. 1445 01:07:38,100 --> 01:07:41,660 E então, você tem pistas sobre como a fazer isso com base no recuo. 1446 01:07:41,660 --> 01:07:43,870 Assim, tipo cabeça de ramos off. 1447 01:07:43,870 --> 01:07:46,242 Dentro da cabeça, temos outra tag para o título. 1448 01:07:46,242 --> 01:07:47,450 Então, temos uma tag título. 1449 01:07:47,450 --> 01:07:49,760 E dentro disso, temos alguns string. 1450 01:07:49,760 --> 01:07:52,210 E assim nós representamos uma corda em um círculo. 1451 01:07:52,210 --> 01:07:54,010 E todas as marcas estão em praças. 1452 01:07:54,010 --> 01:07:56,270 >> E se você olhar, se nós pensar nisso como uma árvore, 1453 01:07:56,270 --> 01:07:58,730 e digamos que é HTML um pai, em seguida, cabeça e corpo 1454 01:07:58,730 --> 01:07:59,772 vão ser irmãos. 1455 01:07:59,772 --> 01:08:01,813 Ambos estão indo para ser filhos de que o pai. 1456 01:08:01,813 --> 01:08:03,620 Então, porque eles são ambos os irmãos, eles são 1457 01:08:03,620 --> 01:08:06,590 vai ser tipo de ao lado uns aos outros em nosso modelo de árvore. 1458 01:08:06,590 --> 01:08:08,590 E então, você basicamente fazer exatamente a mesma coisa. 1459 01:08:08,590 --> 01:08:13,512 Então, não é difícil, mas nós pedimos perguntas como esta antes no questionário. 1460 01:08:13,512 --> 01:08:15,220 GABE: Alguém tem perguntas até agora? 1461 01:08:15,220 --> 01:08:16,357 Isso é bom? 1462 01:08:16,357 --> 01:08:16,856 DAVIN: Cool. 1463 01:08:16,856 --> 01:08:19,630 1464 01:08:19,630 --> 01:08:21,600 JavaScript, OK, as coisas boas. 1465 01:08:21,600 --> 01:08:24,069 Então JavaScript, o que é JavaScript? 1466 01:08:24,069 --> 01:08:28,370 Bem, JavaScript é-- é complicada, mas estes 1467 01:08:28,370 --> 01:08:30,727 são alguns dos destaques que você deve ter em mente. 1468 01:08:30,727 --> 01:08:31,810 Em primeiro lugar, é vagamente digitado. 1469 01:08:31,810 --> 01:08:33,529 O que isso significa? 1470 01:08:33,529 --> 01:08:35,596 Então PHP foi-- sim, qual é? 1471 01:08:35,596 --> 01:08:39,854 >> AUDIÊNCIA: Você não tem que explicitamente estado que tipo de variável que é. 1472 01:08:39,854 --> 01:08:40,479 DAVIN: Perfect. 1473 01:08:40,479 --> 01:08:43,270 Então, ele disse que você não tem que mencionar explicitamente o tipo de variável. 1474 01:08:43,270 --> 01:08:44,160 Isto é exatamente correto. 1475 01:08:44,160 --> 01:08:49,700 Assim, em C, se eu tivesse int i é igual a 50, em seguida, em PHP, é só assim, $ i, 1476 01:08:49,700 --> 01:08:50,550 é igual a 50. 1477 01:08:50,550 --> 01:08:54,319 Então, em JavaScript, qual seria a resposta? 1478 01:08:54,319 --> 01:08:55,260 Var, certo? 1479 01:08:55,260 --> 01:08:56,566 Seria como var i é igual a 50. 1480 01:08:56,566 --> 01:08:58,649 Mas você não tem que ser como, OK, este é um int. 1481 01:08:58,649 --> 01:09:00,350 OK, este é um string. 1482 01:09:00,350 --> 01:09:01,731 Não há necessidade de fazer isso. 1483 01:09:01,731 --> 01:09:02,939 É uma linguagem interpretada. 1484 01:09:02,939 --> 01:09:04,904 Então, o que isso significa? 1485 01:09:04,904 --> 01:09:06,340 >> AUDIÊNCIA: Não compilado. 1486 01:09:06,340 --> 01:09:10,470 >> DAVIN: O que não compilado significa? 1487 01:09:10,470 --> 01:09:11,392 Sim? 1488 01:09:11,392 --> 01:09:15,336 >> AUDIÊNCIA: Você não tem para reestruturar o código 1489 01:09:15,336 --> 01:09:18,294 para obtê-lo pronto para o computador para executá-lo. 1490 01:09:18,294 --> 01:09:23,144 É só tomada no momento de execução e o computador [inaudível]. 1491 01:09:23,144 --> 01:09:25,560 DAVIN: Sim, por isso vai para passar através de um intérprete. 1492 01:09:25,560 --> 01:09:26,750 Mas você está absolutamente certo. 1493 01:09:26,750 --> 01:09:28,319 Então, você nunca vai compilá-lo, certo? 1494 01:09:28,319 --> 01:09:30,399 Quando você estava fazendo o seu PHP e código JavaScript, 1495 01:09:30,399 --> 01:09:31,365 você nunca chamado de compilação. 1496 01:09:31,365 --> 01:09:33,779 Você nunca chamado algo como fazer ou qualquer coisa assim. 1497 01:09:33,779 --> 01:09:34,800 Isso porque ele é interpretado. 1498 01:09:34,800 --> 01:09:37,319 Então, toda vez que passa pelo browser, ele passa por um intérprete. 1499 01:09:37,319 --> 01:09:40,370 E que vai interpretá-lo apenas em tempo real de imediato para você. 1500 01:09:40,370 --> 01:09:43,770 Então, quais são alguns pontos positivos e negativos para ter uma linguagem interpretada 1501 01:09:43,770 --> 01:09:45,258 e tendo uma linguagem compilada? 1502 01:09:45,258 --> 01:09:48,240 1503 01:09:48,240 --> 01:09:50,540 Então compiling-- sim, qual é? 1504 01:09:50,540 --> 01:09:52,444 >> AUDIÊNCIA: Interpretado é mais lento. 1505 01:09:52,444 --> 01:09:53,319 DAVIN: Em que sentido? 1506 01:09:53,319 --> 01:09:57,167 1507 01:09:57,167 --> 01:09:59,091 >> AUDIÊNCIA: Depois que você compilar, você não tem 1508 01:09:59,091 --> 01:10:04,400 fazer quaisquer medidas adicionais para executar -lo, considerando que esta [inaudível]. 1509 01:10:04,400 --> 01:10:05,570 >> DAVIN: Certo, perfeito. 1510 01:10:05,570 --> 01:10:08,386 Então, o que você disse é basicamente, que a compilação, 1511 01:10:08,386 --> 01:10:10,760 quando compilar, você tem um monte de custos iniciais, certo? 1512 01:10:10,760 --> 01:10:11,760 Você está indo para compilá-lo. 1513 01:10:11,760 --> 01:10:13,750 Mas depois de compilá-lo, o compilador vai para otimizá-lo. 1514 01:10:13,750 --> 01:10:14,840 Vai ser rápido. 1515 01:10:14,840 --> 01:10:16,170 Vai basicamente ser tão rápido quanto ele pode ser. 1516 01:10:16,170 --> 01:10:18,830 Com a interpretação, você nunca tem que custo inicial. 1517 01:10:18,830 --> 01:10:22,260 Em vez disso, ele vai ser um pouco mais lento cada vez que você interpretá-lo. 1518 01:10:22,260 --> 01:10:24,940 E você vai ter que interpretá-la a cada momento. 1519 01:10:24,940 --> 01:10:27,114 Então, ao invés de ter este um custo de tempo, agora que você está 1520 01:10:27,114 --> 01:10:29,530 vai ter que interpretá-lo cada vez que a página é processada. 1521 01:10:29,530 --> 01:10:31,890 >> Então intérpretes são boas, porque você não tem que compilá-lo, 1522 01:10:31,890 --> 01:10:33,980 mas eles são ruins em que cada cronometrar a página é carregada, é 1523 01:10:33,980 --> 01:10:35,771 vai ter que interpretar esta JavaScript. 1524 01:10:35,771 --> 01:10:40,520 E está indo para executar um pouco mais lento do que se estivesse a compilá-lo. 1525 01:10:40,520 --> 01:10:43,044 Permite communicate-- oh, espera. 1526 01:10:43,044 --> 01:10:44,960 Usado para manipular o conteúdo e aparência. 1527 01:10:44,960 --> 01:10:46,043 Acabamos de falar sobre isso. 1528 01:10:46,043 --> 01:10:47,250 Ele usa o DOM. 1529 01:10:47,250 --> 01:10:49,930 AJAX, nós vamos entrar em AJAX em um pouco. 1530 01:10:49,930 --> 01:10:51,520 E então, é do lado do cliente. 1531 01:10:51,520 --> 01:10:53,110 Então PHP é do lado do servidor. 1532 01:10:53,110 --> 01:10:54,360 JavaScript é do lado do cliente. 1533 01:10:54,360 --> 01:10:57,780 O que são positivos para que? 1534 01:10:57,780 --> 01:10:58,280 Ele diz ele. 1535 01:10:58,280 --> 01:11:01,480 1536 01:11:01,480 --> 01:11:02,780 É mais rápido, certo? 1537 01:11:02,780 --> 01:11:05,282 Porque você não tem a-- que é mais rápido. 1538 01:11:05,282 --> 01:11:07,490 Você não tem de se comunicar com algum outro dispositivo. 1539 01:11:07,490 --> 01:11:08,790 Se você está apenas em seu cliente, você nunca está 1540 01:11:08,790 --> 01:11:11,280 vai ter que ir e ver o que está no servidor 1541 01:11:11,280 --> 01:11:13,150 e, em seguida, informar ou algo parecido. 1542 01:11:13,150 --> 01:11:15,410 Assim, do lado do cliente tende a ser um pouco mais rápido. 1543 01:11:15,410 --> 01:11:17,910 >> GABE: Sim, mas isso não significa PHP é 1544 01:11:17,910 --> 01:11:20,440 mais rápido do que o JavaScript ou qualquer coisa do género. 1545 01:11:20,440 --> 01:11:23,270 Correm do tipo da mesma velocidade, porque eles são ambos 1546 01:11:23,270 --> 01:11:24,490 linguagens interpretadas. 1547 01:11:24,490 --> 01:11:26,680 A coisa que é lento aqui é o pedido. 1548 01:11:26,680 --> 01:11:28,870 Então você está realmente indo todo o caminho para o Brasil 1549 01:11:28,870 --> 01:11:31,460 para obter algumas informações que vive lá. 1550 01:11:31,460 --> 01:11:34,590 Mas PHP e JavaScript, eles tipo de correr na mesma velocidade. 1551 01:11:34,590 --> 01:11:37,930 Não é que um é mais rápido do que o outro. 1552 01:11:37,930 --> 01:11:40,600 Isto, também, pegadinha aqui. 1553 01:11:40,600 --> 01:11:47,338 Assim, nunca se torna JavaScript código de máquina, verdadeiro ou falso? 1554 01:11:47,338 --> 01:11:48,590 >> AUDIÊNCIA: False. 1555 01:11:48,590 --> 01:11:49,090 GABE: False. 1556 01:11:49,090 --> 01:11:51,298 Tem que se tornar máquina código porque o código de máquina é 1557 01:11:51,298 --> 01:11:53,210 a única coisa que a máquina entende. 1558 01:11:53,210 --> 01:11:55,800 Mesmo que ele não está compilado, ele ainda se torna o código de máquina 1559 01:11:55,800 --> 01:11:59,120 porque o intérprete é apenas um programa que vai linha por linha 1560 01:11:59,120 --> 01:12:02,170 e transforma essa linha em algo que o computador entende. 1561 01:12:02,170 --> 01:12:02,825 OK? 1562 01:12:02,825 --> 01:12:03,325 Com estilo. 1563 01:12:03,325 --> 01:12:08,530 1564 01:12:08,530 --> 01:12:12,890 >> DAVIN: Aqui é apenas uma base muito Olá programa JavaScript mundo. 1565 01:12:12,890 --> 01:12:15,590 Então, eu não sei se-- você já viu isso. 1566 01:12:15,590 --> 01:12:17,630 Mas você só tem HTML aqui. 1567 01:12:17,630 --> 01:12:21,020 E em vez de realmente colocar o JavaScript nas tags de script, 1568 01:12:21,020 --> 01:12:22,810 assim você normalmente colocá-lo em cabeça. 1569 01:12:22,810 --> 01:12:24,030 Você tem marcas de script. 1570 01:12:24,030 --> 01:12:24,870 Você deixá-la lá. 1571 01:12:24,870 --> 01:12:28,350 Tudo o que fizemos aqui é que nós ligados em-- por isso temos ligada em um arquivo JavaScript 1572 01:12:28,350 --> 01:12:29,137 assim. 1573 01:12:29,137 --> 01:12:30,470 E você tudo feito isso, certo? 1574 01:12:30,470 --> 01:12:34,740 Então, quando você estava usando jQuery e underscore.js no último p-set, 1575 01:12:34,740 --> 01:12:38,700 você não tem toneladas de código em suas marcas de script, em sua cabeça. 1576 01:12:38,700 --> 01:12:41,415 Você poderia fazer isso, mas, em vez você está apenas ligando-in. 1577 01:12:41,415 --> 01:12:43,540 E você está ligando-o em assim como você faz com o CSS. 1578 01:12:43,540 --> 01:12:50,186 Por isso, apenas torna mais fácil de ler de forma seu código não é como mil linhas de longo 1579 01:12:50,186 --> 01:12:52,310 com toneladas de funções que você não pode estar usando. 1580 01:12:52,310 --> 01:12:53,518 >> Em vez disso, você só ligá-lo em. 1581 01:12:53,518 --> 01:12:55,050 É compartimenta ele. 1582 01:12:55,050 --> 01:13:00,110 É como escrever algum arquivo de cabeçalho, e em seguida, incluindo o arquivo de cabeçalho no C. 1583 01:13:00,110 --> 01:13:01,620 Pense nisso como este. 1584 01:13:01,620 --> 01:13:02,680 Então, o que isso faz? 1585 01:13:02,680 --> 01:13:04,560 Bem, isso vai ser executado. 1586 01:13:04,560 --> 01:13:05,410 Vai para alertar. 1587 01:13:05,410 --> 01:13:08,020 Então, você está indo para obter um pouco pop up Olá mundo chamado. 1588 01:13:08,020 --> 01:13:11,420 Pergunta rápida, apenas verificação de sanidade, de modo que você vê aqui no corpo, 1589 01:13:11,420 --> 01:13:13,160 dizer corpo, HTML aqui. 1590 01:13:13,160 --> 01:13:14,080 O que vem primeiro? 1591 01:13:14,080 --> 01:13:16,864 Eu ver o corpo, HTML aqui, ou posso ver o alerta pela primeira vez? 1592 01:13:16,864 --> 01:13:19,828 1593 01:13:19,828 --> 01:13:20,820 >> AUDIÊNCIA: Alerta. 1594 01:13:20,820 --> 01:13:21,470 >> DAVIN: Certo. 1595 01:13:21,470 --> 01:13:22,110 Ele diz alerta. 1596 01:13:22,110 --> 01:13:22,610 Por quê? 1597 01:13:22,610 --> 01:13:24,470 >> AUDIÊNCIA: Porque você ir de cima para baixo. 1598 01:13:24,470 --> 01:13:25,600 >> DAVIN: Sim. 1599 01:13:25,600 --> 01:13:26,100 Perfeito. 1600 01:13:26,100 --> 01:13:29,207 Então ele diz, você vai de cima para fundo, o que é absolutamente correto. 1601 01:13:29,207 --> 01:13:30,790 Você está indo para ir de cima para baixo. 1602 01:13:30,790 --> 01:13:34,790 E em JavaScript, jQuery, você tem um função que é onload like, ou pronto, 1603 01:13:34,790 --> 01:13:38,030 e que diz, OK, espere até tudo isso HTML foi carregado. 1604 01:13:38,030 --> 01:13:39,580 E, em seguida, chamar o JavaScript. 1605 01:13:39,580 --> 01:13:42,190 Porque nós não temos isso aqui, o primeira coisa que vai acontecer 1606 01:13:42,190 --> 01:13:43,920 se ele está indo para ir de cima para baixo. 1607 01:13:43,920 --> 01:13:46,310 Vai bater esse JS chamar, ele vai para alertar. 1608 01:13:46,310 --> 01:13:49,510 Depois que você clicar em OK, que alerta vai embora. 1609 01:13:49,510 --> 01:13:53,600 Em seguida, ele vai mostrar você o HTML corpo aqui. 1610 01:13:53,600 --> 01:13:54,590 Nice. 1611 01:13:54,590 --> 01:14:00,880 >> OK, então apenas rapidinho, escrita em JavaScript é super rápido. 1612 01:14:00,880 --> 01:14:02,710 A fim de declarar uma variável, nome var. 1613 01:14:02,710 --> 01:14:07,070 Assim, em C, você tem int i, você tem para declarar que tipo de tipo é. 1614 01:14:07,070 --> 01:14:08,040 PHP, $. 1615 01:14:08,040 --> 01:14:08,755 JavaScript, var. 1616 01:14:08,755 --> 01:14:09,630 Nós conversamos sobre isso. 1617 01:14:09,630 --> 01:14:11,020 Tudo bem, vamos lá. 1618 01:14:11,020 --> 01:14:12,510 >> Loops, a mesma coisa. 1619 01:14:12,510 --> 01:14:14,230 Mesma coisa. 1620 01:14:14,230 --> 01:14:18,165 Declarações de função, de modo assim como você já viu em C. 1621 01:14:18,165 --> 01:14:21,290 A única coisa diferente é assim, quando você começa a outras linguagens de programação, 1622 01:14:21,290 --> 01:14:24,780 como quando você toma 51 próximo semestre e você está fazendo com OCaml, 1623 01:14:24,780 --> 01:14:26,690 você pode lidar com funções anônimas. 1624 01:14:26,690 --> 01:14:28,240 Então, isso é exatamente o que você tem aqui. 1625 01:14:28,240 --> 01:14:31,560 Então você quer colocar em suma, algum tipo de valor da soma. 1626 01:14:31,560 --> 01:14:33,870 Mas você só pode estar fazendo isso uma vez. 1627 01:14:33,870 --> 01:14:37,310 Então você não quiser chamá-lo de função suma, dar-lhe uma declaração de função. 1628 01:14:37,310 --> 01:14:39,830 Em vez disso, você só usá-lo como uma função anônima. 1629 01:14:39,830 --> 01:14:42,469 E você já viu isso muito. 1630 01:14:42,469 --> 01:14:44,510 Você vai ver um exemplo de isso em um par de slides. 1631 01:14:44,510 --> 01:14:45,597 Sim, vamos ver. 1632 01:14:45,597 --> 01:14:46,430 GABE: Boa pergunta. 1633 01:14:46,430 --> 01:14:50,660 Quando você pode querer usar uma função anônima aqui? 1634 01:14:50,660 --> 01:14:54,111 Basicamente, quando você quer alguma coisa, como um evento, a acontecer. 1635 01:14:54,111 --> 01:14:55,860 Então, quando o mouse está clicado, por exemplo, 1636 01:14:55,860 --> 01:14:57,790 você quer alguma função a ser chamada. 1637 01:14:57,790 --> 01:15:00,570 Então você passa para o evento manipulador, você passa para o evento, 1638 01:15:00,570 --> 01:15:02,870 de tipo, a função que você quer ser chamado. 1639 01:15:02,870 --> 01:15:04,710 E o que você está passando é como, na extremidade 1640 01:15:04,710 --> 01:15:08,757 do dia, apenas um ponteiro para essa instrução, para a função. 1641 01:15:08,757 --> 01:15:11,090 Então, não é como se você está passando o código inteiro, tal como 1642 01:15:11,090 --> 01:15:12,173 um ponteiro para a função. 1643 01:15:12,173 --> 01:15:17,871 E então, quando alguém clica no rato, em seguida, que a função é chamada. 1644 01:15:17,871 --> 01:15:22,340 >> Davin: Arrays, assim você ter uma declaração de matriz. 1645 01:15:22,340 --> 01:15:23,990 Em seguida, uma matriz para colocar as coisas em. 1646 01:15:23,990 --> 01:15:25,769 Bem rápido, o que vai esta imprimir? 1647 01:15:25,769 --> 01:15:27,060 Qual será o terceiro elemento ser? 1648 01:15:27,060 --> 01:15:31,470 1649 01:15:31,470 --> 01:15:32,450 >> AUDIÊNCIA: "JS". 1650 01:15:32,450 --> 01:15:33,940 >> DAVIN: Direito, seria "JS". 1651 01:15:33,940 --> 01:15:35,760 Espere, voltar. 1652 01:15:35,760 --> 01:15:37,100 Qual é o comprimento? 1653 01:15:37,100 --> 01:15:38,117 >> AUDIÊNCIA: Três. 1654 01:15:38,117 --> 01:15:38,950 DAVIN: Três, certo? 1655 01:15:38,950 --> 01:15:40,210 Exatamente o que você pensa. 1656 01:15:40,210 --> 01:15:42,072 OK, agora vá. 1657 01:15:42,072 --> 01:15:43,530 Arrays, você pode adicionar as coisas para eles. 1658 01:15:43,530 --> 01:15:45,395 Então você pode ir além seus limites iniciais. 1659 01:15:45,395 --> 01:15:46,740 Só uma coisa a ter em mente. 1660 01:15:46,740 --> 01:15:49,760 PHP, JavaScript, eles estão um pouco pouco mais indulgente em termos de coisas 1661 01:15:49,760 --> 01:15:50,570 assim. 1662 01:15:50,570 --> 01:15:54,260 Objetos, muito parecido com estruturas em C, muito 1663 01:15:54,260 --> 01:15:56,590 como matrizes de associação em PHP. 1664 01:15:56,590 --> 01:15:58,720 Vocês todos já tinham experiência com isso. 1665 01:15:58,720 --> 01:16:01,880 Então, JSON, quando você está passando JSON frente e para trás em-p definir oito, 1666 01:16:01,880 --> 01:16:03,260 esse é o seu objeto. 1667 01:16:03,260 --> 01:16:06,290 >> Então, sim, exemplo, exemplo rápido real. 1668 01:16:06,290 --> 01:16:07,880 Aqui é um objeto. 1669 01:16:07,880 --> 01:16:12,700 A forma como você faz referência a este objeto, por isso bem rápido, 1670 01:16:12,700 --> 01:16:18,630 digamos que eu queria encontrar para fora, OK, o que é o curso? 1671 01:16:18,630 --> 01:16:20,681 E assim o nome do objeto aqui é CS50. 1672 01:16:20,681 --> 01:16:23,180 E, em seguida, se eu tivesse um associativa array, como eu faria isso? 1673 01:16:23,180 --> 01:16:24,580 Eu vou estar usando uma chave, certo? 1674 01:16:24,580 --> 01:16:26,030 Então, eu tenho o nome do array. 1675 01:16:26,030 --> 01:16:30,160 Eu tenho suporte, citações, chave, citações finais, suporte de final, 1676 01:16:30,160 --> 01:16:33,610 e que será referência que elemento dentro da minha matriz associativa. 1677 01:16:33,610 --> 01:16:37,646 Como faço para referenciado Claro que dentro de meu objeto? 1678 01:16:37,646 --> 01:16:39,170 Alguém sabe? 1679 01:16:39,170 --> 01:16:40,622 >> AUDIÊNCIA: [inaudível]. 1680 01:16:40,622 --> 01:16:41,784 >> DAVIN: Qual é? 1681 01:16:41,784 --> 01:16:42,700 AUDIÊNCIA: CS50.course. 1682 01:16:42,700 --> 01:16:43,510 DAVIN: Direito, sim. 1683 01:16:43,510 --> 01:16:45,320 Então CS50.course. 1684 01:16:45,320 --> 01:16:48,770 Assim, a maneira você faz referência a coisas dentro de um objeto JSON é com um ponto. 1685 01:16:48,770 --> 01:16:53,114 >> AUDIÊNCIA: Você também pode usar sintaxe de array. 1686 01:16:53,114 --> 01:16:54,050 >> DAVIN: OK, tudo bem. 1687 01:16:54,050 --> 01:16:57,544 >> GABE: Você também pode usar o suporte CS50, corda, como aspas. 1688 01:16:57,544 --> 01:16:59,210 AUDIÊNCIA: Eu acho que é idêntico ao PHP. 1689 01:16:59,210 --> 01:17:00,293 GABE: É a mesma coisa. 1690 01:17:00,293 --> 01:17:02,487 DAVIN: Fine! 1691 01:17:02,487 --> 01:17:03,945 Mas você vai ver isso em outros lugares. 1692 01:17:03,945 --> 01:17:08,990 1693 01:17:08,990 --> 01:17:10,480 Sim, por isso vai manter. 1694 01:17:10,480 --> 01:17:13,330 Isto é o que eu disse. 1695 01:17:13,330 --> 01:17:17,840 Assim, em um exemplo JavaScript jQuery. 1696 01:17:17,840 --> 01:17:19,440 Portanto, este é o meu DOM, certo? 1697 01:17:19,440 --> 01:17:22,290 1698 01:17:22,290 --> 01:17:25,410 Bem rápido, então eu tenho um cabeça, Olá mundo, corpo. 1699 01:17:25,410 --> 01:17:26,160 Eu tenho um botão. 1700 01:17:26,160 --> 01:17:27,870 Diz que "empurrar me", assim que eu quero para empurrá-lo. 1701 01:17:27,870 --> 01:17:29,745 E eu quero fazer algo quando é clicado. 1702 01:17:29,745 --> 01:17:31,220 Direita, em seguida. 1703 01:17:31,220 --> 01:17:34,630 >> Certo, então este é o meu JavaScript. 1704 01:17:34,630 --> 01:17:37,790 Então jQuery é apenas um mais fácil maneira de escrever JavaScript. 1705 01:17:37,790 --> 01:17:40,920 Portanto, este, eo que eu vou mostrar você próximo, vai ser jQuery, 1706 01:17:40,920 --> 01:17:41,930 são idênticos. 1707 01:17:41,930 --> 01:17:43,990 Então, eles vão fazer as mesmas coisas. 1708 01:17:43,990 --> 01:17:45,974 Apenas jQuery tende a ser um pouco mais fácil. 1709 01:17:45,974 --> 01:17:47,140 As pessoas tendem a gostar mais. 1710 01:17:47,140 --> 01:17:48,390 Tem um monte de funcionalidade. 1711 01:17:48,390 --> 01:17:49,830 Então, as pessoas tendem a usar jQuery. 1712 01:17:49,830 --> 01:17:53,270 Você usados ​​jQuery no último p-set. 1713 01:17:53,270 --> 01:17:54,270 Então, o que vai fazer isto? 1714 01:17:54,270 --> 01:17:56,580 O que isto vai JavaScript-- assim este é simplesmente JavaScript. 1715 01:17:56,580 --> 01:17:57,430 O que vai fazer isto? 1716 01:17:57,430 --> 01:18:00,600 1717 01:18:00,600 --> 01:18:03,450 O que vai fazer? 1718 01:18:03,450 --> 01:18:04,890 >> Então, primeiro, você vê a janela onload. 1719 01:18:04,890 --> 01:18:05,390 Certo? 1720 01:18:05,390 --> 01:18:06,640 Então, nós não vimos isso antes. 1721 01:18:06,640 --> 01:18:09,380 Então, isso vai esperar até que toda a carga de janela. 1722 01:18:09,380 --> 01:18:12,770 Por isso, vai esperar até a carga HTML, todas as imagens 1723 01:18:12,770 --> 01:18:13,770 antes que ele faz qualquer coisa. 1724 01:18:13,770 --> 01:18:16,050 Então, digamos que o nosso DOM foi carregado. 1725 01:18:16,050 --> 01:18:17,270 Tudo está lá. 1726 01:18:17,270 --> 01:18:19,080 Então, o que vai acontecer? 1727 01:18:19,080 --> 01:18:19,922 Sim? 1728 01:18:19,922 --> 01:18:22,880 >> AUDIÊNCIA: aparece Button. 1729 01:18:22,880 --> 01:18:25,201 >> DAVIN: O botão já está lá. 1730 01:18:25,201 --> 01:18:26,700 Sim, então o botão já está lá. 1731 01:18:26,700 --> 01:18:31,190 Mas isso vai dizer: OK, se eu clicar no botão, 1732 01:18:31,190 --> 01:18:33,650 de modo que o botão é já lá, como que tag HTML. 1733 01:18:33,650 --> 01:18:35,980 Espere, voltar rapidinho. 1734 01:18:35,980 --> 01:18:39,470 Esta tag direito aqui é vai ser um botão já. 1735 01:18:39,470 --> 01:18:40,810 Já existe um botão. 1736 01:18:40,810 --> 01:18:44,120 Mas, em seguida, o JavaScript tag, aqui mesmo, 1737 01:18:44,120 --> 01:18:46,160 ele diz, OK, eu quero para obter pelo elemento de identificação, 1738 01:18:46,160 --> 01:18:50,300 assim botão de pesquisa apenas diz, OK, eu quero para mapear esta variável para o botão. 1739 01:18:50,300 --> 01:18:53,120 Então, essa variável é apenas um maneira mais fácil de acessar esse botão. 1740 01:18:53,120 --> 01:18:57,300 E eu digo: OK, se eu clicar em que botão, então se eu clicar nesse elemento, 1741 01:18:57,300 --> 01:18:59,560 e refere-se a este elemento o botão, se eu clicar nele, 1742 01:18:59,560 --> 01:19:00,875 então eu quero chamar uma função. 1743 01:19:00,875 --> 01:19:03,500 Aqui é um daqueles anônimo funções que estavam falando. 1744 01:19:03,500 --> 01:19:04,840 >> Basta ligar para alguma função. 1745 01:19:04,840 --> 01:19:08,840 Dentro dessa função, basicamente, algo que já vimos um monte, alerta. 1746 01:19:08,840 --> 01:19:10,477 Você clica no botão de busca. 1747 01:19:10,477 --> 01:19:12,060 Vai basicamente tem um botão. 1748 01:19:12,060 --> 01:19:13,040 Você clica nele. 1749 01:19:13,040 --> 01:19:14,040 Você começa a alerta. 1750 01:19:14,040 --> 01:19:14,850 X para fora. 1751 01:19:14,850 --> 01:19:15,754 É isso aí. 1752 01:19:15,754 --> 01:19:16,254 Sim? 1753 01:19:16,254 --> 01:19:21,980 >> AUDIÊNCIA: Então, se você colocar o script [Inaudível], tag script em seu HTML? 1754 01:19:21,980 --> 01:19:24,300 >> DAVIN: Você pode colocar o script straight tag na cabeça 1755 01:19:24,300 --> 01:19:30,667 porque você tem este onload. 1756 01:19:30,667 --> 01:19:32,000 Também é que você tem um clique. 1757 01:19:32,000 --> 01:19:34,166 Por isso, vai esperar até clicar em alguma coisa. 1758 01:19:34,166 --> 01:19:37,470 Mas onload é apenas para ser seguro, para fazer se de tudo é carregada em seu HTML 1759 01:19:37,470 --> 01:19:38,170 antemão. 1760 01:19:38,170 --> 01:19:39,247 Sim? 1761 01:19:39,247 --> 01:19:40,330 Você quer dizer algo? 1762 01:19:40,330 --> 01:19:41,080 >> GABE: [inaudível]. 1763 01:19:41,080 --> 01:19:42,485 DAVIN: Yeah. 1764 01:19:42,485 --> 01:19:45,426 >> AUDIÊNCIA: evita Então onload definir o botão de pesquisa variável 1765 01:19:45,426 --> 01:19:49,930 por apenas dizendo document.getElementById Pesquisa botão dot [inaudível]. 1766 01:19:49,930 --> 01:19:52,320 >> DAVIN: Com certeza, mas, em seguida, sua seqüência só fica enorme. 1767 01:19:52,320 --> 01:19:55,553 Exatamente, por isso esta é apenas para tornar mais fácil para você, sim. 1768 01:19:55,553 --> 01:19:56,053 Sim? 1769 01:19:56,053 --> 01:19:57,886 >> AUDIÊNCIA: Onde é que nós criar window.onload? 1770 01:19:57,886 --> 01:19:58,951 Ou document.ready? 1771 01:19:58,951 --> 01:20:00,590 >> DAVIN: Sim, existe. 1772 01:20:00,590 --> 01:20:02,094 Sim, lá está, eu verifiquei. 1773 01:20:02,094 --> 01:20:03,710 >> GABE: Não para que eles se preocupam. 1774 01:20:03,710 --> 01:20:06,970 >> DAVIN: OK, então eu vou para dizer-lhe de qualquer maneira. 1775 01:20:06,970 --> 01:20:11,005 Então, basicamente, apenas em geral, de modo window.onload espera até que o seu DOM, todos 1776 01:20:11,005 --> 01:20:12,180 seu HTML, cargas. 1777 01:20:12,180 --> 01:20:13,513 Ele espera até que sua carga de imagens. 1778 01:20:13,513 --> 01:20:14,930 Ele espera até que tudo cargas. 1779 01:20:14,930 --> 01:20:18,410 document.ready, ele só espera até que suas cargas DOM. 1780 01:20:18,410 --> 01:20:22,190 Uma vez que o HTML é tudo que existe, uma vez que o DOM está lá, começa a funcionar. 1781 01:20:22,190 --> 01:20:23,400 Essa é a única diferença. 1782 01:20:23,400 --> 01:20:24,700 >> GABE: sanidade rápida confira aqui. 1783 01:20:24,700 --> 01:20:29,060 Então, isso pode ser visto tipo de como uma linha de código, certo? 1784 01:20:29,060 --> 01:20:33,600 Porque é window.onload é igual a um monte de coisas. 1785 01:20:33,600 --> 01:20:39,030 Quando JavaScript lê este, verdadeiro ou falsa, a função é executada. 1786 01:20:39,030 --> 01:20:40,020 Falso. 1787 01:20:40,020 --> 01:20:40,920 OK? 1788 01:20:40,920 --> 01:20:44,470 O que acontece aqui, você está só de passagem este funcionar como funções anônimas 1789 01:20:44,470 --> 01:20:45,300 para Window. 1790 01:20:45,300 --> 01:20:48,480 E então, quando é que vai para realmente começar executado? 1791 01:20:48,480 --> 01:20:49,600 Quando as cargas de janela. 1792 01:20:49,600 --> 01:20:50,420 Esse é um evento. 1793 01:20:50,420 --> 01:20:52,460 Então, isso é coisa t jus estamos falando antes, certo? 1794 01:20:52,460 --> 01:20:54,580 Assim, quando o evento acontecer, a função acontece. 1795 01:20:54,580 --> 01:20:55,746 Mesma coisa com o onclick. 1796 01:20:55,746 --> 01:20:59,510 1797 01:20:59,510 --> 01:21:03,130 >> DAVIN: OK, então alguém pegou afastado o document.ready. 1798 01:21:03,130 --> 01:21:04,698 Mas este será o same-- exata 1799 01:21:04,698 --> 01:21:06,864 AUDIÊNCIA: O sinal de dólar, que é um document.ready. 1800 01:21:06,864 --> 01:21:07,710 Isso é um atalho. 1801 01:21:07,710 --> 01:21:08,501 >> DAVIN: Ah, que é isso? 1802 01:21:08,501 --> 01:21:10,880 1803 01:21:10,880 --> 01:21:15,500 OK, então isso significa document.ready, atalho. 1804 01:21:15,500 --> 01:21:19,660 Mas esta é a mesma que window.OnLoad exceto para que pouca diferença 1805 01:21:19,660 --> 01:21:20,680 Eu lhe falei. 1806 01:21:20,680 --> 01:21:21,870 E este é jQuery. 1807 01:21:21,870 --> 01:21:25,190 Portanto, este é exatamente o mesmo coisa-- este é JavaScript. 1808 01:21:25,190 --> 01:21:29,500 Este é só-- algumas pessoas pensam dele como um peso mais leve, elegante versão 1809 01:21:29,500 --> 01:21:32,370 que tem muita funcionalidade que você provavelmente estará usando. 1810 01:21:32,370 --> 01:21:34,500 Então, isso faz exatamente a mesma coisa. 1811 01:21:34,500 --> 01:21:37,110 >> Então as coisas de tipo de apontar. 1812 01:21:37,110 --> 01:21:40,364 Assim, em outro exemplo, nós teve document.getElementById, 1813 01:21:40,364 --> 01:21:42,280 por isso, tivemos essa longa string que vai ficar 1814 01:21:42,280 --> 01:21:44,290 o elemento por o ID que tem. 1815 01:21:44,290 --> 01:21:46,470 Isso é substituída por esta chamada aqui. 1816 01:21:46,470 --> 01:21:50,860 Então você vê o sinal de dólar, então você vê citações, hashtag. 1817 01:21:50,860 --> 01:21:52,370 Hashtag é sempre um selector. 1818 01:21:52,370 --> 01:21:54,730 Ela diz, OK, isso tem a ver com um ID. 1819 01:21:54,730 --> 01:21:56,120 Qual é o seletor para uma classe? 1820 01:21:56,120 --> 01:21:57,190 >> AUDIÊNCIA: Dot. 1821 01:21:57,190 --> 01:21:57,960 >> DAVIN: Dot, certo. 1822 01:21:57,960 --> 01:22:01,950 Se você está indo só para selecionar uma tag, o que é? 1823 01:22:01,950 --> 01:22:03,310 É apenas o tag, exatamente. 1824 01:22:03,310 --> 01:22:05,560 E você poderia usar isso aqui, também. 1825 01:22:05,560 --> 01:22:08,560 >> GABE: E por tag, queremos dizer como div, por exemplo, ou na cabeça. 1826 01:22:08,560 --> 01:22:11,500 >> DAVIN: Ou corpo ou p ou nada parecido, sim. 1827 01:22:11,500 --> 01:22:14,390 Então, aqui, OK, em vez de dizer document.getElementById, 1828 01:22:14,390 --> 01:22:16,500 esta é apenas a exata mesma coisa. 1829 01:22:16,500 --> 01:22:17,990 Apenas no jQuery, é mais curto. 1830 01:22:17,990 --> 01:22:19,860 Portanto, é mais simples. 1831 01:22:19,860 --> 01:22:23,420 Então, não mais onclick, basta clicar. 1832 01:22:23,420 --> 01:22:26,320 função jQuery, chamar essa função. 1833 01:22:26,320 --> 01:22:27,580 Alerta é exatamente o mesmo. 1834 01:22:27,580 --> 01:22:29,452 Portanto, é um pouco menor, ou pouco 1835 01:22:29,452 --> 01:22:32,410 mais curto, um povo pouco bit-- pensar é um pouco mais fácil de escrever, 1836 01:22:32,410 --> 01:22:34,600 um pouco mais fácil de entender. 1837 01:22:34,600 --> 01:22:35,640 Mas isso é jQuery. 1838 01:22:35,640 --> 01:22:37,887 Um monte de gente ficar um pouco pouco confuso e preocupado 1839 01:22:37,887 --> 01:22:40,220 e eles pensam, OK, jQuery é diferente do JavaScript. 1840 01:22:40,220 --> 01:22:42,136 Eu tenho que lembrar estes duas coisas diferentes. 1841 01:22:42,136 --> 01:22:42,740 Não é. 1842 01:22:42,740 --> 01:22:45,315 Quero dizer, é uma sintaxe diferente. 1843 01:22:45,315 --> 01:22:46,970 Mas jQuery é JavaScript. 1844 01:22:46,970 --> 01:22:50,050 É apenas um aparentemente melhor versão que 1845 01:22:50,050 --> 01:22:51,967 pode ser mais fácil compreender que as pessoas usam. 1846 01:22:51,967 --> 01:22:53,716 GABE: Sim, para ser Honesto, que cifrão 1847 01:22:53,716 --> 01:22:57,240 que você vê no jQuery, isso é apenas o nome de uma função que define jQuery. 1848 01:22:57,240 --> 01:22:58,614 Ele não tem nada de especial. 1849 01:22:58,614 --> 01:23:03,140 É apenas o nome de uma função, assim como você poderia definir cifrão. 1850 01:23:03,140 --> 01:23:05,670 >> DAVIN: Sim, então conversamos sobre isso. 1851 01:23:05,670 --> 01:23:06,680 Algumas coisas úteis. 1852 01:23:06,680 --> 01:23:10,414 Eu estava olhando para os antigos quizzes. 1853 01:23:10,414 --> 01:23:13,080 Nos últimos dois questionários, eles têm tive que usar coisas como esta. 1854 01:23:13,080 --> 01:23:15,230 Assim document.ready, assim certificar-se de que tudo está 1855 01:23:15,230 --> 01:23:17,410 carregada antes de começar a fazer as coisas. 1856 01:23:17,410 --> 01:23:20,120 Selecione uma ID ou selecione uma classe, ele tinha acabado de 1857 01:23:20,120 --> 01:23:24,020 Citação ser dot alguma classe, citações final. 1858 01:23:24,020 --> 01:23:26,580 Enviar, por isso, se você está envio de um formulário e chamada 1859 01:23:26,580 --> 01:23:28,830 essa função após o formulário envia. 1860 01:23:28,830 --> 01:23:34,210 Value, então vamos dizer que eu tinha uma forma submissão, como um nome de usuário, um e-mail, 1861 01:23:34,210 --> 01:23:34,950 tanto faz. 1862 01:23:34,950 --> 01:23:36,010 Eu tinha uma caixa de texto. 1863 01:23:36,010 --> 01:23:37,670 Então, eu estou digitando em que a caixa de texto. 1864 01:23:37,670 --> 01:23:42,170 Bem, se você quiser obter o valor fora dessa caixa de texto, você usa dot val. 1865 01:23:42,170 --> 01:23:44,050 E então, aqui em baixo, dot HTML é a mesma 1866 01:23:44,050 --> 01:23:47,710 é como documento dot getElementByID dot innerHTML. 1867 01:23:47,710 --> 01:23:50,890 Então, isso vai voltar você o código HTML que ID. 1868 01:23:50,890 --> 01:23:55,080 Aqui, você só usar algum ID ou qualquer ponto HTML. 1869 01:23:55,080 --> 01:23:56,930 Isso vai ter o código HTML esse elemento. 1870 01:23:56,930 --> 01:24:00,130 Se você quisesse então mudar isso HTML, você pode passá-lo algo. 1871 01:24:00,130 --> 01:24:05,600 Então você seria como HTML ponto, e, em seguida, dentro, citações, novo HTML ou algo assim. 1872 01:24:05,600 --> 01:24:07,490 >> GABE: OK, então AJAX. 1873 01:24:07,490 --> 01:24:10,347 Eu realmente gostaria de entender AJAX muito bem. 1874 01:24:10,347 --> 01:24:12,430 Então, eu quero que vocês AJAX entender muito bem. 1875 01:24:12,430 --> 01:24:14,221 Porque se você fizer isso, você está muito bem indo 1876 01:24:14,221 --> 01:24:16,810 para entender tudo o que tem a ver com HTTP, PHP, 1877 01:24:16,810 --> 01:24:21,080 JavaScript porque todos vem junto em AJAX. 1878 01:24:21,080 --> 01:24:25,130 AJAX não é uma linguagem. 1879 01:24:25,130 --> 01:24:27,000 AJAX é uma técnica. 1880 01:24:27,000 --> 01:24:31,690 E ele usa muitas ferramentas diferentes. 1881 01:24:31,690 --> 01:24:35,090 AJAX significa XML JavaScript assíncrono. 1882 01:24:35,090 --> 01:24:36,730 Assim, o método, a língua, os dados. 1883 01:24:36,730 --> 01:24:40,610 >> Assim, a principal linguagem que usamos em AJAX para acionar tudo 1884 01:24:40,610 --> 01:24:42,830 e para lidar com tudo mais tarde é JavaScript. 1885 01:24:42,830 --> 01:24:45,160 É por isso que ele se relaciona muito perto de JavaScript. 1886 01:24:45,160 --> 01:24:49,810 E, em seguida, é assíncrona porque não fazê-lo 1887 01:24:49,810 --> 01:24:51,980 tudo de uma vez quando estamos carregando a página. 1888 01:24:51,980 --> 01:24:57,190 Esta é a única coisa que nós podemos fazer coisas tipo de em paralelo. 1889 01:24:57,190 --> 01:24:59,725 A principal idéia por trás AJAX é que você quer 1890 01:24:59,725 --> 01:25:02,170 -lo para obter algumas informações específicas. 1891 01:25:02,170 --> 01:25:06,450 Por exemplo, quando você está digitando novo nome de usuário quando você registrar um nome de usuário, 1892 01:25:06,450 --> 01:25:08,520 meu nome de usuário é abc123. 1893 01:25:08,520 --> 01:25:11,671 E depois, no final do forma, você tem que clicar em Enviar. 1894 01:25:11,671 --> 01:25:14,420 E tinha que ir para o servidor, e, em seguida, verificar se no banco de dados, 1895 01:25:14,420 --> 01:25:15,594 abc123 já está lá. 1896 01:25:15,594 --> 01:25:18,510 E se ele já está lá, ele diz: nome de usuário já na base de dados. 1897 01:25:18,510 --> 01:25:21,010 E eles, você tem que preencher o formulário inteiro novamente. 1898 01:25:21,010 --> 01:25:23,110 E foi muito, muito ruim. 1899 01:25:23,110 --> 01:25:25,440 >> E então as pessoas dizem, OK, por que não podemos simplesmente 1900 01:25:25,440 --> 01:25:29,560 fazer um pequeno pedido HTTP para apenas verificar para ver se o usuário está no banco de dados 1901 01:25:29,560 --> 01:25:32,080 antes que o usuário tinha que enviar o formulário inteiro? 1902 01:25:32,080 --> 01:25:36,350 Assim, por exemplo, quando o usuário termina a digitação abc123, 1903 01:25:36,350 --> 01:25:39,660 vamos apenas ir para o servidor um pouco bit e é só pegar um verdadeiro ou falso 1904 01:25:39,660 --> 01:25:43,080 a partir do servidor para ver se que é um nome de usuário ou não válido. 1905 01:25:43,080 --> 01:25:49,250 OK, então isso é um dos principais usa de AJAX ainda hoje. 1906 01:25:49,250 --> 01:25:52,130 >> DAVIN: Então bem rápido, em uma chamada Ajax no jQuery, 1907 01:25:52,130 --> 01:25:54,770 você poderia significar que você quer que seja síncrona. 1908 01:25:54,770 --> 01:25:56,330 Você não deve fazer isso. 1909 01:25:56,330 --> 01:25:57,640 Mas você pode fazer isso. 1910 01:25:57,640 --> 01:25:59,277 E se você fez isso, o que aconteceria? 1911 01:25:59,277 --> 01:26:01,610 Bem, por exemplo, quando você está recebendo notícias ou o que quer, 1912 01:26:01,610 --> 01:26:05,464 o seu navegador está indo só para esperar até que toda a chamada está completa 1913 01:26:05,464 --> 01:26:08,130 em vez de deixá-lo fazer outra as coisas direito após você clicar nele. 1914 01:26:08,130 --> 01:26:14,560 1915 01:26:14,560 --> 01:26:17,115 >> GABE: Ele não está passando mais. 1916 01:26:17,115 --> 01:26:19,681 Meu Deus. 1917 01:26:19,681 --> 01:26:20,180 Desculpe! 1918 01:26:20,180 --> 01:26:22,810 1919 01:26:22,810 --> 01:26:23,601 Sim. 1920 01:26:23,601 --> 01:26:25,350 "No passado, o cliente precisava pedido 1921 01:26:25,350 --> 01:26:26,840 todo o conteúdo de um site ". 1922 01:26:26,840 --> 01:26:28,210 Isso é o que eu disse. 1923 01:26:28,210 --> 01:26:30,070 Ela nos permite enviar GET ou POST adicional 1924 01:26:30,070 --> 01:26:32,140 pedidos sem ter para recarregar o nosso browser. 1925 01:26:32,140 --> 01:26:34,806 Assim, no final do dia, estamos realmente fazendo um solicitações HTTP 1926 01:26:34,806 --> 01:26:35,740 aqui, usando JavaScript. 1927 01:26:35,740 --> 01:26:39,700 Porque antes, nós só usamos JavaScript para alterar o código HTML que já veio. 1928 01:26:39,700 --> 01:26:43,110 E agora, podemos usá-lo para fazer a interface com os servidores web também. 1929 01:26:43,110 --> 01:26:46,140 A maneira como isso acontece é que temos o cliente. 1930 01:26:46,140 --> 01:26:47,340 Davin é um cliente. 1931 01:26:47,340 --> 01:26:50,797 E ele tem todo o JavaScript correndo porque HTML é burro. 1932 01:26:50,797 --> 01:26:51,630 JavaScript é inteligente. 1933 01:26:51,630 --> 01:26:54,690 Então davin Davin tem a sua inteligente parte e sua parte mudo. 1934 01:26:54,690 --> 01:26:57,590 Ele vai usar sua parte inteligente agora. 1935 01:26:57,590 --> 01:27:00,860 Ele vai usar JavaScript a pedido, por exemplo, 1936 01:27:00,860 --> 01:27:04,340 se abc123 é em a base de dados ou não. 1937 01:27:04,340 --> 01:27:08,450 >> Então Davin, por favor, você só enviar-me um pedido HTTP. 1938 01:27:08,450 --> 01:27:09,197 Obrigado. 1939 01:27:09,197 --> 01:27:10,530 Assim, ele acabou de enviar uma solicitação HTTP. 1940 01:27:10,530 --> 01:27:11,270 Você vê isso? 1941 01:27:11,270 --> 01:27:14,700 E isso é só o mesmo caminho que qualquer pedido HTTP é enviado. 1942 01:27:14,700 --> 01:27:16,830 O navegador, o Google Chrome ou algo assim, é 1943 01:27:16,830 --> 01:27:19,570 vai ver que Davin de tentando enviar uma solicitação HTTP, 1944 01:27:19,570 --> 01:27:20,930 vai ajudá-hm um pouco. 1945 01:27:20,930 --> 01:27:23,950 E isso está indo para ir todo o caminho para o servidor. 1946 01:27:23,950 --> 01:27:27,370 Agora, o servidor vai ter PHP aqui, ou qualquer outra língua. 1947 01:27:27,370 --> 01:27:29,990 Assim como em uma solicitação HTTP normal. 1948 01:27:29,990 --> 01:27:31,950 É praticamente uma solicitação HTTP normal. 1949 01:27:31,950 --> 01:27:33,658 >> E então, o servidor vai dizer, OK, 1950 01:27:33,658 --> 01:27:37,270 Davin me quer para verificar se este abc123 é na base de dados. 1951 01:27:37,270 --> 01:27:38,310 Vá falar com o modelo. 1952 01:27:38,310 --> 01:27:41,310 O modelo diz que não é. abc123 é um bom nome de usuário. 1953 01:27:41,310 --> 01:27:47,940 E, em seguida, o servidor web vai usar o PHP para tornar algum tipo de arquivo. 1954 01:27:47,940 --> 01:27:52,280 Poderia ser, literalmente, apenas um arquivo que contém "sim" na mesma, ou "não, 1955 01:27:52,280 --> 01:27:53,315 ou algo parecido. 1956 01:27:53,315 --> 01:27:54,190 Poderia ser qualquer arquivo. 1957 01:27:54,190 --> 01:27:57,080 >> Pode ser como eu vou Davin enviar uma imagem de um pato 1958 01:27:57,080 --> 01:28:01,200 se é no banco de dados e enviar uma imagem de um hamster 1959 01:28:01,200 --> 01:28:02,420 se não é no banco de dados. 1960 01:28:02,420 --> 01:28:04,294 Isso seria uma espécie de idiota, mas ele vai trabalhar. 1961 01:28:04,294 --> 01:28:07,030 OK, então eu enviar um pato para Davin. 1962 01:28:07,030 --> 01:28:08,150 Davin tenho um pato. 1963 01:28:08,150 --> 01:28:13,330 E agora, quem vai para lidar com o pato? 1964 01:28:13,330 --> 01:28:16,390 Parte inteligente da Davin novamente, assim JavaScript, certo? 1965 01:28:16,390 --> 01:28:18,620 JavaScript enviou o pedido, e JavaScript 1966 01:28:18,620 --> 01:28:22,300 vai receber o pedido e interpretá-lo de alguma forma. 1967 01:28:22,300 --> 01:28:26,630 >> E, neste sentido, que vai dizer, OK, se pato então eu sou bom. 1968 01:28:26,630 --> 01:28:30,770 Se hamster, então eu vou quer dizer, não, nome de usuário já 1969 01:28:30,770 --> 01:28:31,970 existe na base de dados. 1970 01:28:31,970 --> 01:28:33,845 Mas, geralmente, você não está vai enviar um pato. 1971 01:28:33,845 --> 01:28:36,740 Você está indo para enviar algo um pouco mais esperto. 1972 01:28:36,740 --> 01:28:40,320 E o que nós usamos é XML. 1973 01:28:40,320 --> 01:28:42,690 E, mais recentemente, usamos JSON. 1974 01:28:42,690 --> 01:28:45,629 JSON é apenas JavaScript Object Notation, que 1975 01:28:45,629 --> 01:28:47,670 é, basicamente, você recebe um todo objeto JavaScript. 1976 01:28:47,670 --> 01:28:50,820 E você colocá-lo em um arquivo, assim como esse objeto CS50 que vocês viram. 1977 01:28:50,820 --> 01:28:53,090 Você colocá-lo em um arquivo, e enviá-lo ao longo de Davin. 1978 01:28:53,090 --> 01:28:55,850 >> Portanto, neste caso, eu o faria fazer um objeto JavaScript 1979 01:28:55,850 --> 01:28:59,570 e apenas dizer, usuário existe, sim. 1980 01:28:59,570 --> 01:29:01,630 Ou usuário existe, não. 1981 01:29:01,630 --> 01:29:02,810 E enviá-lo de volta para ele. 1982 01:29:02,810 --> 01:29:03,830 E por JSON? 1983 01:29:03,830 --> 01:29:07,330 Porque a pessoa quem está recebendo este é 1984 01:29:07,330 --> 01:29:10,030 vai usar JavaScript para lidar com a resposta. 1985 01:29:10,030 --> 01:29:14,970 E JavaScript funciona tão bem porque ele é chamado de JavaScript Object Notation. 1986 01:29:14,970 --> 01:29:15,470 Certo? 1987 01:29:15,470 --> 01:29:19,660 Assim, ele pode simplesmente chamar uma função e obter este objeto agradável a partir da resposta. 1988 01:29:19,660 --> 01:29:22,890 E, em seguida, ele vai saber se que o usuário está no banco de dados ou não. 1989 01:29:22,890 --> 01:29:25,230 >> Então você vê, tudo isso que vem juntos no servidor web, 1990 01:29:25,230 --> 01:29:28,450 e depois há um HTTP ao pedido e uma resposta HTTP e tudo. 1991 01:29:28,450 --> 01:29:30,600 Então, certifique-se de caras compreender esta chamada AJAX 1992 01:29:30,600 --> 01:29:37,260 porque ajuda a compreender tudo dos conceitos que estamos falando. 1993 01:29:37,260 --> 01:29:40,260 >> Então, aqui está um exemplo de AJAX com jQuery. 1994 01:29:40,260 --> 01:29:42,130 E aqui, o que fazemos com get JSON. 1995 01:29:42,130 --> 01:29:45,660 Portanto, não estamos tentando obter uma imagem de um gato aqui, ou um pato. 1996 01:29:45,660 --> 01:29:48,110 Estamos tentando obter um arquivo JSON. 1997 01:29:48,110 --> 01:29:51,184 E então vamos esperar até ele é feito, ponto feito. 1998 01:29:51,184 --> 01:29:52,850 Isso significa que eu estou esperando a resposta. 1999 01:29:52,850 --> 01:29:54,180 Pode demorar um pouco. 2000 01:29:54,180 --> 01:29:56,360 Então, você vê um pouco de carga. 2001 01:29:56,360 --> 01:29:59,340 Se você quiser fazer isso em seu site. 2002 01:29:59,340 --> 01:30:01,440 Então dot feito, e então o que acontece quando ele é feito? 2003 01:30:01,440 --> 01:30:04,040 Você passa um anônimo função, assim como vimos antes. 2004 01:30:04,040 --> 01:30:07,800 Porque feito é um evento, apenas como clicar em um mouse ou o que quer, 2005 01:30:07,800 --> 01:30:08,710 para jQuery. 2006 01:30:08,710 --> 01:30:13,710 Então você passa nesta função com dados, textos, status, e jqXHR. 2007 01:30:13,710 --> 01:30:15,790 E, basicamente, é isso apenas algumas variáveis 2008 01:30:15,790 --> 01:30:22,160 que você pode usar mais tarde, para ter o estado do pedido HTTP, 2009 01:30:22,160 --> 01:30:24,470 os dados que ele vai para enviar de volta para você. 2010 01:30:24,470 --> 01:30:28,740 Então você pode, mais tarde, interpretá-lo e fazer algo significativo com ele. 2011 01:30:28,740 --> 01:30:30,240 E se ele falhar, quando pode-lo falhar? 2012 01:30:30,240 --> 01:30:33,780 Bem, quando a solicitação HTTP dá -lhe um 500 ou algo parecido. 2013 01:30:33,780 --> 01:30:37,420 Em seguida, ele vai dizer-lhe a status, que tipo de falha que foi, 2014 01:30:37,420 --> 01:30:38,420 e todos os tipos de coisas. 2015 01:30:38,420 --> 01:30:40,630 Você tem que ter certeza para lidar com ambos os casos, 2016 01:30:40,630 --> 01:30:42,770 caso contrário, o programa vai a loucura. 2017 01:30:42,770 --> 01:30:45,820 >> DAVIN: Então, sim, este é exatamente o que você viu em seu último p-set. 2018 01:30:45,820 --> 01:30:49,720 A chamada real AJAX está no get JSON. 2019 01:30:49,720 --> 01:30:50,587 Essa é a chamada. 2020 01:30:50,587 --> 01:30:52,920 E então, ponto feito é como ele verifica se é bem sucedido. 2021 01:30:52,920 --> 01:30:55,620 Se for bem sucedido, você quer de fazer alguma coisa com os dados. 2022 01:30:55,620 --> 01:30:59,290 Você recebe de volta a partir desse Dados de solicitação JSON. 2023 01:30:59,290 --> 01:31:00,600 Isso é o que você recebe de volta. 2024 01:31:00,600 --> 01:31:04,470 Então, se você se lembrar de sua p-set, muitos de vocês eram como suporte de dados i 2025 01:31:04,470 --> 01:31:06,302 ou o que quer, ligação de pontos ou título. 2026 01:31:06,302 --> 01:31:08,260 O que quer que está voltando desde que o JSON, independentemente 2027 01:31:08,260 --> 01:31:11,020 os campos são nesse objeto JSON, isso é o que você está ficando para trás. 2028 01:31:11,020 --> 01:31:12,394 Dados é o que você está ficando para trás. 2029 01:31:12,394 --> 01:31:15,510 Estado do texto, apenas algo que permite que você saiba o que aconteceu. 2030 01:31:15,510 --> 01:31:20,570 E então, o jqXHR, isso é apenas a solicitação HTTP XML jQuery. 2031 01:31:20,570 --> 01:31:21,990 Isso é apenas como um objeto. 2032 01:31:21,990 --> 01:31:23,932 E, em seguida, falhar, assim como Gabe disse. 2033 01:31:23,932 --> 01:31:27,140 GABE: No nosso pequeno exemplo de abc123 apenas para verificar se o que está no banco de dados 2034 01:31:27,140 --> 01:31:32,260 ou não, os dados seria algo que você faria, se o nome do usuário dot dados existem, 2035 01:31:32,260 --> 01:31:37,720 que é o que o seu PHP gerado para você, se o nome do usuário dados dot existe, então 2036 01:31:37,720 --> 01:31:40,880 Eu estou indo para alertar, user nome já existe. 2037 01:31:40,880 --> 01:31:44,300 Outra coisa, eu estou indo só para deixar o user proceder o preenchimento do formulário. 2038 01:31:44,300 --> 01:31:47,860 2039 01:31:47,860 --> 01:31:50,820 OK, segurança, cool. 2040 01:31:50,820 --> 01:31:52,060 >> DAVIN: Quer que eu? 2041 01:31:52,060 --> 01:31:54,500 >> GABE: Eu gosto deste. 2042 01:31:54,500 --> 01:31:57,680 Então, algo que parece familiar. 2043 01:31:57,680 --> 01:31:59,750 Estamos quase terminando. 2044 01:31:59,750 --> 01:32:02,670 Portanto, este é apenas o exemplo vocês viram em sala de aula. 2045 01:32:02,670 --> 01:32:04,860 Você estava usando argv1 aqui. 2046 01:32:04,860 --> 01:32:06,460 Isso é como um argumento de linha de comando. 2047 01:32:06,460 --> 01:32:09,270 E nós estamos mem cópia que para um tampão de tamanho 12. 2048 01:32:09,270 --> 01:32:12,560 Qual é o problema aqui? 2049 01:32:12,560 --> 01:32:13,660 Buffer overflow! 2050 01:32:13,660 --> 01:32:15,400 Porque nós temos um buffer de tamanho 12. 2051 01:32:15,400 --> 01:32:18,400 argv1 pode ter um tamanho de dois mil milhões. 2052 01:32:18,400 --> 01:32:19,960 Nós não fazemos qualquer checagem de limites. 2053 01:32:19,960 --> 01:32:24,970 Assim, poderíamos copiar uma grande quantidade de memória. 2054 01:32:24,970 --> 01:32:28,630 E nós vamos ser particularmente ruim sobre isso. 2055 01:32:28,630 --> 01:32:32,600 O que poderíamos fazer isso é muito, muito significa, neste caso? 2056 01:32:32,600 --> 01:32:33,278 Sim? 2057 01:32:33,278 --> 01:32:36,528 AUDIÊNCIA: Parte dos dois mil milhões de coisas contém código executável que retorna 2058 01:32:36,528 --> 01:32:38,127 [Inaudível]. 2059 01:32:38,127 --> 01:32:38,710 GABE: Exatamente. 2060 01:32:38,710 --> 01:32:41,110 Então esse é o tipo de coisa que as pessoas usam 2061 01:32:41,110 --> 01:32:43,344 para fazer o jailbreak um iPhone, por exemplo. 2062 01:32:43,344 --> 01:32:44,260 Então, esse tipo de coisa. 2063 01:32:44,260 --> 01:32:48,610 Porque você pode apenas fazer o dispositivo executar qualquer código que você gosta. 2064 01:32:48,610 --> 01:32:50,247 A correção, para que a correção é fácil. 2065 01:32:50,247 --> 01:32:51,330 Basta verificar os limites. 2066 01:32:51,330 --> 01:32:53,455 Você verificar a nulidade porque nós sempre verificar a nulidade 2067 01:32:53,455 --> 01:32:54,940 quando estamos lidando com strings. 2068 01:32:54,940 --> 01:32:57,840 E então, você pega o comprimento da corda antes. 2069 01:32:57,840 --> 01:33:00,150 E se a cadeia comprimento é uma seqüência válida 2070 01:33:00,150 --> 01:33:03,700 comprimento, que está dentro 0 e 12, então estamos bem. 2071 01:33:03,700 --> 01:33:07,144 >> DAVIN: Se você não buscar por null, bem rápido, o que vai acontecer? 2072 01:33:07,144 --> 01:33:07,810 Vai SEG falha. 2073 01:33:07,810 --> 01:33:10,850 Por que será que vai SEG culpa? 2074 01:33:10,850 --> 01:33:12,510 Porque você está chamando strlen em null. 2075 01:33:12,510 --> 01:33:13,010 GABE: Yeah. 2076 01:33:13,010 --> 01:33:16,490 2077 01:33:16,490 --> 01:33:19,630 A verdadeira ou falsa, usando um password é uma boa idéia. 2078 01:33:19,630 --> 01:33:20,430 >> AUDIÊNCIA: False. 2079 01:33:20,430 --> 01:33:21,150 >> GABE: False. 2080 01:33:21,150 --> 01:33:23,870 Use muitas senhas, e grandes, longos. 2081 01:33:23,870 --> 01:33:26,050 Ícones Cadeado garantir a segurança. 2082 01:33:26,050 --> 01:33:27,080 >> AUDIÊNCIA: False. 2083 01:33:27,080 --> 01:33:27,749 >> GABE: False. 2084 01:33:27,749 --> 01:33:28,790 Isso não quer dizer nada. 2085 01:33:28,790 --> 01:33:30,480 É apenas um ícone. 2086 01:33:30,480 --> 01:33:32,824 SSL protege contra um homem no meio ataque. 2087 01:33:32,824 --> 01:33:33,490 AUDIÊNCIA: False. 2088 01:33:33,490 --> 01:33:34,110 GABE: False. 2089 01:33:34,110 --> 01:33:35,355 OK, para que todos aqueles são falsas. 2090 01:33:35,355 --> 01:33:38,324 2091 01:33:38,324 --> 01:33:39,490 Nice. 2092 01:33:39,490 --> 01:33:40,220 [Inaudível] 2093 01:33:40,220 --> 01:33:42,500 Quer falar sobre isso? 2094 01:33:42,500 --> 01:33:43,259 Sua vez. 2095 01:33:43,259 --> 01:33:45,050 Davin: Tipos de ataques, homem no meio. 2096 01:33:45,050 --> 01:33:47,134 O que é um homem no meio ataque? 2097 01:33:47,134 --> 01:33:48,050 AUDIÊNCIA: [inaudível]. 2098 01:33:48,050 --> 01:33:51,437 2099 01:33:51,437 --> 01:33:54,020 DAVIN: Se você enviar um HTTP pedido, eles poderiam fazer isso, certo? 2100 01:33:54,020 --> 01:33:57,890 Mas se você está enviando HTTPS, eles provavelmente não será capaz de fazer isso. 2101 01:33:57,890 --> 01:33:59,952 Há muitos pontos ao longo de sua conexão. 2102 01:33:59,952 --> 01:34:00,660 Você tem roteadores. 2103 01:34:00,660 --> 01:34:01,746 Você tem servidores DNS. 2104 01:34:01,746 --> 01:34:04,120 Se alguém é capaz de fisicamente ver o que você está enviando, 2105 01:34:04,120 --> 01:34:06,140 assim que alguém é capaz de realmente chegar entre você, 2106 01:34:06,140 --> 01:34:08,840 o cliente eo servidor, e é capaz de ver o que você está enviando, 2107 01:34:08,840 --> 01:34:10,298 este é um homem no meio ataque. 2108 01:34:10,298 --> 01:34:14,287 Então, para ver o que você está tentando fazer com que a partir de o servidor, ou é capaz de see-- pior, 2109 01:34:14,287 --> 01:34:16,620 você pode ser capaz de ver cookies ou algo parecido. 2110 01:34:16,620 --> 01:34:19,290 >> Assim, por exemplo, se você não estiver usando SSL, ele 2111 01:34:19,290 --> 01:34:21,900 pode ser capaz de ver os cookies de identificação de sessão. 2112 01:34:21,900 --> 01:34:25,460 E isso é chamado de seqüestro de sessão porque ele vê seus cookies de identificação, 2113 01:34:25,460 --> 01:34:28,317 e, em seguida, ele é capaz de ir para esse website e fingir ser você. 2114 01:34:28,317 --> 01:34:31,150 Porque assim como em PHP, lembre- quando logado, o que vamos fazer? 2115 01:34:31,150 --> 01:34:33,340 Montamos ID sessão igual a ID. 2116 01:34:33,340 --> 01:34:34,810 Assim que o identifica. 2117 01:34:34,810 --> 01:34:38,300 É por isso que você pode ver a sua carteira e carteira não de todo mundo. 2118 01:34:38,300 --> 01:34:42,320 >> Bem, se eu sou capaz de conseguir esse cookie, então eu posso registrar em que página. 2119 01:34:42,320 --> 01:34:45,380 E então, eu só posso ver o seu material e começar a comprar e vender coisas. 2120 01:34:45,380 --> 01:34:46,800 Então, isso é o seqüestro de sessão. 2121 01:34:46,800 --> 01:34:50,810 Mas você não deve ser capaz a-- assim você pode usar o homem no meio ataque 2122 01:34:50,810 --> 01:34:52,290 mesmo se eles estão usando SSL. 2123 01:34:52,290 --> 01:34:53,520 Mas você não deve ser capaz de fazer. 2124 01:34:53,520 --> 01:34:56,580 Se eles estão usando SSL, você não pode seqüestrar sessão. 2125 01:34:56,580 --> 01:34:58,927 Por quê? 2126 01:34:58,927 --> 01:35:01,135 Porque tudo é criptografado, certo? se ele é criptografado, 2127 01:35:01,135 --> 01:35:03,509 e eu ainda sou um homem na meio, eu ainda obter seus dados. 2128 01:35:03,509 --> 01:35:04,279 Isso é bom. 2129 01:35:04,279 --> 01:35:05,070 Mas está criptografado. 2130 01:35:05,070 --> 01:35:07,750 Então, eu realmente não posso usá-lo. 2131 01:35:07,750 --> 01:35:09,840 Então, isso é dois. 2132 01:35:09,840 --> 01:35:11,544 >> Rapidinho, cross site request forgery. 2133 01:35:11,544 --> 01:35:13,960 Isso é apenas se há um link e essa ligação faz algo 2134 01:35:13,960 --> 01:35:14,890 que você não acha que ele deve fazer. 2135 01:35:14,890 --> 01:35:18,150 Assim, por exemplo, se o link foi vai comprar ações ou vender ações, 2136 01:35:18,150 --> 01:35:19,360 e você não sabia disso. 2137 01:35:19,360 --> 01:35:22,040 Você clicou no link, enviou um pedido, comprou 2138 01:35:22,040 --> 01:35:24,240 ou algo que vendido você não queria fazer. 2139 01:35:24,240 --> 01:35:25,120 É isso. 2140 01:35:25,120 --> 01:35:30,720 >> Cross site scripting, por isso aqui, você está passando na via q variável, 2141 01:35:30,720 --> 01:35:33,510 em vez de passar em algum tipo de valor, talvez q é como um nome. 2142 01:35:33,510 --> 01:35:36,560 Então, ao invés de passar iguais q Davin ou algo parecido, 2143 01:35:36,560 --> 01:35:38,740 Se você não usar o HTML caracteres especiais, se você 2144 01:35:38,740 --> 01:35:43,100 não escapa a esta para se certificar de que é OK, então eu poderia passar em vez disso, 2145 01:35:43,100 --> 01:35:46,910 vamos dizer aqui que eu estou dizendo impressão ou algo assim, 2146 01:35:46,910 --> 01:35:51,070 então eu poderia passar aqui uma chamada de script. 2147 01:35:51,070 --> 01:35:53,140 >> Então, em vez de apenas começando uma variável, 2148 01:35:53,140 --> 01:35:54,960 Eu, então, executar esta chamada script. 2149 01:35:54,960 --> 01:35:57,065 Então, dentro desse script chamada, o que ele faz? 2150 01:35:57,065 --> 01:36:00,190 Documento localização do ponto, que vai mudar a localização do documento. 2151 01:36:00,190 --> 01:36:02,290 Então, eu estou indo para redirecionar para outro lugar. 2152 01:36:02,290 --> 01:36:08,170 É chamado de bandido em Neste exemplo, muito bom. 2153 01:36:08,170 --> 01:36:10,536 Não foi possível pensar na palavra. 2154 01:36:10,536 --> 01:36:12,410 E então, o que é ainda pior é que eu vou 2155 01:36:12,410 --> 01:36:16,832 para então definir cookie, que é algum variável que eu tenho neste website. 2156 01:36:16,832 --> 01:36:19,040 Eu estou indo para defini-la igual para o cookie documento ponto. 2157 01:36:19,040 --> 01:36:20,660 Portanto, eu vou para roubar seu cookie. 2158 01:36:20,660 --> 01:36:22,951 E eu estou indo para redirecionar algumas informações para um site 2159 01:36:22,951 --> 01:36:25,120 que você não deve estar acessando. 2160 01:36:25,120 --> 01:36:29,250 E tudo isso acontece porque você é não escapar o que você já viu. 2161 01:36:29,250 --> 01:36:29,910 Sim? 2162 01:36:29,910 --> 01:36:32,160 >> AUDIÊNCIA: Então, só para deixar isso claro, é 2163 01:36:32,160 --> 01:36:37,550 vulnerable.com que é vulnerável a esse. 2164 01:36:37,550 --> 01:36:39,300 Então, esse link pode aparecer em qualquer página. 2165 01:36:39,300 --> 01:36:42,200 Alguém clica nele, vai para vulnerable.com. 2166 01:36:42,200 --> 01:36:43,700 Você tem um cookie para vulnerable.com. 2167 01:36:43,700 --> 01:36:46,670 Vamos dizer que o Facebook é vulnerável, tão facebook.com. 2168 01:36:46,670 --> 01:36:48,310 Você tem o seu cookie Facebook. 2169 01:36:48,310 --> 01:36:50,925 O que isto está fazendo, você está vai facebook.com, 2170 01:36:50,925 --> 01:36:53,990 ele é imediatamente redirecionando você badguy.com, 2171 01:36:53,990 --> 01:36:57,182 mas incluindo as informações de cookie. 2172 01:36:57,182 --> 01:36:59,310 Portanto, é um redirecionamento rápida, mas o seu cookie Facebook 2173 01:36:59,310 --> 01:37:02,572 está incluído no que redirecionamento, e é assim que eles [inaudível]. 2174 01:37:02,572 --> 01:37:04,280 GABE: Sim, há algumas coisas muito médios 2175 01:37:04,280 --> 01:37:06,070 que as pessoas podem fazer se há este. 2176 01:37:06,070 --> 01:37:09,190 Por exemplo, se o Facebook permitiu todo mundo para mudar seu nome de usuário, 2177 01:37:09,190 --> 01:37:11,680 e eles não fizeram qualquer checagens, assim você 2178 01:37:11,680 --> 01:37:16,810 Pode inserir uma coisa JavaScript que muda a sua imagem a um hamster. 2179 01:37:16,810 --> 01:37:22,590 E que insere o mesmo JavaScript em todo mundo que vê a sua página. 2180 01:37:22,590 --> 01:37:26,400 Então todo mundo que vê sua página tem a mesma coisa em nome do usuário. 2181 01:37:26,400 --> 01:37:30,104 E porque é um vírus, espalha-se exponencialmente. 2182 01:37:30,104 --> 01:37:32,270 DAVIN: Nós vamos pular o último um, e então estamos a fazer. 2183 01:37:32,270 --> 01:37:34,120 Portanto, este é apenas mais um exemplo. 2184 01:37:34,120 --> 01:37:36,120 Então, isso é que eles não são escapando sua tabela SQL. 2185 01:37:36,120 --> 01:37:37,090 Assim, você pode deixá-lo cair. 2186 01:37:37,090 --> 01:37:38,805 Então você quer escapar coisas. 2187 01:37:38,805 --> 01:37:44,010 Esse foi o exemplo anterior com o cross site scripting. 2188 01:37:44,010 --> 01:37:45,430 Desculpe, mas correu um pouco tarde. 2189 01:37:45,430 --> 01:37:46,870 Amanhã, sorry! 2190 01:37:46,870 --> 01:37:48,560 Amanhã, temos o horário de expediente. 2191 01:37:48,560 --> 01:37:50,870 Assim, o horário de expediente em Cabbot 8:00-11:00. 2192 01:37:50,870 --> 01:37:55,240 Os horários de funcionamento são estritamente para as perguntas do quiz. 2193 01:37:55,240 --> 01:37:56,587