Jason Hirschhorn: Benvido, todos, para a semana 10. Esta é unha semana emocionante porque mañá é Proba 1, o que teremos para nun segundo. Hoxe, na sección, estamos indo a ir algúns recursos para a proba, e entón eu vou responder a calquera preguntas que vostedes teñen. E imos finalmente acabar con algúns problemas prácticos. Podemos pasar toda a sección responder a preguntas. Podemos pasar toda a sección pasando por riba de problemas prácticos. Nós só expandir-se para encher o espazo e tempo que temos. Entón engada esta lista cada semana, pero é especialmente importante nesta semana. Para estudar, se non ten xa comezou, oh boy. Pero espero que comezou xa. E está pasando os materiais e recursos listados aquí. Recomendo un número destes. En particular, notas de clase son moi importante e útil. O study.cs50.net ofrece unha gran cartilla sobre unha morea de os temas que cuberto. Tamén ten algúns grandes practicar problemas. E entón, Google é grande, tamén. Eu non sei o que usalo. Pero usar Google, tamén. Estenda a man para min, se tes algunha preguntas, comentarios ou preocupacións. Ollar sobre a sesión de revisión diapositivas de onte á noite. Ou, se ten tempo, asistir ao vídeo. Fornecen unha chea de útiles material e información. E tentar cubrir, se non todos, moitos os temas que cobren e que pode ver no quiz. Falando do cuestionario, que será mañá. Ten 75 minutos de duración. Moitos de vostedes están levando iso en 1 horas, e algúns de vostedes están levando-o ás 5:30. Ao tempo que está tomando-o eo lugar que está tomando tanto, comproba se verifique o documento na páxina de inicio CS50.net. Lembre que pode obter un 8 1/2 11 por folla para levar con vostede. Moitas veces, a xente non usan este folla durante todo o exame. Pero, en realidade, é unha incrible ferramenta de estudo útil. Entón, xuntando esta folla é o que Pase probablemente tres ou catro horas facendo cando estaba estudando para CS50 e que era de lonxe o máis útil forma que eu podería estudar ao quiz. Así, mesmo se ten algunhas outras persoas da guías de estudo para ollar e usar como referencia, eu recomendo facer o seu propio guía de estudo, poñendo esas cousas xuntos. Isto realmente axuda a aprender todo o material. Para rematar, pero non menos importante nesta sección, tras a proba de mañá hai unha máis charla - próximo luns. Hai máis dunha sección, non na próxima Martes antes de Acción de Grazas, pero o Martes despois. Estar reunidos para unha final adeus festa e tamén facer algunha legal cousas para vostedes animado sobre máis estudos en ciencia da computación. Hai máis dun proxecto, unha xusto, unha maratón hacker. Estamos chegando ao final de CS50, que é emocionante - pero tamén, se é como me, un pouco triste. Antes de seguir adiante, alguén ten calquera dúbida sobre o que Cubrimos ata agora? OK, así, imos pasar por riba de algunhas cuestións que ten para o quiz e temas podemos cubrir. Polo tanto, esta é unha lista que engada. El non é de forma exhaustiva, pero espero veña a refrescar a súa memoria, se ten algunha dúbida sobre calquera destes temas, ou se ten dúbidas sobre problemas prácticos de quizzes nos últimos anos. Eu tiña algunhas preguntas que eran por correo electrónico para min, pero eu quero aprazar sobre aqueles por un segundo. Alguén ten algunha dúbida, problemas que non entendía, respostas que eles non entendían para comezar? Avi. Audiencia: Pode só pasar por riba DON e Ajax realmente rápida? Como, o que necesitamos saber ou debería entender sobre eles? Jason Hirschhorn: Vou responder xeralmente esa cuestión da, o que eu Debe saber sobre determinado asunto x? Porque eu teño a sensación de que moitos de vós van me preguntar iso, ou son curioso sobre iso. Entón, na medida en que o tema foi cuberto de clase, ou sección, ou en study.cs50.net, un conxunto de problemas, ten debe estar familiarizado con el. Así que non saber todo tipo de etiqueta que está dispoñible ou HTML todo tipo de atributo ou propiedade pode dar algo en CSS. Pero se viu nun exemplo de clase, se viu nun problema conxunto, probablemente ten que estar familiarizado con ela, especialmente cousas que viu na charla. Entón, nós discutir o documento modelo de obxecto dun pouco en sección, aínda máis en charla. Debe estar familiarizado que gran parte dela. E ten que estar familiarizado coa Ajax na mesma medida. Nunca vimos incrible avanzado ou exemplos complicados de Ajax, de xeito non vai ser solicitada facer algo incrible complicado. Pero ten que estar se pregunta, como fago facer unha chamada Ajax usando jQuery? Que é algo que xa viu un número de veces antes, tanto no revisar sesión e na charla, e é só de dúas liñas ISH de código. Entón, iso é algo que debería estar familiarizado. Pero, de novo, para todos eses temas, se xa viu antes, é un xogo xusto. E podemos preguntar-lle - obviamente, estamos vai pedir cousas que non teña visto antes. Codificación algo que non ten visto antes. O que non quere dicir que non ten ver as ferramentas para resolver este problema antes. Xa viu esas ferramentas. Por exemplo, o Test 1, se ten que codificar strlen. Non codificado strlen antes. Pero xa sabe como usar un loop for, sabe como utilizalos se condicións. Vostede sabe como escribir variables en C. Será o mesmo aquí. Non vai ser invitado a facer calquera cousa que non teña visto antes, pero pode ser solicitado para, tipo, poñer algo xuntos dunha nova forma, ou resolver un tipo de problema. Sentímolo, non específico para a súa pregunta, pero eu non podo responder sobre cada tema único que facer ou non precisa saber. Pero tamén, moi, última cousa sobre iso. Nós gastamos moito máis tempo en listas de enlaces que temos no Ajax. Non usou Ajax nun conxunto de problemas. Unha das características centrais do que conxunto de problemas que estaba listas de enlaces. E pasamos moito tempo en charla e sección de usalo. Así, as probabilidades son lista de ligazóns aparecerá máis moitas veces a proba do que Ajax vontade. Ou as preguntas que teñen que ver coa conexión lista valerá máis puntos. Entón, certamente pode concentrarse e estreito en en cousas que son máis probable que veña, porque temos pasei máis tempo con eles. Aceptar calquera outras preguntas? É. Audiencia: Podemos falar do uso de funcións anónimas en JavaScript? Son un son pouco confuso sobre iso. Jason Hirschhorn: Entón, en JavaScript - Estou tentando pensar como eu podería escribir isto en - entón imos realmente abrir este código. Polo tanto, este é o código que fixemos a semana pasada. E xa viu iso antes, se estaban aquí na sección, a semana pasada. Ou xa viu algo semellante a este antes. Pero pode ollar a esta primeira liña. É así que comezar - todo o mundo xa viu iso antes. Se queres poñer un código JavaScript, poñelas dentro deste, asumindo está a usar jQuery. Isto está dicindo, non fagas nada ata cargado do documento. E despois, Curt, ve aquí estamos facendo algo coma isto - función paréntese aberto, pechado paréntese. Polo tanto, non estamos dando a este funciona un nome. Non estamos indo para definir esta función se quere que funcione e despois chamalo de unha chea de veces. Estamos só dicindo que este documento xa ten unha función. Un par de cousas para facer. E nós non queremos pasar o tempo dándolle un nome ou gardalo para perpetuidade. Nós só queremos realizar algunhas cousas. Así, unha función tipo anónimo de serve ese propósito. Cando non está indo a usar algo unha e outra vez, de xeito que non precisa para darlle un nome - só quere usalo unha vez - vostede tería só que dicir función, por exemplo, neste caso, e que é só definir algo que podería dar un nome. Como, nós podemos extraer esta función fóra e darlle un nome e, a continuación, chamar ese funcionar aquí. Pero non, porque non quere perder tempo dándolle un nome ou perdendo algo no noso espazo de nome. E vai ver que unha morea. Por exemplo, vemos que moito neste código, pero xa viu iso antes, cando fai clic en algo - executar este tipo de código. Poderiamos definir o código que queiramos para ser executado cando prememos neste caso este ID, como unha función separada e logo realizar esa función. Pero, neste caso, estamos só ignorando ese paso e movelo para aquí e só para definir todo que queremos que aconteza e non darlle un nome. Isto aínda non pode ter respondín a súa pregunta. Audiencia: Non, fai. É dicir, eu creo que realmente non entendo por que sería unha funcionar en todo, con todo. Porque non está realmente a ser chamado. El realmente non ten un nome. Jason Hirschhorn: É unha función no sentido de que é unha serie de etapas, como ía poñer nunha función. E entón é por iso que chamamos que función anónima. Non estamos indo a darlle un nome. Non estamos indo ao lixo tentando nomealo, pero o que puidemos. Funcións anónimas, vostede sempre pode dar un nome. Así, por exemplo, este código aquí, poderiamos poñer este código dentro dun función e, a continuación, chamar esta función aquí. Pola contra, nós dicimos, nós non imos para se preocupar con iso. Nós só estamos indo a escribir todo aquí. É coma se, por veces, cando está escribindo catro lazo en C - vostedes xa vin iso antes - quizais estea iteración través dun forloop en i é igual a 0. I é inferior a strlen. Ou está pasando por algunha array, pode gardar disposición índice i, dalgunha variable. E usa esa variable. Así, non ter que volver escribir disposición soporte de i máis e máis e máis. E iso é máis ou menos como unha variable dummy. Non está servindo moi outros fins que non para facer o seu código un pouco máis limpo e máis fácil de ler. Función semellante aquí. Só o fai un pouco máis fácil, pero funcionalmente non hai ningunha diferenza. Isto responde a súa pregunta? Audiencia: si. Jason Hirschhorn: OK .. Mario? Audiencia: Onte eles moitas veces colocan función parénteses evento. Será que isto significa algo? Ou é para cousas como que farían document.ready evento función. Jason Hirschhorn: Nós xa vimos isto, e de novo, estas son cousas menores, que probablemente eu non quero gastar moito tempo en. Porque ás veces eu non quero que a xente se apavorou ​​que eles non teñen escoitou falar sobre isto moito. Pero nós falamos un pouco sobre manipuladores de eventos. Entón, algo pasa, e logo, esta función é executada. E entón nós tamén queremos saber algúns detalles sobre o que sucedeu neste evento. Entón, creo que volta a conxunto de problemas 4. Esta é probablemente o xeito máis doado de entender que en pausa para fóra. Houbo algún código - como un evento que ía ocorrer, pero evento pode significar moitas cousas. Se podería significar o rato é premendo, el podería significar que bater a tecla de frecha, et cetera, et cetera. Pero está todo gardado neste xenérico cousa chamada eventos. E entón, o que podemos dicir, é este evento esta cousa? Ou este é o evento esta cousa? Ou, que tipo de acontecer con ese evento? Entón é por iso que crear esa variable alí para salvar a información adicional sobre o que exactamente aconteceu naquela vai querer utilizar na función. Pero, de novo, iso pode ser un dos cousas menos importantes para ser super familiarizado. OK, que outras cuestións teñen persoas tido, ou obstáculos que atopar durante a revisión? Nós imos voltar a esta lista. E como durante probas prácticos, se persoas tomaron as xa? Cales foron algúns dos problemas que tropezou vostedes enriba? Sei para un feito que o ano pasado cuestionario foi moi difícil. Audiencia: Pode explicar o que un ataque de inxección SQL é? Jason Hirschhorn: OK, xenial. Entón nós falamos un pouco sobre iso. Hai unha charla sobre seguridade. E unha vez máis, como xa referín anteriormente, este é un separadamente. Pero estará errado no cuestionario cando le algunha pequena de dous puntos pregunta, e está tipo, cando eu nunca aprendeu iso? Todas esas cousas nesas conferencias que non pensa que precisaba para sabe, ou pode pasar por riba porque eles non teñen que ver co conxunto de problemas, os que probablemente vai subir de novo o quiz. Así, fresco, algo divertido que acaba de penso que David estaba dicindo para ti gozar, estaba dicindo para ti gozar e para facelo só ser super animado sobre a aprendizaxe de todo existe a aprender sobre ciencia da computación. Esas cousas veñen en probas. Así, mesmo esas pequenas cousas que non fixo se relacionan directamente co seu problema definido, como vostedes está familiarizado coa partir de Proba 0, probablemente vai vir cara arriba. E este é un bo exemplo de algo. Así, unha inxección de SQL ataques é cando obter unha información do usuario e quere inserir-lo nunha táboa utilizando unha inserción de instrución SQL, pero Non esterilizar a entrada antes de tempo. Entón, obviamente que vimos Instrucións SQL. Vou abrir - imos - imos para a revisión - Eu creo, que o cubriu? Creo Samala fixo. Así, podemos obter - Audiencia: Onde atopou iso? Jason Hirschhorn: Entón, se vai a CS50.net, quizzes, e entón pode rolar e obter láminas da sesión de revisión. Pero pode ver este é un bo exemplo dun ataque de inxección SQL. Tomamos unha información do usuario e eles nos dan unha cadea, e entón nós pretende introducir esa secuencia nunha base de datos. Xeralmente imos higienizar que de entrada, o que significa que hai uns caracteres que son perigosos. Por exemplo, en secuencias de SQL, estas citas - comiñas simples ou dobres - significar algo. Elas significan acabar con esa corda aquí. E así, se o usuario lle dá unha única ou comiñas, eles poderían ser intentando viaxe ata a súa pesquisa e introducir algunhas cousas malas para el. E se eles fan isto, eles poderían gañar control do seu banco de datos ou facer algunha cousas que non quere que eles fagan. É por iso que cada vez que tomamos SQL consultas, nós higienizar a entrada antes poñelas na base de datos, que significa que escapar eses caracteres. Falaremos sobre iso nun segundo. , Unha inxección de SQL Pero short longo da historia ataque é, se non facelo - se non coidar da entrada déronlle antes de poñer o seu base de datos, poden, como se ve a continuación aquí, realizar unha consulta que, en realidade - eles puxeron no seu código aquí e esta liña de selección aquí pode seleccionar todo, desde a mesa, con independencia de que o contrasinal é dada. Porque ten a 1 ou igual a 1. Entón, é basicamente longa historia curta, un xeito de asumir a base de datos. A cuestión, entón, para vostedes, é onde en p conxuntos 7 que higienizar todo as entradas para as procuras SQL? Onde é que ese paso acontecería? Onde evitar a inxección de SQL ataques de ocorrer na p set 7? É. Audiencia: Crypt? Jason Hirschhorn: Entón non se cripta. Non facer vostede facelo a este determinado conxunto de problemas, pero pasa na función de consulta. Nós realmente escribiu isto para vostede, e coidou de saneantes entradas para ti. Pero o ano pasado, os alumnos tiveron escribir as entradas por conta propia. En p set 7, que moitos de vostedes - déixeme abrir outro arquivo. Entón, vai notar-se aquí unha gran cantidade de persoas, no conxunto de problemas 7, non chamou esta función en cordas. Esta función, htmlspecialchars, novo - esa cadea pode ter algunhas cousas que en HTML significa outra cousa. Como unha cinta, unha praza, ou un ángulo soporte de referirse a algo en HTML. E por iso, se imprime que para o pantalla ou se tomar só que e imprimir iso ao seu HTML, que o poder facer algo que non espera. Entón htmlspecialchars vai sobre todos aqueles personaxes que teñen especial reunión e lles escapa. El queda impreso o texto quere ver, no canto de romper o seu HTML. Chamamos esta función na cabeceira. E unha morea de xente se esqueceu de chamar esa función no código que estaba escribindo. Así, por exemplo, se o nome do material tiña un soporte de ángulo nel e esqueciches para chamar esta función, que ángulo soporte podería xogar fóra o que seu HTML parecía. Pero chamar esta función pode escapar que por iso, en realidade, imprime como un soporte de ángulo e non xoga fóra do seu código HTML. A mesma razón que vimos, ás veces, barras antes de comiñas dobres nunha liña printf porque non queremos que o comiñas dobres para abaixo a corda. Queremos imprimir-los fóra para a pantalla. Entón todo isto é a mesma idea. Isto responde a súa pregunta? Audiencia: Máis ou menos. Jason Hirschhorn: Vostede ter un follow-up? Audiencia: Eu creo que a inxección de SQL ataque ten que ver con iso? Non entendo como ambos están relacionados. Por que faría as specialChars? Jason Hirschhorn: OK, entón o SQL ataque de inxección é cando inxecta algunhas cordas malicioso alguén do programa, e eles só toma-lo e executalo a consulta SQL cunha corda que lles deu. Como verás aquí abaixo, que podería ser problemático. Entón, o xeito no que previr contra iso é levar a súa secuencia que dan ti - así esta cadea aquí - e higienizar-lo. Ti escapar de todas as cousas que son potencialmente problemáticas. Entón non interpretala los como algo isto significa algo. E un exemplo de que, con HTML é esta función. Entón, é a mesma idea aquí. E eu estaba só mostrándolle outro exemplos de cando ten ver esa idea antes. De escapar a entrada do usuario antes de imprimir lo para unha pantalla ou de poñelas dentro dunha instrución SQL. Audiencia: Polo tanto, neste caso, o usuario está mexendo co programador. Jason Hirschhorn: si. Con todos eses ataques de seguridade, que sempre é xeral, o usuario, ou alguén está a tratar de xogar con vostede, o programador. E estas son as formas que poida previr contra eles. Audiencia: Entón, eu teño unha pregunta sobre as funcións de hash. Na proba 1 a partir de 2011, hai dous preguntas sobre hashes unilateral. E eu só estaba me pregunta o que iso significaba. Jason Hirschhorn: OK, que proba? 2011? Audiencia: Yeah. Audiencia: Quiz 1? Audiencia: [inaudível]. É como hash dunha contrasinal. Isto non é poñer as cousas - Jason Hirschhorn: Que páxina foi iso? Audiencia: Coido que foi 9 ou 10, ou ambos. Jason Hirschhorn: Todo ben, vai adiante, Curt. Non pode responder, mentres nós miramos. Audiencia: Eu creo que está falando sobre hash dunha contrasinal. Tipo, cando alguén entra en un contrasinal, ti transformalo en algo cifrada. Ese é o hash do contrasinal, o que é distinto dunha función hash que pon algo nunha táboa hash. Jason Hirschhorn: Imos ver. Déixeme puxar arriba o que dar como resposta. E entón nós imos atravesalo-la. Entón, Curt deu un gran exemplo dun hash de man única. Cando vin iso antes, nós aproveitar o contrasinal e volver - Teña en conta que, en conxunto p 7, alguén pode ter un contrasinal que só contrasinal, pero, a continuación, el está cifrado en algo moi longo. Unha forma hash significa que é moi fácil para ir dun lado para o outro, pero é moi difícil para ir de o outro camiño de volta. E así, vostede sabe, cando estaba comprobando contrasinais das persoas no problema axuste 7, levaría o seu - así, por exemplo, dicir que querían cambiar o seu contrasinal, preguntar-lles para o seu contrasinal vello. Tomou o seu contrasinal vello. Vostede cifrado el. E entón, compararon os dous criptografias no canto de unencrypting orixinal un, porque é realmente difícil de ir por ese camiño. É. Audiencia: Como en profundidade é que a nosa comprensión do Telnet ten que ser? Jason Hirschhorn: Se foi mencionado brevemente na charla, só unha breve entendemento. Unha vez máis, volve para a resposta á pregunta de Avi - canto máis as cousas veñen para arriba, o máis probable é que ten que ser super familiarizado con eles. No caso de que só chegar á clase, iso é só un lugar. Pero se eles veñen para arriba en palestra, sección, e un conxunto de problemas, entón probablemente ten que ser super familiarizado con eles. Entón, eu tiña unha pregunta de anteriormente sobre - e era o outono de 2010 - Proba 1, imos tirar para arriba - esta cuestión en pilas e colas, que fixemos pasar un pouco de tempo falando na clase, mesmo aínda que en realidade non nunca atinxídelo na sección. Polo tanto, esta cuestión está a darlle unha serie de ordes e pregunta-lle o que imprimirase neste caso. Polo tanto, esta é unha cuestión totalmente razoable que poidan ser colocadas de ti caras, e entón vostedes deben poder respostas la. Entón, por que non mira para el por 30 segundos, e entón se alguén quere propor as respostas a min, e entón imos atravesalo-la. Todo ben, que ten unha resposta á cuestión 27? É. Audiencia: É 1, 2, 3, 3? Jason Hirschhorn: Iso mesmo. 27 é 1, 2, 3, 3. Entón, imos ver como temos iso. En primeiro lugar, estamos dicindo, se s é unha fila, o que será impreso? Así, un q é first in, first out. Nós xa vimos isto antes. Vimos a imaxe das persoas esperando o Apple Tenda a mercar algún produto. As primeiras persoas son as primeiras persoas para fóra. As primeiras cousas nunha cola son as primeiras cousas. Entón, se nós empurrar algo nunha cola, presione o 1, entón imos para cima do 1. Pop significa só tomar. Neste caso, só tes que levar algo. Tomamos o primeiro cousa, iso é un 1. Entón, imos poñer as cousas nos imprimir-se aquí. Isto non está na nosa cola. Logo empurrar a 2 ea 3, e que saltan o primeiro. Unha vez máis, porque é unha cola. Entón nós comezamos a 2, entón imos poñer noutro 3 e chamar pop novo. A nosa 3 é en primeiro lugar. E entón tivemos unha morea de outras cousas e chamamento pop. Pero, de novo, xa que esta é unha fila, first in, first out. Tomamos o primeiro que xa foi posto dentro Ese é o noso 3. E neste caso, non se preocupe sobre todas as outras cousas. Entón é iso, se esta é unha cola. Calquera dúbida sobre unha cola? Unha pila é diferente. ¿Que é a sigla que temos para a comprensión dunha pila? Audiencia: último a entrar, primeiro en saír. Jason Hirschhorn: LIFO, eu creo. Último a entrar, primeiro en saír. Entón vimos un exemplo dunha pila de bandexas nun comedor. Sexa cal sexa a bandexa está na parte superior se toma-lo. E entón, se as novas bandexas vir , Se poñer na parte superior. E entón, o que está en top se toma-lo. Polo tanto, estas bandexas sobre o poder de fondo estar alí por algún tempo. Neste caso, unha vez máis, imos deseñar iso. Nós empurrar un, entón un é o primeiro da fila. E nós pop algo fora. E só hai unha cousa alí dentro, entón pasamos un aquí abaixo. Entón poñemos en 2 e 3 e nós pop algo fóra. Pero, de novo, xa que esta é unha cola - ou esta é unha pila, en vez - levamos todo o que estaba en último. Todo o que é en última ven en primeiro lugar. E 3 está en último. Entón poñemos a 3 abaixo alí, entón poñemos noutro 3 e nós pop algo de novo. Finalmente, poñemos no 4, 5, 6 e 7, e aquí nós pop. E por que é unha pila, tomamos todo o que foi posto en último e escribir que aquí abaixo. Entón imos acabar con 1, 3, 3, 7. Alguén ten algunha dúbida sobre pilas ou filas, ou este exemplo? Aceptar. Imos volver á lista de temas. Non que aquí, por aquí. Que outras cuestións que as persoas teñen? Audiencia: Eu non sei o quão importante este é, pero eu estaba confuso coa diferenza entre os distintos tipos de linguaxes como reserva, compilados, interpretado. Jason Hirschhorn: Isto é unha boa pregunta. Creo que é algo importante, entón imos pasar por iso rapidamente. As grandes linguas que vimos ata agora son C, PHP e Javascript, en termos de linguaxes de programación. HTML, como mencionar, non é unha linguaxe de programación. É unha linguaxe de reserva. E entón temos CSS, que tamén é non é unha linguaxe de programación. Tamén vimos SQL, que non é unha linguaxe de programación tamén. Entón SQL permite escribir consultas para unha base de datos. HTML é unha linguaxe de reserva. El define como as cousas están estruturadas. E CSS permite estilizar as cousas. Esta é probablemente a medida para o que Debe saber sobre os tres. Pero é máis interesante figura as diferenzas entre C, PHP, e JavaScript. Polo tanto, unha das maiores diferenzas, como mencionar, é a forma na que eles son compilado, ou o que quere o equivalente é. Entón C está feita. Sempre executar un compilador. E entón onde están os seus erros cando realizar o compilador C? Onde iso vai amosar-lle o erros no seu código? Como vostede sabe que hai unha erro no seu código en C? Audiencia: Amosa no terminal. Jason Hirschhorn: Amosa o terminal como está compilando. E se hai erros, que realmente non vai compilar. Entón vostede sabe que hai erros dereita distancia, antes de tempo, antes de incluso executar o seu código. Por suposto, pode realizar o seu código e obter un fallo de segmento, pero iso era probablemente porque fixeches algo lóxico boba. Pero o seu código con tecnicamente todos correctos e podería ser executado. Así, o código C é feita antes do tempo. Que tal código PHP? Onde estaban os erros no seu código PHP? Como sabía que tiña erros no seu código PHP? Audiencia: Tempo de execución? Jason Hirschhorn: Si, cando ía executalo, ten que executar o Código PHP nas costas. E entón vai ver unha pantalla. Podes ver algunhas cousas na parte superior, pero entón ía ver, como, nalgúns laranxa, mesa fea. E iso ía darlle un número de liña e digamos, blah, blah, blah, esas cousas non funcionou. Entón, PHP interprétase liña por liña e executado no servidor. E, a continuación, o resultado é enviados de volta para ti. Grande. Executado na liña de servidores por liña e logo, enviado a vostede. E se hai un erro, el enviará vostede o erro, pero pode que conseguir algunhas cousas antes de tempo. Así, algúns dos que podería funcionar, pero máis tarde, algunhas cousas poden non ter non funcionou. E sobre JavaScript? Onde viu erros de JavaScript? En p set 8, cando ten un erro, como sabía? Onde é que apareceu? Audiencia: O consola, na parte inferior. Jason Hirschhorn: No consola, na parte inferior. Tamén lle daría a número da liña, e que sería aparecerá na parte inferior. E JavaScript non executou no servidor. JavaScript foi enviado ao seu ordenador, e entón, cando chegou o momento de realizar o JavaScript, Javascript era executar liña por liña no cliente, do seu lado. Non é do servidor, o lado do cliente. E do mesmo xeito, se executar liña por liña. E entón, cando recibe un erro, ía aparecer na parte inferior. Á semellanza do PHP, parte dela pode realizar e, a continuación, pode ter unha erro máis tarde. Ademais, ao contrario de un pouco de PHP, se ten un erro de JavaScript - dicir que non fixo a dereita código para unha caixa de alerta - podería manter a execución do seu programa. O cadro de alerta non ía funcionar, pero seu programa sería óptimo. Só quizais esa función sería un fracaso. Polo tanto, hai algúns dos diferenza en termos de como estes linguas, ou como o código de programación escribe son realmente avaliados. Tamén hai outras diferenzas en termos de - a maior diferenza vimos en termos de variables nas distintas linguas. Entón, alguén me pode dar unha diferenza entre as variables nas tres linguas? Si Audiencia: En C, son estrictamente ingresaran. Nos outros dous, son vagamente ingresaran. Jason Hirschhorn: E O que significa isto? Audiencia: Que en C, ten que declarar o tipo de variable cando declarar a variable, como interbool ou char. Jason Hirschhorn: Excelente. No C, a xente sempre tivo que poñer un tipo dunha variable. E nós realmente non podía mesturar tipos. Non podería facer un enteiro ademais dunha cadea. Pero, como xa vimos noutras linguas, en realidade pode mesturar tipo, e nunca ten que dar algo tipo, nunca. Entón como é que sabemos que as cousas son variables en PHP e JavaScript? Audiencia: En PHP, comezan cun cifrão. En JavaScript, cando declara eles, ten que ter un bar. Jason Hirschhorn: Certo. Así, en PHP, comezan cun cifrão. En JavaScript, eles teñen que ter bar, aínda que ás veces non, en realidade, ten que ter bar. Pero iso é correcto. Entón, iso é unha gran diferenza entre as variables. Eu creo que estas son probablemente, fóra do principio da miña cabeza, os dous maiores diferenzas entre estes tres idiomas. Pero, si. Audiencia: E o ámbito de variables C se restrinxe ás chaves, onde os outros, é como, el morre de ser en só unha función, pero por outra banda, é - Jason Hirschhorn: Certo. Entón alcance é lixeiramente diferente en C. Como Vostede recorda, as claves definir o ámbito de variables. Entón, se se definiu dentro dun se condición, o que está dentro dun loop for, a variable só existe alí. En JavaScript, se unha variable é definida dentro dunha condición if - dentro dun loop - que vai existir para esta función, pero que non pode existir fóra esa función. Entón ámbito é un pouco máis flexible en JavaScript e PHP. Isto responde a pregunta? OK, algunha pregunta? Podemos facer catro minutos de preguntas, a continuación, imos ir para codificación. Audiencia: Podemos entrar en Ajax e falar sobre o que é iso? Jason Hirschhorn: Fala con Avi despois. Fixo esta pregunta antes. Audiencia: My bad. Jason Hirschhorn: Non se preocupe. Audiencia: O que é exactamente JSON? Jason Hirschhorn: Qué é JSON? Cal é a súa pregunta? Audiencia: Só moi rapidamente, a diferenza entre print e echo en PHP. Jason Hirschhorn: Por que non google a diferenza entre print e echo? Diferenza lixeira. Non que de un gran negocio. Pero ten que definitivamente google, e que vai che dar unha boa resposta. JSON, probablemente máis de un negocio. Soportes para JavaScript Object Notation. E cando vimos JSON a ser usado? Cando xa viu - por que aínda sabe a palabra JSON? Cando foi que viu? Audiencia: Cando estabamos a recibir presupostos de accións para financiamento. Jason Hirschhorn: Entón viu cando estaba comezando presupostos de accións para financiamento. E por que se ve iso? Audiencia: Cando estabamos recuperando toda a información de que veu nese formato. Jason Hirschhorn: Entón ía estar - si. Dalle. Audiencia: [inaudível] información dun obxecto? Jason Hirschhorn: Ambos os xuntos é a resposta que estamos a buscar. Quere que a información de estoutra páxina web. E espero que cando está obter esta información, sería presentado a vostede en algún tipo de formato estándar. Todo o mundo pode ser familiar con valores separados por comas. Pode exportar unha folla de cálculo de Excel ou calquera tipo de folla de cálculo como unha lista de valores separados por comas. E as comas dividir todo os diferentes campos. JavaScript Object Notation - JSON - é outro tipo de estándar disposición das cousas. E iso é moitas veces como nós recuperamos información dos nosos consultas Ajax. Polo tanto, neste caso, temos que dende o sitio web de Yahoo. Eles volven para as cousas nós nun obxecto JSON. E entón sabemos, porque é un defecto, o que se vai parecer. Así, pódese percorrer a matriz que é devolto para nós, a matriz de obxectos que son obtidos a nós. Nós probablemente non precisa saber as claves, pero eles xeralmente danlle documentación na páxina web cando está buscando algún JSON notación para eles. Do mesmo xeito, pode JSON codificar un obxecto. Polo tanto, hai unha función JSON resaltan codificación. E así pode aproveitar un obxecto que que creou, JSON codifica-lo, e pasalo para algo outra cousa, se quere. E JSON decodificar tamén existe a un propósito similar, ou para o obxectivo contrario. Audiencia: Non necesitamos saber de codificación para táboas de hash e intentos? Ou será que só precisa entender como son usados, conceptualmente? Jason Hirschhorn: Entón, levante a man se fixo unha táboa hash para p set 4 cunha lista de ligazóns. Ou p axuste 5. Entón iso foi unha gran maioría da xente. P axuste 5, 6, quen sabe. Hai moito tempo atrás. Así, a gran maioría dos que fixo táboas hash con listas de ligazóns. E por que esa é probablemente a máis enfoque común, e porque pasamos unha gran cantidade de tempo facendo listas de enlaces e de hash táboas, probablemente debe ser moi familiarizado coa forma de código unha táboa hash e unha lista de ligazóns. E se pensas que volta a este problema definido, el non era realmente tan duro como esperaba. E había moito menos código do que esperaba. Eu diría que ten que saber codificar unha táboa hash ou unha lista de enlace. Non que solicitaráselle, necesariamente, pero ten que certamente sabe diso. Ademais, se ollar a través de probas pasados, houbo unha gran cantidade de preguntas sobre como escribir funcións en listas de enlaces ou listas dobremente ligadas. Isto parece vir-se cada ano. Inserir botón dereito nunha lista de ligazóns, certo eliminar unha lista de ligazóns, non introducir para unha lista dobremente ligada, etcétera. Entón iso, me sinto moi cómodo dicindo que ten que saber diso. Para tentar, eu diría que ten que certamente sabe como funciona, e quizais dar un pseudocódigo para saber como para codifica-lo e configure-lo. Pero non sería o peor o mundo se non sabe como codifica-lo en C. Sería óptimo se sabía como código en C, pero eu creo que probablemente pseudocódigo para un intento sería ser o máis que precisa saber para un intento. Audiencia: crédito extra? Jason Hirschhorn: E mesmo con si entrar en árbores de busca binária, pode ten - e xa viu no pasado, fixemos unha morea de - vostede sabe como árbore binaria de busca funciona. Probablemente debe ser capaz de configure-la en código pseudo. Senón porque a gran maioría da xente non fixo iso no problema set, eu diría que é probablemente menos importante que vostede sabe como codificar e montou unha árbore así. Algunha pregunta? Ademais, podemos preguntar-lles por todo como pasamos por algúns problemas. OK, imos seguir adiante. Ir este slide de momento. Falando de árbores, que é o primeiro pregunta que eu teño para vostedes. Porque este é un problema. Eu diría que é moi probable que vai obter un problema como este no seu quiz pedíndolle para codificar algún tipo de inserción, eliminar, busca, para un tipo de estrutura de datos que xa vimos. Isto vén cada ano e pasamos moito tempo a segunda metade deste semestre repasando estes tipos de datos. Entón, agora, eu define un nó nunha árbore de busca binaria. E o que me gustaría que faga é dada unha árbore de busca binaria, que comeza neste raíz estrela no, enche o implementación da función a continuación, que pasa a ser unha función find. E facelo con e sen recursividade. Entón, quero que escriba dúas funcións. Unha facendo iso coa recursividade, unha facelo sen recursión. E non pense que o raíz será non nulo. Entón, nós estamos mirando para o número enteiro i en a árbore desde raíz, e necesitamos para escribir este recursivamente e de forma iterativa. É. Audiencia: Entón quere que a xente voltar true se atopalo, e falso se non atopalo. Jason Hirschhorn: Como vostede sabe? Como é que vostede sabe diso? Audiencia: Eu estaba pedindo o primeiro, pero eu estaba asumindo, porque di que a bool o inicio da función. Jason Hirschhorn: Certo. Di bool, para que eu non necesita nin dicirlle o que eu espero que volte porque di alí mesmo. Pero é iso mesmo. Retorne, verdadeiro ou falso. Polo tanto, antes de comezar, eu recomendado, se non está familiarizado con árbores de busca binária, deseño rápido unha foto del para conseguir o seu comprensión, certo. Isto tamén pode axudar ao escribir seu código e comprobar. Unha vez máis, tamén non ten que moito tempo no quiz para facer todas as cousas que pedimos que faga. Así, a escrita de código pseudo é moi útil. E nós xeralmente dan uns - O pseudocódigo é perfectamente correcto, isto é xeralmente 50% sobre un tema. Polo tanto, non é unha regra dura e rápida, pero se acaba de escribir pseudocódigo e é correcta, é xeralmente de 50%. Entón, eu sempre recomendo - se está presionado polo tempo, ou mesmo se está só tentando descubrir iso - comezando co pseudocódigo. E, finalmente, se puidese escribir este todo en C, que sería fantástico. Polo tanto, imos ter tres minutos para traballar neste programa. E entón nós estamos indo a escribir pseudocódigo para el só unha vez, e logo, imos codifica-lo de forma recursiva e logo, de forma iterativa. Se ten algunha dúbida, Sinto-se libre, levante a man. Feliz para pasear e respostas las antes de comezar como un grupo. Seguiremos, e nós imos Pseudocódigo a versión recursiva iso, e entón imos codifica-lo. Así, unha función recursiva precisa de dúas cousas. Isto pode ser unha pregunta que pode ser invitado. Precisa de dúas cousas. Quen pode levantar a man e dicir-me que as dúas cousas unha recursiva función precisa? Por definición, ten dúas cousas. Que son esas dúas cousas? Novas mans. Si, Alden. Audiencia: Entón eu non sei exactamente se esta é a terminoloxía, pero - Jason Hirschhorn: Estou feliz está levantando a súa man. Audiencia: Ela precisa dun caso base, e el que de un paso recursivo. Jason Hirschhorn: Perfecto. Ela precisa de un caso base e un paso recursiva. Entón, cal é o noso caso base aquí? Audiencia: F é igual a raíz é igual a cero. Sentímolo, só en pseudocódigo, se é nulo. Se a raíz é nulo. Jason Hirschhorn: Se a raíz é nulo. Isto é excelente. Ese é o noso caso base. Iso é o que imos comprobar o tempo. E no caso de base é a primeira cousa que facer. Se acertar o caso base, está feito. Agora necesitamos nosa chamada recursiva, e eu estar disposto a apostar que necesitamos dunha parella recursiva chámase aquí. Porque é unha árbore, e nós podería ir varias maneiras. Entón, se a raíz é nulo, estamos ben. O que propón? E agora eu vou comezar a chamar en vós, porque sei que vostedes todos saben diso. Pero Annie, o que debe a seguinte liña de ser? O que se atopou? O que imos facer? Audiencia: Se atopou? Jason Hirschhorn: Ou o que que debe ser - dáme o pseudocódigo ao liña onde o atopamos. Audiencia: Se i é igual a raíz i? Jason Hirschhorn: E entón que é o que facemos? Audiencia: Return verdade. Jason Hirschhorn: gran. Entón, se eu é que - Oh, son ambos chamados i. Isto queda confuso. Pero se eu é que eu voltar true. Isto é probablemente a próxima que temos que facer. Ten sentido. OK, agora nós non fixemos o noso recursiva chamar aínda, con todo, porque a recursiva chamada chamaría esa función de novo. Entón, o que debe ser a seguinte liña de pseudocódigo ser? Anna. Audiencia: A á esquerda. Jason Hirschhorn: Sexa específico, con todo. Esta é unha árbore de busca binaria, entón o que se comprobar o lado esquerdo implica? Audiencia: Entón nó - Sinto moito, raíz. E, a continuación, frecha cara á esquerda. No, no, me desculpe. Eu non vou lelo correctamente. É chamado de nó, non? Jason Hirschhorn: El será chamado raíz nesa función, pero de calquera forma. O lado esquerdo - É mesmo? Audiencia: Se non coincide i, entón imos chamar a función de novo? Jason Hirschhorn: Iso mesmo. Se iso non acontecer igual eu, imos para chamar a función de novo. Pero o lado da árbore que imos para chamar a función de novo? Audiencia: No lado esquerdo. Jason Hirschhorn: Non somos sempre vai chamalo á esquerda, se non igual a el. Audiencia: Oh, desculpe. Chamar á dereita. Jason Hirschhorn: Queremos saber en concreto, aínda que - lembre, nun árbore binaria de busca, todo para O lado esquerdo é menor. Todo á dereita banda é maior. Polo tanto, non é só - si, vai adiante. Audiencia: Se é menor do que eu, entón - si é á esquerda - Jason Hirschhorn: Entón, se ri é inferior a - polo que, se o noso número é menor do que eu, de que lado queremos ir? Audiencia: Queremos ir ao lado dereito. Jason Hirschhorn: Queremos ir - déixeme deseñar unha árbore rápida. Se este é 5, esta será de 3. Polo tanto, se ri é inferior a cinco, o que lado queremos ir? Audiencia: Sentímolo, o que? Jason Hirschhorn: O noso número é menor que o número que estamos mirando agora. Audiencia: Ah, entón queremos para ir ao lado esquerdo. É. Sentímolo. Jason Hirschhorn: Exactamente. Non te preocupes. Na procura binaria árbore, todo é inferior á esquerda, é maior a dereita. Polo tanto, se o noso número é menor que o i estamos comprobando - porque ve no no, que ten unha i - entón quere ir á esquerda. E este é un camiño fácil. Que a outra liña de pseudocódigo necesitamos escribir? Carlos? Audiencia: É o mesmo, só cambiar lo para un signo maior que e vaia á dereita. Jason Hirschhorn: Pode dicilo unha vez máis? Audiencia: O noso número é maior do que eu, desprácese á dereita. Jason Hirschhorn: Excelente traballo no pseudocódigo. Imos facelo no código real. E unha vez máis, este pseudocódigo vontade probablemente levalo, porque é correcto, o 50% sobre esta cuestión. Pero isto tamén se traduce un pseudocódigo a unha, esencialmente, en código. Por iso, imos facelo en C. Quen pode dar me a primeira liña de código? De feito, en primeiro lugar, antes de facer que, déixeme encostar - Audiencia: Eu teño unha pregunta. Por que fixo recuar o liña que eu che dei? Jason Hirschhorn: Por Eu non podía escribir. Eu non sei. Está certo. Esta liña debe estar por alí. OK, aquí é a nosa función. E déixeme encostar, tamén, nosa definición dun nodo. Qué acontece se non o fixésemos escribir typedef? Alguén sabe? Audiencia: Non sería compilar. Jason Hirschhorn: sería compilar, si. Audiencia: Sería só declarar un exemplo, no canto de facelo un novo o tipo que podería declarar múltiple casos de? Jason Hirschhorn: Entón non faría sabe - non sería só declarar un tipo. Aínda pode facer unha chea de nós. Audiencia: Pero non temos que escribir struct nodo de cada vez? Jason Hirschhorn: Iso mesmo. Vostede tería que escribir no struct de cada vez, no canto de só nodo. Pero con typedef, pode simplemente escribir no cada vez. OK, que non deu - si, Avica. Audiencia: Se a raíz é igual a igual nulo, retorna false. Jason Hirschhorn: Gran, e ese é o noso caso base. Seguinte liña de código. Alguén que non deu me unha liña de código aínda? É. Audiencia: arrow Root i coincide igual a i. A continuación, regresar true. Jason Hirschhorn: gran. Seguinte liña? É. Alguén máis? E entón podes ir a continuación. Audiencia: Else se frecha raíz i é inferior a i regreso función chamada raíz achado - Jason Hirschhorn: Sentímolo. Audiencia: administrador Volver achado apunta á esquerda coma i. Jason Hirschhorn: Entón, se ri é maior que a cousa na árbore, queremos ir á esquerda? Audiencia: Non, eu tiña que conmutada. Jason Hirschhorn: Cal? Audiencia: Non, si. Eu teño un pequeno que asinar alí. Jason Hirschhorn: Correcto, se ri é menos que o que está na raíz - nosa raíz actual - entón nós quere ir á esquerda. E o que é a última liña, vostede? Audiencia: Basicamente o mesmo, agás cambiar o maior ou igual a menos que e esquerda a dereita. Jason Hirschhorn: Excelente. Alguén ten algunha dúbida sobre iso? Por iso, algunhas outras cousas que faría ser correcta, é que pode ser a ltiff. Guess, tecnicamente, ningún destes realmente precisa tamén ser-ltiff. Ademais, hai probablemente só un caso aquí abaixo. Entón, iso é, probablemente, o seu último caso. Non necesita sequera de que-ltiff. Pero, probablemente, bo para escribir que, para ser claro. É. Audiencia: Entón non pensa que a proba - se cometer erros, por exemplo, na sintaxe - erros pequenos de sintaxe - como é que se comeza a tomar no cuestionario? Jason Hirschhorn: Xeralmente o cuestionario, pequeno erro de sintaxe ou pequeno erros de estilo non perder puntos. Entón, se se esqueceu de un punto e coma aquí, sería Aceptar. Se esqueceu de pechar este paréntese, que sería Aceptar. Erros de sintaxe enormes que alteran a significado funcional do seu código dramáticas, pode obter tirado puntos para. Ou xeralmente, só clasificación sobre se ou non o seu funcións de código, mesmo - non o seu deseño logo, e non o seu estilo. Imos agora codificar un iterativo versión do achado. Entón, que vai ser moi semellante, pero hai certamente será algunhas diferenzas fundamentais. Con todo, o noso pseudocódigo probablemente pode ir - aínda podemos ter unha liña do pseudocódigo e descubrir o que o A liña é neste caso. Así, nunha versión interactiva, o que que pensas, Julia, se ser a primeira liña? Audiencia: Máis unha vez, en booleana iterativo, ten que configurar un loop for, non? Jason Hirschhorn: Aceptar. Audiencia: Así como para, k, para x é igual a 0, x é inferior a i. Ou non, x é menor que o tamaño da árbore. Jason Hirschhorn: A árbore. Entón, nós realmente non sabemos o tamaño da árbore, e nós realmente non sei para cantas veces podemos ir, por iso, o que é un distinto tipo de loop que se pode mellor neste caso? Audiencia: Se máis? Jason Hirschhorn: Se outra persoa non pode ser unha malla. Así que é un tipo de loop podemos só ir ata nalgún caso se responde? Cal é o único outro tipo de loop en C, ademais de un loop? Audiencia: While. Jason Hirschhorn: Mentres, exactamente. En un loop while, non Debe saber como - un loop while e sexa loop pode facer o exactamente o mesmo, pero a cousa boa aproximadamente un loop while é que non precisamos saber o quão grande é a nosa árbore. Entón, nós estamos indo a ir ata o que? Audiencia: Ata que é igual a o tamaño da - Jason Hirschhorn: Ben, é moi semellante ao noso proceso recursivo. So - Audiencia: Mentres raíz i non é igual a i. Jason Hirschhorn: Isto é realmente moi próximos. Mentres raíz i - imos tratar. Eu non creo que [inaudível] onde i raíz non é igual a i. Podemos ter mudalo nun pouco pouco, pero iso parece que é moi bo, por agora. Entón, imos facelo. Ademais, lembre, non podemos asumir por cuestión. Non asumir que o raíz será non nulo. Entón, o que pensas que a moi primeiro que temos que facer é? Audiencia: Só ten que facer o mesmo cousa como antes. Se a raíz é igual a igual nulo, retorna false. Jason Hirschhorn: gran. Así, podería ser nulo. Por iso, queremos nos librar de la inmediatamente. E entón imos comprobar se raíz i non é igual a i. Entón, dicir que estamos buscando nesta árbore para 3, raíz i non é igual a i, agora estamos na nosa loop while. O que queremos facer? E, de novo, que vai ser moi semellante á nosa versión recursiva. É. Audiencia: Entón desexa iteración, ou siga indo para abaixo da árbore, sempre que a raíz non é igual a cero. Jason Hirschhorn: Mentres o raíz non é igual a nulo? Audiencia: O trazo raíz i non é igual a cero. Só a raíz, si. Como desde a raíz é non é igual a null. Jason Hirschhorn: Entón quere para cambiar isto en raíz non é igual a cero? Audiencia: Yeah. Audiencia: Podiamos combinar estes, non? Non necesitamos o caso, inicialmente. Jason Hirschhorn: OK, entón se non - se combina-los, entón nós imos facer mentres raíz non é igual a cero, e a raíz pasa a ser nulo no comezando, o que facemos aquí? Audiencia: Return false. Jason Hirschhorn: gran. Así, en ambos os sentidos, probablemente, tería funcionando. Esta é unha forma distinta, e esa combina-lo. Pero, de novo, se fixo unha ou outra forma, estamos non vai sacar deseño puntos no quiz. Pero iso parece ser bo. Así, mentres a raíz non é igual nula, o que é o primeiro que quere comprobar? Alguén máis? Null, cal é o primeiro? Audiencias: Si ri é inferior a - Oh, eu creo que, se xa verificou-se na raíz. Entón, se a frecha raíz i é igual a i - Jason Hirschhorn: Sentímolo? Audiencia: Se a frecha raíz i é igual é igual a i - Jason Hirschhorn: O que imos facer? Audiencia: Return verdade. Jason Hirschhorn: gran. E o que vén a continuación? Jeff, cal é a seguinte liña de código? Audiencia: Se i é inferior a frecha raíz i, entón é igual a raíz raíz frecha esquerda. Jason Hirschhorn: iguais Raíz frecha raíz esquerda. Entón, iso é probablemente o maior diferenza aquí neste iterativo versión oposta á versión recursiva. A versión recursiva chamar a función de novo. Estaremos a actualizar raíz cando chamamos a nova función. Aquí non estamos chamando unha nova función. Estamos simplemente actualizar raíz nesta función. Isto é excelente. E o que é a última liña de código? Si, Mario? Audiencia: iguais raíz Else frecha á dereita da raíz. Jason Hirschhorn: Sentímolo? Iguais Raíz: Público frecha á dereita da raíz. Jason Hirschhorn: Vostede podería tamén escribir algo como isto? Audiencia: Eu non teño idea. Jason Hirschhorn: Non pode. Non pode facer é igual a máis. OK, entón iso parece ser bo. Por que non imos só facelo para limpa-lo. Isto parece gran, e iso ía funcionar. E queremos saír. Se esquerdo raíz estaba seguro nulo ou raíz foi nula, chegariamos ata aquí. Administrador sería igual a nulo. Nós saír do noso loop, e nós return false. Así, cando saia do loop, nós voltar false. E, de novo, a un loop while foi perfecta aquí, porque nós non sabemos como grande é a nosa árbore. Tentamos escribir o loop for, pero nós entender que ten que descubrir como grande é antes de tempo. É. Audiencia: Se este non fose un arquivo binario árbore de busca, sería verdadeira matemáticas-y gravala-lo de forma iterativa, non? Como, se fose unha árbore, pero non necesariamente - por iso non foi todo máis pequeno, á esquerda, e todo máis, á dereita. Sería moi difícil iterado sobre iso, non? Nós teriamos que gardar o que era antes en na árbore e volver, e cousas así. Jason Hirschhorn: Se non fose un binario Busca árbore, se foi só unha árbore e as cousas non eran clasificadas como esta - e entender antes, cando Anna estaba axudando-nos que o que fai clasificada nos axuda moito - sería preciso, si, sempre gardar onde estabamos antes. Pero pode haber unha chea de onde estabamos previouslys. Non podería haber unha morea de nós pai. Probablemente a mellor forma de facelo sería ser a de continuar a empurrar as cousas para algúns tipo de pila ou cola. Vostede non ten que codificar esta por que é un problema difícil. Pero empurrar algunhas cousas para unha pila ou cola e logo, pop-los fora, e despois valora-los. E entón somente onde en realidade está poñendo os nós e a continuación, crear que, logo buscar por iso. Isto pode ser o mellor xeito de facelo. OK, calquera dúbida sobre este problema? Audiencia: Trátase de unha nota relacionada. Será que imos ter que comparar os tempos de execución para táboas de hash, binario árbores de busca, et cetera? Jason Hirschhorn: Probablemente. Entón, imos facelo moi rapidamente. Tempo de execución para a táboa de hash - cales son os outros? Árbore binaria? Audiencia: listas de enlaces. Jason Hirschhorn: OK, imos facer de inserción. Cal é o gran O de inserción nunha táboa hash? Cales son os presupostos está facendo? Audiencia: Está inserindo no ao principio da lista de enlace. Jason Hirschhorn: Probablemente o primeiro suposición é que non hai colisións. Se non hai colisións, entón o tempo de inserción é unha delas. Se hai colisións, e está facendo encadeamento separado e inserindo ao principio da lista de conexión, logo a inserción é tamén constante. Se está facendo unha táboa hash, pero dispoñer dun método distinto de tratar con colisións, o que é un método diferente? O que hai é un método diferente de tratar colisión nunha táboa hash? Audiencia: Programación lineal. Jason Hirschhorn: Programación lineal. Entón, imos continuar a buscar ao seguinte punto en aberto. Isto non é tempo de inserción constante. Pode ter que pasar por toda a táboa, de xeito que podería ser grande de n. É. Audiencia: No caso contrario só o fío? Jason Hirschhorn: Nós fixemos encadeamento separado. Esa foi a primeira. Iso é o que a lista de enlace. O nome fantasía é encadeamento separado. Podería ser calquera tipo de estrutura de lista pasar de facer na lista de enlace. Entón, de novo, a inserción nunha táboa hash podería ser de tempo constante. E como a inserción nunha cola de carretilla? Audiencia: Isto non é constante? Jason Hirschhorn: É tempo constante. Está só empurrando-o. Aceptar. Inclusión, cales foron os outros? Nun intento? Que é grande de inserción nun intento? Audiencia: Lonxitude é constante. Lonxitude das máis longas - a lonxitude da palabra está inserindo. Jason Hirschhorn: Sentímolo? Espera, entón o que eu escoito? Vostede dixo - o que foi que dixo? Cal foi a súa resposta, Marcus? Audiencias: A lonxitude da palabra está inserindo en caracteres, asumindo que é un intento personaxe. Jason Hirschhorn: OK, entón a lonxitude da palabra. Nós imos facer unha suposición de que é unha secuencia de caracteres. Vostede dixo algo diferente, con todo. Vostede dixo que a lonxitude da palabra máis longa. Audiencia: Isto é só constante, non? Jason Hirschhorn: Por que sexa constante? Audiencia: Como, se usa gran O notación, non varían segundo sobre o número de cousas que xa están no intento. Jason Hirschhorn: Entón, fariamos dicir que é tempo constante. É inserción constante, e iso é porque esta idea - dicir que temos unha palabra que é de 45 anos, ou unha palabra que é o 60, que ten un número constante. E que sería só ser inserido en tempo constante. Na práctica, porén, non sería, obviamente, acontecen en unha milésima de segundo, por exemplo. Pero diriamos gran S é constante para un intento. E iso é un dos seus maiores vantaxes. E como a inserción nunha lista de ligazóns? Só un xenérico, lista de ligazóns ordenados? É. Audiencia: eu tiña unha pregunta. No exame, que nunca nos a preguntar tempo de inserción que é catro etapas, ou algo así? Ou é só - cando di que tempo de inserción é un, iso só significa constante de tempo? Jason Hirschhorn: Si, eles ían Sempre preguntar, é grande de n? Big O rexistro de n? N ao cadrado constante. Estas son realmente o único que precisa saber. E como a inserción no lista de ligazóns ordenados? Audiencia: eu tiña unha pregunta - unha pregunta - Jason Hirschhorn: Cal é a resposta a esta pregunta, aínda que? Audiencia: Espere, o que lle pregunta? Jason Hirschhorn: Qué é grande de inserción nunha lista de enlaces ordenados? Audiencia: One? Non espera, non espera, n. Jason Hirschhorn: N. Alén a lista de enlace. E cal foi a súa pregunta? Audiencia: Entón escribiría o de k ou o de 1 a - Jason Hirschhorn: Ah. Eu ía escribir o de 1, probablemente. Houbo outra estrutura de datos que sería bo. Árbore, árbore binaria de busca. ¿Que hai de inserción nunha árbore binaria de procura? Audiencia: Login. Jason Hirschhorn: Entón, cal é o peor caso nunha árbore de busca binaria? Entón, se ocorrer para comezar ás 5, e cada número é superior a 5, a continuación, temos 5, 7, 9, 11, etcétera. Neste caso, é basicamente unha ligazón lista, e necesitamos introducir todos o camiño ao final. Por iso, é grande de n. Isto podería ser o noso peor caso nunha árbore de busca binaria. Obviamente, nunca ía construír unha árbore de busca binaria con 5 no medio, sabendo que 5 ser o menor número. Pero pode ser, se está comezando de cero. Calquera dúbida sobre iso antes de pasar a outra pregunta? Esa foi unha boa pregunta. Gustaríame saber gran O de - Audiencia: E sobre a investigación para aqueles catro? Jason Hirschhorn: definitiva nós que busca e clasificación. Fixemos todo algoritmos, certo. Espere, é que para Quiz 1? Foi que cubría - se xa ten que pregunta sobre Proba 1? A gran O tempo de execución de busca binaria, tipo de inserción, bubble sort? Audiencia: Yeah. Jason Hirschhorn: Se tivese que pregunta sobre Proba 0, as probabilidades son que non vai obter exactamente a mesma pregunta en proba 1. Pode ser aínda bo saber deses. Afortunadamente ten que saber gh xa. Pero outros tempos de execución logarítmicas son, probabelmente, bo saber. Cousas que non foron abordados no quiz 0. Como todos estes operadores estes tipos de datos abstractos. OK, imos seguir adiante. Este debe ser moi rápido. E esta é unha nova linguaxe que non ten realmente codificado en antes. Esta é unha pregunta pregunta de código en PHP. Entón, considerada a matriz PHP continuación. Fai PHP códigos e / ou HTML tal que xera unha táboa de dúas columnas co TFS nomes e casas. Nunca fixo iso antes, este problema específico. Pero iso debe ser moi familiar para o que fixo en conxunto de problemas 7. Entón, eu estaría disposto a apostar que vai ser pediu codificar algo en PHP que é moi similar ao que se fixo en conxunto de problemas 7. En primeiro lugar, array non é tan específico. Cal é o tipo de matriz é isto? Audiencia: asociativo. Jason Hirschhorn: É unha matriz asociativa. E cal é a diferenza entre un matriz asociativa e un obxecto? Audiencia: unha matriz de obxecto ten un índice de números enteiros, e unha matriz asociativa é un índice dunha cadea, ou algo parecido. Jason Hirschhorn: Entón, unha serie de obxectos terían índices de enteiros, pero un obxecto ten campos. Ten eses nomes campos como nome, casa, estudante. Vostede ten unha idea? Audiencia: Ben, asociativo matriz é en PHP, non? E obxecto está en JavaScript? Jason Hirschhorn: Honestamente, non hai ningunha diferenza real entre os dous. Ambos teñen secuencias como as claves, e pode ten basicamente calquera cousa como o valor. Diferentes linguaxes chamar un cousa matriz asociativa, unha cousa un obxecto. Entón, honestamente, non existe unha verdadeira diferenza, pero non hai dúbida algunha diferenzas sintácticas entre os dous. É. Audiencia: Entón é obxecto tamén codificado baixo o capó como unha táboa hash, entón? Jason Hirschhorn: O que fai É dicir, codificado baixo o capo? Audiencia: Fomos informados de que asociativa disposición era tecnicamente un Táboa de Hash. Entón, é obxecto tamén tecnicamente unha táboa hash? Jason Hirschhorn: Eu non vou para responder a esta pregunta. Eu vou volver a vostede sobre iso. Pero eu non creo que de calquera daqueles así. Pero, en calquera caso, unha matriz asociativa e obxecto, xeralmente, as persoas empregan os termos como sinónimos. Neste caso, a parte legal é que pode usar as teclas. Cordas como claves, en vez de só números simples. Entón, eu teño falado sobre iso por algún tempo. Afortunadamente, algunhas persoas teñen chegado comezou con iso. Nós imos escribir algún PHP e HTML código, de xeito que temos unha de dúas columnas táboa cos nomes e as casas do TFS. OK, eu tamén quere unha cabeceira liña nesta táboa. Entón, eu estou indo a ir directo para iso. Estamos indo para o arquivo, novo, e nós imos - Aceptar. ¿Como iniciar unha mesa? Cal é a etiqueta, Michael, para iniciar unha mesa? Audiencia: Table. Jason Hirschhorn: Table. E se eu abrir unha etiqueta, o que máis eu teño? Audiencia: Unha cabeza? Ou, eu creo, de clase. Jason Hirschhorn: Entón, me desculpe. Supoñamos que xa escribín doctab, HTML, todas esas cousas. Pero se eu abrir esta etiqueta da táboa, o que máis eu teño para escribir? para validar HTML? Audiencia: Peche lo. Jason Hirschhorn: Peche a etiqueta. ¿Como escribir unha etiqueta close-mesa? Audiencia: Dot cortar mesa. Jason Hirschhorn: Corte mesa, xenial. Probablemente ten sentido escribir tanto dos xuntos porque ten que facelo. OK, se eu queira unha liña de cabeceira, como facer Eu escriba unha liña de cabeceira con títulos? Audiencia: É menos de 10 horas preto - TR, si. Jason Hirschhorn: TR? Audiencia: Entón mesmo, a barra, si. Jason Hirschhorn: OK, e dáme dúas columnas. Audiencia: T D? Jason Hirschhorn: Aceptar. Quero dúas columnas. Tanto me dá dúas columnas? Cantas columnas é isto? Unha. Entón, imos copiar e pegar este. Entón, en realidade, o cuestionario, todo este código que temos escrito ata agora foi realmente dado a ti. Pero ten que, probablemente, aínda sabe como escribilo. É. Audiencia: A súa casa sitúase entre os dous. Jason Hirschhorn: Lanza. Debe ir alí, non? Boa chamada. Entón, de novo, todo este código é realmente dada a vostede a proba real. Pero é divertido gravala-lo, e debe saber como escribilo. Polo tanto, este é o lugar onde ten que para comezar o seu código. O que necesitamos para escribir aquí? Sentímolo, eu teño cambiar o nome deste ficheiro. Por iso, el foi salvo nun arquivo HTML., non nun ficheiro PHP .. Esas cousas non significaría nada nun ficheiro PHP .. Entón, nós estamos nun arquivo HTML .. Cal é o primeiro Necesito escribir? Quero poñer un pouco de PHP código nunha páxina HTML. Audiencia: PHP, como outra cenoria e punto de interrogación PHP, non? Jason Hirschhorn: gran. E como fago para acabar con iso? Audiencia: Con un punto de interrogação. Jason Hirschhorn: Isto é óptimo. Esta é o primeiro que eu teño, se eu queira poñer algún código PHP aquí. Audiencia:. Penso PHP arquivo pode levar HTML. Jason Hirschhorn: Yeah. Un arquivo PHP. Pode levar moito HTML e amosar. Ese foi o meu mal. Eu estaba só tentando imitar o que era o quiz. OK, desculpe a confundir-lo. Si, practice.HTML. Agora imos poñer algún código PHP dentro Que é a primeira liña de Código PHP que debo escribir? Vou pasar por esa matriz e facelo nunha táboa. É. Audiencia: Pode usar un loop for H ou un loop for. Jason Hirschhorn: OK, o que quere usar? Audiencia: Gustaríame usar un loop for. Para, a continuación, fai sinal de dólar i é igual a 0 punto e coma dólar asinar i inferior a 2. E entón coma i dólar asinar i plus plus. Jason Hirschhorn: Como facer sabe usar un 2? Audiencia: Por había dous arrays asociativos dentro do maior array asociativo. Jason Hirschhorn: Entón, a cousa máis importante do non unha matriz asociada. A gran cousa é só unha matriz normal. Pero está certo, hai dúas matrices asociativas dentro da nosa matriz maior. É por iso que usa dous. Eu me sinto incómodo asumindo que son dous, entón o que é unha maneira de escribir iso sen asumir que son 2? Audiencia: [inaudível]? Jason Hirschhorn: OK, como escribe isto? Audiencia: Foreach cifrão TFS ou como sinal de dólar tf. Jason Hirschhorn: OK, entón para cada TFS como TFS, quero agora unha vez máis, ter a miña mesa. Entón, quen me pode dar o seguinte liña de código? Audiencia: Imprimir e logo, en citas, a fin do soporte tr soporte, citas final. Parénteses End, punto e coma. Jason Hirschhorn: OK, e que é o que vai facer? Audiencia: Vai dicir, nova liña. Vai poñer o marca para unha nova liña. Jason Hirschhorn: Correcto, esta PHP, como falamos anteriormente - este PHP será avaliado, e, a continuación, que vai imprimir a este ficheiro dun mesa de remolque, e logo, que HTML será avaliada. Estamos só copiando este HTML tivemos ata aquí. É. Audiencia: [inaudível]? Jason Hirschhorn: Sentímolo? É aquí mesmo. Outono 2012. Non mire para as respostas, imos solucionar isto xuntos. Entón, nós imprimir liña da táboa. Entón, probablemente está no o balance das cousas. Cal é a seguinte liña de código que necesitamos para escribir? Assam, dáme a seguinte liña de código. Audiencia: Debe o nome do tf. Tf soportes aspa aberta nomear corchetes pechados. Jason Hirschhorn: Déame o seu nome. Audiencia: Debe imprimir iso. [Voces interpondo] Jason Hirschhorn: OK, como fago para imprimir lo? [Voces interpondo] Jason Hirschhorn: Estou sentindo falta algo agora. O que eu estou ausente? Audiencia: Debe dun sinal de dólar. Jason Hirschhorn: Qué máis eu estou ausente? Todos nós xa impreso ata agora é o tr. Audiencia: Peche a tr despois. Jason Hirschhorn: Entón, necesitamos para pechar a tr despois. Quen ve o que falta na liña 16? Si, Anna. Audiencia: Debe abrir un td e chaves. Jason Hirschhorn: E onde é que imos poñer chaves? Audiencia: En torno ao nome tf. Jason Hirschhorn: Gustoulle? Audiencia: Yeah. E, a continuación, pechar o td. Jason Hirschhorn: Así? Audiencia: Debe de comiñas dobres marcas xunto das claves? Jason Hirschhorn: Aquí? Non, non. Entón, iso é correcto. É. Audiencia: Entón, a diferenza entre o que e encatenating con puntos, se usa puntos, ten que ter o comiñas dobres, logo un punto, a continuación, o punto - Jason Hirschhorn: Correcto. Entón está dicindo que hai unha final forma de escribir este como aquel. Que o operador de concatenación en JavaScript? Audiencia: Un sinal de máis. Esqueceu de poñer o rizado cinta de volta. Jason Hirschhorn: gran. E hai máis dunha liña de código falta. Quen me pode dar a última liña de código que falta? Audiencia: Só a exacta mesmo, só coa casa en vez do nome. Grande Jason Hirschhorn: gran. E a súa sintaxe é exactamente certo para facer as cousas nunha matriz asociada. Así, a proba real, é realmente deu ata aquí. Polo tanto, este código foi dado a ti. Todo o que tiña para escribir eran estes catro liñas e lembre-se pechar a etiqueta mesa. Vostedes realmente fixeron todo isto e moito máis. É. Audiencia: Entón sería funcionalmente mesmo se só tiña que todo en unha gran chamada de impresión, non? E entón só concatenados lo, etcétera? Jason Hirschhorn: Así? Audiencia: Yeah. El só non quedaría ben se fose ollalo cando está inspecionar o elemento na súa páxina web, non? Jason Hirschhorn: Concordo. Se eu cargueime esta páxina, eu sería poder ver o código PHP, sempre? Audiencia: Non Jason Hirschhorn: Non E de feito, eu non faría. Audiencia: Este non é HTML, non? Entón pode ser capaz de - Jason Hirschhorn: Entón este sería PHP ser avaliada lado do servidor. PHP é sempre valorada lado do servidor, de xeito nunca é capaz de ver o código PHP. Audiencia: Pero sería capaz de ver o resultado das impresións. Jason Hirschhorn: Certo. E honestamente, non pode poñer todo na liña. Pode formato-lo moi ben para ti, ou pode poñelas nunha liña. Escura. Pero si, bo punto. Audiencia: Como é que alí está non destacar texto para calquera dos comandos PHP? Porque eu lembro de ver iso. Jason Hirschhorn: Por un Ficheiro. HTML aquí na parte superior. Alí vai. Audiencia: Se fixésemos o método de inicio coa loops, á dereita, se nós quería acceder a un TFS, queremos facer soporte TFS 0 soporte, logo [Inaudível]? Jason Hirschhorn: Vostede faría - entón está dicindo para o loop, ten faría en dólar sinal soporte TFS 1 ou i, certo. Ou cifrão eu pechar corchete e logo, soporte cadrado comiñas, si. OK, excelente. Temos unha unha rápida. Sete minutos, entón eu quero para pasar por enriba deste. Este é outro exemplo. Estamos agora totalmente outra lingua. Temos un código HTML. É unha especie de pequena na pantalla, pero Eu quero que mire por ela realmente rapidamente, e alguén me pode dicir, se eu fose para cargar esta páxina web, o que eu vería? Describe todo sobre esta páxina. Noé? O que eu vexo? Audiencia: Code ao final fronte Google cunha idea de texto e un botón enviar. Jason Hirschhorn: E o O botón de dicir? Audiencia: Enviar. Oh, investigación. Sinto moito. Jason Hirschhorn: Diría procura. Lembre, o nome. O que queremos usar o nome de? Este atributo nome, o que se que serve? [Voces interpondo] Audiencia: É o seu nome para cando é premendo? Jason Hirschhorn: Isto podería ser. Pero o que xeralmente vemos - por que estamos dando esta fila nome? Por que vemos isto? É. Audiencia: Non que se fan índice da variable de super global? Jason Hirschhorn: Si, xeralmente cando esta forma ía presentar, a continuación, onde sería someterse a este? Cal páxina? Noé, o que sería esta páxina Facebook? Audiencia: Eu non estou seguro. Jason Hirschhorn: Onde podería podemos atopalo? Onde se atopa o que páxina que se somete a? Que liña de código? Audiencia: acción Form. Jason Hirschhorn: Exactamente. Acción. Por iso, sométese á páxina de busca. Busca barra invertida. Entón, iso é correcto. Cal é o método? Audiencia: Recuperar. Jason Hirschhorn: Recuperar. Exactamente. Por iso, le isto. Este será un formulario. Está absolutamente certo. Dúas cousas sobre o xeito, o título de páxina eo principio sería Google. Entón, aquí están dúas preguntas que ten que ser capaz de responder sobre esta páxina. Se este HTML vive neste sitio web e o usuario inserir erro para este texto campo da dereita aquí, o URL será o usuario atopa-se enriba enviar o formulario? Entón temos isto aquí. Vou volver á Nesta páxina, con todo. Vou escribir esta primeira parte. Todos poden ver aquí? OK, Mario, pensas que sabe? Cal páxina? Audiencia: buscar barra invertida. Jason Hirschhorn: Vou para descender aquí. OK, barra invertida investigación pregunta marca q é igual a erro. Alguén ten unha suxestión diferente? É. Entón, como imos conseguir isto? Ben, xa vimos que antes. E veu con esta antes. Vostede estaba certo, Noah, que o acción está nos dicindo o que Páxina imos. Sabemos tamén que o método. Estamos facendo get. E a diferenza entre get e post que obter aparece na URL e pos non. Entón, se eu escribín poste dereito alí no método, o que sería diferente? Audiencia: sería só ser procura barra. Jason Hirschhorn: sería só ser barra de procura. Nada aquí ía ocorrer. Senón porque é un comeza, a URL preséntase como segue. Primeiro imos ver un punto de interrogación e vemos o nome eo valor. Dicir que había un campo de texto de outro e Eu dei-lle un nome de r e eu introducir un valor, lagarta. O que sería iso agora parece? Eu teño un campo de texto máis, dou un Nome do r e un valor de lagarta. Audiencia: Tras bar que tería a lagarta e comercial. Jason Hirschhorn: Isto é non ampersand. Audiencia: Ou só o que quere o e símbolo. Jason Hirschhorn: Si, non. Vostede estaba certo, eu estaba mal. Isto é como un g. Audiencia: Caterpillar. r é igual a lagarta, Sentímolo. Jason Hirschhorn: Existe non r aí? Audiencia: Non, non é. Jason Hirschhorn: Falaremos sobre iso despois da aula. Isto é exactamente correcto. Así, o que está correcto. E entón pode que moitos deles, e todos eles serían concatenados conxuntamente co que e. Entón, iso é correcto. Hai máis unha cuestión. Debuxe DON deste HTML, comezando con documento. Podemos facelo en dous minutos. Nós imos facelo aquí. Eu vou volver a esta páxina. OK, imos comezar co documento. Cal é o próximo? Entón, cando está lendo a través de - Audiencia: HTML. Jason Hirschhorn: HTML é o seguinte. Estamos indo a ir tag por tag. O que hai tras HTML? Audiencia: Head. Jason Hirschhorn: Head. O que está detrás de cabeza? Audiencia: Título. Jason Hirschhorn: Título. E título ten un valor de Google, pero eu non vou escribir que en por agora. OK, onde fai corpo ir? Audiencia: Tamén saíndo do HTML. Jason Hirschhorn: Exactamente. Corpo sae de aquí. Será que todo o mundo ver por ese é o caso? Probablemente debe ser capaz de descubrir iso, tamén, aínda que eu non tiña este retroceso agradable. O retroceso tipo de dalo afastado, pero podes ver que a etiqueta cabeza ten foi pechado, o que significa que, probablemente, non pode ir por aquí. Necesitamos volverse para o que Foi pouco antes da cabeza tag, ou baixo que. Estamos aínda coa tag cabeza. E baixo o corpo vai formulario. En forma, existen dúas entradas. Aceptar. Isto é todo o que eu teño. Proba 1 é mañá. Estou tan animado para vós. Vai ser unha explosión. Se ten - Audiencia: [aplausos] Jason Hirschhorn: Oh pare, pare. Pero non, eu estou a xogar. Se ten algunha dúbida, non tras a sección, eu vou estar fóra. Se ten algunha dúbida, esta noite, non dubide en chamar, correo electrónico, Gchat, transporte me pomba. Boa sorte mañá. Teña un marabilloso salto de Acción de Grazas, se eu non velo antes diso. E eu vou te ver de Acción de Grazas o martes ao noso último partido sección nunca. Audiencia: [inaudível]. Jason Hirschhorn: gran. OK, eu vou ver vostedes no próximo semana, ou en dúas semanas. , E boa sorte mañá.