[00:00:02] [Jouer de la musique] HANNAH: Salut, tout le monde. Merci les gars tellement pour sortir dans le temps dégoûtant pour une quizz session d'examen. Comme vous le savez les gars, quizz on est ce mercredi. Donc, nous allons aller à travers un tas de sujets. DAVIN: Hey, je peux dire quelque chose de réel rapide? HANNAH: Ouais, ça va Davin à-dire quelque chose de réel rapide. DAVIN: Désolé. Juste réel rapide, si vous avez des questions sur le questionnaire, vous pouvez aller en ligne. Aller à 2014 quizz une, sur le quiz. Il est obtenu à propos de la logistique où aller, quand y aller. Si vous êtes inscrit simultanément, nous sommes va avoir un quiz de maquillage à 05h30. Ou si vous me avez envoyé un problème, vous avez une autre question. Mais 05:30 est le maquillage temps mercredi. Mais si vous avez des questions, questions générales, en ligne a toute la logistique. Il ya donc d'abord vérifier. [00:00:47] HANNAH: Awesome. Alors, voici la grande liste de sujets que nous allons passer par aujourd'hui. Je vais couvrir l'ensemble de la C des trucs, qui est que la première colonne. Ainsi, le C choses que nous couverte après quizz zéro. A partir d'une liste chaînée, qui inclut des pointeurs. [00:01:05] Très bien, alors nous avons vu ce à la dernière session d'examen, Je vais donc passer par ce est un peu plus rapide. Juste levez la main si vous me voulez ralentir ou parler de quelque chose plus loin. Mais nous utilisons des listes chaînées parce nous avons commencé en C avec des tableaux. Et les tableaux sont grands, mais le problème, ce est qu'ils ont une taille fixe. Les listes chaînées nous permettent de créer dimensionnés dynamiquement les structures de données. [00:01:28] Et nous avons nos opérations de base, insérer, supprimer, et la recherche. Et nous pouvons faire insert dans pire des cas de temps constant si nous suffit de le mettre dès le début. Suppression et de consultation, le pire oh grand cas de n temps. Encore une fois, juste pour retourner à travers ces images, Je sais que nous avons vu ces derniers temps, mais nous voulez garder une trace de notre liste chaînée en gardant la trace de la tête de notre liste chaînée. Parce que nous savons que chacun de nos noeuds va juste pour pointer vers le noeud suivant dans notre liste chaînée. [00:01:58] Ce est ainsi que nous suivons. Même si ce ne sont pas morceaux continues de mémoire, nous pouvons les trouver simplement en suivant les différentes flèches. Voici notre structure pour un nœud de liste chaînée. Nous avons vu la dernière fois. Nous avons notre noeud struct. Et il a deux propriétés. Numéro un, la réelle valeur que nous voulons stocker. Dans ce cas, ce est un nombre entier. Il pourrait être une chaîne, il pourrait un char, ce que vous voulez. Et puis, nous devons garder une trace de le noeud suivant dans notre liste chaînée. Donc cela va être un pointeur vers le nœud suivant. Si vous ne avez fait que recherche, comme je l'ai dit avant, vous auriez à suivre vos flèches vers le bas. Insertion, vous garder la trace d'où le reste de votre liste est. Et vous souhaitez rediriger la tête pour pointer vers notre nouvel élément, qui dans ce cas est une, puis on va pointer pour le reste de la liste chaînée. Encore une fois, je sais que ce est un peu peu d'une répétition du test zéro. Nous devons donc être très prudent sur l'ordre dans lequel on faire ces pointages de sorte que nous ne le faisons pas perdre la trace de l'arrière de la liste. OK, avec des questions tout seuls listes liée? Impressionnant, OK, cool. [00:03:06] Alors maintenant, nous allons aller sur quelque chose juste un peu plus compliqué, doublement chaînée listes. Donc, en plus de garder piste du noeud suivant, nous voulons aussi garder la trace du noeud précédent. Et cela nous permet de, si nous sommes à un certain moment dans notre liste chaînée, non seulement aller de l'avant, mais itérer aussi vers l'arrière. Parce que, comme nous avons vu dans une liste chaînée, si nous étions à un noeud, et tout d'un coup, nous avons décidé, en fait, je veux aller à le droit de noeud devant moi, vous auriez à aller le chemin du retour à la tête et itérer jusqu'à ce que vous avez trouvé le nœud que vous recherchez. [00:03:35] Donc, cela rend les choses un peu plus facile que nous sommes essayer de parcourir grâce à notre liste chaînée. Mais elle nous oblige à garder une trace de l'un plus pointeur, donc une plus noeud étoiles. Très bien, alors voici la partie la plus amusante. Nous allons pratiquer la mise en œuvre retirer des listes doublement chaînées. Donc, ce est quelque chose qui est jeu totalement équitable pour le quiz. Il a montré sur des quiz dernières. Donc certainement être préparé pour coder un peu en C. Ne oubliez pas que, avec tout ce plaisir PHP et JavaScript, nous avons encore de se rappeler C. Donc faire rafraîchir que si vous vous sentez rouillé. [00:04:12] Très bien, nous allons voir si nous pouvons le faire. OK, cool. Nous allons donc essayer pour modifier le droit ici, et je espère que cela se passe comme prévu. Tous droits, personne ne veut me donner une suggestion quant à la façon dont je devrais commencer? La seule hypothèse que je suis décision est que je ai déjà ont une structure définie, le celui que je ai montré sur la dernière page, sur la dernière diapositive. Et je stocker la tête de mon liée Liste dans certaines pointeur appelé liste. Quelqu'un veut-il me lancez? [00:04:42] AUDIENCE: Pouvez-vous créer un nouveau noeud à appeler dans la liste? [00:04:45] HANNAH: Awesome, afin nous allons créer un nouveau noeud à ramper à travers la liste. J'aime ça. Je vais l'appeler pointeur si ce est OK. Et où faut-il commencer à l'origine? [00:04:57] AUDIENCE: Probablement au la tête de la liste. HANNAH: Belle. Nous voulons commencer à la tête, qui Je ai dit va être stocké dans la liste. Impressionnant. Jusqu'ici, tout va bien. Et maintenant, notre objectif est de parcourir la liste jusqu'à ce qu'on trouve le nœud avec valeur n que nous voulons supprimer. D'ACCORD? [00:05:13] Donc, est maintenant la partie où nous voulons pour parcourir. Quelqu'un peut-il suggérer une moyen d'itérer à travers? [00:05:19] PUBLIC: Une boucle. [00:05:20] HANNAH: Une boucle. J'aime cela. Plus précisément, nous pouvons essayer une boucle while. OK, et nous savons que nous avons atteint la fin de notre liste lorsque ce? AUDIENCE: Lorsque pointeur est nul. HANNAH: Lorsque pointeur est nul. Belle, je l'aime. OK, cool. Donc désolé si ma sélection est accolade type de tomber hors de l'écran. Nous avons apporté de nouveau. OK, cool. Quelle est la prochaine? [00:05:48] Donc, nous savons que nous voulons supprimer le noeud qui a une valeur n. Donc, nous allons trouver le cas où nous trouvons en fait notre noeud. Alors, comment aurais-je vérifier cela? Je dirais simplement si le pointeur, puis si je vouloir obtenir la valeur de pointeur, Je ne flèche N, est égal à n, le paramètre que nous avons donné à cette fonction, le noeud que nous voulons effectivement supprimer. Des questions jusqu'à ici? Bien. OK, alors maintenant nous allons tracer un portrait rapide sur la carte afin de visualiser cela. [00:06:24] Donc, disons il ya notre belle noeud. Et il a une valeur, je vais juste dire quatre. Et il pointe à la prochaine noeud dans notre liste chaînée. Et il n'y a rien devant elle. Donc, nous avons notre précédente pointant à rien. Dans ce cas, nous signalons arrière. OK, juste la mise en place de mon liste chaînée ici. Et nous avons une liste qui pointe à cette structure pour commencer. Je attire un de plus pour Par souci d'exhaustivité. D'ACCORD. Je insiste sur ce point en avant. Et je signale que l'un retour. Oops, désolé. Ouais, eu cette arrière. Faites-le à nouveau. OK, là nous allons. Tous droits, il a obtenu. OK, voici notre photo. [00:07:21] OK, donc nous voulons considérer deux cas. Le premier cas est si le noeud nous voulons supprimer est au tout début de notre liste. Et puis, le second cas que nous voulons à considérer est si ce est ne importe où ailleurs. Je comprends que ce est un tout dessin désordre avec tout mon effacement, mais je espère que nous allons essayer de que ce soit clair avec du code. [00:07:40] OK, donc nous allons couvrir le cas où nous avons trouvé notre noeud, et ce est à tout le commencer de notre liste chaînée. Quiconque me donner un suggestion ici à ce que Je dois faire pour effacer réellement notre noeud? Ce est un peu délicat. D'ACCORD? [00:07:56] AUDIENCE: Vous devez prendre la noeud qui serait avant et le faire pointer sur la celle qui serait après, et de prendre le nœud qui serait après et de faire pointer vers le nœud devant elle. HANNAH: Exactement. OK, donc ce est le cas where-- nous avons deux cas. Nous avons le cas où le noeud que nous sommes à la recherche est l'avant de la liste. OK, puis le cas que vous décrit est contraire, non? Ce est quelque part ailleurs dans la liste. Donc, vous l'avez dit, nous devons regarder le noeud précédent, et de faire le nœud précédent pointer sur le noeud suivant. Donc, disons que nous sommes essayer de prendre sur cinq dans mon dessin très salissant ici. Nous voulons faire en sorte que Quatre points maintenant à six. Points suivants de quatre à six. Et les points précédents de six à quatre. Ce est notre but ici, non? Ce est ce que je pense que vous venez de dire là-bas. [00:08:56] OK, alors allons-y que première pièce. Faisons le avoir la pointeur précédent précédent. Donc de quatre prochaine devrait pointer vers quoi? Justement, dans ce cas, six. Donc, nous devrions dire pointeur, à côté. D'ACCORD? Bien. Alors débarrassons de cette image laide et essayer de dessiner un peu plus joli. Nous avons notre tête de liste. Et qui pointe vers le premier noeud notre liste chaînée, qui nous dit, ce est quatre. Voici notre deuxième noeud, cinq. Et notre troisième noeud, six. Juste essayer de dessiner exactement la même image, juste un peu plus propre. OK, donc de quatre prochaines des points à l'origine à cinq. Points suivants de cinq à six. Points précédents de six à cinq. Et les points précédents de cinq à quatre. Tellement plus agréable! OK, cool. [00:10:04] Alors maintenant, ce que nous avons fait tout ici, cette ligne de code, qui dit pointeur précédente prochaine, alors qu'est-ce que cela signifie? Cela signifie que si nous cherchons à cinq, aller à la nœud précédent, et ce est la prochaine étape devrait maintenant Point à cinq Next. Donc, essentiellement, ce que ce est faire Ce est l'effacement est cette flèche et d'en faire sauter à droite sur cinq. Est-ce clair? Je sais que cela peut être un peu sommaire. Je vois des hochements de tête. C'est bon. OK, cool. Maintenant, quelle est la prochaine étape? [00:10:39] Je ai réinitialiser la prochaine. Maintenant, quel autre flèche dois-je changer? Celui-ci ici. Six de précédente. Nous ne voulons pas de six précédente au point plus à cinq. Nous voulons qu'il pointe à quatre. Est-ce que l'image de sens? Alors maintenant, nous pouvons effectivement prendre cinq sur. Alors soyons ce morceau. Que dois-je faire avant réinitialiser six de précédente à quatre? Toutes les idées là-bas? [00:11:14] AUDIENCE: Libérer le noeud entre les en le définissant à null? HANNAH: Cool. Certainement, notre objectif final est va être de libérer le noeud. Donc, nous pouvons le faire ici. Pointeur gratuit. Absolument. Mais même avant cela, nous allons just-- notre droit de buts ici, ce est de mettre pointeur à côté précédente égale à pointeur précédente. Je sais que ce est se recouverte. OK, nous allons take-- cool. Tout le monde peut voir cette ligne de fond? Ou est-ce superbe petit? [00:11:50] Donc, avant de nous exécutons cette ligne ici, nous voulons pour se assurer que pointeur est à côté pas nulle. Parce que si le pointeur est à côté null, ce type d'erreur vais-je recevoir lorsque je essaie de référence à un pointeur nul? AUDIENCE: Seg faute. HANNAH: Un défaut de seg, belle. OK, si ce ne est pas null, alors nous pouvons réinitialiser. Et nous avons à nouveau six points à quatre. Questions jusqu'à ce point? Oui? [00:12:17] AUDIENCE: Dans votre première if, avez-vous signifie d'avoir la flèche prochaine, ou [inaudible]? HANNAH: Je voulais dire pointeur flèche n. Donc, fondamentalement, ce que je essaie de faire ce est de dire, le noeud courant que je suis itérer, le noeud courant Je regarde, je stocker dans pointeur. Et je veux savoir pointeur de valeur, qui dans ce cas est n. Et je veux voir, ce est le nœud que je suis à la recherche pour le nœud que je vise à supprimer? Donc, ce est pourquoi nous avons ici pointeur n. [00:12:47] Auditoire: Alors, la flèche va à n, vous définissez la valeur et de le stocker dans un nœud appelé n? [00:12:55] HANNAH: Donc, ce est comme si je suis passer par cette liste chaînée et pointant à cinq. Si je veux obtenir cette valeur, si Je veux obtenir ce nombre, 5, Je ai à faire pointeur flèche n. Cool? Ouais. [00:13:07] AUDIENCE: est N le nom de la variable? HANNAH: Oui. Donc, si nous Back Flip une diapositive, n est le nom de la valeur à l'intérieur de la noeud dans notre liste chaînée. Et je sais que cela peut être un peu peu confus parce que nous aussi appellent la chose que nous voulons supprimer n. Donc ce est là que une ligne vient. Ouais? [00:13:27] Public: Qu'est-ce que vous avez [Inaudible] comment ils fonctionnent? Un pointeur [inaudible]? [00:13:35] HANNAH: Bien sûr. Parlez-vous about-- quelle ligne? PUBLIC: La dernière ligne [inaudible]. [00:13:44] HANNAH: Bien sûr, OK. Alors regardons à l'image dans pour tenter d'expliquer ce phénomène. Je suis désolé, pour le caméra, la question était pouvons-nous expliquer pointeur Arrow Next pointeur précédente. OK, alors disons que nous sommes à cinq et notre objectif est de supprimer cinq. Donc pointeur à côté, qui de ces trois nœuds ne nous donnent que? Cela nous amène à la sixième noeud, non? [00:14:10] OK, maintenant que nous demandons pour de six précédente. D'ACCORD? Et nous réinitialisation cette égal à quatre, qui se trouvait être de cinq précédente. Je sais, ce est super difficile de garder la trace. Je recommande vraiment vous dessinez photos si vous obtenez une question comme ça. Oui? [00:14:30] PUBLIC: La raison pour laquelle nous ne avons pas un [inaudible]? [00:14:37] HANNAH: Exactement. Donc la question est, pourquoi faire nous pas besoin de vérifier ici? Pourquoi avons-nous pas besoin de vérifier que pointeur précédente ne est pas égal à null? Et ce est parce que nous avons déjà séparé le cas si le pointeur de au tout début. Très bonne question. Rien d'autre à ce sujet? OK, cool. Alors finissons vers le haut. Nous y sommes presque. [00:14:59] Alors, que se il est à la tête? Et si au lieu de essayez de supprimer cinq, nous voulions vraiment supprimer quatre? Qu'est-ce que je dois faire? Eh bien, je veux réinitialiser ma tête à quoi? Shout It Out? AUDIENCE: celle d'après. HANNAH: Belle. OK, donc nous voulons liste à pointant à tout ce que notre pointeur nœud suivant est. Bon. Et juste pour l'exhaustivité de amour, nous le ferions vouloir vérifier que tant que notre liste ne est pas nul, aussi longtemps que notre liste ne est pas vide, alors nous voulons mettre notre précédente égale à nulle. Question jusqu'ici? Une étape de--? [00:15:53] AUDIENCE: Serait-il si la liste ne est pas égal à null? [00:15:55] HANNAH: Oui, vous avez tout à fait raison. Je suis tellement désolé. Est-liste ne est pas égale à null. Impressionnant. Essayer de mettre tout cela sur l'écran. Ce est une sorte de tomber. Désolé, les gars. Et last but not least, tous les nous avons à faire est de retour. D'ACCORD. Ce était beaucoup bourré en très rapidement. Prenez une seconde pour passer en revue ceci. Dites-moi si vous avez des questions. Ouais? [00:16:20] AUDIENCE: Si la liste est à la tête, alors-- attendre, tant pis. [00:16:26] HANNAH: OK, bon. Donc, ce est si la liste est à la tête, nous enlevons à tout ce que nous avons inséré. Ouais? [00:16:31] AUDIENCE: Pouvez-vous expliquer la première instruction if nouveau? Si le pointeur de n est égale à n? HANNAH: Bien sûr. Donc notre objectif de cette fonction est toute pour supprimer le noeud qui a une valeur n. Donc, si nous trouvons, comme nous sommes itérer notre liste, le noeud avec la valeur n, qui est celui que nous voulons supprimer. Donc tout se passe de la suppression l'intérieur de ce grand if. Est-ce que cela a du sens? Cool. Ouais? [00:16:59] AUDIENCE: Peut-être que vous ne pouvez pas voir , mais ne vous devez également une ligne pour faire défiler la liste? HANNAH: Awesome. Disons soulever cette question un peu, et nous jetterons ce droit dans le fond. Peut-être que le conseil serait avez été un peu meilleure idée. Alors, comment aurais-je déplacer le pointeur de l'avant? [00:17:17] AUDIENCE: Pointeur égale pointeur plus un. [00:17:20] HANNAH: Belle. Donc, cela nous permet de continuer itération à travers. D'ACCORD. AUDIENCE: Ne serait-il y avoir une autre? HANNAH: Une fois de plus? AUDIENCE: aurait-il pas une autre après la grande vieille si déclaration [inaudible]? HANNAH: Quelle partie? Je suis désolé. [00:17:38] AUDIENCE: Le parcours, ne devrait pas y avoir un autre? HANNAH: Vous absolument pourrait avoir un autre. Parce que je ai le droit de retour là, vous ne avez pas besoin d'un autre. Mais oui, bonne question. OK, oui? AUDIENCE: Pouvons-nous penser de pointeur qui se déplace dans la liste que de prendre de la valeur de chaque noeud dans la liste? Ou devrions-nous penser que ce est sorte d'externe à la liste? [00:18:00] HANNAH: Soit on est très bien, je pense. La façon dont je imagine que ce est Je dis, OK, je suis pointeur. Et ce est moi. Ce est ma main. Je vais pointer vers les différents choses que je veux pour parcourir. D'abord, je vais pointer à la tête de la liste. Et qui me dit que je suis va pointer à quatre. Et moi, étant externe à la liste, Je peux signaler à chacun de ces éléments. Donc, je pense à moi comme pointeur. Auditoire: Alors, lorsque vous supprimez l'un de ces éléments, vous vous supprimez, pour ainsi dire. HANNAH: Exactement. Donc vous supprimez la chose vous pointez. Ainsi, dans l'exemple que nous avons vu où nous en sommes essayez de supprimer cinq, quand je fais remarquer à cinq, Je veux supprimer le chose que je suis pointant vers. Exactement. Oui? AUDIENCE: Avons-nous pris soin de la cas où n ne est pas dans la liste? HANNAH: Si n est pas dans la liste? Tout ce qui va arriver, ce est que vous êtes aller pour parcourir et itérer travers, puis, vous allez pour se rendre à pointeur étant nul, et puis vous allez faire. [00:18:48] Auditoire: Alors, avons-nous de retourner quelque chose? HANNAH: Nous pourrions. La façon dont il est défini cette fonction, je dis juste qu'il retourne annuler indépendamment. Mais vous pourriez avoir quelque chose comme retournant un entier, et faites-le revenir 1 négative si elle échoue. Quelque chose comme ça. Questions with-- oui? AUDIENCE: [inaudible]? HANNAH: Désolé? AUDIENCE: [inaudible]? HANNAH: Bien sûr. Voilà donc le actual-- une fois que nous avons fait tout ce travail de se déplacer toutes ces flèches autour, toute notre objectif était de se débarrasser du noeud que nous recherchons. Donc dans ce cas, libérant pointeur, si je fais remarquer à cinq, ce est comme l'effacement de ce noeud milieu. Ce est la partie de pointeur libre. Ce sens? [00:19:29] Auditoire: Alors même pensé vous ne avez pas [inaudible]? [00:19:31] HANNAH: Donc, nous avons supposé au début nous avons eu quelques liste qui était already-- ils avaient mis cela ensemble. Ainsi, afin de construire cette liste, Ils ont dû [inaudible]. Cool. Autre chose avec cela? Oui? [00:19:46] AUDIENCE: Que faire si la liste ne est pas égal la ligne nulle? [Inaudible]? HANNAH: Juste ici? AUDIENCE: Ouais. HANNAH: OK, tout ce que je fais est que je suis seulement de se assurer avant que je essaie à la liste de déréférencement, avant que je essaie d'accéder à la précédente, Je tiens à vous assurer que ce ne est pas null si je ne obtiens pas un défaut de seg. Cool. [00:20:08] OK, je sais que ce était tout à fait beaucoup à passer à travers. Donc cette diapositive sera mis à votre disposition. Ainsi, vous pouvez passer par là plus en détail. Oui? [00:20:17] AUDIENCE: Pourquoi la liste [inaudible]? HANNAH: Bien sûr. Donc, la liste fait vraiment cet élément ici, le premier élément dans la liste. Donc, il ne peut pas avoir un précédent. Oui? [00:20:31] Public: Est-ce que le point de pointeur à la même adresse dans la mémoire? Est-il pointer vers le même adresse en mémoire que le noeud qu'il pointe vers? [00:20:40] HANNAH: Oui, il pointe à ce noeud dans la mémoire. [00:20:43] AUDIENCE: Bon, alors lorsque vous [inaudible]? [00:20:47] HANNAH: Dans un sens, oui. D'ACCORD. Très bien, passons pair avec cela. Et si vous avez d'autres questions, rester à la fin, et nous pouvons aller à travers elle à nouveau. OK, cool. Maintenant, nous arrivons à passer aux différentes tables, essais, et les arbres, que vous avez de super familier avec en p-set de cinq, Speller. [00:21:04] Donc tableau hachage est juste une tableau avec les listes simplement liés ou doublement chaînée listes à venir hors de lui. Donc, nous avons une sorte de tableau associatif. Et comment nous savoir lequel de ces tableaux seaux d'entrer dans, nous utilisons une fonction de hachage. Donc dans ce cas, quelqu'un peut-il deviner ce que la fonction de hachage serait juste, fondée sur un certain d'entrée et de sortie? [00:21:31] PUBLIC: numéro de lettre de l'alphabet. HANNAH: Exactement. Il les met seulement dans l'ordre alphabétique. Tout ce qui commence par une A est placé dans le premier compartiment. Tout d'un B est mis dans le deuxième godet, ainsi de suite, et ainsi de suite. Impressionnant, OK. Et une fonction de hachage est tout fonction qui prend en un mot et vous dire ce que il appartient au godet. Alors, qui l'entrée dans notre tableau, il appartient à. [00:21:55] Donc, chaque fois que je donne ma hachage fonctionner un mot, il faut me dire la même placer à chaque fois. Donc, si nous utilisons la fonction de hachage de la diapositive précédente où nous sommes le tri par le première lettre de l'alphabet, chaque fois que je donne ma fonction de hachage "pomme" il devrait toujours me rendre 0. Donc, si je ai une pomme de mettre dans ma table de hachage, si je donne "pomme" à ma fonction de hachage, il devrait dire, allez le mettre dans un seau 0. Si je suis à la recherche d'un pomme dans ma table de hachage et je dis, où la force de pomme en direct, vous demandez à votre fonction de hachage. Et il dit, aller à Bucket 0. Bien? Questions avec les fonctions de hachage? Impressionnant. [00:22:34] Voici un peu plus explication détaillée de ce qu'est une fonction de hachage pourrait ressembler. Bien. Maintenant, le problème avec hachage fonctions est dans un monde idéal, nous ne aurions une chose dans chaque seau. Mais en réalité, il ya pas un seul mot qui commence par A. Il n'y a pas un seul mot qui commence par B. Donc, dans ce cas, si l'on obtenir soudainement "baies" et nous voulons le mettre dans notre table de hachage, et nous voyons, oh, non, la banane est déjà là, qu'est-ce qu'on va faire? [00:23:03] Eh bien, nous avons deux options. La première option est sondage linéaire, qui signifie simplement aller chercher la prochaine seau vide. Allez trouver le prochain tableau entrée vide. Et il suffit de mettre "baie" il. Donc, je sais que ce est censé aller à la banane dans le seau une. Mais il suffit de mettre dans le seau trois, parce seau trois est vide. Une autre option est probablement ce que vous implémentez dans votre p-jeu, où vous eu chaînage séparé. Donc, chacun de vos seaux, chacun de vos éléments de tableau, non seulement détient une mots, mais en fait, détient un pointeur vers une liste de mots. Alors que si vous aviez la banane dans votre table de hachage et que vous vouliez tout d'un coup ajouter baies, pas de problème. Il suffit d'ajouter des baies à la fin, ou le début, de votre liste chaînée. OK, impressionnant. Questions avec hachage tables avant de continuer? [00:23:58] Bien. Les arbres et les essais. OK, donc ce était une autre option pour la mise en oeuvre du dictionnaire. Vous auriez pu faire un essai. Donc, ce est un type spécial de arbre qui se comporte comme une table de hachage multi-niveaux. Donc, vous verrez l'image où vous avez un tableau rappelle à tout un tas de tableaux ce point à un tas de tableaux ce point à un tas de tableaux. Et nous verrons exactement ce que ressemblerait sur une lame avenir. Et, plus généralement, un arbre est ne importe quelle structure de données dans lequel les données organisée en un certain hiérarchie. Alors, où nous avons vu que nous avons une sorte de compréhension d'un haut niveau, un niveau supérieur, un niveau supérieur, un niveau supérieur. Donc, ce est probablement le plus clair avec quelques exemples spécifiques. Alors, voici notre arbre. Vous pouvez voir qu'il a des niveaux particuliers que nous commencions par ce nœud racine, une. Et nous pouvons aller à travers notre arbre. [00:24:50] Un arbre binaire est un type particulier d'arbre. Et la seule spécification pour un arbre binaire est que chaque noeud a au plus deux feuilles. Donc, vous ne allez pas voir tout de ces nœuds ont trois ou quatre ou un nombre différent de feuilles. Et puis encore plus précis est un arbre binaire de recherche où chaque noeud à la gauche de la noeud va avoir une valeur plus petite. Et chaque valeur à la droit va être plus grand. Donc si vous voyez 44 est à notre racine, vers la gauche, 11, 22 et 33 sont tous inférieurs à notre racine. Et sur la droite sont tous bigger-- numéros 66, 55, et 77. Et cette propriété est vrai à chaque niveau de l'arbre. [00:25:37] Alors, quand nous descendons 22, 11, et 33, encore 11 est inférieure à 22 et 33 est plus grand que 22. Et cela rend plus facile à la recherche parce que si nous sommes à la recherche pour un certain nombre, nous savons exactement ce qui branche à suivre vers le bas. Donc, ce qui devrait vous rappeler une peu de recherche binaire. Ouais? [00:25:56] Auditoire: Alors, quand vous êtes décrivant binaire, vous avez dit qu'il a au plus deux feuilles? HANNAH: Mm-hm. AUDIENCE: Pourrait-il avoir moins? HANNAH: Ouais. Donc, disons que, par exemple, vous n'a pas eu un nombre pair de choses et vous ne pouviez pas remplir tout votre feuilles, il est très bien si l'on a une. D'ACCORD? Impressionnant. D'autres questions sur les arbres? D'ACCORD. [00:26:16] Retour à nos essais que je parlais à propos un peu plus tôt, comment nous avons ces tableaux multi-niveaux. Donc dans ce cas, nous commençons au sommet. Et nous pouvons suivre toute parole donnée bas. Alors disons que nous voulions pour trouver Turing. Nous commençons à T, suivez le bas à un tableau qui contient U, et suivez-le jusqu'à ce que nous atteindre ce petit triangle qui nous dit, oui, vous avez trouvé un mot. Effacer le tente? Tout d'aller là-bas? Oui? Public: Est-ce que le symbole du delta doivent occuper l'espace au sein de l'essai? HANNAH: Ouais, ce ne est pas si même nécessairement besoin d'être un delta. Mais nous avons besoin d'une certaine façon à raconter notre computer-- désolé, de sorte que nous savons que TUR ne est pas un mot. Parce que nous allons dire que nous ne avons pas ce concept d'un delta, ce concept de félicitations, vous avez trouvé un mot, il serait passer et itérer T-U-R, puis dire, génial, je l'ai trouvé! Il doit être un mot. Mais ce est vraiment pas. Nous voulons ensemble Turing soit un mot. Donc, nous devons avoir quelque chose à la fin qui dit, félicitations, vous avez trouvé un mot légitime. AUDIENCE: Donc, si vous aviez comme 26 lettres de l'alphabet, auriez-vous fait 27 touches dans votre essai? [00:27:24] HANNAH: Awesome, ouais. Donc en fait, je pense que sera sur la diapositive suivante. Ta-da! Où si vous avez un noeud dans votre essai, vous êtes va avoir 27 enfants au lieu de 26. Vous avez des questions à ce sujet? Ouais? AUDIENCE: Pourquoi essais prennent donc beaucoup d'espace [inaudible] que vous allez? Pourquoi est-il considéré comme [inaudible]? HANNAH: Bien sûr. Revenons. La question est, pourquoi sont essaie tellement plus grand que quelque chose comme une table de hachage. Donc, pour chacun de ces niveaux, même se ils ne sont pas établis ici, vous devez avoir tous les 26 caractères. Et la raison pour laquelle vous ne pouvez pas dis, oh, mais comme pour Turing, je ne ont pas besoin d'avoir un quelconque de ceux mêmes choses sur le niveau de U. Eh bien, si tout à coup vous vouliez ajouter quelque chose qui était comme T-H, vous aurez besoin d'avoir la possibilité d'ajouter ce mot. Donc, pour chaque lettre, vous allez avoir d'avoir un tas de tableaux à venir hors de lui. Donc vous pouvez voir comment il obtiendrait vraiment grand, vraiment rapide. D'autres questions? Bien. Ouais? [00:28:29] PUBLIC: Quand les essais plus vite que les tables de hachage? [00:28:33] HANNAH: Quand les essais plus vite que les tables de hachage? Donc, si vous aviez une très mauvaise fonction de hachage. Alors disons que je étais comme, voici votre fonction de hachage. Peu importe quel mot vous me donnez, je suis toujours va mettre en entrée de gamme 0. Et si nous nous retrouvons avec juste de mettre tout dans un gros longue liste liée. Et donc un temps recherche prendrait au pire n si ce est à la fin de notre liste. Avec l'essai, nous avons juste à itérer à travers les lettres dans le mot. Donc, même si nous avons ajouté un tas plusieurs mots à notre essai, il ne serait pas nous prendre plus de temps de trouver un mot en particulier. [00:29:09] Tout ce que nous avons à faire est, pour Ainsi, dans ce cas, disons que nous sommes à la recherche pour le zoom, nous aurions juste à parcourir Z-O-O-M, quatre lettres. Donc, ce est juste la longueur du mot zoom. Il ne importe pas combien de plus de mots que nous mis dans cette tentative. Nous pouvons toujours obtenir dans ces quatre étapes. Impressionnant. Oui? [00:29:32] Auditoire: Alors, [inaudible] est un tableau, non? [00:29:34] HANNAH: Mm-hm. AUDIENCE: Si vous êtes la recherche de [inaudible], voulez-vous avoir à passer par votre tableau pour trouver [inaudible]? HANNAH: Bien sûr. AUDIENCE: Cela ne prend plus de temps? HANNAH: Si je vais dire que mon tableau est toujours va être A, B, C, D, E, F, G, bla bla bla, donc si je sais toujours que ce est dans le même ordre, si je sais toujours que ce est par ordre alphabétique, Je peux juste dire O est le numéro telle et telle chose dans l'alphabet. Juste passer à cet endroit. Car ne oubliez pas, avec tableaux, nous pouvons accéder tout élément de ce tableau en constante temps si nous savons où nous sommes à la recherche. Ouais? [00:30:09] AUDIENCE: Sur la précédente glisser [inaudible] 27, mais 26 pour le premier. [00:30:14] HANNAH: Désolé? [00:30:15] AUDIENCE: est pas la première une 0, donc ça ne serait pas 26? [00:30:18] HANNAH: Bien sûr, quand nous disons 27, ce est va nous donner des indices de 0 à 26. Mais si vous avez réellement compter ceux sur, il va y avoir 27. Bonne question. Rien d'autre? Ouais? [00:30:31] Auditoire: Alors essais sont plus lent que les tables de hachage? [00:30:34] HANNAH: Essais vont être, en théorie, plus vite que les tables de hachage mais prennent plus de mémoire. Ouais? AUDIENCE: [inaudible]? [00:30:45] HANNAH: Je suis désolé, je ne vous entends pas. AUDIENCE: [inaudible]. 0-25 vous donne 26. [00:30:54] HANNAH: 0-25 serait vous donner 26, à droite. [00:30:56] AUDIENCE: Et puis [inaudible]. HANNAH: Droit. Ainsi, le nombre nous précisant est le nombre de choses dans notre tableau. Donc, si nous avons 27, il est va nous donner 0 par 26, ce qui donnera chambre nous pour, dans ce cas, Je ne suis pas y compris une apostrophe. Donc, nous obtenons 0 à 25 sont les 26 premières lettres de l'alphabet, ou tous les 26 lettres de l'alphabet. Et puis ce dernier chose, à l'entrée 26, est va être le chèque marque, le delta. Rien d'autre? Impressionnant. Je ai perdu mon espace. OK, cool. [00:31:31] Donc nous avons déjà abordé ce. Mais le grand compromis entre essais et tables de hachage est qui tente prévoient, en l'aspect théorique constante jusqu'à fois, mais utilisent beaucoup de mémoire. Très bien, maintenant nous avons légèrement structures moins complexes, et nous allons être fait avec C, et nous allons passer à droite le long. [00:31:49] Donc, piles, nous avons vu ce en conférence où vous avoir quelque chose comme un pile de plateaux où la dernière chose que vous mettez sur la pile qui se passe d'être la première chose que vous enlevez. Donc, ce est ce qui définit vraiment une pile ce est que la dernière chose que vous mettre sur va être le premier chose que vous décoller. Et la terminologie que nous utilisons si nous allons mettre quelque chose, si nous allons ajouter quelque chose à notre pile, nous appelons cela de pousser. Et si nous prenons quelque chose hors, nous l'appelons popping. Et si nous allons mettre en oeuvre une pile, nous besoin d'être sûr de garder une trace de la taille et la capacité. Ainsi, le nombre total d'éléments que nous pouvons tenir et le nombre actuel d'éléments que nous tenons. [00:32:27] Et de manière très similaire, nous avons files d'attente. La seule différence est au lieu d'avec piles, nous avons dit la dernière chose que nous mettons sur est la première chose que nous décollons. Donc, avec les files d'attente, la première chose que nous avons mis en va être le première chose que nous emporter. Donc, ce est comme si vous êtes fait la queue dans un magasin et vous êtes étant aidé, alors la première personne en ligne devrait être la première personne à être aidé. Ce serait donc une file d'attente. [00:32:52] Nous avons donc besoin de garder une trace de la la taille, la capacité et la tête puisque nous sommes va prendre tout le monde par l'avant de la liste au lieu de l'arrière. Questions à ce sujet? Toutes les questions de C qui vous dérangent? Les structures de données, rien de tout cela amusant? Très bien, cool. Donc, je vais céder la parole à Alison à sauter dans un peu plus de la programmation. [00:33:14] ALISON: Oh, nous allons voir. Nous allons voir comment bien que je fais ici. OK, je vais essayer et voler par le biais de ce genre de choses, les gars. Hannah se est très en approfondie sur toutes ses choses. Je vais essayer de donner vous un aperçu de souffle rapide afin que nous puissions rendre à Davin avec tout les JavaScript et sécurité choses amusantes que peut-être vous avez réellement veulent en savoir plus sur. [00:33:33] OK, comme le dit Hannah, si vous avez des questions, Je vais trop vite, se il vous plaît, laissez-moi savoir. Je vais répondre aux questions que nécessaire. Donc, pour commencer, nous allons commencer avec probablement l'une des premières choses vous avez appris avec web programmation, autorisations. Donc chmod, vous les gars aurait dû être maîtres cela avec tout le web la programmation que vous avez été fait ces derniers temps. Il est fondamentalement juste une commande qui change les autorisations ou les autorisations d'accès de nos objets du système de fichiers. Bien entendu, pour réellement voir ceux-ci, si vous êtes ayant aucun problème avec ces lors de vos ensembles de problèmes, vous avez peut-être utilisé ls -l, qui est long, pour obtenir la vue un peu comme cela, où vous voyez en fait tout les autorisations pour un fichier. [00:34:16] Et vraiment, nous allons juste aller travers assez rapidement juste joli bien ce que chacun de ces moyennes. Donc, nous avons d ici, qui juste représente le répertoire. De toute évidence ici, nous voyons rwx, qui est lisible, inscriptible et exécutable. Celles-ci pourraient aussi être représentés comme des bits, que nous allons entrer dans la page suivante. Donc chaque triade que nous avons vu ici, ce est donc trois triades. Nous avons rwx, rien r x et r x rien pour ce premier fichier. Ce est cette structure générale. [00:34:49] Donc, nous avons un répertoire. Nous avons un certain groupe d'utilisateurs avec ces autorisations. Certains groupe qui a ces autorisations, et un monde qui a une permission. Vous pouvez penser de ces derniers comme une triade. Vous pouvez penser de ces que trois bits. Ainsi, ils peuvent contenir des valeurs ne importe où de 0 à 7, qui est pourquoi parfois nous avions vous faites chmod 600 au lieu de chmod rw que ce soit. Nous allons entrer dans un exemple il. Mais fondamentalement, vous pouvez penser d'entre eux comme soit juste rwx, ou vous pouvez penser à eux comme certains numéro où cette première personne ici représente un nombre compris entre 0 et 7, cette seconde une représente un nombre compris entre 0 et 7, et le troisième représente un nombre compris entre 0 et 7, OK? [00:35:38] r a une valeur de 4. w a une valeur de 2, et x a une valeur de 1, ce est pourquoi ce la permission ici serait chmod 700. Parce que dans ce cas-ci, il nous dit ont le premier bit, il est retourné sur. Nous avons donc 4 pour la lecture. Le second bit est retournée pendant w, qui est deux, alors maintenant nous avons six. Et le troisième bit est renversé sur pour x, qui est une, donc nous obtenons sept. Et bien sûr, notre groupe et notre monde sont chacun 0. Ce est donc aussi la équivalent de chmod 700. Et je voudrais certainement essayer de comprendre la correspondance entre celles-ci. Je ne sais pas si elle a monter sur un quiz avant, mais il serait question que je pourrais demander. [00:36:18] Juste un peu d'aller encore plus loin dans chmod ici, ici est très général structure d'un appel chmod. Alors bien sûr, nous avons chmod ici. Références, ce que cela fait référence est qui sommes-nous donnons ces autorisations à ou qui sont nous prenons ces autorisations loin de. Donc, nous avons un ici dans les autorisations, comme si nous vous avons donné chmod a plus x, comme nous le verrons bientôt. un signifie simplement donner à ces spécifique autorisations à tous. Donnez-leur à tous. Ainsi, vous pouvez très bien avoir u plus x g ou plus x ou o plus x ou multiple de celui-ci. Alors que la première partie est toujours va être des références. Qui sommes nous donner ces autorisations à, ou qui sont nous les éloigne de? [00:37:03] Le second est l'opérateur. Alors vous les gars ont surtout traité plus. Cela donne des autorisations à qui que vous êtes en leur donnant, alors que moins, logiquement, les supprime. Donc rien de trop terrible là-bas. Et puis modes est ce que nous avons parlé à la lecture, l'écriture ou d'exécution. Ainsi, un plus x signifie donner exécutable autorisations à tous. Et puis, bien sûr, sur lequel fichier ou répertoire spécifique. D'ACCORD? Tout le monde bien avec chmod? Pas trop mal? [00:37:37] OK, donc HTML, aucun d'entre vous sont assez vieux to-- MySpace âge? Je ai envoyé à mon article, et littéralement la moitié des personnes m'a regardé comme si je étais fou. Et je étais comme, les gars, nous ne sommes pas si vieux. Allons. Donc HyperText Markup Language, Honnêtement, ce est juste une façon pour vous pour afficher certaines choses sur le web. Donc, ce est un langage de balisage. Ce ne est pas un langage de script. Il n'y a aucune logique en elle. Il se agit simplement de changer le façon dont quelque chose est affiché. OK, donc ce est important distinction à faire. Il est considéré comme un langage de balisage, pas un langage de script. [00:38:12] Nous avons donc ici nos balises HTML. Sur cette diapositive, sont probablement la plupart des ceux que vous devez être familier avec et être vraiment à l'aise avec. Alors, évidemment, nous avons notre balise HTML, qui désigne que tout dans entre ces deux aura HTML. Nous avons un lien, qui évidemment vous donnera un lien vers une page web externe. Certains titres, au sein de notre siège ici. Et nous avons notre corps avec h1, qui est un en-tête, donc il va faire beau et audacieux et plus grand. Et puis, nous avons une certaine p, qui est un paragraphe. Vous devriez probablement savoir et se familiariser avec les choses comme la façon dont vous insérez une image, sont Y at-il d'autres classes d'en-tête? Je voudrais certainement être à l'aise avec div. Donc, ceux-ci ont la majorité des balises que vous devez être familier avec. Mais bien sûr, comme avec tout dans CS 50, la liste ne est pas exhaustive. Donc, assurez-vous vous brossez à ce sujet. [00:39:08] CSS, CSS donc, si l'un de vous regarder mon séminaire d'il ya deux semaines, est vraiment juste une façon au style de votre page web? OK, donc nous avons un langage de balisage. HTML, qui prend soin de tout le texte et où il pourrait être sur la page. Mais CSS est vraiment ce qui rend assez. Vous pourriez avoir dans votre code HTML fichiers, mais comme nous allons parler plus tard, Je suis sûr qu'il pourrait soit la diapositive suivante, il est de pratique courante, et en fait pratique que nous encourageons vraiment, pour vous de garder les séparaient lorsque nous parler MVC et que tout le paradigme. Ce est vraiment ce que cela alimente. [00:39:42] Donc CSS est juste une façon de rendre les choses jolies. Les choses ici, comme corps et #title et .info, ceux-ci sont appelés sélecteurs et ce ils le font, ce est qu'ils choisissent des choses spécifiques au sein de votre fichier HTML et appliquer ne importe quel style, tout ce genre de choses que vous voulez, à cet élément spécifique de votre site Web page. Donc ici, nous avons une couleur de fond et une couleur et une famille de police qui est d'être appliqué à ce qui est dans le corps. Donc, si nous avons regardé en arrière ici, ce ne se appliquerait pas au titre. Il ne se appliquerait à ce qui est dans ces sélecteurs de corps, OK? [00:40:22] Avec le titre ici, ce est va être la même chose, la couleur du texte étant bleu va seulement d'affecter ce qui est en les sélecteurs de titre. Ainsi que des informations ici, le texte sera rose, de quel que soit le information, qui est ici. Donc, la seule chose qui serait rose sur cette page est la date, le lundi 17 Novembre 2014. OK, donc CSS est juste une façon de avoir plus de contrôle over-- oui? [00:40:48] AUDIENCE: Pourquoi avez-vous d'utiliser le hachage avec le titre? [00:40:51] HANNAH: Diapositive suivante, promis! Nous y arriverons. Donc, ce est pourquoi nous devons utiliser hachage. Donc sélecteurs prennent trois principaux formes que nous parlons à vous les gars environ. Je fyou veux en savoir plus, il ya beaucoup là-bas. Il ya une grande documentation CSS. Il ya un nom de tag, ce qui a à faire avec seulement vos balises HTML normales. Donc, p h1, h2, div, ces sortes de choses. Et nous pouvons simplement nommer ceux comme ce est. Donc, comme nous le voyons ici avec corps, ce est une étiquette normale. Ainsi, nous pouvons simplement mettre corps quand nous parlons dans notre fichier CSS. [00:41:26] Avec titre, toute la raison nous ont ce hachage est ce que nous avons est considéré comme un ID. Ainsi, un ID doit toujours être unique dans votre page HTML de sorte que lorsque vous êtes se référant à elle, vous savez que vous êtes seulement référence à une chose spécifique. Donc dans ce cas ici, avec notre h1 ici, CS 50 session d'examen, nous avons une id du titre. Ainsi, afin de simplement se référer à cette morceau de notre HTML, nous faisons un titre de hachage. Juste par convention, les ID sont désignés avec un hachage en face d'eux. De la même façon, on voit infos ici est une classe. Et ainsi de classe avec CSS est désignée comme une classe dot ou un point quelle que soit cette classe est. Donc dans ce cas là, ce est info. [00:42:10] Donc, je le reprends. Ces deux serait rose pour notre CSS ici parce qu'ils ont tous les deux une classe d'info. Et dans notre fichier CSS, nous avons désigné que ne importe quoi avec une classe de l'info est rose. Est-ce logique? Oui? [00:42:27] AUDIENCE: Si vous deviez faire tout dans le blanc de corps, et puis vous essayez de faire quelque chose de l'intérieur bleu, serait-ce causer des problèmes? [00:42:34] HANNAH: Donc CSS est feuilles de style en cascade. Donc tout ce qui est vers le fond aura préséance. Donc, si vous faites quelque chose avec le corps, et vous faites tout ce blanc, puis plus tard vous changez le titre ou si vous modifiez le texte dans le corps, il remplace cela. Donc tout vers le fond aura préséance. Oui? [00:42:56] Audience: et IDS sont uniques, mais les classes peuvent être plus? HANNAH: Droit. Donc ID doivent être uniques, et les classes peuvent reportez-vous à autant de choses que vous le souhaitez. D'autres questions? Oui. [00:43:09] AUDIENCE: [inaudible]. Je me demande si cela fait une différence. HANNAH: Je suis désolé, quelle était la question? PUBLIC: Il est petit «F» et le capital "F." HANNAH: Donc, la différence entre petit "f" et le capital "F" ne devrait pas faire une différence. Donc, "f" sera de toute façon 15. Cool, autre chose? Tout le monde bon, CSS? Oui? [00:43:30] AUDIENCE: Désolé. Pouvez-vous avoir une classe et un ID? [00:43:35] HANNAH: Oui, vous le pouvez. Les choses peuvent avoir à la fois une classe et un ID. Et je recommande fortement tester ceux-ci sur votre propre. CSS vous apprendrez meilleur juste en faisant quelque chose, page Web très simple, élaborer un peu de CSS, et juste voir comment ils interagissent. Et vous gagnerez un très bon, sens intuitif pour savoir comment cela fonctionne. [00:43:56] OK, tout le monde bien avec CSS? Vous allez tous à faire beaux sites avec CSS maintenant. OK, les meilleures pratiques, tout simplement choses à garder à l'esprit, des choses that-- ce est pourquoi nous accostons vous pour designer et autres joyeusetés. Donc fermer toutes vos balises HTML. Donc si vous avez un corps ouvert, il devrait y avoir un corps à proximité. Si vous avez un paragraphe ouverte, il devrait y avoir un paragraphe à proximité. Vérifiez votre page valide. Vous devriez être très familier avec du P-set sept avec CS 50 finances avec le validateur W3. Et comme je le disais avant, l'un de nos grands paradigmes est la séparation de votre style avec CSS à partir de votre balisage, qui est HTML. Et puis, bien sûr, nous avons ce grand XKCD ici. Yay, comique! [00:44:38] OK, TCP / IP. Entre ceux-ci et HTTP, fondamentalement, ils sont tous les deux protocoles. Ainsi, vous pouvez suffit de penser d'entre eux comme un ensemble de règles qui régissent comment les choses déplacer à travers l'Internet. Donc contrôle de transmission protocole ou un protocole Internet, est juste une façon de se assurer que les données obtient où il va et que nous savons si nous sommes jamais données manquantes. Donc, si vous les gars repense à conférences un il ya quelques semaines avec David où nous avons eu quatre enveloppes, ils ont tous été numérotée comme l'un des quatre, deux de quatre, trois des quatre, quatre de quatre, ce est juste un ensemble de règles. Nous avons dit, OK, chaque fois que nous sommes envoi de plus d'un paquet, nous allons numéroter avec ce nombre il est et le nombre total qui l'utilisateur doit obtenir. [00:45:19] Et ce ne est que celui qui dit reçoit les données qu'ils ont obtenu tout, ou si quelque chose se est perdu en cours de route. Et ils ont besoin de le demander à nouveau. Ce est vraiment juste un ensemble de règles. Voilà comment vous pouvez penser, OK? Et aussi, il spécifie le port, qui vous les gars can-- Je sais cours conférence, ils avaient toute une liste de ports. Mais nous ne les avons pas ici en ce moment. [00:45:41] Protocole de transfert hypertexte Donc est, encore une fois, ce est un autre protocole. Donc, ce est un autre ensemble de règles qui régissent, dans ce cas, comment hypertexte est transféré. Ainsi, il permet juste navigateurs de parler à des serveurs Web. Et comme nous l'avons dit ici, ce est comme prise de contact humain. Ce est juste une façon de gouverner la manière dont le serveur Web est va interagir avec votre navigateur. Et nous avons juste quelques exemples. Nous avons des demandes ici où est la méthode GET. Nous avons HTTP 1.1, qui est version du protocole pour nous. Ensuite, l'hôte, ce qui est nous sommes en train d'essayer d'accéder. Et puis, comme vous le voyez ici, nous obtenir des réponses à cette 200 OK que notre code de réponse HTTP. Nous avons une grande liste que je vais de remonter en une seconde que vous les gars doivent se familiariser avec. Et nous avons ce type de contenu text / html, qui dit exactement ce type de données recevons-nous à partir du serveur, OK? Cet hôte et ce type de contenu font partie des en-têtes HTTP. Vous pouvez avoir aussi peu ou aussi peu que nécessaire pour le contexte de ce vous faites affaire avec. Parfois, vous aurez beaucoup de informations provenant de votre serveur. Peut-être qu'ils demandant beaucoup des informations de l'utilisateur. Elle varie en fonction du contexte. Si vous regardez CS 50 étude, il ya beaucoup plus à ce sujet. Mais nous avons beaucoup à faire à travers, donc je vais pour aller à droite à l'avance si ce est OK avec vous les gars? Cool. Attendez. Je ai certainement que Liste complète de-- hein! Je ne sais pas pourquoi ce est tout le chemin ici. Je ai pensé que je ai littéralement déménagé pendant que je étais sitting-- [00:47:15] DAVIN: Voulez-vous enseigner? Ou voulez-vous me l'enseigner? [00:47:17] PUBLIC: Je pensais que nous pourrions juste leur montrer pour commencer. Je veux dire, vous pouvez aller dans les plus loin, mais je pensé qu'il était plus logique puisque je vient parler états HTTP. Alors, voici la liste complète. Je suppose que ce qui va arriver, ce est Davin va aller en eux plus tard. Mais il ya toute une liste, une aperçu du goût à venir. OK, nous allons blow-- cela va être un cours intensif de PHP comme aucun autre. [00:47:41] Donc, PHP, préprocesseur hypertexte, ce est un backronym récursive, ce qui signifie qu'il a été nommé autre chose. Et puis ils étaient comme, cette n'a pas vraiment de sens. Donc ils ont juste nommés it-- et ce était un acronyme, donc ils ont juste fait qu'il PHP préprocesseur hypertexte, qui juste n'a pas de sens. Histoire amusante. Ce est un langage de programmation. Donc, autant que je souligne que HTML ne est pas un langage de programmation, ce est le langage de balisage, un PHP est un langage de programmation. Comment vous savez que ce est parce qu'il est logique. Il ya conditionnelles. Nous avons des variables, alors que nous avoir aucune de ces choses en HTML. [00:48:12] Très bien, alors nous avons ce petit peu ici ce est comme un avant-goût de PHP. Donc bases, les noms de variables commencer par un signe de dollar. Beaucoup de gens aiment ça. Rappelle nous de l'argent. Ce est génial. Nous voulons tous PHP. Donc, nous ne spécifions pas un le type de plus variable. Il est déterminé au moment de l'exécution. L'interprète sera comme, oh, nous allons simplement parcourons, et en fonction du contexte, nous allons voir quels types de types ces variables doivent avoir. Il n'y a pas la fonction principale. Les choses vont tout simplement de fonctionner. Vous les gars avec votre importation dans votre p-set dernière, vous noterez. Il ne était pas vraiment une fonction principale. Vous venez d'écrire ce que vous vouliez arriver. Et ce juste genre de qui se est passé. Donc, ce est PHP pour vous. [00:48:56] Les tableaux sont très similaires. Nous avons encore cette tranche. Ici, nous avons une variable arr appelé, et ce est l'égalité to-- nous avons notre normale notation crochets. Et nous avons une certaine valeur de la clé. Et la grande différence entre C et PHP tableaux ce est que nous pouvons avoir cette associate-- nous pouvons associer des valeurs aux touches. Ainsi, au lieu d'avoir juste un tableau qui est indexé par le nombre ou la position de cet élément dans la matrice, nous pouvons associer avec une clé. Où nous pouvons dire, OK, je veux tout valeur est associée avec des fruits. Et peut-être que nous avons fruits allé à la banane. Donc, ce serait revenir banane pour nous. [00:49:41] Mais fondamentalement, le plus puissante chose à ce sujet ce est que si vous les gars me souviens de la démo de conférence où nous avons essentiellement Speller réécrit en PHP, et il recherche était-- était vraiment comme, cette clé ne existe? Ce est vraiment gentil de la puissance de celui-ci. Vous ne avez pas besoin d'itérer à travers votre réseau. Vous ne avez pas besoin de savoir ce est dans l'espace. Il peut se agir, à la fin ou le début. Tant que vous connaissez la clé qui est associé à la valeur, PHP peut simplement cracher cette valeur Arrière droit sur vous, OK? [00:50:09] Et puis, nous avons aussi juste avoir juste parce que nous peut avoir des paires de valeurs clés ne signifie pas que vous devez. Vous pouvez aussi créer un tableau normal comme ici, en bas, où il est un seul, deux, trois, quatre. Ce sont nos valeurs. Et en fait, leurs clés sont les indices. Donc, la clé pour une serait zéro. La clé pour deux serait une. Ainsi de suite et ainsi de suite, à moins que vous affectez explicitement une clé, vous pourriez penser que le valeur est juste leur index. Cela fait-il sens pour tout le monde? Pas de questions? Impressionnant. [00:50:38] OK, foreach est une façon de itérer sur vos tableaux. Donc, nous avons quelque chose ici, juste la structure générale. Donc foreach, le nom de notre tableau, comme tout vous voulez appeler chaque élément dans votre tableau, et nous pouvons faire quelque chose avec cet élément ou à cette valeur. Donc, nous avons un exemple ici. Nous avons un associative tableau avec ces deux entrées avec bar étant associé à foo et qux étant associé à baz. Donc touches sont foo et baz. Les valeurs sont bar et qux. Donc foreach, nous avons notre tableau ici, comme la paire de valeur de clé. Cela nous permet d'accéder à la fois la clé et la valeur. Peut-être vous voulez juste la valeur, auquel cas vous pouvez simplement faire comme arr que $ valeur, et puis vous sont tout simplement accéder à la valeur comme vous itérer. Mais peut-être, pour certains raison, vous voulez la clé, ce est pourquoi je ai choisi cet exemple à la place. Donc vous pouvez réellement manipuler clé et la valeur dans ce cas. D'ACCORD? Question? [00:51:41] AUDIENCE: Si vous vouliez juste manipuler la clé, serait vous avez à faire foreach-- [00:51:45] ALISON: Droit. Donc, si vous vouliez manipuler simplement la clé, vous auriez encore besoin de cette syntaxe parce que si vous venez avoir arr comme quelque chose, comme une chose, ce est vais supposer que vous voulez la valeur, et non pas sur la touche. Donc si jamais vous avez juste comme arr que, peut-être, ce est comme $ element, il va supposer que vous vous posez pour seulement la valeur à chaque point. Si vous voulez explicitement faire quelque chose avec la clé, même si vous ne allez pas faire quelque chose avec la valeur, vous avez besoin de cette structure que nous avons ici où vous demandant explicitement à la fois pour la clé et la valeur. Grande question. Rien d'autre? Cool. [00:52:27] Tous droits, PHP et HTML. Oh, nous sommes de retour à la p-régler à nouveau sept. Donc, ce devrait ressembler un peu familier. Donc, ce est une certaine forme de HTML simple qui a un nom d'entrée de bonjour. Et nous voir, nous avons notre méthode de GET. Et si nous nous souvenons de notre p-jeu, Lorsque ce formulaire est soumis, il envoie un tableau appelé $ _GET qui a l'ensemble de ces entrées ou des variables de la forme qui devrait être manipulé dans notre PHP. Donc dans ce cas, l'utilisateur mettrait en leur nom. Ils soumettent. Et nous voyons que nous obtenons d'un tableau ici. Nous avons notre réseau de GET. Et nous accédons le nom. [00:53:11] Donc, qui dit, OK, donne-moi la valeur qui est associée avec le nom, nommer étant la clé ici. Et que les cartes directement à ce que nous avons dit notre nom de l'entrée est. Donc, ce est de vous donner la clé de ce va être dans votre tableau ici. Cela fait-il sens pour tout le monde? Oui? [00:53:32] AUDIENCE: Le nom se réfère GET pour la ligne violette dans [inaudible]? [00:53:36] ALISON: Elle se réfère à cela ici. Donc ce domaine ici, il se réfère à ce nom ici. Donc, cela aurait pu être nommé comme le numéro de téléphone, ou autre chose. Ce nom dit réellement, ce appelez-vous ce domaine? Comment allez-vous reportez-vous à ce domaine? Et ce nom est réellement comme, nous sommes dire ce domaine est appelé nom. Voilà comment nous allons y accéder. [00:53:59] Auditoire: Alors, ça ressemble, nom de l'entrée est égale à Bob, et-- [00:54:02] ALISON: Oui, alors vous Bob obtiendrait là-bas. Exactement. Tout le monde cool? Très bien, alors GET rapport POST, ce sont les deux façons principales que nous passons données dans une requête HTTP. Les gars, vous devriez avoir vu ces deux espoir. Donc, avec GET, les informations est passée à travers l'URL. Donc si jamais vous faites Google Recherches, YouTube, vous aurez remarquerez probablement un certain point d'interrogation. Et puis, tous les mots que vous venez de mettre là-dedans. Et POST transmet les données dans le corps du message HTTP. Donc, contrairement à GET, vous sorte de considérer que les données est masqué à l'utilisateur. Mais ce qui est vraiment important de comprendre est qu'il se agit toujours tout comme l'insécurité que GET. L'analogie que je aime utiliser est si vous avez votre numéro de compte bancaire et vous écrivez à l'extérieur de une enveloppe, qui est assez dangereux. Si vous deviez écrire sur un morceau de papier et le mettre dans l'enveloppe, ce est toujours très dangereux en raison tout ce que vous avez à faire est d'ouvrir que jusqu'à et de regarder le contenu réel du message de voir que. Donc, ce est «caché», et les gens aiment pense que ce est sûr, mais ce est vraiment pas. Et je suis sûr sera Davin entrer dans ce plus, peut-être. Mais elle est importante distinction à faire et quelque chose de vraiment intéressant pour comprendre. [00:55:15] OK, SQL, Structured Query Language. Tous les trucs que nous avons vu jusqu'à récemment! Donc, il est fondamentalement juste conçu, De toute évidence, pour la gestion des données. Vous avez eu beaucoup d'expérience avec dans vos tables avec PHP MyAdmin. Et il ya quatre requêtes communes vous les gars que nous voulons savoir. Donc, il ya update, insert, sélectionner et supprimer. Donc, assurez-vous que vous savez ceux qui vraiment bien. Nous allons aller à travers eux très vite. [00:55:40] Donc, mettre à jour, vraiment, que ce vous pourriez penser que ce est le cas, il met à jour simplement les données dans votre base de données. Nous avons donc quelques exemples ici. Ce est le grand structure d'une requête de mise à jour. Donc, nous mettons à jour la table que nous parlons. Et nous voulons mettre certaine valeurs, certaines colonnes égale à des valeurs spécifiques. Donc, ce jour tout le tableau, changer valeurs dans toutes les lignes dans ce cas. Donc, dans ce une ici, une réelle exemple, nous avons insert-- désolé. Ce Advanced Slide sans me en rendre compte. [00:56:17] Donc, ce tableau de mises à jour mis col1 égale à val1 où équivaut maison "Currier." Que celui-ci ne est il ne change, il ne met à jour ces valeurs dans des endroits spécifiques. Donc, dans ce premier, il change ces valeurs pour tout dans votre table, D'ACCORD? Il va changer cette colonne pour chaque entrée unique, pour chaque rangée. Mais celui-ci où, vous pourriez penser que ce est un qualificatif. Donc, il va seulement changer dans des endroits très spécifiques. Donc, en p-set sept, lorsque vous peut-être mis à jour le montant des liquidités que votre utilisateur a, vous avez probablement eu certains où ID est égal à l'ID de session, non? [00:56:53] Parce que vous ne vouliez pas modifier le montant des liquidités pour chaque personne qui a été l'utilisation de votre site web. Vous vouliez changer pour une personne en particulier, cette personne étant celui qui était l'aide à ce moment. Droite? OK, donc insérer, insert certaines valeurs dans des tables. Ce est comme lorsque vous êtes la création d'un nouvel utilisateur de la marque. La structure générale ici est d'insérer dans tout ce tableau nous parlons. Valeurs, étant les valeurs qui nous voulons effectivement à insérer. OK, alors que nous voyons ici, nous ont insérer dans le tableau. Il se agit des colonnes spécifiques avec leurs valeurs correspondaient. Donc, cela dit, insert une nouvelle ligne contenant valeurs val1 et val2 sous ces colonnes spécifiques. [00:57:33] Alors peut-être vous ne voulez combler sur la moitié des choses de cette ligne. Ce est ce que cette partie vous permet de faire ici. Il vous permet effectivement déterminer quelle partie. Oui? [00:57:44] AUDIENCE: Pouvez-vous seulement [inaudible] cellules de la ligne [inaudible]? [00:57:52] ALISON: Si vous ne remplissez certaines parties de votre ligne, le reste de ces cellules ne sont que vide. Tant que vous leur permettre de être vide, ce ne est pas un problème. Si vous tentez d'y accéder, ce est va revenir un élément vide. Mais il est important de savoir que, dans certaines tables, Ils doivent être autorisés à être nulle. Vous avez peut-être fonctionner dans un problème lors de votre p-set parce que nous ne avons pas laissé toute de vos valeurs NULL. Mais vous pouvez spécifier une valeur facultative dans votre table. [00:58:26] OK, sélectionnez, ce est donc juste une façon d'obtenir des données spécifiques d'une table au un quelconque identificateur que vous voulez. Donc, sélectionnez étoiles de table où col égal quelque chose signifie juste, me donner toutes les données associées où cette colonne spécifique est vrai. Donc, la star dans ce cas sera retourner la ligne entière à vous, OK? [00:58:49] Et puis, dans ce cas, sélectionnez étoiles à partir de tableau vous donne juste la table entière. Et puis, supprimer toute évidence, ce est juste supprime la ligne de la table. Donc supprimer de table, quelle que soit la table nous sommes référencement, où certains sont spécifiques identifiant ou une condition est vraie. Oui? [00:59:07] AUDIENCE: Question. Pourquoi êtes-vous en utilisant le double citations, et si vous faire guillemets doubles ou simples citations, cela fait-il une différence? [00:59:13] ALISON: guillemets doubles ou simples ne fait pas de différence dans SQL. Je ai cru voir une autre question. Oui? [00:59:20] Public: Est-ce qu'il ne affecte pas ce obtient échappé de la requête? [00:59:25] ALISON: Rob? [00:59:27] ROB: Qu'entendez-vous par échappé de la requête? [00:59:31] AUDIENCE: Si quelqu'un a un requête unique sous la forme de-- [00:59:36] ROB: Si quelqu'un devait mettre une apostrophe dans, alors tant que vous désinfection votre entrée, il n'a pas d'importance. Mais si vous utilisez un seul devis et vous êtes mal échapper à vos entrées, alors oui, ils ont besoin de mettre un seul devis afin de briser votre code. si vous utilisez des guillemets doubles, ils ont besoin de mettre une double citer à briser votre code. Mais tant que vous échapper des choses correctement, il n'a pas d'importance. Il va juste être traduits le symbole correct de toute manière. [00:59:59] Public: Qu'est-ce que signifie évasion? ALISON: Eh bien, comme désinfection et d'évasion. L'examen que nous avons, la grande XKCD comique qu'ils tirer vers le haut où vous avez, OH- ROB: Ce est la dernière diapositive. ALISON: Ce est la dernière diapositive, vraiment? Oh mon Dieu. Il nous allons, parfait. OK, donc en gros, vous pouvez injecter quelque chose dans cette requête SQL où il brise le code, ou comme David a montré en classe, si nous avons un unique citant une est égal à 1 et si dans notre code, nous suffit de copier directement que, et nous avons une apostrophe de fin, ce qui se passe est que nous obtenons une expression que évalue à vrai que sera laisser quelqu'un entrer dans notre base de données et obtenir des données que nous ne veulent pas qu'ils obtiennent. Donc, les entrées d'assainissement signifie simplement se assurer que nous échappons ces personnages et les désignant que caractères et non les choses qui devraient être acceptés être pris littéralement comme notre instruction SQL. [01:01:04] Ainsi, la grande chose que nous dit que vous les gars devraient utiliser étaient HTML caractères spéciaux, qui est quelque chose que vous voudrez peut-être jeter un oeil à. OK, supprimer. Les types de données, tout cela sera en ligne. Depuis que nous avons 15 minutes à gauche, je suis juste aller droit à travers cela. PHP et SQL, essentiellement ce est juste que nous avions une fonction de requête qui a aidé à protéger contre ces attaques malveillantes. Donc, lorsque vous utilisez requête, nous veillons que les choses ont été désinfectés et autres joyeusetés. [01:01:36] MVC est juste un paradigme de conception, afin modèle, vue, contrôleur. Ce est juste une façon de garder les choses agréable et diviser de la même manière que nous avons tendance à tenir Code à en fonctions. Ce est juste un cadre de conception de sites Web qui vous permet de faire la même chose. Je vais passer cette étape. [01:01:54] Ce est quelque chose que je serait super confortable avec. Ce est une grande petite table il. Il vous donne la fonction exemple du modèle. Je vais à travers ce parce que je Davin veulent vraiment être en mesure de parler. Si vous avez des questions, se il vous plaît sentir libre. Je serai là après. Il suffit de venir me parler. Avec cela, nous avons statuts HTTP. Et Davin va exploser par ce en 15 minutes. Cela va être génial. [01:02:17] DAVIN: OK. Euh, votre micro? Ouais. Désolé. ALISON: façon de se préparer. DAVIN: Non, je suis prêt. Je suis prêt. Faisons-le. Ce est prêt. D'ACCORD. Désolé. Je ai renversé du café sur moi-même. Je ne sais pas si je suis plus bouleversé que je regarde idiot, ou que je ne ai plus de café. Quoi qu'il en soit, juste une annonce rapide à propos de la feuille que vous les gars ont. Donc cette fiche vous les gars avez ne est pas le fonctionnaire ce qui est sur le quiz. Ce est le fonctionnaire ce qui est sur le quiz. En outre, sur le site, nous disons vous, OK, ce sera sur le quiz. Donc, dans la petite feuille de triche vous avez, non officielle. Et il ya des erreurs sur elle. Donc préférable de ne pas simplement utiliser aveuglément. Donc oui, ce est tout. Donc, nous allons entrer dans ce réel rapide. [01:03:05] Donc états HTTP. Donc ce qui arrive lorsque le site web, tout va bien. Le OK de tout. Tout revient à vous la façon dont vous le souhaitez. Vous obtenez un 200 OK. 301, où avons-nous vu que 301 avant? Attendez, quoi de neuf? Désolé. Nous avons vu i étain conférence lors de la sécurité. Ainsi, durant la sécurité, si David tapé dans http puis essayé d'aller à cs50.net, vous allez voir 301 déplacés. Pourquoi? Parce que ça va rediriger vous automatiquement à notre HTTPS. [01:03:35] Donc 301 déplacés, juste que ce est essentiellement une redirection. Et vous pouvez penser comme ça. Toute des statuts qui commencent par deux de, ceux qui sont comme, OK, de tout l'OK. Toute des statuts qui commencent avec 3, ce sont redirection. Statuts qui commencent par 4, ce qui signifie il ya une sorte d'erreur de client. Statuts qui commencent par 5, ce est une sorte d'erreur de serveur. Donc, vous sorte de rompez les statuts comme ça. Donc pas 304 pas modifiée, de sorte que dans votre server.c p-ensembles, alors disons que vous cat.html chargé. Tout revient, vous obtenez 200s, OK, très bien. [01:04:03] Disons que vous rafraîchi il. Eh bien, à l'intérieur que cat.html, vous avez un JPEG. Eh bien, ce ne est pas JPEG allez obtenir rechargé. Vous ne allez pas poster une autre GET demande au serveur, et puis obtenir toutes ces informations en arrière. Il va juste être-- cette image est va être mis en cache sur votre machine. Et pour que l'image sera un 304. Donc ce ne est pas été modifié. Si vous fermez ensuite, claire les cookies, puis régénérez et essayez de charger cette page à nouveau, vous allez voir 200s. Vous ne allez pas voir que 304. [01:04:28] 400, mauvaise demande, réelle rapide, comme si vous allaient envoyer un Objet JSON au serveur et votre objet JSON était incorrecte, vous verrez quelque chose comme ça. 403, interdit. Quand souhaitez-vous voir un interdit? Probablement Probablement? AUDIENCE: Chmod. DAVIN: Chmod, ouais. Donc, vous ne avez pas réglé autorisations correctement. 404, introuvable. Ce est tout simplement pas là. Donc, si vous tapez dans la mauvaise URL. 500, erreur interne du serveur, le serveur ne était probablement pas configuré correctement. Quelque chose de pas sur votre fin, mais quelque chose sur le côté serveur. Et 503? Beaucoup de gens ont vu 503s dans le dernier p-set. Lorsque cela se produirait? Je ai entendu des chuchotements. [01:05:05] PUBLIC: Quand Google décide que vous êtes un robot. DAVIN: Ouais, quand Google décide vous êtes un robot, vous obtenez 503s. Donc, ce est une surcharge. Si vous avez demandé à partir du serveur trop, ce est généralement temporaire. Et la plupart d'entre vous ont remarqué il. Donc, vous avez vu 503. Vous avez peut-être pris un peu pause, puis les 503s se en allèrent, et tout allait bien. [01:05:20] GABE: Très rapidement, quand pensez-vous les gars EEG 500 en doute ce dernier problème réglé? Oui? [01:05:27] AUDIENCE: Habituellement, si la serveur dispose d'un fichier égaré ou [inaudible] leur machine [inaudible]. [01:05:34] GABE: Donc, ce est peut-être une configuration problème dans votre PHP sur votre serveur. Mais il pourrait être juste quelque chose comme un point-virgule que votre oublié. Si vous tapez PHP, une syntaxe incorrecte pourraient vous obtenir quelque chose comme ça. D'ACCORD? [01:05:46] DAVIN: Cool. Voulez-vous que je fasse tout jusqu'à AJAX? [01:05:51] GABE: [inaudible]. DAVIN: OK. Alors, quel est le DOM? Que signifie pour les DOM? [01:05:55] AUDIENCE: modèle objet de document. DAVIN: Nice. Et pourquoi ne nous le voulions? Impressionnant. Droit, il nous permet tout simplement d'accès le code HTML, accéder à notre page très rapidement. Pourquoi? Parce que nous traitons notre page traiter nos balises HTML, tout traitement comme se ils étaient des objets. Si nous voulons les traiter comme se ils étaient objets, alors que pouvons-nous faire? Eh bien, nous pouvons appeler des fonctions sur eux. Et cela est important pourquoi? Eh bien, parce que nous allons utiliser JavaScript afin de mettre à jour notre HTML, mettre à jour ces objets. Donc, si nous les traitons comme des objets, nous pouvons alors appeler des fonctions sur eux. Je vais entrer dans ce un peu plus quand je vais dans JavaScript mais vous avez tous vu comme document.getElementById. Donc, votre document est élément, obtenir élément par ID, de sorte que vous allez regarder pour certains ID dans une balise HTML. Et puis, vous pouvez faire d'autre pour que quelque chose. Par exemple, comme document.body, alors vous pouvez ajouter enfant. Donc, vous allez trouver le document. Vous avez le document. Vous allez trouver le corps. Vous avez trouvé le corps. Et puis, vous allez appeler une fonction sur elle. Alors ajoutez enfant, et vous pouvez ajouter certains HTML sur la fin l'intérieur de votre corps. Donc, fondamentalement, vous êtes juste traiter comme un objet. Vous traitez HTML balises comme un objet. Et il est très facile et rapide de passer par eux. Mais il vous permet également pour appeler des fonctions sur eux de sorte que vous pouvez manipuler et modifier les éléments. [01:07:04] GABE: Étant donné cela, pourquoi est telle JavaScript une langue agréable d'interagir avec HTML? Les chances sont, quand les gens choisissaient la langue du navigateur, pour le côté client, JavaScript est vraiment sympa, ce est vraiment bon à la manipulation d'objets. Et les objets sont un peu comme les objets qui apparaissent dans le code HTML, il est donc très facile pour JavaScript pour faire ce genre de manipulation. DAVIN: Nice. Alors, voici juste un exemple. Donc, je pense que sur le questionnaire de l'année dernière, ou peut-être il ya deux ans, nous vous a demandé de créer un arbre. Donc, ce est exactement ce que vous feriez. Donc, vous commencez avec document. Et puis vous avez essentiellement il suffit de regarder les étiquettes. Donc, si vous regardez, nous commencer par une balise HTML. Et puis, vous obtenez des indices sur la façon de faire sur la base de l'indentation. Alors la tête sorte de bifurque. Dans la tête, nous avons une autre balise pour le titre. Alors, nous avons une balise de titre. Et à l'intérieur, nous avons une chaîne de caractères. Et donc nous représentons une chaîne dans un cercle. Et toutes les balises sont en carrés. [01:07:54] Et si vous regardez, si nous penser à cela comme un arbre, et disons que HTML est un parent, alors à la tête et le corps vont être frères et sœurs. Ils sont tous les deux vont être les enfants de ce parent. Donc, parce qu'ils sont deux frères et sœurs, ils sont va être une sorte de côté l'autre dans notre modèle d'arbre. Et puis, vous avez essentiellement faire exactement la même chose. Donc, pas difficile, mais nous avons demandé ce genre de questions avant sur le quiz. GABE: Quelqu'un avez des questions à ce jour? Est-il bon? DAVIN: Cool. JavaScript, OK, les bonnes choses. Donc JavaScript, ce est le JavaScript? Eh bien, ce est le JavaScript est-- compliqué, mais ceux-ci sont quelques-uns des faits saillants que vous devriez garder à l'esprit. Premièrement, il est faiblement typé. Qu'est-ce que cela veut dire? Donc PHP était-- ouais, quoi de neuf? [01:08:35] AUDIENCE: Vous ne avez pas explicitement Etat ce type de variable il est. DAVIN: Parfait. Alors il dit que vous ne avez pas à déclarer explicitement le type de variable. Ce est exactement ça. Donc, en C, si je avais int i est égal à 50, puis en PHP, ce est juste comme ça, $ i, est égal à 50. Puis, en JavaScript, ce serait être la décision? Var, non? Ce serait comme var i est égal à 50. Mais vous ne avez pas à être comme, OK, ce est un int. OK, ce est une chaîne. Pas besoin de faire cela. Ce est un langage interprété. Alors qu'est-ce que cela signifie? [01:09:04] Audience: non compilé. [01:09:06] DAVIN: Qu'est-ce que signifie pas compilé? Ouais? [01:09:11] AUDIENCE: Vous ne avez pas de restructurer le code afin qu'elle soit prête pour l'ordinateur pour l'exécuter. Ce est juste pris au moment de la l'exécution et l'ordinateur [inaudible]. DAVIN: Ouais, donc ça va passer par un interprète. Mais vous avez parfaitement raison. Donc, vous ne allez jamais pour le compiler, non? Lorsque vous faisiez votre PHP et le code JavaScript, vous ne avez jamais appelé la compilation. Vous ne avez jamais appelé quelque chose comme faire ou quelque chose comme ça. Ce est parce que ce est interprété. Donc, à chaque fois qu'il passe par navigateur, elle passe par un interprète. Et cela va interpréter juste en temps réel tout de suite pour vous. Quels sont donc les points positifs et négatifs d'avoir un langage interprété et ayant un langage compilé? Donc compiling-- ouais, quoi de neuf? [01:09:50] AUDIENCE: Interprété est plus lente. DAVIN: Dans quel sens? [01:09:57] AUDIENCE: Après vous compiler, vous ne avez pas à faire des mesures supplémentaires pour exécuter il, alors que cette [inaudible]. [01:10:04] DAVIN: Oui, parfait. Donc ce que vous dites est essentiellement que compilation, lorsque vous compilez, vous avez une beaucoup de coûts initiaux, non? Vous allez compiler. Mais une fois que vous compilez, le compilateur va optimiser. Ça va être rapide. Il va essentiellement être aussi rapide que possible. Avec l'interprétation, vous ne avez jamais avoir ce coût initial. Au contraire, il va être un peu plus lent chaque fois que vous l'interprétez. Et vous allez avoir à interpréter chaque fois. Ainsi, au lieu d'avoir ce une coût du temps, maintenant vous êtes allez avoir à interpréter chaque fois que la page se affiche. [01:10:29] Donc interprètes sont bonnes parce vous ne avez pas à le compiler, mais ils sont mauvais en ce que tous les fois que la page se charge, ce est devoir interpréter cette JavaScript. Et ça va fonctionner un peu plus lent que si vous deviez compiler. Vous permet de communicate-- oh, attendez. Utilisé pour manipuler le contenu et l'apparence. Nous avons juste parlé à ce sujet. Il utilise le DOM. AJAX, nous allons entrer dans AJAX dans un peu. Et puis, ce est côté client. Donc PHP est côté serveur. JavaScript est côté client. Quels sont positifs à cela? Il le dit. Ce est plus rapide, non? Parce que vous ne avez pas to-- ce est plus rapide. Vous ne avez pas à communiquer avec un autre appareil. Si vous êtes juste sur votre client, vous n'êtes jamais allez avoir à aller voir ce qui est sur le serveur et ensuite rapport ou quelque chose comme ça. Donc côté client tend à être un peu plus rapide. [01:11:15] GABE: Ouais, mais cette ne signifie pas PHP est plus rapide que JavaScript ou quelque chose de similaire. Ils courent en quelque sorte dans la même vitesse parce qu'ils sont tous les deux langages interprétés. La chose qui est lent ici, ce est la demande. Donc, vous allez effectivement tout le chemin vers le Brésil pour obtenir des informations qui y vit. Mais PHP et JavaScript, ils sorte de courir dans la même vitesse. Ce ne est pas que l'on est plus vite que l'autre. Ce, aussi, question piège ici. Donc JavaScript ne devient jamais code machine, vrai ou faux? [01:11:47] AUDIENCE: Faux. GABE: Faux. Il doit devenir la machine Code parce que le code de la machine est la seule chose que la machine comprend. Même si ce ne est pas compilé, il devient encore code machine parce que l'interprète est juste un programme qui va ligne par ligne et qui se transforme en ligne quelque chose de l'ordinateur comprend. D'ACCORD? Cool. [01:12:08] DAVIN: Voici juste un très basique bonjour programme JavaScript mondiale. Donc, je ne sais pas si-- vous avez vu cette. Mais vous avez juste HTML ici. Et au lieu de réellement mettre le code JavaScript dans les balises de script, de sorte que vous auriez normalement mettre dans la tête. Vous avez des balises de script. Vous déposez là. Tout ce que nous avons fait ici est que nous avons lié in-- donc nous avons relié à un fichier JavaScript comme ça. Et vous avez tous fait cela, non? Ainsi, lorsque vous utilisez jQuery et underscore.js dans le dernier p-jeu, vous ne avez pas des tonnes de code dans vos balises de script, dans votre tête. Vous pourriez le faire, mais à la place vous êtes juste en reliant. Et vous liez dans comme vous le faites avec CSS. Donc, il est tout simplement plus facile à lire de façon votre code ne est pas comme 1000 lignes à long avec des tonnes de fonctions vous pourriez ne pas être utilisé. [01:12:52] Au lieu de cela, vous liez simplement en. Il compartimente il. Ce est comme écrire certains fichiers d'en-tête, et puis y compris ce fichier d'en-tête en C. Pensez-y comme ça. Alors qu'est-ce que faire? Eh bien, cela va fonctionner. Il va alerter. Donc, vous allez obtenir un peu pop up disant monde de bonjour. Question rapide, juste test de cohérence, de sorte que vous voyez ici dans le corps, dire corps, HTML ici. Ce qui vient en premier? Est-ce que je vois corps, HTML ici, ou dois-je vois l'alerte en premier? [01:13:19] AUDIENCE: Alerte. [01:13:20] DAVIN: Droit. Il dit d'alerte. Pourquoi? [01:13:22] AUDIENCE: Parce que vous aller de haut en bas. [01:13:24] DAVIN: Oui. Parfait. Donc, dit-il, vous allez de haut en en bas, ce qui est absolument correct. Vous allez aller de haut en bas. Et en JavaScript, jQuery, vous avez une fonction qui est comme onload, ou prêts, et qui dit, OK, attendre tout cela a chargé HTML. Et puis, appeler le JavaScript. Parce que nous ne avons pas ici, le première chose qui va se passer est que ça va aller de haut en bas. Il va frapper que JS appeler, il va alerter. Après que vous cliquez sur OK, cette alerte disparaît. Ensuite, il va montrer vous le corps HTML ici. Nice. [01:13:54] OK, si juste réel rapide, écrit en JavaScript est super rapide. Pour déclarer une variable, nom de var. Donc, en C, vous avez int i, vous avez de déclarer ce genre de type il est. PHP, $. JavaScript, var. Nous en avons parlé. Très bien, allons-y. [01:14:11] Loops, même chose. Même chose. Les déclarations de fonctions, de sorte comme vous l'avez vu dans C. La seule chose différente est donc quand vous obtenez à d'autres langages de programmation, comme quand vous prenez 51 prochain semestre et vous faites avec OCAML, vous pouvez traiter avec des fonctions anonymes. Donc, ce est exactement ce que vous avez ici. Donc, vous voulez mettre en somme, une sorte de valeur de somme. Mais vous pourriez seulement être faites une fois. Donc, vous ne voulez pas appeler la fonction somme, donner une déclaration de fonction. Au lieu de cela, vous utilisez juste qu'il comme une fonction anonyme. Et vous avez vu cette beaucoup. Vous verrez un exemple de ce en quelques diapositives. Ouais, nous verrons. GABE: Bonne question. Quand pourriez-vous souhaitez utiliser une fonction anonyme ici? Fondamentalement, quand vous voulez quelque chose, comme un événement, de se produire. Alors, quand la souris est cliqué, par exemple, vous voulez une fonction à appeler. Donc, vous passez à l'événement gestionnaire, vous passez à l'événement, en quelque sorte, la fonction vous voulez être appelé. Et ce que vous êtes de passage ce est comme à la fin de la journée, tout un pointeur vers cette instruction, à la fonction. Donc, ce ne est pas comme vous êtes de passage l'ensemble du code, tout comme un pointeur vers la fonction. Et puis, quand quelqu'un clique sur le souris, puis que la fonction est appelée. [01:15:17] Davin: tableaux, de sorte que vous avoir une déclaration de tableau. Ensuite, un tableau pour mettre les choses en. Très rapidement, ce sera cette imprimer? Quel sera le troisième élément être? [01:15:31] AUDIENCE: "JS". [01:15:32] DAVIN: Oui, ce serait «JS». Attendez, revenir en arrière. Quelle est la durée? [01:15:37] AUDIENCE: Trois. DAVIN: Trois, non? Exactement ce que vous pensez. OK, maintenant aller. Tableaux, vous pouvez ajouter des choses pour eux. Ainsi, vous pouvez aller au-delà leurs limites initiales. Juste quelque chose à garder à l'esprit. PHP, JavaScript, ils sont un peu peu plus indulgent en termes de choses comme ça. Objets, très semblable structs en C, beaucoup comme les tableaux associatifs en PHP. Vous avez tous eu l'expérience avec cela. Donc, JSON, quand vous êtes de passage JSON d'avant en arrière dans le p-huit définir, ce est votre objet. [01:16:03] Donc oui, par exemple, exemple réel rapide. Voici un objet. La façon dont vous faites référence à cette objet, si juste réel rapide, disons que je voulais trouver sur, OK, ce est le cours? Et si le nom de l'objet ici est CS50. Et puis si je avais un associative tableau, comment pourrais-je le faire? Je utiliserai vais une clé, non? Je ai donc le nom du tableau. Je ai le support, citations, clé, citations finaux, support d'extrémité, et qui va référencer que élément à l'intérieur de mon tableau associatif. Comment puis-je ai parlé Bien sûr l'intérieur de mon objet? Quelqu'un sait? [01:16:39] AUDIENCE: [inaudible]. [01:16:40] DAVIN: Quoi de neuf? AUDIENCE: CS50.course. DAVIN: Oui, oui. Donc CS50.course. Donc, la façon dont vous faites référence à des choses intérieur d'un objet JSON est avec un point. [01:16:48] AUDIENCE: Vous pouvez également utiliser la syntaxe de tableau. [01:16:53] DAVIN: OK, très bien. [01:16:54] GABE: Vous pouvez également utiliser le support CS50, chaîne, comme guillemets. PUBLIC: Je pense que ce est identique à PHP. GABE: Ce est la même chose. DAVIN: Fine! Mais vous allez voir ce d'autres endroits. Ouais, donc continuer. Ce est ce que je viens de dire. Donc, dans un exemple JavaScript jQuery. Donc, ce est mon DOM, non? Très rapidement, je ai donc une tête, Bonjour tout le monde, le corps. Je ai un bouton. Il dit: «me pousser," donc je veux pousser. Et je veux faire quelque chose quand il est cliqué. Droite, à côté. [01:17:31] Bon, alors ce est ma JavaScript. Donc, jQuery est juste un plus facile façon d'écrire JavaScript. Donc cela, et ce que je vais vous montrer vous la prochaine, va être jQuery, sont identiques. Alors, ils vont faire les mêmes choses. Juste jQuery a tendance à être un peu plus facile. Les gens ont tendance à aimer davantage. Il dispose d'un grand nombre de fonctionnalités. Alors, les gens ont tendance à utiliser jQuery. Vous avez tous utilisé jQuery dans le dernier p-set. Alors, que va ce faire? Quel sera ce JavaScript-- sorte ce est tout simplement le JavaScript. Qu'est-ce que cela? Que faut-il faire? [01:18:03] Alors d'abord, vous voyez la fenêtre onload. Droite? Donc, nous ne avons pas vu cela avant. Donc cela va attendre jusqu'à ce que la fenêtre charges entières. Donc, il va attendre la charge HTML, toutes les images avant qu'il ne fait rien. Donc, disons que notre DOM a été chargé. Tout est là. Alors qu'est-ce qui va se passer? Ouais? [01:18:19] AUDIENCE: Button apparaît. [01:18:22] DAVIN: Le bouton est déjà là. Ouais, donc de la touche déjà là. Mais cela va-à-dire, OK, si je clique sur le bouton, de sorte que le bouton est déjà là, comme ça balise HTML. Attendez, revenir très vite. Cette balise droit ici est va être un bouton déjà. Il ya déjà un bouton. Mais alors, le JavaScript tag, ici, il est dit, OK, je veux pour obtenir l'élément par ID, afin bouton de recherche dit juste, OK, je veux pour cartographier cette variable à ce bouton. Donc, cette variable ne est qu'un moyen plus facile pour accéder à ce bouton. Et je dis, OK, si je clique que touche, donc si je clique sur cet élément, et cet élément se réfère à le bouton, si je clique dessus, alors je veux appeler une fonction. Voici l'un de ceux anonyme fonctions dont nous parlions. [01:19:03] Il suffit d'appeler une fonction. A l'intérieur de cette fonction, essentiellement quelque chose que nous avons vu beaucoup, alerte. Vous cliquez sur le bouton de recherche. Il va avoir essentiellement un bouton. Vous cliquez dessus. Vous obtenez cette alerte. X sur. C'est tout. Ouais? [01:19:16] AUDIENCE: Donc, si vous mettez le script [Inaudible], balise script dans votre code HTML? [01:19:21] DAVIN: Vous pouvez mettre le script tag droit dans la tête parce que vous avez ce onload. Ce est aussi que vous avez un clic. Donc, il va attendre vous cliquez pour quelque chose. Mais onload est juste pour être sûr, à faire que tout se charge dans votre code HTML au préalable. Ouais? Vous voulez dire quelque chose? [01:19:40] GABE: [inaudible]. DAVIN: Ouais. [01:19:42] AUDIENCE: évite donc onload définissant le bouton de recherche de variables simplement en disant document.getElementById Recherche touche dot [inaudible]. [01:19:49] DAVIN: Certainement, mais votre chaîne obtient juste énorme. Exactement, ce est donc juste pour rendre plus facile pour vous, oui. Oui? [01:19:56] AUDIENCE: Où avons-nous créer window.onload? Ou document.ready? [01:19:58] DAVIN: Oui, il ya. Oui, il est, je ai vérifié. [01:20:02] GABE: Pas pour eux de se soucient. [01:20:03] DAVIN: OK, donc je vais pour vous dire de toute façon. Donc, fondamentalement, juste en général, de sorte window.onload attend jusqu'à ce que votre DOM, tous les votre code HTML, des charges. Il attend jusqu'à ce que votre images charge. Il attend que tout charges. document.ready, il vient attend que vos charges DOM. Une fois que le HTML est tous là, une fois votre DOM est là, commence à courir. Ce est la seule différence. [01:20:23] GABE: la santé mentale rapide vérifier ici. Donc cela peut être vu sorte de comme une ligne de code, non? Parce que ce est window.onload est égal à un tas de trucs. Lorsque JavaScript lit ceci, vrai ou faux, la fonction est exécuté. Faux. D'ACCORD? Qu'est-ce qui se passe ici, vous êtes simplement de passage cette fonction comme un fonctions anonymes à window.onload. Et puis, quand ça va de se effectivement exécutées? Lorsque les charges de fenêtres. Ce est un événement. Donc, ce est jus t chose que nous sommes parler plus tôt, non? Ainsi, lorsque l'événement se produit, la fonction passe. Même chose avec le onclick. [01:20:59] DAVIN: OK, donc quelqu'un a pris l'écart document.ready. Mais ce sera la same-- exacte AUDIENCE: Le symbole du dollar, ce est un document.ready. Ce est un raccourci. [01:21:07] DAVIN: Oh, ce est? Ok, donc ce moyen document.ready, raccourci. Mais ce est la même que window.onload sauf pour ce que peu de différence Je vous ai parlé. Et ce est jQuery. Donc, ce est exactement la même chose-- ce est JavaScript. Ce est just-- certaines personnes pensent qu'il se agit comme un poids plus léger, la version élégant qui a beaucoup de fonctionnalités que vous utiliserez probablement. Donc, ce fait exactement la même chose. [01:21:34] Donc, les choses au type de point de sortie. Donc, dans l'autre exemple, nous eu document.getElementById, donc nous avons eu cette longue chaîne qui se passe pour obtenir l'élément par tous les ID dont il dispose. Ce est remplacé par cet appel ici. Donc, vous voyez le signe du dollar, alors vous voyez devis, hashtag. Hashtag est toujours un sélecteur. Il dit, OK, cela a à voir avec un ID. Quel est le sélecteur pour une classe? [01:21:56] AUDIENCE: Dot. [01:21:57] DAVIN: Dot, à droite. Si vous allez juste sélectionner une étiquette, ce est quoi? Ce est juste l'étiquette, exactement. Et vous pourriez l'utiliser ici, aussi bien. [01:22:05] GABE: Et par tag, nous entendons comme div, par exemple, ou la tête. [01:22:08] DAVIN: le corps ou p ou quelque chose comme ça, oui. Donc ici, OK, au lieu de dire document.getElementById, ce est juste exactement la même chose. Juste à jQuery, ce est plus court. Il est donc plus simple. Alors, pas plus onclick, il suffit de cliquer. fonction jQuery, appeler cette fonction. Alert est exactement la même. Donc, ce est un peu plus petit, ou peu plus courte, un petit peuple bit-- pensent ce est un peu plus facile à écrire, un peu plus facile à comprendre. Mais ce ne est jQuery. Beaucoup de gens obtenir un peu peu confus et inquiets et ils pensent, OK, jQuery est différent de JavaScript. Je dois me rappeler ces deux choses différentes. Ce n'est pas. Je veux dire, ce est une syntaxe différente. Mais jQuery est JavaScript. Ce est juste une apparence meilleure version pourrait être plus facile à comprendre que les gens utilisent. GABE: Ouais, pour être honnête, ce signe du dollar que vous voyez dans jQuery, ce est juste la nom d'une fonction qui définit jQuery. Il n'a rien de spécial. Est-Ce est juste le nom d'une fonction, Comme à peu vous pouvez définir le signe dollar. [01:23:03] DAVIN: Ouais, donc parlé. Certaines choses utiles. Je cherchais retour aux vieilles quiz. Dans les deux dernières quiz, ils ont eu à utiliser ce genre de choses. Donc document.ready, afin assurez-vous que tout est chargé avant de commencer à faire des choses. Sélectionnez un ID, ou sélectionnez une classe, ce serait tout simplement devis dot être une certaine classe, Fin de citation. Proposez, donc si vous êtes soumettant un formulaire et appel cette fonction après la forme présente. Valeur, alors disons que je avais une forme la soumission, comme un nom d'utilisateur, un email, peu importe. Je ai eu une zone de texte. Donc, je suis en tapant dans cette zone de texte. Eh bien, si vous voulez obtenir la valeur sortir de cette zone de texte, vous utilisez dot val. Et puis, ici-bas, dot HTML est le même ce est comme document de dot getElementByID dot innerHTML. Alors que cela va revenir vous le code HTML que ID. Ici, il suffit d'utiliser une certaine ID ou tout autre point HTML. Ce obtiendrez le HTML à partir de cet élément. Si vous vouliez changer alors que HTML, vous pouvez passer quelque chose. Donc, vous seriez comme HTML point, puis à l'intérieur, citations, nouvelle HTML ou quelque chose. [01:24:05] GABE: OK, donc AJAX. Je aime vraiment comprendre AJAX vraiment bien. Donc, je veux que vous les gars à AJAX comprendre vraiment bien. Parce que si vous le faites, vous êtes assez bien aller de comprendre tout ce qui a à voir avec HTTP, PHP, JavaScript parce que tout vient ainsi en AJAX. AJAX ne est pas une langue. AJAX est une technique. Et il utilise beaucoup de différents outils. AJAX signifie XML asynchrone JavaScript. Ainsi, le procédé, la langue, les données. [01:24:36] Donc, la langue principale que nous utilisons en AJAX pour déclencher tout et de gérer tout plus tard est JavaScript. Ce est pourquoi il se rapporte très proche de JavaScript. Et puis asynchrone est parce que nous ne le faisons pas tout à la fois lorsque nous chargement de la page. Ce est la chose que nous pouvons faire des choses en quelque sorte dans parallèle. L'idée principale derrière AJAX est que vous voulez pour obtenir des informations spécifiques. Par exemple, lorsque vous tapez nouvelle nom d'utilisateur lorsque vous enregistrez un nom d'utilisateur, mon nom d'utilisateur est abc123. Et puis, à la fin de la formulaire, vous devez cliquer sur Soumettre. Et il a dû aller au serveur, puis vérifier si la base de données, abc123 est déjà là. Et si ce est déjà là, il dit, nom déjà dans la base de données utilisateur. Et ils, vous devez remplir le formulaire en entier à nouveau. Et ce était vraiment, vraiment mauvais. [01:25:23] Et puis les gens disent, OK, pourquoi ne pouvons-nous simplement faire une petite requête HTTP pour vérifier tout pour voir si cet utilisateur est dans la base de données avant que l'utilisateur devait soumettre le formulaire en entier? Ainsi, par exemple, lorsque le l'utilisateur a fini de taper abc123, disons simplement aller sur le serveur un peu bits et juste obtenir un vrai ou faux à partir du serveur pour voir si ce est un nom d'utilisateur valide ou non. OK, donc ce est l'un des principaux utilise des AJAX encore de nos jours. [01:25:49] DAVIN: Alors très vite, dans un appel Ajax jQuery, vous pouvez indiquer que vous voulez qu'il soit synchrone. Vous ne devriez pas faire cela. Mais vous pouvez le faire. Et si vous l'avez fait, ce qui se passerait? Eh bien, par exemple, lorsque vous êtes prendre des nouvelles ou peu importe, votre navigateur va juste attendre jusqu'à ce que toute la communication est terminée au lieu de vous laisser faire d'autres les choses après vous cliquez dessus. [01:26:14] GABE: Ce ne est plus passant. Oh mon Dieu. Désolé! Ouaip. "Dans le passé, le nécessaire pour client demande la totalité du contenu d'un site web ". Ce est ce que je ai dit. Elle nous permet d'envoyer GET ou POST supplémentaires demandes sans avoir de recharger notre navigateur. Ainsi, à la fin de la journée, nous sommes faire réellement un requêtes HTTP ici en utilisant JavaScript. Parce qu'avant, nous ne avons utilisé JavaScript modifier le code HTML qui est déjà venu. Et maintenant, nous pouvons l'utiliser pour se interfacer avec les serveurs ainsi les web. La façon dont cela se passe est que nous avons le client. Davin est un client. Et il a tout le JavaScript courir parce que le HTML est muet. JavaScript est intelligent. Donc Davin Davin a sa puce partie et sa part muet. Il va utiliser sa part à puce maintenant. Il va utiliser JavaScript de demande, par exemple, si abc123 est en la base de données ou non. [01:27:04] Donc Davin, se il vous plaît, il vous suffit me envoyer une requête HTTP. Merci. Alors qu'il vient d'envoyer une requête HTTP. Vous voyez ça? Et ce est juste de la même façon que toute requête HTTP est envoyée. Le navigateur, Google Chrome ou quelque chose, est allez voir que Davin de essayez d'envoyer une requête HTTP, va aider HM un peu. Et cela va aller tout le chemin vers le serveur. Maintenant, le serveur va devoir PHP ici, ou toute autre langue. Tout comme dans une requête HTTP normal. Ce est à peu près une requête HTTP normal. [01:27:31] Ensuite, le serveur va dire, OK, Davin me veut vérifier si ce abc123 est dans la base de données. Allez parler au modèle. Le modèle dit qu'il ne est pas. abc123 est un bon nom d'utilisateur. Ensuite, le serveur web va utiliser PHP pour rendre une certaine forme de fichier. Il pourrait être littéralement juste un fichier qui contient «oui», ou «non, ou quelque chose comme ça. Il pourrait être ne importe quel fichier. [01:27:54] Il pourrait être que je vais Davin envoyer une photo d'un canard si ce est dans la base de données et envoyer une photo d'un hamster si elle ne est pas dans la base de données. Ce serait sorte de stupide, mais cela va fonctionner. OK, donc je envoie un canard à l'Davin. Davin a un canard. Et maintenant, qui va pour gérer le canard? Smart partie de Davin nouveau, JavaScript afin, non? JavaScript a envoyé le demande, et JavaScript va recevoir la demande et l'interpréter dans une certaine forme. [01:28:22] Et dans ce sens, il va dire, OK, si canard puis je suis bon. Si hamster, alors je vais à-dire, non, le nom d'utilisateur déjà existe dans la base de données. Mais généralement, vous n'êtes pas va envoyer un canard. Vous allez envoyer quelque chose de légèrement plus intelligent. Et ce que nous utilisons est XML. Et plus récemment, nous utilisons JSON. JSON est juste JavaScript Object Notation, qui est, fondamentalement, vous obtenez une totalité de l'objet JavaScript. Et vous le mettez dans un fichier, juste comme cet objet CS50 que vous les gars ont vu. Vous le mettez dans un fichier, et vous envoyez la parole à Davin. [01:28:53] Donc dans ce cas, je voudrais faire un objet JavaScript et dire simplement, l'utilisateur existe, oui. Ou utilisateur existe, non. Et l'envoyer de nouveau à lui. Et pourquoi JSON? Parce que la personne Qui est reçoive ce est allez utiliser JavaScript pour gérer la réponse. Et JavaScript fonctionne si bien parce ça se appelle JavaScript Object Notation. Droite? Donc, il peut simplement appeler une fonction et obtenir ce bel objet à partir de la réponse. Et puis, il va savoir si que l'utilisateur se trouve dans la base de données ou non. [01:29:22] Donc, vous voyez, tout cela venir ensemble dans le serveur web, et puis il ya une HTTP à la demande et une réponse HTTP et tout. Donc, assurez-vous les gars comprendre cet appel AJAX car il vous aide à comprendre tous des concepts que nous parlons. [01:29:37] Alors, voici un exemple d'AJAX avec jQuery. Et ici, nous faisons avec get JSON. Donc, nous ne essayons pas de faire une image d'un chat ici, ou un canard. Nous essayons d'obtenir un fichier JSON. Et puis nous attendons ce est fait, point fait. Cela signifie que je suis en attente de la réponse. Il pourrait prendre un peu de temps. Alors, vous voyez un peu le chargement. Si vous voulez faire de votre site web. Donc dot fait, et puis quoi qui se passe quand ce est fait? Vous passez un anonyme fonction, tout comme nous l'avons vu. Parce fait est un événement, juste comme cliquer sur une souris ou autre, pour jQuery. Donc, vous passez dans cette fonction avec données, textes, le statut et jqXHR. Et dans le fond, ce est seulement certaines variables que vous pouvez utiliser plus tard pour avoir l'état de la requête HTTP, les données qu'il va d'envoyer de nouveau à vous. Ainsi donc, vous pouvez plus tard interpréter et faire quelque chose constructif avec elle. Et si elle échoue, quand pourrait-il échouer? Eh bien, quand la requête HTTP donne Vous 500 ou quelque chose comme ça. Ensuite, il va vous dire la état, quel genre d'échec qui était, et toutes sortes de choses. Vous devez vous assurer pour gérer les deux cas, sinon le programme devient fou. [01:30:42] DAVIN: Donc oui, ce est exactement ce que vous avez vu sur votre dernier p-set. L'appel AJAX est réelle dans le JSON get. Ce est l'appel. Et puis, ce est comme dot fait il vérifie si ce est un succès. Si elle est réussie, vous voulez de faire quelque chose avec les données. Vous obtenez en retour de celle Données de demande JSON. Ce est ce que vous obtenez en retour. Donc, si vous vous souvenez de votre P-set, beaucoup d'entre vous étaient comme support de données i ou autre, lien de dot ou le titre. Tout ce qui est de revenir à partir de cette JSON, quelle que soit les champs sont dans cet objet JSON, ce est ce que vous obtenez en arrière. Données est ce que vous obtenez en arrière. le statut du texte, juste quelque chose qui vous permet de savoir ce qui est arrivé. Et puis, le jqXHR, ce est juste la requête HTTP XML jQuery. Ce est juste comme un objet. Et puis échouer, tout comme Gabe dit. GABE: Dans notre petit exemple de abc123 juste pour vérifier si ce est dans la base de données ou non, les données seraient quelque chose que vous ferait, si le nom d'utilisateur de points de données existe, qui est ce que votre PHP généré pour vous, si le nom d'utilisateur de points de données existe, Je vais alerter, utilisateur nom existe déjà. Sinon, je vais juste laisser le utilisateur procéder complétant le formulaire. OK, la sécurité, cool. [01:31:50] DAVIN: me veux? [01:31:52] GABE: Je aime celui-ci. Donc, quelque chose qui semble familier. Nous avons presque terminé. Donc, ce est juste l'exemple vous les gars ont vu en classe. Vous utilisiez argv1 ici. Ce est comme un argument de ligne de commande. Et nous MEM copie que dans un tampon de taille 12. Quel est le problème ici? Débordement de tampon! Parce que nous avons un tampon de taille 12. argv1 pourrait avoir une taille de deux milliards de dollars. Nous ne faisons pas de vérifications de limites. On peut donc copier beaucoup de mémoire. Et nous serons particulièrement mal à ce sujet. Que pourrions-nous faire ce est très, très moyen dans ce cas? Oui? PUBLIC: Une partie des deux milliards d'choses contient du code exécutable qui retourne [Inaudible]. GABE: Exactement. Donc, ce est le genre de chose que les gens utilisent jailbreaker un iPhone, par exemple. Donc, ce genre de chose. Parce que vous pouvez juste faire le dispositif exécuter le code que vous aimez. La solution, de sorte que la solution est facile. Il suffit de vérifier les limites. Vous vérifiez pour nulle parce nous vérifions toujours null lorsque nous traitons avec des cordes. Et puis, vous prenez le longueur de chaîne avant. Et si la chaîne longueur est une chaîne valide longueur, qui est à l'intérieur de 0 et 12, alors nous sommes bien. [01:33:03] DAVIN: Si vous ne cochez pas null, très rapide, ce qui va arriver? Il va SEG faute. Pourquoi il SEG faute? Parce que vous appelez strlen sur null. GABE: Ouais. Vrai ou faux, en utilisant une mot de passe est une bonne idée. [01:33:19] AUDIENCE: Faux. [01:33:20] GABE: Faux. Utilisez des mots de passe, et de nombreux grands, longs. icônes cadenas assurer la sécurité. [01:33:26] AUDIENCE: Faux. [01:33:27] GABE: Faux. Il ne veut rien dire. Ce est juste une icône. SSL protège contre un homme dans l'attaque du milieu. AUDIENCE: Faux. GABE: Faux. OK, donc tous ceux qui sont fausses. Nice. [Inaudible] Vous voulez parler à ce sujet? Votre tour. Davin: Types d'attaques, man in the middle. Qu'est-ce qu'un homme dans l'attaque du milieu? AUDIENCE: [inaudible]. DAVIN: Si vous envoyez un HTTP demande, ils pourraient le faire, non? Mais si vous envoyez HTTPS, ils ne sera probablement pas capable de faire cela. Il ya beaucoup de points le long de votre connexion. Vous avez routeurs. Vous avez des serveurs DNS. Si quelqu'un est physiquement capable de voyez ce que vous envoyez, si quelqu'un est capable de effectivement obtenir entre vous, le client et le serveur, et est en mesure de voir ce que vous envoyez, ce est un homme dans l'attaque du milieu. Donc, pour voir ce que vous essayez d'obtenir de le serveur, ou est capable de see-- pire, vous pourriez être en mesure de voir cookies ou quelque chose comme ça. [01:34:16] Ainsi, par exemple, si vous ne utilisez pas SSL, il pourrait être en mesure de voir Votre session cookies d'identification. Et cela se appelle le détournement de session parce qu'il voit vos cookies d'identification, puis il est capable d'aller à cette site Web et faire passer pour vous. Parce que, tout comme dans PHP, ne oubliez pas quand nous identifié, que faisons-nous? Nous avons mis l'ID de session égal à ID. Alors que vous identifie. Ce est pourquoi vous pouvez voir votre portefeuille et le portefeuille de pas tout le monde. [01:34:38] Eh bien, si je suis en mesure d'obtenir ce cookie, alors je peux connecter sur cette page. Et puis, je peux juste voir votre stuff et commencer à acheter et vendre des choses. Donc, ce est le détournement de session. Mais vous ne devriez pas être en mesure de sorte que vous to-- peut utiliser l'homme dans l'attaque milieu même si elles sont en utilisant SSL. Mais vous ne devriez pas être en mesure de. Se ils utilisent SSL, vous ne pouvez pas les détournements de session. Pourquoi? Parce que tout est crypté, droit? se il est crypté, et je suis toujours un homme dans le milieu, je reçois toujours vos données. C'est très bien. Mais il est crypté. Donc, je ne peux pas vraiment l'utiliser. Donc, ce est deux. [01:35:09] Très rapidement, la demande cross site faux. Ce est juste se il ya un lien et ce lien fait quelque chose que vous ne pensez pas qu'il devrait faire. Ainsi, par exemple, si la liaison était va acheter des actions ou vendre des actions, et vous ne saviez pas que. Vous avez cliqué sur le lien, envoyé une demande, acheté ou quelque chose que vendu vous ne avez pas l'intention de faire. Ce est cela. [01:35:25] Cross site scripting, alors voici, vous êtes de passage dans la via variable q, au lieu de passer dans une sorte de la valeur, peut-être q est comme un nom. Donc, au lieu de passer q égaux Davin ou quelque chose comme ça, si vous ne utilisez pas HTML les caractères spéciaux, si vous ne échappent pas à ce pour se assurer que ce est OK, alors je pourrais passer à la place, disons ici que je dis impression ou quelque chose comme ça, alors je pourrais passer ici un appel de script. [01:35:51] Alors, au lieu de juste obtenir une variable, Je voudrais ensuite exécuter cet appel de script. Donc l'intérieur ce script appeler, que fait-il? emplacement de point du document, que ça va modifier l'emplacement du document. Donc, je vais rediriger à un autre endroit. Il a appelé méchant dans cet exemple, très bon. Impossible de trouver le mot. Et puis, ce qui est encore pire, ce est que je vais pour ensuite définir cookies, qui est un peu variables que je ai dans ce site. Je vais le mettre égale au cookie document de points. Par conséquent, je vais pour voler votre cookie. Et je vais rediriger certaines informations à un site Web que vous ne devriez pas être accédez. Et tout cela se produit parce que vous êtes pas échapper ce que vous avez vu. Ouais? [01:36:29] AUDIENCE: Donc, juste pour le préciser, ce est vulnerable.com que est vulnérable à ce. Donc, ce lien peut apparaître sur une page donnée. Quelqu'un clique dessus, va à vulnerable.com. Vous avez un cookie pour vulnerable.com. Disons que Facebook est vulnérables, afin facebook.com. Vous avez votre cookie Facebook. Ce que ce est fait, vous êtes va facebook.com, il est immédiatement redirigeant vous badguy.com, mais y compris les informations de votre cookie. Donc, ce est une redirection rapide, mais votre cookie Facebook est inclus avec cette redirection, et ce est la façon dont ils [inaudible]. GABE: Ouais, il ya des choses très moyennes que les gens peuvent faire si il ya cette. Par exemple, si autorisé Facebook tout le monde pour changer votre nom d'utilisateur, et ils ne ont fait aucun vérifications de bonne santé, de sorte que vous pourrait insérer une chose que JavaScript change votre image à un hamster. Et qui insère le même JavaScript dans tout le monde qui consulte votre page. Donc tout le monde qui voit votre page a la même chose dans le nom d'utilisateur. Et parce que ce est un virus, il se étend de façon exponentielle. DAVIN: Nous allons passer la dernière une, puis nous aurons terminé. Donc, ce est juste un autre exemple. Donc, ce est qu'ils ne sont pas échapper à leur table SQL. Ainsi, vous pouvez laisser tomber. Donc, vous voulez échapper des choses. Ce était l'exemple précédent avec le site scripting croix. Désolé, nous avons couru un peu tard. Demain, désolé! Demain, nous avons des heures de bureau. Donc, les heures de bureau dans Cabbot 8h00-11:00. Les heures de bureau sont strictement pour des questions de quiz.