<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bryan C Guner</title>
    <description>The latest articles on DEV Community by Bryan C Guner (@bgoonz).</description>
    <link>https://dev.to/bgoonz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F512591%2Fa7c019e4-aa2a-4bc6-8572-8c714ee73bd7.jpeg</url>
      <title>DEV Community: Bryan C Guner</title>
      <link>https://dev.to/bgoonz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bgoonz"/>
    <language>en</language>
    <item>
      <title>Disorganized List Of Everything A New Web Developer Needs To Know</title>
      <dc:creator>Bryan C Guner</dc:creator>
      <pubDate>Tue, 05 Apr 2022 16:05:19 +0000</pubDate>
      <link>https://dev.to/bgoonz/disorganized-list-of-everything-a-new-web-developer-needs-to-know-1p3o</link>
      <guid>https://dev.to/bgoonz/disorganized-list-of-everything-a-new-web-developer-needs-to-know-1p3o</guid>
      <description>&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/vdxzf"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codesandbox</category>
    </item>
    <item>
      <title>Tree Data Structure 🌲🌴🌳🎋</title>
      <dc:creator>Bryan C Guner</dc:creator>
      <pubDate>Wed, 16 Feb 2022 18:21:32 +0000</pubDate>
      <link>https://dev.to/bgoonz/tree-data-structure-3hm9</link>
      <guid>https://dev.to/bgoonz/tree-data-structure-3hm9</guid>
      <description>&lt;h3&gt;
  
  
  The Tree data structure (&lt;strong&gt;&lt;em&gt;In Javascript&lt;/em&gt;&lt;/strong&gt;)
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;The #data-structures series is a collection of posts about reimplemented data structures in JavaScript.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Definition
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;A Tree is a widely used data structure that simulates a hierarchical tree structure, with a root value and subtrees of children with a parent node. A tree data structure can be defined recursively as a collection of nodes (starting at a root node), where each node is a data structure consisting of a value, together with a list of references to nodes (the "children"), with the constraints that no reference is duplicated, and none points to the root node. &lt;strong&gt;From&lt;/strong&gt; &lt;a href="https://en.wikipedia.org/wiki/Tree_(data_structure)"&gt;&lt;strong&gt;Wikipedia&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Complexity
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Average&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Access&lt;/td&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;Insertion&lt;/td&gt;
&lt;td&gt;Deletion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;To get a full overview of the time and space complexity of the Tree data structure, have a look to this excellent &lt;a href="http://bigocheatsheet.com"&gt;Big O cheat sheet&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Tree&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;Tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;toNodeData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;parent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;toNodeData&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;findBFS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;toNodeData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Root node is already assigned&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;Tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;remove&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;splice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;Tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;contains&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;findBFS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;Tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;findBFS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;Tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_preOrder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_preOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;Tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_postOrder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_postOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;Tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;traverseDFS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;_&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_preOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;Tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;traverseBFS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;Tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;print&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;No root node found&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;newline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;|&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newline&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;newline&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newline&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;Tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;printByLevel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;No root node found&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;newline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newline&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;newline&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newline&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;tree&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Tree&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ceo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cto&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ceo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dev1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cto&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dev2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cto&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dev3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cto&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cfo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ceo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;accountant&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cfo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cmo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ceo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;print&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; ceo | cto cfo cmo | dev1 dev2 dev3 accountant&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;printByLevel&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;  &lt;span class="c1"&gt;// =&amp;gt; ceo \n cto cfo cmo \n dev1 dev2 dev3 accountant&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tree contains dev1 is true:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dev1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; true&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tree contains dev4 is false:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dev4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; false&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--- BFS&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;traverseBFS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; ceo cto cfo cmo dev1 dev2 dev3 accountant&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--- DFS preOrder&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;traverseDFS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;preOrder&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; ceo cto dev1 dev2 dev3 cfo accountant cmo&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--- DFS postOrder&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;traverseDFS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;postOrder&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; dev1 dev2 dev3 cto accountant cfo cmo ceo&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cmo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;print&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; ceo | cto cfo | dev1 dev2 dev3 accountant&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cfo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;print&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; ceo | cto | dev1 dev2 dev3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;












</description>
    </item>
    <item>
      <title>What is a relational database?</title>
      <dc:creator>Bryan C Guner</dc:creator>
      <pubDate>Sat, 11 Dec 2021 08:03:11 +0000</pubDate>
      <link>https://dev.to/bgoonz/what-is-a-relational-database-523f</link>
      <guid>https://dev.to/bgoonz/what-is-a-relational-database-523f</guid>
      <description>&lt;h2&gt;
  
  
  What is a relational database?
&lt;/h2&gt;

&lt;p&gt;Data stored as row records in tables. Imagine a spreadsheet with column&lt;br&gt;
headers describing the contents of each column, and each row is a&lt;br&gt;
record.&lt;/p&gt;

&lt;p&gt;A database can contain many tables. A table can contain many rows. A row&lt;br&gt;
can contain many columns.&lt;/p&gt;

&lt;p&gt;Records are related to those in different tables through common columns&lt;br&gt;
that are present in both tables.&lt;/p&gt;

&lt;p&gt;For example, an &lt;code&gt;Employee&lt;/code&gt; table might have the following columns in&lt;br&gt;
each record:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Employee
    EmployeeID  FirstName  LastName  DepartmentID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;And a &lt;code&gt;Department&lt;/code&gt; table might have the following columns in each&lt;br&gt;
record:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Department
    DepartmentID  DepartmentName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Notice that both &lt;code&gt;Employee&lt;/code&gt; and &lt;code&gt;Department&lt;/code&gt; have a &lt;code&gt;DepartmentID&lt;/code&gt;&lt;br&gt;
column. This common column &lt;em&gt;relates&lt;/em&gt; the two tables and can be used to&lt;br&gt;
&lt;em&gt;join&lt;/em&gt; them together with a &lt;em&gt;query&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The structure described by the table definitions is known as the&lt;br&gt;
&lt;em&gt;schema&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Compare to NoSQL databases that work with key/value pairs or are&lt;br&gt;
document stores.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Relational_database"&gt;Relational Database at Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/NoSQL"&gt;Non-relational (NoSQL) databases at Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Relational vs NoSQL
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;NoSQL&lt;/em&gt; is a term that refers to non-relational databases, most usually&lt;br&gt;
document store databases. (Though it can apply to almost any kind of&lt;br&gt;
non-relational database.)&lt;/p&gt;

&lt;p&gt;MongoDB is a great example of a NoSQL database.&lt;/p&gt;
&lt;h3&gt;
  
  
  When Do You Use NoSQL Versus a Relational Database?
&lt;/h3&gt;

&lt;p&gt;Unfortunately, there are no definitive rules on when to choose one or&lt;br&gt;
the other.&lt;/p&gt;

&lt;p&gt;Do you need ACID-compliance? Consider a relational database.&lt;/p&gt;

&lt;p&gt;Does your schema (structure of data) change frequently? Consider NoSQL.&lt;/p&gt;

&lt;p&gt;Does absolute consistency in your data matter, e.g. a bank, inventory&lt;br&gt;
management system, employee management, academic records, etc.? Consider&lt;br&gt;
a relational database.&lt;/p&gt;

&lt;p&gt;Do you need easy-to-deploy high-availability? Consider NoSQL.&lt;/p&gt;

&lt;p&gt;Do you need transactions to happen atomically? (The ability to update&lt;br&gt;
multiple records simultaneously?) Consider a relational database.&lt;/p&gt;

&lt;p&gt;Do you need read-only access to piles of data? Consider NoSQL.&lt;/p&gt;
&lt;h2&gt;
  
  
  PostgreSQL
&lt;/h2&gt;

&lt;p&gt;PostgreSQL is a venerable relational database that is freely available&lt;br&gt;
and world-class.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.postgresql.org/"&gt;https://www.postgresql.org/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  SQL, Structured Query Language
&lt;/h2&gt;

&lt;p&gt;SQL ("sequel") is the language that people use for interfacing with&lt;br&gt;
relational databases.&lt;/p&gt;
&lt;h3&gt;
  
  
  Create a table with CREATE TABLE
&lt;/h3&gt;

&lt;p&gt;A database is made up of a number of tables. Let's create a table using&lt;br&gt;
SQL in the shell. Be sure to end the command with a semicolon &lt;code&gt;;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;(Note: SQL commands are often capitalized by convention, but can be&lt;br&gt;
lowercase.)&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ psql
psql (10.1)
Type "help" for help.

dbname=&amp;gt; CREATE TABLE Employee (ID INT, LastName VARCHAR(20));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Use the &lt;code&gt;\dt&lt;/code&gt; command to show which tables exist:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; CREATE TABLE Employee (ID INT, LastName VARCHAR(20));
CREATE TABLE
dbname=&amp;gt; \dt
        List of relations
Schema |   Name   | Type  | Owner 
--------+----------+-------+-------
public | employee | table | beej
(1 row)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Use the &lt;code&gt;\d&lt;/code&gt; command to see what columns a table has:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; \d Employee
                        Table "public.employee"
    Column    |         Type          | Collation | Nullable | Default 
--------------+-----------------------+-----------+----------+---------
 id           | integer               |           |          | 
 lastname     | character varying(20) |           |          | 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Create a row with INSERT
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; INSERT INTO Employee (ID, LastName) VALUES (10, 'Tanngnjostr');
INSERT 0 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;You can omit the column names if you're putting data in every column:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; INSERT INTO Employee VALUES (10, 'Tanngnjostr');
INSERT 0 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Run some more inserts into the table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;Employee&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Alice'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;Employee&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Bob'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;Employee&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Charlie'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;Employee&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Dave'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;Employee&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Eve'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Read rows with SELECT
&lt;/h3&gt;

&lt;p&gt;You can query the table with &lt;code&gt;SELECT&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Query all the rows and columnts:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; SELECT * FROM Employee;
 id |  lastname   
----+-------------
 10 | Tanngnjostr
 11 | Alice
 12 | Bob
 13 | Charlie
 14 | Dave
 15 | Eve
(6 rows)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;With &lt;code&gt;SELECT&lt;/code&gt;, &lt;code&gt;*&lt;/code&gt; means "all columns".&lt;/p&gt;

&lt;p&gt;You can choose specific columns:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; SELECT LastName FROM Employee;
  lastname   
-------------
 Tanngnjostr
 Alice
 Bob
 Charlie
 Dave
 Eve
(6 rows)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And you can search for specific rows with the &lt;code&gt;WHERE&lt;/code&gt; clause:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; SELECT * FROM Employee WHERE ID=12;
 id | lastname 
----+----------
 12 | Bob
(1 row)

dbname=&amp;gt; SELECT * FROM Employee WHERE ID=14 OR LastName='Bob';
 id | lastname 
----+----------
 12 | Bob
 14 | Dave
(2 rows)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Finally, you can rename the output columns, if you wish:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;Employee&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LastName&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;
    &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Employee&lt;/span&gt;
    &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="n"&gt;LastName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'Bob'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

 &lt;span class="n"&gt;Employee&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; 
&lt;span class="c1"&gt;-------------+----------&lt;/span&gt;
     &lt;span class="mi"&gt;12&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Bob&lt;/span&gt;
     &lt;span class="mi"&gt;14&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Dave&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Update rows with UPDATE
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;UPDATE&lt;/code&gt; command can update one or many rows. Restrict which rows&lt;br&gt;
are updated with a &lt;code&gt;WHERE&lt;/code&gt; clause.`&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; UPDATE Employee SET LastName='Harvey' WHERE ID=10;
UPDATE 1

dbname=&amp;gt; SELECT * FROM Employee WHERE ID=10;
 id | lastname 
----+----------
 10 | Harvey
(1 row)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You can update multiple columns at once:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; UPDATE Employee SET LastName='Octothorpe', ID=99 WHERE ID=14;
UPDATE 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Delete rows with DELETE
&lt;/h3&gt;

&lt;p&gt;Delete from a table with the &lt;code&gt;DELETE&lt;/code&gt; command. Use a &lt;code&gt;WHERE&lt;/code&gt; clause to&lt;br&gt;
restrict the delete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CAUTION!&lt;/strong&gt; If you don't use a &lt;code&gt;WHERE&lt;/code&gt; clause, all rows will be deleted&lt;br&gt;
from the table!&lt;/p&gt;

&lt;p&gt;Delete some rows:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; DELETE FROM Employee WHERE ID &amp;gt;= 15;
DELETE 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Delete &lt;strong&gt;ALL&lt;/strong&gt; rows (&lt;em&gt;Danger, Will Robinson!&lt;/em&gt;):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; DELETE FROM Employee;
DELETE 4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Deleting entire tables with DROP
&lt;/h3&gt;

&lt;p&gt;If you want to get rid of an entire table, use &lt;code&gt;DROP&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WARNING!&lt;/strong&gt; There is no going back. Table will be completely blown&lt;br&gt;
away. Destroyed ...by the Empire.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; DROP TABLE Employee;
DROP TABLE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  The &lt;code&gt;WHERE&lt;/code&gt; Clause
&lt;/h2&gt;

&lt;p&gt;You've already seen some examples of how &lt;code&gt;WHERE&lt;/code&gt; affects &lt;code&gt;SELECT&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;UPDATE&lt;/code&gt;, and &lt;code&gt;DELETE&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Normal operators like &lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;=&lt;/code&gt;, &lt;code&gt;&amp;lt;=&lt;/code&gt;, &lt;code&gt;&amp;gt;=&lt;/code&gt; are available.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
SELECT * from animals&lt;br&gt;
    WHERE age &amp;gt;= 10;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;code&gt;AND&lt;/code&gt;, &lt;code&gt;OR&lt;/code&gt;, and Parentheses
&lt;/h3&gt;

&lt;p&gt;You can add more boolean logic with &lt;code&gt;AND&lt;/code&gt;, &lt;code&gt;OR&lt;/code&gt;, and affect precedence&lt;br&gt;
with parentheses:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
SELECT * from animals&lt;br&gt;
    WHERE age &amp;gt;= 10 AND type = 'goat';&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
SELECT * from animals&lt;br&gt;
    WHERE age &amp;gt;= 10 AND (type = 'goat' OR type = 'antelope');&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;code&gt;LIKE&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;LIKE&lt;/code&gt; operator can be used to do pattern matching.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
_   -- Match any single character&lt;br&gt;
%   -- Match any sequence of characters&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To select all animals that start with &lt;code&gt;ab&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
SELECT * from animal&lt;br&gt;
    WHERE name LIKE 'ab%';&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Column Data Types
&lt;/h2&gt;

&lt;p&gt;You probably noticed a few data types we specified with &lt;code&gt;CREATE TABLE&lt;/code&gt;,&lt;br&gt;
above. PostgreSQL has &lt;a href="https://www.postgresql.org/docs/current/static/datatype.html"&gt;a lot of data&lt;br&gt;
types&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is an incomplete list of some of the more common types:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
VARCHAR(n)   -- Variable character string of max length n&lt;br&gt;
BOOLEAN      -- TRUE or FALSE&lt;br&gt;
INTEGER      -- Integer value&lt;br&gt;
INT          -- Same as INTEGER&lt;br&gt;
DECIMAL(p,s) -- Decimal number with p digits of precision&lt;br&gt;
             -- and s digits right of the decimal point&lt;br&gt;
REAL         -- Floating point number&lt;br&gt;
DATE         -- Holds a date&lt;br&gt;
TIME         -- Holds a time&lt;br&gt;
TIMESTAMP    -- Holds an instant of time (date and time)&lt;br&gt;
BLOB         -- Binary object&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  ACID and CRUD
&lt;/h2&gt;

&lt;p&gt;These are two common database terms.&lt;/p&gt;
&lt;h3&gt;
  
  
  ACID
&lt;/h3&gt;

&lt;p&gt;Short for &lt;em&gt;Atomicity&lt;/em&gt;, &lt;em&gt;Consistency&lt;/em&gt;, &lt;em&gt;Isolation&lt;/em&gt;, &lt;em&gt;Durability&lt;/em&gt;. When&lt;br&gt;
people mention "ACID-compliance", they're generally talking about the&lt;br&gt;
ability of the database to accurately record transactions in the case of&lt;br&gt;
crash or power failure.&lt;/p&gt;

&lt;p&gt;Atomicity: all transactions will be "all or nothing".&lt;/p&gt;

&lt;p&gt;Consistency: all transactions will leave the database in a consistent&lt;br&gt;
state with all its defined rules and constraints.&lt;/p&gt;

&lt;p&gt;Isonlation: the results of concurrent transactions is the same as if&lt;br&gt;
those transactions had been executed sequentially.&lt;/p&gt;

&lt;p&gt;Durability: Once a transaction is committed, it will remain committed,&lt;br&gt;
despite crashes, power outages, snow, and sleet.&lt;/p&gt;
&lt;h3&gt;
  
  
  CRUD
&lt;/h3&gt;

&lt;p&gt;Short for &lt;em&gt;Create&lt;/em&gt;, &lt;em&gt;Read&lt;/em&gt;, &lt;em&gt;Update&lt;/em&gt;, &lt;em&gt;Delete&lt;/em&gt;. Describes the four basic&lt;br&gt;
functions of a data store.&lt;/p&gt;

&lt;p&gt;In a relational database, these functions are handled by &lt;code&gt;INSERT&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;SELECT&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;, and &lt;code&gt;DELETE&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  NULL and NOT NULL
&lt;/h2&gt;

&lt;p&gt;Columns in records can sometimes have no data, referred to by the&lt;br&gt;
special keyword as &lt;code&gt;NULL&lt;/code&gt;. Sometimes it makes sense to have NULL&lt;br&gt;
columns, and sometimes it doesn't.&lt;/p&gt;

&lt;p&gt;If you explicitly want to disallow NULL columns in your table, you can&lt;br&gt;
create the columns with the &lt;code&gt;NOT NULL&lt;/code&gt; constraint:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE TABLE Employee (
    ID INT NOT NULL,
    LastName VARCHAR(20));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  COUNT
&lt;/h2&gt;

&lt;p&gt;You can select a count of items in question with the &lt;code&gt;COUNT&lt;/code&gt; operator.&lt;/p&gt;

&lt;p&gt;For example, count the rows filtered by the &lt;code&gt;WHERE&lt;/code&gt; clause:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`sql&lt;br&gt;
SELECT COUNT(*) FROM Animals WHERE legcount &amp;gt;= 4;&lt;/p&gt;
&lt;h2&gt;
  
  
   count 
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Useful with &lt;code&gt;GROUP BY&lt;/code&gt;, below.&lt;/p&gt;

&lt;h2&gt;
  
  
  ORDER BY
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;ORDER BY&lt;/code&gt; which sorts &lt;code&gt;SELECT&lt;/code&gt; results for you. Use &lt;code&gt;DESC&lt;/code&gt; to sort in&lt;br&gt;
reverse order.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`sql&lt;br&gt;
SELECT * FROM Pets&lt;br&gt;
ORDER BY age DESC;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;age&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rover&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zaphod&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mittens&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  GROUP BY
&lt;/h2&gt;

&lt;p&gt;When used with an aggregating function like &lt;code&gt;COUNT&lt;/code&gt;, can be&lt;br&gt;
used to produce groups of results.&lt;/p&gt;

&lt;p&gt;Count all the customers in certain countries:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`sql&lt;br&gt;
SELECT COUNT(CustomerID), Country&lt;br&gt;
    FROM Customers&lt;br&gt;
    GROUP BY Country;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;COUNT(CustomerID)&lt;/th&gt;
&lt;th&gt;Country&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1123&lt;/td&gt;
&lt;td&gt;USA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;734&lt;/td&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 etc.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Keys: Primary, Foreign, and Composite
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Primary Key
&lt;/h3&gt;

&lt;p&gt;Rows in a table often have one column that is called the &lt;em&gt;primary key&lt;/em&gt;.&lt;br&gt;
The value in this column applies to all the rest of the data in the&lt;br&gt;
record. For example, an &lt;code&gt;EmployeeID&lt;/code&gt; would be a great primary key,&lt;br&gt;
assuming the rest of the record held employee information.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Employee
    ID (Primary Key)  LastName  FirstName  DepartmentID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;To create a table and specify the primary key, use the &lt;code&gt;NOT NULL&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;PRIMARY KEY&lt;/code&gt; constraints:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
CREATE TABLE Employee (&lt;br&gt;
    ID INT NOT NULL PRIMARY KEY,&lt;br&gt;
    LastName VARCHAR(20),&lt;br&gt;
    FirstName VARCHAR(20),&lt;br&gt;
    DepartmentID INT);&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can always search quickly by primary key.&lt;/p&gt;

&lt;h3&gt;
  
  
  Foreign Keys
&lt;/h3&gt;

&lt;p&gt;If a key refers to a primary key in another table, it is called a&lt;br&gt;
&lt;em&gt;foreign key&lt;/em&gt; (abbreviated "FK"). You are not allowed to make changes to&lt;br&gt;
the database that would cause the foreign key to refer to a non-existent&lt;br&gt;
record.&lt;/p&gt;

&lt;p&gt;The database uses this to maintain &lt;em&gt;referential integrity&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Create a foreign key using the &lt;code&gt;REFERENCES&lt;/code&gt; constraint. It specifies the&lt;br&gt;
remote table and column the key refers to.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`sql&lt;br&gt;
CREATE TABLE Department (&lt;br&gt;
    ID INT NOT NULL PRIMARY KEY,&lt;br&gt;
    Name VARCHAR(20));&lt;/p&gt;

&lt;p&gt;CREATE TABLE Employee (&lt;br&gt;
    ID INT NOT NULL PRIMARY KEY,&lt;br&gt;
    LastName VARCHAR(20),&lt;br&gt;
    FirstName VARCHAR(20),&lt;br&gt;
    DepartmentID INT REFERENCES Department(ID));&lt;br&gt;
`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In the above example, you cannot add a row to &lt;code&gt;Employee&lt;/code&gt; until that&lt;br&gt;
&lt;code&gt;DepartmentID&lt;/code&gt; already exists in &lt;code&gt;Department&lt;/code&gt;'s &lt;code&gt;ID&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Also, you cannot delete a row from &lt;code&gt;Department&lt;/code&gt; if that row's &lt;code&gt;ID&lt;/code&gt; was a&lt;br&gt;
&lt;code&gt;DepartmentID&lt;/code&gt; in &lt;code&gt;Employee&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Composite Keys
&lt;/h3&gt;

&lt;p&gt;Keys can also consist of more than one column. &lt;em&gt;Composite keys&lt;/em&gt; can be&lt;br&gt;
created as follows:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
CREATE TABLE example (&lt;br&gt;
    a INT,&lt;br&gt;
    b INT,&lt;br&gt;
    c INT,&lt;br&gt;
    PRIMARY KEY (a, c));&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Auto-increment Columns
&lt;/h2&gt;

&lt;p&gt;These are columns that the database manages, usually in an&lt;br&gt;
ever-increasing sequence. It's perfect for generation unique, numeric&lt;br&gt;
IDs for primary Keys.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In some databases (e.g MySQL) this is done with an &lt;code&gt;AUTO_INCREMENT&lt;/code&gt;&lt;br&gt;
keyword. PostgreSQL is different.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In PostgreSQL, use the &lt;code&gt;SERIAL&lt;/code&gt; keyword to auto-generate sequential&lt;br&gt;
numeric IDs for records.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
CREATE TABLE Company (&lt;br&gt;
    ID SERIAL PRIMARY KEY,&lt;br&gt;
    Name VARCHAR(20));&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;When you insert, &lt;strong&gt;do not&lt;/strong&gt; specify the ID column. You &lt;strong&gt;must&lt;/strong&gt; however,&lt;br&gt;
give a column name list that includes the remaining column names you are&lt;br&gt;
inserting data for. The ID column will be automatically generated by the&lt;br&gt;
database.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
INSERT INTO Company (Name) VALUES ('My Awesome Company');&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Joins
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This concept is&lt;/em&gt; extremely important &lt;em&gt;to understanding how to use&lt;br&gt;
relational databases!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When you have two (or more) tables with data you wish to retrieve from&lt;br&gt;
both, you do so by using a &lt;em&gt;join&lt;/em&gt;. These come in a number of varieties,&lt;br&gt;
some of which are covered here.&lt;/p&gt;

&lt;p&gt;When you're using &lt;code&gt;SELECT&lt;/code&gt; to make the join between two tables, you can&lt;br&gt;
specify the tables specific columns are from by using the &lt;code&gt;.&lt;/code&gt; operator.&lt;br&gt;
This is especially useful when columns have the same name in the&lt;br&gt;
different tables:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
SELECT Animal.name, Farm.name&lt;br&gt;
    FROM Animal, Farm&lt;br&gt;
    WHERE Animal.FarmID = Farm.ID;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Tables to use in these examples:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`sql&lt;br&gt;
CREATE TABLE Department (&lt;br&gt;
    ID INT NOT NULL PRIMARY KEY,&lt;br&gt;
    Name VARCHAR(20));&lt;/p&gt;

&lt;p&gt;CREATE TABLE Employee (&lt;br&gt;
    ID INT NOT NULL PRIMARY KEY,&lt;br&gt;
    Name VARCHAR(20),&lt;br&gt;
    DepartmentID INT);&lt;/p&gt;

&lt;p&gt;INSERT INTO Department VALUES (10, 'Marketing');&lt;br&gt;
INSERT INTO Department VALUES (11, 'Sales');&lt;br&gt;
INSERT INTO Department VALUES (12, 'Entertainment');&lt;/p&gt;

&lt;p&gt;INSERT INTO Employee VALUES (1, 'Alice', 10);&lt;br&gt;
INSERT INTO Employee VALUES (2, 'Bob', 12);&lt;br&gt;
INSERT INTO Employee VALUES (3, 'Charlie', 99);&lt;br&gt;
`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Importantly, department ID 11 is not referred to from&lt;br&gt;
&lt;code&gt;Employee&lt;/code&gt;, and department ID 99 (Charlie) does not exist in&lt;br&gt;
&lt;code&gt;Department&lt;/code&gt;. This is instrumental in the following examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inner Join, The Most Common Join
&lt;/h3&gt;

&lt;p&gt;This is the most commonly-used join, by far, and is what people mean&lt;br&gt;
when they just say "join" with no further qualifiers.&lt;/p&gt;

&lt;p&gt;This will return only the rows that match the requirements from &lt;strong&gt;both&lt;/strong&gt;&lt;br&gt;
tables.&lt;/p&gt;

&lt;p&gt;For example, we don't see "Sales" or "Charlie" in the join because&lt;br&gt;
neither of them match up to the other table:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; SELECT Employee.ID, Employee.Name, Department.Name
             FROM Employee, Department
             WHERE Employee.DepartmentID = Department.ID;

 id | name  |     name      
----+-------+---------------
  1 | Alice | Marketing
  2 | Bob   | Entertainment
(2 rows)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Above, we used a &lt;code&gt;WHERE&lt;/code&gt; clause to perform the inner join. This is&lt;br&gt;
absolutely the most common way to do it.&lt;/p&gt;

&lt;p&gt;There is an alternative syntax, below, that is barely ever used.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; SELECT Employee.ID, Employee.Name, Department.Name
             FROM Employee INNER JOIN Department
             ON Employee.DepartmentID = Department.ID;

 id | name  |     name      
----+-------+---------------
  1 | Alice | Marketing
  2 | Bob   | Entertainment
(2 rows)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Left Outer Join
&lt;/h3&gt;

&lt;p&gt;This join works like an inner join, but also returns &lt;em&gt;all&lt;/em&gt; the rows from&lt;br&gt;
the "left" table (the one after the &lt;code&gt;FROM&lt;/code&gt; clause). It puts &lt;code&gt;NULL&lt;/code&gt;&lt;br&gt;
in for the missing values in the "right" table (the one after the&lt;br&gt;
&lt;code&gt;LEFT JOIN&lt;/code&gt; clause.)&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; SELECT Employee.ID, Employee.Name, Department.Name
             FROM Employee LEFT JOIN Department
             ON Employee.DepartmentID = Department.ID;

 id |  name   |     name      
----+---------+---------------
  1 | Alice   | Marketing
  2 | Bob     | Entertainment
  3 | Charlie | 
(3 rows)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Notice that even though Charlie's department isn't found in &lt;code&gt;Department&lt;/code&gt;, his record is still listed with a &lt;code&gt;NULL&lt;/code&gt; department name.&lt;/p&gt;

&lt;h3&gt;
  
  
  Right Outer Join
&lt;/h3&gt;

&lt;p&gt;This join works like an inner join, but also returns &lt;em&gt;all&lt;/em&gt; the rows from&lt;br&gt;
the "right" table (the one after the &lt;code&gt;RIGHT JOIN&lt;/code&gt; clause). It puts&lt;br&gt;
&lt;code&gt;NULL&lt;/code&gt; in for the missing values in the "right" table (the one after the&lt;br&gt;
&lt;code&gt;FROM&lt;/code&gt; clause.)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; SELECT Employee.ID, Employee.Name, Department.Name
             FROM Employee RIGHT JOIN Department
             ON Employee.DepartmentID = Department.ID;

 id | name  |     name      
----+-------+---------------
  1 | Alice | Marketing
  2 | Bob   | Entertainment
    |       | Sales
(3 rows)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Notice that even though there are no employees in the Sales department,&lt;br&gt;
the Sales name is listed with a &lt;code&gt;NULL&lt;/code&gt; employee name.&lt;/p&gt;

&lt;h3&gt;
  
  
  Full Outer Join
&lt;/h3&gt;

&lt;p&gt;This is a blend of a Left and Right Outer Join. All information from&lt;br&gt;
both tables is selected, with &lt;code&gt;NULL&lt;/code&gt; filling the gaps where necessary.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; dbname=&amp;gt; SELECT Employee.ID, Employee.Name, Department.Name
              FROM Employee
              FULL JOIN Department
              ON Employee.DepartmentID = Department.ID;

 id |  name   |     name      
----+---------+---------------
  1 | Alice   | Marketing
  2 | Bob     | Entertainment
  3 | Charlie | 
    |         | Sales
(4 rows)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.w3schools.com/sql/sql_join.asp"&gt;Join at W3Schools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Join_(SQL)"&gt;Join at Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Indexes
&lt;/h2&gt;

&lt;p&gt;When searching through tables, you use a &lt;code&gt;WHERE&lt;/code&gt; clause to narrow things&lt;br&gt;
down. For speed, the columns mentioned in the &lt;code&gt;WHERE&lt;/code&gt; clause should&lt;br&gt;
either be a primary key, or a column for which an &lt;em&gt;index&lt;/em&gt; has been&lt;br&gt;
built.&lt;/p&gt;

&lt;p&gt;Indexes help speed searches. In a large table, searching over an&lt;br&gt;
unindexed column will be &lt;em&gt;slow&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Example of creating an index on the Employee table from the&lt;br&gt;
Keys section:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; CREATE INDEX ON Employee (LastName);
CREATE INDEX

dbname=&amp;gt; \d Employee
                        Table "public.employee"
    Column    |         Type          | Collation | Nullable | Default 
--------------+-----------------------+-----------+----------+---------
 id           | integer               |           | not null | 
 lastname     | character varying(20) |           |          | 
 firstname    | character varying(20) |           |          | 
 departmentid | integer               |           |          | 
Indexes:
    "employee_pkey" PRIMARY KEY, btree (id)
    "employee_lastname_idx" btree (lastname)
Foreign-key constraints:
    "employee_departmentid_fkey" FOREIGN KEY (departmentid) REFERENCES department(id)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.postgresql.org/docs/current/static/sql-createindex.html"&gt;PostgreSQL CREATE INDEX documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Transactions
&lt;/h2&gt;

&lt;p&gt;In PostgreSQL, you can bundle a series of statements into a&lt;br&gt;
&lt;em&gt;transaction&lt;/em&gt;. The transaction is executed &lt;em&gt;atomically&lt;/em&gt;, which means&lt;br&gt;
either the entire transaction occurs, or none of the transaction occurs.&lt;br&gt;
There will never be a case where a transaction partially occurs.&lt;/p&gt;

&lt;p&gt;Create a transaction by starting with a &lt;code&gt;BEGIN&lt;/code&gt; statement, followed by&lt;br&gt;
all the statements that are to be within the transaction.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;START TRANSACTION&lt;/code&gt; is generally synonymous with &lt;code&gt;BEGIN&lt;/code&gt; in SQL.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To execute the transaction ("Let's do it!"), end with a &lt;code&gt;COMMIT&lt;/code&gt;&lt;br&gt;
statement.&lt;/p&gt;

&lt;p&gt;To abort the transaction and do nothing ("On second thought,&lt;br&gt;
nevermind!") end with a &lt;code&gt;ROLLBACK&lt;/code&gt; statement. &lt;em&gt;This makes it like&lt;br&gt;
nothing within the transaction ever happened.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Usually transactions happen within a program that checks for sanity and&lt;br&gt;
either commits or rolls back.&lt;/p&gt;

&lt;p&gt;Pseudocode making DB calls that check if a rollback is necessary:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`javascript&lt;br&gt;
db("BEGIN"); // Begin transaction&lt;/p&gt;

&lt;p&gt;db(&lt;code&gt;UPDATE accounts SET balance = balance - 100.00&lt;br&gt;
    WHERE name = 'Alice'&lt;/code&gt;);&lt;/p&gt;

&lt;p&gt;let balance = db("SELECT balance WHERE name = 'Alice'");&lt;/p&gt;

&lt;p&gt;// Don't let the balance go below zero:&lt;br&gt;
if (balance &amp;lt; 0) {&lt;br&gt;
    db("ROLLBACK"); // Never mind!! Roll it all back.&lt;br&gt;
} else {&lt;br&gt;
    db("COMMIT"); // Plenty of cash&lt;br&gt;
}&lt;br&gt;
`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In the above example, the &lt;code&gt;UPDATE&lt;/code&gt; and &lt;code&gt;SELECT&lt;/code&gt; must happen at the same&lt;br&gt;
time (&lt;em&gt;atomically&lt;/em&gt;) or else another process could sneak in between and&lt;br&gt;
withdraw too much money. Because it needs to be atomic, it's wrapped in&lt;br&gt;
a transaction.&lt;/p&gt;

&lt;p&gt;If you just enter a single SQL statement that is not inside a &lt;code&gt;BEGIN&lt;/code&gt;&lt;br&gt;
transaction block, it gets automatically wrapped in a &lt;code&gt;BEGIN&lt;/code&gt;/&lt;code&gt;COMMIT&lt;/code&gt;&lt;br&gt;
block. It is a mini transaction that is &lt;code&gt;COMMIT&lt;/code&gt;ted immediately.&lt;/p&gt;

&lt;p&gt;Not all SQL databases support transactions, but most do.&lt;/p&gt;

&lt;h2&gt;
  
  
  The EXPLAIN Command
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;EXPLAIN&lt;/code&gt; command will tell you how much time the database is&lt;br&gt;
spending doing a query, and what it's doing in that time.&lt;/p&gt;

&lt;p&gt;It's a powerful command that can help tell you where you need to add&lt;br&gt;
indexes, change structure, or rewrite queries.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbname=&amp;gt; EXPLAIN SELECT * FROM foo;

                       QUERY PLAN
---------------------------------------------------------
 Seq Scan on foo  (cost=0.00..155.00 rows=10000 width=4)
(1 row)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;For more information, see the &lt;a href="https://www.postgresql.org/docs/current/static/sql-explain.html"&gt;PostgreSQL EXPLAIN documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick and Dirty DB Design
&lt;/h2&gt;

&lt;p&gt;Designing a non-trivial database is a difficult, learned skill best left to&lt;br&gt;
professionals. Feel free to do small databases with minimal training, but if you&lt;br&gt;
get in a professional situation with a large database that needs to be designed,&lt;br&gt;
you should consult with people with strong domain knowledge.&lt;/p&gt;

&lt;p&gt;That said, here are a couple pointers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In general, all your tables should have a unique &lt;code&gt;PRIMARY KEY&lt;/code&gt; for each row.&lt;br&gt;
It's common to use &lt;code&gt;SERIAL&lt;/code&gt; or &lt;code&gt;AUTO_INCREMENT&lt;/code&gt; to make this happen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keep an eye out for commonly duplicated data. If you are duplicating text data&lt;br&gt;
across several records, consider that maybe it should be in its own table and&lt;br&gt;
referred to with a foreign key.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch out for unrelated data in the same record. If it's a record in the&lt;br&gt;
&lt;code&gt;Employee&lt;/code&gt; table but it has &lt;code&gt;Department_Address&lt;/code&gt; as a column, that probably&lt;br&gt;
belongs in a &lt;code&gt;Department&lt;/code&gt; table, referred to by a public key.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But if you really want to design database, read on to the Normalization and&lt;br&gt;
Normal Forms section.&lt;/p&gt;

&lt;h2&gt;
  
  
  Normalization and Normal Forms
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;[This topic is very deep and this section cannot do it full justice.]&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Normalization&lt;/em&gt; is the process of designing or refactoring your tables&lt;br&gt;
for maximum consistency and minimum redundancy.&lt;/p&gt;

&lt;p&gt;With NoSQL databases, we're used to &lt;em&gt;denormalized&lt;/em&gt; data that is stored&lt;br&gt;
with speed in mind, and not so much consistency (sometimes NoSQL&lt;br&gt;
databases talk about &lt;em&gt;eventual consistency&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Non-normalized tables are considered an anti-pattern in relational databases.&lt;/p&gt;

&lt;p&gt;There are many &lt;em&gt;normal forms&lt;/em&gt;. We'll talk about First, Second, and Third&lt;br&gt;
normal forms.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anomalies
&lt;/h3&gt;

&lt;p&gt;One of the reasons for normalizing tables is to avoid &lt;em&gt;anomalies&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Insert anomaly&lt;/em&gt;: When we cannot insert a row into the table because&lt;br&gt;
some of the dependent information is not yet known. For example, we&lt;br&gt;
cannot create a new class record in the school database, because the&lt;br&gt;
record requires at least one student, and none have enrolled yet.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update anomaly&lt;/em&gt;: When information is duplicated in the database &lt;em&gt;and&lt;/em&gt;&lt;br&gt;
some rows are updated but not others. For example, say a record contains&lt;br&gt;
a city and a zipcode, but then the post office changes the zipcode. If&lt;br&gt;
some of the records are updated but not others, some cities will have&lt;br&gt;
the old zipcodes.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Delete anomaly&lt;/em&gt;: The opposite of an insert anomaly. When we delete some&lt;br&gt;
information and other related information must also be deleted against&lt;br&gt;
our will. For example, deleting the last student from a course causes&lt;br&gt;
the other course information to be also deleted.&lt;/p&gt;

&lt;p&gt;By normalizing your tables, you can avoid these anomalies.&lt;/p&gt;

&lt;h3&gt;
  
  
  First Normal Form (1NF)
&lt;/h3&gt;

&lt;p&gt;When a database is in first normal form, there is a primary key for each&lt;br&gt;
row, and there are no repeating sets of columns that should be in their&lt;br&gt;
own table.&lt;/p&gt;

&lt;p&gt;Unnormalized (column titles on separate lines for clarity):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Farm
    ID
    AnimalName1  AnimalBreed1  AnimalProducesEggs1
    AnimalName2  AnimalBreed2  AnimalProducesEggs2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;1NF:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Farm
    ID

Animal
    ID  FarmID[FK Farm(ID)]  Name  Breed  ProducesEggs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Use a &lt;em&gt;join&lt;/em&gt; to select all the animals in the farm:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
SELECT Name, Farm.ID FROM Animal, Farm WHERE Farm.ID = Animal.FarmID;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Second Normal Form (2NF)
&lt;/h3&gt;

&lt;p&gt;To be in 2NF, a table must already be in 1NF.&lt;/p&gt;

&lt;p&gt;Additionally, all non-key data must fully relate to the key data in the table.&lt;/p&gt;

&lt;p&gt;In the farm example, above, Animal has a Name and a key FarmID, but&lt;br&gt;
these two pieces of information are not related.&lt;/p&gt;

&lt;p&gt;We can fix this by adding a table to link the other two tables together:&lt;/p&gt;

&lt;p&gt;2NF:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Farm
    ID

FarmAnimal
    FarmID[FK Farm(ID)]  AnimalID[FK Animal(ID)]

Animal
    ID  Name  Breed  ProducesEggs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Use a &lt;em&gt;join&lt;/em&gt; to select all the animals in the farms:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
SELECT Name, Farm.ID&lt;br&gt;
    FROM Animal, FarmAnimal, Farm&lt;br&gt;
    WHERE Farm.ID = FarmAnimal.FarmID AND&lt;br&gt;
          Animal.ID = FarmAnimal.AnimalID;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Third Normal Form (3NF)
&lt;/h3&gt;

&lt;p&gt;A table in 3NF must already be in 2NF.&lt;/p&gt;

&lt;p&gt;Additionally, columns that relate to each other AND to the key need to&lt;br&gt;
be moved into their own tables. This is known as removing &lt;em&gt;transitive&lt;br&gt;
dependencies&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In the Farm example, the columns &lt;code&gt;Breed&lt;/code&gt; and &lt;code&gt;ProducesEggs&lt;/code&gt; are related.&lt;br&gt;
If you know the breed, you automatically know if it produces eggs or&lt;br&gt;
not.&lt;/p&gt;

&lt;p&gt;3NF:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Farm
    ID

FarmAnimal
    FarmID[FK Farm(ID)]  AnimalID[FK Animal(ID)]

BreedEggs
    Breed  ProducesEggs

Animal
    ID  Name  Breed[FK BreedEggs(Breed)]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Use a &lt;em&gt;join&lt;/em&gt; to select all the animals names that produce eggs&lt;br&gt;
in the farm:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
SELECT Name, Farm.ID&lt;br&gt;
    FROM Animal, FarmAnimal, BreedEggs, Farm&lt;br&gt;
    WHERE Farm.ID = FarmAnimal.FarmID AND&lt;br&gt;
          Animal.ID = FarmAnimal.AnimalID AND&lt;br&gt;
          Animal.Breed = BreedEggs.Breed AND&lt;br&gt;
          BreedEggs.ProducesEggs = TRUE;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  More reading:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.essentialsql.com/get-ready-to-learn-sql-database-normalization-explained-in-simple-english/"&gt;Database Normalization Explained in Simple English&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://support.microsoft.com/en-us/help/283878/description-of-the-database-normalization-basics"&gt;Description of the database normalization basics&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Database_normalization"&gt;Database Normalization, Wikipedia&lt;/a&gt; (Dense)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Node-Postgres
&lt;/h2&gt;

&lt;p&gt;This is a library that allows you to interface with PostgreSQL through&lt;br&gt;
NodeJS.&lt;/p&gt;

&lt;p&gt;Its &lt;a href="https://node-postgres.com/"&gt;documentation&lt;/a&gt; is exceptionally good.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/brianc/node-postgres"&gt;Node-Postgres on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security
&lt;/h2&gt;

&lt;h3&gt;
  
  
  PostgreSQL Password
&lt;/h3&gt;

&lt;p&gt;You might have noticed that you don't need a password to access your&lt;br&gt;
database that you created. This is because PostgreSQL by default uses&lt;br&gt;
something called &lt;a href="https://www.postgresql.org/docs/9.6/static/auth-methods.html#AUTH-PEER"&gt;peer authentication&lt;br&gt;
mode&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In a nutshell, it makes sure that you are logged in as yourself before&lt;br&gt;
you access your database. If a different user tries to access your&lt;br&gt;
database, they will be denied.&lt;/p&gt;

&lt;p&gt;If you need to set up password access, see &lt;a href="https://www.postgresql.org/docs/current/static/client-authentication.html"&gt;client authentication in the&lt;br&gt;
PostgreSQL&lt;br&gt;
manual&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Writing Client Software
&lt;/h3&gt;

&lt;p&gt;When writing code that accesses databases, there are a few rules you&lt;br&gt;
should follow to keep things safe.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Don't store database passwords or other sensitive information in your&lt;br&gt;
code repository. Store dummy credentials instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When building SQL queries in code, use &lt;a href="https://node-postgres.com/features/queries#parameterized-query"&gt;&lt;em&gt;parameterized&lt;br&gt;
queries&lt;/em&gt;&lt;/a&gt;.&lt;br&gt;
You build your query with parameter placeholders for where the query&lt;br&gt;
arguments will go.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is your number-one line of defense against &lt;a href="https://en.wikipedia.org/wiki/SQL_injection"&gt;SQL injection&lt;br&gt;
  attacks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's a seriously noob move to not use parameterized queries.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Other Relational Databases
&lt;/h2&gt;

&lt;p&gt;There are tons of them by Microsoft, Oracle, etc. etc.&lt;/p&gt;

&lt;p&gt;Other popular open source databases in widespread use are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.mysql.com/"&gt;MySQL&lt;/a&gt; Multi-user, industrial class.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.sqlite.org/"&gt;SQLite&lt;/a&gt; Single-user, very fast, good for config files.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Assignment: Install PostgreSQL
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;IMPORTANT!&lt;/strong&gt; These instructions assume you haven't already installed&lt;br&gt;
PostgreSQL. If you have already installed it, skip this section or&lt;br&gt;
Google for how to upgrade your installation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mac with Homebrew
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open a terminal&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install PostgreSQL: &lt;code&gt;brew install postgresql&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you get install errors at this point relating to the link phase&lt;br&gt;
failing or missing permissions, look back in the output and see&lt;br&gt;
what file it failed to write.&lt;/p&gt;

&lt;p&gt;For example, if it's failing to write something in&lt;br&gt;
&lt;code&gt;/usr/local/share/man&lt;/code&gt;-something, try setting the ownership on&lt;br&gt;
those directories to yourself.&lt;/p&gt;

&lt;p&gt;Example (from the command line):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ sudo chown -R $(whoami) /usr/local/share/man&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then try to install again.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start the database process&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If you want to start it every time you log in, run:&lt;/p&gt;

&lt;p&gt;brew services start postgresql&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* If you want to just start it one time right now, run:

      pg_ctl -D /usr/local/var/postgres start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;Create a database named the same as your username: &lt;code&gt;createdb $(whoami)&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;Optionally you can call it anything you want, but the shell
defaults to looking for a database named the same as your user.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This database will contain tables.&lt;/p&gt;

&lt;p&gt;Then start a shell by running &lt;code&gt;psql&lt;/code&gt; and see if it works. You should see&lt;br&gt;
this prompt:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ psql
psql (10.1)
Type "help" for help.

dbname=&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;(Use &lt;code&gt;psql databasename&lt;/code&gt; if you created the database under something&lt;br&gt;
other than your username.)&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;\l&lt;/code&gt; to get a list of databases.&lt;/p&gt;

&lt;p&gt;You can enter &lt;code&gt;\q&lt;/code&gt; to exit the shell.&lt;/p&gt;

&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;

&lt;p&gt;Reports are that one of the easiest installs is with&lt;br&gt;
&lt;a href="https://chocolatey.org/packages/postgresql"&gt;chocolatey&lt;/a&gt;. Might want to try that&lt;br&gt;
first.&lt;/p&gt;

&lt;p&gt;You can also &lt;a href="https://www.postgresql.org/download/windows/"&gt;download a Windows&lt;br&gt;
installer&lt;/a&gt; from the&lt;br&gt;
official site.&lt;/p&gt;

&lt;p&gt;Another option is to use the &lt;a href="https://msdn.microsoft.com/en-us/commandline/wsl/install-win10"&gt;Windows Subsystem for&lt;br&gt;
Linux&lt;/a&gt;&lt;br&gt;
and follow the &lt;a href="https://help.ubuntu.com/community/PostgreSQL"&gt;Ubuntu instructions for installing&lt;br&gt;
PostgreSQL&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Arch Linux
&lt;/h3&gt;

&lt;p&gt;Arch requires a bit more hands-on, but not much more. Check this out if&lt;br&gt;
you want to see a different Unix-y install procedure (or if you run&lt;br&gt;
Arch).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wiki.archlinux.org/index.php/PostgreSQL"&gt;Installing PostgreSQL on Arch
Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Assignment: Create a Table and Use It
&lt;/h2&gt;

&lt;p&gt;Launch the shell on your database, and create a table.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
CREATE TABLE Employee (ID INT, FirstName VARCHAR(20), LastName VARCHAR(20));&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Insert some records:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
INSERT INTO Employee VALUES (1, 'Alpha', 'Alphason');&lt;br&gt;
INSERT INTO Employee VALUES (2, 'Bravo', 'Bravoson');&lt;br&gt;
INSERT INTO Employee VALUES (3, 'Charlie', 'Charleson');&lt;br&gt;
INSERT INTO Employee VALUES (4, 'Delta', 'Deltason');&lt;br&gt;
INSERT INTO Employee VALUES (5, 'Echo', 'Ecoson');&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Select all records:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
SELECT * FROM Employee;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Select Employee #3's record:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
SELECT * FROM Employee WHERE ID=3;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Delete Employee #3's record:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
DELETE FROM Employee WHERE ID=3;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;SELECT&lt;/code&gt; to verify the record is deleted.&lt;/p&gt;

&lt;p&gt;Update Employee #2's name to be "Foxtrot Foxtrotson":&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
UPDATE Employee SET FirstName='Foxtrot', LastName='Foxtrotson' WHERE ID=2;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;SELECT&lt;/code&gt; to verify the update.&lt;/p&gt;

&lt;h2&gt;
  
  
  Assignment: NodeJS Program to Create and Populate a Table
&lt;/h2&gt;

&lt;p&gt;Using &lt;a href="https://node-postgres.com/"&gt;Node-Postgres&lt;/a&gt;, write a program that&lt;br&gt;
creates a table.&lt;/p&gt;

&lt;p&gt;Run the following query from your JS code:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;sql&lt;br&gt;
CREATE TABLE IF NOT EXISTS Earthquake&lt;br&gt;
    (Name VARCHAR(20), Magnitude REAL)&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Populate the table with the following data:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;javascript&lt;br&gt;
let data = [&lt;br&gt;
    ["Earthquake 1", 2.2],&lt;br&gt;
    ["Earthquake 2", 7.0],&lt;br&gt;
    ["Earthquake 3", 1.8],&lt;br&gt;
    ["Earthquake 4", 5.2],&lt;br&gt;
    ["Earthquake 5", 2.9],&lt;br&gt;
    ["Earthquake 6", 0.6],&lt;br&gt;
    ["Earthquake 7", 6.6]&lt;br&gt;
];&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You'll have to run an &lt;code&gt;INSERT&lt;/code&gt; statement for each one.&lt;/p&gt;

&lt;p&gt;Open a PostgreSQL shell (&lt;code&gt;psql&lt;/code&gt;) and verify the table exists:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user-&amp;gt; \dt
          List of relations
 Schema |    Name    | Type  | Owner 
--------+------------+-------+-------
 public | earthquake | table | user
(1 row)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Also verify it is populated:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user-&amp;gt; SELECT * from Earthquake;

     name     | magnitude 
--------------+-----------
 Earthquake 1 |       2.2
 Earthquake 2 |         7
 Earthquake 3 |       1.8
 Earthquake 4 |       5.2
 Earthquake 5 |       2.9
 Earthquake 6 |       0.6
 Earthquake 7 |       6.6
(7 rows)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Hints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CREATE TABLE&lt;/li&gt;
&lt;li&gt;&lt;a href="https://node-postgres.com/features/connecting"&gt;Connecting to the database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://node-postgres.com/features/queries"&gt;Running a query&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Extra Credit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add an ID column to help normalize the database. Make this column
&lt;code&gt;SERIAL&lt;/code&gt; to auto-increment.&lt;/li&gt;
&lt;li&gt;Add Date, Lat, and Lon columns to record more information about the
event.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Assignment: Command-line Earthquake Query Tool
&lt;/h2&gt;

&lt;p&gt;Write a tool that queries the database for earthquakes that are at least&lt;br&gt;
a given magnitude.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ node earthquake 2.9
Earthquakes with magnitudes greater than or equal to 2.9:

Earthquake 2: 7
Earthquake 7: 6.6
Earthquake 4: 5.2
Earthquake 5: 2.9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Use &lt;code&gt;ORDER BY Magnitude DESC&lt;/code&gt; to order the results in descending order&lt;br&gt;
by magnitude.&lt;/p&gt;

&lt;h2&gt;
  
  
  Assignment: RESTful Earthquake Data Server
&lt;/h2&gt;

&lt;p&gt;Use &lt;a href="https://expressjs.com/"&gt;ExpressJS&lt;/a&gt; and write a webserver that&lt;br&gt;
implements a RESTful API to access the earthquake data.&lt;/p&gt;

&lt;p&gt;Endpoints:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/&lt;/code&gt; (GET) Output usage information in HTML.&lt;/p&gt;

&lt;p&gt;Example results:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;html&lt;br&gt;
&amp;lt;html&amp;gt;&lt;br&gt;
    &amp;lt;body&amp;gt;Usage: [endpoint info]&amp;lt;/body&amp;gt;&lt;br&gt;
&amp;lt;/html&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/minmag&lt;/code&gt; (GET) Output JSON list of earthquakes that are larger than the&lt;br&gt;
value specified in the &lt;code&gt;mag&lt;/code&gt; parameter. Use form encoding to pass the&lt;br&gt;
data.&lt;/p&gt;

&lt;p&gt;Example results:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;json&lt;br&gt;
{&lt;br&gt;
    "results": [&lt;br&gt;
        {&lt;br&gt;
            "name": "Earthquake 2",&lt;br&gt;
            "magnitude": 7&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
            "name": "Earthquake 4",&lt;br&gt;
            "magnitude": 5.2&lt;br&gt;
        }&lt;br&gt;
    ]&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Extra Credit:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/new&lt;/code&gt; (POST) Add a new earthquake to the database. Use form encoding to&lt;br&gt;
pass &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;mag&lt;/code&gt;. Return a JSON status message:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;json&lt;br&gt;
{ "status": "ok" }&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;json&lt;br&gt;
{ "status": "error", "message": "[error message]" }&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/delete&lt;/code&gt; (DELETE) Delete an earthquake from the database. Use form&lt;br&gt;
encoding to pass &lt;code&gt;name&lt;/code&gt;. Return status similar to &lt;code&gt;/new&lt;/code&gt;, above.&lt;/p&gt;

&lt;p&gt;UPDATE Employee SET FirstName='Foxtrot', LastName='Foxtrotson' WHERE ID=2;&lt;br&gt;
Use SELECT to verify the update.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Fundamental Data Structures in JavaScript</title>
      <dc:creator>Bryan C Guner</dc:creator>
      <pubDate>Sat, 11 Dec 2021 03:19:45 +0000</pubDate>
      <link>https://dev.to/bgoonz/fundamental-data-structures-in-javascript-352d</link>
      <guid>https://dev.to/bgoonz/fundamental-data-structures-in-javascript-352d</guid>
      <description>&lt;h1&gt;
  
  
  &lt;strong&gt;Fundamental Data Structures in JavaScript&lt;/strong&gt;
&lt;/h1&gt;
&lt;h2&gt;
  
  
  &lt;em&gt;(and a bit of python pseudo code)&lt;/em&gt;
&lt;/h2&gt;
&lt;h1&gt;
  
  
  Table Of Contents:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fundamental Data Structures in JavaScript&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;(and a bit of python pseudo code)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Table Of Contents:&lt;/li&gt;
&lt;li&gt;
Resuorces:

&lt;ul&gt;
&lt;li&gt;Data Structures &amp;amp; Algorithms Resource List Part 1&lt;/li&gt;
&lt;li&gt;Guess the author of the following quotes:&lt;/li&gt;
&lt;li&gt;Update:&lt;/li&gt;
&lt;li&gt;Algorithms&lt;/li&gt;
&lt;li&gt;Data Structures:&lt;/li&gt;
&lt;li&gt;
&lt;li&gt;A simple to follow guide to Lists Stacks and Queues, with animated gifs, diagrams, and code examples&lt;/li&gt;
&lt;li&gt;Linked Lists&lt;/li&gt;
&lt;li&gt;
What is a Linked List?

&lt;ul&gt;
&lt;li&gt;"So…this sounds a lot like an Array…"&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Types of Linked Lists&lt;/li&gt;
&lt;li&gt;Linked List Methods&lt;/li&gt;
&lt;li&gt;Time and Space Complexity Analysis&lt;/li&gt;
&lt;li&gt;
Time Complexity — Access and Search

&lt;ul&gt;
&lt;li&gt;Scenarios&lt;/li&gt;
&lt;li&gt;Discussion&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Time Complexity — Insertion and Deletion

&lt;ul&gt;
&lt;li&gt;Scenarios&lt;/li&gt;
&lt;li&gt;Discussion&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Space Complexity

&lt;ul&gt;
&lt;li&gt;Scenarios&lt;/li&gt;
&lt;li&gt;Discussion&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Stacks and Queues&lt;/li&gt;
&lt;li&gt;What is a Stack?&lt;/li&gt;
&lt;li&gt;What is a Queue?&lt;/li&gt;
&lt;li&gt;Stack and Queue Properties&lt;/li&gt;
&lt;li&gt;
Time and Space Complexity Analysis

&lt;ul&gt;
&lt;li&gt;Time Complexity — Access and Search&lt;/li&gt;
&lt;li&gt;Time Complexity — Insertion and Deletion&lt;/li&gt;
&lt;li&gt;Space Complexity&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;When should we use Stacks and Queues?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Graphs:

&lt;ul&gt;
&lt;li&gt;Graph Data Structure Interview Questions At A Glance&lt;/li&gt;
&lt;li&gt;Graphs&lt;/li&gt;
&lt;li&gt;
Questions

&lt;ul&gt;
&lt;li&gt;What is a Graph?&lt;/li&gt;
&lt;li&gt;Why is it important to learn Graphs?&lt;/li&gt;
&lt;li&gt;How many types of graphs are there?&lt;/li&gt;
&lt;li&gt;What is the time complexity (big-O) to add/remove/get a vertex/edge for a graph?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Graph Representations&lt;/li&gt;
&lt;li&gt;Adjacency List&lt;/li&gt;
&lt;li&gt;Adjacency Matrix&lt;/li&gt;
&lt;li&gt;
Tradeoffs

&lt;ul&gt;
&lt;li&gt;Space Complexity&lt;/li&gt;
&lt;li&gt;Add Vertex&lt;/li&gt;
&lt;li&gt;Remove Vertex&lt;/li&gt;
&lt;li&gt;Add Edge&lt;/li&gt;
&lt;li&gt;Remove Edge&lt;/li&gt;
&lt;li&gt;Find Edge&lt;/li&gt;
&lt;li&gt;Get All Edges from Vertex&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Breadth-First Search

&lt;ul&gt;
&lt;li&gt;BFS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Applications of BFS&lt;/li&gt;
&lt;li&gt;Coloring BFS&lt;/li&gt;
&lt;li&gt;BFS Pseudocode&lt;/li&gt;
&lt;li&gt;BFS Steps&lt;/li&gt;
&lt;li&gt;
Depth-First Search

&lt;ul&gt;
&lt;li&gt;DFS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Applications of DFS&lt;/li&gt;
&lt;li&gt;DFS Pseudocode&lt;/li&gt;
&lt;li&gt;DFS Steps&lt;/li&gt;
&lt;li&gt;Connected Components&lt;/li&gt;
&lt;li&gt;Uses&lt;/li&gt;
&lt;li&gt;How to find connected componnents&lt;/li&gt;
&lt;li&gt;Bonus Python Question&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This Bellman-Ford Code is for determination whether we can get&lt;/li&gt;
&lt;li&gt;shortest path from given graph or not for single-source shortest-paths problem.&lt;/li&gt;
&lt;li&gt;In other words, if given graph has any negative-weight cycle that is reachable&lt;/li&gt;
&lt;li&gt;from the source, then it will give answer False for "no solution exits".&lt;/li&gt;
&lt;li&gt;For argument graph, it should be a dictionary type&lt;/li&gt;
&lt;li&gt;
such as

&lt;ul&gt;
&lt;li&gt;Review of Concepts&lt;/li&gt;
&lt;li&gt;Undirected Graph&lt;/li&gt;
&lt;li&gt;Types&lt;/li&gt;
&lt;li&gt;Dense Graph&lt;/li&gt;
&lt;li&gt;Sparse Graph&lt;/li&gt;
&lt;li&gt;Weighted Graph&lt;/li&gt;
&lt;li&gt;Directed Graph&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Undirected&lt;/em&gt; Graph&lt;/li&gt;
&lt;li&gt;Node Class&lt;/li&gt;
&lt;li&gt;Adjacency Matrix&lt;/li&gt;
&lt;li&gt;
Adjacency List

&lt;ul&gt;
&lt;li&gt;Stacks&lt;/li&gt;
&lt;li&gt;Queues&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Data Structures… Under The Hood&lt;/li&gt;
&lt;li&gt;Data Structures Reference&lt;/li&gt;
&lt;li&gt;Array&lt;/li&gt;
&lt;li&gt;Linked List&lt;/li&gt;
&lt;li&gt;Queue&lt;/li&gt;
&lt;li&gt;Stack&lt;/li&gt;
&lt;li&gt;Tree&lt;/li&gt;
&lt;li&gt;Binary Search Tree&lt;/li&gt;
&lt;li&gt;Binary Search Tree&lt;/li&gt;
&lt;li&gt;Graph&lt;/li&gt;
&lt;li&gt;Heap&lt;/li&gt;
&lt;li&gt;Adjacency list&lt;/li&gt;
&lt;li&gt;Adjacency matrix&lt;/li&gt;
&lt;li&gt;Arrays&lt;/li&gt;
&lt;li&gt;Pointers&lt;/li&gt;
&lt;li&gt;Linked lists&lt;/li&gt;
&lt;li&gt;Doubly Linked Lists&lt;/li&gt;
&lt;li&gt;Not cache-friendly&lt;/li&gt;
&lt;li&gt;Hash tables&lt;/li&gt;
&lt;li&gt;Breadth-First Search (BFS) and Breadth-First Traversal&lt;/li&gt;
&lt;li&gt;Binary Search Tree&lt;/li&gt;
&lt;li&gt;Graph Data Structure: Directed, Acyclic, etc&lt;/li&gt;
&lt;li&gt;Binary numbers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Implementations

&lt;ul&gt;
&lt;li&gt;
Resources (article content below):

&lt;ul&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;li&gt;Books&lt;/li&gt;
&lt;li&gt;Coding practice&lt;/li&gt;
&lt;li&gt;Courses&lt;/li&gt;
&lt;li&gt;Guides&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;space&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;time&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Several operations&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Dependent on data&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Big O notation&lt;/li&gt;
&lt;li&gt;The Array data structure&lt;/li&gt;
&lt;li&gt;Definition&lt;/li&gt;
&lt;li&gt;2. Objects&lt;/li&gt;
&lt;li&gt;The Hash Table&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Definition&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;The Set&lt;/li&gt;
&lt;li&gt;Sets&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Definition&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;The Singly Linked List&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Definition&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;The Doubly Linked List&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Definition&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;The Stack&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Definition&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;The Queue&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Definition&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;The Tree&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Definition&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;The Graph&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Definition&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Cycle Visual&lt;/li&gt;
&lt;li&gt;Ways to Reference Graph Nodes&lt;/li&gt;
&lt;li&gt;Node Class&lt;/li&gt;
&lt;li&gt;Adjacency Matrix&lt;/li&gt;
&lt;li&gt;Adjacency List&lt;/li&gt;
&lt;li&gt;Code Examples&lt;/li&gt;
&lt;li&gt;Basic Graph Class&lt;/li&gt;
&lt;li&gt;Node Class Examples&lt;/li&gt;
&lt;li&gt;
Traversal Examples

&lt;ul&gt;
&lt;li&gt;With Graph Node Class&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;With Adjacency List&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Memoization &amp;amp; Tabulation (&lt;strong&gt;&lt;em&gt;Dynamic Programming&lt;/em&gt;&lt;/strong&gt;)

&lt;ul&gt;
&lt;li&gt;
What is Memoization?

&lt;ul&gt;
&lt;li&gt;And why this programming paradigm shouldn't make you cringe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Memoizing factorial&lt;/li&gt;
&lt;li&gt;Memoizing the Fibonacci generator&lt;/li&gt;
&lt;li&gt;The memoization formula&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Practice:&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  Resuorces:
&lt;/h1&gt;

&lt;p&gt;_**&lt;/p&gt;

&lt;p&gt;🏐⇒⇒⇒Click Here To Expand⇐⇐⇐🏐**_&lt;/p&gt;
&lt;h3&gt;
  
  
  Data Structures &amp;amp; Algorithms Resource List Part 1
&lt;/h3&gt;


&lt;h2&gt;
  
  
  Guess the author of the following quotes:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M80cFqSD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.zdnet.com/a/img/resize/52bcba91cc8c733191d32df909c535dfb73efc2e/2020/06/05/30d74ab5-e703-4b01-8dd1-e1895f627516/linux-penguin-in-windows-10-pc.png%3Fwidth%3D1200%26height%3D675%26fit%3Dcrop%26auto%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M80cFqSD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.zdnet.com/a/img/resize/52bcba91cc8c733191d32df909c535dfb73efc2e/2020/06/05/30d74ab5-e703-4b01-8dd1-e1895f627516/linux-penguin-in-windows-10-pc.png%3Fwidth%3D1200%26height%3D675%26fit%3Dcrop%26auto%3Dwebp" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;gt; &lt;em&gt;&lt;strong&gt;Talk is cheap. Show me the code&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&amp;gt; &lt;em&gt;&lt;strong&gt;Software is like sex: it's better when it's free&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&amp;gt; &lt;em&gt;&lt;strong&gt;Microsoft isn't evil, they just make really crappy operating systems&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_xklOcbX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ArbMyH5LxQQFozL7F" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_xklOcbX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ArbMyH5LxQQFozL7F" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Update:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="56aa"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/Framework%20and%20thoughts%20about%20learning%20data%20structure%20and%20algorithm.md"&gt;The Framework for Learning Algorithms and intense problem solving exercises&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="805e"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/why_i_recommend_algs4.md"&gt;Algs4: Recommended book for Learning Algorithms and Data Structures&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="2bf9"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/AnalysisOfDynamicProgramming.md"&gt;An analysis of Dynamic Programming&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f697"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/OptimalSubstructure.md"&gt;Dynamic Programming Q&amp;amp;A — What is Optimal Substructure&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="a35b"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/DetailsaboutBacktracking.md"&gt;The Framework for Backtracking Algorithm&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="34eb"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/DetailedBinarySearch.md"&gt;Binary Search in Detail: I wrote a Poem&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="c7c9"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/SlidingWindowTechnique.md"&gt;The Sliding Window Technique&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="35dd"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/common_knowledge/linuxProcess.md"&gt;Difference Between Process and Thread in Linux&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="fb0e"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/common_knowledge/OnlinePraticePlatform.md"&gt;Some Good Online Practice Platforms&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="0f7b"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/AnalysisOfDynamicProgramming.md"&gt;Dynamic Programming in Details&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="845b"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/OptimalSubstructure.md"&gt;Dynamic Programming Q&amp;amp;A — What is Optimal Substructure&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="2cc7"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/LongestCommonSubsequence.md"&gt;Classic DP: Longest Common Subsequence&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="57a3"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/EditDistance.md"&gt;Classic DP: Edit Distance&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="e2c1"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/ThrowingEggsinHighBuildings.md"&gt;Classic DP: Super Egg&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="39a3"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/SuperEggDropAdvanced.md"&gt;Classic DP: Super Egg (Advanced Solution)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="c579"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/StrategiesForSubsequenceProblem.md"&gt;The Strategies of Subsequence Problem&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="0ec0"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/GameProblemsInDynamicProgramming.md"&gt;Classic DP: Game Problems&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="44c0"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/IntervalScheduling.md"&gt;Greedy: Interval Scheduling&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="efef"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/KMPCharacterMatchingAlgorithmInDynamicProgramming.md"&gt;KMP Algorithm In Detail&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="635b"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/BestTimeToBuyAndSellStock.md"&gt;A solution to all Buy Time to Buy and Sell Stock Problems&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="0a3f"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/HouseRobber.md"&gt;A solution to all House Robber Problems&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="c1b0"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/FourKeysKeyboard.md"&gt;4 Keys Keyboard&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="dc7f"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/RegularExpression.md"&gt;Regular Expression&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="12b8"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/LongestIncreasingSubsequence.md"&gt;Longest Increasing Subsequence&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="5fbd"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/Framework%20and%20thoughts%20about%20learning%20data%20structure%20and%20algorithm.md"&gt;The Framework for Learning Algorithms and intense problem solving exercises&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="0dd7"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/why_i_recommend_algs4.md"&gt;Algs4: Recommended book for Learning Algorithms and Data Structures&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="5c73"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/data_structure/binary_heap_implements_priority_queues.md"&gt;Binary Heap and Priority Queue&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f0a9"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/LRU_algorithm.md"&gt;LRU Cache Strategy in Detail&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="ea8d"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/data_structure/The_Manipulation_Collection_of_Binary_Search_Tree.md"&gt;Collections of Binary Search Operations&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="e58e"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/data_structure/MonotonicStack.md"&gt;Special Data Structure: Monotonic Stack&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="8578"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/data_structure/Monotonic_queue.md"&gt;Special Data Structure: Monotonic Stack&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="aa92"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/data_structure/design_Twitter.md"&gt;Design Twitter&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="3bc6"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/data_structure/reverse_part_of_a_linked_list_via_recursion.md"&gt;Reverse Part of Linked List via Recursion&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f3ce"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/data_structure/ImplementQueueUsingStacksImplementStackUsingQueues.md"&gt;Queue Implement Stack/Stack implement Queue&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6631"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/ThewaytoAlgorithmlearning.md"&gt;My Way to Learn Algorithm&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="df10"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/DetailsaboutBacktracking.md"&gt;The Framework of Backtracking Algorithm&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f891"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/DetailedBinarySearch.md"&gt;Binary Search in Detail&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="05c2"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/Subset_Permutation_Combination.md"&gt;Backtracking Solve Subset/Permutation/Combination&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="2184"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/double_pointer.md"&gt;Diving into the technical parts of Double Pointers&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="1622"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/SlidingWindowTechnique.md"&gt;Sliding Window Technique&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="4514"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/The_key_to_resolving_TwoSum_problems.md"&gt;The Core Concept of TwoSum Problems&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6a0d"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/CommonBitManipulation.md"&gt;Common Bit Manipulations&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="cf84"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/data_structure/Implementing_the_functions_of_a_calculator.md"&gt;Breaking down a Complicated Problem: Implement a Calculator&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="cecf"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/PancakesSorting.md"&gt;Pancake Sorting Algorithm&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="03c5"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/prefix_sum.md"&gt;Prefix Sum: Intro and Concept&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="3463"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/string_multiplication.md"&gt;String Multiplication&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="14f7"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/flood_fill.md"&gt;FloodFill Algorithm in Detail&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="3778"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/IntervalMerging.md"&gt;Interval Scheduling: Interval Merging&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="cb70"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/IntervalIntersection.md"&gt;Interval Scheduling: Intersections of Intervals&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="02b6"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/RussianDollEnvelopes.md"&gt;Russian Doll Envelopes Problem&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="dfec"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/several_counter_intuitive_probability_problems.md"&gt;A collection of counter-intuitive Probability Problems&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="782c"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/Shuffle_Algorithm.md"&gt;Shuffle Algorithm&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="438d"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/data_structure/RecursionInDetail.md"&gt;Recursion In Detail&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="8524"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/LRU_algorithm.md"&gt;How to Implement LRU Cache&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="c35b"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/Print_PrimeNumbers.md"&gt;How to Find Prime Number Efficiently&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="7d80"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/dynamic_programming/EditDistance.md"&gt;How to Calculate Minimium Edit Distance&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="ed1d"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/UsingBinarySearchAlgorithm.md"&gt;How to use Binary Search&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="473b"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/Trapping_Rain_Water.md"&gt;How to efficiently solve Trapping Rain Water Problem&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="d97b"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/RemoveDuplicatesfromSortedArray.md"&gt;How to Remove Duplicates From Sorted Array&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="ea68"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/TheLongestPalindromicSubstring.md"&gt;How to Find Longest Palindromic Substring&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="177f"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/reverse-nodes-in-k-group.md"&gt;How to Reverse Linked List in K Group&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="7e76"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/valid-parentheses.md"&gt;How to Check the Validation of Parenthesis&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="0d7c"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/missing_elements.md"&gt;How to Find Missing Element&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="a78f"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/Find-Duplicate-and-Missing-Element.md"&gt;How to Find Duplicates and Missing Elements&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="8f44"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/check_palindromic_linkedlist.md"&gt;How to Check Palindromic LinkedList&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="53d5"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/ReservoirSampling.md"&gt;How to Pick Elements From an Infinite Arbitrary Sequence&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="7c8e"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/Seatscheduling.md"&gt;How to Schedule Seats for Students&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="dab2"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/Union-find-Explanation.md"&gt;Union-Find Algorithm in Detail&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6a63"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/think_like_computer/Union-Find-Application.md"&gt;Union-Find Application&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="850c"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/one-line-code-puzzles.md"&gt;Problems that can be solved in one line&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="b435"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/interview/findSebesquenceWithBinarySearch.md"&gt;Find Subsequence With Binary Search&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="e2e0"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/common_knowledge/linuxProcess.md"&gt;Difference Between Process and Thread in Linux&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="b421"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/common_knowledge/linuxshell.md"&gt;You Must Know About Linux Shell&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="be57"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/common_knowledge/SessionAndCookie.md"&gt;You Must Know About Cookie and Session&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="7539"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/common_knowledge/Cryptology.md"&gt;Cryptology Algorithm&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="3628"&gt;&lt;a href="https://72a70b9d-739e-477a-bd84-85357c883a09.vscode-webview-test.com/vscode-resource/file///c:/MY-WEB-DEV/_JOB-SEARCH/03-Interview-Prep/01-reference-guides/common_knowledge/OnlinePraticePlatform.md"&gt;Some Good Online Practice Platforms&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Algorithms
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="bdee"&gt;&lt;a href="https://github.com/coells/100days"&gt;100 days of algorithms&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="2e05"&gt;&lt;a href="https://github.com/marcosfede/algorithms"&gt;Algorithms&lt;/a&gt; — Solved algorithms and data structures problems in many languages.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="05d6"&gt;&lt;a href="http://jeffe.cs.illinois.edu/teaching/algorithms/"&gt;Algorithms by Jeff Erickson&lt;/a&gt; (&lt;a href="https://github.com/jeffgerickson/algorithms"&gt;Code&lt;/a&gt;) (&lt;a href="https://news.ycombinator.com/item?id=26074289"&gt;HN&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="a17f"&gt;&lt;a href="https://www.reddit.com/r/compsci/comments/5uz9lb/top_algorithmsdata_structuresconcepts_every/ddy8azz/"&gt;Top algos/DS to learn&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="9ab0"&gt;&lt;a href="https://www.nayuki.io/category/programming"&gt;Some neat algorithms&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="142f"&gt;&lt;a href="https://stackabuse.com/mathematical-proof-of-algorithm-correctness-and-efficiency/"&gt;Mathematical Proof of Algorithm Correctness and Efficiency (2019)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="85a6"&gt;&lt;a href="https://github.com/algorithm-visualizer/algorithm-visualizer"&gt;Algorithm Visualizer&lt;/a&gt; — Interactive online platform that visualizes algorithms from code.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="9b84"&gt;&lt;a href="https://mitpress.mit.edu/books/algorithms-optimization"&gt;Algorithms for Optimization book&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="565c"&gt;&lt;a href="https://www.algorithm-archive.org/"&gt;Collaborative book on algorithms&lt;/a&gt; (&lt;a href="https://github.com/algorithm-archivists/algorithm-archive"&gt;Code&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="b313"&gt;&lt;a href="http://index-of.co.uk/Algorithms/Algorithms%20in%20C.pdf"&gt;Algorithms in C by Robert Sedgewick&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f0e0"&gt;&lt;a href="http://mimoza.marmara.edu.tr/~msakalli/cse706_12/SkienaTheAlgorithmDesignManual.pdf"&gt;Algorithm Design Manual&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="53a1"&gt;&lt;a href="https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/"&gt;MIT Introduction to Algorithms course (2011)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="7f59"&gt;&lt;a href="http://codecapsule.com/2012/01/18/how-to-implement-a-paper/"&gt;How to implement an algorithm from a scientific paper (2012)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="cd31"&gt;&lt;a href="https://github.com/scandum/quadsort"&gt;Quadsort&lt;/a&gt; — Stable non-recursive merge sort named quadsort.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="3695"&gt;&lt;a href="https://github.com/resumejob/system-design-algorithms"&gt;System design algorithms&lt;/a&gt; — Algorithms you should know before system design.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="959b"&gt;&lt;a href="http://www.cs.sjtu.edu.cn/~jiangli/teaching/CS222/files/materials/Algorithm%20Design.pdf"&gt;Algorithms Design book&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="bc44"&gt;&lt;a href="http://greenteapress.com/complexity/html/index.html"&gt;Think Complexity&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="b149"&gt;&lt;a href="https://github.com/TheAlgorithms/Rust"&gt;All Algorithms implemented in Rust&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="e8ad"&gt;&lt;a href="https://walkccc.github.io/CLRS/"&gt;Solutions to Introduction to Algorithms book&lt;/a&gt; (&lt;a href="https://github.com/walkccc/CLRS"&gt;Code&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6f0a"&gt;&lt;a href="https://www.jamisbuck.org/mazes/"&gt;Maze Algorithms (2011)&lt;/a&gt; (&lt;a href="https://news.ycombinator.com/item?id=23429368"&gt;HN&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="9a09"&gt;&lt;a href="https://page.skerritt.blog/algorithms/"&gt;Algorithmic Design Paradigms book&lt;/a&gt; (&lt;a href="https://github.com/brandonskerritt/AlgorithmsBook"&gt;Code&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="dbff"&gt;&lt;a href="https://wordsandbuttons.online/"&gt;Words and buttons Online Blog&lt;/a&gt; (&lt;a href="https://github.com/akalenuk/wordsandbuttons"&gt;Code&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="089a"&gt;&lt;a href="https://www.chrislaux.com/"&gt;Algorithms animated&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="4eb6"&gt;&lt;a href="https://jiahai-feng.github.io/posts/cache-oblivious-algorithms/"&gt;Cache Oblivious Algorithms (2020)&lt;/a&gt; (&lt;a href="https://news.ycombinator.com/item?id=23662434"&gt;HN&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="4001"&gt;&lt;a href="http://blog.ezyang.com/2012/03/you-could-have-invented-fractional-cascading/"&gt;You could have invented fractional cascading (2012)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6fb5"&gt;&lt;a href="https://labuladong.gitbook.io/algo-en/"&gt;Guide to learning algorithms through LeetCode&lt;/a&gt; (&lt;a href="https://github.com/labuladong/fucking-algorithm/tree/english"&gt;Code&lt;/a&gt;) (&lt;a href="https://news.ycombinator.com/item?id=24167297"&gt;HN&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="be96"&gt;&lt;a href="https://cstheory.stackexchange.com/questions/34/how-hard-is-unshuffling-a-string"&gt;How hard is unshuffling a string?&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6f50"&gt;&lt;a href="https://sites.uclouvain.be/absil/amsbook/"&gt;Optimization Algorithms on Matrix Manifolds&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="1a1c"&gt;&lt;a href="https://runestone.academy/runestone/books/published/pythonds/index.html"&gt;Problem Solving with Algorithms and Data Structures&lt;/a&gt; (&lt;a href="https://news.ycombinator.com/item?id=24287622"&gt;HN&lt;/a&gt;) (&lt;a href="https://www.cs.auckland.ac.nz/compsci105s1c/resources/ProblemSolvingwithAlgorithmsandDataStructures.pdf"&gt;PDF&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="a16e"&gt;&lt;a href="https://github.com/TheAlgorithms/Python"&gt;Algorithms implemented in Python&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="34d4"&gt;&lt;a href="https://github.com/TheAlgorithms/Javascript"&gt;Algorithms implemented in JavaScript&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="911d"&gt;&lt;a href="https://github.com/williamfiset/Algorithms"&gt;Algorithms &amp;amp; Data Structures in Java&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="3bd3"&gt;&lt;a href="https://github.com/scandum/wolfsort"&gt;Wolfsort&lt;/a&gt; — Stable adaptive hybrid radix / merge sort.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f3ea"&gt;&lt;a href="https://github.com/fcampelo/EC-Bestiary"&gt;Evolutionary Computation Bestiary&lt;/a&gt; — Bestiary of evolutionary, swarm and other metaphor-based algorithms.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="c434"&gt;&lt;a href="http://elementsofprogramming.com/"&gt;Elements of Programming book&lt;/a&gt; — Decomposing programs into a system of algorithmic components. (&lt;a href="http://www.pathsensitive.com/2020/09/book-review-elements-of-programmnig.html"&gt;Review&lt;/a&gt;) (&lt;a href="https://news.ycombinator.com/item?id=24635947"&gt;HN&lt;/a&gt;) (&lt;a href="https://lobste.rs/s/bqnhbo/book_review_elements_programmnig"&gt;Lobsters&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="8d6b"&gt;&lt;a href="https://cp-algorithms.com/"&gt;Competitive Programming Algorithms&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6a45"&gt;&lt;a href="https://github.com/akshitagit/CPP"&gt;CPP/C&lt;/a&gt; — C/C++ algorithms/DS problems.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="9ea4"&gt;&lt;a href="https://www.adamconrad.dev/blog/how-to-design-an-algorithm/"&gt;How to design an algorithm (2018)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="5c20"&gt;&lt;a href="https://www.youtube.com/playlist?list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx"&gt;CSE 373 — Introduction to Algorithms, by Steven Skiena (2020)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="2f4f"&gt;&lt;a href="http://homepages.math.uic.edu/~lreyzin/f20_mcs501/"&gt;Computer Algorithms II course (2020)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="9132"&gt;&lt;a href="https://notebook.drmaciver.com/posts/2019-04-30-13:03.html"&gt;Improving Binary Search by Guessing (2019)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="d90f"&gt;&lt;a href="https://blog.acolyer.org/2020/10/19/the-case-for-a-learned-sorting-algorithm/"&gt;The case for a learned sorting algorithm (2020)&lt;/a&gt; (&lt;a href="https://news.ycombinator.com/item?id=24823611"&gt;HN&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f8c6"&gt;&lt;a href="https://github.com/liuxinyu95/AlgoXY"&gt;Elementary Algorithms&lt;/a&gt; — Introduces elementary algorithms and data structures. Includes side-by-side comparisons of purely functional realization and their imperative counterpart.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="7c37"&gt;&lt;a href="https://sahandsaba.com/combinatorial-generation-for-coding-interviews-in-python.html"&gt;Combinatorics Algorithms for Coding Interviews (2018)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="4220"&gt;&lt;a href="https://github.com/ZoranPandovski/al-go-rithms"&gt;Algorithms written in different programming languages&lt;/a&gt; (&lt;a href="https://zoranpandovski.github.io/al-go-rithms/"&gt;Web&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="e79b"&gt;&lt;a href="https://johnlekberg.com/blog/2020-10-25-seq-align.html"&gt;Solving the Sequence Alignment problem in Python (2020)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="fc55"&gt;&lt;a href="https://github.com/bingmann/sound-of-sorting"&gt;The Sound of Sorting&lt;/a&gt; — Visualization and "Audibilization" of Sorting Algorithms. (&lt;a href="https://panthema.net/2013/sound-of-sorting/"&gt;Web&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="a360"&gt;&lt;a href="https://danlark.org/2020/11/11/miniselect-practical-and-generic-selection-algorithms/"&gt;Miniselect: Practical and Generic Selection Algorithms (2020)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="5d05"&gt;&lt;a href="https://chasewilson.dev/blog/slowest-quicksort/"&gt;The Slowest Quicksort (2019)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="a4f7"&gt;&lt;a href="https://blog.sigplan.org/2020/11/17/functional-algorithm-design-part-0/"&gt;Functional Algorithm Design (2020)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="2c4b"&gt;&lt;a href="https://milofultz.com/2020/12/27/atlb-notes"&gt;Algorithms To Live By — Book Notes&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="885a"&gt;&lt;a href="http://people.csail.mit.edu/jsolomon/share/book/numerical_book.pdf"&gt;Numerical Algorithms (2015)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="0002"&gt;&lt;a href="https://blog.vespa.ai/using-approximate-nearest-neighbor-search-in-real-world-applications/"&gt;Using approximate nearest neighbor search in real world applications (2020)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="85a7"&gt;&lt;a href="https://arxiv.org/pdf/1911.06347.pdf"&gt;In search of the fastest concurrent Union-Find algorithm (2019)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="5d1b"&gt;&lt;a href="https://www.cs.princeton.edu/courses/archive/fall13/cos521/"&gt;Computer Science 521 Advanced Algorithm Design&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dUS2-lt_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A2fb7io8VD9z8080F.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dUS2-lt_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A2fb7io8VD9z8080F.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Structures:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="fd86"&gt;&lt;a href="https://github.com/floyernick/Data-Structures-and-Algorithms"&gt;Data Structures and Algorithms implementation in Go&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="cbae"&gt;&lt;a href="https://softwareengineering.stackexchange.com/questions/155639/which-algorithms-data-structures-should-i-recognize-and-know-by-name"&gt;Which algorithms/data structures should I "recognize" and know by name?&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="0e28"&gt;&lt;a href="https://xlinux.nist.gov/dads/"&gt;Dictionary of Algorithms and Data Structures&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="e10f"&gt;&lt;a href="https://g1thubhub.github.io/data-structure-zoo.html"&gt;Phil's Data Structure Zoo&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f159"&gt;&lt;a href="https://stratos.seas.harvard.edu/files/stratos/files/periodictabledatastructures.pdf"&gt;The Periodic Table of Data Structures&lt;/a&gt; (&lt;a href="https://news.ycombinator.com/item?id=18314555"&gt;HN&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="dc3c"&gt;&lt;a href="https://www.cs.usfca.edu/~galles/visualization/Algorithms.html"&gt;Data Structure Visualizations&lt;/a&gt; (&lt;a href="https://news.ycombinator.com/item?id=19082943"&gt;HN&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="8405"&gt;&lt;a href="http://blog.amynguyen.net/?p=853"&gt;Data structures to name-drop when you want to sound smart in an interview&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="9893"&gt;&lt;a href="https://pdziepak.github.io/2019/05/02/on-lists-cache-algorithms-and-microarchitecture/"&gt;On lists, cache, algorithms, and microarchitecture (2019)&lt;/a&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6c1d"&gt;&lt;a href="http://web.stanford.edu/class/cs166/handouts/100%20Suggested%20Final%20Project%20Topics.pdf"&gt;Topics in Advanced Data Structures (2019)&lt;/a&gt; (&lt;a href="https://news.ycombinator.com/item?id=19780387"&gt;HN&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;/h2&gt;






## A simple to follow guide to Lists Stacks and Queues, with animated gifs, diagrams, and code examples




&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--inmD4i6g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2560/0%2Aph952PPOmG5uz_Pv" width="880" height="620"&gt;



&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R4SdxuUH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AzhC6dP1hb2rq2qt2.png" width="800" height="400"&gt;

&lt;h3&gt;
  
  
  Linked Lists
&lt;/h3&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bydrqvza--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AznES1vYRV3Zvk9-e.gif" width="800" height="600"&gt;
In the university setting, it's common for Linked Lists to appear early on in an undergraduate's Computer Science coursework. While they don't always have the most practical real-world applications in industry, Linked Lists make for an important and effective educational tool in helping develop a student's mental model on what data structures actually are to begin with.

Linked lists are simple. They have many compelling, reoccurring edge cases to consider that emphasize to the student the need for care and intent while implementing data structures. They can be applied as the underlying data structure while implementing a variety of other prevalent abstract data types, such as Lists, Stacks, and Queues, and they have a level of versatility high enough to clearly illustrate the value of the Object Oriented Programming paradigm.

They also come up in software engineering interviews quite often.


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---80FEQBJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AOYmTpAK6tyDQzoIE.gif" width="600" height="194"&gt;

&lt;h3&gt;
  
  
  What is a Linked List?
&lt;/h3&gt;

&lt;p&gt;A Linked List data structure represents a linear sequence of "vertices" (or "nodes"), and tracks three important properties.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linked List Properties:&lt;/strong&gt;&lt;/p&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1R8IN2NL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2Az-i1wE6QPOtqxGiW_B6WuA.png" width="390" height="89"&gt;
The data being tracked by a particular Linked List does not live inside the Linked List instance itself. Instead, each vertex is actually an instance of an even simpler, smaller data structure, often referred to as a "Node".

Depending on the type of Linked List (there are many), Node instances track some very important properties as well.

**Linked List Node Properties:**


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--avs7vHlv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AvagMBs5Quwv8b8tvF4W6Og.png" width="489" height="112"&gt;
Property Description `value`: The actual value this node represents.`next`The next node in the list (relative to this node).`previous`The previous node in the list (relative to this node).

**NOTE:** The `previous` property is for Doubly Linked Lists only!

Linked Lists contain _ordered_ data, just like arrays. The first node in the list is, indeed, first. From the perspective of the very first node in the list, the _next_ node is the second node. From the perspective of the second node in the list, the _previous_ node is the first node, and the _next_ node is the third node. And so it goes.

#### "So…this sounds a lot like an Array…"

Admittedly, this does _sound_ a lot like an Array so far, and that's because Arrays and Linked Lists are both implementations of the List ADT. However, there is an incredibly important distinction to be made between Arrays and Linked Lists, and that is how they _physically store_ their data. (As opposed to how they _represent_ the order of their data.)

Recall that Arrays contain _contiguous_ data. Each element of an array is actually stored _next to_ it's neighboring element _in the actual hardware of your machine_, in a single continuous block in memory.

_An Array's contiguous data being stored in a continuous block of addresses in memory._

Unlike Arrays, Linked Lists contain _non-contiguous_ data. Though Linked Lists _represent_ data that is ordered linearly, that mental model is just that — an interpretation of the _representation_ of information, not reality.

In reality, in the actual hardware of your machine, whether it be in disk or in memory, a Linked List's Nodes are not stored in a single continuous block of addresses. Rather, Linked List Nodes live at randomly distributed addresses throughout your machine! The only reason we know which node comes next in the list is because we've assigned its reference to the current node's `next` pointer.

_A Singly Linked List's non-contiguous data (Nodes) being stored at randomly distributed addresses in memory._

For this reason, Linked List Nodes have _no indices_, and no _random access_. Without random access, we do not have the ability to look up an individual Linked List Node in constant time. Instead, to find a particular Node, we have to start at the very first Node and iterate through the Linked List one node at a time, checking each Node's _next_ Node until we find the one we're interested in.

So when implementing a Linked List, we actually must implement both the Linked List class _and_ the Node class. Since the actual data lives in the Nodes, it's simpler to implement the Node class first.

### Types of Linked Lists

There are four flavors of Linked List you should be familiar with when walking into your job interviews.

**Linked List Types:**


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EXwWnTKT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AZoYIEJaOpPiYAuqtPLt8yw.png" width="691" height="132"&gt;
***Note:****These Linked List types are not always mutually exclusive.*

For instance:

- &lt;span id="a0e8"&gt;Any type of Linked List can be implemented Circularly (e.g. A Circular Doubly Linked List).&lt;/span&gt;
- &lt;span id="c0ff"&gt;A Doubly Linked List is actually just a special case of a Multiply Linked List.&lt;/span&gt;

You are most likely to encounter Singly and Doubly Linked Lists in your upcoming job search, so we are going to focus exclusively on those two moving forward. However, in more senior level interviews, it is very valuable to have some familiarity with the other types of Linked Lists. Though you may not actually code them out, _you will win extra points by illustrating your ability to weigh the tradeoffs of your technical decisions_ by discussing how your choice of Linked List type may affect the efficiency of the solutions you propose.

### Linked List Methods


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ISI6jIyp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1200/1%2A9EnhpQAeV03_DyEZIyiTCw.png" width="880" height="472"&gt;


&lt;p&gt;Linked Lists are great foundation builders when learning about data structures because they share a number of similar methods (and edge cases) with many other common data structures. You will find that many of the concepts discussed here will repeat themselves as we dive into some of the more complex non-linear data structures later on, like Trees and Graphs.&lt;/p&gt;
&lt;h3&gt;
  
  
  Time and Space Complexity Analysis
&lt;/h3&gt;

&lt;p&gt;Before we begin our analysis, here is a quick summary of the Time and Space constraints of each Linked List Operation. The complexities below apply to both Singly and Doubly Linked Lists:&lt;/p&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VsvkrFO3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1200/1%2AEnb9YaqRxzS87ML83Loasw.png" width="880" height="279"&gt;


&lt;p&gt;Before moving forward, see if you can reason to yourself why each operation has the time and space complexity listed above!&lt;/p&gt;
&lt;h3&gt;
  
  
  Time Complexity — Access and Search
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Scenarios
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;span id="16fe"&gt;We have a Linked List, and we'd like to find the 8th item in the list.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="a9f7"&gt;We have a Linked List of sorted alphabet letters, and we'd like to see if the letter "Q" is inside that list.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Discussion
&lt;/h4&gt;

&lt;p&gt;Unlike Arrays, Linked Lists Nodes are not stored contiguously in memory, and thereby do not have an indexed set of memory addresses at which we can quickly lookup individual nodes in constant time. Instead, we must begin at the head of the list (or possibly at the tail, if we have a Doubly Linked List), and iterate through the list until we arrive at the node of interest.&lt;/p&gt;

&lt;p&gt;In Scenario 1, we'll know we're there because we've iterated 8 times. In Scenario 2, we'll know we're there because, while iterating, we've checked each node's value and found one that matches our target value, "Q".&lt;/p&gt;

&lt;p&gt;In the worst case scenario, we may have to traverse the entire Linked List until we arrive at the final node. This makes both Access &amp;amp; Search &lt;strong&gt;Linear Time&lt;/strong&gt; operations.&lt;/p&gt;
&lt;h3&gt;
  
  
  Time Complexity — Insertion and Deletion
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Scenarios
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;span id="2462"&gt;We have an empty Linked List, and we'd like to insert our first node.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="ae0b"&gt;We have a Linked List, and we'd like to insert or delete a node at the Head or Tail.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="290b"&gt;We have a Linked List, and we'd like to insert or delete a node from somewhere in the middle of the list.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Discussion
&lt;/h4&gt;

&lt;p&gt;Since we have our Linked List Nodes stored in a non-contiguous manner that relies on pointers to keep track of where the next and previous nodes live, Linked Lists liberate us from the linear time nature of Array insertions and deletions. We no longer have to adjust the position at which each node/element is stored after making an insertion at a particular position in the list. Instead, if we want to insert a new node at position &lt;code&gt;i&lt;/code&gt;, we can simply:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;span id="7675"&gt;Create a new node.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="adf9"&gt;Set the new node's &lt;code&gt;next&lt;/code&gt; and &lt;code&gt;previous&lt;/code&gt; pointers to the nodes that live at positions &lt;code&gt;i&lt;/code&gt; and &lt;code&gt;i - 1&lt;/code&gt;, respectively.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="1bf6"&gt;Adjust the &lt;code&gt;next&lt;/code&gt; pointer of the node that lives at position &lt;code&gt;i - 1&lt;/code&gt; to point to the new node.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="9580"&gt;Adjust the &lt;code&gt;previous&lt;/code&gt; pointer of the node that lives at position &lt;code&gt;i&lt;/code&gt; to point to the new node.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And we're done, in Constant Time. No iterating across the entire list necessary.&lt;/p&gt;

&lt;p&gt;"But hold on one second," you may be thinking. "In order to insert a new node in the middle of the list, don't we have to lookup its position? Doesn't that take linear time?!"&lt;/p&gt;

&lt;p&gt;Yes, it is tempting to call insertion or deletion in the middle of a Linked List a linear time operation since there is lookup involved. However, it's usually the case that you'll already have a reference to the node where your desired insertion or deletion will occur.&lt;/p&gt;

&lt;p&gt;For this reason, we separate the Access time complexity from the Insertion/Deletion time complexity, and formally state that Insertion and Deletion in a Linked List are &lt;strong&gt;Constant Time&lt;/strong&gt; across the board.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Note:&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;Without a reference to the node at which an insertion or deletion will occur, due to linear time lookup, an insertion or deletion in the middle of a Linked List will still take Linear Time, sum total.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Space Complexity
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Scenarios
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;span id="12d2"&gt;We're given a Linked List, and need to operate on it.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="7c5f"&gt;We've decided to create a new Linked List as part of strategy to solve some problem.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Discussion
&lt;/h4&gt;

&lt;p&gt;It's obvious that Linked Lists have one node for every one item in the list, and for that reason we know that Linked Lists take up Linear Space in memory. However, when asked in an interview setting what the Space Complexity &lt;em&gt;of your solution&lt;/em&gt; to a problem is, it's important to recognize the difference between the two scenarios above.&lt;/p&gt;

&lt;p&gt;In Scenario 1, we &lt;em&gt;are not&lt;/em&gt; creating a new Linked List. We simply need to operate on the one given. Since we are not storing a &lt;em&gt;new&lt;/em&gt; node for every node represented in the Linked List we are provided, our solution is &lt;em&gt;not necessarily&lt;/em&gt; linear in space.&lt;/p&gt;

&lt;p&gt;In Scenario 2, we &lt;em&gt;are&lt;/em&gt; creating a new Linked List. If the number of nodes we create is linearly correlated to the size of our input data, we are now operating in Linear Space.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;*Note**&lt;/strong&gt;: Linked Lists can be traversed both iteratively and recursively. If you choose to traverse a Linked List recursively, there will be a recursive function call added to the call stack for every node in the Linked List. Even if you're provided the Linked List, as in Scenario 1, you will still use Linear Space in the call stack, and that counts.*&lt;/p&gt;


&lt;h3&gt;
  
  
  Stacks and Queues
&lt;/h3&gt;

&lt;p&gt;Stacks and Queues aren't really "data structures" by the strict definition of the term. The more appropriate terminology would be to call them abstract data types (ADTs), meaning that their definitions are more conceptual and related to the rules governing their user-facing behaviors rather than their core implementations.&lt;/p&gt;

&lt;p&gt;For the sake of simplicity, we'll refer to them as data structures and ADTs interchangeably throughout the course, but the distinction is an important one to be familiar with as you level up as an engineer.&lt;/p&gt;

&lt;p&gt;Now that that's out of the way, Stacks and Queues represent a linear collection of nodes or values. In this way, they are quite similar to the Linked List data structure we discussed in the previous section. In fact, you can even use a modified version of a Linked List to implement each of them. (Hint, hint.)&lt;/p&gt;

&lt;p&gt;These two ADTs are similar to each other as well, but each obey their own special rule regarding the order with which Nodes can be added and removed from the structure.&lt;/p&gt;

&lt;p&gt;Since we've covered Linked Lists in great length, these two data structures will be quick and easy. Let's break them down individually in the next couple of sections.&lt;/p&gt;
&lt;h3&gt;
  
  
  What is a Stack?
&lt;/h3&gt;

&lt;p&gt;Stacks are a Last In First Out (LIFO) data structure. The last Node added to a stack is always the first Node to be removed, and as a result, the first Node added is always the last Node removed.&lt;/p&gt;

&lt;p&gt;The name Stack actually comes from this characteristic, as it is helpful to visualize the data structure as a vertical stack of items. Personally, I like to think of a Stack as a stack of plates, or a stack of sheets of paper. This seems to make them more approachable, because the analogy relates to something in our everyday lives.&lt;/p&gt;

&lt;p&gt;If you can imagine adding items to, or removing items from, a Stack of…literally anything…you'll realize that every (sane) person naturally obeys the LIFO rule.&lt;/p&gt;

&lt;p&gt;We add things to the &lt;em&gt;top&lt;/em&gt; of a stack. We remove things from the &lt;em&gt;top&lt;/em&gt; of a stack. We never add things to, or remove things from, the &lt;em&gt;bottom&lt;/em&gt; of the stack. That's just crazy.&lt;/p&gt;

&lt;p&gt;Note: We can use JavaScript Arrays to implement a basic stack. &lt;code&gt;Array#push&lt;/code&gt; adds to the top of the stack and &lt;code&gt;Array#pop&lt;/code&gt; will remove from the top of the stack. In the exercise that follows, we'll build our own Stack class from scratch (without using any arrays). In an interview setting, your evaluator may be okay with you using an array as a stack.&lt;/p&gt;


&lt;h3&gt;
  
  
  What is a Queue?
&lt;/h3&gt;

&lt;p&gt;Queues are a First In First Out (FIFO) data structure. The first Node added to the queue is always the first Node to be removed.&lt;/p&gt;

&lt;p&gt;The name Queue comes from this characteristic, as it is helpful to visualize this data structure as a horizontal line of items with a beginning and an end. Personally, I like to think of a Queue as the line one waits on for an amusement park, at a grocery store checkout, or to see the teller at a bank.&lt;/p&gt;

&lt;p&gt;If you can imagine a queue of humans waiting…again, for literally anything…you'll realize that &lt;em&gt;most&lt;/em&gt; people (the civil ones) naturally obey the FIFO rule.&lt;/p&gt;

&lt;p&gt;People add themselves to the &lt;em&gt;back&lt;/em&gt; of a queue, wait their turn in line, and make their way toward the &lt;em&gt;front&lt;/em&gt;. People exit from the &lt;em&gt;front&lt;/em&gt; of a queue, but only when they have made their way to being first in line.&lt;/p&gt;

&lt;p&gt;We never add ourselves to the front of a queue (unless there is no one else in line), otherwise we would be "cutting" the line, and other humans don't seem to appreciate that.&lt;/p&gt;

&lt;p&gt;Note: We can use JavaScript Arrays to implement a basic queue. &lt;code&gt;Array#push&lt;/code&gt; adds to the back (enqueue) and &lt;code&gt;Array#shift&lt;/code&gt; will remove from the front (dequeue). In the exercise that follows, we'll build our own Queue class from scratch (without using any arrays). In an interview setting, your evaluator may be okay with you using an array as a queue.&lt;/p&gt;
&lt;h3&gt;
  
  
  Stack and Queue Properties
&lt;/h3&gt;

&lt;p&gt;Stacks and Queues are so similar in composition that we can discuss their properties together. They track the following three properties:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack Properties | Queue Properties:&lt;/strong&gt;&lt;/p&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lQmm4lk2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AaZCnZJzaeY74DTb2CTRuFA.png" width="662" height="562"&gt;
Notice that rather than having a `head` and a `tail` like Linked Lists, Stacks have a `top`, and Queues have a `front` and a `back` instead. Stacks don't have the equivalent of a `tail` because you only ever push or pop things off the top of Stacks. These properties are essentially the same; pointers to the end points of the respective List ADT where important actions way take place. The differences in naming conventions are strictly for human comprehension.

--------

Similarly to Linked Lists, the values stored inside a Stack or a Queue are actually contained within Stack Node and Queue Node instances. Stack, Queue, and Singly Linked List Nodes are all identical, but just as a reminder and for the sake of completion, these List Nodes track the following two properties:

### Time and Space Complexity Analysis

Before we begin our analysis, here is a quick summary of the Time and Space constraints of each Stack Operation.

Data Structure Operation Time Complexity (Avg)Time Complexity (Worst)Space Complexity (Worst)Access`Θ(n)O(n)O(n)`Search`Θ(n)O(n)O(n)`Insertion`Θ(1)O(1)O(n)`Deletion`Θ(1)O(1)O(n)`

Before moving forward, see if you can reason to yourself why each operation has the time and space complexity listed above!

#### Time Complexity — Access and Search

When the Stack ADT was first conceived, its inventor definitely did not prioritize searching and accessing individual Nodes or values in the list. The same idea applies for the Queue ADT. There are certainly better data structures for speedy search and lookup, and if these operations are a priority for your use case, it would be best to choose something else!

Search and Access are both linear time operations for Stacks and Queues, and that shouldn't be too unclear. Both ADTs are nearly identical to Linked Lists in this way. The only way to find a Node somewhere in the middle of a Stack or a Queue, is to start at the `top` (or the `back`) and traverse downward (or forward) toward the `bottom` (or `front`) one node at a time via each Node's `next` property.

This is a linear time operation, O(n).

#### Time Complexity — Insertion and Deletion

For Stacks and Queues, insertion and deletion is what it's all about. If there is one feature a Stack absolutely must have, it's constant time insertion and removal to and from the `top` of the Stack (FIFO). The same applies for Queues, but with insertion occurring at the `back` and removal occurring at the `front` (LIFO).

Think about it. When you add a plate to the top of a stack of plates, do you have to iterate through all of the other plates first to do so? Of course not. You simply add your plate to the top of the stack, and that's that. The concept is the same for removal.

Therefore, Stacks and Queues have constant time Insertion and Deletion via their `push` and `pop` or `enqueue` and `dequeue` methods, O(1).

#### Space Complexity

The space complexity of Stacks and Queues is very simple. Whether we are instantiating a new instance of a Stack or Queue to store a set of data, or we are using a Stack or Queue as part of a strategy to solve some problem, Stacks and Queues always store one Node for each value they receive as input.

For this reason, we always consider Stacks and Queues to have a linear space complexity, O(n).

### When should we use Stacks and Queues?

At this point, we've done a lot of work understanding the ins and outs of Stacks and Queues, but we still haven't really discussed what we can use them for. The answer is actually…a lot!

For one, Stacks and Queues can be used as intermediate data structures while implementing some of the more complicated data structures and methods we'll see in some of our upcoming sections.

For example, the implementation of the breadth-first Tree traversal algorithm takes advantage of a Queue instance, and the depth-first Graph traversal algorithm exploits the benefits of a Stack instance.

Additionally, Stacks and Queues serve as the essential underlying data structures to a wide variety of applications you use all the time. Just to name a few:



# Graphs:

### Graph Data Structure Interview Questions At A Glance

&amp;gt; Because they're just about the most important data structure there is.


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xWFspWBb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AD_VTiLB2q1sax7Dd.png" width="800" height="545"&gt;



&lt;h2&gt;
  
  
  Graphs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;graph&lt;/strong&gt;: collections of data represented by nodes and connections between nodes&lt;br&gt;&lt;br&gt;
&lt;strong&gt;graphs&lt;/strong&gt;: way to formally represent network; ordered pairs&lt;br&gt;&lt;br&gt;
&lt;strong&gt;graphs&lt;/strong&gt;: modeling relations between many items; Facebook friends (you = node; friendship = edge; bidirectional); twitter = unidirectional&lt;br&gt;&lt;br&gt;
&lt;strong&gt;graph theory&lt;/strong&gt;: study of graphs&lt;br&gt;&lt;br&gt;
&lt;strong&gt;big O of graphs&lt;/strong&gt;: G = V(E)&lt;/p&gt;

&lt;p&gt;trees are a type of graph&lt;/p&gt;

&lt;p&gt;Components required to make a graph:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="ca43"&gt;&lt;strong&gt;nodes or vertices&lt;/strong&gt;: represent objects in a dataset (cities, animals, web pages)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="a2ee"&gt;&lt;strong&gt;edges&lt;/strong&gt;: connections between vertices; can be bidirectional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="fc4a"&gt;&lt;strong&gt;weight&lt;/strong&gt;: cost to travel across an edge; optional (aka cost)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="769d"&gt;maps&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="19f3"&gt;networks of activity&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="93d9"&gt;anything you can represent as a network&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="45a1"&gt;multi-way relational data&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Types of Graphs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="f259"&gt;&lt;strong&gt;directed&lt;/strong&gt;: can only move in one direction along edges; which direction indicated by arrows&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="1bfb"&gt;&lt;strong&gt;undirected&lt;/strong&gt;: allows movement in both directions along edges; bidirectional&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="e813"&gt;&lt;strong&gt;cyclic&lt;/strong&gt;: weighted; edges allow you to revisit at least 1 vertex; example weather&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="52d4"&gt;&lt;strong&gt;acyclical&lt;/strong&gt;: vertices can only be visited once; example recipe&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two common ways to represent graphs in code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="4380"&gt;&lt;strong&gt;adjacency lists&lt;/strong&gt;: graph stores list of vertices; for each vertex, it stores list of connected vertices&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="dedc"&gt;&lt;strong&gt;adjacency matrices&lt;/strong&gt;: two-dimensional array of lists with built-in edge weights; denotes no relationship&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both have strengths and weaknesses.&lt;/p&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KoGTcW-q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2APunyRdBT24D0NkD5AdhL9Q.png" width="755" height="165"&gt;

&lt;h3&gt;
  
  
  Questions
&lt;/h3&gt;
&lt;h4&gt;
  
  
  What is a Graph?
&lt;/h4&gt;

&lt;p&gt;A Graph is a data structure that models objects and pairwise relationships between them with nodes and edges. For example: Users and friendships, locations and paths between them, parents and children, etc.&lt;/p&gt;
&lt;h4&gt;
  
  
  Why is it important to learn Graphs?
&lt;/h4&gt;

&lt;p&gt;Graphs represent relationships between data. Anytime you can identify a relationship pattern, you can build a graph and often gain insights through a traversal. These insights can be very powerful, allowing you to find new relationships, like users who have a similar taste in music or purchasing.&lt;/p&gt;
&lt;h4&gt;
  
  
  How many types of graphs are there?
&lt;/h4&gt;

&lt;p&gt;Graphs can be directed or undirected, cyclic or acyclic, weighted or unweighted. They can also be represented with different underlying structures including, but not limited to, adjacency lists, adjacency matrices, object and pointers, or a custom solution.&lt;/p&gt;
&lt;h4&gt;
  
  
  What is the time complexity (big-O) to add/remove/get a vertex/edge for a graph?
&lt;/h4&gt;

&lt;p&gt;It depends on the implementation. (&lt;a href="https://github.com/LambdaSchool/Graphs/tree/master/objectives/graph-representations"&gt;Graph Representations&lt;/a&gt;). Before choosing an implementation, it is wise to consider the tradeoffs and complexities of the most commonly used operations.&lt;/p&gt;
&lt;h3&gt;
  
  
  Graph Representations
&lt;/h3&gt;

&lt;p&gt;The two most common ways to represent graphs in code are adjacency lists and adjacency matrices, each with its own strengths and weaknesses. When deciding on a graph implementation, it's important to understand the type of data and operations you will be using.&lt;/p&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yhWPQo9m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AJ7ZaHRxtBYCkaiQZ.png" width="800" height="218"&gt;

&lt;h3&gt;
  
  
  Adjacency List
&lt;/h3&gt;

&lt;p&gt;In an adjacency list, the graph stores a list of vertices and for each vertex, a list of each vertex to which it's connected. So, for the following graph…&lt;/p&gt;

&lt;p&gt;…an adjacency list in Python could look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Graph&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vertices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                              &lt;span class="s"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"B"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                              &lt;span class="s"&gt;"B"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"C"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"D"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                              &lt;span class="s"&gt;"C"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"E"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                              &lt;span class="s"&gt;"D"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"F"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"G"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                              &lt;span class="s"&gt;"E"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"C"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                              &lt;span class="s"&gt;"F"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"C"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                              &lt;span class="s"&gt;"G"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"F"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                            &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Note that this adjacency list doesn't actually use any lists. The &lt;code&gt;vertices&lt;/code&gt; collection is a &lt;code&gt;dictionary&lt;/code&gt; which lets us access each collection of edges in O(1) constant time while the edges are contained in a &lt;code&gt;set&lt;/code&gt; which lets us check for the existence of edges in O(1) constant time.&lt;/p&gt;
&lt;h3&gt;
  
  
  Adjacency Matrix
&lt;/h3&gt;

&lt;p&gt;Now, let's see what this graph might look like as an adjacency matrix:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Graph&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;edges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                          &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                          &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                          &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                          &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                          &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                          &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;We represent this matrix as a two-dimensional array, or a list of lists. With this implementation, we get the benefit of built-in edge weights but do not have an association between the values of our vertices and their index.&lt;/p&gt;

&lt;p&gt;In practice, both of these would probably contain more information by including Vertex or Edge classes.&lt;/p&gt;
&lt;h3&gt;
  
  
  Tradeoffs
&lt;/h3&gt;

&lt;p&gt;Both adjacency matrices and adjacency lists have their own strengths and weaknesses. Let's explore their tradeoffs.&lt;/p&gt;

&lt;p&gt;For the following:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;V: Total number of vertices in the graph&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;E: Total number of edges in the graph&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;e: Average number of edges per vertex&lt;/strong&gt;&lt;/p&gt;


&lt;h4&gt;
  
  
  Space Complexity
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="f8f8"&gt;&lt;strong&gt;Adjacency Matrix&lt;/strong&gt;: O(V ^ 2)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="1946"&gt;&lt;strong&gt;Adjacency List&lt;/strong&gt;: O(V + E)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Consider a sparse graph with 100 vertices and only one edge. An adjacency list would have to store all 100 vertices but only needs to keep track of that single edge. The adjacency matrix would need to store 100x100=10,000 possible connections, even though all but one would be 0.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Now consider a dense graph where each vertex points to each other vertex. In this case, the total number of edges will approach V&lt;sup&gt;2&lt;/sup&gt; so the space complexities of each are comparable. However, dictionaries and sets are less space efficient than lists so for dense graphs, the adjacency matrix is more efficient.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Takeaway: Adjacency lists are more space efficient for &lt;em&gt;sparse&lt;/em&gt; graphs while adjacency matrices become efficient for &lt;em&gt;dense&lt;/em&gt; graphs.&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Add Vertex
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="6257"&gt;&lt;strong&gt;Adjacency Matrix&lt;/strong&gt;: O(V)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6a8f"&gt;&lt;strong&gt;Adjacency List&lt;/strong&gt;: O(1)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Adding a vertex is extremely simple in an adjacency list:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.vertices["H"] = set()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Adding a new key to a dictionary is a constant-time operation.&lt;/p&gt;

&lt;p&gt;For an adjacency matrix, we would need to add a new value to the end of each existing row, then add a new row at the end.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for v in self.edges:
  self.edges[v].append(0)
v.append([0] * len(self.edges + 1))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Remember that with Python lists, appending to the end of a list is usually O(1) due to over-allocation of memory but can be O(n) when the over-allocated memory fills up. When this occurs, adding the vertex can be O(V&lt;sup&gt;2&lt;/sup&gt;).&lt;/p&gt;

&lt;p&gt;Takeaway: Adding vertices is very efficient in adjacency lists but very inefficient for adjacency matrices.&lt;/p&gt;
&lt;h4&gt;
  
  
  Remove Vertex
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="8226"&gt;&lt;strong&gt;Adjacency Matrix&lt;/strong&gt;: O(V ^ 2)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="85fd"&gt;&lt;strong&gt;Adjacency List&lt;/strong&gt;: O(V)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Removing vertices is pretty inefficient in both representations. In an adjacency matrix, we need to remove the removed vertex's row, then remove that column from each other row. Removing an element from a list requires moving everything after that element over by one slot which takes an average of V/2 operations. Since we need to do that for every single row in our matrix, that results in a V&lt;sup&gt;2&lt;/sup&gt; time complexity. On top of that, we need to reduce the index of each vertex after our removed index by 1 as well which doesn't add to our quadratic time complexity, but does add extra operations.&lt;/p&gt;

&lt;p&gt;For an adjacency list, we need to visit each vertex and remove all edges pointing to our removed vertex. Removing elements from sets and dictionaries is a O(1) operation, so this results in an overall O(V) time complexity.&lt;/p&gt;

&lt;p&gt;Takeaway: Removing vertices is inefficient in both adjacency matrices and lists but more inefficient in matrices.&lt;/p&gt;
&lt;h4&gt;
  
  
  Add Edge
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="dbbe"&gt;&lt;strong&gt;Adjacency Matrix&lt;/strong&gt;: O(1)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="3968"&gt;&lt;strong&gt;Adjacency List&lt;/strong&gt;: O(1)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Adding an edge in an adjacency matrix is quite simple:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.edges[v1][v2] = 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Adding an edge in an adjacency list is similarly simple:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.vertices[v1].add(v2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Both are constant-time operations.&lt;/p&gt;

&lt;p&gt;Takeaway: Adding edges to both adjacency lists and matrices is very efficient.&lt;/p&gt;
&lt;h4&gt;
  
  
  Remove Edge
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="b417"&gt;&lt;strong&gt;Adjacency Matrix&lt;/strong&gt;: O(1)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="d794"&gt;&lt;strong&gt;Adjacency List&lt;/strong&gt;: O(1)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Removing an edge from an adjacency matrix is quite simple:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.edges[v1][v2] = 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Removing an edge from an adjacency list is similarly simple:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.vertices[v1].remove(v2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Both are constant-time operations.&lt;/p&gt;

&lt;p&gt;Takeaway: Removing edges from both adjacency lists and matrices is very efficient.&lt;/p&gt;
&lt;h4&gt;
  
  
  Find Edge
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="dc68"&gt;&lt;strong&gt;Adjacency Matrix&lt;/strong&gt;: O(1)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="2b87"&gt;&lt;strong&gt;Adjacency List&lt;/strong&gt;: O(1)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finding an edge in an adjacency matrix is quite simple:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return self.edges[v1][v2] &amp;gt; 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Finding an edge in an adjacency list is similarly simple:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return v2 in self.vertices[v1]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Both are constant-time operations.&lt;/p&gt;

&lt;p&gt;Takeaway: Finding edges from both adjacency lists and matrices is very efficient.&lt;/p&gt;
&lt;h4&gt;
  
  
  Get All Edges from Vertex
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="798e"&gt;&lt;strong&gt;Adjacency Matrix&lt;/strong&gt;: O(V)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="fa79"&gt;&lt;strong&gt;Adjacency List&lt;/strong&gt;: O(1)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Say you want to know all the edges originating from a particular vertex. With an adjacency list, this is as simple as returning the value from the vertex dictionary:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return self.vertex[v]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;In an adjacency matrix, however, it's a bit more complicated. You would need to iterate through the entire row and populate a list based on the results:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v_edges = []
for v2 in self.edges[v]:
    if self.edges[v][v2] &amp;gt; 0:
        v_edges.append(v2)
return v_edges
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Takeaway: Fetching all edges is more efficient in an adjacency list than an adjacency matrix.&lt;/p&gt;
&lt;h3&gt;
  
  
  Breadth-First Search
&lt;/h3&gt;

&lt;p&gt;Can use breadth-first search when searching a graph; explores graph outward in rings of increasing distance from starting vertex; never attempts to explore vertex it is or has already explored&lt;/p&gt;
&lt;h4&gt;
  
  
  BFS
&lt;/h4&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--crlYKcCf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AWOvrysI4fX6ePqN-.gif" width="350" height="350"&gt;

&lt;h3&gt;
  
  
  Applications of BFS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="149a"&gt;pathfinding, routing&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="9ab5"&gt;web crawlers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="31af"&gt;find neighbor nodes in P2P network&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="13aa"&gt;finding people/connections away on social network&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="4f5f"&gt;find neighboring locations on graph&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="d1b5"&gt;broadcasting on a network&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="4061"&gt;cycle detection in a graph&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="0f7f"&gt;finding connected components&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="a86f"&gt;solving several theoretical graph problems&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Coloring BFS
&lt;/h3&gt;

&lt;p&gt;It's useful to color vertexes as you arrive at them and as you leave them behind as already searched.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;unlisted&lt;/strong&gt;: white&lt;br&gt;&lt;br&gt;
&lt;strong&gt;vertices whose neighbors are being explored&lt;/strong&gt;: gray&lt;br&gt;&lt;br&gt;
&lt;strong&gt;vertices with no unexplored neighbors&lt;/strong&gt;: black&lt;/p&gt;
&lt;h3&gt;
  
  
  BFS Pseudocode
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;BFS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;start_vert&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vertices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;white&lt;/span&gt;
        &lt;span class="n"&gt;start_vert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gray&lt;/span&gt;
        &lt;span class="n"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start_vert&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="n"&gt;queue&lt;/span&gt; &lt;span class="n"&gt;isEmpty&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="c1"&gt;# peek at head but don't dequeue
&lt;/span&gt;        &lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;neighbors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;white&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;gray&lt;/span&gt;
                &lt;span class="n"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dequeue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;black&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  BFS Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;span id="ccee"&gt;Mark graph vertices white.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="26e7"&gt;Mark starting vertex gray.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="863c"&gt;Enqueue starting vertex.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="b8d8"&gt;Check if queue is not empty.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="2dc5"&gt;If not empty, peek at first item in queue.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="0e5c"&gt;Loop through that vertex's neighbors.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="1a9e"&gt;Check if unvisited.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="7165"&gt;If unvisited, mark as gray and enqueue vertex.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="338b"&gt;Dequeue current vertex and mark as black.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="8460"&gt;Repeat until all vertices are explored.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Depth-First Search
&lt;/h3&gt;

&lt;p&gt;dives down the graph as far as it can before backtracking and exploring another branch; never attempts to explore a vertex it has already explored or is in the process of exploring; exact order will vary depending on which branches get taken first and which is starting vertex&lt;/p&gt;
&lt;h4&gt;
  
  
  DFS
&lt;/h4&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PPIHEH8W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ADZVdn1kWaiJXQ_zc.gif" width="500" height="500"&gt;

&lt;h3&gt;
  
  
  Applications of DFS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="044e"&gt;preferred method for exploring a graph if we want to ensure we visit every node in graph&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="b086"&gt;finding minimum spanning trees of weighted graphs&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="c419"&gt;pathfinding&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="281e"&gt;detecting cycles in graphs&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6739"&gt;solving and generating mazes&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="20b5"&gt;topological sorting, useful for scheduling sequences of dependent jobs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  DFS Pseudocode
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="c1"&gt;# recursion
&lt;/span&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;explore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;visit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this_vert&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;explore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remaining_graph&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# iterative
&lt;/span&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;DFS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;verts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;white&lt;/span&gt;
            &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;verts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;white&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;DFS_visit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;DFS_visit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gray&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;neighbor&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;adjacent_nodes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;neighbor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;white&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;neighbor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;
                &lt;span class="n"&gt;DFS_visit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;neighbor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;black&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  DFS Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;span id="b45a"&gt;Take graph as parameter.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="a012"&gt;Marks all vertices as unvisited.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="1bd5"&gt;Sets vertex parent as null.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="0f24"&gt;Passes each unvisited vertex into DFS_visit().&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="9011"&gt;Mark current vertex as gray.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="8df7"&gt;Loops through its unvisited neighbors.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="927d"&gt;Sets parent and makes recursive call to DFS_visit().&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6d4c"&gt;Marks vertex as black.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="e753"&gt;Repeat until done.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Connected Components
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;connected components&lt;/strong&gt;: in a disjoint graph, groups of nodes on a graph that are connected with each other&lt;/p&gt;
&lt;h3&gt;
  
  
  Uses
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="0c54"&gt;typically very large graphs, networks&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="1bdc"&gt;social networks&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="66be"&gt;networks (which devices can reach one another)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="210c"&gt;epidemics (how spread, who started, where next)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;key to finding connected components&lt;/strong&gt;: searching algorithms, breadth-first search&lt;/p&gt;
&lt;h3&gt;
  
  
  How to find connected componnents
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="4bd0"&gt;for each node in graph:&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6e20"&gt;has it been explored&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="40be"&gt;if no, do BFS&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="96f4"&gt;all nodes reached are connected&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="e152"&gt;if yes, already in connected component&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="3f15"&gt;go to next node&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;strongly connected components&lt;/strong&gt;: any node in this group can get to any other node&lt;/p&gt;
&lt;h3&gt;
  
  
  Bonus Python Question
&lt;/h3&gt;

&lt;p&gt;'''py&lt;/p&gt;
&lt;h1&gt;
  
  
  This Bellman-Ford Code is for determination whether we can get
&lt;/h1&gt;
&lt;h1&gt;
  
  
  shortest path from given graph or not for single-source shortest-paths problem.
&lt;/h1&gt;
&lt;h1&gt;
  
  
  In other words, if given graph has any negative-weight cycle that is reachable
&lt;/h1&gt;
&lt;h1&gt;
  
  
  from the source, then it will give answer False for "no solution exits".
&lt;/h1&gt;
&lt;h1&gt;
  
  
  For argument graph, it should be a dictionary type
&lt;/h1&gt;
&lt;h1&gt;
  
  
  such as
&lt;/h1&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;graph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="s"&gt;'a'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'b'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'e'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;

&lt;span class="s"&gt;'b'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'c'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'d'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'e'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;

&lt;span class="s"&gt;'c'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'b'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;

&lt;span class="s"&gt;'d'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'a'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'c'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;

&lt;span class="s"&gt;'e'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'b'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Review of Concepts
&lt;/h3&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3aMzN5M9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1200/0%2AoOYEgDBV2yhim9SC" width="880" height="494"&gt;


&lt;ul&gt;
&lt;li&gt;&lt;span id="9d7a"&gt;A graph is any collection of nodes and edges.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="7a3a"&gt;A graph is a less restrictive class of collections of nodes than structures like a tree.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="8d05"&gt;It doesn't need to have a root node (not every node needs to be accessible from a single node)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6fac"&gt;It can have cycles (a group of nodes whose paths begin and end at the same node)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oj7SnAcn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AnN2X6TCy0JSh4mfL.gif" alt="Cycles in a graph" width="354" height="335"&gt;Cycles in a graph

-   &lt;span id="783b"&gt;Cycles are not always "isolated", they can be one part of a larger graph. You can detect them by starting your search on a specific node and finding a path that takes you back to that same node.&lt;/span&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZwoEGeta--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A0EdGqDUlj_HEnyEc.png" width="639" height="669"&gt;
-   &lt;span id="fe92"&gt;Any number of edges may leave a given node&lt;/span&gt;
-   &lt;span id="915b"&gt;A Path is a sequence of nodes on a graph&lt;/span&gt;

### Undirected Graph

**Undirected Graph:** An undirected graph is one where the edges do not specify a particular direction. The edges are bi-directional.

### Types


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_NaAZWkO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2Au8Nu829gPtxU6J0siwljJA.png" width="800" height="709"&gt;

&lt;h3&gt;
  
  
  Dense Graph
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="7b24"&gt;Dense Graph — A graph with lots of edges.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="5682"&gt;"Dense graphs have many edges. But, wait! 🚧 I know what you must be thinking, how can you determine what qualifies as "many edges"? This is a little bit too subjective, right? ? I agree with you, so let's quantify it a little bit:&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="0e05"&gt;Let's find the maximum number of edges in a directed graph. If there are |V| nodes in a directed graph (in the example below, six nodes), that means that each node can have up to |v| connections (in the example below, six connections).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="59d8"&gt;Why? Because each node could potentially connect with all other nodes and with itself (see "loop" below). Therefore, the maximum number of edges that the graph can have is |V|\*|V| , which is the total number of nodes multiplied by the maximum number of connections that each node can have."&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="146f"&gt;When the number of edges in the graph is close to the maximum number of edges, the graph is dense.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Sparse Graph
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="5e53"&gt;Sparse Graph — Few edges&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="37f5"&gt;When the number of edges in the graph is significantly fewer than the maximum number of edges, the graph is sparse.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Weighted Graph
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="755c"&gt;Weighted Graph — Edges have a cost or a weight to traversal&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Directed Graph
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="416f"&gt;Directed Graph — Edges only go one direction&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;em&gt;Undirected&lt;/em&gt; Graph
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="6030"&gt;Undirected Graph — Edges don't have a direction. All graphs are assumed to be undirected unless otherwise stated&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Node Class
&lt;/h3&gt;

&lt;p&gt;Uses a class to define the neighbors as properties of each node.&lt;/p&gt;
&lt;h3&gt;
  
  
  Adjacency Matrix
&lt;/h3&gt;

&lt;p&gt;The row index will correspond to the source of an edge and the column index will correspond to the edges destination.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="ab18"&gt;When the edges have a direction, &lt;code&gt;matrix[i][j]&lt;/code&gt; may not be the same as &lt;code&gt;matrix[j][i]&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="3499"&gt;It is common to say that a node is adjacent to itself so &lt;code&gt;matrix[x][x]&lt;/code&gt; is true for any node&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="9883"&gt;Will be O(n&lt;sup&gt;2&lt;/sup&gt;) space complexity&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ybVa7RSg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2A2bAUSiq_ej3XTSUMryjJUA.png" width="677" height="571"&gt;

&lt;h3&gt;
  
  
  Adjacency List
&lt;/h3&gt;

&lt;p&gt;Seeks to solve the shortcomings of the matrix implementation. It uses an object where keys represent node labels and values associated with that key are the adjacent node keys held in an array.&lt;/p&gt;
&lt;h4&gt;
  
  
  Stacks
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="f63a"&gt;The Call Stack is a Stack data structure, and is used to manage the order of function invocations in your code.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6b24"&gt;Browser History is often implemented using a Stack, with one great example being the browser history object in the very popular React Router module.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="098f"&gt;Undo/Redo functionality in just about any application. For example:&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f15d"&gt;When you're coding in your text editor, each of the actions you take on your keyboard are recorded by &lt;code&gt;push&lt;/code&gt;ing that event to a Stack.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="e303"&gt;When you hit [cmd + z] to undo your most recent action, that event is &lt;code&gt;pop&lt;/code&gt;ed off the Stack, because the last event that occured should be the first one to be undone (LIFO).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="9248"&gt;When you hit [cmd + y] to redo your most recent action, that event is &lt;code&gt;push&lt;/code&gt;ed back onto the Stack.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Queues
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="7c8d"&gt;Printers use a Queue to manage incoming jobs to ensure that documents are printed in the order they are received.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="89e7"&gt;Chat rooms, online video games, and customer service phone lines use a Queue to ensure that patrons are served in the order they arrive.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="c02a"&gt;In the case of a Chat Room, to be admitted to a size-limited room.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="353e"&gt;In the case of an Online Multi-Player Game, players wait in a lobby until there is enough space and it is their turn to be admitted to a game.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6a8e"&gt;In the case of a Customer Service Phone Line…you get the point.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="0ad5"&gt;As a more advanced use case, Queues are often used as components or services in the system design of a service-oriented architecture. A very popular and easy to use example of this is Amazon's Simple Queue Service (SQS), which is a part of their Amazon Web Services (AWS) offering.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="48e7"&gt;You would add this service to your system between two other services, one that is sending information for processing, and one that is receiving information to be processed, when the volume of incoming requests is high and the integrity of the order with which those requests are processed must be maintained.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Further resources:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz" title="https://gist.github.com/bgoonz"&gt;&lt;br&gt;
&lt;strong&gt;bgoonz's gists&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;em&gt;Instantly share code, notes, and snippets. Web Developer, Electrical Engineer JavaScript | CSS | Bootstrap | Python |…&lt;/em&gt;gist.github.com&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Data Structures Reference&lt;/p&gt;


&lt;h3&gt;
  
  
  Data Structures… Under The Hood
&lt;/h3&gt;
&lt;h3&gt;
  
  
  Data Structures Reference
&lt;/h3&gt;


&lt;h3&gt;
  
  
  Array
&lt;/h3&gt;

&lt;p&gt;Stores things in order. Has quick lookups by index.&lt;/p&gt;
&lt;h3&gt;
  
  
  Linked List
&lt;/h3&gt;

&lt;p&gt;Also stores things in order. Faster insertions and deletions than&lt;br&gt;&lt;br&gt;
arrays, but slower lookups (you have to "walk down" the whole list).&lt;/p&gt;

&lt;p&gt;!&lt;/p&gt;
&lt;h3&gt;
  
  
  Queue
&lt;/h3&gt;

&lt;p&gt;Like the line outside a busy restaurant. "First come, first served."&lt;/p&gt;
&lt;h3&gt;
  
  
  Stack
&lt;/h3&gt;

&lt;p&gt;Like a stack of dirty plates in the sink. The first one you take off the&lt;br&gt;&lt;br&gt;
top is the last one you put down.&lt;/p&gt;
&lt;h3&gt;
  
  
  Tree
&lt;/h3&gt;

&lt;p&gt;Good for storing hierarchies. Each node can have "child" nodes.&lt;/p&gt;
&lt;h3&gt;
  
  
  Binary Search Tree
&lt;/h3&gt;

&lt;p&gt;Everything in the left subtree is smaller than the current node,&lt;br&gt;&lt;br&gt;
everything in the right subtree is larger. lookups, but only if the tree&lt;br&gt;&lt;br&gt;
is balanced!&lt;/p&gt;
&lt;h3&gt;
  
  
  Binary Search Tree
&lt;/h3&gt;
&lt;h3&gt;
  
  
  Graph
&lt;/h3&gt;

&lt;p&gt;Good for storing networks, geography, social relationships, etc.&lt;/p&gt;
&lt;h3&gt;
  
  
  Heap
&lt;/h3&gt;

&lt;p&gt;A binary tree where the smallest value is always at the top. Use it to implement a priority queue.&lt;/p&gt;

&lt;p&gt;![A binary heap is a binary tree where the nodes are organized to so that the smallest value is always at the top.]&lt;/p&gt;
&lt;h3&gt;
  
  
  Adjacency list
&lt;/h3&gt;

&lt;p&gt;A list where the index represents the node and the value at that index is a list of the node's neighbors:&lt;/p&gt;

&lt;p&gt;graph = [ [1], [0, 2, 3], [1, 3], [1, 2], ]&lt;/p&gt;

&lt;p&gt;Since node 3 has edges to nodes 1 and 2, graph[3] has the adjacency list [1, 2].&lt;/p&gt;

&lt;p&gt;We could also use &lt;a href="https://www.interviewcake.com/concept/hash-map"&gt;a dictionary&lt;/a&gt; where the keys represent the node and the values are the lists of neighbors.&lt;/p&gt;

&lt;p&gt;graph = { 0: [1], 1: [0, 2, 3], 2: [1, 3], 3: [1, 2], }&lt;/p&gt;

&lt;p&gt;This would be useful if the nodes were represented by strings, objects, or otherwise didn't map cleanly to list indices.&lt;/p&gt;
&lt;h3&gt;
  
  
  Adjacency matrix
&lt;/h3&gt;

&lt;p&gt;A matrix of 0s and 1s indicating whether node x connects to node y (0 means no, 1 means yes).&lt;/p&gt;

&lt;p&gt;graph = [ [0, 1, 0, 0], [1, 0, 1, 1], [0, 1, 0, 1], [0, 1, 1, 0], ]&lt;/p&gt;

&lt;p&gt;Since node 3 has edges to nodes 1 and 2, graph[3][1] and graph[3][2] have value 1.&lt;/p&gt;

&lt;p&gt;a = LinkedListNode(5) b = LinkedListNode(1) c = LinkedListNode(9) a.next = b b.next = c&lt;/p&gt;


&lt;h3&gt;
  
  
  Arrays
&lt;/h3&gt;

&lt;p&gt;Ok, so we know how to store individual numbers. Let's talk about storing &lt;em&gt;several numbers&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That's right, things are starting to &lt;em&gt;heat up&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Suppose we wanted to keep a count of how many bottles of kombucha we drink every day.&lt;/p&gt;

&lt;p&gt;Let's store each day's kombucha count in an 8-bit, fixed-width, unsigned integer. That should be plenty — we're not likely to get through more than 256 (2&lt;sup&gt;8&lt;/sup&gt;) bottles in a &lt;em&gt;single day&lt;/em&gt;, right?&lt;/p&gt;

&lt;p&gt;And let's store the kombucha counts right next to each other in RAM, starting at memory address 0:&lt;/p&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ypBx3Zv_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AFM_W-EkXYGYwG6LK" width="250" height="310"&gt;
Bam. That's an **array**. RAM is*basically* an array already.

Just like with RAM, the elements of an array are numbered. We call that number the **index** of the array element (plural: indices). In _this_ example, each array element's index is the same as its address in RAM.

But that's not usually true. Suppose another program like Spotify had already stored some information at memory address 2:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wSKcf29w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AIBpMv-88FpWo2gbu" width="250" height="310"&gt;
We'd have to start our array below it, for example at memory address 3. So index 0 in our array would be at memory address 3, and index 1 would be at memory address 4, etc.:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E1phebXX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AZeqpub-zKSWyyBeg" width="250" height="350"&gt;
Suppose we wanted to get the kombucha count at index 4 in our array. How do we figure out what*address in memory* to go to? Simple math:

Take the array's starting address (3), add the index we're looking for (4), and that's the address of the item we're looking for. 3 + 4 = 7. In general, for getting the nth item in our array:

\\text{address of nth item in array} = \\text{address of array start} + n

This works out nicely because the size of the addressed memory slots and the size of each kombucha count are _both_ 1 byte. So a slot in our array corresponds to a slot in RAM.

But that's not always the case. In fact, it's _usually not_ the case. We _usually_ use _64-bit_ integers.

So how do we build an array of _64-bit_ (8 byte) integers on top of our _8-bit_ (1 byte) memory slots?

We simply give each array index _8_ address slots instead of 1:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C0kMgacR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AY_mxvkxQGPP7rqQJ" width="162" height="433"&gt;
So we can still use simple math to grab the start of the nth item in our array — just gotta throw in some multiplication:

\\text{address of nth item in array} = \\text{address of array start} + (n \* \\text{size of each item in bytes})

Don't worry — adding this multiplication doesn't really slow us down. Remember: addition, subtraction, multiplication, and division of fixed-width integers takes time. So _all_ the math we're using here to get the address of the nth item in the array takes time.

And remember how we said the memory controller has a _direct connection_ to each slot in RAM? That means we can read the stuff at any given memory address in time.


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KelDZ0cl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2Akqv_M8aCHZWjRv90" width="248" height="279"&gt;
**Together, this means looking up the contents of a given array index is time.** This fast lookup capability is the most important property of arrays.

But the formula we used to get the address of the nth item in our array only works _if_:

1. &lt;span id="ae12"&gt;**Each item in the array is the _same size_** (takes up the same&lt;/span&gt;

number of bytes).

1. &lt;span id="cae3"&gt;**The array is _uninterrupted_ (contiguous) in memory**. There can't&lt;/span&gt;

be any gaps in the array…like to "skip over" a memory slot Spotify was already using.

These things make our formula for finding the nth item _work_ because they make our array _predictable_. We can _predict_ exactly where in memory the nth element of our array will be.

But they also constrain what kinds of things we can put in an array. Every item has to be the same size. And if our array is going to store a _lot_ of stuff, we'll need a _bunch_ of uninterrupted free space in RAM. Which gets hard when most of our RAM is already occupied by other programs (like Spotify).

That's the tradeoff. Arrays have fast lookups ( time), but each item in the array needs to be the same size, and you need a big block of uninterrupted free memory to store the array.

--------

## Pointers

Remember how we said every item in an array had to be the same size? Let's dig into that a little more.

Suppose we wanted to store a bunch of ideas for baby names. Because we've got some _really_ cute ones.

Each name is a string. Which is really an array. And now we want to store _those arrays_ in an array. _Whoa_.

Now, what if our baby names have different lengths? That'd violate our rule that all the items in an array need to be the same size!

We could put our baby names in arbitrarily large arrays (say, 13 characters each), and just use a special character to mark the end of the string within each array…


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6jO5JUyt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ADanfoIJ9nNaOKn-G" width="262" height="625"&gt;
"Wigglesworth" is a cute baby name, right?

But look at all that wasted space after "Bill". And what if we wanted to store a string that was _more_ than 13 characters? We'd be out of luck.

There's a better way. Instead of storing the strings right inside our array, let's just put the strings wherever we can fit them in memory. Then we'll have each element in our array hold the _address in memory_ of its corresponding string. Each address is an integer, so really our outer array is just an array of integers. We can call each of these integers a **pointer**, since it points to another spot in memory.


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_Wmc9PtF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AaLJ4pDr4uAXU1_Qs" width="208" height="457"&gt;
The pointers are marked with a \* at the beginning.

Pretty clever, right? This fixes _both_ the disadvantages of arrays:

1. &lt;span id="0cd5"&gt;The items don't have to be the same length — each string can be as&lt;/span&gt;

long or as short as we want.

1. &lt;span id="8ecd"&gt;We don't need enough uninterrupted free memory to store all our&lt;/span&gt;

strings next to each other — we can place each of them separately, wherever there's space in RAM.

We fixed it! No more tradeoffs. Right?

Nope. Now we have a _new_ tradeoff:

Remember how the memory controller sends the contents of _nearby_ memory addresses to the processor with each read? And the processor caches them? So reading sequential addresses in RAM is _faster_ because we can get most of those reads right from the cache?


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zNI7KCvD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AUkWe4Y0h8O7mz0E_" width="309" height="277"&gt;
Our original array was very **cache-friendly**, because everything was sequential. So reading from the 0th index, then the 1st index, then the 2nd, etc. got an extra speedup from the processor cache.

**But the pointers in this array make it _not_ cache-friendly**, because the baby names are scattered randomly around RAM. So reading from the 0th index, then the 1st index, etc. doesn't get that extra speedup from the cache.

That's the tradeoff. This pointer-based array requires less uninterrupted memory and can accommodate elements that aren't all the same size, _but_ it's _slower_ because it's not cache-friendly.

This slowdown isn't reflected in the big O time cost. Lookups in this pointer-based array are _still_ time.

--------

### Linked lists

Our word processor is definitely going to need fast appends — appending to the document is like the _main thing_ you do with a word processor.

Can we build a data structure that can store a string, has fast appends, _and_ doesn't require you to say how long the string will be ahead of time?

Let's focus first on not having to know the length of our string ahead of time. Remember how we used _pointers_ to get around length issues with our array of baby names?

What if we pushed that idea even further?

What if each _character_ in our string were a _two-index array_ with:

1. &lt;span id="4410"&gt;the character itself 2. a pointer to the next character&lt;/span&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V8vsHtdN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AKcG72KzdYU-ftXWq" width="61" height="327"&gt;
We would call each of these two-item arrays a **node** and we'd call this series of nodes a **linked list**.

Here's how we'd actually implement it in memory:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TyNgSXoS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A0KZl9hNN_IFP15RH" width="129" height="409"&gt;
Notice how we're free to store our nodes wherever we can find two open slots in memory. They don't have to be next to each other. They don't even have to be*in order*:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SZwV8Hvo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AlSOAxFuMAS2xK3JI" width="129" height="409"&gt;
"But that's not cache-friendly, " you may be thinking. Good point! We'll get to that.

The first node of a linked list is called the **head**, and the last node is usually called the **tail**.

Confusingly, some people prefer to use "tail" to refer to _everything after the head_ of a linked list. In an interview it's fine to use either definition. Briefly say which definition you're using, just to be clear.

It's important to have a pointer variable referencing the head of the list — otherwise we'd be unable to find our way back to the start of the list!

We'll also sometimes keep a pointer to the tail. That comes in handy when we want to add something new to the end of the linked list. In fact, let's try that out:

Suppose we had the string "LOG" stored in a linked list:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nJve1oaT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2Ac3-7UhJ39PZohsuz" width="141" height="299"&gt;
Suppose we wanted to add an "S" to the end, to make it "LOGS". How would we do that?

Easy. We just put it in a new node:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4-8Y0ZKr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AU1OJCEX8zUd5QbuU" width="200" height="390"&gt;
And tweak some pointers:

​1. Grab the last letter, which is "G". Our tail pointer lets us do this in time.


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i2UN7kyL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AYzvjIGZQ6MnkGWcw" width="200" height="390"&gt;
​2. Point the last letter's next to the letter we're appending ("S").


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o5npO1Q6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A-CA8KHc1tdRfVYoe" width="200" height="390"&gt;
​3. Update the tail pointer to point to our*new* last letter, "S".


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qb5XQuO9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AGbf918HOvlJhMHEf" width="200" height="390"&gt;
That's time.

Why is it time? Because the runtime doesn't get bigger if the string gets bigger. No matter how many characters are in our string, we still just have to tweak a couple pointers for any append.

Now, what if instead of a linked list, our string had been a _dynamic array_? We might not have any room at the end, forcing us to do one of those doubling operations to make space:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y9rpchv2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AwSK-FGV0kCiskLNS" width="231" height="188"&gt;
So with a dynamic array, our append would have a*worst-case* time cost of .

**Linked lists have worst-case -time appends, which is better than the worst-case time of dynamic arrays.**

That _worst-case_ part is important. The _average case_ runtime for appends to linked lists and dynamic arrays is the same: .

Now, what if we wanted to \*pre\*pend something to our string? Let's say we wanted to put a "B" at the beginning.

For our linked list, it's just as easy as appending. Create the node:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C7_IzCG5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AMSenMuHQuHb1dV1X" width="200" height="478"&gt;
And tweak some pointers:

1. &lt;span id="cf06"&gt;Point "B"'s next to "L". 2. Point the head to "B".&lt;/span&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TmTiVYxO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AGoeByRt15C4nQvQr" width="200" height="478"&gt;
Bam. time again.

But if our string were a _dynamic array_…


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kO_dga-O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2APhElGwum7RgTPqAy" width="210" height="152"&gt;
And we wanted to add in that "B":


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9KgS5z6L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2An4qjPFNz4BVHBt5w" width="210" height="182"&gt;
Eep. We have to*make room* for the "B"!

We have to move _each character_ one space down:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oGw0d-uq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2An90vZS_Exw8Wjs2b" width="210" height="182"&gt;



&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rw-SORYM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AzryPfLJtzXqnGOth" width="210" height="182"&gt;



&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ESPYRNvB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2APlEqTgXBKKpG5DCF" width="210" height="182"&gt;



&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tzq82MgJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ADampgIgyO6Silk8U" width="210" height="182"&gt;
*Now* we can drop the "B" in there:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZfTgLXch--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AXxkr4sYP9-drZeEe" width="210" height="182"&gt;
What's our time cost here?

It's all in the step where we made room for the first letter. We had to move _all n_ characters in our string. One at a time. That's time.

**So linked lists have faster \*pre\*pends ( time) than dynamic arrays ( time).**

No "worst case" caveat this time — prepends for dynamic arrays are _always_ time. And prepends for linked lists are _always_ time.

These quick appends and prepends for linked lists come from the fact that linked list nodes can go anywhere in memory. They don't have to sit right next to each other the way items in an array do.

So if linked lists are so great, why do we usually store strings in an array? **Because** &lt;a href="https://dev.to/bgoonz/common-data-structures-their-background-11eg#constant-time-array-lookups"&gt;
&lt;strong&gt;arrays have -time lookups&lt;/strong&gt;
&lt;/a&gt;**.** And those constant-time lookups _come from_ the fact that all the array elements are lined up next to each other in memory.

Lookups with a linked list are more of a process, because we have no way of knowing where the ith node is in memory. So we have to walk through the linked list node by node, counting as we go, until we hit the ith item.

def get_ith_item_in_linked_list(head, i): if i &amp;lt; 0: raise ValueError("i can't be negative: %d" % i) current_node = head current_position = 0 while current_node: if current_position == i: \# Found it! return current_node \# Move on to the next node current_node = current_node.next current_position += 1 raise ValueError('List has fewer than i + 1 (%d) nodes' % (i + 1))

That's i + 1 steps down our linked list to get to the ith node (we made our function zero-based to match indices in arrays). **So linked lists have -time lookups.** Much slower than the -time lookups for arrays and dynamic arrays.

Not only that — **walking down a linked list is _not_ cache-friendly.** Because the next node could be _anywhere_ in memory, we don't get any benefit from the processor cache. This means lookups in a linked list are even slower.

So the tradeoff with linked lists is they have faster prepends and faster appends than dynamic arrays, _but_ they have slower lookups.

--------

## Doubly Linked Lists

In a basic linked list, each item stores a single pointer to the next element.

In a **doubly linked list**, items have pointers to the next _and the previous_ nodes.


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4tGu0cQ---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AOEAPr9oLUTWovm86" width="455" height="145"&gt;
Doubly linked lists allow us to traverse our list*backwards*. In a*singly*linked list, if you just had a pointer to a node in the*middle*of a list, there would be*no way* to know what nodes came before it. Not a problem in a doubly linked list.

### Not cache-friendly

Most computers have &lt;a href="https://www.interviewcake.com/article/data-structures-coding-interview#ram"&gt;caching systems that make reading from sequential addresses in memory faster than reading from scattered addresses&lt;/a&gt;.

&lt;a href="https://www.interviewcake.com/concept/array"&gt;Array&lt;/a&gt; items are always located right next to each other in computer memory, but linked list nodes can be scattered all over.

So iterating through a linked list is usually quite a bit slower than iterating through the items in an array, even though they're both theoretically time.

--------

### Hash tables

Quick lookups are often really important. For that reason, we tend to use arrays (-time lookups) much more often than linked lists (-time lookups).

For example, suppose we wanted to count how many times each ASCII character appears in &lt;a href="https://raw.githubusercontent.com/GITenberg/The-Tragedy-of-Romeo-and-Juliet_1112/master/1112.txt"&gt;Romeo and Juliet&lt;/a&gt;. How would we store those counts?

We can use arrays in a clever way here. Remember — characters are just numbers. In ASCII (a common character encoding) 'A' is 65, 'B' is 66, etc.

So we can use the character('s number value) as the _index_ in our array, and store the _count_ for that character _at that index_ in the array:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I9-wVAI6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A84jW_RfhW2MNqLGl" width="407" height="218"&gt;
With this array, we can look up (and edit) the count for any character in constant time. Because we can access any index in our array in constant time.

Something interesting is happening here — this array isn't just a list of values. This array is storing _two_ things: characters and counts. The characters are _implied_ by the indices.

**So we can think of an array as a _table_ with _two columns_…except you don't really get to pick the values in one column (the indices) — they're always 0, 1, 2, 3, etc.**

But what if we wanted to put _any_ value in that column and still get quick lookups?

Suppose we wanted to count the number of times each _word_ appears in Romeo and Juliet. Can we adapt our array?

Translating a _character_ into an array index was easy. But we'll have to do something more clever to translate a _word_ (a string) into an array index…


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iPrqXKgN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AYuLIJSmkIcaveoBk" width="406" height="255"&gt;
Here's one way we could do it:

Grab the number value for each character and add those up.


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MJk3qhv0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AviH0fNvJKep80ecH" width="201" height="79"&gt;
The result is 429. But what if we only have*30* slots in our array? We'll use a common trick for forcing a number into a specific range: the modulus operator (%). Modding our sum by 30 ensures we get a whole number that's less than 30 (and at least 0):

429 \\: \\% \\: 30 = 9

Bam. That'll get us from a word (or any string) to an array index.

This data structure is called a **hash table** or **hash map**. In our hash table, the _counts_ are the **values** and the _words_ ("lies, " etc.) are the **keys** (analogous to the _indices_ in an array). The process we used to translate a key into an array index is called a **hashing function**.

!\[A blank array except for a 20, labeled as the value, stored at index

1. &lt;span id="fadd"&gt;To the left the array is the word "lies," labeled as the key, with an&lt;/span&gt;

arrow pointing to the right at diamond with a question mark in the middle, labeled as the hashing function. The diamond points to the 9th index of the array.\](&lt;a href="&amp;lt;&amp;lt;https://www.interviewcake.com/images/svgs/cs_for_hackers__hash_tables_lies_key_labeled.svg?bust=209&amp;gt;&amp;gt;"&gt;https://www.interviewcake.com/images/svgs/cs_for_hackers\_\_hash_tables_lies_key_labeled.svg?bust=209&lt;/a&gt;)

The hashing functions used in modern systems get pretty complicated — the one we used here is a simplified example.

Note that our quick lookups are only in one direction — we can quickly get the value for a given key, but the only way to get the key for a given value is to walk through all the values and keys.

Same thing with arrays — we can quickly look up the value at a given index, but the only way to figure out the index for a given value is to walk through the whole array.

One problem — what if two keys hash to the same index in our array? Look at "lies" and "foes":


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D5SQ4jbO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AFEGUBbShygDT_Xmp" width="226" height="171"&gt;
They both sum up to 429! So of course they'll have the same answer when we mod by 30:

429 \\: \\% \\: 30 = 9

So our hashing function gives us the same answer for "lies" and "foes." This is called a **hash collision**. There are a few different strategies for dealing with them.

Here's a common one: instead of storing the actual values in our array, let's have each array slot hold a _pointer_ to a _linked list_ holding the counts for all the words that hash to that index:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q7hz1TL4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AFJ_oFYwm3xi5gvS6" width="322" height="254"&gt;
One problem — how do we know which count is for "lies" and which is for "foes"? To fix this, we'll store the*word* as well as the count in each linked list node:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--krxHKNAR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AzUqqK4NJil6nCjlK" width="322" height="254"&gt;
"But wait!" you may be thinking, "Now lookups in our hash table take time in the worst case, since we have to walk down a linked list." That's true! You could even say that in the worst case*every*key creates a hash collision, so our whole hash table*degrades to a linked list*.

In industry though, we usually wave our hands and say **collisions are rare enough that on _average_ lookups in a hash table are time**. And there are fancy algorithms that keep the number of collisions low and keep the lengths of our linked lists nice and short.

But that's sort of the tradeoff with hash tables. You get fast lookups by key…except _some_ lookups could be slow. And of course, you only get those fast lookups in one direction — looking up the _key_ for a given _value_ still takes time

### Breadth-First Search (BFS) and Breadth-First Traversal

**Breadth-first search** (BFS) is a method for exploring a tree or graph. In a BFS, you first explore all the nodes one step away, then all the nodes two steps away, etc.

Breadth-first search is like throwing a stone in the center of a pond. The nodes you explore "ripple out" from the starting point.

Here's a how a BFS would traverse this tree, starting with the root:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gnqNlbFh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2Am463vT-gl3X8F6AS" width="197" height="152"&gt;
We'd visit all the immediate children (all the nodes that're one step away from our starting node):


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q2gn5Svb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A_un0xsKDp2pgNPoM" width="197" height="152"&gt;
Then we'd move on to all*those*nodes' children (all the nodes that're*two steps* away from our starting node):


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fqaUzbOK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2Ab6vBOLT_H0Bpf2v4" width="197" height="152"&gt;
And so on:


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1Sx5mGGK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ACtPtZ_RChr2hrfH8" width="197" height="152"&gt;
Until we reach the end.

Breadth-first search is often compared with **depth-first search**.

Advantages:

- &lt;span id="123c"&gt;A BFS will find the **shortest path** between the starting point and&lt;/span&gt;

any other reachable node. A depth-first search will not necessarily find the shortest path.

Disadvantages

- &lt;span id="a412"&gt;A BFS on a binary tree _generally_ requires more memory than a DFS.&lt;/span&gt;


&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--apRXLE2z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A1ptw-98Yjj1scRX6" width="300" height="200"&gt;

&lt;h3&gt;
  
  
  Binary Search Tree
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;binary tree&lt;/strong&gt; is a &lt;strong&gt;tree&lt;/strong&gt; where &amp;lt;==(&lt;strong&gt;&lt;em&gt;every node has two or fewer children&lt;/em&gt;&lt;/strong&gt;)==&amp;gt;.&lt;br&gt;&lt;br&gt;
The children are usually called &lt;strong&gt;&lt;em&gt;left&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;right&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;class BinaryTreeNode(object):&lt;/p&gt;

&lt;p&gt;This lets us build a structure like this:&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9c56rWt0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AjrVPHH5A60cni3qY" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9c56rWt0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AjrVPHH5A60cni3qY" width="300" height="200"&gt;&lt;/a&gt;&lt;br&gt;
That particular example is special because every level of the tree is completely full. There are no "gaps." We call this kind of tree "&lt;strong&gt;perfect&lt;/strong&gt;."&lt;/p&gt;

&lt;p&gt;Binary trees have a few interesting properties when they're perfect:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Property 1: the number of total nodes on each "level" doubles as we move down the tree.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WgEaBIfK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2Ar1nTqbN_TJyaaT4L" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WgEaBIfK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2Ar1nTqbN_TJyaaT4L" width="300" height="200"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Property 2: the number of nodes on the last level is equal to the sum of the number of nodes on all other levels (plus 1).&lt;/strong&gt; In other words, about*half* of our nodes are on the last level.&lt;/p&gt;

&lt;p&gt;&amp;lt;==(**Let's call the number of nodes n, **)==&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;==(&lt;strong&gt;_&lt;/strong&gt;and the height of the tree h. &lt;strong&gt;_&lt;/strong&gt;)==&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;h can also be thought of as the "number of levels."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If we had h, how could we calculate n?&lt;/p&gt;

&lt;p&gt;Let's just add up the number of nodes on each level!&lt;/p&gt;

&lt;p&gt;If we zero-index the levels, the number of nodes on the xth level is exactly 2^x.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;span id="937f"&gt;Level 0: 2&lt;sup&gt;0&lt;/sup&gt; nodes,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="5630"&gt;2. Level 1: 2&lt;sup&gt;1&lt;/sup&gt; nodes,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="72ca"&gt;3. Level 2: 2&lt;sup&gt;2&lt;/sup&gt; nodes,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="fd85"&gt;4. Level 3: 2&lt;sup&gt;3&lt;/sup&gt; nodes,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="1685"&gt;5. &lt;em&gt;etc&lt;/em&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So our total number of nodes is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;n = 2&lt;sup&gt;0&lt;/sup&gt; + 2&lt;sup&gt;1&lt;/sup&gt; + 2&lt;sup&gt;2&lt;/sup&gt; + 2&lt;sup&gt;3&lt;/sup&gt; + … + 2^{h-1}&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Why only up to 2^{h-1}?&lt;/p&gt;

&lt;p&gt;Notice that we &lt;strong&gt;started counting our levels at 0.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="7500"&gt;So if we have h levels in total,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="6752"&gt;the last level is actually the "h-1"-th level.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="da3a"&gt;That means the number of nodes on the last level is 2^{h-1}.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But we can simplify.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Property 2 tells us that the number of nodes on the last level is (1 more than) half of the total number of nodes&lt;/strong&gt;,&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;so we can just take the number of nodes on the last level, multiply it by 2, and subtract 1 to get the number of nodes overall&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="d63d"&gt;We know the number of nodes on the last level is 2^{h-1},&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="1c97"&gt;So:&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;n = 2^{h-1} * 2–1&lt;br&gt;&lt;br&gt;
n = 2^{h-1} * 2&lt;sup&gt;1&lt;/sup&gt; — 1&lt;br&gt;&lt;br&gt;
n = 2^{h-1+1}- 1&lt;br&gt;&lt;br&gt;
n = 2^{h} — 1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So that's how we can go from h to n. What about the other direction?&lt;/p&gt;

&lt;p&gt;We need to bring the h down from the exponent.&lt;/p&gt;

&lt;p&gt;That's what logs are for!&lt;/p&gt;

&lt;p&gt;First, some quick review.&lt;/p&gt;

&lt;p&gt;&amp;lt;==(log_{10} (100) )==&amp;gt;&lt;/p&gt;

&lt;p&gt;simply means,&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What power must you raise 10 to in order to get 100?"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Which is 2,&lt;/p&gt;

&lt;p&gt;because .&lt;/p&gt;

&lt;p&gt;&amp;lt;==(10&lt;sup&gt;2&lt;/sup&gt; = 100 )==&amp;gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Graph Data Structure: Directed, Acyclic, etc
&lt;/h3&gt;

&lt;p&gt;Graph =====&lt;/p&gt;
&lt;h3&gt;
  
  
  Binary numbers
&lt;/h3&gt;

&lt;p&gt;Let's put those bits to use. Let's store some stuff. Starting with numbers.&lt;/p&gt;

&lt;p&gt;The number system we usually use (the one you probably learned in elementary school) is called &lt;strong&gt;base 10&lt;/strong&gt;, because each digit has &lt;em&gt;ten&lt;/em&gt; possible values (1, 2, 3, 4, 5, 6, 7, 8, 9, and 0).&lt;/p&gt;

&lt;p&gt;But computers don't have digits with ten possible values. They have &lt;em&gt;bits&lt;/em&gt; with &lt;em&gt;two&lt;/em&gt; possible values. So they use &lt;strong&gt;base 2&lt;/strong&gt; numbers.&lt;/p&gt;

&lt;p&gt;Base 10 is also called &lt;strong&gt;decimal&lt;/strong&gt;. Base 2 is also called &lt;strong&gt;binary&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To understand binary, let's take a closer look at how decimal numbers work. Take the number "101" in decimal:&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WhOVHWKg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ASeL92lcm_RTuG-32" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WhOVHWKg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ASeL92lcm_RTuG-32" width="115" height="50"&gt;&lt;/a&gt;&lt;br&gt;
Notice we have two "1"s here, but they don't*mean*the same thing. The leftmost "1"&lt;em&gt;means*100, and the rightmost "1"*means&lt;/em&gt; 1. That's because the leftmost "1" is in the hundreds place, while the rightmost "1" is in the ones place. And the "0" between them is in the tens place.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hVTDzThp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A5kyLwItFLJiwsDRY" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hVTDzThp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A5kyLwItFLJiwsDRY" width="341" height="100"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;So this "101" in base 10 is telling us we have "1 hundred, 0 tens, and 1 one."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n0U02EHD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ABHTYqymE77CnzKpP" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n0U02EHD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ABHTYqymE77CnzKpP" width="341" height="199"&gt;&lt;/a&gt;&lt;br&gt;
Notice how the*places*in base 10 (ones place, tens place, hundreds place, etc.) are*sequential powers of 10*:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="8102"&gt;10&lt;sup&gt;0&lt;/sup&gt;=1 * 10&lt;sup&gt;1&lt;/sup&gt;=10 * 10&lt;sup&gt;2&lt;/sup&gt;=100 * 10&lt;sup&gt;3&lt;/sup&gt;=1000 * etc.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The places in &lt;em&gt;binary&lt;/em&gt; (base 2) are sequential powers of &lt;em&gt;2&lt;/em&gt;:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="1ddc"&gt;2&lt;sup&gt;0&lt;/sup&gt;=1 * 2&lt;sup&gt;1&lt;/sup&gt;=2 * 2&lt;sup&gt;2&lt;/sup&gt;=4 * 2&lt;sup&gt;3&lt;/sup&gt;=8 * etc.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So let's take that same "101" but this time let's read it as a &lt;em&gt;binary&lt;/em&gt; number:&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C7eZDwFZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ApKEnJ9JCGcMapiG4" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C7eZDwFZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ApKEnJ9JCGcMapiG4" width="341" height="100"&gt;&lt;/a&gt;&lt;br&gt;
Reading this from right to left: we have a 1 in the ones place, a 0 in the twos place, and a 1 in the fours place. So our total is 4 + 0 + 1 which is 5.&lt;/p&gt;




&lt;h1&gt;
  
  
  Implementations
&lt;/h1&gt;
&lt;h3&gt;
  
  
  Resources (article content below):
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Videos
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=0IAPZzGSbME&amp;amp;list=PLDN4rrl48XKpZkf03iYFl-O29szjTrs_O&amp;amp;index=2&amp;amp;t=0s"&gt;Abdul Bari: YouTubeChannel for Algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=lxja8wBwN0k&amp;amp;list=PLKKfKV1b9e8ps6dD3QA5KFfHdiWj9cB1s"&gt;Data Structures and algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/playlist?list=PLmGElG-9wxc9Us6IK6Qy-KHlG_F3IS6Q9"&gt;Data Structures and algorithms Course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.khanacademy.org/computing/computer-science/algorithms"&gt;Khan Academy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/playlist?list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P"&gt;Data structures by mycodeschool&lt;/a&gt;Pre-requisite for this lesson is good understanding of pointers in C.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=HtSuA80QTyo&amp;amp;list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb"&gt;MIT 6.006: Intro to Algorithms(2011)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=5_5oE5lgrhw&amp;amp;list=PLu0W_9lII9ahIappRPN0MCAgtOu3lQjQi"&gt;Data Structures and Algorithms by Codewithharry&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Books
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://edutechlearners.com/download/Introduction_to_algorithms-3rd%20Edition.pdf"&gt;Introduction to Algorithms&lt;/a&gt; by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.sso.sy/sites/default/files/competitive%20programming%203_1.pdf"&gt;Competitive Programming 3&lt;/a&gt; by Steven Halim and Felix Halim&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://cses.fi/book/book.pdf"&gt;Competitive Programmers Hand Book&lt;/a&gt; Beginner friendly hand book for competitive programmers.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Amchuz/My-Data-Structures-and-Algorithms-Resources/raw/master/Books/Data%20Structures%20and%20Algorithms%20-%20Narasimha%20Karumanchi.pdf"&gt;Data Structures and Algorithms Made Easy&lt;/a&gt; by Narasimha Karumanchi&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Amchuz/My-Data-Structures-and-Algorithms-Resources/raw/master/Books/Learning%20Algorithms%20Through%20Programming%20and%20Puzzle%20Solving.pdf"&gt;Learning Algorithms Through Programming and Puzzle Solving&lt;/a&gt; by Alexander Kulikov and Pavel Pevzner&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Coding practice
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://leetcode.com/"&gt;LeetCode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.interviewbit.com/"&gt;InterviewBit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codility.com/"&gt;Codility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.hackerrank.com/"&gt;HackerRank&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://projecteuler.net/"&gt;Project Euler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://spoj.com/"&gt;Spoj&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.google.com/codejam/contests.html"&gt;Google Code Jam practice problems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.hackerearth.com/"&gt;HackerEarth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.topcoder.com/"&gt;Top Coder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codechef.com/"&gt;CodeChef&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codewars.com/"&gt;Codewars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codesignal.com/"&gt;CodeSignal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://codekata.com/"&gt;CodeKata&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.firecode.io/"&gt;Firecode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Courses
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://academy.zerotomastery.io/p/master-the-coding-interview-faang-interview-prep"&gt;Master the Coding Interview: Big Tech (FAANG) Interviews&lt;/a&gt; Course by Andrei and his team.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://realpython.com/python-data-structures"&gt;Common Python Data Structures&lt;/a&gt; Data structures are the fundamental constructs around which you build your programs. Each data structure provides a particular way of organizing data so it can be accessed efficiently, depending on your use case. Python ships with an extensive set of data structures in its standard library.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.geeksforgeeks.org/fork-cpp-course-structure"&gt;Fork CPP&lt;/a&gt; A good course for beginners.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://codeforces.com/edu/course/2"&gt;EDU&lt;/a&gt; Advanced course.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.udacity.com/course/c-for-programmers--ud210"&gt;C++ For Programmers&lt;/a&gt; Learn features and constructs for C++.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Guides
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.geeksforgeeks.org/"&gt;GeeksForGeeks --- A CS portal for geeks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.learneroo.com/subjects/8"&gt;Learneroo --- Algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.topcoder.com/tc?d1=tutorials&amp;amp;d2=alg_index&amp;amp;module=Static"&gt;Top Coder tutorials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.infoarena.ro/training-path"&gt;Infoarena training path&lt;/a&gt; (RO)&lt;/li&gt;
&lt;li&gt;Steven &amp;amp; Felix Halim --- &lt;a href="https://uva.onlinejudge.org/index.php?option=com_onlinejudge&amp;amp;Itemid=8&amp;amp;category=118"&gt;Increasing the Lower Bound of Programming Contests&lt;/a&gt; (UVA Online Judge)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;em&gt;space&lt;/em&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The space complexity represents the memory consumption of a data structure. As for most of the things in life, you can't have it all, so it is with the data structures. You will generally need to trade some time for space or the other way around.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  &lt;em&gt;time&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The time complexity for a data structure is in general more diverse than its space complexity.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  &lt;em&gt;Several operations&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;In contrary to algorithms, when you look at the time complexity for data structures you need to express it for several operations that you can do with data structures. It can be adding elements, deleting elements, accessing an element or even searching for an element.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  &lt;em&gt;Dependent on data&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Something that data structure and algorithms have in common when talking about time complexity is that they are both dealing with data. When you deal with data you become dependent on them and as a result the time complexity is also dependent of the data that you received. To solve this problem we talk about 3 different time complexity.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The best-case complexity: when the data looks the best&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The worst-case complexity: when the data looks the worst&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The average-case complexity: when the data looks average&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Big O notation
&lt;/h3&gt;

&lt;p&gt;The complexity is usually expressed with the Big O notation. The wikipedia page about this subject is pretty complex but you can find here a good summary of the different complexity for the most famous data structures and sorting algorithms.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Array data structure
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3SdfGoD---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AQk3UYgeqXamRrFLR.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3SdfGoD---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AQk3UYgeqXamRrFLR.gif" alt="" width="438" height="180"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Definition
&lt;/h3&gt;

&lt;p&gt;An Array data structure, or simply an Array, is a data structure consisting of a collection of elements (values or variables), each identified by at least one array index or key. The simplest type of data structure is a linear array, also called one-dimensional array. From Wikipedia&lt;/p&gt;

&lt;p&gt;Arrays are among the oldest and most important data structures and are used by every program. They are also used to implement many other data structures.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Complexity&lt;/em&gt;\&lt;br&gt;
&lt;em&gt;Average&lt;/em&gt;\&lt;br&gt;
&lt;em&gt;Access Search Insertion Deletion&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;O(1) O(n) O(1) O(n)&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz/6d82ba2d67954922ddad6607f0ae18d9/raw/0dcce6cc5a99edd9d4889ea49add07c5861a3b5d/ArrayADT.js"&gt;view raw&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz/6d82ba2d67954922ddad6607f0ae18d9#file-arrayadt-js"&gt;ArrayADT.js &lt;/a&gt;hosted with ❤ by &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ymPVEbRv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2A-BJ2hU-CZO2kuzu4x5a53g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ymPVEbRv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2A-BJ2hU-CZO2kuzu4x5a53g.png" alt="" width="721" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;indexvalue0 ... this is the first value, stored at zero position&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; The index of an array &lt;strong&gt;runs in sequence&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2. This could be useful for storing data that are required to be ordered, such as rankings or queues&lt;/p&gt;

&lt;p&gt;3. In JavaScript, array's value could be mixed; meaning value of each index could be of different data, be it String, Number or even Objects&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz/7065a52f96e241439d2cbc4137b6e1d7/raw/49249544007550b826fb023292e6016eb73bb84f/arrays.js"&gt;view raw&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz/7065a52f96e241439d2cbc4137b6e1d7"&gt;arrays.js &lt;/a&gt;hosted with ❤ by &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Objects
&lt;/h3&gt;

&lt;p&gt;Think of objects as a logical grouping of a bunch of properties.&lt;/p&gt;

&lt;p&gt;Properties could be some variable that it's storing or some methods that it's using.&lt;/p&gt;

&lt;p&gt;I also visualize an object as a table.&lt;/p&gt;

&lt;p&gt;The main difference is that object's "index" need not be numbers and is not necessarily sequenced.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7H01ZJdL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1200/1%2AKVZkD2zrgEa_47igW8Hq8g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7H01ZJdL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1200/1%2AKVZkD2zrgEa_47igW8Hq8g.png" alt="" width="880" height="132"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://gist.github.com/bgoonz/ed42c5c0f3a1a7757b33b437a9ad7129#file-object-js"&gt;https://gist.github.com/bgoonz/ed42c5c0f3a1a7757b33b437a9ad7129#file-object-js&lt;/a&gt; %}&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz/ed42c5c0f3a1a7757b33b437a9ad7129/raw/7e120a8332ec848fe45ed14bb6974ee9b71ebb25/object.js"&gt;view raw&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz/ed42c5c0f3a1a7757b33b437a9ad7129#file-object-js"&gt;object.js &lt;/a&gt;hosted with ❤ by &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The Hash Table
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ip4KDvbv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AavbxLAFocSV6vsl5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ip4KDvbv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AavbxLAFocSV6vsl5.gif" alt="" width="509" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wYqMYcKB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A3GJiRoLyEoZ_aIlO" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wYqMYcKB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A3GJiRoLyEoZ_aIlO" alt="" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;em&gt;Definition&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A Hash Table (Hash Map) is a data structure used to implement an associative array, a structure that can map keys to values. A Hash Table uses a hash function to compute an index into an array of buckets or slots, from which the desired value can be found. From Wikipedia&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hash Tables are considered the more efficient data structure for lookup and for this reason, they are widely used.&lt;/p&gt;

&lt;p&gt;Complexity\&lt;br&gt;
Average\&lt;br&gt;
Access Search Insertion Deletion&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O(1) O(1) O(1)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The code&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Note, here I am storing another object for every hash in my Hash Table.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz/b5d026f60e899b6e8e0ab5ad9bf3bb82/raw/0177cba4aadd80aa93b70832f8d39b953565c77f/hashtable.js"&gt;view raw&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz/b5d026f60e899b6e8e0ab5ad9bf3bb82#file-hashtable-js"&gt;hashtable.js &lt;/a&gt;hosted with ❤ by &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Set
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Sets
&lt;/h3&gt;

&lt;p&gt;Sets are pretty much what it sounds like. It's the same intuition as Set in Mathematics. I visualize Sets as Venn Diagrams.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lEOaEKJP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AAIQljh9p8Baw9TnE.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lEOaEKJP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AAIQljh9p8Baw9TnE.png" alt="" width="551" height="667"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz/94905bc0d9f1feb9954c3442761973e7/raw/42e5a12c83e29e15514b5df33aa08c129292e439/native-set.js"&gt;view raw&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz/94905bc0d9f1feb9954c3442761973e7#file-native-set-js"&gt;native-set.js &lt;/a&gt;hosted with ❤ by &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--obx40R5x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AgOE33ANZP2ujbjIG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--obx40R5x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AgOE33ANZP2ujbjIG" alt="" width="290" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Definition&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A Set is an abstract data type that can store certain values, without any particular order, and no repeated values. It is a computer implementation of the mathematical concept of a finite Set. From Wikipedia&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Set data structure is usually used to test whether elements belong to set of values. Rather then only containing elements, Sets are more used to perform operations on multiple values at once with methods such as union, intersect, etc...&lt;/p&gt;

&lt;p&gt;Complexity\&lt;br&gt;
Average\&lt;br&gt;
Access Search Insertion Deletion&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O(n) O(n) O(n)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The code&lt;/em&gt; &amp;gt; &lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz/d5fcc5173fc13774b72544ccc1df6a98/raw/9f2ffaee5894609a85e50aedab0ea33b1b52c15e/setADS.js"&gt;view raw&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz/d5fcc5173fc13774b72544ccc1df6a98#file-setads-js"&gt;setADS.js &lt;/a&gt;hosted with ❤ by &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Singly Linked List
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AMbwIGfJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AfLs64rV-Xq19aVCA.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AMbwIGfJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AfLs64rV-Xq19aVCA.gif" alt="" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Definition&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A Singly Linked List is a linear collection of data elements, called nodes pointing to the next node by means of pointer. It is a data structure consisting of a group of nodes which together represent a sequence. Under the simplest form, each node is composed of data and a reference (in other words, a link) to the next node in the sequence.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Linked Lists are among the simplest and most common data structures because it allows for efficient insertion or removal of elements from any position in the sequence.&lt;/p&gt;

&lt;p&gt;Complexity\&lt;br&gt;
Average\&lt;br&gt;
Access Search Insertion Deletion\&lt;br&gt;
O(n) O(n) O(1) O(1)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The code&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz/50b1eedffde6353523e0909bcb903330/raw/f0304ea395db26b45a4d3ce2229eb183feaaf41e/singly-linked-list.js"&gt;view raw&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz/50b1eedffde6353523e0909bcb903330#file-singly-linked-list-js"&gt;singly-linked-list.js &lt;/a&gt;hosted with ❤ by &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Doubly Linked List
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KzuHNjBc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ATQXiR-L_itiG3WP-.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KzuHNjBc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ATQXiR-L_itiG3WP-.gif" alt="" width="730" height="201"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Definition&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A Doubly Linked List is a linked data structure that consists of a set of sequentially linked records called nodes. Each node contains two fields, called links, that are references to the previous and to the next node in the sequence of nodes. From Wikipedia&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Having two node links allow traversal in either direction but adding or removing a node in a doubly linked list requires changing more links than the same operations on a Singly Linked List.&lt;/p&gt;

&lt;p&gt;Complexity\&lt;br&gt;
Average\&lt;br&gt;
Access Search Insertion Deletion\&lt;br&gt;
O(n) O(n) O(1) O(1)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The code&lt;/em&gt; &amp;gt; &lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz/60a1ac977059e4dd5827c34fd0dbdcc4/raw/cc9a8a8930441c438469ccd8d9f1ffb309d15af2/doubly-linked-list.js"&gt;view raw&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz/60a1ac977059e4dd5827c34fd0dbdcc4#file-doubly-linked-list-js"&gt;doubly-linked-list.js &lt;/a&gt;hosted with ❤ by &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Stack
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--smXey3hq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/1200/0%2AqsjYW-Lvfo22ecLE.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--smXey3hq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/1200/0%2AqsjYW-Lvfo22ecLE.gif" alt="" width="879" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Definition&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A Stack is an abstract data type that serves as a collection of elements, with two principal operations: push, which adds an element to the collection, and pop, which removes the most recently added element that was not yet removed. The order in which elements come off a Stack gives rise to its alternative name, LIFO (for last in, first out). From Wikipedia&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A Stack often has a third method peek which allows to check the last pushed element without popping it.&lt;/p&gt;

&lt;p&gt;Complexity\&lt;br&gt;
Average\&lt;br&gt;
Access Search Insertion Deletion\&lt;br&gt;
O(n) O(n) O(1) O(1)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The code&lt;/em&gt; &amp;gt; &lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz/a3c27a5126ed87a5f708b11bb3032994/raw/1ed13120c7da9e3fd4e7edd4808daf6679be9c45/stack.js"&gt;view raw&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz/a3c27a5126ed87a5f708b11bb3032994#file-stack-js"&gt;stack.js &lt;/a&gt;hosted with ❤ by &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Queue
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gBKtfIkw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AYvfuX5tKP7-V0p7v.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gBKtfIkw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AYvfuX5tKP7-V0p7v.gif" alt="" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Definition&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A Queue is a particular kind of abstract data type or collection in which the entities in the collection are kept in order and the principal operations are the addition of entities to the rear terminal position, known as enqueue, and removal of entities from the front terminal position, known as dequeue. This makes the Queue a First-In-First-Out (FIFO) data structure. In a FIFO data structure, the first element added to the Queue will be the first one to be removed.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As for the Stack data structure, a peek operation is often added to the Queue data structure. It returns the value of the front element without dequeuing it.&lt;/p&gt;

&lt;p&gt;Complexity\&lt;br&gt;
Average\&lt;br&gt;
Access Search Insertion Deletion\&lt;br&gt;
O(n) O(n) O(1) O(n)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The code&lt;/em&gt; &amp;gt; &lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz/af7cddac66b05b47f797a539929e8976/raw/c6ffc2afb87c54018de60b8b84b6bbeba0ebd35d/queue.js"&gt;view raw&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz/af7cddac66b05b47f797a539929e8976#file-queue-js"&gt;queue.js &lt;/a&gt;hosted with ❤ by &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tree
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4OmMy-Zx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AyUiQ-NaPKeLQnN7n" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4OmMy-Zx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AyUiQ-NaPKeLQnN7n" alt="" width="450" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Definition&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A Tree is a widely used data structure that simulates a hierarchical tree structure, with a root value and subtrees of children with a parent node. A tree data structure can be defined recursively as a collection of nodes (starting at a root node), where each node is a data structure consisting of a value, together with a list of references to nodes (the "children"), with the constraints that no reference is duplicated, and none points to the root node. From Wikipedia&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Complexity\&lt;br&gt;
Average\&lt;br&gt;
Access Search Insertion Deletion\&lt;br&gt;
O(n) O(n) O(n) O(n)\&lt;br&gt;
To get a full overview of the time and space complexity of the Tree data structure, have a look to this excellent Big O cheat sheet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4mBxL6Li--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2ADCdQiB6XqBJCrFRz12BwqA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4mBxL6Li--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2ADCdQiB6XqBJCrFRz12BwqA.png" alt="" width="800" height="833"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The code&lt;/em&gt; &amp;gt; &lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz/3ac1f86fc096e8097a9a5e4395d36039/raw/014643d64f62a7d6908e070a6e23220b702a4b20/bst.js"&gt;view raw&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz/3ac1f86fc096e8097a9a5e4395d36039#file-bst-js"&gt;bst.js &lt;/a&gt;hosted with ❤ by &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Graph
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W1UxNi0v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2Aq31mL1kjFWlIzw3l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W1UxNi0v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2Aq31mL1kjFWlIzw3l.gif" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Definition&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A Graph data structure consists of a finite (and possibly mutable) set of vertices or nodes or points, together with a set of unordered pairs of these vertices for an undirected Graph or a set of ordered pairs for a directed Graph. These pairs are known as edges, arcs, or lines for an undirected Graph and as arrows, directed edges, directed arcs, or directed lines for a directed Graph. The vertices may be part of the Graph structure, or may be external entities represented by integer indices or references.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;A graph is &lt;strong&gt;any&lt;/strong&gt; collection of nodes and edges.&lt;/li&gt;
&lt;li&gt;Much more relaxed in structure than a tree.&lt;/li&gt;
&lt;li&gt;It doesn't need to have a root node (not every node needs to be accessible from a single node)&lt;/li&gt;
&lt;li&gt;It can have cycles (a group of nodes whose paths begin and end at the same node)&lt;/li&gt;
&lt;li&gt;Cycles are not always "isolated", they can be one part of a larger graph. You can detect them by starting your search on a specific node and finding a path that takes you back to that same node.&lt;/li&gt;
&lt;li&gt;Any number of edges may leave a given node&lt;/li&gt;
&lt;li&gt;A Path is a sequence of nodes on a graph&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cycle Visual
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8BhzkU9g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2Adn1BqCdXdFg4FCVSz6uArA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8BhzkU9g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2Adn1BqCdXdFg4FCVSz6uArA.png" alt="" width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A Graph data structure may also associate to each edge some edge value, such as a symbolic label or a numeric attribute (cost, capacity, length, etc.).&lt;/p&gt;

&lt;p&gt;Representation\&lt;br&gt;
There are different ways of representing a graph, each of them with its own advantages and disadvantages. Here are the main 2:&lt;/p&gt;

&lt;p&gt;Adjacency list: For every vertex a list of adjacent vertices is stored. This can be viewed as storing the list of edges. This data structure allows the storage of additional data on the vertices and edges.\&lt;br&gt;
Adjacency matrix: Data are stored in a two-dimensional matrix, in which the rows represent source vertices and columns represent destination vertices. The data on the edges and vertices must be stored externally.&lt;/p&gt;
&lt;h2&gt;
  
  
  Ways to Reference Graph Nodes
&lt;/h2&gt;


&lt;h3&gt;
  
  
  Node Class
&lt;/h3&gt;



&lt;p&gt;Uses a class to define the neighbors as properties of each node.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;GraphNode&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;neighbors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;GraphNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;GraphNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;GraphNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;GraphNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;GraphNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;e&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;GraphNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;f&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;neighbors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;neighbors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;neighbors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;neighbors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adjacency Matrix
&lt;/h3&gt;



&lt;p&gt;The row index will corespond to the source of an edge and the column index will correspond to the edges destination.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When the edges have a direction, &lt;code&gt;matrix[i][j]&lt;/code&gt; may not be the same as &lt;code&gt;matrix[j][i]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;It is common to say that a node is adjacent to itself so &lt;code&gt;matrix[x][x]&lt;/code&gt; is true for any node&lt;/li&gt;
&lt;li&gt;Will be O(n^2) space complexity
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;matrix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;

&lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;B&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;C&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;D&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;F&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;-----&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;-------&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;------&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;------&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;------&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;------&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;------&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;B&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;C&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;D&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;F&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;

&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adjacency List
&lt;/h3&gt;



&lt;p&gt;Seeks to solve the shortcomings of the matrix implementation. It uses an object where keys represent node labels and values associated with that key are the adjacent node keys held in an array.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;e&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
  &lt;span class="na"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
  &lt;span class="na"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;e&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h2&gt;
  
  
  Code Examples
&lt;/h2&gt;


&lt;h3&gt;
  
  
  Basic Graph Class
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Graph&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;addVertex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;addEdges&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;srcValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;destValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addVertex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;srcValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addVertex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;destValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;srcValue&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;destValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;destValue&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;srcValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;buildGraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;ele&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEdges&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ele&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;ele&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;breadthFirstTraversal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;startingVertex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;startingVertex&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;visited&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;depthFirstTraversalIterative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;startingVertex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;startingVertex&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;visited&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;depthFirstTraversalRecursive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;startingVertex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;visited&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="nx"&gt;vertices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;startingVertex&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

    &lt;span class="nx"&gt;vertices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;startingVertex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;startingVertex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adjList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;startingVertex&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;depthFirstTraversalRecursive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vertices&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;vertices&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Node Class Examples
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;GraphNode&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;neighbors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;breadthFirstSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;startingNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetVal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;startingNode&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;visited&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;targetVal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;neighbors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;ele&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ele&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;numRegions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;maxLength&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;maxLength&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;maxLength&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;maxLength&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;maxLength&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;maxValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;visited&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;maxValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;currentNode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;maxValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;maxValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;currentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;currentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;neighbors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;ele&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ele&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;maxValue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Traversal Examples
&lt;/h3&gt;
&lt;h4&gt;
  
  
  With Graph Node Class
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;depthFirstRecur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;visited&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;neighbors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;neighbor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;depthFirstRecur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;neighbor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;depthFirstIter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;visited&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;neighbors&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  With Adjacency List
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;depthFirst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;visited&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;_depthFirstRecur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;_depthFirstRecur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;neighbor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;_depthFirstRecur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;neighbor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz/de05ada6da193c8a13bed59451290f0b/raw/dc60f3c66fe2dd698f99a5ecaa503eeeac181fdd/graph-representation.md"&gt;view raw&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz/de05ada6da193c8a13bed59451290f0b#file-graph-representation-md"&gt;graph-representation.md &lt;/a&gt;hosted with ❤ by &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Graph&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The code&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz/afe4976aab8b05ad19775f204f3cfd62/raw/b0cbf3dc77da176c389c2519356ef360115d98bb/graph.js"&gt;view raw&lt;/a&gt;&lt;a href="https://gist.github.com/bgoonz/afe4976aab8b05ad19775f204f3cfd62#file-graph-js"&gt;graph.js &lt;/a&gt;hosted with ❤ by &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;





&lt;h1&gt;
  
  
  Memoization &amp;amp; Tabulation (&lt;strong&gt;&lt;em&gt;Dynamic Programming&lt;/em&gt;&lt;/strong&gt;)
&lt;/h1&gt;

&lt;h3&gt;
  
  
  What is Memoization?
&lt;/h3&gt;

&lt;h4&gt;
  
  
  And why this programming paradigm shouldn't make you cringe
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_HDfep5C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AEy6rNclUY-Rp3iqM9Ytnag.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_HDfep5C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AEy6rNclUY-Rp3iqM9Ytnag.gif" width="800" height="645"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6gzd9tcS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2Aw0txnjkmBo2z0COv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6gzd9tcS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2Aw0txnjkmBo2z0COv.png" width="800" height="550"&gt;&lt;/a&gt;&lt;strong&gt;Memoization&lt;/strong&gt; is a design paradigm used to reduce the overall number of&lt;br&gt;&lt;br&gt;
calculations that can occur in algorithms that use recursive algorithms.&lt;/p&gt;

&lt;p&gt;Recall that recursion solves a large problem by dividing it into smaller&lt;br&gt;&lt;br&gt;
sub-problems that are more manageable.&lt;/p&gt;

&lt;p&gt;Memoization will store the results of the sub-problems in some other data structure, meaning that you avoid duplicate calculations and only "solve" each subproblem once.&lt;/p&gt;

&lt;p&gt;This approach is near synonymous with another computer science term you may have heard before — caching. However, caching as a practice is not achieved exclusively by memoizing. Think of a cache as a little bucket where we will keep important information we don't want to forget in the near future but that isn't vitally important or part of the long-term makeup of our application. It's less important than the things we need to store in memory but more important than a variable we can discard as soon as we use it once.&lt;/p&gt;

&lt;p&gt;There are two features that comprise memoization:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="0b0b"&gt;The function is recursive.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="65a0"&gt;The additional data structure used is typically an object (we refer to this as&lt;br&gt;
the memo).&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a trade-off between the time it takes to run an algorithm (without&lt;br&gt;&lt;br&gt;
memoization) and the memory used to run the algorithm (with memoization).&lt;/p&gt;

&lt;p&gt;Usually, memoization is a good trade-off when dealing with large data or&lt;br&gt;&lt;br&gt;
calculations.&lt;/p&gt;

&lt;p&gt;You cannot always apply this technique to recursive problems. The problem must have an "overlapping subproblem structure" for memoization to be effective.&lt;/p&gt;

&lt;p&gt;Generally speaking, computer memory is cheap and human time is incalculably valuable so we may opt for this approach even when the largest gains on paper can be made from converting RAM at the expense of execution speed.&lt;/p&gt;

&lt;p&gt;Here's an example of a problem that has such a structure:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Using pennies, nickels, dimes, and quarters, how many combinations&lt;br&gt;&lt;br&gt;
of coins are there that total 27 cents?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Along the way to calculating the possible coin combination of 27&lt;br&gt;&lt;br&gt;
cents, you should also calculate the smallest coin combination of 25 cents as well as 21 cents and any smaller total that comprises a fraction of the total combination of 27 (so long as there is a one-cent piece; if there are only nickels and up, the problem deviates from this approach on a technicality but in essence, it is still calculated in the same manner, that is to say as a component of that bigger problem).&lt;/p&gt;

&lt;p&gt;Remember, a computer is stupid and must check every possibility exhaustively to ensure that no possible combination is missed (in reality, I may be oversimplifying the truth of the matter but for now, please bear with me).&lt;/p&gt;

&lt;p&gt;This is the essence of a redundant subcomponent of the overall problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memoizing factorial
&lt;/h3&gt;

&lt;p&gt;From this plain &lt;code&gt;factorial&lt;/code&gt; above, it is clear that every time you call&lt;br&gt;&lt;br&gt;
&lt;code&gt;factorial(6)&lt;/code&gt; you should get the same result of &lt;code&gt;720&lt;/code&gt; each time. The code is&lt;br&gt;&lt;br&gt;
somewhat inefficient because you must go down the full recursive stack for each top-level call to &lt;code&gt;factorial(6)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If we can store the result of &lt;code&gt;factorial(6)&lt;/code&gt; the first time you calculate it, then on subsequent calls to &lt;code&gt;factorial(6)&lt;/code&gt; you simply fetch the stored result in constant time.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;memo&lt;/code&gt; object above will map an argument of &lt;code&gt;factorial&lt;/code&gt; to its return&lt;br&gt;&lt;br&gt;
value. That is, the keys will be arguments and their values will be the&lt;br&gt;&lt;br&gt;
corresponding results returned. By using the memo, you are able to avoid&lt;br&gt;&lt;br&gt;
duplicate recursive calls!&lt;/p&gt;

&lt;p&gt;By the time your first call to &lt;code&gt;factorial(6)&lt;/code&gt;returns, you will not have just the argument &lt;code&gt;6&lt;/code&gt; stored in the memo. Rather, y*&lt;em&gt;ou will have &lt;em&gt;all&lt;/em&gt; arguments 2 to 6 stored in the memo.&lt;/em&gt;*&lt;/p&gt;

&lt;p&gt;Perhaps you're not convinced because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="9fd5"&gt;You didn't improve the speed of the algorithm by an order of Big-O (it is&lt;br&gt;
still O(n)).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="3867"&gt;The code uses some global variable, so it's kind of ugly.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Memoizing the Fibonacci generator
&lt;/h3&gt;

&lt;p&gt;Here's a &lt;em&gt;naive&lt;/em&gt; implementation of a function that calculates the Fibonacci&lt;br&gt;&lt;br&gt;
number for a given input.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function fib(n) {
  if (n === 1 || n === 2) return 1;
  return fib(n - 1) + fib(n - 2);
}

fib(6);     // =&amp;gt; 8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The time complexity of this function is not super intuitive to describe because&lt;br&gt;&lt;br&gt;
the code branches twice recursively. Fret not! You'll find it useful to&lt;br&gt;&lt;br&gt;
visualize the calls needed to do this with a tree. When reasoning about the time complexity for recursive functions, draw a tree that helps you see the calls. Every node of the tree represents a call of the recursion:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--i0e_wENL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AfS_yOCDL-4NyBLyj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i0e_wENL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AfS_yOCDL-4NyBLyj.png" width="800" height="717"&gt;&lt;/a&gt;-   &lt;span id="47ea"&gt;*n *, the height of this tree will be &lt;code&gt;n&lt;/code&gt;. You derive this by following&lt;br&gt;&lt;br&gt;
    the path going straight down the left side of the tree.&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="855a"&gt;each internal node leads to two more nodes. Overall, this means that the tree will have roughly 2n nodes.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="df50"&gt;which is the same as saying that the &lt;code&gt;fib&lt;/code&gt;function has an exponential time complexity of 2n.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="42df"&gt;That is very slow!&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See for yourself, try running &lt;code&gt;fib(50)&lt;/code&gt; - you'll be waiting for quite a lot longer than you've gotten used to waiting for a program to run in the last decade.&lt;/p&gt;

&lt;p&gt;The green regions highlighted above are repetitive.&lt;/p&gt;

&lt;p&gt;As the &lt;code&gt;n&lt;/code&gt; grows bigger, the number of duplicate sub-trees grows exponentially.&lt;/p&gt;

&lt;p&gt;Luckily you can fix this using memoization by using a similar object strategy.&lt;/p&gt;

&lt;p&gt;You can use some JavaScript default arguments memo={} to clean things up:&lt;/p&gt;

&lt;p&gt;You can see the marked nodes (function calls) that access the memo in green.&lt;br&gt;&lt;br&gt;
It's easy to see that this version of the Fibonacci generator will do far fewer&lt;br&gt;&lt;br&gt;
computations as &lt;code&gt;n&lt;/code&gt; grows larger! In fact, this memoization has brought the time complexity down to linear &lt;code&gt;O(n)&lt;/code&gt; time because the tree only branches on the left side. This is an enormous gain if you recall the complexity of class hierarchy.&lt;/p&gt;

&lt;h3&gt;
  
  
  The memoization formula
&lt;/h3&gt;

&lt;p&gt;Now that you understand memoization, when should you apply it? Memoization is useful when attacking recursive problems that have many overlapping sub-problems.&lt;/p&gt;

&lt;p&gt;You'll find it most useful to draw out the visual tree first. If you notice duplicate sub-trees, time to memoize. Here are the hard and fast&lt;br&gt;&lt;br&gt;
rules you can use to memoize a slow algorithm:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;span id="002b"&gt;Write the unoptimized, brute force recursion and make sure it works.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="d106"&gt;Add the memo object as an additional argument to the function. The keys will&lt;br&gt;
represent unique arguments to the function, and their values will represent the results for those arguments.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="ab4e"&gt;Add a base case condition to the function that returns the stored value if&lt;br&gt;
the function's argument is in the memo.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="3e67"&gt;Before you return the result of the recursive case, store it in the memo as a&lt;br&gt;
value and make the function's argument its key.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  Practice:
&lt;/h1&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="c1"&gt;//! In tabulation we create a table(array) and fill it with elements.&lt;/span&gt;
&lt;span class="c1"&gt;// We will complete the table by filling entries from first to last, or "left to right".&lt;/span&gt;
&lt;span class="c1"&gt;// --&amp;gt;This means that the first entry of the table(first element of the array) will correspond to the smallest subproblem.&lt;/span&gt;
&lt;span class="c1"&gt;// ----&amp;gt;The final entry of the table(last element of the array) will correspond to the largest problem !!(which is also the final answer.)!!&lt;/span&gt;
&lt;span class="c1"&gt;// There are two main features that comprise the Tabulation strategy:&lt;/span&gt;
&lt;span class="c1"&gt;// //1. the function is iterative and not recursive&lt;/span&gt;
&lt;span class="c1"&gt;//// 2. the additional data structure used is typically an array, commonly referred to as the table&lt;/span&gt;
&lt;span class="c1"&gt;// Example:&lt;/span&gt;
&lt;span class="c1"&gt;// Once again, we will use the fibonacci example for demonstration&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;tabulatedFib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// !create a blank array with n reserved spots&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;//console.log(table);&lt;/span&gt;
  &lt;span class="c1"&gt;//! initialize the first two values&lt;/span&gt;
  &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// complete the table by moving from left to right,&lt;/span&gt;

  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="c1"&gt;//console.log(table);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;////console.log(table);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;//console.log("tabulatedFib(6): ", tabulatedFib(6));&lt;/span&gt;
&lt;span class="c1"&gt;//console.log("tabulatedFib(7): ", tabulatedFib(7));&lt;/span&gt;
&lt;span class="cm"&gt;/*
bryan@LAPTOP-F699FFV1:/mnt/c/Users/15512/Google Drive/a-A-September/weeks/week-7/days/tuesday/Past-Cohort/Useful$ node algos.js
[ &amp;lt;6 empty items&amp;gt; ]
[ 0, 1, 1, &amp;lt;3 empty items&amp;gt; ]
[ 0, 1, 1, 2, &amp;lt;2 empty items&amp;gt; ]
[ 0, 1, 1, 2, 3, &amp;lt;1 empty item&amp;gt; ]
[ 0, 1, 1, 2, 3, 5 ]
[0, 1, 1, 2, 3, 5, 8]
[ 0, 1, 1, 2, 3, 5, 8]
-tabulatedFib(6):  8
[ &amp;lt;7 empty items&amp;gt; ]
[ 0, 1, 1, &amp;lt;4 empty items&amp;gt; ]
[ 0, 1, 1, 2, &amp;lt;3 empty items&amp;gt; ]
[ 0, 1, 1, 2, 3, &amp;lt;2 empty items&amp;gt; ]
[ 0, 1, 1, 2, 3, 5, &amp;lt;1 empty item&amp;gt; ]
[0, 1, 1, 2,3, 5, 8]
[ 0, 1, 1,  2, 3, 5, 8, 13]
[ 0, 1, 1,  2, 3, 5, 8, 13]
-tabulatedFib(7):  13
*/&lt;/span&gt;
&lt;span class="c1"&gt;// console.log(tabulatedFib(7));      // =&amp;gt; 13&lt;/span&gt;
&lt;span class="c1"&gt;// When we initialize the table and seed the first two values, it will look like this:&lt;/span&gt;
&lt;span class="c1"&gt;//   i        | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |&lt;/span&gt;
&lt;span class="c1"&gt;// ------------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;// table[i] | 0 | 1 |   |   |   |   |   |   |&lt;/span&gt;
&lt;span class="c1"&gt;// After the loop finishes, the final table will be:&lt;/span&gt;
&lt;span class="c1"&gt;//   i       | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |&lt;/span&gt;
&lt;span class="c1"&gt;// -----------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;// table[i]| 0 | 1 | 1 | 2 | 3 | 5 | 8 | 13|&lt;/span&gt;

&lt;span class="c1"&gt;//// Bonus:&lt;/span&gt;
&lt;span class="c1"&gt;//? ------------------HOW DOES THIS WORK--------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;//! MOORE's LAWWWWWWWWWWWWWWWWW!!!!!!!!!!!&lt;/span&gt;
&lt;span class="c1"&gt;//! This is NOT tabulation, but an improvement on the code we just wrote.&lt;/span&gt;
&lt;span class="c1"&gt;//1, 2, 3, 5, (8), 13, 21&lt;/span&gt;
&lt;span class="c1"&gt;//fib(5)=8&lt;/span&gt;
&lt;span class="c1"&gt;//[0,1]&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;SpaceSavingFib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;mostRecentFibs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;mostRecentFibs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;//0&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// because values are alredy in table&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;secondLast&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;last&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mostRecentFibs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//destructure&lt;/span&gt;
    &lt;span class="nx"&gt;mostRecentFibs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;last&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secondLast&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;last&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;//? how does this work?&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;mostRecentFibs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;//console.log("SpaceSavingFib(6): ", SpaceSavingFib(6)); //-SpaceSavingFib(6):  8&lt;/span&gt;
&lt;span class="c1"&gt;//?  ------------------------------------END OF CONFUSION LOL --------------&lt;/span&gt;

&lt;span class="c1"&gt;//// Word break-------------------------------------------------------------&lt;/span&gt;
&lt;span class="cm"&gt;/*
The fill() method changes all elements in an array to a static value, from a start index (default 0) to an end index (default array.length). 
It returns the modified array.
Syntax
arr.fill(value[, start[, end]])
Parameters
!value
-Value to fill the array with. (Note all elements in the array will be this exact value.)
?start Optional
-Start index, default 0.
?end Optional
-End index, default arr.length.

!Return value
-The modified array, filled with value.

Description
If start is negative, it is treated as array.length + start.
If end is negative, it is treated as array.length + end.
fill is intentionally generic: it does not require that its this value be an Array object.
fill is a mutator method: it will change the array itself and return it, not a copy of it.
If the first parameter is an object, each slot in the array will reference that object.
*/&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;wordBreak&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dictionary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;//! "gooddog", ["good", "dog"]&lt;/span&gt;

  &lt;span class="c1"&gt;////The fill() method changes all elements in an array to a static value ⬆️, from a start index (default 0) to an end index (default array.length).&lt;/span&gt;
  &lt;span class="c1"&gt;////It returns the modified array.&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//-[false, false, false, false, false, false, false, false];&lt;/span&gt;
  &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//-[true, false, false, false, false, false, false, false];&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//-table[0] = true, table[4] = true&lt;/span&gt;
    &lt;span class="c1"&gt;//console.log(table); // [ true,  false, false, false, true,  false, false, true]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;//*Unique Pairs&lt;/span&gt;
      &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;word&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//testing every combination of subsets of the string&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dictionary&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;word&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//table[4], table[8] = true&lt;/span&gt;
      &lt;span class="c1"&gt;//console.log(table);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dictionary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;good&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dog&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gooddog&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// wordBreak( string, dictionary );&lt;/span&gt;
&lt;span class="c1"&gt;// console.log( wordBreak( string, dictionary ) ); //!true&lt;/span&gt;

&lt;span class="c1"&gt;//------------------------Annagram----------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="cm"&gt;/*
!Anagrams
Our goal today is to write a method that determines if two given words are anagrams(the letters in one word can be rearranged to form the other word).
For example:
--&amp;gt;anagram("gizmo", "sally")    # =&amp;gt; false
--&amp;gt;anagram("elvis", "lives")    # =&amp;gt; true
Assume that there is no whitespace or punctuation in the given strings.
Phase 4;
Write one more method fourth_anagram.This time, use two objects to store the
number of times each letter appears in both words.
Compare the resulting objects.
What is the time complexity ?
    Bonus : Do it with only one object.
Discuss the time complexity of your solutions together, then call over your TA to look at them.
*/&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;anagrams&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;str2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;str2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// if the lengths of the strings differ they cannot possibly be anagrams&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;

  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//---------------------String1-----------------------------------------------------------&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// if the string does not exist in the object&lt;/span&gt;
      &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//initialize the string as a key (and value 0)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;str1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// increase the value for that key by 1&lt;/span&gt;
    &lt;span class="c1"&gt;//--------------------string2------------------------------------------------------------&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;str2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// if the second string does not exist in the object&lt;/span&gt;
      &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;str2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//initialize the string as a key (and value 0)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;str2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;//--------------End of Loop--------------------------------------------------------------&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// console.log(count);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;str1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;asdfgh&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;str2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hgfdsa&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;//console.log(anagrams(str1, str2));&lt;/span&gt;
&lt;span class="cm"&gt;/*
{ a: 1, h: -1 }
{ a: 1, h: -1, s: 1, g: -1 }
{ a: 1, h: -1, s: 1, g: -1, d: 1, f: -1 }
{ a: 1, h: -1, s: 1, g: -1, d: 0, f: 0 }
{ a: 1, h: -1, s: 0, g: 0, d: 0, f: 0 }
{ a: 0, h: 0, s: 0, g: 0, d: 0, f: 0 }
true
*/&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;str3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;asdfghh&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;str4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hgfdsaa&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;//console.log(anagrams(str3, str4));&lt;/span&gt;
&lt;span class="cm"&gt;/*
{ a: 1, h: -1 }
{ a: 1, h: -1, s: 1, g: -1 }
{ a: 1, h: -1, s: 1, g: -1, d: 1, f: -1 }
{ a: 1, h: -1, s: 1, g: -1, d: 0, f: 0 }
{ a: 1, h: -1, s: 0, g: 0, d: 0, f: 0 }
{ a: 0, h: 0, s: 0, g: 0, d: 0, f: 0 }
{ a: -1, h: 1, s: 0, g: 0, d: 0, f: 0 }
false
*/&lt;/span&gt;

&lt;span class="c1"&gt;// //-----------Anagram Walkthrough----------Uncomment-----------------------------&lt;/span&gt;
&lt;span class="c1"&gt;// function anagrams(str1, str2) {&lt;/span&gt;
&lt;span class="c1"&gt;//   if (str1.length !== str2.length) return false; // if the lengths of the strings differ they cannot possibly be anagrams&lt;/span&gt;
&lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="c1"&gt;//   let count = {};&lt;/span&gt;
&lt;span class="c1"&gt;//   /*&lt;/span&gt;
&lt;span class="c1"&gt;// const str1 = "asdfgh";&lt;/span&gt;
&lt;span class="c1"&gt;// const str2 = "hgfdsa";&lt;/span&gt;
&lt;span class="c1"&gt;// */&lt;/span&gt;
&lt;span class="c1"&gt;//   //! when i = 0&lt;/span&gt;
&lt;span class="c1"&gt;//   //*when i = 1&lt;/span&gt;
&lt;span class="c1"&gt;//   //// when i = 2&lt;/span&gt;
&lt;span class="c1"&gt;//   //?when i = 3&lt;/span&gt;
&lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="c1"&gt;//   for (let i = 0; i &amp;lt; str1.length; i++) {&lt;/span&gt;
&lt;span class="c1"&gt;//     //---------------------String1-----------------------------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;//     if (count[str1[i]] === undefined) {&lt;/span&gt;
&lt;span class="c1"&gt;//       //! true&lt;/span&gt;
&lt;span class="c1"&gt;//       //*true&lt;/span&gt;
&lt;span class="c1"&gt;//       ////true&lt;/span&gt;
&lt;span class="c1"&gt;//       //? FALSE&lt;/span&gt;
&lt;span class="c1"&gt;//       // if the string does not exist in the object&lt;/span&gt;
&lt;span class="c1"&gt;//       count[str1[i]] = 0; //! count = {"a":0}&lt;/span&gt;
&lt;span class="c1"&gt;//       //*{ a: 1, h: -1, s: 0,}&lt;/span&gt;
&lt;span class="c1"&gt;//       ////{ a: 1, h: -1, s: 1, g: -1, d: 0}&lt;/span&gt;
&lt;span class="c1"&gt;//       //? DOES NOT HAPPEN&lt;/span&gt;
&lt;span class="c1"&gt;//     }&lt;/span&gt;
&lt;span class="c1"&gt;//     count[str1[i]] += 1; //! count = {"a":1}&lt;/span&gt;
&lt;span class="c1"&gt;//     //*{ a: 1, h: -1, s: 1,}&lt;/span&gt;
&lt;span class="c1"&gt;//     ////{ a: 1, h: -1, s: 1, g: -1, d: 1}&lt;/span&gt;
&lt;span class="c1"&gt;//     //?&lt;/span&gt;
&lt;span class="c1"&gt;//     //--------------------string2------------------------------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;//     if (count[str2[i]] === undefined) {&lt;/span&gt;
&lt;span class="c1"&gt;//       //! true&lt;/span&gt;
&lt;span class="c1"&gt;//       //*true&lt;/span&gt;
&lt;span class="c1"&gt;//       ////true&lt;/span&gt;
&lt;span class="c1"&gt;//       //? FALSE&lt;/span&gt;
&lt;span class="c1"&gt;//       // if the second string does not exist in the object&lt;/span&gt;
&lt;span class="c1"&gt;//       count[str2[i]] = 0; //! count = {"a":0, "h":0}&lt;/span&gt;
&lt;span class="c1"&gt;//       //*{ a: 1, h: -1, s: 1, g: 0 }&lt;/span&gt;
&lt;span class="c1"&gt;//       ////{ a: 1, h: -1, s: 1, g: -1, d: 1, f: 0 }&lt;/span&gt;
&lt;span class="c1"&gt;//       //? { a: 1, h: -1, s: 1, g: -1, d: 1, f: 0 }  &amp;lt;----- f= 0 ... (!!!the f in each word cancels out!!!)&lt;/span&gt;
&lt;span class="c1"&gt;//     }&lt;/span&gt;
&lt;span class="c1"&gt;//     count[str2[i]] -= 1; //! count = {"a":0, "h":-1}&lt;/span&gt;
&lt;span class="c1"&gt;//     //*{ a: 1, h: -1, s: 1, g: -1 }&lt;/span&gt;
&lt;span class="c1"&gt;//     ////{ a: 1, h: -1, s: 1, g: -1, d: 1, f: -1 }&lt;/span&gt;
&lt;span class="c1"&gt;//     //?&lt;/span&gt;
&lt;span class="c1"&gt;//     console.log(count); //# Same as count object directly above this log statment&lt;/span&gt;
&lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="c1"&gt;//     //--------------End of Loop--------------------------------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;//   }&lt;/span&gt;
&lt;span class="c1"&gt;//   // console.log(count);&lt;/span&gt;
&lt;span class="c1"&gt;//   return Object.values(count).every((num) =&amp;gt; {&lt;/span&gt;
&lt;span class="c1"&gt;//     return num === 0;&lt;/span&gt;
&lt;span class="c1"&gt;//   });&lt;/span&gt;
&lt;span class="c1"&gt;// }&lt;/span&gt;
&lt;span class="c1"&gt;// const str1 = "asdfgh";&lt;/span&gt;
&lt;span class="c1"&gt;// const str2 = "hgfdsa";&lt;/span&gt;
&lt;span class="c1"&gt;// console.log(anagrams(str1, str2));//!true&lt;/span&gt;
&lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="c1"&gt;// const str3 = "asdfghh";&lt;/span&gt;
&lt;span class="c1"&gt;// const str4 = "hgfdsaa";&lt;/span&gt;
&lt;span class="c1"&gt;// console.log(anagrams(str3, str4));//!false&lt;/span&gt;

&lt;span class="c1"&gt;//****************************END OF ANAGRAM***************************************************** */&lt;/span&gt;

&lt;span class="c1"&gt;//!  ***************************************MEMOIZATION*******************************************/*&lt;/span&gt;
&lt;span class="cm"&gt;/*
Memoization is a design pattern used to reduce the overall number of calculations in algorithms that use recursive strategies.
//Memoization will store the results of the sub-problems in some other data structure.
There are two features that comprise memoization:
-1. the function is recursive
-2. the additional data structure used is typically an object(we refer to this as the memo!) (or cache!)
Example:
Our fibonacci fucntions have two recursive calls.
- time complexity of O(2^n)
*/&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;slowFib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;slowFib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;slowFib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;//slowFib(6);&lt;/span&gt;
&lt;span class="c1"&gt;//console.log("slowFib(6): ", slowFib(6)); //- slowFib(6):  8&lt;/span&gt;
&lt;span class="c1"&gt;//---------------------------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;//                                         f(6)&lt;/span&gt;
&lt;span class="c1"&gt;//                     f(5)                  |                  f(4)&lt;/span&gt;
&lt;span class="c1"&gt;//           f(4)        |         f(3)      |        f(3)       |     f(2)      |&lt;/span&gt;
&lt;span class="c1"&gt;//    f(3)     |  f(2)   |   f(2)   |  f(1)  |   f(2)  |   f(1)  |&lt;/span&gt;
&lt;span class="c1"&gt;// f(2) | f(1) |&lt;/span&gt;
&lt;span class="c1"&gt;// Many of the recursive function calls are being made multiple times&lt;/span&gt;
&lt;span class="c1"&gt;//---------------------------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;//! If we store these results in an object,we can reduce the number of recursive calls the function will make.&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;fastFib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;memo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="c1"&gt;// if (n === 1 || n === 2) return 1;&lt;/span&gt;
  &lt;span class="nx"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fastFib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;fastFib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fastFib(4): &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fastFib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fastFib(6): &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fastFib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fastFib(50): &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fastFib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="cm"&gt;/*
┌─────────┬──────────────┬──────────────┬───────────────┐
│ (index) │ fastFib(4):  │ fastFib(6):  │ fastFib(50):  │
├─────────┼──────────────┼──────────────┼───────────────┤
│    0    │      3       │              │               │
│    1    │              │      8       │               │
│    2    │              │              │  12586269025  │
└─────────┴──────────────┴──────────────┴───────────────┘
*/&lt;/span&gt;

&lt;span class="cm"&gt;/*
//fastFib(6); // =&amp;gt; 8
//fastFib(50); // =&amp;gt; 12586269025
Before memoization
                                        f(6)
                    f(5)                  |                  f(4)
          f(4)        |         f(3)      |        f(3)       |     f(2)      |
   f(3)     |  f(2)   |   f(2)   |  f(1)  |   f(2)  |   f(1)  |
f(2) | f(1) |
--------------------------------------------------------------------------------------
Now, our function calls will look like this:
                                        f(6)
                    f(5)                  |           f(4) &amp;lt;= retrieve stored answer
          f(4)        |         f(3)   &amp;lt;= retrieve stored answer
   f(3)     |  f(2)   |
f(2) | f(1) |
-In slowFib, the number of procedures is about 2^n, giving a time complexity of O(2^n)
-In fastFib, the number of procedures is 1+2(n-2) = 2n-3, giving a time complexity of O(n)
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>10 Essential React Interview Questions For Aspiring Frontend Developers</title>
      <dc:creator>Bryan C Guner</dc:creator>
      <pubDate>Fri, 10 Dec 2021 21:27:29 +0000</pubDate>
      <link>https://dev.to/bgoonz/10-essential-react-interview-questions-for-aspiring-frontend-developers-49ha</link>
      <guid>https://dev.to/bgoonz/10-essential-react-interview-questions-for-aspiring-frontend-developers-49ha</guid>
      <description>&lt;h1&gt;
  
  
  10 Essential React Interview Questions For Aspiring Frontend Developers
&lt;/h1&gt;

&lt;p&gt;Comprehensive React Cheatsheet included at the bottom of this article!&lt;/p&gt;




&lt;h3&gt;
  
  
  10 Essential React Interview Questions For Aspiring Frontend Developers
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Comprehensive React Cheatsheet included at the bottom of this article
&lt;/h4&gt;

&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://javascript.plainenglish.io/introduction-to-react-for-complete-beginners-8021738aa1ad" title="https://javascript.plainenglish.io/introduction-to-react-for-complete-beginners-8021738aa1ad"&gt;&lt;strong&gt;Introduction to React for Complete Beginners&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;All of the code examples below will be included a second time at the bottom of this article as an embedded gist.&lt;/em&gt;javascript.plainenglish.io&lt;/a&gt;&lt;a href="https://javascript.plainenglish.io/introduction-to-react-for-complete-beginners-8021738aa1ad"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bryanguner.medium.com/introductory-react-part-2-cda01615a186" title="https://bryanguner.medium.com/introductory-react-part-2-cda01615a186"&gt;&lt;strong&gt;Beginner’s Guide To React Part 2&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;As I learn to build web applications in React I will blog about it in this series in an attempt to capture the…&lt;/em&gt;bryanguner.medium.com&lt;/a&gt;&lt;a href="https://bryanguner.medium.com/introductory-react-part-2-cda01615a186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/bgoonz/React_Notes_V3" title="https://github.com/bgoonz/React_Notes_V3"&gt;&lt;strong&gt;bgoonz/React_Notes_V3&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;A JavaScript library for building user interfaces Declarative React makes it painless to create interactive UIs. Design…&lt;/em&gt;github.com&lt;/a&gt;&lt;a href="https://github.com/bgoonz/React_Notes_V3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reactjs.org/docs" title="https://reactjs.org/docs"&gt;&lt;strong&gt;Getting Started - React&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;A JavaScript library for building user interfaces&lt;/em&gt;reactjs.org&lt;/a&gt;&lt;a href="https://reactjs.org/docs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Also … here is my brand new blog site… built with react and a static site generator called GatsbyJS
&lt;/h3&gt;

&lt;h4&gt;
  
  
  It’s a work in progress
&lt;/h4&gt;

&lt;p&gt;&lt;a href="&amp;lt;&amp;lt;https://bgoonz-blog.netlify.app/&amp;gt;&amp;gt;%22%20class=%22markup--anchor%20markup--p-anchor%22&amp;gt;&amp;lt;a%20href="&gt;https://bgoonz-blog.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xvvVUrSu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1200/1%2At3UQh848ndt4rgr_fDToaw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xvvVUrSu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1200/1%2At3UQh848ndt4rgr_fDToaw.png" width="880" height="815"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---M-G5wNE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A39weCjnVdDf0Kuzj" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---M-G5wNE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2A39weCjnVdDf0Kuzj" alt="Photo by Ferenc Almasi on Unsplash" width="800" height="533"&gt;&lt;/a&gt;Photo by &lt;a href="https://unsplash.com/@flowforfrank?utm_source=medium&amp;amp;utm_medium=referral"&gt;Ferenc Almasi&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;### Beginning of the Article:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;span id="156e"&gt;Easy to learn&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="859a"&gt;HTML-like syntax allows templating and highly detailed documentation&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="5b3a"&gt;Supports server-side rendering&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="cb03"&gt;Easy migrating between different versions of React&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="7332"&gt;Uses JavaScript rather than framework-specific code&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;span id="e1f7"&gt;Poor documentation&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="db68"&gt;Limited to only view part of MVC&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="814a"&gt;New developers might see JSC as a barrier&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Where to Use React
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;span id="fa3e"&gt;For apps that have multiple events&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f46a"&gt;When your app development team excels in CSS, JavaScript and HTML&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="2d25"&gt;You want to create sharable components on your app&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="9729"&gt;When you need a personalized app solution&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Misconceptions about React
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://aglowiditsolutions.com/blog/react-vs-angular/"&gt;React is a framework&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://aglowiditsolutions.com/blog/react-vs-angular/"&gt;Many developers an&lt;/a&gt;d aspiring students misinterpret React to be a fully functional framework. It is because we often compare React with major frameworks such as Angular and Ember. This comparison is not to compare the best frameworks but to focus on the differences and similarities of React and Angular’s approach that makes their offerings worth studying. Angular works on &lt;strong&gt;the MVC model&lt;/strong&gt; to support the Model, View, and Controller layers of an app. React focuses only on the ‘V,’ which is the &lt;strong&gt;view layer&lt;/strong&gt; of an application and how to make handling it easier to integrate smoothly into a project.&lt;/p&gt;

&lt;h4&gt;
  
  
  React’s Virtual DOM is faster than DOM
&lt;/h4&gt;

&lt;p&gt;React uses a &lt;strong&gt;Virtual DOM&lt;/strong&gt;, which is essentially a tree of JavaScript objects representing the actual browser DOM. The advantage of using this for the developers is that they don’t manipulate the DOM directly as developers do with jQuery when they write React apps. Instead, they would tell React how they want the DOM to make changes to the state object and allow React to make the necessary updates to the browser DOM. This helps create a comprehensive development model for developers as they don’t need to track all DOM changes. They can modify the state object, and React would use its algorithms to understand what part of UI changed compared to the previous DOM. Using this information updates the actual browser DOM. Virtual DOM provides an excellent API for creating UI and minimizes the update count to be made on the browser DOM.&lt;/p&gt;

&lt;p&gt;However, it is &lt;strong&gt;not faster&lt;/strong&gt; than the actual DOM. You just read that it needs to pull extra strings to figure out what part of UI needs to be updated before actually performing those updates. Hence, Virtual DOM is beneficial for many things, but it &lt;strong&gt;&lt;em&gt;isn’t faster than DOM.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;1. Explain how React uses a tree data structure called the virtual DOM to model the DOM&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;The virtual DOM is a copy of the actual DOM tree. Updates in React are made to the virtual DOM. React uses a diffing algorithm to reconcile the changes and send the to the DOM to commit and paint.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Create virtual DOM nodes using JSX&lt;/strong&gt; To create a React virtual DOM node using JSX, define HTML syntax in a JavaScript file
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Here, the JavaScript hello variable is set to a React virtual DOM h1 element with the text “Hello World!”.&lt;/p&gt;

&lt;p&gt;You can also nest virtual DOM nodes in each other just like how you do it in HTML with the real DOM.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Use debugging tools to determine when a component is rendering&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kwpjMwUe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2Ajf3yl4GKDHpxmPJk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kwpjMwUe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2Ajf3yl4GKDHpxmPJk.gif" width="880" height="360"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KIfQlgdK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AhBOo6hfwhKwS5UDM.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KIfQlgdK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AhBOo6hfwhKwS5UDM.jpg" width="600" height="337"&gt;&lt;/a&gt;#### We use the React DevTools extension as an extension in our Browser DevTools to debug and view when a component is rendering&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Describe how JSX transforms into actual DOM nodes&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="358b"&gt;To transfer JSX into DOM nodes, we use the ReactDOM.render method. It takes a React virtual DOM node’s changes allows Babel to transpile it and sends the JS changes to commit to the DOM.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Use the&lt;/strong&gt; &lt;code&gt;ReactDOM.render&lt;/code&gt; &lt;strong&gt;method to have React render your virtual DOM nodes under an actual DOM node&lt;/strong&gt;
&lt;/h3&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;6. Attach an event listener to an actual DOM node using a virtual node&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The virtual DOM (VDOM) is a programming concept where an ideal, or “virtual”, representation of a UI is kept in memory and synced with the “real” DOM by a library such as ReactDOM. This process is called &lt;a href="https://reactjs.org/docs/reconciliation.html"&gt;reconciliation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This approach enables the declarative API of React: You tell React what state you want the UI to be in, and it makes sure the DOM matches that state. This abstracts out the attribute manipulation, event handling, and manual DOM updating that you would otherwise have to use to build your app.&lt;/p&gt;

&lt;p&gt;Since “virtual DOM” is more of a pattern than a specific technology, people sometimes say it to mean different things. In React world, the term “virtual DOM” is usually associated with &lt;a href="https://reactjs.org/docs/rendering-elements.html"&gt;React elements&lt;/a&gt; since they are the objects representing the user interface. React, however, also uses internal objects called “fibers” to hold additional information about the component tree. They may also be considered a part of “virtual DOM” implementation in React.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the Shadow DOM the same as the Virtual DOM?
&lt;/h3&gt;

&lt;p&gt;No, they are different. The Shadow DOM is a browser technology designed primarily for scoping variables and CSS in web components. The virtual DOM is a concept implemented by libraries in JavaScript on top of browser APIs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="8534"&gt;To add an event listener to an element, define a method to handle the event and associate that method with the element event you want to listen for:&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;7. Use&lt;/strong&gt; &lt;code&gt;create-react-app&lt;/code&gt; &lt;strong&gt;to initialize a new React app and import required dependencies&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="6d60"&gt;Create the default create-react-application by typing in our terminal&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://www.freecodecamp.org/news/npm-vs-npx-whats-the-difference/"&gt;Explanation of npm vs npx from Free Code Camp:&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;npm&lt;/strong&gt; (node package manager) is the dependency/package manager you get out of the box when you install Node.js. It provides a way for developers to install packages both globally and locally.&lt;/p&gt;

&lt;p&gt;Sometimes you might want to take a look at a specific package and try out some commands. But you cannot do that without installing the dependencies in your local &lt;code&gt;node_modules&lt;/code&gt; folder.&lt;/p&gt;

&lt;h3&gt;
  
  
  npm the package manager
&lt;/h3&gt;

&lt;p&gt;npm is a couple of things. First and foremost, it is an online repository for the publishing of open-source Node.js projects.&lt;/p&gt;

&lt;p&gt;Second, it is a CLI tool that aids you to install those packages and manage their versions and dependencies. There are hundreds of thousands of Node.js libraries and applications on npm and many more are added every day.&lt;/p&gt;

&lt;p&gt;npm by itself doesn’t run any packages. If you want to run a package using npm, you must specify that package in your &lt;code&gt;package.json&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;When executables are installed via npm packages, npm creates links to them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="7798"&gt;&lt;strong&gt;local&lt;/strong&gt; installs have links created at the &lt;code&gt;./node_modules/.bin/&lt;/code&gt; directory&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="a534"&gt;&lt;strong&gt;global&lt;/strong&gt; installs have links created from the global &lt;code&gt;bin/&lt;/code&gt; directory (for example: &lt;code&gt;/usr/local/bin&lt;/code&gt; on Linux or at &lt;code&gt;%AppData%/npm&lt;/code&gt; on Windows)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To execute a package with npm you either have to type the local path, like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./node_modules/.bin/your-package
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;or you can run a locally installed package by adding it into your &lt;code&gt;package.json&lt;/code&gt; file in the scripts section, like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "your-application",
  "version": "1.0.0",
  "scripts": {
    "your-package": "your-package"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Then you can run the script using &lt;code&gt;npm run&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run your-package
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You can see that running a package with plain npm requires quite a bit of ceremony.&lt;/p&gt;

&lt;p&gt;Fortunately, this is where &lt;strong&gt;npx&lt;/strong&gt; comes in handy.&lt;/p&gt;

&lt;h3&gt;
  
  
  npx the package runner
&lt;/h3&gt;

&lt;p&gt;Since npm version &lt;a href="https://github.com/npm/npm/releases/tag/v5.2.0"&gt;5.2.0&lt;/a&gt; npx is pre-bundled with npm. So it’s pretty much a standard nowadays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;npx&lt;/strong&gt; is also a CLI tool whose purpose is to make it easy to install and manage dependencies hosted in the npm registry.&lt;/p&gt;

&lt;p&gt;It’s now very easy to run any sort of Node.js-based executable that you would normally install via npm.&lt;/p&gt;

&lt;p&gt;You can run the following command to see if it is already installed for your current npm version:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;which npx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If it’s not, you can install it like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g npx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Once you make sure you have it installed, let’s see a few of the use cases that make &lt;strong&gt;npx&lt;/strong&gt; extremely helpful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Run a locally installed package easily
&lt;/h3&gt;

&lt;p&gt;If you wish to execute a locally installed package, all you need to do is type:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx your-package
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;npx will check whether &lt;code&gt;&amp;lt;command&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;package&amp;gt;&lt;/code&gt; exists in &lt;code&gt;$PATH&lt;/code&gt;, or in the local project binaries, and if so it will execute it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Execute packages that are not previously installed
&lt;/h3&gt;

&lt;p&gt;Another major advantage is the ability to execute a package that wasn’t previously installed.&lt;/p&gt;

&lt;p&gt;Sometimes you just want to use some CLI tools but you don’t want to install them globally just to test them out. This means you can save some disk space and simply run them only when you need them. This also means your global variables will be less polluted.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Now, where were we?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;npx create-react-app &amp;lt;name of app&amp;gt; --use-npm&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="e1cb"&gt;npx gives us the latest version. &lt;code&gt;--use-npm&lt;/code&gt; just means to use npm instead of yarn or some other package manager&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;8. Pass props into a React component&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="9111"&gt;&lt;code&gt;props&lt;/code&gt; is an object that gets passed down from the parent component to the child component. The values can be of any data structure including a function (which is an object)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="7a12"&gt;You can also &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals"&gt;interpolate values&lt;/a&gt; into JSX.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f405"&gt;Set a variable to the string, “world”, and replace the string of “world” in the NavLinks JSX element with the variable wrapped in curly braces:&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Accessing props:&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To access our props object in another component we pass it the props argument and React will invoke the functional component with the props object.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reminder
&lt;/h3&gt;

&lt;p&gt;Conceptually, components are like JavaScript functions. They accept arbitrary inputs (called “props”) and return React elements describing what should appear on the screen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Function and Class Components
&lt;/h3&gt;

&lt;p&gt;The simplest way to define a component is to write a JavaScript function:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function Welcome(props) {
  return &amp;lt;h1&amp;gt;Hello, {props.name}&amp;lt;/h1&amp;gt;;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This function is a valid React component because it accepts a single “props” (which stands for properties) object argument with data and returns a React element. We call such components “function components” because they are literally JavaScript functions.&lt;/p&gt;

&lt;p&gt;You can also use an &lt;a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes"&gt;ES6 class&lt;/a&gt; to define a component:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Welcome extends React.Component {
  render() {
    return &amp;lt;h1&amp;gt;Hello, {this.props.name}&amp;lt;/h1&amp;gt;;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The above two components are equivalent from React’s point of view.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="99d5"&gt;You can pass down &lt;strong&gt;as many props keys as you want&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;9. Destructure props&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;You can destructure the props object in the function component’s parameter.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;10. Create routes using components from the react-router-dom package&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;a. Import the react-router-dom package:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i react-router-dom
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;In your index.js:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;&lt;span id="46f3"&gt;Above you import your BrowserRouter with which you can wrap your entire route hierarchy. This makes routing information from React Router available to all its descendent components.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f675"&gt;Then in the component of your choosing, usually top tier such as App.js, you can create your routes using the Route and Switch Components&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Discover More
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://bgoonz-blog.netlify.app/" title="https://bgoonz-blog.netlify.app/"&gt;&lt;strong&gt;Web-Dev-Hub&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Memoization, Tabulation, and Sorting Algorithms by Example Why is looking at runtime not a reliable method of…&lt;/em&gt;bgoonz-blog.netlify.app&lt;/a&gt;&lt;a href="https://bgoonz-blog.netlify.app/"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  REACT CHEAT SHEET
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;More content at&lt;/em&gt; &lt;a href="http://plainenglish.io/"&gt;&lt;em&gt;plainenglish.io&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By &lt;a href="https://medium.com/@bryanguner"&gt;Bryan Guner&lt;/a&gt; on &lt;a href="https://medium.com/p/cbaafb31765d"&gt;June 11, 2021&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@bryanguner/react-md-cbaafb31765d"&gt;Canonical link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Exported from &lt;a href="https://medium.com"&gt;Medium&lt;/a&gt; on August 31, 2021.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Deploy React App To Heroku Using Postgres &amp; Express</title>
      <dc:creator>Bryan C Guner</dc:creator>
      <pubDate>Fri, 10 Dec 2021 21:26:02 +0000</pubDate>
      <link>https://dev.to/bgoonz/deploy-react-app-to-heroku-using-postgres-express-2fmd</link>
      <guid>https://dev.to/bgoonz/deploy-react-app-to-heroku-using-postgres-express-2fmd</guid>
      <description>&lt;h1&gt;
  
  
  Deploy React App To Heroku Using Postgres &amp;amp; Express
&lt;/h1&gt;

&lt;p&gt;Heroku is an web application that makes deploying applications easy for a beginner.&lt;/p&gt;




&lt;h3&gt;
  
  
  Deploy React App To Heroku Using Postgres &amp;amp; Express
&lt;/h3&gt;

&lt;p&gt;Heroku is an web application that makes deploying applications easy for a beginner.&lt;/p&gt;

&lt;p&gt;Before you begin deploying, make sure to remove any &lt;code&gt;console.log&lt;/code&gt;'s or &lt;code&gt;debugger&lt;/code&gt;'s in any production code. You can search your entire project folder if you are using them anywhere.&lt;/p&gt;

&lt;p&gt;You will set up Heroku to run on a production, not development, version of your application. When a Node.js application like yours is pushed up to Heroku, it is identified as a Node.js application because of the &lt;code&gt;package.json&lt;/code&gt; file. It runs &lt;code&gt;npm install&lt;/code&gt; automatically. Then, if there is a &lt;code&gt;heroku-postbuild&lt;/code&gt; script in the &lt;code&gt;package.json&lt;/code&gt; file, it will run that script. Afterwards, it will automatically run &lt;code&gt;npm start&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In the following phases, you will configure your application to work in production, not just in development, and configure the &lt;code&gt;package.json&lt;/code&gt; scripts for &lt;code&gt;install&lt;/code&gt;, &lt;code&gt;heroku-postbuild&lt;/code&gt; and &lt;code&gt;start&lt;/code&gt; scripts to install, build your React application, and start the Express production server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 1: Heroku Connection
&lt;/h3&gt;

&lt;p&gt;If you haven’t created a Heroku account yet, create one &lt;a href="https://signup.heroku.com/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Add a new application in your &lt;a href="https://dashboard.heroku.com/"&gt;Heroku dashboard&lt;/a&gt; named whatever you want. Under the “Resources” tab in your new application, click “Find more add-ons” and add the “Heroku Postgres” add-on with the free Hobby Dev setting.&lt;/p&gt;

&lt;p&gt;In your terminal, install the &lt;a href="https://devcenter.heroku.com/articles/heroku-command-line"&gt;Heroku CLI&lt;/a&gt;. Afterwards, login to Heroku in your terminal by running the following:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Add Heroku as a remote to your project’s git repository in the following command and replace &lt;code&gt;&amp;lt;name-of-Heroku-app&amp;gt;&lt;/code&gt; with the name of the application you created in the &lt;a href="https://dashboard.heroku.com/"&gt;Heroku dashboard&lt;/a&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku git:remote -a &amp;lt;name-of-Heroku-app&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Next, you will set up your Express + React application to be deployable to Heroku.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 2: Setting up your Express + React application
&lt;/h3&gt;

&lt;p&gt;Right now, your React application is on a different localhost port than your Express application. However, since your React application only consists of static files that don’t need to bundled continuously with changes in production, your Express application can serve the React assets in production too. These static files live in the &lt;code&gt;frontend/build&lt;/code&gt; folder after running &lt;code&gt;npm run build&lt;/code&gt; in the &lt;code&gt;frontend&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;Add the following changes into your &lt;code&gt;backend/routes.index.js&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;At the root route, serve the React application’s static &lt;code&gt;index.html&lt;/code&gt; file along with &lt;code&gt;XSRF-TOKEN&lt;/code&gt; cookie. Then serve up all the React application's static files using the &lt;code&gt;express.static&lt;/code&gt; middleware. Serve the &lt;code&gt;index.html&lt;/code&gt; and set the &lt;code&gt;XSRF-TOKEN&lt;/code&gt; cookie again on all routes that don't start in &lt;code&gt;/api&lt;/code&gt;. You should already have this set up in &lt;code&gt;backend/routes/index.js&lt;/code&gt; which should now look like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// backend/routes/index.js
const express = require('express');
const router = express.Router();
const apiRouter = require('./api');

router.use('/api', apiRouter);

// Static routes
// Serve React build files in production
if (process.env.NODE_ENV === 'production') {
  const path = require('path');
  // Serve the frontend's index.html file at the root route
  router.get('/', (req, res) =&amp;gt; {
    res.cookie('XSRF-TOKEN', req.csrfToken());
    res.sendFile(
      path.resolve(__dirname, '../../frontend', 'build', 'index.html')
    );
  });

  // Serve the static assets in the frontend's build folder
  router.use(express.static(path.resolve("../frontend/build")));

  // Serve the frontend's index.html file at all other routes NOT starting with /api
  router.get(/^(?!\/?api).*/, (req, res) =&amp;gt; {
    res.cookie('XSRF-TOKEN', req.csrfToken());
    res.sendFile(
      path.resolve(__dirname, '../../frontend', 'build', 'index.html')
    );
  });
}

// Add a XSRF-TOKEN cookie in development
if (process.env.NODE_ENV !== 'production') {
  router.get('/api/csrf/restore', (req, res) =&amp;gt; {
    res.cookie('XSRF-TOKEN', req.csrfToken());
    res.status(201).json({});
  });
}

module.exports = router;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Your Express backend’s &lt;code&gt;package.json&lt;/code&gt; should include scripts to run the &lt;code&gt;sequelize&lt;/code&gt; CLI commands.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;backend/package.json&lt;/code&gt;'s scripts should now look like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
    "sequelize": "sequelize",
    "sequelize-cli": "sequelize-cli",
    "start": "per-env",
    "start:development": "nodemon -r dotenv/config ./bin/www",
    "start:production": "node ./bin/www"
  },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Initialize a &lt;code&gt;package.json&lt;/code&gt; file at the very root of your project directory (outside of both the &lt;code&gt;backend&lt;/code&gt; and &lt;code&gt;frontend&lt;/code&gt; folders). The scripts defined in this &lt;code&gt;package.json&lt;/code&gt; file will be run by Heroku, not the scripts defined in the &lt;code&gt;backend/package.json&lt;/code&gt; or the &lt;code&gt;frontend/package.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When Heroku runs &lt;code&gt;npm install&lt;/code&gt;, it should install packages for both the &lt;code&gt;backend&lt;/code&gt; and the &lt;code&gt;frontend&lt;/code&gt;. Overwrite the &lt;code&gt;install&lt;/code&gt; script in the root &lt;code&gt;package.json&lt;/code&gt; with:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm --prefix backend install backend &amp;amp;&amp;amp; npm --prefix frontend install frontend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This will run &lt;code&gt;npm install&lt;/code&gt; in the &lt;code&gt;backend&lt;/code&gt; folder then run &lt;code&gt;npm install&lt;/code&gt; in the &lt;code&gt;frontend&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;Next, define a &lt;code&gt;heroku-postbuild&lt;/code&gt; script that will run the &lt;code&gt;npm run build&lt;/code&gt; command in the &lt;code&gt;frontend&lt;/code&gt; folder. Remember, Heroku will automatically run this script after running &lt;code&gt;npm install&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Define a &lt;code&gt;sequelize&lt;/code&gt; script that will run &lt;code&gt;npm run sequelize&lt;/code&gt; in the &lt;code&gt;backend&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;Finally, define a &lt;code&gt;start&lt;/code&gt; that will run &lt;code&gt;npm start&lt;/code&gt; in the `backend folder.&lt;/p&gt;

&lt;p&gt;The root &lt;code&gt;package.json&lt;/code&gt;'s scripts should look like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
    "heroku-postbuild": "npm run build --prefix frontend",
    "install": "npm --prefix backend install backend &amp;amp;&amp;amp; npm --prefix frontend install frontend",
    "dev:backend": "npm install --prefix backend start",
    "dev:frontend": "npm install --prefix frontend start",
    "sequelize": "npm run --prefix backend sequelize",
    "sequelize-cli": "npm run --prefix backend sequelize-cli",
    "start": "npm start --prefix backend"
  },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;dev:backend&lt;/code&gt; and &lt;code&gt;dev:frontend&lt;/code&gt; scripts are optional and will not be used for Heroku.&lt;/p&gt;

&lt;p&gt;Finally, commit your changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 3: Deploy to Heroku
&lt;/h3&gt;

&lt;p&gt;Once you’re finished setting this up, navigate to your application’s Heroku dashboard. Under “Settings” there is a section for “Config Vars”. Click the &lt;code&gt;Reveal Config Vars&lt;/code&gt; button to see all your production environment variables. You should have a &lt;code&gt;DATABASE_URL&lt;/code&gt; environment variable already from the Heroku Postgres add-on.&lt;/p&gt;

&lt;p&gt;Add environment variables for &lt;code&gt;JWT_EXPIRES_IN&lt;/code&gt; and &lt;code&gt;JWT_SECRET&lt;/code&gt; and any other environment variables you need for production.&lt;/p&gt;

&lt;p&gt;You can also set environment variables through the Heroku CLI you installed earlier in your terminal. See the docs for &lt;a href="https://devcenter.heroku.com/articles/config-vars"&gt;Setting Heroku Config Variables&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Push your project to Heroku. Heroku only allows the &lt;code&gt;master&lt;/code&gt; branch to be pushed. But, you can alias your branch to be named &lt;code&gt;master&lt;/code&gt; when pushing to Heroku. For example, to push a branch called &lt;code&gt;login-branch&lt;/code&gt; to &lt;code&gt;master&lt;/code&gt; run:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push heroku login-branch:master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you do want to push the &lt;code&gt;master&lt;/code&gt; branch, just run:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push heroku master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You may want to make two applications on Heroku, the &lt;code&gt;master&lt;/code&gt; branch site that should have working code only. And your &lt;code&gt;staging&lt;/code&gt; site that you can use to test your work in progress code.&lt;/p&gt;

&lt;p&gt;Now you need to migrate and seed your production database.&lt;/p&gt;

&lt;p&gt;Using the Heroku CLI, you can run commands inside of your production application just like in development using the &lt;code&gt;heroku run&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;For example to migrate the production database, run:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku run npm run sequelize db:migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;To seed the production database, run:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku run npm run sequelize db:seed:all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Note: You can interact with your database this way as you’d like, but beware that &lt;code&gt;db:drop&lt;/code&gt; cannot be run in the Heroku environment. If you want to drop and create the database, you need to remove and add back the "Heroku Postgres" add-on.&lt;/p&gt;

&lt;p&gt;Another way to interact with the production application is by opening a bash shell through your terminal by running:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In the opened shell, you can run things like &lt;code&gt;npm run sequelize db:migrate&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Open your deployed site and check to see if you successfully deployed your Express + React application to Heroku!&lt;/p&gt;

&lt;p&gt;If you see an &lt;code&gt;Application Error&lt;/code&gt; or are experiencing different behavior than what you see in your local environment, check the logs by running:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you want to open a connection to the logs to continuously output to your terminal, then run:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku logs --tail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The logs may clue you into why you are experiencing errors or different behavior.&lt;/p&gt;

&lt;h4&gt;
  
  
  If you found this guide helpful feel free to checkout my github/gists where I host similar content
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/bgoonz"&gt;bgoonz’s gists · GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/bgoonz" title="https://github.com/bgoonz"&gt;&lt;strong&gt;bgoonz — Overview&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Web Developer, Electrical Engineer JavaScript | CSS | Bootstrap | Python | React | Node.js | Express | Sequelize…&lt;/em&gt;github.com&lt;/a&gt;&lt;a href="https://github.com/bgoonz"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternate Instructions
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Deploy MERN App To Heroku
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Source: &lt;a href="https://dev.to/stlnick/how-to-deploy-a-full-stack-mern-app-with-heroku-netlify-ncb"&gt;Article&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Lctf5T0K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oowe8z6i9e44xest592e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lctf5T0K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oowe8z6i9e44xest592e.png" alt="Image description" width="880" height="733"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Adding CSS To Your HTML</title>
      <dc:creator>Bryan C Guner</dc:creator>
      <pubDate>Fri, 10 Dec 2021 21:24:47 +0000</pubDate>
      <link>https://dev.to/bgoonz/adding-css-to-your-html-4j94</link>
      <guid>https://dev.to/bgoonz/adding-css-to-your-html-4j94</guid>
      <description>&lt;h1&gt;
  
  
  Adding CSS To Your HTML
&lt;/h1&gt;

&lt;p&gt;For beginners … very picture heavy since CSS is such a visual discipline!&lt;/p&gt;




&lt;h3&gt;
  
  
  Adding CSS To Your HTML
&lt;/h3&gt;

&lt;h4&gt;
  
  
  For beginners … very picture heavy since CSS is such a visual discipline
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dw68DA8C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2A3hnCIyXstRSHgYO5-z-51g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dw68DA8C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2A3hnCIyXstRSHgYO5-z-51g.png" width="800" height="591"&gt;&lt;/a&gt;### Getting CSS Into Your HTML&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="36f1"&gt;&lt;em&gt;To connect your CSS sheet to your HTML page, use the link tag like so.&lt;/em&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f743"&gt;Many developers use External pre-written CSS stylesheets for consistent design.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="af3f"&gt;You can connect multiple stylesheets.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  CSS Selectors
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="2d5b"&gt;&lt;code&gt;CSS Selector&lt;/code&gt; : Applies styles to a specific DOM element(s), there are various types:&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="29cd"&gt;&lt;code&gt;Type Selectors&lt;/code&gt; : Matches by node name.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--04fM4cDd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AGOzh0U_yFtsOo9Hq" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--04fM4cDd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AGOzh0U_yFtsOo9Hq" width="451" height="179"&gt;&lt;/a&gt;-   &lt;span id="e624"&gt;&lt;code&gt;Class Selectors&lt;/code&gt; : Matches by class name.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IGq-p_JT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AWMQXdyBA2MeUYoVvY0Kjew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IGq-p_JT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AWMQXdyBA2MeUYoVvY0Kjew.png" width="800" height="486"&gt;&lt;/a&gt;-   &lt;span id="8c31"&gt;&lt;code&gt;ID Selectors&lt;/code&gt; : Matches by ID name.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qee4hjzG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AuyRa6tM8Jlg648Rl" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qee4hjzG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AuyRa6tM8Jlg648Rl" width="800" height="774"&gt;&lt;/a&gt;-   &lt;span id="d011"&gt;&lt;code&gt;Universal Selectors&lt;/code&gt; : Selects all HTML elements on a page.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nQRJ4s5r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ALfKazZMelOZrcOsp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nQRJ4s5r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ALfKazZMelOZrcOsp.jpg" width="800" height="442"&gt;&lt;/a&gt;-   &lt;span id="e143"&gt;&lt;code&gt;Attribute Selectors&lt;/code&gt; : Matches elements based on the prescence or value of a given attribute. (i.e. a[title] will match all a elements with a title attribute)&lt;/span&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* Type selector */
div {
  background-color: #000000;
}

/* Class selector */
.active {
  color: #ffffff;
}

/* ID selector */
#list-1 {
  border: 1px solid gray;
}

/* Universal selector */
* {
  padding: 10px;
}

/* Attribute selector */
a[title] {
  font-size: 2em;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Class Selectors&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="45c5"&gt;Used to select all elements of a certain class denoted with a &lt;code&gt;.[class name]&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="f9e4"&gt;You can assign multiple classes to a DOM element by separating them with a space.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Compound Class Selectors&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B1Yhbq4i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AiIOiP-ML_k6g0yTxZQyQ4A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B1Yhbq4i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AiIOiP-ML_k6g0yTxZQyQ4A.png" width="800" height="617"&gt;&lt;/a&gt;-   &lt;span id="bcf1"&gt;To get around accidentally selecting elements with multiple classes beyond what we want to grab we can chain dots.&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;span id="a54c"&gt;TO use a compound class selector just append the classes together when referencing them in the CSS.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;span id="e8ca"&gt;i.e. .box.yellow will select only the first element.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span id="34a4"&gt;&lt;strong&gt;KEEP IN MIND&lt;/strong&gt; that if you do include a space it will make the selector into a &lt;em&gt;descendant selector&lt;/em&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;h1#heading,&lt;br&gt;
h2.subheading {&lt;br&gt;
  font-style: italic;&lt;br&gt;
}&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;span id="b382"&gt;When we want to target all &lt;code&gt;h1&lt;/code&gt; tags with the id of &lt;code&gt;heading&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;CSS Combinators&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span id="383a"&gt;CSS Combinators are used to combine other selectors into more complex or targeted selectors — they are very powerful!&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="2805"&gt;Be careful not to use too many of them as they will make your CSS far too complex.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  &lt;code&gt;Descendant Selectors&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bXaaGwHE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AYPkGcUc4gf2WtJYdf6Yvmg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bXaaGwHE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AYPkGcUc4gf2WtJYdf6Yvmg.png" width="388" height="893"&gt;&lt;/a&gt;-   &lt;span id="5e1b"&gt;Separated by a space.&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="5d0b"&gt;Selects all descendants of a parent container.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  &lt;code&gt;Direct Child Selectors&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1o0xSsSX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ASByLFbio2RGGnFHj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1o0xSsSX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2ASByLFbio2RGGnFHj.jpg" width="800" height="450"&gt;&lt;/a&gt;-   &lt;span id="47ef"&gt;Indicated with a &lt;code&gt;&amp;amp;gt;&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="eff3"&gt;Different from descendants because it only affects the direct children of an element.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  CSS
&lt;/h4&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.menu &amp;amp;gt; .is-active { background-color: #ffe0b2; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  HTML
&lt;/h4&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Belka  Strelka     Laika  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Basic Python Notes</title>
      <dc:creator>Bryan C Guner</dc:creator>
      <pubDate>Fri, 10 Dec 2021 21:22:45 +0000</pubDate>
      <link>https://dev.to/bgoonz/basic-python-notes-1l08</link>
      <guid>https://dev.to/bgoonz/basic-python-notes-1l08</guid>
      <description>&lt;h1&gt;
  
  
  Basics of Python
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Hello, World'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"It's raining!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'''
Welcome to Python
Have a great day!!!
'''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Arithmetic in Python
&lt;/h4&gt;

&lt;h4&gt;
  
  
  - numeric types: integer and float
&lt;/h4&gt;

&lt;h4&gt;
  
  
  - add, subtract, multiply =&amp;gt; notice numeric types of results
&lt;/h4&gt;

&lt;h4&gt;
  
  
  - powers, division
&lt;/h4&gt;

&lt;h4&gt;
  
  
  - integer division &amp;amp; modulo teaming up
&lt;/h4&gt;

&lt;h4&gt;
  
  
  - warning: watch for rounding errors
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;    &lt;span class="c1"&gt;# integer
&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;17.0&lt;/span&gt;  &lt;span class="c1"&gt;# float
&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# integer division
&lt;/span&gt; &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# modulo
&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'The result is &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; remainder &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

 &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;
 &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;17.6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  rounding errors due to floats
&lt;/h3&gt;

&lt;h3&gt;
  
  
  we can cast to int, round(num, digits), etc.
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
 &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Casting will truncate (floor) our float
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;17.2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;17.9&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Simple Input and Formatted Printing
&lt;/h4&gt;

&lt;h4&gt;
  
  
  - Prompt for input()
&lt;/h4&gt;

&lt;h4&gt;
  
  
  - Formatted printing 4 ways
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'What is your name?&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Hi, '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;'.'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Hi, %s.'&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Hi, {fname} {lname}.'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lname&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Doe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fname&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"John"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'Hi, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Duck Typing
&lt;/h2&gt;

&lt;h4&gt;
  
  
  - len()
&lt;/h4&gt;

&lt;h4&gt;
  
  
  - try ... except
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; has no length'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# More complex try blocks
&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'False'&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; has no length'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;ZeroDivisionError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'Cannot divide by zero! Error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'Uh oh, unknown error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exc_info&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'No errors! Nice!'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Thanks for using the program!'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Arithmetic with Strings
&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"a"&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"b"&lt;/span&gt;
&lt;span class="n"&gt;an&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"an"&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"$1"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;",000"&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Length of a string
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; 9
&lt;/span&gt;
&lt;span class="c1"&gt;# Indexing into strings
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; S
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; h
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; i
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; e
&lt;/span&gt;
&lt;span class="c1"&gt;# Indexing with ranges
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;  &lt;span class="c1"&gt;# =&amp;gt; pag
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; hett
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;  &lt;span class="c1"&gt;# =&amp;gt; (empty string)
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;  &lt;span class="c1"&gt;# =&amp;gt; Spag
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; Spaghett
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:])&lt;/span&gt;  &lt;span class="c1"&gt;# =&amp;gt; paghetti
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:])&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; etti
&lt;/span&gt;
&lt;span class="c1"&gt;# Using invalid indices
# print("Spaghetti"[15])    # =&amp;gt; IndexError: string index out of range
# print("Spaghetti"[-15])    # =&amp;gt; IndexError: string index out of range
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; Spaghetti
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:])&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; (empty string)
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:])&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; Spaghetti
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; (empty string)
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; (empty string)
&lt;/span&gt;
&lt;span class="c1"&gt;# .index() function
# Returns the first index where the character is found
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"t"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; 6
# print("Spaghetti".index("s"))    # =&amp;gt; ValueError: substring not found
&lt;/span&gt;
&lt;span class="c1"&gt;# .count() function
# Returns the number of times the substring is found
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; 1
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"t"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; 2
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spaghetti"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"s"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; 0
&lt;/span&gt;
&lt;span class="c1"&gt;# .split() function
# Returns a list (array) of substrings, split on the character passed
# If no character is passed, a space is used to split on
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello World"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; ["Hello", "World"]
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"i-am-a-dog"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"-"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; ["i", "am", "a", "dog"]
&lt;/span&gt;
&lt;span class="c1"&gt;# .join() function
# Works in reverse from what you may be used to with JavaScript
# Called on a string that should be used to join each substring from the passed list
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s"&gt;"Hello"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"World"&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; "Hello World"
# ["Hello", "World"].join(" ") JavaScript
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"-"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s"&gt;"i"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"am"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"dog"&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;    &lt;span class="c1"&gt;# =&amp;gt; "i-am-a-dog"
&lt;/span&gt;
&lt;span class="c1"&gt;# .upper() and .lower() transformation functions
# These functions do not mutate
&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'Hello'&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Some testing methods
# islower()
# isupper()
# startswith("substring")
# endswith("substring")
# isalpha() - only letters
# isalnum() - letters and numbers
# isdecimal() - only numbers
# isspace() - only whitespace
# istitle() - only title-cased letters (does not account for special words like 'a')
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Once Upon A Time'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;istitle&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;  &lt;span class="c1"&gt;# =&amp;gt; True
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Once Upon a Time'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;istitle&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;  &lt;span class="c1"&gt;# =&amp;gt; False
# Assignment Operators in Python
# - Increment (no postfix/prefix)
# - Powers and Integer division
# - Big Numbers
# - Stopping a runaway process (control+c)
&lt;/span&gt;
&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="c1"&gt;# i++ does not exist in Python, we have to use i += 1
&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; 2
&lt;/span&gt;
&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; 6
&lt;/span&gt;
&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;**=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; 36
&lt;/span&gt;
&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;//=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; 3
&lt;/span&gt;
&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; 3 followed by 200 0s (all written out)
&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; 3e+200 (floats are written in scientific notation)
&lt;/span&gt;
&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;**=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# runaway process! control+c triggers a KeyboardInterrupt to stop it
&lt;/span&gt;
&lt;span class="c1"&gt;# Meaning of Truth in Python
# - numeric types equivalent, but not strings
# - conditionals (if, elif, else)
# - truth equivalence
&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;
&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;

&lt;span class="c1"&gt;# print(a == b)
# print(a == c)
# print(b == c)
&lt;/span&gt;
&lt;span class="c1"&gt;# if (a == c):
#     print("match")
# elif (a == b):
#     print("a matches b")
# else:
#     print("not a match")
&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="c1"&gt;# Falsy Values:
# 0, 0.0, 0j (complex number)
# ''
# False
# None
# []
# ()
# {}
# set()
# range(0)
&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; is true'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; is false'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Logical Operators
# We use the keywords 'and', 'or', and 'not' in Python instead of &amp;amp;&amp;amp;, ||, and !
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; False
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; True
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; True
&lt;/span&gt;
&lt;span class="c1"&gt;# Grouping Conditions
# Parentheses can group our conditions, just like JavaScript
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; False
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; True
&lt;/span&gt;
&lt;span class="c1"&gt;# Short Circuiting
# If we can already determine the overall outcome of a compound conditional
# Python will not bother evaluating the rest of the statement
# False and (anything else) is always False, so the print is not evaluated
&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"not printed"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Cannot determine overall value so we have to evaluate the right side
&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"printed #1"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Cannot determine overall value so we have to evaluate the right side
&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"printed #2"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# True or (anything else) is always True, so the print is not evaluated
&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"not printed"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# JavaScript use case of short circuiting
# const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
# While loops follow a very similar structure to JavaScript
&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. Hello, world.'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="c1"&gt;# The 'continue' keyword goes to the next loop
# The 'break' keyword exits out of the loop completely
&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. Hello, world.'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="k"&gt;continue&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"You've printed 5 times. Goodbye."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;break&lt;/span&gt;

&lt;span class="c1"&gt;# Identity vs. Equality
# - is vs. ==
# - working with literals
# - isinstance()
&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;
&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# d = 100000000000000000000000000000000
&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Make an xor function
# Truth table
# | left  | right | Result |
# |-------|-------|--------|
# | True  | True  | False  |
# | True  | False | True   |
# | False | True  | True   |
# | False | False | False  |
# def xor(left, right):
#   return left != right
&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;


&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; False
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; True
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; True
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# &amp;gt; False
&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;print_powers_of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;


&lt;span class="c1"&gt;# We are not hoisting the function declaration, we need to invoke after declared
&lt;/span&gt;&lt;span class="n"&gt;print_powers_of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;print_powers_of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;print_powers_of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;print_powers_of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;print_powers_of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;greeting_maker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;salutation&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;salutation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;greeting&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;salutation&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;greeting&lt;/span&gt;
&lt;span class="c1"&gt;# print(salutation) # Error, salutation is not defined at this scope
&lt;/span&gt;

&lt;span class="n"&gt;hello&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;greeting_maker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;hiya&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;greeting_maker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hiya"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Monica"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Raja"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hiya&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Raul"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hiya&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Tariq"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oxgd7r73mtx2q835j85g.jpg)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>examples</category>
    </item>
    <item>
      <title>Intro To The Concepts Behind React</title>
      <dc:creator>Bryan C Guner</dc:creator>
      <pubDate>Sat, 30 Oct 2021 10:40:30 +0000</pubDate>
      <link>https://dev.to/bgoonz/intro-to-the-concepts-behind-react-l8k</link>
      <guid>https://dev.to/bgoonz/intro-to-the-concepts-behind-react-l8k</guid>
      <description>&lt;h1&gt;
  
  
  A Basic Component
&lt;/h1&gt;

&lt;p&gt;The key abstraction that React provides is that of a component. To reiterate, a component is some thing that is being rendered in the browser. It could be a button, a form with a bunch of fields in it, a navigation bar at the top of the page, a single input field, etc. Any of these could be its own component. React doesn't place any restrictions on how large or small a component can be. You &lt;em&gt;could&lt;/em&gt; have an entire static site encapsulated in a single React component, but that at that point you may as well not be using React. So the first thing to remember about a component is that a component must &lt;em&gt;render&lt;/em&gt; something. If nothing is being rendered from a component, then React will throw an error. &lt;/p&gt;

&lt;p&gt;Let's write the most basic of components we can possibly write. Inside of &lt;code&gt;BasicComponent.js&lt;/code&gt;, first import React at the top of the file. Our most basic of &lt;br&gt;
components looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;BasicComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Hello&lt;/span&gt; &lt;span class="nx"&gt;World&lt;/span&gt;&lt;span class="o"&gt;!&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;BasicComponent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a component that simply returns a div tag with the words Hello World! inside. The last line simply exports our component so that it can be imported&lt;br&gt;
by another file. &lt;/p&gt;

&lt;p&gt;Notice that this component looks exactly like an anonymous arrow function that we've named &lt;code&gt;BasicComponent&lt;/code&gt;. In fact, that is literally what this is. Nothing&lt;br&gt;
more, nothing less. The arrow function then is simply returning the div tag. When a component is written as a function like this one is, it is called a&lt;br&gt;
&lt;em&gt;functional&lt;/em&gt; component. &lt;/p&gt;

&lt;p&gt;While a component can of course get a lot more complicated than this, fundamentally, all a component does is render some HTML. &lt;/p&gt;


&lt;h1&gt;
  
  
  A Basic Class Component
&lt;/h1&gt;

&lt;p&gt;The basic component you wrote in the previous exercise is an example of a functional component, which is appropriate since that component is literally&lt;br&gt;
nothing more than a function that returns some HTML. Functional components are great when all you want a component to do is to render some stuff; they&lt;br&gt;
are really good at doing just that. &lt;/p&gt;

&lt;p&gt;Components can also be written as classes. For this exercise, we're going to write a class component that does exactly the same thing as the functional component we just wrote. We'll again need to import React at the top of the file, but we'll also need to add a little something. Our import statement will look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, in addition to importing React, we're also importing the base Component class that is included in the React library. The export statement at the bottom of the file also stays, completely unchanged. Our class component will thus look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;BasicClassComponent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Hello&lt;/span&gt; &lt;span class="nx"&gt;World&lt;/span&gt;&lt;span class="o"&gt;!&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;BasicClassComponent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice that our &lt;code&gt;BasicClassComponent&lt;/code&gt; inherits from the base &lt;code&gt;Component&lt;/code&gt; class that we imported from the React library, by virtue of the 'extends' keyword. That being said, there's nothing in this minimal component that takes advantage of any of those inherited methods. All we have is a method on our component class called &lt;code&gt;render&lt;/code&gt; that returns the same div tag. &lt;/p&gt;

&lt;p&gt;In this case, if we really were deciding between whether to use a functional component versus a class component to render a simple div tag, then the functional style is more appropriate to use. This is because class components are much better suited for handling component state and triggering events based on the component's lifecycle. Don't worry if you don't know what all these terms meant, we will get to them shortly.&lt;/p&gt;

&lt;p&gt;The important takeaways at this point are that there are two types of components, functional and class components, and that functional components are well-suited if you're just looking to render some HTML. Class components, on the other hand, are much better suited for handling components that require more complex functionality, need to exhibit more varied behavior, and/or need to keep track of some state that may change throughout said component's lifecycle. &lt;/p&gt;




&lt;h1&gt;
  
  
  A Class Component with Some State
&lt;/h1&gt;

&lt;p&gt;When we talked about class components, it was mentioned that class components can handle state. So what does that mean? Component state is any dynamic data that we want the component to keep track of. For example, let's say we have a form component. This form has some input fields that we'd like users to fill out. When a user types characters into an input field, how is that input persisted from the point of view of our form component?&lt;/p&gt;

&lt;p&gt;The answer is by using component state! There are a few important concepts regarding component state, such as how to update it, pass it to another component, render it, etc. We'll talk about all of these in a bit, but for now, let's just focus on how to add state to a class component. &lt;/p&gt;

&lt;p&gt;Only class components have the ability to persist state, so if at any time you realize that a component needs to keep track of some state, you know that you'll automatically need a class component instead of a functional component. &lt;/p&gt;

&lt;p&gt;Our class component with state will look a lot like the basic class component we just wrote, but with some extra stuff:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;ClassComponentWithState&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Hello&lt;/span&gt; &lt;span class="nx"&gt;World&lt;/span&gt;&lt;span class="o"&gt;!&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ClassComponentWithState&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So far, the only new thing going on here is the constructor block. If you recall how classes in JavaScript work, classes need constructors. Additionally, if a class is extending off of another class and wants access to its parent class's methods and properties, then the &lt;code&gt;super&lt;/code&gt; function needs to be called inside the class's constructor function. Point being, the constructor function and the call to the &lt;code&gt;super&lt;/code&gt; function are &lt;em&gt;not&lt;/em&gt; associated with React, they are associated with all JavaScript classes.&lt;/p&gt;

&lt;p&gt;Then there is the &lt;code&gt;this.state&lt;/code&gt; property inside the constructor function that is set as an empty object. We're adding a property called &lt;code&gt;state&lt;/code&gt; to our class and setting it to an empty object. State objects in React are always just plain old objects. &lt;/p&gt;

&lt;p&gt;The observant student may be wondering why the basic class component we wrote in the previous exercise had no constructor function within its body. That is because we had no need for them since all our class component was doing was rendering some HTML. The constructor is needed here because that is where we need to initialize our state object. The call to &lt;code&gt;super&lt;/code&gt; is needed because we can't reference &lt;code&gt;this&lt;/code&gt; inside of our constructor without a call to &lt;code&gt;super&lt;/code&gt; first.&lt;/p&gt;

&lt;p&gt;Ok, now let's actually use this state object. One very common application of state objects in React components is to render the data being stored inside  them within our component's render function. Let's change our current class component to do that.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;ClassComponentWithState&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;someData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`Here's some data to render: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;someData&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ClassComponentWithState&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So what's changed here? Well, we added a key-value pair to our state object inside our constructor. Then we changed the contents of the render function. Now, it's actually rendering the data that we have inside the state object. Notice that inside the div tags we're using a template string literal so that we can access the value of &lt;code&gt;this.state.someData&lt;/code&gt; straight inside of our rendered content. This is a very handy piece of functionality that React provides for us when writing components. &lt;/p&gt;

&lt;p&gt;With React's newest version, we can actually now add state to a component without explicitly defining a constructor on the class. We can refactor our class component to look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;ClassComponentWithState&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;someData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`Here's some data to render: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;someData&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ClassComponentWithState&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our code is slightly cleaner, and doesn't require as many keystrokes as the older version. Fewer keystrokes are always a plus in my book! This new syntax is what is often referred to as 'syntactic sugar': under the hood, the React library translates this back into the old constructor code that we first started with, so that the JavaScript remains valid to the JavaScript interpreter. The clue to this is the fact that when we want to access some data from the state object, we still need to call it with &lt;code&gt;this.state.someData&lt;/code&gt;; changing it to just &lt;code&gt;state.someData&lt;/code&gt; does not work. &lt;/p&gt;

&lt;p&gt;While being able to write our code in this way is nice and convenient, going forward, I'm going to stick with the 'older' style of writing my React components by explicitly defining constructors so that you'll all have a better idea of what's going on under the hood. In other words, it's more "pedagogically sound". If you prefer the newer style (and I would in my own code), feel free to write your React components that way. &lt;/p&gt;




&lt;h1&gt;
  
  
  Class Component Updating State
&lt;/h1&gt;

&lt;p&gt;Great, so we can render some state that our component persists for us. However, we said an important use case of component state is to handle &lt;em&gt;dynamic&lt;/em&gt; data. A single static number isn't very dynamic at all. So now let's walk through how to update component state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;ClassComponentUpdatingState&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;aNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;increment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;aNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aNumber&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nx"&gt;decrement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;aNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aNumber&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`Our number: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aNumber&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;+&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;decrement&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;-&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ClassComponentUpdatingState&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice that we've added two methods to our class: &lt;code&gt;increment&lt;/code&gt; and &lt;code&gt;decrement&lt;/code&gt;. &lt;code&gt;increment&lt;/code&gt; and &lt;code&gt;decrement&lt;/code&gt; are methods that &lt;em&gt;we&lt;/em&gt; are adding to our class component. Unlike the &lt;code&gt;render&lt;/code&gt; method,&lt;code&gt;increment&lt;/code&gt; and &lt;code&gt;decrement&lt;/code&gt; were not already a part of our class component. This is why &lt;code&gt;increment&lt;/code&gt; and &lt;code&gt;decrement&lt;/code&gt; are written as arrow functions, so that they are automatically bound to our class component. This needs to happen so that we can call them later on. Again, there's no crazy React black magic going on here, we simply added two methods to our class. &lt;/p&gt;

&lt;p&gt;The more interesting thing is what is going on within the bodies of these methods. Each calls this funky &lt;code&gt;setState&lt;/code&gt;function. &lt;code&gt;setState&lt;/code&gt; in fact &lt;em&gt;is&lt;/em&gt; provided to us by React. It is the canonical way to update a component's state. Actually, it's the &lt;em&gt;only&lt;/em&gt; way you should ever update a component's state. It may seem more verbose than necessary, but there are good reasons for why you should be doing it this way. I'm not going to get into those reasons now. I'll leave a &lt;a href="https://reactjs.org/docs/react-component.html#setstate"&gt;link&lt;/a&gt; to the official documentation on the &lt;code&gt;setState&lt;/code&gt; function, although I'm pretty sure at this point it will probably just blow your mind and/or overwhelm you with jargon. So for now, take this as a case of "because I'm telling you so". &lt;/p&gt;

&lt;p&gt;So the way to use &lt;code&gt;setState&lt;/code&gt; to update a component's state is to pass it an object with each of the state keys you wish to update, along with the updated value. In our &lt;code&gt;increment&lt;/code&gt; method we said "I would like to update the &lt;code&gt;aNumber&lt;/code&gt; property on my component state by adding one to it and then setting the new value as my new &lt;code&gt;aNumber&lt;/code&gt;". The same thing happens in our &lt;code&gt;decrement&lt;/code&gt; method, only we're subtracting instead of adding.&lt;/p&gt;

&lt;p&gt;Then the other new concept we're running into here is how to actually call these methods we've added to our class. We added two HTML button tags within our &lt;code&gt;render&lt;/code&gt; function, then in their respective &lt;code&gt;onClick&lt;/code&gt; handlers, we specify the method that should be called whenever this button gets clicked. So whenever we click either of the buttons, our state gets updated appropriately and our component will re-render to show the correct value we're expecting. &lt;/p&gt;




&lt;h1&gt;
  
  
  Class Component Iterating State
&lt;/h1&gt;

&lt;p&gt;Another common state pattern you'll see being used in React components is iterating over an array in our state object and rendering each array element in its own tag. This is often used in order to render lists. &lt;/p&gt;

&lt;p&gt;Additionally, we want to be able to easily update lists and have React re-render our updated list. We'll see how both of these are done and how they work together within a single component in order to create the behavior of a dynamic list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;ClassComponentIteratingState&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;ingredients&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;flour&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eggs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;milk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sugar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vanilla extract&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="na"&gt;newIngredient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;handleIngredientInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;newIngredient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="nx"&gt;addIngredient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ingredientsList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ingredients&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;ingredientsList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;newIngredient&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;newIngredient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;ingredients&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ingredientsList&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ingredients&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ingredient&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ingredient&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="err"&gt;}
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="nx"&gt;onSubmit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addIngredient&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleIngredientInput&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Add a new ingredient&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;newIngredient&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/form&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ClassComponentIteratingState&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first change to note is that our state object now has an 'ingredients' array, and a 'newIngredient' field that has been initialized to an empty string. The ingredients array contains the elements that we'll want to render in our list. We'll see shortly why the newIngredient field is needed.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;addIngredient&lt;/code&gt; and &lt;code&gt;handleIngredientInput&lt;/code&gt; methods we've added to our class receives a parameter called 'event'. This event object is part of the browser's API. When we interact with some DOM element, such as clicking on an HTML button, the function that is invoked upon that button being clicked actually receives the event object. So when we type some input into an input tag, we're able grab each character that was typed into the input field through the event object paramter.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;handleIngredientInput&lt;/code&gt; method is what gets invoked every time the user presses a key to enter text in the input box for adding a new ingredient. Every character the user types gets persisted in the &lt;code&gt;newIngredient&lt;/code&gt; field on the state object. We're able to grab the text in the input box using &lt;code&gt;event.target.value&lt;/code&gt;, which holds the value of the string text that is currently in the input box. We use that to update our &lt;code&gt;newIngredient&lt;/code&gt; string field.&lt;/p&gt;

&lt;p&gt;Breaking down the &lt;code&gt;addIngredient&lt;/code&gt; method, we see this &lt;code&gt;event.preventDefault()&lt;/code&gt; invocation. This is because this method will be used upon submitting a form, and it turns out that submitting a form triggers some default form behavior that we don't want to trigger when we submit the form (namely refreshing the entire page). &lt;code&gt;event.preventDefault()&lt;/code&gt; will prevent this default form behavior, meaning our form will only do what we want it to do when it is submitted. &lt;/p&gt;

&lt;p&gt;Next, we store a reference to &lt;code&gt;this.state.ingredients&lt;/code&gt; in a variable called &lt;code&gt;ingredientsList&lt;/code&gt;. So we now have a copy of the array that is stored in our state object. We want to update the copy of the ingredients array first instead of directly updating the actual array itself in state. This is a React best practice.&lt;/p&gt;

&lt;p&gt;Now we push whatever value is being stored at our &lt;code&gt;newIngredient&lt;/code&gt; field onto the &lt;code&gt;ingredientsList&lt;/code&gt; array so that our &lt;code&gt;ingredientsList&lt;/code&gt; array is now more up-to-date than our &lt;code&gt;this.state.ingredients&lt;/code&gt; array. So all we have to do now is call &lt;code&gt;setState&lt;/code&gt; appropriately in order to update the value in our state object. Additionally, we also set the &lt;code&gt;newIngredient&lt;/code&gt; field back to an empty string in order to clear out the input field once we submit a new ingredient. Now it's ready to accept more user input!&lt;/p&gt;

&lt;p&gt;Looking at our render function, first note the &lt;code&gt;this.state.ingredients.map&lt;/code&gt; call. This is looping through each ingredient in our &lt;code&gt;ingredients&lt;/code&gt; array and returning each one within its own div tag. This is a very common syntax for rendering everything inside an array. &lt;/p&gt;

&lt;p&gt;Then we have an HTML form which contains an input field. The purpose of this form is to allow a user to add new ingredients to the list. Note that we're passing our &lt;code&gt;addIngredient&lt;/code&gt; method to the form's &lt;code&gt;onSubmit&lt;/code&gt; handler. This means that our &lt;code&gt;addIngredient&lt;/code&gt; method gets invoked whenever our form is submitted.&lt;/p&gt;

&lt;p&gt;Lastly, the input field has an &lt;code&gt;onChange&lt;/code&gt; handler that invokes our &lt;code&gt;handleIngredientInput&lt;/code&gt; method whenever there is some sort of change in the input field, namely when a user types into it. Notice that the &lt;code&gt;value&lt;/code&gt; field in our input tag reads off of &lt;code&gt;this.state.newIngredient&lt;/code&gt; in order to know what value to display. So when a user enters text into the input field, the &lt;code&gt;onChange&lt;/code&gt; handler is invoked every time, which updates our &lt;code&gt;this.state.newIngredient&lt;/code&gt; field, which the input field&lt;br&gt;
then renders. &lt;/p&gt;


&lt;h1&gt;
  
  
  Parent and Child Components
&lt;/h1&gt;

&lt;p&gt;Now let's get into talking about how to have components interact with each other. A single isolated component isn't going to do us much good. That being said, it's &lt;em&gt;possible&lt;/em&gt; to simply throw all of the HTML for a page into a single React component, though at that point that one component would be so bloated and monolithic that you might as well not have used React at all. &lt;/p&gt;

&lt;p&gt;The beauty of React lies in the fact that it allows us to compose modular components together. Let's start off with the component we just saw, but let's change its name to &lt;code&gt;ParentComponent&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ChildComponent&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./ChildComponent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;ParentComponent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;ingredients&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;flour&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eggs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;milk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sugar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vanilla&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="na"&gt;newIngredient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;handleIngredientInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;newIngredient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="nx"&gt;addIngredient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ingredientsList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ingredients&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;ingredientsList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;newIngredient&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;newIngredient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;ingredients&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ingredientsList&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ingredients&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ingredient&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ChildComponent&lt;/span&gt; &lt;span class="nx"&gt;thing&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ingredient&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="err"&gt;}
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="nx"&gt;onSubmit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addIngredient&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleIngredientInput&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Add a new ingredient&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;newIngredient&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/form&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ParentComponent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The only two other differences in this component are that we're importing a &lt;code&gt;ChildComponent&lt;/code&gt; and then using it inside our &lt;code&gt;this.state.ingredients.map&lt;/code&gt; call. &lt;code&gt;ChildComponent&lt;/code&gt; is another React component. Notice that we're using it just as if it were any other HTML tag. This is how we lay out our component hierarchy: the ChildComponent is rendered within the ParentComponent. We can see this to be the case if we open up the developer console and inspect these elements. &lt;/p&gt;

&lt;p&gt;Note also that we're passing each ingredient as a 'thing' to the ChildComponent component. This is how a parent component passes data to a child component. It doesn't need to be called 'thing'; you can call it whatever you want. Conceptually though, every piece of data that a parent component passes down to a child component is called a 'prop' in React lingo. &lt;/p&gt;

&lt;p&gt;Let's take a look now at the Child Component. It serves two purposes: 1) to render the props data that it gets from a parent component, and 2) to add the ability for a user to click on it and have it toggle a strikethrough, indicating that the item is 'complete'.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;ChildComponent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;clicked&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;handleClick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;clicked&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clicked&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;styles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clicked&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;textDecoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;line-through&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;textDecoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleClick&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;thing&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ChildComponent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The overall structure of the child component is nothing we haven't seen. It's just another class component with its own state object and a method called &lt;code&gt;handleClick&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;A component accesses its props via the &lt;code&gt;this.props&lt;/code&gt; object. Any prop a parent component passes down to a child component is accessible inside the child component's &lt;code&gt;this.prop&lt;/code&gt; object.&lt;/p&gt;

&lt;p&gt;So our child component keeps its own state that tracks whether the component has been clicked or not. Then at the top of the &lt;code&gt;render&lt;/code&gt; function, it uses a ternary condition to determine whether the div tag that is being rendered should have a strikethrough or not. The &lt;code&gt;handleClick&lt;/code&gt; method is then invoked via an &lt;code&gt;onClick&lt;/code&gt; handler on the div tag; it does the work of toggling the &lt;code&gt;this.state.clicked&lt;/code&gt; boolean. &lt;/p&gt;

&lt;p&gt;The overall structure of React applications can be represented as a hierarchical tree structure, just like how the DOM itself is structure. There is an overarching root component at the top of the hierarchy that every other component sits underneath. Specifying that a component should be a child of some parent component is as simple as throwing it in the parent component's render function, just like how we did it in this example. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Ultimate Markdown Cheatsheet</title>
      <dc:creator>Bryan C Guner</dc:creator>
      <pubDate>Fri, 15 Oct 2021 14:56:55 +0000</pubDate>
      <link>https://dev.to/bgoonz/ultimate-markdown-cheatsheet-1o1e</link>
      <guid>https://dev.to/bgoonz/ultimate-markdown-cheatsheet-1o1e</guid>
      <description>&lt;h1&gt;
  
  
  Ultimate Markdown Cheat Sheet
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
Standard features

&lt;ul&gt;
&lt;li&gt;Headings&lt;/li&gt;
&lt;li&gt;Paragraphs&lt;/li&gt;
&lt;li&gt;Breaks&lt;/li&gt;
&lt;li&gt;Horizontal Rule&lt;/li&gt;
&lt;li&gt;Emphasis&lt;/li&gt;
&lt;li&gt;Bold&lt;/li&gt;
&lt;li&gt;Italics&lt;/li&gt;
&lt;li&gt;Blockquotes&lt;/li&gt;
&lt;li&gt;Lists&lt;/li&gt;
&lt;li&gt;Unordered&lt;/li&gt;
&lt;li&gt;Ordered&lt;/li&gt;
&lt;li&gt;Time-saving Tip&lt;/li&gt;
&lt;li&gt;Code&lt;/li&gt;
&lt;li&gt;Inline code&lt;/li&gt;
&lt;li&gt;"Fenced" code block&lt;/li&gt;
&lt;li&gt;Indented code&lt;/li&gt;
&lt;li&gt;Syntax highlighting&lt;/li&gt;
&lt;li&gt;Links&lt;/li&gt;
&lt;li&gt;Autolinks&lt;/li&gt;
&lt;li&gt;Inline links&lt;/li&gt;
&lt;li&gt;Link titles&lt;/li&gt;
&lt;li&gt;Named Anchors&lt;/li&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Raw HTML&lt;/li&gt;
&lt;li&gt;Escaping with backslashes&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

Non-standard features

&lt;ul&gt;
&lt;li&gt;Strikethrough&lt;/li&gt;
&lt;li&gt;Todo List&lt;/li&gt;
&lt;li&gt;Tables&lt;/li&gt;
&lt;li&gt;Aligning cells&lt;/li&gt;
&lt;li&gt;Footnotes&lt;/li&gt;
&lt;li&gt;Inline footnotes&lt;/li&gt;
&lt;li&gt;Additional Information&lt;/li&gt;
&lt;li&gt;What is markdown?&lt;/li&gt;
&lt;li&gt;Other Resources&lt;/li&gt;
&lt;li&gt;Contributing&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;


&lt;h1&gt;
  
  
  Standard features
&lt;/h1&gt;

&lt;p&gt;The following markdown features are defined by the [CommonMark][] standard, and are generally supported by all markdown parsers and editors.&lt;/p&gt;
&lt;h2&gt;
  
  
  Headings
&lt;/h2&gt;

&lt;p&gt;Headings from &lt;code&gt;h1&lt;/code&gt; through &lt;code&gt;h6&lt;/code&gt; are constructed with a &lt;code&gt;#&lt;/code&gt; for each level:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# h1 Heading
## h2 Heading
### h3 Heading
#### h4 Heading
##### h5 Heading
###### h6 Heading
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Renders to this HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;h1 Heading&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;h2 Heading&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;h3 Heading&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h4&amp;gt;&lt;/span&gt;h4 Heading&lt;span class="nt"&gt;&amp;lt;/h4&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h5&amp;gt;&lt;/span&gt;h5 Heading&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h6&amp;gt;&lt;/span&gt;h6 Heading&lt;span class="nt"&gt;&amp;lt;/h6&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which looks like this in the browser:&lt;/p&gt;

&lt;h1&gt;
  
  
  h1 Heading
&lt;/h1&gt;

&lt;h2&gt;
  
  
  h2 Heading
&lt;/h2&gt;

&lt;h3&gt;
  
  
  h3 Heading
&lt;/h3&gt;

&lt;h4&gt;
  
  
  h4 Heading
&lt;/h4&gt;

&lt;h5&gt;
  
  
  h5 Heading
&lt;/h5&gt;

&lt;h6&gt;
  
  
  h6 Heading
&lt;/h6&gt;

&lt;p&gt;&lt;strong&gt;A note about "Setext" Headings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Note that this document only describes &lt;a href="https://spec.commonmark.org/0.28/#atx-headings" rel="noopener noreferrer"&gt;ATX headings&lt;/a&gt;, as it is the preferred syntax for writing headings. However, the CommonMark specification also describes &lt;a href="https://spec.commonmark.org/0.28/#setext-headings" rel="noopener noreferrer"&gt;Setext headings&lt;/a&gt;, a heading format that is denoted by a line of dashes or equal signes following the heading. It's recommended by the author of this guide that you use only ATX headings, as they are easier to write and read in text editors, and are less likeley to conflict with other syntaxes and demarcations from language extensions.&lt;/p&gt;


&lt;h2&gt;
  
  
  Paragraphs
&lt;/h2&gt;

&lt;p&gt;Body copy written as normal plain-text will be wrapped with &lt;code&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/code&gt; tags in the rendered HTML.&lt;/p&gt;

&lt;p&gt;So this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. Et legere ocurreret pri, animal tacimates complectitur ad cum. Cu eum inermis inimicus efficiendi. Labore officiis his ex, soluta officiis concludaturque ei qui, vide sensibus vim ad.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Renders to this HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. Et legere ocurreret pri, animal tacimates complectitur ad cum. Cu eum inermis inimicus efficiendi. Labore officiis his ex, soluta officiis concludaturque ei qui, vide sensibus vim ad.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;h2&gt;
  
  
  Breaks
&lt;/h2&gt;

&lt;p&gt;You can use multiple consecutive newline characters (&lt;code&gt;\n&lt;/code&gt;) to create extra spacing between sections in a markdown document. However, if you need to ensure that extra newlines are not collapsed, you can use as many HTML &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; elements as you want.&lt;/p&gt;
&lt;h2&gt;
  
  
  Horizontal Rule
&lt;/h2&gt;

&lt;p&gt;The HTML &lt;code&gt;&amp;lt;hr&amp;gt;&lt;/code&gt; element is for creating a "thematic break" between paragraph-level elements. In markdown, you can use of the following for this purpose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;___&lt;/code&gt;: three consecutive underscores&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;---&lt;/code&gt;: three consecutive dashes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;***&lt;/code&gt;: three consecutive asterisks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Renders to:&lt;/p&gt;








&lt;h2&gt;
  
  
  Emphasis
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Bold
&lt;/h3&gt;

&lt;p&gt;For emphasizing a snippet of text with a heavier font-weight.&lt;/p&gt;

&lt;p&gt;The following snippet of text is &lt;strong&gt;rendered as bold text&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**rendered as bold text**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;renders to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;rendered as bold text&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and this HTML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;rendered as bold text&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Italics
&lt;/h3&gt;

&lt;p&gt;For emphasizing a snippet of text with italics.&lt;/p&gt;

&lt;p&gt;The following snippet of text is &lt;em&gt;rendered as italicized text&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_rendered as italicized text_
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;renders to:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;rendered as italicized text&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;and this HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;em&amp;gt;&lt;/span&gt;rendered as italicized text&lt;span class="nt"&gt;&amp;lt;/em&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Blockquotes
&lt;/h2&gt;

&lt;p&gt;Used for defining a section of quoting text from another source, within your document.&lt;/p&gt;

&lt;p&gt;To create a blockquote, use &lt;code&gt;&amp;gt;&lt;/code&gt; before any text you want to quote.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Renders to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And the generated HTML from a markdown parser might look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;blockquote&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/blockquote&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Blockquotes can also be nested:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; Donec massa lacus, ultricies a ullamcorper in, fermentum sed augue.
Nunc augue augue, aliquam non hendrerit ac, commodo vel nisi.
&amp;gt;&amp;gt; Sed adipiscing elit vitae augue consectetur a gravida nunc vehicula. Donec auctor
odio non est accumsan facilisis. Aliquam id turpis in dolor tincidunt mollis ac eu diam.
&amp;gt;&amp;gt;&amp;gt; Donec massa lacus, ultricies a ullamcorper in, fermentum sed augue.
Nunc augue augue, aliquam non hendrerit ac, commodo vel nisi.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Renders to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Donec massa lacus, ultricies a ullamcorper in, fermentum sed augue.&lt;br&gt;
Nunc augue augue, aliquam non hendrerit ac, commodo vel nisi.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sed adipiscing elit vitae augue consectetur a gravida nunc vehicula. Donec auctor&lt;br&gt;
odio non est accumsan facilisis. Aliquam id turpis in dolor tincidunt mollis ac eu diam.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Donec massa lacus, ultricies a ullamcorper in, fermentum sed augue.&lt;br&gt;
Nunc augue augue, aliquam non hendrerit ac, commodo vel nisi.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;
&lt;br&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Lists
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Unordered Lists
&lt;/h3&gt;

&lt;p&gt;A list of items in which the order of the items does not explicitly matter.&lt;/p&gt;

&lt;p&gt;You may use any of the following symbols to denote bullets for each list item:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* valid bullet
- valid bullet
+ valid bullet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+ Lorem ipsum dolor sit amet
+ Consectetur adipiscing elit
+ Integer molestie lorem at massa
+ Facilisis in pretium nisl aliquet
+ Nulla volutpat aliquam velit
  - Phasellus iaculis neque
  - Purus sodales ultricies
  - Vestibulum laoreet porttitor sem
  - Ac tristique libero volutpat at
+ Faucibus porta lacus fringilla vel
+ Aenean sit amet erat nunc
+ Eget porttitor lorem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Renders to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lorem ipsum dolor sit amet&lt;/li&gt;
&lt;li&gt;Consectetur adipiscing elit&lt;/li&gt;
&lt;li&gt;Integer molestie lorem at massa&lt;/li&gt;
&lt;li&gt;Facilisis in pretium nisl aliquet&lt;/li&gt;
&lt;li&gt;Nulla volutpat aliquam velit

&lt;ul&gt;
&lt;li&gt;Phasellus iaculis neque&lt;/li&gt;
&lt;li&gt;Purus sodales ultricies&lt;/li&gt;
&lt;li&gt;Vestibulum laoreet porttitor sem&lt;/li&gt;
&lt;li&gt;Ac tristique libero volutpat at&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Faucibus porta lacus fringilla vel&lt;/li&gt;

&lt;li&gt;Aenean sit amet erat nunc&lt;/li&gt;

&lt;li&gt;Eget porttitor lorem&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;And this HTML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Lorem ipsum dolor sit amet&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Consectetur adipiscing elit&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Integer molestie lorem at massa&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Facilisis in pretium nisl aliquet&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Nulla volutpat aliquam velit
    &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Phasellus iaculis neque&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Purus sodales ultricies&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Vestibulum laoreet porttitor sem&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Ac tristique libero volutpat at&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Faucibus porta lacus fringilla vel&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Aenean sit amet erat nunc&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Eget porttitor lorem&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Ordered Lists
&lt;/h3&gt;

&lt;p&gt;A list of items in which the order of items does explicitly matter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Lorem ipsum dolor sit amet
2. Consectetur adipiscing elit
3. Integer molestie lorem at massa
4. Facilisis in pretium nisl aliquet
5. Nulla volutpat aliquam velit
6. Faucibus porta lacus fringilla vel
7. Aenean sit amet erat nunc
8. Eget porttitor lorem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Renders to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lorem ipsum dolor sit amet&lt;/li&gt;
&lt;li&gt;Consectetur adipiscing elit&lt;/li&gt;
&lt;li&gt;Integer molestie lorem at massa&lt;/li&gt;
&lt;li&gt;Facilisis in pretium nisl aliquet&lt;/li&gt;
&lt;li&gt;Nulla volutpat aliquam velit&lt;/li&gt;
&lt;li&gt;Faucibus porta lacus fringilla vel&lt;/li&gt;
&lt;li&gt;Aenean sit amet erat nunc&lt;/li&gt;
&lt;li&gt;Eget porttitor lorem&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And this HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ol&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Lorem ipsum dolor sit amet&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Consectetur adipiscing elit&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Integer molestie lorem at massa&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Facilisis in pretium nisl aliquet&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Nulla volutpat aliquam velit&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Faucibus porta lacus fringilla vel&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Aenean sit amet erat nunc&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Eget porttitor lorem&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ol&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Time-saving Tip!
&lt;/h3&gt;

&lt;p&gt;Sometimes lists change, and when they do it's a pain to re-order all of the numbers. Markdown solves this problem by allowing you to simply use &lt;code&gt;1.&lt;/code&gt; before each item in the list.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Lorem ipsum dolor sit amet
1. Consectetur adipiscing elit
1. Integer molestie lorem at massa
1. Facilisis in pretium nisl aliquet
1. Nulla volutpat aliquam velit
1. Faucibus porta lacus fringilla vel
1. Aenean sit amet erat nunc
1. Eget porttitor lorem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Automatically re-numbers the items and renders to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lorem ipsum dolor sit amet&lt;/li&gt;
&lt;li&gt;Consectetur adipiscing elit&lt;/li&gt;
&lt;li&gt;Integer molestie lorem at massa&lt;/li&gt;
&lt;li&gt;Facilisis in pretium nisl aliquet&lt;/li&gt;
&lt;li&gt;Nulla volutpat aliquam velit&lt;/li&gt;
&lt;li&gt;Faucibus porta lacus fringilla vel&lt;/li&gt;
&lt;li&gt;Aenean sit amet erat nunc&lt;/li&gt;
&lt;li&gt;Eget porttitor lorem&lt;/li&gt;
&lt;/ol&gt;



&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Inline code
&lt;/h3&gt;

&lt;p&gt;Wrap inline snippets of code with a single backtick: &lt;code&gt;`&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For example, to show &lt;code&gt;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt; inline with other text, just wrap it in backticks.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;html&lt;br&gt;
For example, to show&lt;/code&gt;&lt;/p&gt;
&lt;code&gt;inline with other text, just wrap it in backticks.&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;
&lt;h3&gt;
  
  
  "Fenced" code block
&lt;/h3&gt;

&lt;p&gt;Three consecutive backticks, referred to as "code fences", are used to denote multiple lines of code: &lt;code&gt;&lt;code&gt;&lt;/code&gt;`&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For example, this:&lt;/p&gt;

&lt;pre&gt;
```html
Example text here...
```
&lt;/pre&gt;

&lt;p&gt;Renders to something like this in HTML:&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;html&lt;/p&gt;

&lt;pre&gt;
  &lt;p&gt;Example text here...&lt;/p&gt;
&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;p&gt;And appears like this when viewed in a browser:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`&lt;br&gt;
Example text here...&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Indented code
&lt;/h3&gt;

&lt;p&gt;You may also indent several lines of code by at least four spaces, but this is not recommended as it is harder to read, harder to maintain, and doesn't support syntax highlighting.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`&lt;br&gt;
    // Some comments&lt;br&gt;
    line 1 of code&lt;br&gt;
    line 2 of code&lt;br&gt;
    line 3 of code&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Some comments
line 1 of code
line 2 of code
line 3 of code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Syntax highlighting
&lt;/h3&gt;

&lt;p&gt;Various markdown parsers, such as &lt;a href="https://github.com/jonschlinkert/remarkable" rel="noopener noreferrer"&gt;remarkable&lt;/a&gt;, support syntax highlighting with fenced code blocks. To activate the correct styling for the language inside the code block, simply add the file extension of the language you want to use directly after the first code "fence": &lt;code&gt;`&lt;code&gt;&lt;/code&gt;js&lt;/code&gt;, and syntax highlighting will automatically be applied in the rendered HTML (if supported by the parser). For example, to apply syntax highlighting to JavaScript code:&lt;/p&gt;

&lt;pre&gt;
```js
grunt.initConfig({
  assemble: {
    options: {
      assets: 'docs/assets',
      data: 'src/data/*.{json,yml}',
      helpers: 'src/custom-helpers.js',
      partials: ['src/partials/**/*.{hbs,md}']
    },
    pages: {
      options: {
        layout: 'default.hbs'
      },
      files: {
        './': ['src/templates/pages/index.hbs']
      }
    }
  }
});
```
&lt;/pre&gt;

&lt;p&gt;Which renders to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;js&lt;br&gt;
grunt.initConfig({&lt;br&gt;
  assemble: {&lt;br&gt;
    options: {&lt;br&gt;
      assets: 'docs/assets',&lt;br&gt;
      data: 'src/data/*.{json,yml}',&lt;br&gt;
      helpers: 'src/custom-helpers.js',&lt;br&gt;
      partials: ['src/partials/**/*.{hbs,md}']&lt;br&gt;
    },&lt;br&gt;
    pages: {&lt;br&gt;
      options: {&lt;br&gt;
        layout: 'default.hbs'&lt;br&gt;
      },&lt;br&gt;
      files: {&lt;br&gt;
        './': ['src/templates/pages/index.hbs']&lt;br&gt;
      }&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
});&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And this complicated HTML is an example of what might be generated by the markdown parser, when syntax highlighting is applied by a library like &lt;a href="https://highlightjs.org/" rel="noopener noreferrer"&gt;highlight.js&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`xml&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre&gt;&lt;span&gt;grunt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;initConfig&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;
  &lt;span&gt;assemble&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;{&lt;/span&gt;
    &lt;span&gt;options&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;{&lt;/span&gt;
      &lt;span&gt;assets&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;'docs/assets'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
      &lt;span&gt;data&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;'src/data/*.{json,yml}'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
      &lt;span&gt;helpers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;'src/custom-helpers.js'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
      &lt;span&gt;partials&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;[&lt;/span&gt;&lt;span&gt;'src/partials/**/*.{hbs,md}'&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;
    &lt;span&gt;},&lt;/span&gt;
    &lt;span&gt;pages&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;{&lt;/span&gt;
      &lt;span&gt;options&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;{&lt;/span&gt;
        &lt;span&gt;layout&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;'default.hbs'&lt;/span&gt;
      &lt;span&gt;},&lt;/span&gt;
      &lt;span&gt;files&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;{&lt;/span&gt;
        &lt;span&gt;'./'&lt;/span&gt;&lt;span&gt;:&lt;/span&gt; &lt;span&gt;[&lt;/span&gt;&lt;span&gt;'src/templates/pages/index.hbs'&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;
      &lt;span&gt;}&lt;/span&gt;
    &lt;span&gt;}&lt;/span&gt;
  &lt;span&gt;}&lt;/span&gt;
&lt;span&gt;});&lt;/span&gt;
&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Autolinks
&lt;/h3&gt;

&lt;p&gt;Autolinks are absolute URIs and email addresses inside &lt;code&gt;&amp;lt;&lt;/code&gt; and &lt;code&gt;&amp;gt;&lt;/code&gt;. They are parsed as links, where the URI or email address itself is used as the link's label.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
&amp;lt;http://foo.bar.baz&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Renders to:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://foo.bar.baz" rel="noopener noreferrer"&gt;http://foo.bar.baz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;URIs or email addresses that are not wrapped in angle brackets are not recognized as valid autolinks by markdown parsers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inline links
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
[Assemble](http://assemble.io)&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Renders to (hover over the link, there is no tooltip):&lt;/p&gt;

&lt;p&gt;&lt;a href="http://assemble.io" rel="noopener noreferrer"&gt;Assemble&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;HTML:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;html&lt;br&gt;
&amp;lt;a href="http://assemble.io"&amp;gt;Assemble&amp;lt;/a&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Link titles
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
[Assemble](https://github.com/assemble/ "Visit Assemble!")&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Renders to (hover over the link, there should be a tooltip):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/assemble/" rel="noopener noreferrer"&gt;Assemble&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;HTML:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;html&lt;br&gt;
&amp;lt;a href="https://github.com/assemble/" title="Visit Assemble!"&amp;gt;Assemble&amp;lt;/a&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Named Anchors
&lt;/h3&gt;

&lt;p&gt;Named anchors enable you to jump to the specified anchor point on the same page.&lt;/p&gt;

&lt;p&gt;For example, the following "chapter" links:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;h1&gt;
  
  
  Table of Contents
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Chapter 1&lt;/li&gt;
&lt;li&gt;Chapter 2&lt;/li&gt;
&lt;li&gt;
Chapter 3
`&lt;code&gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...will jump to these sections:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 1 &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Content for chapter one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 2 &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Content for chapter one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 3 &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Content for chapter one.&lt;br&gt;
`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anchor placement&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Note that placement of achors is arbitrary, you can put them anywhere you want, not just in headings. This makes adding cross-references easy when writing markdown.&lt;/p&gt;



&lt;h2&gt;
  
  
  Images
&lt;/h2&gt;

&lt;p&gt;Images have a similar syntax to links but include a preceding exclamation point.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
![Minion](http://octodex.github.com/images/minion.png)&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Foctodex.github.com%2Fimages%2Fminion.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Foctodex.github.com%2Fimages%2Fminion.png" alt="Minion"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
![Alt text](http://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat")&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Foctodex.github.com%2Fimages%2Fstormtroopocat.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Foctodex.github.com%2Fimages%2Fstormtroopocat.jpg" title="The Stormtroopocat" alt="Alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Like links, Images also have a footnote style syntax&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
![Alt text][id]&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Foctodex.github.com%2Fimages%2Fdojocat.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Foctodex.github.com%2Fimages%2Fdojocat.jpg" title="The Dojocat" alt="Alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With a reference later in the document defining the URL location:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Raw HTML
&lt;/h2&gt;

&lt;p&gt;Any text between &lt;code&gt;&amp;lt;&lt;/code&gt; and &lt;code&gt;&amp;gt;&lt;/code&gt; that looks like an HTML tag will be parsed as a raw HTML tag and rendered to HTML without escaping.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Note that markdown parsers do not attempt to validate your HTML).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
**Visit &amp;lt;a href="https://github.com"&amp;gt;Jon Schlinkert's GitHub Profile&amp;lt;/a&amp;gt;.**&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Renders to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visit &lt;a href="https://github.com" rel="noopener noreferrer"&gt;Jon Schlinkert's GitHub Profile&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Escaping with backslashes
&lt;/h2&gt;

&lt;p&gt;Any ASCII punctuation character may be escaped using a single backslash.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
\*this is not italic*&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Renders to:&lt;/p&gt;

&lt;p&gt;*this is not italic*&lt;/p&gt;

&lt;h1&gt;
  
  
  Non-standard features
&lt;/h1&gt;

&lt;p&gt;The following markdown features are not defined by the [CommonMark][] specification, but they are commonly supported by markdown parsers and editors, as well as sites like GitHub and GitLab.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strikethrough
&lt;/h2&gt;

&lt;p&gt;In GitHub Flavored Markdown (GFM) you can do strickthroughs.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
~~Strike through this text.~~&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Which renders to:&lt;/p&gt;

&lt;p&gt;&lt;del&gt;Strike through this text.&lt;/del&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  Todo List
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Lorem ipsum dolor sit amet&lt;/li&gt;
&lt;li&gt;[ ] Consectetur adipiscing elit&lt;/li&gt;
&lt;li&gt;[ ] Integer molestie lorem at massa
`&lt;code&gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Renders to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Lorem ipsum dolor sit amet&lt;/li&gt;
&lt;li&gt;[ ] Consectetur adipiscing elit&lt;/li&gt;
&lt;li&gt;[ ] Integer molestie lorem at massa&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Links in todo lists&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] foo
&lt;/li&gt;
&lt;li&gt;[ ] baz
&lt;/li&gt;
&lt;li&gt;[ ] fez
`&lt;code&gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Renders to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] foo
&lt;/li&gt;
&lt;li&gt;[ ] baz
&lt;/li&gt;
&lt;li&gt;[ ] fez
&lt;/li&gt;
&lt;/ul&gt;



&lt;h2&gt;
  
  
  Tables
&lt;/h2&gt;

&lt;p&gt;Tables are created by adding pipes as dividers between each cell, and by adding a line of dashes (also separated by bars) beneath the header &lt;em&gt;(this line of dashes is required)&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pipes do not need to be vertically aligned.&lt;/li&gt;
&lt;li&gt;pipes on the left and right sides of the table are sometimes optional&lt;/li&gt;
&lt;li&gt;three or more dashes must be used for each cell in the &lt;em&gt;separator&lt;/em&gt; row (between the table header and body)&lt;/li&gt;
&lt;li&gt;the left and right pipes are optional with some markdown parsers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
| Option | Description |&lt;br&gt;
| --- | --- |&lt;br&gt;
| data   | path to data files to supply the data that will be passed into templates. |&lt;br&gt;
| engine | engine to be used for processing templates. Handlebars is the default. |&lt;br&gt;
| ext    | extension to be used for dest files. |&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Renders to:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;data&lt;/td&gt;
&lt;td&gt;path to data files to supply the data that will be passed into templates.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;engine&lt;/td&gt;
&lt;td&gt;engine to be used for processing templates. Handlebars is the default.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ext&lt;/td&gt;
&lt;td&gt;extension to be used for dest files.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;And this HTML:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`html&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Option&lt;/th&gt;
    &lt;th&gt;Description&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;data&lt;/td&gt;
    &lt;td&gt;path to data files to supply the data that will be passed into templates.&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;engine&lt;/td&gt;
    &lt;td&gt;engine to be used for processing templates. Handlebars is the default.&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;ext&lt;/td&gt;
    &lt;td&gt;extension to be used for dest files.&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Aligning cells
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Center text in a column&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To center the text in a column, add a colon to the middle of the dashes in the row beneath the header.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
| Option | Description |&lt;br&gt;
| -:- | -:- |&lt;br&gt;
| data   | path to data files to supply the data that will be passed into templates. |&lt;br&gt;
| engine | engine to be used for processing templates. Handlebars is the default. |&lt;br&gt;
| ext    | extension to be used for dest files. |&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;| Option | Description |&lt;br&gt;
| -:- | -:- |&lt;br&gt;
| data   | path to data files to supply the data that will be passed into templates. |&lt;br&gt;
| engine | engine to be used for processing templates. Handlebars is the default. |&lt;br&gt;
| ext    | extension to be used for dest files. |&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Right-align the text in a column&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To right-align the text in a column, add a colon to the middle of the dashes in the row beneath the header.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
| Option | Description |&lt;br&gt;
| --: | --:|&lt;br&gt;
| data   | path to data files to supply the data that will be passed into templates. |&lt;br&gt;
| engine | engine to be used for processing templates. Handlebars is the default. |&lt;br&gt;
| ext    | extension to be used for dest files. |&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Renders to:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;data&lt;/td&gt;
&lt;td&gt;path to data files to supply the data that will be passed into templates.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;engine&lt;/td&gt;
&lt;td&gt;engine to be used for processing templates. Handlebars is the default.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ext&lt;/td&gt;
&lt;td&gt;extension to be used for dest files.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Footnotes
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Markdown footnotes are not officially suppored by the [CommonMark][] specification. However, the feature is supported by [remarkable][] and other markdown parsers, and it's very useful when available.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Markdown footnotes are denoted by an opening square bracket, followed by a caret, followed by a number and a closing square bracket: &lt;code&gt;[^1]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
This is some text[^1] with a footnote reference link.&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The accompanying text for the footnote can be added elsewhere in the document using the following syntax:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;When rendered to HTML, footnotes are "stacked" by the markdown parser at the bottom of the file, in the order in which the footnotes were defined.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inline footnotes
&lt;/h3&gt;

&lt;p&gt;Some markdown parsers like [Remarkable][remarkable] also support inline footnotes. Inline footnotes are written using the following syntax: &lt;code&gt;[^2 "This is an inline footnote"]&lt;/code&gt;.&lt;/p&gt;



&lt;h2&gt;
  
  
  Additional Information
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is markdown?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Markdown is "a plain text format for writing structured documents, based on formatting conventions from email and usenet" -- [CommonMark][]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sites like GitHub and Stackoverflow have popularized the use markdown as a plain-text alternative to traditional text editors, for writing things like documentation and comments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://ben.balter.com/2012/10/19/we-ve-been-trained-to-make-paper/" rel="noopener noreferrer"&gt;We've been trained to make paper&lt;/a&gt; - A great blog post about why markdown frees us from the shackles of proprietary formats imposed by bloated word processors, such as Microsoft Word.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://commonmark.org/" rel="noopener noreferrer"&gt;CommonMark&lt;/a&gt; - "A strongly defined, highly compatible specification of Markdown"&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Python Tutorial</title>
      <dc:creator>Bryan C Guner</dc:creator>
      <pubDate>Wed, 15 Sep 2021 20:30:22 +0000</pubDate>
      <link>https://dev.to/bgoonz/python-tutorial-1cig</link>
      <guid>https://dev.to/bgoonz/python-tutorial-1cig</guid>
      <description>&lt;p&gt;Liquid syntax error: Variable '{{% raw %}' was not properly terminated with regexp: /\}\}/&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Awesome List Of Github Repositories</title>
      <dc:creator>Bryan C Guner</dc:creator>
      <pubDate>Tue, 31 Aug 2021 15:49:22 +0000</pubDate>
      <link>https://dev.to/bgoonz/awesome-list-of-github-repositories-ni0</link>
      <guid>https://dev.to/bgoonz/awesome-list-of-github-repositories-ni0</guid>
      <description>&lt;h3&gt;
  
  
  Awesome List Of Github Repositories
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/bgoonz/awesome-4-new-developers" title="https://github.com/bgoonz/awesome-4-new-developers" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub - bgoonz/awesome-4-new-developers: Top repos for new developers all in one place&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Top repos for new developers all in one place. Contribute to bgoonz/awesome-4-new-developers development by creating an…&lt;/em&gt;github.com&lt;/a&gt;&lt;a href="https://github.com/bgoonz/awesome-4-new-developers" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F0%2APcwyXaMACrHUVng8" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F0%2APcwyXaMACrHUVng8"&gt;&lt;/a&gt;### Platforms&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="3a70"&gt;&lt;a href="https://github.com/sindresorhus/awesome-nodejs#readme" title="https://github.com/sindresorhus/awesome-nodejs#readme" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt; — Async non-blocking event-driven JavaScript runtime built on Chrome’s V8 JavaScript engine.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="598d"&gt;&lt;a href="https://github.com/bcoe/awesome-cross-platform-nodejs#readme" title="https://github.com/bcoe/awesome-cross-platform-nodejs#readme" rel="noopener noreferrer"&gt;Cross-Platform&lt;/a&gt; — Writing cross-platform code on Node.js.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2c69"&gt;&lt;a href="https://github.com/dypsilon/frontend-dev-bookmarks#readme" title="https://github.com/dypsilon/frontend-dev-bookmarks#readme" rel="noopener noreferrer"&gt;Frontend Development&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8cf1"&gt;&lt;a href="https://github.com/vsouza/awesome-ios#readme" title="https://github.com/vsouza/awesome-ios#readme" rel="noopener noreferrer"&gt;iOS&lt;/a&gt; — Mobile operating system for Apple phones and tablets.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8995"&gt;&lt;a href="https://github.com/JStumpp/awesome-android#readme" title="https://github.com/JStumpp/awesome-android#readme" rel="noopener noreferrer"&gt;Android&lt;/a&gt; — Mobile operating system developed by Google.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="90e2"&gt;&lt;a href="https://github.com/weblancaster/awesome-IoT-hybrid#readme" title="https://github.com/weblancaster/awesome-IoT-hybrid#readme" rel="noopener noreferrer"&gt;IoT &amp;amp; Hybrid Apps&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5e1d"&gt;&lt;a href="https://github.com/sindresorhus/awesome-electron#readme" title="https://github.com/sindresorhus/awesome-electron#readme" rel="noopener noreferrer"&gt;Electron&lt;/a&gt; — Cross-platform native desktop apps using JavaScript/HTML/CSS.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="ddf1"&gt;&lt;a href="https://github.com/busterc/awesome-cordova#readme" title="https://github.com/busterc/awesome-cordova#readme" rel="noopener noreferrer"&gt;Cordova&lt;/a&gt; — JavaScript API for hybrid apps.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="721a"&gt;&lt;a href="https://github.com/jondot/awesome-react-native#readme" title="https://github.com/jondot/awesome-react-native#readme" rel="noopener noreferrer"&gt;React Native&lt;/a&gt; — JavaScript framework for writing natively rendering mobile apps for iOS and Android.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6fe2"&gt;&lt;a href="https://github.com/XamSome/awesome-xamarin#readme" title="https://github.com/XamSome/awesome-xamarin#readme" rel="noopener noreferrer"&gt;Xamarin&lt;/a&gt; — Mobile app development IDE, testing, and distribution.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="de7c"&gt;&lt;a href="https://github.com/inputsh/awesome-linux#readme" title="https://github.com/inputsh/awesome-linux#readme" rel="noopener noreferrer"&gt;Linux&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5845"&gt;&lt;a href="https://github.com/Friz-zy/awesome-linux-containers#readme" title="https://github.com/Friz-zy/awesome-linux-containers#readme" rel="noopener noreferrer"&gt;Containers&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8f04"&gt;&lt;a href="https://github.com/zoidbergwill/awesome-ebpf#readme" title="https://github.com/zoidbergwill/awesome-ebpf#readme" rel="noopener noreferrer"&gt;eBPF&lt;/a&gt; — Virtual machine that allows you to write more efficient and powerful tracing and monitoring for Linux systems.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="07e4"&gt;&lt;a href="https://github.com/PandaFoss/Awesome-Arch#readme" title="https://github.com/PandaFoss/Awesome-Arch#readme" rel="noopener noreferrer"&gt;Arch-based Projects&lt;/a&gt; — Linux distributions and projects based on Arch Linux.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="360a"&gt;&lt;a href="https://github.com/iCHAIT/awesome-macOS#readme" title="https://github.com/iCHAIT/awesome-macOS#readme" rel="noopener noreferrer"&gt;macOS&lt;/a&gt; — Operating system for Apple’s Mac computers.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="4017"&gt;&lt;a href="https://github.com/herrbischoff/awesome-macos-command-line#readme" title="https://github.com/herrbischoff/awesome-macos-command-line#readme" rel="noopener noreferrer"&gt;Command-Line&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="aeef"&gt;&lt;a href="https://github.com/agarrharr/awesome-macos-screensavers#readme" title="https://github.com/agarrharr/awesome-macos-screensavers#readme" rel="noopener noreferrer"&gt;Screensavers&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8513"&gt;&lt;a href="https://github.com/jaywcjlove/awesome-mac#readme" title="https://github.com/jaywcjlove/awesome-mac#readme" rel="noopener noreferrer"&gt;Apps&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8e27"&gt;&lt;a href="https://github.com/serhii-londar/open-source-mac-os-apps#readme" title="https://github.com/serhii-londar/open-source-mac-os-apps#readme" rel="noopener noreferrer"&gt;Open Source Apps&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d9ed"&gt;&lt;a href="https://github.com/yenchenlin/awesome-watchos#readme" title="https://github.com/yenchenlin/awesome-watchos#readme" rel="noopener noreferrer"&gt;watchOS&lt;/a&gt; — Operating system for the Apple Watch.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c161"&gt;&lt;a href="https://github.com/deephacks/awesome-jvm#readme" title="https://github.com/deephacks/awesome-jvm#readme" rel="noopener noreferrer"&gt;JVM&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="08f2"&gt;&lt;a href="https://github.com/mailtoharshit/awesome-salesforce#readme" title="https://github.com/mailtoharshit/awesome-salesforce#readme" rel="noopener noreferrer"&gt;Salesforce&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6dd7"&gt;&lt;a href="https://github.com/donnemartin/awesome-aws#readme" title="https://github.com/donnemartin/awesome-aws#readme" rel="noopener noreferrer"&gt;Amazon Web Services&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1cb7"&gt;&lt;a href="https://github.com/Awesome-Windows/Awesome#readme" title="https://github.com/Awesome-Windows/Awesome#readme" rel="noopener noreferrer"&gt;Windows&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b7a9"&gt;&lt;a href="https://github.com/ipfs/awesome-ipfs#readme" title="https://github.com/ipfs/awesome-ipfs#readme" rel="noopener noreferrer"&gt;IPFS&lt;/a&gt; — P2P hypermedia protocol.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="cee6"&gt;&lt;a href="https://github.com/fuse-compound/awesome-fuse#readme" title="https://github.com/fuse-compound/awesome-fuse#readme" rel="noopener noreferrer"&gt;Fuse&lt;/a&gt; — Mobile development tools.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b042"&gt;&lt;a href="https://github.com/ianstormtaylor/awesome-heroku#readme" title="https://github.com/ianstormtaylor/awesome-heroku#readme" rel="noopener noreferrer"&gt;Heroku&lt;/a&gt; — Cloud platform as a service.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="ac17"&gt;&lt;a href="https://github.com/thibmaek/awesome-raspberry-pi#readme" title="https://github.com/thibmaek/awesome-raspberry-pi#readme" rel="noopener noreferrer"&gt;Raspberry Pi&lt;/a&gt; — Credit card-sized computer aimed at teaching kids programming, but capable of a lot more.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="856f"&gt;&lt;a href="https://github.com/JesseTG/awesome-qt#readme" title="https://github.com/JesseTG/awesome-qt#readme" rel="noopener noreferrer"&gt;Qt&lt;/a&gt; — Cross-platform GUI app framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9407"&gt;&lt;a href="https://github.com/fregante/Awesome-WebExtensions#readme" title="https://github.com/fregante/Awesome-WebExtensions#readme" rel="noopener noreferrer"&gt;WebExtensions&lt;/a&gt; — Cross-browser extension system.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9e3f"&gt;&lt;a href="https://github.com/motion-open-source/awesome-rubymotion#readme" title="https://github.com/motion-open-source/awesome-rubymotion#readme" rel="noopener noreferrer"&gt;RubyMotion&lt;/a&gt; — Write cross-platform native apps for iOS, Android, macOS, tvOS, and watchOS in Ruby.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="08be"&gt;&lt;a href="https://github.com/vitalets/awesome-smart-tv#readme" title="https://github.com/vitalets/awesome-smart-tv#readme" rel="noopener noreferrer"&gt;Smart TV&lt;/a&gt; — Create apps for different TV platforms.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1986"&gt;&lt;a href="https://github.com/Kazhnuz/awesome-gnome#readme" title="https://github.com/Kazhnuz/awesome-gnome#readme" rel="noopener noreferrer"&gt;GNOME&lt;/a&gt; — Simple and distraction-free desktop environment for Linux.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2069"&gt;&lt;a href="https://github.com/francoism90/awesome-kde#readme" title="https://github.com/francoism90/awesome-kde#readme" rel="noopener noreferrer"&gt;KDE&lt;/a&gt; — A free software community dedicated to creating an open and user-friendly computing experience.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b388"&gt;&lt;a href="https://github.com/quozd/awesome-dotnet#readme" title="https://github.com/quozd/awesome-dotnet#readme" rel="noopener noreferrer"&gt;.NET&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2688"&gt;&lt;a href="https://github.com/thangchung/awesome-dotnet-core#readme" title="https://github.com/thangchung/awesome-dotnet-core#readme" rel="noopener noreferrer"&gt;Core&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="735d"&gt;&lt;a href="https://github.com/ironcev/awesome-roslyn#readme" title="https://github.com/ironcev/awesome-roslyn#readme" rel="noopener noreferrer"&gt;Roslyn&lt;/a&gt; — Open-source compilers and code analysis APIs for C# and &lt;a href="http://VB.NET" title="http://VB.NET" rel="noopener noreferrer"&gt;VB.NET&lt;/a&gt; languages.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d9d6"&gt;&lt;a href="https://github.com/miguelmota/awesome-amazon-alexa#readme" title="https://github.com/miguelmota/awesome-amazon-alexa#readme" rel="noopener noreferrer"&gt;Amazon Alexa&lt;/a&gt; — Virtual home assistant.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e5f1"&gt;&lt;a href="https://github.com/jonleibowitz/awesome-digitalocean#readme" title="https://github.com/jonleibowitz/awesome-digitalocean#readme" rel="noopener noreferrer"&gt;DigitalOcean&lt;/a&gt; — Cloud computing platform designed for developers.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b080"&gt;&lt;a href="https://github.com/Solido/awesome-flutter#readme" title="https://github.com/Solido/awesome-flutter#readme" rel="noopener noreferrer"&gt;Flutter&lt;/a&gt; — Google’s mobile SDK for building native iOS and Android apps from a single codebase written in Dart.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e962"&gt;&lt;a href="https://github.com/frenck/awesome-home-assistant#readme" title="https://github.com/frenck/awesome-home-assistant#readme" rel="noopener noreferrer"&gt;Home Assistant&lt;/a&gt; — Open source home automation that puts local control and privacy first.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c8f1"&gt;&lt;a href="https://github.com/victorshinya/awesome-ibmcloud#readme" title="https://github.com/victorshinya/awesome-ibmcloud#readme" rel="noopener noreferrer"&gt;IBM Cloud&lt;/a&gt; — Cloud platform for developers and companies.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2bef"&gt;&lt;a href="https://github.com/jthegedus/awesome-firebase#readme" title="https://github.com/jthegedus/awesome-firebase#readme" rel="noopener noreferrer"&gt;Firebase&lt;/a&gt; — App development platform built on Google Cloud Platform.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="50aa"&gt;&lt;a href="https://github.com/fkromer/awesome-ros2#readme" title="https://github.com/fkromer/awesome-ros2#readme" rel="noopener noreferrer"&gt;Robot Operating System 2.0&lt;/a&gt; — Set of software libraries and tools that help you build robot apps.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7de4"&gt;&lt;a href="https://github.com/adafruit/awesome-adafruitio#readme" title="https://github.com/adafruit/awesome-adafruitio#readme" rel="noopener noreferrer"&gt;Adafruit IO&lt;/a&gt; — Visualize and store data from any device.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="15d4"&gt;&lt;a href="https://github.com/irazasyed/awesome-cloudflare#readme" title="https://github.com/irazasyed/awesome-cloudflare#readme" rel="noopener noreferrer"&gt;Cloudflare&lt;/a&gt; — CDN, DNS, DDoS protection, and security for your site.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="27c6"&gt;&lt;a href="https://github.com/ravirupareliya/awesome-actions-on-google#readme" title="https://github.com/ravirupareliya/awesome-actions-on-google#readme" rel="noopener noreferrer"&gt;Actions on Google&lt;/a&gt; — Developer platform for Google Assistant.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="07d6"&gt;&lt;a href="https://github.com/agucova/awesome-esp#readme" title="https://github.com/agucova/awesome-esp#readme" rel="noopener noreferrer"&gt;ESP&lt;/a&gt; — Low-cost microcontrollers with WiFi and broad IoT applications.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3240"&gt;&lt;a href="https://github.com/denolib/awesome-deno#readme" title="https://github.com/denolib/awesome-deno#readme" rel="noopener noreferrer"&gt;Deno&lt;/a&gt; — A secure runtime for JavaScript and TypeScript that uses V8 and is built in Rust.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d566"&gt;&lt;a href="https://github.com/balintkissdev/awesome-dos#readme" title="https://github.com/balintkissdev/awesome-dos#readme" rel="noopener noreferrer"&gt;DOS&lt;/a&gt; — Operating system for x86-based personal computers that was popular during the 1980s and early 1990s.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="04ee"&gt;&lt;a href="https://github.com/nix-community/awesome-nix#readme" title="https://github.com/nix-community/awesome-nix#readme" rel="noopener noreferrer"&gt;Nix&lt;/a&gt; — Package manager for Linux and other Unix systems that makes package management reliable and reproducible.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Programming Languages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="bb06"&gt;&lt;a href="https://github.com/sorrycc/awesome-javascript#readme" title="https://github.com/sorrycc/awesome-javascript#readme" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a6e2"&gt;&lt;a href="https://github.com/wbinnssmith/awesome-promises#readme" title="https://github.com/wbinnssmith/awesome-promises#readme" rel="noopener noreferrer"&gt;Promises&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0e6d"&gt;&lt;a href="https://github.com/standard/awesome-standard#readme" title="https://github.com/standard/awesome-standard#readme" rel="noopener noreferrer"&gt;Standard Style&lt;/a&gt; — Style guide and linter.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b4b6"&gt;&lt;a href="https://github.com/bolshchikov/js-must-watch#readme" title="https://github.com/bolshchikov/js-must-watch#readme" rel="noopener noreferrer"&gt;Must Watch Talks&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="cd70"&gt;&lt;a href="https://github.com/loverajoel/jstips#readme" title="https://github.com/loverajoel/jstips#readme" rel="noopener noreferrer"&gt;Tips&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="70a7"&gt;&lt;a href="https://github.com/Kikobeats/awesome-network-js#readme" title="https://github.com/Kikobeats/awesome-network-js#readme" rel="noopener noreferrer"&gt;Network Layer&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="beb9"&gt;&lt;a href="https://github.com/parro-it/awesome-micro-npm-packages#readme" title="https://github.com/parro-it/awesome-micro-npm-packages#readme" rel="noopener noreferrer"&gt;Micro npm Packages&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8421"&gt;&lt;a href="https://github.com/feross/awesome-mad-science#readme" title="https://github.com/feross/awesome-mad-science#readme" rel="noopener noreferrer"&gt;Mad Science npm Packages&lt;/a&gt; — Impossible sounding projects that exist.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="624f"&gt;&lt;a href="https://github.com/maxogden/maintenance-modules#readme" title="https://github.com/maxogden/maintenance-modules#readme" rel="noopener noreferrer"&gt;Maintenance Modules&lt;/a&gt; — For npm packages.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="72c7"&gt;&lt;a href="https://github.com/sindresorhus/awesome-npm#readme" title="https://github.com/sindresorhus/awesome-npm#readme" rel="noopener noreferrer"&gt;npm&lt;/a&gt; — Package manager.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7393"&gt;&lt;a href="https://github.com/avajs/awesome-ava#readme" title="https://github.com/avajs/awesome-ava#readme" rel="noopener noreferrer"&gt;AVA&lt;/a&gt; — Test runner.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="452a"&gt;&lt;a href="https://github.com/dustinspecker/awesome-eslint#readme" title="https://github.com/dustinspecker/awesome-eslint#readme" rel="noopener noreferrer"&gt;ESLint&lt;/a&gt; — Linter.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d045"&gt;&lt;a href="https://github.com/stoeffel/awesome-fp-js#readme" title="https://github.com/stoeffel/awesome-fp-js#readme" rel="noopener noreferrer"&gt;Functional Programming&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3eba"&gt;&lt;a href="https://github.com/sindresorhus/awesome-observables#readme" title="https://github.com/sindresorhus/awesome-observables#readme" rel="noopener noreferrer"&gt;Observables&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="48bb"&gt;&lt;a href="https://github.com/RyanZim/awesome-npm-scripts#readme" title="https://github.com/RyanZim/awesome-npm-scripts#readme" rel="noopener noreferrer"&gt;npm scripts&lt;/a&gt; — Task runner.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="32ae"&gt;&lt;a href="https://github.com/30-seconds/30-seconds-of-code#readme" title="https://github.com/30-seconds/30-seconds-of-code#readme" rel="noopener noreferrer"&gt;30 Seconds of Code&lt;/a&gt; — Code snippets you can understand in 30 seconds.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="df31"&gt;&lt;a href="https://github.com/Richienb/awesome-ponyfills#readme" title="https://github.com/Richienb/awesome-ponyfills#readme" rel="noopener noreferrer"&gt;Ponyfills&lt;/a&gt; — Like polyfills but without overriding native APIs.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b36d"&gt;&lt;a href="https://github.com/matteocrippa/awesome-swift#readme" title="https://github.com/matteocrippa/awesome-swift#readme" rel="noopener noreferrer"&gt;Swift&lt;/a&gt; — Apple’s compiled programming language that is secure, modern, programmer-friendly, and fast.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="56b5"&gt;&lt;a href="https://github.com/hsavit1/Awesome-Swift-Education#readme" title="https://github.com/hsavit1/Awesome-Swift-Education#readme" rel="noopener noreferrer"&gt;Education&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="393c"&gt;&lt;a href="https://github.com/uraimo/Awesome-Swift-Playgrounds#readme" title="https://github.com/uraimo/Awesome-Swift-Playgrounds#readme" rel="noopener noreferrer"&gt;Playgrounds&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="ff30"&gt;&lt;a href="https://github.com/vinta/awesome-python#readme" title="https://github.com/vinta/awesome-python#readme" rel="noopener noreferrer"&gt;Python&lt;/a&gt; — General-purpose programming language designed for readability.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bbf7"&gt;&lt;a href="https://github.com/timofurrer/awesome-asyncio#readme" title="https://github.com/timofurrer/awesome-asyncio#readme" rel="noopener noreferrer"&gt;Asyncio&lt;/a&gt; — Asynchronous I/O in Python 3.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b46a"&gt;&lt;a href="https://github.com/faroit/awesome-python-scientific-audio#readme" title="https://github.com/faroit/awesome-python-scientific-audio#readme" rel="noopener noreferrer"&gt;Scientific Audio&lt;/a&gt; — Scientific research in audio/music.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8a26"&gt;&lt;a href="https://github.com/adafruit/awesome-circuitpython#readme" title="https://github.com/adafruit/awesome-circuitpython#readme" rel="noopener noreferrer"&gt;CircuitPython&lt;/a&gt; — A version of Python for microcontrollers.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="62db"&gt;&lt;a href="https://github.com/krzjoa/awesome-python-data-science#readme" title="https://github.com/krzjoa/awesome-python-data-science#readme" rel="noopener noreferrer"&gt;Data Science&lt;/a&gt; — Data analysis and machine learning.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5028"&gt;&lt;a href="https://github.com/typeddjango/awesome-python-typing#readme" title="https://github.com/typeddjango/awesome-python-typing#readme" rel="noopener noreferrer"&gt;Typing&lt;/a&gt; — Optional static typing for Python.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="488f"&gt;&lt;a href="https://github.com/mcauser/awesome-micropython#readme" title="https://github.com/mcauser/awesome-micropython#readme" rel="noopener noreferrer"&gt;MicroPython&lt;/a&gt; — A lean and efficient implementation of Python 3 for microcontrollers.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c563"&gt;&lt;a href="https://github.com/rust-unofficial/awesome-rust#readme" title="https://github.com/rust-unofficial/awesome-rust#readme" rel="noopener noreferrer"&gt;Rust&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="89d6"&gt;&lt;a href="https://github.com/krispo/awesome-haskell#readme" title="https://github.com/krispo/awesome-haskell#readme" rel="noopener noreferrer"&gt;Haskell&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6bc0"&gt;&lt;a href="https://github.com/passy/awesome-purescript#readme" title="https://github.com/passy/awesome-purescript#readme" rel="noopener noreferrer"&gt;PureScript&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2c02"&gt;&lt;a href="https://github.com/avelino/awesome-go#readme" title="https://github.com/avelino/awesome-go#readme" rel="noopener noreferrer"&gt;Go&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7300"&gt;&lt;a href="https://github.com/lauris/awesome-scala#readme" title="https://github.com/lauris/awesome-scala#readme" rel="noopener noreferrer"&gt;Scala&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d22f"&gt;&lt;a href="https://github.com/tindzk/awesome-scala-native#readme" title="https://github.com/tindzk/awesome-scala-native#readme" rel="noopener noreferrer"&gt;Scala Native&lt;/a&gt; — Optimizing ahead-of-time compiler for Scala based on LLVM.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8593"&gt;&lt;a href="https://github.com/markets/awesome-ruby#readme" title="https://github.com/markets/awesome-ruby#readme" rel="noopener noreferrer"&gt;Ruby&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="eb9b"&gt;&lt;a href="https://github.com/razum2um/awesome-clojure#readme" title="https://github.com/razum2um/awesome-clojure#readme" rel="noopener noreferrer"&gt;Clojure&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e12f"&gt;&lt;a href="https://github.com/hantuzun/awesome-clojurescript#readme" title="https://github.com/hantuzun/awesome-clojurescript#readme" rel="noopener noreferrer"&gt;ClojureScript&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="748c"&gt;&lt;a href="https://github.com/h4cc/awesome-elixir#readme" title="https://github.com/h4cc/awesome-elixir#readme" rel="noopener noreferrer"&gt;Elixir&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="89b0"&gt;&lt;a href="https://github.com/sporto/awesome-elm#readme" title="https://github.com/sporto/awesome-elm#readme" rel="noopener noreferrer"&gt;Elm&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b83d"&gt;&lt;a href="https://github.com/drobakowski/awesome-erlang#readme" title="https://github.com/drobakowski/awesome-erlang#readme" rel="noopener noreferrer"&gt;Erlang&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="38d3"&gt;&lt;a href="https://github.com/svaksha/Julia.jl#readme" title="https://github.com/svaksha/Julia.jl#readme" rel="noopener noreferrer"&gt;Julia&lt;/a&gt; — High-level dynamic programming language designed to address the needs of high-performance numerical analysis and computational science.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b2f4"&gt;&lt;a href="https://github.com/LewisJEllis/awesome-lua#readme" title="https://github.com/LewisJEllis/awesome-lua#readme" rel="noopener noreferrer"&gt;Lua&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="eb25"&gt;&lt;a href="https://github.com/inputsh/awesome-c#readme" title="https://github.com/inputsh/awesome-c#readme" rel="noopener noreferrer"&gt;C&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="06f4"&gt;&lt;a href="https://github.com/fffaraz/awesome-cpp#readme" title="https://github.com/fffaraz/awesome-cpp#readme" rel="noopener noreferrer"&gt;C/C++&lt;/a&gt; — General-purpose language with a bias toward system programming and embedded, resource-constrained software.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b13b"&gt;&lt;a href="https://github.com/qinwf/awesome-R#readme" title="https://github.com/qinwf/awesome-R#readme" rel="noopener noreferrer"&gt;R&lt;/a&gt; — Functional programming language and environment for statistical computing and graphics.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8a84"&gt;&lt;a href="https://github.com/iamericfletcher/awesome-r-learning-resources#readme" title="https://github.com/iamericfletcher/awesome-r-learning-resources#readme" rel="noopener noreferrer"&gt;Learning&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="63ef"&gt;&lt;a href="https://github.com/dlang-community/awesome-d#readme" title="https://github.com/dlang-community/awesome-d#readme" rel="noopener noreferrer"&gt;D&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1cbf"&gt;&lt;a href="https://github.com/CodyReichert/awesome-cl#readme" title="https://github.com/CodyReichert/awesome-cl#readme" rel="noopener noreferrer"&gt;Common Lisp&lt;/a&gt; — Powerful dynamic multiparadigm language that facilitates iterative and interactive development.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b926"&gt;&lt;a href="https://github.com/GustavBertram/awesome-common-lisp-learning#readme" title="https://github.com/GustavBertram/awesome-common-lisp-learning#readme" rel="noopener noreferrer"&gt;Learning&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5e50"&gt;&lt;a href="https://github.com/hachiojipm/awesome-perl#readme" title="https://github.com/hachiojipm/awesome-perl#readme" rel="noopener noreferrer"&gt;Perl&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="20ef"&gt;&lt;a href="https://github.com/kdabir/awesome-groovy#readme" title="https://github.com/kdabir/awesome-groovy#readme" rel="noopener noreferrer"&gt;Groovy&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="75c5"&gt;&lt;a href="https://github.com/yissachar/awesome-dart#readme" title="https://github.com/yissachar/awesome-dart#readme" rel="noopener noreferrer"&gt;Dart&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="327e"&gt;&lt;a href="https://github.com/akullpp/awesome-java#readme" title="https://github.com/akullpp/awesome-java#readme" rel="noopener noreferrer"&gt;Java&lt;/a&gt; — Popular secure object-oriented language designed for flexibility to “write once, run anywhere”.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="aa9a"&gt;&lt;a href="https://github.com/eleventigers/awesome-rxjava#readme" title="https://github.com/eleventigers/awesome-rxjava#readme" rel="noopener noreferrer"&gt;RxJava&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="44f2"&gt;&lt;a href="https://github.com/KotlinBy/awesome-kotlin#readme" title="https://github.com/KotlinBy/awesome-kotlin#readme" rel="noopener noreferrer"&gt;Kotlin&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b8b9"&gt;&lt;a href="https://github.com/ocaml-community/awesome-ocaml#readme" title="https://github.com/ocaml-community/awesome-ocaml#readme" rel="noopener noreferrer"&gt;OCaml&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1850"&gt;&lt;a href="https://github.com/seancoyne/awesome-coldfusion#readme" title="https://github.com/seancoyne/awesome-coldfusion#readme" rel="noopener noreferrer"&gt;ColdFusion&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8daa"&gt;&lt;a href="https://github.com/rabbiabram/awesome-fortran#readme" title="https://github.com/rabbiabram/awesome-fortran#readme" rel="noopener noreferrer"&gt;Fortran&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f283"&gt;&lt;a href="https://github.com/ziadoz/awesome-php#readme" title="https://github.com/ziadoz/awesome-php#readme" rel="noopener noreferrer"&gt;PHP&lt;/a&gt; — Server-side scripting language.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="dc45"&gt;&lt;a href="https://github.com/jakoch/awesome-composer#readme" title="https://github.com/jakoch/awesome-composer#readme" rel="noopener noreferrer"&gt;Composer&lt;/a&gt; — Package manager.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="cc2b"&gt;&lt;a href="https://github.com/Fr0sT-Brutal/awesome-pascal#readme" title="https://github.com/Fr0sT-Brutal/awesome-pascal#readme" rel="noopener noreferrer"&gt;Pascal&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="504f"&gt;&lt;a href="https://github.com/ahkscript/awesome-AutoHotkey#readme" title="https://github.com/ahkscript/awesome-AutoHotkey#readme" rel="noopener noreferrer"&gt;AutoHotkey&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0a7f"&gt;&lt;a href="https://github.com/J2TeaM/awesome-AutoIt#readme" title="https://github.com/J2TeaM/awesome-AutoIt#readme" rel="noopener noreferrer"&gt;AutoIt&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f937"&gt;&lt;a href="https://github.com/veelenga/awesome-crystal#readme" title="https://github.com/veelenga/awesome-crystal#readme" rel="noopener noreferrer"&gt;Crystal&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="dee3"&gt;&lt;a href="https://github.com/sfischer13/awesome-frege#readme" title="https://github.com/sfischer13/awesome-frege#readme" rel="noopener noreferrer"&gt;Frege&lt;/a&gt; — Haskell for the JVM.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c660"&gt;&lt;a href="https://github.com/onqtam/awesome-cmake#readme" title="https://github.com/onqtam/awesome-cmake#readme" rel="noopener noreferrer"&gt;CMake&lt;/a&gt; — Build, test, and package software.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8f8c"&gt;&lt;a href="https://github.com/robinrodricks/awesome-actionscript3#readme" title="https://github.com/robinrodricks/awesome-actionscript3#readme" rel="noopener noreferrer"&gt;ActionScript 3&lt;/a&gt; — Object-oriented language targeting Adobe AIR.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d436"&gt;&lt;a href="https://github.com/sfischer13/awesome-eta#readme" title="https://github.com/sfischer13/awesome-eta#readme" rel="noopener noreferrer"&gt;Eta&lt;/a&gt; — Functional programming language for the JVM.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d230"&gt;&lt;a href="https://github.com/joaomilho/awesome-idris#readme" title="https://github.com/joaomilho/awesome-idris#readme" rel="noopener noreferrer"&gt;Idris&lt;/a&gt; — General purpose pure functional programming language with dependent types influenced by Haskell and ML.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d7d8"&gt;&lt;a href="https://github.com/ohenley/awesome-ada#readme" title="https://github.com/ohenley/awesome-ada#readme" rel="noopener noreferrer"&gt;Ada/SPARK&lt;/a&gt; — Modern programming language designed for large, long-lived apps where reliability and efficiency are essential.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5d52"&gt;&lt;a href="https://github.com/ebraminio/awesome-qsharp#readme" title="https://github.com/ebraminio/awesome-qsharp#readme" rel="noopener noreferrer"&gt;Q#&lt;/a&gt; — Domain-specific programming language used for expressing quantum algorithms.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="309c"&gt;&lt;a href="https://github.com/koolamusic/awesome-imba#readme" title="https://github.com/koolamusic/awesome-imba#readme" rel="noopener noreferrer"&gt;Imba&lt;/a&gt; — Programming language inspired by Ruby and Python and compiles to performant JavaScript.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8e89"&gt;&lt;a href="https://github.com/desiderantes/awesome-vala#readme" title="https://github.com/desiderantes/awesome-vala#readme" rel="noopener noreferrer"&gt;Vala&lt;/a&gt; — Programming language designed to take full advantage of the GLib and GNOME ecosystems, while preserving the speed of C code.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="68fe"&gt;&lt;a href="https://github.com/coq-community/awesome-coq#readme" title="https://github.com/coq-community/awesome-coq#readme" rel="noopener noreferrer"&gt;Coq&lt;/a&gt; — Formal language and environment for programming and specification which facilitates interactive development of machine-checked proofs.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0d5c"&gt;&lt;a href="https://github.com/vlang/awesome-v#readme" title="https://github.com/vlang/awesome-v#readme" rel="noopener noreferrer"&gt;V&lt;/a&gt; — Simple, fast, safe, compiled language for developing maintainable software.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Front-End Development
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="59c2"&gt;&lt;a href="https://github.com/addyosmani/es6-tools#readme" title="https://github.com/addyosmani/es6-tools#readme" rel="noopener noreferrer"&gt;ES6 Tools&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c665"&gt;&lt;a href="https://github.com/davidsonfellipe/awesome-wpo#readme" title="https://github.com/davidsonfellipe/awesome-wpo#readme" rel="noopener noreferrer"&gt;Web Performance Optimization&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="95a9"&gt;&lt;a href="https://github.com/lvwzhen/tools#readme" title="https://github.com/lvwzhen/tools#readme" rel="noopener noreferrer"&gt;Web Tools&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e1c6"&gt;&lt;a href="https://github.com/awesome-css-group/awesome-css#readme" title="https://github.com/awesome-css-group/awesome-css#readme" rel="noopener noreferrer"&gt;CSS&lt;/a&gt; — Style sheet language that specifies how HTML elements are displayed on screen.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e515"&gt;&lt;a href="https://github.com/addyosmani/critical-path-css-tools#readme" title="https://github.com/addyosmani/critical-path-css-tools#readme" rel="noopener noreferrer"&gt;Critical-Path Tools&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="64f0"&gt;&lt;a href="https://github.com/davidtheclark/scalable-css-reading-list#readme" title="https://github.com/davidtheclark/scalable-css-reading-list#readme" rel="noopener noreferrer"&gt;Scalability&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="82b1"&gt;&lt;a href="https://github.com/AllThingsSmitty/must-watch-css#readme" title="https://github.com/AllThingsSmitty/must-watch-css#readme" rel="noopener noreferrer"&gt;Must-Watch Talks&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f6e0"&gt;&lt;a href="https://github.com/AllThingsSmitty/css-protips#readme" title="https://github.com/AllThingsSmitty/css-protips#readme" rel="noopener noreferrer"&gt;Protips&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="85d1"&gt;&lt;a href="https://github.com/troxler/awesome-css-frameworks#readme" title="https://github.com/troxler/awesome-css-frameworks#readme" rel="noopener noreferrer"&gt;Frameworks&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bb01"&gt;&lt;a href="https://github.com/enaqx/awesome-react#readme" title="https://github.com/enaqx/awesome-react#readme" rel="noopener noreferrer"&gt;React&lt;/a&gt; — App framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="880b"&gt;&lt;a href="https://github.com/expede/awesome-relay#readme" title="https://github.com/expede/awesome-relay#readme" rel="noopener noreferrer"&gt;Relay&lt;/a&gt; — Framework for building data-driven React apps.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="246a"&gt;&lt;a href="https://github.com/glauberfc/awesome-react-hooks#readme" title="https://github.com/glauberfc/awesome-react-hooks#readme" rel="noopener noreferrer"&gt;React Hooks&lt;/a&gt; — A new feature that lets you use state and other React features without writing a class.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="ae23"&gt;&lt;a href="https://github.com/mateusortiz/webcomponents-the-right-way#readme" title="https://github.com/mateusortiz/webcomponents-the-right-way#readme" rel="noopener noreferrer"&gt;Web Components&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="ac3c"&gt;&lt;a href="https://github.com/Granze/awesome-polymer#readme" title="https://github.com/Granze/awesome-polymer#readme" rel="noopener noreferrer"&gt;Polymer&lt;/a&gt; — JavaScript library to develop Web Components.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6308"&gt;&lt;a href="https://github.com/PatrickJS/awesome-angular#readme" title="https://github.com/PatrickJS/awesome-angular#readme" rel="noopener noreferrer"&gt;Angular&lt;/a&gt; — App framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="79fa"&gt;&lt;a href="https://github.com/sadcitizen/awesome-backbone#readme" title="https://github.com/sadcitizen/awesome-backbone#readme" rel="noopener noreferrer"&gt;Backbone&lt;/a&gt; — App framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="aac9"&gt;&lt;a href="https://github.com/diegocard/awesome-html5#readme" title="https://github.com/diegocard/awesome-html5#readme" rel="noopener noreferrer"&gt;HTML5&lt;/a&gt; — Markup language used for websites &amp;amp; web apps.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c128"&gt;&lt;a href="https://github.com/willianjusten/awesome-svg#readme" title="https://github.com/willianjusten/awesome-svg#readme" rel="noopener noreferrer"&gt;SVG&lt;/a&gt; — XML-based vector image format.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="fb8a"&gt;&lt;a href="https://github.com/raphamorim/awesome-canvas#readme" title="https://github.com/raphamorim/awesome-canvas#readme" rel="noopener noreferrer"&gt;Canvas&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6081"&gt;&lt;a href="https://github.com/dnbard/awesome-knockout#readme" title="https://github.com/dnbard/awesome-knockout#readme" rel="noopener noreferrer"&gt;KnockoutJS&lt;/a&gt; — JavaScript library.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a121"&gt;&lt;a href="https://github.com/petk/awesome-dojo#readme" title="https://github.com/petk/awesome-dojo#readme" rel="noopener noreferrer"&gt;Dojo Toolkit&lt;/a&gt; — JavaScript toolkit.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8c2c"&gt;&lt;a href="https://github.com/NoahBuscher/Inspire#readme" title="https://github.com/NoahBuscher/Inspire#readme" rel="noopener noreferrer"&gt;Inspiration&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1a6c"&gt;&lt;a href="https://github.com/ember-community-russia/awesome-ember#readme" title="https://github.com/ember-community-russia/awesome-ember#readme" rel="noopener noreferrer"&gt;Ember&lt;/a&gt; — App framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7121"&gt;&lt;a href="https://github.com/wasabeef/awesome-android-ui#readme" title="https://github.com/wasabeef/awesome-android-ui#readme" rel="noopener noreferrer"&gt;Android UI&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7921"&gt;&lt;a href="https://github.com/cjwirth/awesome-ios-ui#readme" title="https://github.com/cjwirth/awesome-ios-ui#readme" rel="noopener noreferrer"&gt;iOS UI&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="46de"&gt;&lt;a href="https://github.com/Urigo/awesome-meteor#readme" title="https://github.com/Urigo/awesome-meteor#readme" rel="noopener noreferrer"&gt;Meteor&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9292"&gt;&lt;a href="https://github.com/sturobson/BEM-resources#readme" title="https://github.com/sturobson/BEM-resources#readme" rel="noopener noreferrer"&gt;BEM&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2582"&gt;&lt;a href="https://github.com/afonsopacifer/awesome-flexbox#readme" title="https://github.com/afonsopacifer/awesome-flexbox#readme" rel="noopener noreferrer"&gt;Flexbox&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c947"&gt;&lt;a href="https://github.com/deanhume/typography#readme" title="https://github.com/deanhume/typography#readme" rel="noopener noreferrer"&gt;Web Typography&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="82a1"&gt;&lt;a href="https://github.com/brunopulis/awesome-a11y#readme" title="https://github.com/brunopulis/awesome-a11y#readme" rel="noopener noreferrer"&gt;Web Accessibility&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="64c2"&gt;&lt;a href="https://github.com/sachin1092/awesome-material#readme" title="https://github.com/sachin1092/awesome-material#readme" rel="noopener noreferrer"&gt;Material Design&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e5f8"&gt;&lt;a href="https://github.com/wbkd/awesome-d3#readme" title="https://github.com/wbkd/awesome-d3#readme" rel="noopener noreferrer"&gt;D3&lt;/a&gt; — Library for producing dynamic, interactive data visualizations.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="247e"&gt;&lt;a href="https://github.com/jonathandion/awesome-emails#readme" title="https://github.com/jonathandion/awesome-emails#readme" rel="noopener noreferrer"&gt;Emails&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7d6a"&gt;&lt;a href="https://github.com/petk/awesome-jquery#readme" title="https://github.com/petk/awesome-jquery#readme" rel="noopener noreferrer"&gt;jQuery&lt;/a&gt; — Easy to use JavaScript library for DOM manipulation.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7d64"&gt;&lt;a href="https://github.com/AllThingsSmitty/jquery-tips-everyone-should-know#readme" title="https://github.com/AllThingsSmitty/jquery-tips-everyone-should-know#readme" rel="noopener noreferrer"&gt;Tips&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5626"&gt;&lt;a href="https://github.com/notthetup/awesome-webaudio#readme" title="https://github.com/notthetup/awesome-webaudio#readme" rel="noopener noreferrer"&gt;Web Audio&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7a0d"&gt;&lt;a href="https://github.com/pazguille/offline-first#readme" title="https://github.com/pazguille/offline-first#readme" rel="noopener noreferrer"&gt;Offline-First&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0559"&gt;&lt;a href="https://github.com/agarrharr/awesome-static-website-services#readme" title="https://github.com/agarrharr/awesome-static-website-services#readme" rel="noopener noreferrer"&gt;Static Website Services&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="13d8"&gt;&lt;a href="https://github.com/cyclejs-community/awesome-cyclejs#readme" title="https://github.com/cyclejs-community/awesome-cyclejs#readme" rel="noopener noreferrer"&gt;Cycle.js&lt;/a&gt; — Functional and reactive JavaScript framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1016"&gt;&lt;a href="https://github.com/dok/awesome-text-editing#readme" title="https://github.com/dok/awesome-text-editing#readme" rel="noopener noreferrer"&gt;Text Editing&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a5e6"&gt;&lt;a href="https://github.com/fliptheweb/motion-ui-design#readme" title="https://github.com/fliptheweb/motion-ui-design#readme" rel="noopener noreferrer"&gt;Motion UI Design&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="35a0"&gt;&lt;a href="https://github.com/vuejs/awesome-vue#readme" title="https://github.com/vuejs/awesome-vue#readme" rel="noopener noreferrer"&gt;Vue.js&lt;/a&gt; — App framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f894"&gt;&lt;a href="https://github.com/sadcitizen/awesome-marionette#readme" title="https://github.com/sadcitizen/awesome-marionette#readme" rel="noopener noreferrer"&gt;Marionette.js&lt;/a&gt; — App framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9c1a"&gt;&lt;a href="https://github.com/aurelia-contrib/awesome-aurelia#readme" title="https://github.com/aurelia-contrib/awesome-aurelia#readme" rel="noopener noreferrer"&gt;Aurelia&lt;/a&gt; — App framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9ce5"&gt;&lt;a href="https://github.com/zingchart/awesome-charting#readme" title="https://github.com/zingchart/awesome-charting#readme" rel="noopener noreferrer"&gt;Charting&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="4f20"&gt;&lt;a href="https://github.com/candelibas/awesome-ionic#readme" title="https://github.com/candelibas/awesome-ionic#readme" rel="noopener noreferrer"&gt;Ionic Framework 2&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5c6e"&gt;&lt;a href="https://github.com/ChromeDevTools/awesome-chrome-devtools#readme" title="https://github.com/ChromeDevTools/awesome-chrome-devtools#readme" rel="noopener noreferrer"&gt;Chrome DevTools&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="502e"&gt;&lt;a href="https://github.com/jdrgomes/awesome-postcss#readme" title="https://github.com/jdrgomes/awesome-postcss#readme" rel="noopener noreferrer"&gt;PostCSS&lt;/a&gt; — CSS tool.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b854"&gt;&lt;a href="https://github.com/nikgraf/awesome-draft-js#readme" title="https://github.com/nikgraf/awesome-draft-js#readme" rel="noopener noreferrer"&gt;Draft.js&lt;/a&gt; — Rich text editor framework for React.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="28c2"&gt;&lt;a href="https://github.com/TalAter/awesome-service-workers#readme" title="https://github.com/TalAter/awesome-service-workers#readme" rel="noopener noreferrer"&gt;Service Workers&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="279c"&gt;&lt;a href="https://github.com/TalAter/awesome-progressive-web-apps#readme" title="https://github.com/TalAter/awesome-progressive-web-apps#readme" rel="noopener noreferrer"&gt;Progressive Web Apps&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f72c"&gt;&lt;a href="https://github.com/choojs/awesome-choo#readme" title="https://github.com/choojs/awesome-choo#readme" rel="noopener noreferrer"&gt;choo&lt;/a&gt; — App framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5fd2"&gt;&lt;a href="https://github.com/brillout/awesome-redux#readme" title="https://github.com/brillout/awesome-redux#readme" rel="noopener noreferrer"&gt;Redux&lt;/a&gt; — State container for JavaScript apps.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3c7b"&gt;&lt;a href="https://github.com/webpack-contrib/awesome-webpack#readme" title="https://github.com/webpack-contrib/awesome-webpack#readme" rel="noopener noreferrer"&gt;webpack&lt;/a&gt; — Module bundler.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f9b0"&gt;&lt;a href="https://github.com/browserify/awesome-browserify#readme" title="https://github.com/browserify/awesome-browserify#readme" rel="noopener noreferrer"&gt;Browserify&lt;/a&gt; — Module bundler.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2d82"&gt;&lt;a href="https://github.com/Famolus/awesome-sass#readme" title="https://github.com/Famolus/awesome-sass#readme" rel="noopener noreferrer"&gt;Sass&lt;/a&gt; — CSS preprocessor.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f5fb"&gt;&lt;a href="https://github.com/websemantics/awesome-ant-design#readme" title="https://github.com/websemantics/awesome-ant-design#readme" rel="noopener noreferrer"&gt;Ant Design&lt;/a&gt; — Enterprise-class UI design language.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2d5c"&gt;&lt;a href="https://github.com/LucasBassetti/awesome-less#readme" title="https://github.com/LucasBassetti/awesome-less#readme" rel="noopener noreferrer"&gt;Less&lt;/a&gt; — CSS preprocessor.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="36ba"&gt;&lt;a href="https://github.com/sjfricke/awesome-webgl#readme" title="https://github.com/sjfricke/awesome-webgl#readme" rel="noopener noreferrer"&gt;WebGL&lt;/a&gt; — JavaScript API for rendering 3D graphics.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d23e"&gt;&lt;a href="https://github.com/preactjs/awesome-preact#readme" title="https://github.com/preactjs/awesome-preact#readme" rel="noopener noreferrer"&gt;Preact&lt;/a&gt; — App framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7058"&gt;&lt;a href="https://github.com/jbmoelker/progressive-enhancement-resources#readme" title="https://github.com/jbmoelker/progressive-enhancement-resources#readme" rel="noopener noreferrer"&gt;Progressive Enhancement&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="fc54"&gt;&lt;a href="https://github.com/unicodeveloper/awesome-nextjs#readme" title="https://github.com/unicodeveloper/awesome-nextjs#readme" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; — Framework for server-rendered React apps.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6d2a"&gt;&lt;a href="https://github.com/web-padawan/awesome-lit-html#readme" title="https://github.com/web-padawan/awesome-lit-html#readme" rel="noopener noreferrer"&gt;lit-html&lt;/a&gt; — HTML templating library for JavaScript.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="314d"&gt;&lt;a href="https://github.com/automata/awesome-jamstack#readme" title="https://github.com/automata/awesome-jamstack#readme" rel="noopener noreferrer"&gt;JAMstack&lt;/a&gt; — Modern web development architecture based on client-side JavaScript, reusable APIs, and prebuilt markup.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a4d8"&gt;&lt;a href="https://github.com/henrikwirth/awesome-wordpress-gatsby#readme" title="https://github.com/henrikwirth/awesome-wordpress-gatsby#readme" rel="noopener noreferrer"&gt;WordPress-Gatsby&lt;/a&gt; — Web development technology stack with WordPress as a back end and Gatsby as a front end.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="ac24"&gt;&lt;a href="https://github.com/myshov/awesome-mobile-web-development#readme" title="https://github.com/myshov/awesome-mobile-web-development#readme" rel="noopener noreferrer"&gt;Mobile Web Development&lt;/a&gt; — Creating a great mobile web experience.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="333f"&gt;&lt;a href="https://github.com/lauthieb/awesome-storybook#readme" title="https://github.com/lauthieb/awesome-storybook#readme" rel="noopener noreferrer"&gt;Storybook&lt;/a&gt; — Development environment for UI components.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c2e9"&gt;&lt;a href="https://github.com/AdrienTorris/awesome-blazor#readme" title="https://github.com/AdrienTorris/awesome-blazor#readme" rel="noopener noreferrer"&gt;Blazor&lt;/a&gt; — .NET web framework using C#/Razor and HTML that runs in the browser with WebAssembly.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2cf9"&gt;&lt;a href="https://github.com/csabapalfi/awesome-pagespeed-metrics#readme" title="https://github.com/csabapalfi/awesome-pagespeed-metrics#readme" rel="noopener noreferrer"&gt;PageSpeed Metrics&lt;/a&gt; — Metrics to help understand page speed and user experience.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="82e6"&gt;&lt;a href="https://github.com/aniftyco/awesome-tailwindcss#readme" title="https://github.com/aniftyco/awesome-tailwindcss#readme" rel="noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt; — Utility-first CSS framework for rapid UI development.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0177"&gt;&lt;a href="https://github.com/seed-rs/awesome-seed-rs#readme" title="https://github.com/seed-rs/awesome-seed-rs#readme" rel="noopener noreferrer"&gt;Seed&lt;/a&gt; — Rust framework for creating web apps running in WebAssembly.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bb96"&gt;&lt;a href="https://github.com/pajaydev/awesome-web-performance-budget#readme" title="https://github.com/pajaydev/awesome-web-performance-budget#readme" rel="noopener noreferrer"&gt;Web Performance Budget&lt;/a&gt; — Techniques to ensure certain performance metrics for a website.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0fd0"&gt;&lt;a href="https://github.com/sergey-pimenov/awesome-web-animation#readme" title="https://github.com/sergey-pimenov/awesome-web-animation#readme" rel="noopener noreferrer"&gt;Web Animation&lt;/a&gt; — Animations in the browser with JavaScript, CSS, SVG, etc.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3453"&gt;&lt;a href="https://github.com/jetli/awesome-yew#readme" title="https://github.com/jetli/awesome-yew#readme" rel="noopener noreferrer"&gt;Yew&lt;/a&gt; — Rust framework inspired by Elm and React for creating multi-threaded frontend web apps with WebAssembly.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8f7f"&gt;&lt;a href="https://github.com/nadunindunil/awesome-material-ui#readme" title="https://github.com/nadunindunil/awesome-material-ui#readme" rel="noopener noreferrer"&gt;Material-UI&lt;/a&gt; — Material Design React components for faster and easier web development.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f696"&gt;&lt;a href="https://github.com/componently-com/awesome-building-blocks-for-web-apps#readme" title="https://github.com/componently-com/awesome-building-blocks-for-web-apps#readme" rel="noopener noreferrer"&gt;Building Blocks for Web Apps&lt;/a&gt; — Standalone features to be integrated into web apps.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="580f"&gt;&lt;a href="https://github.com/TheComputerM/awesome-svelte#readme" title="https://github.com/TheComputerM/awesome-svelte#readme" rel="noopener noreferrer"&gt;Svelte&lt;/a&gt; — App framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9d9f"&gt;&lt;a href="https://github.com/klaufel/awesome-design-systems#readme" title="https://github.com/klaufel/awesome-design-systems#readme" rel="noopener noreferrer"&gt;Design systems&lt;/a&gt; — Collection of reusable components, guided by rules that ensure consistency and speed.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="91dd"&gt;&lt;a href="https://github.com/innocenzi/awesome-inertiajs#readme" title="https://github.com/innocenzi/awesome-inertiajs#readme" rel="noopener noreferrer"&gt;Inertia.js&lt;/a&gt; — Make single-page apps without building an API.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="43e0"&gt;&lt;a href="https://github.com/mdbootstrap/awesome-mdbootstrap#readme" title="https://github.com/mdbootstrap/awesome-mdbootstrap#readme" rel="noopener noreferrer"&gt;MDBootstrap&lt;/a&gt; — Templates, layouts, components, and widgets to rapidly build websites.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Back-End Development
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="69b3"&gt;&lt;a href="https://github.com/mjhea0/awesome-flask#readme" title="https://github.com/mjhea0/awesome-flask#readme" rel="noopener noreferrer"&gt;Flask&lt;/a&gt; — Python framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="09bc"&gt;&lt;a href="https://github.com/veggiemonk/awesome-docker#readme" title="https://github.com/veggiemonk/awesome-docker#readme" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="aec1"&gt;&lt;a href="https://github.com/iJackUA/awesome-vagrant#readme" title="https://github.com/iJackUA/awesome-vagrant#readme" rel="noopener noreferrer"&gt;Vagrant&lt;/a&gt; — Automation virtual machine environment.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1db6"&gt;&lt;a href="https://github.com/uralbash/awesome-pyramid#readme" title="https://github.com/uralbash/awesome-pyramid#readme" rel="noopener noreferrer"&gt;Pyramid&lt;/a&gt; — Python framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="4a3f"&gt;&lt;a href="https://github.com/PerfectCarl/awesome-play1#readme" title="https://github.com/PerfectCarl/awesome-play1#readme" rel="noopener noreferrer"&gt;Play1 Framework&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c093"&gt;&lt;a href="https://github.com/friendsofcake/awesome-cakephp#readme" title="https://github.com/friendsofcake/awesome-cakephp#readme" rel="noopener noreferrer"&gt;CakePHP&lt;/a&gt; — PHP framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3d7a"&gt;&lt;a href="https://github.com/sitepoint-editors/awesome-symfony#readme" title="https://github.com/sitepoint-editors/awesome-symfony#readme" rel="noopener noreferrer"&gt;Symfony&lt;/a&gt; — PHP framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d500"&gt;&lt;a href="https://github.com/pehapkari/awesome-symfony-education#readme" title="https://github.com/pehapkari/awesome-symfony-education#readme" rel="noopener noreferrer"&gt;Education&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9131"&gt;&lt;a href="https://github.com/chiraggude/awesome-laravel#readme" title="https://github.com/chiraggude/awesome-laravel#readme" rel="noopener noreferrer"&gt;Laravel&lt;/a&gt; — PHP framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="fab8"&gt;&lt;a href="https://github.com/fukuball/Awesome-Laravel-Education#readme" title="https://github.com/fukuball/Awesome-Laravel-Education#readme" rel="noopener noreferrer"&gt;Education&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0143"&gt;&lt;a href="https://github.com/blade-ui-kit/awesome-tall-stack#readme" title="https://github.com/blade-ui-kit/awesome-tall-stack#readme" rel="noopener noreferrer"&gt;TALL Stack&lt;/a&gt; — Full-stack development solution featuring libraries built by the Laravel community.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bc45"&gt;&lt;a href="https://github.com/gramantin/awesome-rails#readme" title="https://github.com/gramantin/awesome-rails#readme" rel="noopener noreferrer"&gt;Rails&lt;/a&gt; — Web app framework for Ruby.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9591"&gt;&lt;a href="https://github.com/hothero/awesome-rails-gem#readme" title="https://github.com/hothero/awesome-rails-gem#readme" rel="noopener noreferrer"&gt;Gems&lt;/a&gt; — Packages.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0eb4"&gt;&lt;a href="https://github.com/phalcon/awesome-phalcon#readme" title="https://github.com/phalcon/awesome-phalcon#readme" rel="noopener noreferrer"&gt;Phalcon&lt;/a&gt; — PHP framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b168"&gt;&lt;a href="https://github.com/phanan/htaccess#readme" title="https://github.com/phanan/htaccess#readme" rel="noopener noreferrer"&gt;Useful &lt;/a&gt;&lt;code&gt;.htaccess&lt;/code&gt; &lt;a href="https://github.com/phanan/htaccess#readme" title="https://github.com/phanan/htaccess#readme" rel="noopener noreferrer"&gt;Snippets&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5664"&gt;&lt;a href="https://github.com/fcambus/nginx-resources#readme" title="https://github.com/fcambus/nginx-resources#readme" rel="noopener noreferrer"&gt;nginx&lt;/a&gt; — Web server.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c8c5"&gt;&lt;a href="https://github.com/stve/awesome-dropwizard#readme" title="https://github.com/stve/awesome-dropwizard#readme" rel="noopener noreferrer"&gt;Dropwizard&lt;/a&gt; — Java framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="62b8"&gt;&lt;a href="https://github.com/ramitsurana/awesome-kubernetes#readme" title="https://github.com/ramitsurana/awesome-kubernetes#readme" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt; — Open-source platform that automates Linux container operations.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1d48"&gt;&lt;a href="https://github.com/unicodeveloper/awesome-lumen#readme" title="https://github.com/unicodeveloper/awesome-lumen#readme" rel="noopener noreferrer"&gt;Lumen&lt;/a&gt; — PHP micro-framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3a99"&gt;&lt;a href="https://github.com/pmuens/awesome-serverless#readme" title="https://github.com/pmuens/awesome-serverless#readme" rel="noopener noreferrer"&gt;Serverless Framework&lt;/a&gt; — Serverless computing and serverless architectures.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3829"&gt;&lt;a href="https://github.com/PhantomYdn/awesome-wicket#readme" title="https://github.com/PhantomYdn/awesome-wicket#readme" rel="noopener noreferrer"&gt;Apache Wicket&lt;/a&gt; — Java web app framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="451f"&gt;&lt;a href="https://github.com/vert-x3/vertx-awesome#readme" title="https://github.com/vert-x3/vertx-awesome#readme" rel="noopener noreferrer"&gt;Vert.x&lt;/a&gt; — Toolkit for building reactive apps on the JVM.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2262"&gt;&lt;a href="https://github.com/shuaibiyy/awesome-terraform#readme" title="https://github.com/shuaibiyy/awesome-terraform#readme" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt; — Tool for building, changing, and versioning infrastructure.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="43ef"&gt;&lt;a href="https://github.com/Cellane/awesome-vapor#readme" title="https://github.com/Cellane/awesome-vapor#readme" rel="noopener noreferrer"&gt;Vapor&lt;/a&gt; — Server-side development in Swift.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="4916"&gt;&lt;a href="https://github.com/ucg8j/awesome-dash#readme" title="https://github.com/ucg8j/awesome-dash#readme" rel="noopener noreferrer"&gt;Dash&lt;/a&gt; — Python web app framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="cbc1"&gt;&lt;a href="https://github.com/mjhea0/awesome-fastapi#readme" title="https://github.com/mjhea0/awesome-fastapi#readme" rel="noopener noreferrer"&gt;FastAPI&lt;/a&gt; — Python web app framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e871"&gt;&lt;a href="https://github.com/kolomied/awesome-cdk#readme" title="https://github.com/kolomied/awesome-cdk#readme" rel="noopener noreferrer"&gt;CDK&lt;/a&gt; — Open-source software development framework for defining cloud infrastructure in code.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2426"&gt;&lt;a href="https://github.com/kdeldycke/awesome-iam#readme" title="https://github.com/kdeldycke/awesome-iam#readme" rel="noopener noreferrer"&gt;IAM&lt;/a&gt; — User accounts, authentication and authorization.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Computer Science
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="338f"&gt;&lt;a href="https://github.com/prakhar1989/awesome-courses#readme" title="https://github.com/prakhar1989/awesome-courses#readme" rel="noopener noreferrer"&gt;University Courses&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9eda"&gt;&lt;a href="https://github.com/academic/awesome-datascience#readme" title="https://github.com/academic/awesome-datascience#readme" rel="noopener noreferrer"&gt;Data Science&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="35c4"&gt;&lt;a href="https://github.com/siboehm/awesome-learn-datascience#readme" title="https://github.com/siboehm/awesome-learn-datascience#readme" rel="noopener noreferrer"&gt;Tutorials&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5a39"&gt;&lt;a href="https://github.com/josephmisiti/awesome-machine-learning#readme" title="https://github.com/josephmisiti/awesome-machine-learning#readme" rel="noopener noreferrer"&gt;Machine Learning&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="84c4"&gt;&lt;a href="https://github.com/ujjwalkarn/Machine-Learning-Tutorials#readme" title="https://github.com/ujjwalkarn/Machine-Learning-Tutorials#readme" rel="noopener noreferrer"&gt;Tutorials&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e5db"&gt;&lt;a href="https://github.com/arbox/machine-learning-with-ruby#readme" title="https://github.com/arbox/machine-learning-with-ruby#readme" rel="noopener noreferrer"&gt;ML with Ruby&lt;/a&gt; — Learning, implementing, and applying Machine Learning using Ruby.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8670"&gt;&lt;a href="https://github.com/likedan/Awesome-CoreML-Models#readme" title="https://github.com/likedan/Awesome-CoreML-Models#readme" rel="noopener noreferrer"&gt;Core ML Models&lt;/a&gt; — Models for Apple’s machine learning framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c5ee"&gt;&lt;a href="https://github.com/h2oai/awesome-h2o#readme" title="https://github.com/h2oai/awesome-h2o#readme" rel="noopener noreferrer"&gt;H2O&lt;/a&gt; — Open source distributed machine learning platform written in Java with APIs in R, Python, and Scala.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a5bd"&gt;&lt;a href="https://github.com/SE-ML/awesome-seml#readme" title="https://github.com/SE-ML/awesome-seml#readme" rel="noopener noreferrer"&gt;Software Engineering for Machine Learning&lt;/a&gt; — From experiment to production-level machine learning.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="ec21"&gt;&lt;a href="https://github.com/georgezouq/awesome-ai-in-finance#readme" title="https://github.com/georgezouq/awesome-ai-in-finance#readme" rel="noopener noreferrer"&gt;AI in Finance&lt;/a&gt; — Solving problems in finance with machine learning.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="db29"&gt;&lt;a href="https://github.com/n2cholas/awesome-jax#readme" title="https://github.com/n2cholas/awesome-jax#readme" rel="noopener noreferrer"&gt;JAX&lt;/a&gt; — Automatic differentiation and XLA compilation brought together for high-performance machine learning research.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="fc4c"&gt;&lt;a href="https://github.com/altamiracorp/awesome-xai#readme" title="https://github.com/altamiracorp/awesome-xai#readme" rel="noopener noreferrer"&gt;XAI&lt;/a&gt; — Providing insight, explanations, and interpretability to machine learning methods.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5323"&gt;&lt;a href="https://github.com/edobashira/speech-language-processing#readme" title="https://github.com/edobashira/speech-language-processing#readme" rel="noopener noreferrer"&gt;Speech and Natural Language Processing&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b307"&gt;&lt;a href="https://github.com/dav009/awesome-spanish-nlp#readme" title="https://github.com/dav009/awesome-spanish-nlp#readme" rel="noopener noreferrer"&gt;Spanish&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c414"&gt;&lt;a href="https://github.com/arbox/nlp-with-ruby#readme" title="https://github.com/arbox/nlp-with-ruby#readme" rel="noopener noreferrer"&gt;NLP with Ruby&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1fcd"&gt;&lt;a href="https://github.com/seriousran/awesome-qa#readme" title="https://github.com/seriousran/awesome-qa#readme" rel="noopener noreferrer"&gt;Question Answering&lt;/a&gt; — The science of asking and answering in natural language with a machine.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="930b"&gt;&lt;a href="https://github.com/tokenmill/awesome-nlg#readme" title="https://github.com/tokenmill/awesome-nlg#readme" rel="noopener noreferrer"&gt;Natural Language Generation&lt;/a&gt; — Generation of text used in data to text, conversational agents, and narrative generation applications.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="37d9"&gt;&lt;a href="https://github.com/theimpossibleastronaut/awesome-linguistics#readme" title="https://github.com/theimpossibleastronaut/awesome-linguistics#readme" rel="noopener noreferrer"&gt;Linguistics&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="fba8"&gt;&lt;a href="https://github.com/sobolevn/awesome-cryptography#readme" title="https://github.com/sobolevn/awesome-cryptography#readme" rel="noopener noreferrer"&gt;Cryptography&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="96e8"&gt;&lt;a href="https://github.com/pFarb/awesome-crypto-papers#readme" title="https://github.com/pFarb/awesome-crypto-papers#readme" rel="noopener noreferrer"&gt;Papers&lt;/a&gt; — Theory basics for using cryptography by non-cryptographers.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="68cf"&gt;&lt;a href="https://github.com/jbhuang0604/awesome-computer-vision#readme" title="https://github.com/jbhuang0604/awesome-computer-vision#readme" rel="noopener noreferrer"&gt;Computer Vision&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7c95"&gt;&lt;a href="https://github.com/ChristosChristofidis/awesome-deep-learning#readme" title="https://github.com/ChristosChristofidis/awesome-deep-learning#readme" rel="noopener noreferrer"&gt;Deep Learning&lt;/a&gt; — Neural networks.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a7b6"&gt;&lt;a href="https://github.com/jtoy/awesome-tensorflow#readme" title="https://github.com/jtoy/awesome-tensorflow#readme" rel="noopener noreferrer"&gt;TensorFlow&lt;/a&gt; — Library for machine intelligence.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5143"&gt;&lt;a href="https://github.com/aaronhma/awesome-tensorflow-js#readme" title="https://github.com/aaronhma/awesome-tensorflow-js#readme" rel="noopener noreferrer"&gt;TensorFlow.js&lt;/a&gt; — WebGL-accelerated machine learning JavaScript library for training and deploying models.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0a2a"&gt;&lt;a href="https://github.com/margaretmz/awesome-tensorflow-lite#readme" title="https://github.com/margaretmz/awesome-tensorflow-lite#readme" rel="noopener noreferrer"&gt;TensorFlow Lite&lt;/a&gt; — Framework that optimizes TensorFlow models for on-device machine learning.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bd9c"&gt;&lt;a href="https://github.com/terryum/awesome-deep-learning-papers#readme" title="https://github.com/terryum/awesome-deep-learning-papers#readme" rel="noopener noreferrer"&gt;Papers&lt;/a&gt; — The most cited deep learning papers.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="47e6"&gt;&lt;a href="https://github.com/guillaume-chevalier/awesome-deep-learning-resources#readme" title="https://github.com/guillaume-chevalier/awesome-deep-learning-resources#readme" rel="noopener noreferrer"&gt;Education&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="fd0a"&gt;&lt;a href="https://github.com/kjw0612/awesome-deep-vision#readme" title="https://github.com/kjw0612/awesome-deep-vision#readme" rel="noopener noreferrer"&gt;Deep Vision&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2a4a"&gt;&lt;a href="https://github.com/ossu/computer-science#readme" title="https://github.com/ossu/computer-science#readme" rel="noopener noreferrer"&gt;Open Source Society University&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e7ad"&gt;&lt;a href="https://github.com/lucasviola/awesome-functional-programming#readme" title="https://github.com/lucasviola/awesome-functional-programming#readme" rel="noopener noreferrer"&gt;Functional Programming&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1a7d"&gt;&lt;a href="https://github.com/dspinellis/awesome-msr#readme" title="https://github.com/dspinellis/awesome-msr#readme" rel="noopener noreferrer"&gt;Empirical Software Engineering&lt;/a&gt; — Evidence-based research on software systems.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2dea"&gt;&lt;a href="https://github.com/analysis-tools-dev/static-analysis#readme" title="https://github.com/analysis-tools-dev/static-analysis#readme" rel="noopener noreferrer"&gt;Static Analysis &amp;amp; Code Quality&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="774a"&gt;&lt;a href="https://github.com/harpribot/awesome-information-retrieval#readme" title="https://github.com/harpribot/awesome-information-retrieval#readme" rel="noopener noreferrer"&gt;Information Retrieval&lt;/a&gt; — Learn to develop your own search engine.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="108f"&gt;&lt;a href="https://github.com/desireevl/awesome-quantum-computing#readme" title="https://github.com/desireevl/awesome-quantum-computing#readme" rel="noopener noreferrer"&gt;Quantum Computing&lt;/a&gt; — Computing which utilizes quantum mechanics and qubits on quantum computers.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="28e9"&gt;&lt;a href="https://github.com/mostafatouny/awesome-theoretical-computer-science#readme" title="https://github.com/mostafatouny/awesome-theoretical-computer-science#readme" rel="noopener noreferrer"&gt;Theoretical Computer Science&lt;/a&gt; — The interplay of computer science and pure mathematics, distinguished by its emphasis on mathematical rigour and technique.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Big Data
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="fe44"&gt;&lt;a href="https://github.com/onurakpolat/awesome-bigdata#readme" title="https://github.com/onurakpolat/awesome-bigdata#readme" rel="noopener noreferrer"&gt;Big Data&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="96a4"&gt;&lt;a href="https://github.com/awesomedata/awesome-public-datasets#readme" title="https://github.com/awesomedata/awesome-public-datasets#readme" rel="noopener noreferrer"&gt;Public Datasets&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c386"&gt;&lt;a href="https://github.com/youngwookim/awesome-hadoop#readme" title="https://github.com/youngwookim/awesome-hadoop#readme" rel="noopener noreferrer"&gt;Hadoop&lt;/a&gt; — Framework for distributed storage and processing of very large data sets.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="373e"&gt;&lt;a href="https://github.com/igorbarinov/awesome-data-engineering#readme" title="https://github.com/igorbarinov/awesome-data-engineering#readme" rel="noopener noreferrer"&gt;Data Engineering&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1bf9"&gt;&lt;a href="https://github.com/manuzhang/awesome-streaming#readme" title="https://github.com/manuzhang/awesome-streaming#readme" rel="noopener noreferrer"&gt;Streaming&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="287a"&gt;&lt;a href="https://github.com/awesome-spark/awesome-spark#readme" title="https://github.com/awesome-spark/awesome-spark#readme" rel="noopener noreferrer"&gt;Apache Spark&lt;/a&gt; — Unified engine for large-scale data processing.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b74d"&gt;&lt;a href="https://github.com/ambster-public/awesome-qlik#readme" title="https://github.com/ambster-public/awesome-qlik#readme" rel="noopener noreferrer"&gt;Qlik&lt;/a&gt; — Business intelligence platform for data visualization, analytics, and reporting apps.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="68e5"&gt;&lt;a href="https://github.com/sduff/awesome-splunk#readme" title="https://github.com/sduff/awesome-splunk#readme" rel="noopener noreferrer"&gt;Splunk&lt;/a&gt; — Platform for searching, monitoring, and analyzing structured and unstructured machine-generated big data in real-time.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Theory
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="1de7"&gt;&lt;a href="https://github.com/papers-we-love/papers-we-love#readme" title="https://github.com/papers-we-love/papers-we-love#readme" rel="noopener noreferrer"&gt;Papers We Love&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f12e"&gt;&lt;a href="https://github.com/JanVanRyswyck/awesome-talks#readme" title="https://github.com/JanVanRyswyck/awesome-talks#readme" rel="noopener noreferrer"&gt;Talks&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="ecec"&gt;&lt;a href="https://github.com/tayllan/awesome-algorithms#readme" title="https://github.com/tayllan/awesome-algorithms#readme" rel="noopener noreferrer"&gt;Algorithms&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c887"&gt;&lt;a href="https://github.com/gaerae/awesome-algorithms-education#readme" title="https://github.com/gaerae/awesome-algorithms-education#readme" rel="noopener noreferrer"&gt;Education&lt;/a&gt; — Learning and practicing.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="56d6"&gt;&lt;a href="https://github.com/enjalot/algovis#readme" title="https://github.com/enjalot/algovis#readme" rel="noopener noreferrer"&gt;Algorithm Visualizations&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="84bb"&gt;&lt;a href="https://github.com/owainlewis/awesome-artificial-intelligence#readme" title="https://github.com/owainlewis/awesome-artificial-intelligence#readme" rel="noopener noreferrer"&gt;Artificial Intelligence&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0183"&gt;&lt;a href="https://github.com/marcobiedermann/search-engine-optimization#readme" title="https://github.com/marcobiedermann/search-engine-optimization#readme" rel="noopener noreferrer"&gt;Search Engine Optimization&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9555"&gt;&lt;a href="https://github.com/lnishan/awesome-competitive-programming#readme" title="https://github.com/lnishan/awesome-competitive-programming#readme" rel="noopener noreferrer"&gt;Competitive Programming&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d76f"&gt;&lt;a href="https://github.com/rossant/awesome-math#readme" title="https://github.com/rossant/awesome-math#readme" rel="noopener noreferrer"&gt;Math&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d330"&gt;&lt;a href="https://github.com/passy/awesome-recursion-schemes#readme" title="https://github.com/passy/awesome-recursion-schemes#readme" rel="noopener noreferrer"&gt;Recursion Schemes&lt;/a&gt; — Traversing nested data structures.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Books
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="55cf"&gt;&lt;a href="https://github.com/EbookFoundation/free-programming-books#readme" title="https://github.com/EbookFoundation/free-programming-books#readme" rel="noopener noreferrer"&gt;Free Programming Books&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="58b9"&gt;&lt;a href="https://github.com/dariubs/GoBooks#readme" title="https://github.com/dariubs/GoBooks#readme" rel="noopener noreferrer"&gt;Go Books&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1580"&gt;&lt;a href="https://github.com/RomanTsegelskyi/rbooks#readme" title="https://github.com/RomanTsegelskyi/rbooks#readme" rel="noopener noreferrer"&gt;R Books&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="759a"&gt;&lt;a href="https://github.com/hackerkid/Mind-Expanding-Books#readme" title="https://github.com/hackerkid/Mind-Expanding-Books#readme" rel="noopener noreferrer"&gt;Mind Expanding Books&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6c1d"&gt;&lt;a href="https://github.com/TalAter/awesome-book-authoring#readme" title="https://github.com/TalAter/awesome-book-authoring#readme" rel="noopener noreferrer"&gt;Book Authoring&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8646"&gt;&lt;a href="https://github.com/sger/ElixirBooks#readme" title="https://github.com/sger/ElixirBooks#readme" rel="noopener noreferrer"&gt;Elixir Books&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Editors
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="1ea8"&gt;&lt;a href="https://github.com/dreikanter/sublime-bookmarks#readme" title="https://github.com/dreikanter/sublime-bookmarks#readme" rel="noopener noreferrer"&gt;Sublime Text&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="061b"&gt;&lt;a href="https://github.com/mhinz/vim-galore#readme" title="https://github.com/mhinz/vim-galore#readme" rel="noopener noreferrer"&gt;Vim&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="91af"&gt;&lt;a href="https://github.com/emacs-tw/awesome-emacs#readme" title="https://github.com/emacs-tw/awesome-emacs#readme" rel="noopener noreferrer"&gt;Emacs&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="49e1"&gt;&lt;a href="https://github.com/mehcode/awesome-atom#readme" title="https://github.com/mehcode/awesome-atom#readme" rel="noopener noreferrer"&gt;Atom&lt;/a&gt; — Open-source and hackable text editor.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b43e"&gt;&lt;a href="https://github.com/viatsko/awesome-vscode#readme" title="https://github.com/viatsko/awesome-vscode#readme" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; — Cross-platform open-source text editor.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Gaming
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="4dec"&gt;&lt;a href="https://github.com/ellisonleao/magictools#readme" title="https://github.com/ellisonleao/magictools#readme" rel="noopener noreferrer"&gt;Game Development&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2b79"&gt;&lt;a href="https://github.com/hzoo/awesome-gametalks#readme" title="https://github.com/hzoo/awesome-gametalks#readme" rel="noopener noreferrer"&gt;Game Talks&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9adc"&gt;&lt;a href="https://github.com/Calinou/awesome-godot#readme" title="https://github.com/Calinou/awesome-godot#readme" rel="noopener noreferrer"&gt;Godot&lt;/a&gt; — Game engine.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="baec"&gt;&lt;a href="https://github.com/leereilly/games#readme" title="https://github.com/leereilly/games#readme" rel="noopener noreferrer"&gt;Open Source Games&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="023b"&gt;&lt;a href="https://github.com/RyanNielson/awesome-unity#readme" title="https://github.com/RyanNielson/awesome-unity#readme" rel="noopener noreferrer"&gt;Unity&lt;/a&gt; — Game engine.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="702e"&gt;&lt;a href="https://github.com/hkirat/awesome-chess#readme" title="https://github.com/hkirat/awesome-chess#readme" rel="noopener noreferrer"&gt;Chess&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7162"&gt;&lt;a href="https://github.com/love2d-community/awesome-love2d#readme" title="https://github.com/love2d-community/awesome-love2d#readme" rel="noopener noreferrer"&gt;LÖVE&lt;/a&gt; — Game engine.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="cebb"&gt;&lt;a href="https://github.com/pico-8/awesome-PICO-8#readme" title="https://github.com/pico-8/awesome-PICO-8#readme" rel="noopener noreferrer"&gt;PICO-8&lt;/a&gt; — Fantasy console.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="59e8"&gt;&lt;a href="https://github.com/gbdev/awesome-gbdev#readme" title="https://github.com/gbdev/awesome-gbdev#readme" rel="noopener noreferrer"&gt;Game Boy Development&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="49b7"&gt;&lt;a href="https://github.com/WebCreationClub/awesome-construct#readme" title="https://github.com/WebCreationClub/awesome-construct#readme" rel="noopener noreferrer"&gt;Construct 2&lt;/a&gt; — Game engine.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0344"&gt;&lt;a href="https://github.com/stetso/awesome-gideros#readme" title="https://github.com/stetso/awesome-gideros#readme" rel="noopener noreferrer"&gt;Gideros&lt;/a&gt; — Game engine.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="13a4"&gt;&lt;a href="https://github.com/bs-community/awesome-minecraft#readme" title="https://github.com/bs-community/awesome-minecraft#readme" rel="noopener noreferrer"&gt;Minecraft&lt;/a&gt; — Sandbox video game.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1b64"&gt;&lt;a href="https://github.com/leomaurodesenv/game-datasets#readme" title="https://github.com/leomaurodesenv/game-datasets#readme" rel="noopener noreferrer"&gt;Game Datasets&lt;/a&gt; — Materials and datasets for Artificial Intelligence in games.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="527f"&gt;&lt;a href="https://github.com/Dvergar/awesome-haxe-gamedev#readme" title="https://github.com/Dvergar/awesome-haxe-gamedev#readme" rel="noopener noreferrer"&gt;Haxe Game Development&lt;/a&gt; — A high-level strongly typed programming language used to produce cross-platform native code.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="90d7"&gt;&lt;a href="https://github.com/rafaskb/awesome-libgdx#readme" title="https://github.com/rafaskb/awesome-libgdx#readme" rel="noopener noreferrer"&gt;libGDX&lt;/a&gt; — Java game framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8247"&gt;&lt;a href="https://github.com/playcanvas/awesome-playcanvas#readme" title="https://github.com/playcanvas/awesome-playcanvas#readme" rel="noopener noreferrer"&gt;PlayCanvas&lt;/a&gt; — Game engine.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="be41"&gt;&lt;a href="https://github.com/radek-sprta/awesome-game-remakes#readme" title="https://github.com/radek-sprta/awesome-game-remakes#readme" rel="noopener noreferrer"&gt;Game Remakes&lt;/a&gt; — Actively maintained open-source game remakes.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f182"&gt;&lt;a href="https://github.com/flame-engine/awesome-flame#readme" title="https://github.com/flame-engine/awesome-flame#readme" rel="noopener noreferrer"&gt;Flame&lt;/a&gt; — Game engine for Flutter.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="81f0"&gt;&lt;a href="https://github.com/mhxion/awesome-discord-communities#readme" title="https://github.com/mhxion/awesome-discord-communities#readme" rel="noopener noreferrer"&gt;Discord Communities&lt;/a&gt; — Chat with friends and communities.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3ff7"&gt;&lt;a href="https://github.com/tobiasvl/awesome-chip-8#readme" title="https://github.com/tobiasvl/awesome-chip-8#readme" rel="noopener noreferrer"&gt;CHIP-8&lt;/a&gt; — Virtual computer game machine from the 70s.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1109"&gt;&lt;a href="https://github.com/michelpereira/awesome-games-of-coding#readme" title="https://github.com/michelpereira/awesome-games-of-coding#readme" rel="noopener noreferrer"&gt;Games of Coding&lt;/a&gt; — Learn a programming language by making games.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Development Environment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="0bd5"&gt;&lt;a href="https://github.com/sindresorhus/quick-look-plugins#readme" title="https://github.com/sindresorhus/quick-look-plugins#readme" rel="noopener noreferrer"&gt;Quick Look Plugins&lt;/a&gt; — For macOS.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5c62"&gt;&lt;a href="https://github.com/jondot/awesome-devenv#readme" title="https://github.com/jondot/awesome-devenv#readme" rel="noopener noreferrer"&gt;Dev Env&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="55de"&gt;&lt;a href="https://github.com/webpro/awesome-dotfiles#readme" title="https://github.com/webpro/awesome-dotfiles#readme" rel="noopener noreferrer"&gt;Dotfiles&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5fdd"&gt;&lt;a href="https://github.com/alebcay/awesome-shell#readme" title="https://github.com/alebcay/awesome-shell#readme" rel="noopener noreferrer"&gt;Shell&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="4292"&gt;&lt;a href="https://github.com/jorgebucaran/awsm.fish#readme" title="https://github.com/jorgebucaran/awsm.fish#readme" rel="noopener noreferrer"&gt;Fish&lt;/a&gt; — User-friendly shell.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8eb3"&gt;&lt;a href="https://github.com/agarrharr/awesome-cli-apps#readme" title="https://github.com/agarrharr/awesome-cli-apps#readme" rel="noopener noreferrer"&gt;Command-Line Apps&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="88c3"&gt;&lt;a href="https://github.com/unixorn/awesome-zsh-plugins#readme" title="https://github.com/unixorn/awesome-zsh-plugins#readme" rel="noopener noreferrer"&gt;ZSH Plugins&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2e19"&gt;&lt;a href="https://github.com/phillipadsmith/awesome-github#readme" title="https://github.com/phillipadsmith/awesome-github#readme" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; — Hosting service for Git repositories.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d849"&gt;&lt;a href="https://github.com/stefanbuck/awesome-browser-extensions-for-github#readme" title="https://github.com/stefanbuck/awesome-browser-extensions-for-github#readme" rel="noopener noreferrer"&gt;Browser Extensions&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3511"&gt;&lt;a href="https://github.com/tiimgreen/github-cheat-sheet#readme" title="https://github.com/tiimgreen/github-cheat-sheet#readme" rel="noopener noreferrer"&gt;Cheat Sheet&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e465"&gt;&lt;a href="https://github.com/matchai/awesome-pinned-gists#readme" title="https://github.com/matchai/awesome-pinned-gists#readme" rel="noopener noreferrer"&gt;Pinned Gists&lt;/a&gt; — Dynamic pinned gists for your GitHub profile.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="abf8"&gt;&lt;a href="https://github.com/arslanbilal/git-cheat-sheet#readme" title="https://github.com/arslanbilal/git-cheat-sheet#readme" rel="noopener noreferrer"&gt;Git Cheat Sheet &amp;amp; Git Flow&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="942f"&gt;&lt;a href="https://github.com/git-tips/tips#readme" title="https://github.com/git-tips/tips#readme" rel="noopener noreferrer"&gt;Git Tips&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bb00"&gt;&lt;a href="https://github.com/stevemao/awesome-git-addons#readme" title="https://github.com/stevemao/awesome-git-addons#readme" rel="noopener noreferrer"&gt;Git Add-ons&lt;/a&gt; — Enhance the &lt;code&gt;git&lt;/code&gt; CLI.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="58b2"&gt;&lt;a href="https://github.com/compscilauren/awesome-git-hooks#readme" title="https://github.com/compscilauren/awesome-git-hooks#readme" rel="noopener noreferrer"&gt;Git Hooks&lt;/a&gt; — Scripts for automating tasks during &lt;code&gt;git&lt;/code&gt; workflows.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="820c"&gt;&lt;a href="https://github.com/moul/awesome-ssh#readme" title="https://github.com/moul/awesome-ssh#readme" rel="noopener noreferrer"&gt;SSH&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b3a4"&gt;&lt;a href="https://github.com/tvvocold/FOSS-for-Dev#readme" title="https://github.com/tvvocold/FOSS-for-Dev#readme" rel="noopener noreferrer"&gt;FOSS for Developers&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c14a"&gt;&lt;a href="https://github.com/bnb/awesome-hyper#readme" title="https://github.com/bnb/awesome-hyper#readme" rel="noopener noreferrer"&gt;Hyper&lt;/a&gt; — Cross-platform terminal app built on web technologies.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7158"&gt;&lt;a href="https://github.com/janikvonrotz/awesome-powershell#readme" title="https://github.com/janikvonrotz/awesome-powershell#readme" rel="noopener noreferrer"&gt;PowerShell&lt;/a&gt; — Cross-platform object-oriented shell.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3340"&gt;&lt;a href="https://github.com/alfred-workflows/awesome-alfred-workflows#readme" title="https://github.com/alfred-workflows/awesome-alfred-workflows#readme" rel="noopener noreferrer"&gt;Alfred Workflows&lt;/a&gt; — Productivity app for macOS.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1d3d"&gt;&lt;a href="https://github.com/k4m4/terminals-are-sexy#readme" title="https://github.com/k4m4/terminals-are-sexy#readme" rel="noopener noreferrer"&gt;Terminals Are Sexy&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="cccc"&gt;&lt;a href="https://github.com/sdras/awesome-actions#readme" title="https://github.com/sdras/awesome-actions#readme" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt; — Create tasks to automate your workflow and share them with others on GitHub.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Entertainment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="53f3"&gt;&lt;a href="https://github.com/sindresorhus/awesome-scifi#readme" title="https://github.com/sindresorhus/awesome-scifi#readme" rel="noopener noreferrer"&gt;Science Fiction&lt;/a&gt; — Scifi.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="43c7"&gt;&lt;a href="https://github.com/RichardLitt/awesome-fantasy#readme" title="https://github.com/RichardLitt/awesome-fantasy#readme" rel="noopener noreferrer"&gt;Fantasy&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="02b2"&gt;&lt;a href="https://github.com/ayr-ton/awesome-geek-podcasts#readme" title="https://github.com/ayr-ton/awesome-geek-podcasts#readme" rel="noopener noreferrer"&gt;Podcasts&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="ad9d"&gt;&lt;a href="https://github.com/zudochkin/awesome-newsletters#readme" title="https://github.com/zudochkin/awesome-newsletters#readme" rel="noopener noreferrer"&gt;Email Newsletters&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="626a"&gt;&lt;a href="https://github.com/victorlaerte/awesome-it-quotes#readme" title="https://github.com/victorlaerte/awesome-it-quotes#readme" rel="noopener noreferrer"&gt;IT Quotes&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Databases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="888d"&gt;&lt;a href="https://github.com/numetriclabz/awesome-db#readme" title="https://github.com/numetriclabz/awesome-db#readme" rel="noopener noreferrer"&gt;Database&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c03a"&gt;&lt;a href="https://github.com/shlomi-noach/awesome-mysql#readme" title="https://github.com/shlomi-noach/awesome-mysql#readme" rel="noopener noreferrer"&gt;MySQL&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5d02"&gt;&lt;a href="https://github.com/dahlia/awesome-sqlalchemy#readme" title="https://github.com/dahlia/awesome-sqlalchemy#readme" rel="noopener noreferrer"&gt;SQLAlchemy&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bee5"&gt;&lt;a href="https://github.com/mark-rushakoff/awesome-influxdb#readme" title="https://github.com/mark-rushakoff/awesome-influxdb#readme" rel="noopener noreferrer"&gt;InfluxDB&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5124"&gt;&lt;a href="https://github.com/neueda/awesome-neo4j#readme" title="https://github.com/neueda/awesome-neo4j#readme" rel="noopener noreferrer"&gt;Neo4j&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="fd86"&gt;&lt;a href="https://github.com/ramnes/awesome-mongodb#readme" title="https://github.com/ramnes/awesome-mongodb#readme" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt; — NoSQL database.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7083"&gt;&lt;a href="https://github.com/d3viant0ne/awesome-rethinkdb#readme" title="https://github.com/d3viant0ne/awesome-rethinkdb#readme" rel="noopener noreferrer"&gt;RethinkDB&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="4390"&gt;&lt;a href="https://github.com/mohataher/awesome-tinkerpop#readme" title="https://github.com/mohataher/awesome-tinkerpop#readme" rel="noopener noreferrer"&gt;TinkerPop&lt;/a&gt; — Graph computing framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c69c"&gt;&lt;a href="https://github.com/dhamaniasad/awesome-postgres#readme" title="https://github.com/dhamaniasad/awesome-postgres#readme" rel="noopener noreferrer"&gt;PostgreSQL&lt;/a&gt; — Object-relational database.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="93fb"&gt;&lt;a href="https://github.com/quangv/awesome-couchdb#readme" title="https://github.com/quangv/awesome-couchdb#readme" rel="noopener noreferrer"&gt;CouchDB&lt;/a&gt; — Document-oriented NoSQL database.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="91f7"&gt;&lt;a href="https://github.com/rayokota/awesome-hbase#readme" title="https://github.com/rayokota/awesome-hbase#readme" rel="noopener noreferrer"&gt;HBase&lt;/a&gt; — Distributed, scalable, big data store.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1e16"&gt;&lt;a href="https://github.com/erictleung/awesome-nosql-guides#readme" title="https://github.com/erictleung/awesome-nosql-guides#readme" rel="noopener noreferrer"&gt;NoSQL Guides&lt;/a&gt; — Help on using non-relational, distributed, open-source, and horizontally scalable databases.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="10b7"&gt;&lt;a href="https://github.com/chrislatorres/awesome-contexture#readme" title="https://github.com/chrislatorres/awesome-contexture#readme" rel="noopener noreferrer"&gt;Contexture&lt;/a&gt; — Abstracts queries/filters and results/aggregations from different backing data stores like ElasticSearch and MongoDB.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="fd91"&gt;&lt;a href="https://github.com/mgramin/awesome-db-tools#readme" title="https://github.com/mgramin/awesome-db-tools#readme" rel="noopener noreferrer"&gt;Database Tools&lt;/a&gt; — Everything that makes working with databases easier.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d966"&gt;&lt;a href="https://github.com/vaticle/typedb-awesome#readme" title="https://github.com/vaticle/typedb-awesome#readme" rel="noopener noreferrer"&gt;TypeDB&lt;/a&gt; — Logical database to organize large and complex networks of data as one body of knowledge.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="103c"&gt;&lt;a href="https://github.com/Anant/awesome-cassandra#readme" title="https://github.com/Anant/awesome-cassandra#readme" rel="noopener noreferrer"&gt;Cassandra&lt;/a&gt; — Open-source, distributed, wide column store, NoSQL database management system.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Media
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="75a1"&gt;&lt;a href="https://github.com/shime/creative-commons-media#readme" title="https://github.com/shime/creative-commons-media#readme" rel="noopener noreferrer"&gt;Creative Commons Media&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d1b3"&gt;&lt;a href="https://github.com/brabadu/awesome-fonts#readme" title="https://github.com/brabadu/awesome-fonts#readme" rel="noopener noreferrer"&gt;Fonts&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3832"&gt;&lt;a href="https://github.com/chrissimpkins/codeface#readme" title="https://github.com/chrissimpkins/codeface#readme" rel="noopener noreferrer"&gt;Codeface&lt;/a&gt; — Text editor fonts.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="232b"&gt;&lt;a href="https://github.com/neutraltone/awesome-stock-resources#readme" title="https://github.com/neutraltone/awesome-stock-resources#readme" rel="noopener noreferrer"&gt;Stock Resources&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e257"&gt;&lt;a href="https://github.com/davisonio/awesome-gif#readme" title="https://github.com/davisonio/awesome-gif#readme" rel="noopener noreferrer"&gt;GIF&lt;/a&gt; — Image format known for animated images.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e623"&gt;&lt;a href="https://github.com/ciconia/awesome-music#readme" title="https://github.com/ciconia/awesome-music#readme" rel="noopener noreferrer"&gt;Music&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="4dd9"&gt;&lt;a href="https://github.com/44bits/awesome-opensource-documents#readme" title="https://github.com/44bits/awesome-opensource-documents#readme" rel="noopener noreferrer"&gt;Open Source Documents&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="46ea"&gt;&lt;a href="https://github.com/willianjusten/awesome-audio-visualization#readme" title="https://github.com/willianjusten/awesome-audio-visualization#readme" rel="noopener noreferrer"&gt;Audio Visualization&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f048"&gt;&lt;a href="https://github.com/ebu/awesome-broadcasting#readme" title="https://github.com/ebu/awesome-broadcasting#readme" rel="noopener noreferrer"&gt;Broadcasting&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="058b"&gt;&lt;a href="https://github.com/Siilwyn/awesome-pixel-art#readme" title="https://github.com/Siilwyn/awesome-pixel-art#readme" rel="noopener noreferrer"&gt;Pixel Art&lt;/a&gt; — Pixel-level digital art.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b5d3"&gt;&lt;a href="https://github.com/transitive-bullshit/awesome-ffmpeg#readme" title="https://github.com/transitive-bullshit/awesome-ffmpeg#readme" rel="noopener noreferrer"&gt;FFmpeg&lt;/a&gt; — Cross-platform solution to record, convert and stream audio and video.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a9af"&gt;&lt;a href="https://github.com/notlmn/awesome-icons#readme" title="https://github.com/notlmn/awesome-icons#readme" rel="noopener noreferrer"&gt;Icons&lt;/a&gt; — Downloadable SVG/PNG/font icon projects.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f520"&gt;&lt;a href="https://github.com/stingalleman/awesome-audiovisual#readme" title="https://github.com/stingalleman/awesome-audiovisual#readme" rel="noopener noreferrer"&gt;Audiovisual&lt;/a&gt; — Lighting, audio and video in professional environments.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c860"&gt;&lt;a href="https://github.com/mfkl/awesome-vlc#readme" title="https://github.com/mfkl/awesome-vlc#readme" rel="noopener noreferrer"&gt;VLC&lt;/a&gt; — Cross-platform media player software and streaming server.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Learn
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="8dd0"&gt;&lt;a href="https://github.com/therebelrobot/awesome-workshopper#readme" title="https://github.com/therebelrobot/awesome-workshopper#readme" rel="noopener noreferrer"&gt;CLI Workshoppers&lt;/a&gt; — Interactive tutorials.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b944"&gt;&lt;a href="https://github.com/karlhorky/learn-to-program#readme" title="https://github.com/karlhorky/learn-to-program#readme" rel="noopener noreferrer"&gt;Learn to Program&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7168"&gt;&lt;a href="https://github.com/matteofigus/awesome-speaking#readme" title="https://github.com/matteofigus/awesome-speaking#readme" rel="noopener noreferrer"&gt;Speaking&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="622c"&gt;&lt;a href="https://github.com/lucasviola/awesome-tech-videos#readme" title="https://github.com/lucasviola/awesome-tech-videos#readme" rel="noopener noreferrer"&gt;Tech Videos&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9681"&gt;&lt;a href="https://github.com/hangtwenty/dive-into-machine-learning#readme" title="https://github.com/hangtwenty/dive-into-machine-learning#readme" rel="noopener noreferrer"&gt;Dive into Machine Learning&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="98a5"&gt;&lt;a href="https://github.com/watson/awesome-computer-history#readme" title="https://github.com/watson/awesome-computer-history#readme" rel="noopener noreferrer"&gt;Computer History&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="cc7f"&gt;&lt;a href="https://github.com/HollyAdele/awesome-programming-for-kids#readme" title="https://github.com/HollyAdele/awesome-programming-for-kids#readme" rel="noopener noreferrer"&gt;Programming for Kids&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b6f7"&gt;&lt;a href="https://github.com/yrgo/awesome-educational-games#readme" title="https://github.com/yrgo/awesome-educational-games#readme" rel="noopener noreferrer"&gt;Educational Games&lt;/a&gt; — Learn while playing.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c452"&gt;&lt;a href="https://github.com/micromata/awesome-javascript-learning#readme" title="https://github.com/micromata/awesome-javascript-learning#readme" rel="noopener noreferrer"&gt;JavaScript Learning&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0bc1"&gt;&lt;a href="https://github.com/micromata/awesome-css-learning#readme" title="https://github.com/micromata/awesome-css-learning#readme" rel="noopener noreferrer"&gt;CSS Learning&lt;/a&gt; — Mainly about CSS — the language and the modules.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bb85"&gt;&lt;a href="https://github.com/dend/awesome-product-management#readme" title="https://github.com/dend/awesome-product-management#readme" rel="noopener noreferrer"&gt;Product Management&lt;/a&gt; — Learn how to be a better product manager.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5131"&gt;&lt;a href="https://github.com/liuchong/awesome-roadmaps#readme" title="https://github.com/liuchong/awesome-roadmaps#readme" rel="noopener noreferrer"&gt;Roadmaps&lt;/a&gt; — Gives you a clear route to improve your knowledge and skills.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a80b"&gt;&lt;a href="https://github.com/JoseDeFreitas/awesome-youtubers#readme" title="https://github.com/JoseDeFreitas/awesome-youtubers#readme" rel="noopener noreferrer"&gt;YouTubers&lt;/a&gt; — Watch video tutorials from YouTubers that teach you about technology.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="063d"&gt;&lt;a href="https://github.com/paragonie/awesome-appsec#readme" title="https://github.com/paragonie/awesome-appsec#readme" rel="noopener noreferrer"&gt;Application Security&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="852f"&gt;&lt;a href="https://github.com/sbilly/awesome-security#readme" title="https://github.com/sbilly/awesome-security#readme" rel="noopener noreferrer"&gt;Security&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8b79"&gt;&lt;a href="https://github.com/apsdehal/awesome-ctf#readme" title="https://github.com/apsdehal/awesome-ctf#readme" rel="noopener noreferrer"&gt;CTF&lt;/a&gt; — Capture The Flag.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="fc74"&gt;&lt;a href="https://github.com/rshipp/awesome-malware-analysis#readme" title="https://github.com/rshipp/awesome-malware-analysis#readme" rel="noopener noreferrer"&gt;Malware Analysis&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f88e"&gt;&lt;a href="https://github.com/ashishb/android-security-awesome#readme" title="https://github.com/ashishb/android-security-awesome#readme" rel="noopener noreferrer"&gt;Android Security&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5642"&gt;&lt;a href="https://github.com/carpedm20/awesome-hacking#readme" title="https://github.com/carpedm20/awesome-hacking#readme" rel="noopener noreferrer"&gt;Hacking&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="50cd"&gt;&lt;a href="https://github.com/paralax/awesome-honeypots#readme" title="https://github.com/paralax/awesome-honeypots#readme" rel="noopener noreferrer"&gt;Honeypots&lt;/a&gt; — Deception trap, designed to entice an attacker into attempting to compromise the information systems in an organization.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="179d"&gt;&lt;a href="https://github.com/meirwah/awesome-incident-response#readme" title="https://github.com/meirwah/awesome-incident-response#readme" rel="noopener noreferrer"&gt;Incident Response&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="cf96"&gt;&lt;a href="https://github.com/jaredthecoder/awesome-vehicle-security#readme" title="https://github.com/jaredthecoder/awesome-vehicle-security#readme" rel="noopener noreferrer"&gt;Vehicle Security and Car Hacking&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bc7c"&gt;&lt;a href="https://github.com/qazbnm456/awesome-web-security#readme" title="https://github.com/qazbnm456/awesome-web-security#readme" rel="noopener noreferrer"&gt;Web Security&lt;/a&gt; — Security of web apps &amp;amp; services.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6585"&gt;&lt;a href="https://github.com/fabacab/awesome-lockpicking#readme" title="https://github.com/fabacab/awesome-lockpicking#readme" rel="noopener noreferrer"&gt;Lockpicking&lt;/a&gt; — The art of unlocking a lock by manipulating its components without the key.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f3aa"&gt;&lt;a href="https://github.com/fabacab/awesome-cybersecurity-blueteam#readme" title="https://github.com/fabacab/awesome-cybersecurity-blueteam#readme" rel="noopener noreferrer"&gt;Cybersecurity Blue Team&lt;/a&gt; — Groups of individuals who identify security flaws in information technology systems.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9c7a"&gt;&lt;a href="https://github.com/cpuu/awesome-fuzzing#readme" title="https://github.com/cpuu/awesome-fuzzing#readme" rel="noopener noreferrer"&gt;Fuzzing&lt;/a&gt; — Automated software testing technique that involves feeding pseudo-randomly generated input data.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="dfb4"&gt;&lt;a href="https://github.com/fkie-cad/awesome-embedded-and-iot-security#readme" title="https://github.com/fkie-cad/awesome-embedded-and-iot-security#readme" rel="noopener noreferrer"&gt;Embedded and IoT Security&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="cdd3"&gt;&lt;a href="https://github.com/bakke92/awesome-gdpr#readme" title="https://github.com/bakke92/awesome-gdpr#readme" rel="noopener noreferrer"&gt;GDPR&lt;/a&gt; — Regulation on data protection and privacy for all individuals within EU.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8082"&gt;&lt;a href="https://github.com/TaptuIT/awesome-devsecops#readme" title="https://github.com/TaptuIT/awesome-devsecops#readme" rel="noopener noreferrer"&gt;DevSecOps&lt;/a&gt; — Integration of security practices into &lt;a href="https://en.wikipedia.org/wiki/DevOps" title="https://en.wikipedia.org/wiki/DevOps" rel="noopener noreferrer"&gt;DevOps&lt;/a&gt;.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Content Management Systems
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="b11f"&gt;&lt;a href="https://github.com/umbraco-community/awesome-umbraco#readme" title="https://github.com/umbraco-community/awesome-umbraco#readme" rel="noopener noreferrer"&gt;Umbraco&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f722"&gt;&lt;a href="https://github.com/refinerycms-contrib/awesome-refinerycms#readme" title="https://github.com/refinerycms-contrib/awesome-refinerycms#readme" rel="noopener noreferrer"&gt;Refinery CMS&lt;/a&gt; — Ruby on Rails CMS.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3024"&gt;&lt;a href="https://github.com/springload/awesome-wagtail#readme" title="https://github.com/springload/awesome-wagtail#readme" rel="noopener noreferrer"&gt;Wagtail&lt;/a&gt; — Django CMS focused on flexibility and user experience.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b893"&gt;&lt;a href="https://github.com/drmonkeyninja/awesome-textpattern#readme" title="https://github.com/drmonkeyninja/awesome-textpattern#readme" rel="noopener noreferrer"&gt;Textpattern&lt;/a&gt; — Lightweight PHP-based CMS.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9b33"&gt;&lt;a href="https://github.com/nirgn975/awesome-drupal#readme" title="https://github.com/nirgn975/awesome-drupal#readme" rel="noopener noreferrer"&gt;Drupal&lt;/a&gt; — Extensible PHP-based CMS.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="438f"&gt;&lt;a href="https://github.com/craftcms/awesome#readme" title="https://github.com/craftcms/awesome#readme" rel="noopener noreferrer"&gt;Craft CMS&lt;/a&gt; — Content-first CMS.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="db84"&gt;&lt;a href="https://github.com/MartinMiles/Awesome-Sitecore#readme" title="https://github.com/MartinMiles/Awesome-Sitecore#readme" rel="noopener noreferrer"&gt;Sitecore&lt;/a&gt; — .NET digital marketing platform that combines CMS with tools for managing multiple websites.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9e37"&gt;&lt;a href="https://github.com/wernerkrauss/awesome-silverstripe-cms#readme" title="https://github.com/wernerkrauss/awesome-silverstripe-cms#readme" rel="noopener noreferrer"&gt;Silverstripe CMS&lt;/a&gt; — PHP MVC framework that serves as a classic or headless CMS.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Hardware
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="4c19"&gt;&lt;a href="https://github.com/Kiloreux/awesome-robotics#readme" title="https://github.com/Kiloreux/awesome-robotics#readme" rel="noopener noreferrer"&gt;Robotics&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="61db"&gt;&lt;a href="https://github.com/HQarroum/awesome-iot#readme" title="https://github.com/HQarroum/awesome-iot#readme" rel="noopener noreferrer"&gt;Internet of Things&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="cc29"&gt;&lt;a href="https://github.com/kitspace/awesome-electronics#readme" title="https://github.com/kitspace/awesome-electronics#readme" rel="noopener noreferrer"&gt;Electronics&lt;/a&gt; — For electronic engineers and hobbyists.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6f1c"&gt;&lt;a href="https://github.com/rabschi/awesome-beacon#readme" title="https://github.com/rabschi/awesome-beacon#readme" rel="noopener noreferrer"&gt;Bluetooth Beacons&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="51c9"&gt;&lt;a href="https://github.com/gitfrage/guitarspecs#readme" title="https://github.com/gitfrage/guitarspecs#readme" rel="noopener noreferrer"&gt;Electric Guitar Specifications&lt;/a&gt; — Checklist for building your own electric guitar.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8d74"&gt;&lt;a href="https://github.com/beardicus/awesome-plotters#readme" title="https://github.com/beardicus/awesome-plotters#readme" rel="noopener noreferrer"&gt;Plotters&lt;/a&gt; — Computer-controlled drawing machines and other visual art robots.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b43d"&gt;&lt;a href="https://github.com/protontypes/awesome-robotic-tooling#readme" title="https://github.com/protontypes/awesome-robotic-tooling#readme" rel="noopener noreferrer"&gt;Robotic Tooling&lt;/a&gt; — Free and open tools for professional robotic development.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b839"&gt;&lt;a href="https://github.com/szenergy/awesome-lidar#readme" title="https://github.com/szenergy/awesome-lidar#readme" rel="noopener noreferrer"&gt;LIDAR&lt;/a&gt; — Sensor for measuring distances by illuminating the target with laser light.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Business
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="8a57"&gt;&lt;a href="https://github.com/opencompany/awesome-open-company#readme" title="https://github.com/opencompany/awesome-open-company#readme" rel="noopener noreferrer"&gt;Open Companies&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bf99"&gt;&lt;a href="https://github.com/mmccaff/PlacesToPostYourStartup#readme" title="https://github.com/mmccaff/PlacesToPostYourStartup#readme" rel="noopener noreferrer"&gt;Places to Post Your Startup&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2ab8"&gt;&lt;a href="https://github.com/domenicosolazzo/awesome-okr#readme" title="https://github.com/domenicosolazzo/awesome-okr#readme" rel="noopener noreferrer"&gt;OKR Methodology&lt;/a&gt; — Goal setting &amp;amp; communication best practices.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c55c"&gt;&lt;a href="https://github.com/LappleApple/awesome-leading-and-managing#readme" title="https://github.com/LappleApple/awesome-leading-and-managing#readme" rel="noopener noreferrer"&gt;Leading and Managing&lt;/a&gt; — Leading people and being a manager in a technology company/environment.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="32df"&gt;&lt;a href="https://github.com/mezod/awesome-indie#readme" title="https://github.com/mezod/awesome-indie#readme" rel="noopener noreferrer"&gt;Indie&lt;/a&gt; — Independent developer businesses.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="4dd4"&gt;&lt;a href="https://github.com/cjbarber/ToolsOfTheTrade#readme" title="https://github.com/cjbarber/ToolsOfTheTrade#readme" rel="noopener noreferrer"&gt;Tools of the Trade&lt;/a&gt; — Tools used by companies on Hacker News.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="efb9"&gt;&lt;a href="https://github.com/nglgzz/awesome-clean-tech#readme" title="https://github.com/nglgzz/awesome-clean-tech#readme" rel="noopener noreferrer"&gt;Clean Tech&lt;/a&gt; — Fighting climate change with technology.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c728"&gt;&lt;a href="https://github.com/wardley-maps-community/awesome-wardley-maps#readme" title="https://github.com/wardley-maps-community/awesome-wardley-maps#readme" rel="noopener noreferrer"&gt;Wardley Maps&lt;/a&gt; — Provides high situational awareness to help improve strategic planning and decision making.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a8bf"&gt;&lt;a href="https://github.com/RayBB/awesome-social-enterprise#readme" title="https://github.com/RayBB/awesome-social-enterprise#readme" rel="noopener noreferrer"&gt;Social Enterprise&lt;/a&gt; — Building an organization primarily focused on social impact that is at least partially self-funded.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bcb6"&gt;&lt;a href="https://github.com/kdeldycke/awesome-engineering-team-management#readme" title="https://github.com/kdeldycke/awesome-engineering-team-management#readme" rel="noopener noreferrer"&gt;Engineering Team Management&lt;/a&gt; — How to transition from software development to engineering management.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8848"&gt;&lt;a href="https://github.com/agamm/awesome-developer-first#readme" title="https://github.com/agamm/awesome-developer-first#readme" rel="noopener noreferrer"&gt;Developer-First Products&lt;/a&gt; — Products that target developers as the user.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a589"&gt;&lt;a href="https://github.com/kdeldycke/awesome-billing#readme" title="https://github.com/kdeldycke/awesome-billing#readme" rel="noopener noreferrer"&gt;Billing&lt;/a&gt; — Payments, invoicing, pricing, accounting, marketplace, fraud, and business intelligence.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Work
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="d6fa"&gt;&lt;a href="https://github.com/matiassingers/awesome-slack#readme" title="https://github.com/matiassingers/awesome-slack#readme" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; — Team collaboration.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="37ba"&gt;&lt;a href="https://github.com/filipelinhares/awesome-slack#readme" title="https://github.com/filipelinhares/awesome-slack#readme" rel="noopener noreferrer"&gt;Communities&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="83be"&gt;&lt;a href="https://github.com/lukasz-madon/awesome-remote-job#readme" title="https://github.com/lukasz-madon/awesome-remote-job#readme" rel="noopener noreferrer"&gt;Remote Jobs&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1fff"&gt;&lt;a href="https://github.com/jyguyomarch/awesome-productivity#readme" title="https://github.com/jyguyomarch/awesome-productivity#readme" rel="noopener noreferrer"&gt;Productivity&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5b9f"&gt;&lt;a href="https://github.com/tramcar/awesome-job-boards#readme" title="https://github.com/tramcar/awesome-job-boards#readme" rel="noopener noreferrer"&gt;Niche Job Boards&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a00e"&gt;&lt;a href="https://github.com/DopplerHQ/awesome-interview-questions#readme" title="https://github.com/DopplerHQ/awesome-interview-questions#readme" rel="noopener noreferrer"&gt;Programming Interviews&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="47a7"&gt;&lt;a href="https://github.com/joho/awesome-code-review#readme" title="https://github.com/joho/awesome-code-review#readme" rel="noopener noreferrer"&gt;Code Review&lt;/a&gt; — Reviewing code.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b2a4"&gt;&lt;a href="https://github.com/j0hnm4r5/awesome-creative-technology#readme" title="https://github.com/j0hnm4r5/awesome-creative-technology#readme" rel="noopener noreferrer"&gt;Creative Technology&lt;/a&gt; — Businesses &amp;amp; groups that specialize in combining computing, design, art, and user experience.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7807"&gt;&lt;a href="https://github.com/lodthe/awesome-internships#readme" title="https://github.com/lodthe/awesome-internships#readme" rel="noopener noreferrer"&gt;Internships&lt;/a&gt; — CV writing guides and companies that hire interns.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Networking
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="f15c"&gt;&lt;a href="https://github.com/sdnds-tw/awesome-sdn#readme" title="https://github.com/sdnds-tw/awesome-sdn#readme" rel="noopener noreferrer"&gt;Software-Defined Networking&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="4640"&gt;&lt;a href="https://github.com/briatte/awesome-network-analysis#readme" title="https://github.com/briatte/awesome-network-analysis#readme" rel="noopener noreferrer"&gt;Network Analysis&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2d06"&gt;&lt;a href="https://github.com/caesar0301/awesome-pcaptools#readme" title="https://github.com/caesar0301/awesome-pcaptools#readme" rel="noopener noreferrer"&gt;PCAPTools&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8178"&gt;&lt;a href="https://github.com/rtckit/awesome-rtc#readme" title="https://github.com/rtckit/awesome-rtc#readme" rel="noopener noreferrer"&gt;Real-Time Communications&lt;/a&gt; — Network protocols for near simultaneous exchange of media and data.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Decentralized Systems
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="1abe"&gt;&lt;a href="https://github.com/igorbarinov/awesome-bitcoin#readme" title="https://github.com/igorbarinov/awesome-bitcoin#readme" rel="noopener noreferrer"&gt;Bitcoin&lt;/a&gt; — Bitcoin services and tools for software developers.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5360"&gt;&lt;a href="https://github.com/vhpoet/awesome-ripple#readme" title="https://github.com/vhpoet/awesome-ripple#readme" rel="noopener noreferrer"&gt;Ripple&lt;/a&gt; — Open source distributed settlement network.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5393"&gt;&lt;a href="https://github.com/machinomy/awesome-non-financial-blockchain#readme" title="https://github.com/machinomy/awesome-non-financial-blockchain#readme" rel="noopener noreferrer"&gt;Non-Financial Blockchain&lt;/a&gt; — Non-financial blockchain applications.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0979"&gt;&lt;a href="https://github.com/tleb/awesome-mastodon#readme" title="https://github.com/tleb/awesome-mastodon#readme" rel="noopener noreferrer"&gt;Mastodon&lt;/a&gt; — Open source decentralized microblogging network.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e340"&gt;&lt;a href="https://github.com/ttumiel/Awesome-Ethereum#readme" title="https://github.com/ttumiel/Awesome-Ethereum#readme" rel="noopener noreferrer"&gt;Ethereum&lt;/a&gt; — Distributed computing platform for smart contract development.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1182"&gt;&lt;a href="https://github.com/steven2358/awesome-blockchain-ai#readme" title="https://github.com/steven2358/awesome-blockchain-ai#readme" rel="noopener noreferrer"&gt;Blockchain AI&lt;/a&gt; — Blockchain projects for artificial intelligence and machine learning.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="42e9"&gt;&lt;a href="https://github.com/DanailMinchev/awesome-eosio#readme" title="https://github.com/DanailMinchev/awesome-eosio#readme" rel="noopener noreferrer"&gt;EOSIO&lt;/a&gt; — A decentralized operating system supporting industrial-scale apps.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f3ce"&gt;&lt;a href="https://github.com/chainstack/awesome-corda#readme" title="https://github.com/chainstack/awesome-corda#readme" rel="noopener noreferrer"&gt;Corda&lt;/a&gt; — Open source blockchain platform designed for business.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="4a82"&gt;&lt;a href="https://github.com/msmolyakov/awesome-waves#readme" title="https://github.com/msmolyakov/awesome-waves#readme" rel="noopener noreferrer"&gt;Waves&lt;/a&gt; — Open source blockchain platform and development toolset for Web 3.0 apps and decentralized solutions.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c033"&gt;&lt;a href="https://github.com/substrate-developer-hub/awesome-substrate#readme" title="https://github.com/substrate-developer-hub/awesome-substrate#readme" rel="noopener noreferrer"&gt;Substrate&lt;/a&gt; — Framework for writing scalable, upgradeable blockchains in Rust.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="874d"&gt;&lt;a href="https://github.com/golemfactory/awesome-golem#readme" title="https://github.com/golemfactory/awesome-golem#readme" rel="noopener noreferrer"&gt;Golem&lt;/a&gt; — Open source peer-to-peer marketplace for computing resources.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f112"&gt;&lt;a href="https://github.com/friedger/awesome-stacks-chain#readme" title="https://github.com/friedger/awesome-stacks-chain#readme" rel="noopener noreferrer"&gt;Stacks&lt;/a&gt; — A smart contract platform secured by Bitcoin.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Higher Education
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="13b7"&gt;&lt;a href="https://github.com/eselkin/awesome-computational-neuroscience#readme" title="https://github.com/eselkin/awesome-computational-neuroscience#readme" rel="noopener noreferrer"&gt;Computational Neuroscience&lt;/a&gt; — A multidisciplinary science which uses computational approaches to study the nervous system.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="11ec"&gt;&lt;a href="https://github.com/maehr/awesome-digital-history#readme" title="https://github.com/maehr/awesome-digital-history#readme" rel="noopener noreferrer"&gt;Digital History&lt;/a&gt; — Computer-aided scientific investigation of history.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="050b"&gt;&lt;a href="https://github.com/writing-resources/awesome-scientific-writing#readme" title="https://github.com/writing-resources/awesome-scientific-writing#readme" rel="noopener noreferrer"&gt;Scientific Writing&lt;/a&gt; — Distraction-free scientific writing with Markdown, reStructuredText and Jupyter notebooks.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Events
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="d6a1"&gt;&lt;a href="https://github.com/danvoyce/awesome-creative-tech-events#readme" title="https://github.com/danvoyce/awesome-creative-tech-events#readme" rel="noopener noreferrer"&gt;Creative Tech Events&lt;/a&gt; — Events around the globe for creative coding, tech, design, music, arts and cool stuff.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="15a6"&gt;&lt;a href="https://github.com/ildoc/awesome-italy-events#readme" title="https://github.com/ildoc/awesome-italy-events#readme" rel="noopener noreferrer"&gt;Events in Italy&lt;/a&gt; — Tech-related events in Italy.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c456"&gt;&lt;a href="https://github.com/awkward/awesome-netherlands-events#readme" title="https://github.com/awkward/awesome-netherlands-events#readme" rel="noopener noreferrer"&gt;Events in the Netherlands&lt;/a&gt; — Tech-related events in the Netherlands.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Testing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="f117"&gt;&lt;a href="https://github.com/TheJambo/awesome-testing#readme" title="https://github.com/TheJambo/awesome-testing#readme" rel="noopener noreferrer"&gt;Testing&lt;/a&gt; — Software testing.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6f8c"&gt;&lt;a href="https://github.com/mojoaxel/awesome-regression-testing#readme" title="https://github.com/mojoaxel/awesome-regression-testing#readme" rel="noopener noreferrer"&gt;Visual Regression Testing&lt;/a&gt; — Ensures changes did not break the functionality or style.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7fdd"&gt;&lt;a href="https://github.com/christian-bromann/awesome-selenium#readme" title="https://github.com/christian-bromann/awesome-selenium#readme" rel="noopener noreferrer"&gt;Selenium&lt;/a&gt; — Open-source browser automation framework and ecosystem.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9796"&gt;&lt;a href="https://github.com/SrinivasanTarget/awesome-appium#readme" title="https://github.com/SrinivasanTarget/awesome-appium#readme" rel="noopener noreferrer"&gt;Appium&lt;/a&gt; — Test automation tool for apps.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="08eb"&gt;&lt;a href="https://github.com/sindresorhus/awesome-tap#readme" title="https://github.com/sindresorhus/awesome-tap#readme" rel="noopener noreferrer"&gt;TAP&lt;/a&gt; — Test Anything Protocol.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e46a"&gt;&lt;a href="https://github.com/aliesbelik/awesome-jmeter#readme" title="https://github.com/aliesbelik/awesome-jmeter#readme" rel="noopener noreferrer"&gt;JMeter&lt;/a&gt; — Load testing and performance measurement tool.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="43d6"&gt;&lt;a href="https://github.com/k6io/awesome-k6#readme" title="https://github.com/k6io/awesome-k6#readme" rel="noopener noreferrer"&gt;k6&lt;/a&gt; — Open-source, developer-centric performance monitoring and load testing solution.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bec0"&gt;&lt;a href="https://github.com/mxschmitt/awesome-playwright#readme" title="https://github.com/mxschmitt/awesome-playwright#readme" rel="noopener noreferrer"&gt;Playwright&lt;/a&gt; — Node.js library to automate Chromium, Firefox and WebKit with a single API.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8de7"&gt;&lt;a href="https://github.com/fityanos/awesome-quality-assurance-roadmap#readme" title="https://github.com/fityanos/awesome-quality-assurance-roadmap#readme" rel="noopener noreferrer"&gt;Quality Assurance Roadmap&lt;/a&gt; — How to start &amp;amp; build a career in software testing.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Miscellaneous
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="0219"&gt;&lt;a href="https://github.com/burningtree/awesome-json#readme" title="https://github.com/burningtree/awesome-json#readme" rel="noopener noreferrer"&gt;JSON&lt;/a&gt; — Text based data interchange format.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="fea1"&gt;&lt;a href="https://github.com/tmcw/awesome-geojson#readme" title="https://github.com/tmcw/awesome-geojson#readme" rel="noopener noreferrer"&gt;GeoJSON&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a8cc"&gt;&lt;a href="https://github.com/jdorfman/awesome-json-datasets#readme" title="https://github.com/jdorfman/awesome-json-datasets#readme" rel="noopener noreferrer"&gt;Datasets&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d3fc"&gt;&lt;a href="https://github.com/secretGeek/awesomeCSV#readme" title="https://github.com/secretGeek/awesomeCSV#readme" rel="noopener noreferrer"&gt;CSV&lt;/a&gt; — A text file format that stores tabular data and uses a comma to separate values.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1e86"&gt;&lt;a href="https://github.com/AchoArnold/discount-for-student-dev#readme" title="https://github.com/AchoArnold/discount-for-student-dev#readme" rel="noopener noreferrer"&gt;Discounts for Student Developers&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="195f"&gt;&lt;a href="https://github.com/kyleterry/awesome-radio#readme" title="https://github.com/kyleterry/awesome-radio#readme" rel="noopener noreferrer"&gt;Radio&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8433"&gt;&lt;a href="https://github.com/sindresorhus/awesome#readme" title="https://github.com/sindresorhus/awesome#readme" rel="noopener noreferrer"&gt;Awesome&lt;/a&gt; — Recursion illustrated.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5e63"&gt;&lt;a href="https://github.com/onurakpolat/awesome-analytics#readme" title="https://github.com/onurakpolat/awesome-analytics#readme" rel="noopener noreferrer"&gt;Analytics&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="64eb"&gt;&lt;a href="https://github.com/marmelab/awesome-rest#readme" title="https://github.com/marmelab/awesome-rest#readme" rel="noopener noreferrer"&gt;REST&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c5a5"&gt;&lt;a href="https://github.com/cicdops/awesome-ciandcd#readme" title="https://github.com/cicdops/awesome-ciandcd#readme" rel="noopener noreferrer"&gt;Continuous Integration and Continuous Delivery&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c5d8"&gt;&lt;a href="https://github.com/mmcgrana/services-engineering#readme" title="https://github.com/mmcgrana/services-engineering#readme" rel="noopener noreferrer"&gt;Services Engineering&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d60f"&gt;&lt;a href="https://github.com/ripienaar/free-for-dev#readme" title="https://github.com/ripienaar/free-for-dev#readme" rel="noopener noreferrer"&gt;Free for Developers&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a18f"&gt;&lt;a href="https://github.com/cyberglot/awesome-answers#readme" title="https://github.com/cyberglot/awesome-answers#readme" rel="noopener noreferrer"&gt;Answers&lt;/a&gt; — Stack Overflow, Quora, etc.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b35d"&gt;&lt;a href="https://github.com/diessica/awesome-sketch#readme" title="https://github.com/diessica/awesome-sketch#readme" rel="noopener noreferrer"&gt;Sketch&lt;/a&gt; — Design app for macOS.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="778d"&gt;&lt;a href="https://github.com/melvin0008/awesome-projects-boilerplates#readme" title="https://github.com/melvin0008/awesome-projects-boilerplates#readme" rel="noopener noreferrer"&gt;Boilerplate Projects&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="297f"&gt;&lt;a href="https://github.com/matiassingers/awesome-readme#readme" title="https://github.com/matiassingers/awesome-readme#readme" rel="noopener noreferrer"&gt;Readme&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a9e4"&gt;&lt;a href="https://github.com/NARKOZ/guides#readme" title="https://github.com/NARKOZ/guides#readme" rel="noopener noreferrer"&gt;Design and Development Guides&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="30f9"&gt;&lt;a href="https://github.com/kilimchoi/engineering-blogs#readme" title="https://github.com/kilimchoi/engineering-blogs#readme" rel="noopener noreferrer"&gt;Software Engineering Blogs&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="daab"&gt;&lt;a href="https://github.com/awesome-selfhosted/awesome-selfhosted#readme" title="https://github.com/awesome-selfhosted/awesome-selfhosted#readme" rel="noopener noreferrer"&gt;Self Hosted&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6b36"&gt;&lt;a href="https://github.com/DataDaoDe/awesome-foss-apps#readme" title="https://github.com/DataDaoDe/awesome-foss-apps#readme" rel="noopener noreferrer"&gt;FOSS Production Apps&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="ed4e"&gt;&lt;a href="https://github.com/alferov/awesome-gulp#readme" title="https://github.com/alferov/awesome-gulp#readme" rel="noopener noreferrer"&gt;Gulp&lt;/a&gt; — Task runner.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="081e"&gt;&lt;a href="https://github.com/sindresorhus/amas#readme" title="https://github.com/sindresorhus/amas#readme" rel="noopener noreferrer"&gt;AMA&lt;/a&gt; — Ask Me Anything.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1637"&gt;&lt;a href="https://github.com/stoeffel/awesome-ama-answers#readme" title="https://github.com/stoeffel/awesome-ama-answers#readme" rel="noopener noreferrer"&gt;Answers&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="854d"&gt;&lt;a href="https://github.com/ibaaj/awesome-OpenSourcePhotography#readme" title="https://github.com/ibaaj/awesome-OpenSourcePhotography#readme" rel="noopener noreferrer"&gt;Open Source Photography&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e5dd"&gt;&lt;a href="https://github.com/eug/awesome-opengl#readme" title="https://github.com/eug/awesome-opengl#readme" rel="noopener noreferrer"&gt;OpenGL&lt;/a&gt; — Cross-platform API for rendering 2D and 3D graphics.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="74d1"&gt;&lt;a href="https://github.com/chentsulin/awesome-graphql#readme" title="https://github.com/chentsulin/awesome-graphql#readme" rel="noopener noreferrer"&gt;GraphQL&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="47f6"&gt;&lt;a href="https://github.com/APA-Technology-Division/urban-and-regional-planning-resources#readme" title="https://github.com/APA-Technology-Division/urban-and-regional-planning-resources#readme" rel="noopener noreferrer"&gt;Urban &amp;amp; Regional Planning&lt;/a&gt; — Concerning the built environment and communities.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6a8f"&gt;&lt;a href="https://github.com/CUTR-at-USF/awesome-transit#readme" title="https://github.com/CUTR-at-USF/awesome-transit#readme" rel="noopener noreferrer"&gt;Transit&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="46b7"&gt;&lt;a href="https://github.com/emptymalei/awesome-research#readme" title="https://github.com/emptymalei/awesome-research#readme" rel="noopener noreferrer"&gt;Research Tools&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="130b"&gt;&lt;a href="https://github.com/fasouto/awesome-dataviz#readme" title="https://github.com/fasouto/awesome-dataviz#readme" rel="noopener noreferrer"&gt;Data Visualization&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d2db"&gt;&lt;a href="https://github.com/vinkla/shareable-links#readme" title="https://github.com/vinkla/shareable-links#readme" rel="noopener noreferrer"&gt;Social Media Share Links&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e66e"&gt;&lt;a href="https://github.com/mfornos/awesome-microservices#readme" title="https://github.com/mfornos/awesome-microservices#readme" rel="noopener noreferrer"&gt;Microservices&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="78d1"&gt;&lt;a href="https://github.com/jagracey/Awesome-Unicode#readme" title="https://github.com/jagracey/Awesome-Unicode#readme" rel="noopener noreferrer"&gt;Unicode&lt;/a&gt; — Unicode standards, quirks, packages and resources.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6f32"&gt;&lt;a href="https://github.com/Codepoints/awesome-codepoints#readme" title="https://github.com/Codepoints/awesome-codepoints#readme" rel="noopener noreferrer"&gt;Code Points&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="33b2"&gt;&lt;a href="https://github.com/MunGell/awesome-for-beginners#readme" title="https://github.com/MunGell/awesome-for-beginners#readme" rel="noopener noreferrer"&gt;Beginner-Friendly Projects&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="691a"&gt;&lt;a href="https://github.com/gamontal/awesome-katas#readme" title="https://github.com/gamontal/awesome-katas#readme" rel="noopener noreferrer"&gt;Katas&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bdb1"&gt;&lt;a href="https://github.com/drewrwilson/toolsforactivism#readme" title="https://github.com/drewrwilson/toolsforactivism#readme" rel="noopener noreferrer"&gt;Tools for Activism&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="64c1"&gt;&lt;a href="https://github.com/dylanrees/citizen-science#readme" title="https://github.com/dylanrees/citizen-science#readme" rel="noopener noreferrer"&gt;Citizen Science&lt;/a&gt; — For community-based and non-institutional scientists.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1746"&gt;&lt;a href="https://github.com/hobbyquaker/awesome-mqtt#readme" title="https://github.com/hobbyquaker/awesome-mqtt#readme" rel="noopener noreferrer"&gt;MQTT&lt;/a&gt; — “Internet of Things” connectivity protocol.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c7b3"&gt;&lt;a href="https://github.com/daviddias/awesome-hacking-locations#readme" title="https://github.com/daviddias/awesome-hacking-locations#readme" rel="noopener noreferrer"&gt;Hacking Spots&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="dd14"&gt;&lt;a href="https://github.com/cristianoliveira/awesome4girls#readme" title="https://github.com/cristianoliveira/awesome4girls#readme" rel="noopener noreferrer"&gt;For Girls&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d88f"&gt;&lt;a href="https://github.com/vorpaljs/awesome-vorpal#readme" title="https://github.com/vorpaljs/awesome-vorpal#readme" rel="noopener noreferrer"&gt;Vorpal&lt;/a&gt; — Node.js CLI framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="57a5"&gt;&lt;a href="https://github.com/vinjn/awesome-vulkan#readme" title="https://github.com/vinjn/awesome-vulkan#readme" rel="noopener noreferrer"&gt;Vulkan&lt;/a&gt; — Low-overhead, cross-platform 3D graphics and compute API.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3b41"&gt;&lt;a href="https://github.com/egeerardyn/awesome-LaTeX#readme" title="https://github.com/egeerardyn/awesome-LaTeX#readme" rel="noopener noreferrer"&gt;LaTeX&lt;/a&gt; — Typesetting language.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="825b"&gt;&lt;a href="https://github.com/antontarasenko/awesome-economics#readme" title="https://github.com/antontarasenko/awesome-economics#readme" rel="noopener noreferrer"&gt;Economics&lt;/a&gt; — An economist’s starter kit.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="bbb5"&gt;&lt;a href="https://github.com/sublimino/awesome-funny-markov#readme" title="https://github.com/sublimino/awesome-funny-markov#readme" rel="noopener noreferrer"&gt;Funny Markov Chains&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2b74"&gt;&lt;a href="https://github.com/danielecook/Awesome-Bioinformatics#readme" title="https://github.com/danielecook/Awesome-Bioinformatics#readme" rel="noopener noreferrer"&gt;Bioinformatics&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="b268"&gt;&lt;a href="https://github.com/hsiaoyi0504/awesome-cheminformatics#readme" title="https://github.com/hsiaoyi0504/awesome-cheminformatics#readme" rel="noopener noreferrer"&gt;Cheminformatics&lt;/a&gt; — Informatics techniques applied to problems in chemistry.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1362"&gt;&lt;a href="https://github.com/Siddharth11/Colorful#readme" title="https://github.com/Siddharth11/Colorful#readme" rel="noopener noreferrer"&gt;Colorful&lt;/a&gt; — Choose your next color scheme.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="08a9"&gt;&lt;a href="https://github.com/scholtzm/awesome-steam#readme" title="https://github.com/scholtzm/awesome-steam#readme" rel="noopener noreferrer"&gt;Steam&lt;/a&gt; — Digital distribution platform.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0f7e"&gt;&lt;a href="https://github.com/hackerkid/bots#readme" title="https://github.com/hackerkid/bots#readme" rel="noopener noreferrer"&gt;Bots&lt;/a&gt; — Building bots.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8747"&gt;&lt;a href="https://github.com/dastergon/awesome-sre#readme" title="https://github.com/dastergon/awesome-sre#readme" rel="noopener noreferrer"&gt;Site Reliability Engineering&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9aa8"&gt;&lt;a href="https://github.com/KimberlyMunoz/empathy-in-engineering#readme" title="https://github.com/KimberlyMunoz/empathy-in-engineering#readme" rel="noopener noreferrer"&gt;Empathy in Engineering&lt;/a&gt; — Building and promoting more compassionate engineering cultures.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2014"&gt;&lt;a href="https://github.com/xen0l/awesome-dtrace#readme" title="https://github.com/xen0l/awesome-dtrace#readme" rel="noopener noreferrer"&gt;DTrace&lt;/a&gt; — Dynamic tracing framework.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c868"&gt;&lt;a href="https://github.com/bvolpato/awesome-userscripts#readme" title="https://github.com/bvolpato/awesome-userscripts#readme" rel="noopener noreferrer"&gt;Userscripts&lt;/a&gt; — Enhance your browsing experience.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0065"&gt;&lt;a href="https://github.com/tobiasbueschel/awesome-pokemon#readme" title="https://github.com/tobiasbueschel/awesome-pokemon#readme" rel="noopener noreferrer"&gt;Pokémon&lt;/a&gt; — Pokémon and Pokémon GO.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f39b"&gt;&lt;a href="https://github.com/exAspArk/awesome-chatops#readme" title="https://github.com/exAspArk/awesome-chatops#readme" rel="noopener noreferrer"&gt;ChatOps&lt;/a&gt; — Managing technical and business operations through a chat.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9876"&gt;&lt;a href="https://github.com/kdeldycke/awesome-falsehood#readme" title="https://github.com/kdeldycke/awesome-falsehood#readme" rel="noopener noreferrer"&gt;Falsehood&lt;/a&gt; — Falsehoods programmers believe in.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3992"&gt;&lt;a href="https://github.com/heynickc/awesome-ddd#readme" title="https://github.com/heynickc/awesome-ddd#readme" rel="noopener noreferrer"&gt;Domain-Driven Design&lt;/a&gt; — Software development approach for complex needs by connecting the implementation to an evolving model.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="603c"&gt;&lt;a href="https://github.com/woop/awesome-quantified-self#readme" title="https://github.com/woop/awesome-quantified-self#readme" rel="noopener noreferrer"&gt;Quantified Self&lt;/a&gt; — Self-tracking through technology.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1e78"&gt;&lt;a href="https://github.com/hbokh/awesome-saltstack#readme" title="https://github.com/hbokh/awesome-saltstack#readme" rel="noopener noreferrer"&gt;SaltStack&lt;/a&gt; — Python-based config management system.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d2c9"&gt;&lt;a href="https://github.com/nicolesaidy/awesome-web-design#readme" title="https://github.com/nicolesaidy/awesome-web-design#readme" rel="noopener noreferrer"&gt;Web Design&lt;/a&gt; — For digital designers.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="4190"&gt;&lt;a href="https://github.com/terkelg/awesome-creative-coding#readme" title="https://github.com/terkelg/awesome-creative-coding#readme" rel="noopener noreferrer"&gt;Creative Coding&lt;/a&gt; — Programming something expressive instead of something functional.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e36e"&gt;&lt;a href="https://github.com/aviaryan/awesome-no-login-web-apps#readme" title="https://github.com/aviaryan/awesome-no-login-web-apps#readme" rel="noopener noreferrer"&gt;No-Login Web Apps&lt;/a&gt; — Web apps that work without login.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5e22"&gt;&lt;a href="https://github.com/johnjago/awesome-free-software#readme" title="https://github.com/johnjago/awesome-free-software#readme" rel="noopener noreferrer"&gt;Free Software&lt;/a&gt; — Free as in freedom.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9002"&gt;&lt;a href="https://github.com/podo/awesome-framer#readme" title="https://github.com/podo/awesome-framer#readme" rel="noopener noreferrer"&gt;Framer&lt;/a&gt; — Prototyping interactive UI designs.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7231"&gt;&lt;a href="https://github.com/BubuAnabelas/awesome-markdown#readme" title="https://github.com/BubuAnabelas/awesome-markdown#readme" rel="noopener noreferrer"&gt;Markdown&lt;/a&gt; — Markup language.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="56d9"&gt;&lt;a href="https://github.com/mislavcimpersak/awesome-dev-fun#readme" title="https://github.com/mislavcimpersak/awesome-dev-fun#readme" rel="noopener noreferrer"&gt;Dev Fun&lt;/a&gt; — Funny developer projects.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e720"&gt;&lt;a href="https://github.com/kakoni/awesome-healthcare#readme" title="https://github.com/kakoni/awesome-healthcare#readme" rel="noopener noreferrer"&gt;Healthcare&lt;/a&gt; — Open source healthcare software for facilities, providers, developers, policy experts, and researchers.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2dc2"&gt;&lt;a href="https://github.com/DavidLambauer/awesome-magento2#readme" title="https://github.com/DavidLambauer/awesome-magento2#readme" rel="noopener noreferrer"&gt;Magento 2&lt;/a&gt; — Open Source eCommerce built with PHP.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="8bae"&gt;&lt;a href="https://github.com/xiaohanyu/awesome-tikz#readme" title="https://github.com/xiaohanyu/awesome-tikz#readme" rel="noopener noreferrer"&gt;TikZ&lt;/a&gt; — Graph drawing packages for TeX/LaTeX/ConTeXt.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="50d0"&gt;&lt;a href="https://github.com/analyticalmonk/awesome-neuroscience#readme" title="https://github.com/analyticalmonk/awesome-neuroscience#readme" rel="noopener noreferrer"&gt;Neuroscience&lt;/a&gt; — Study of the nervous system and brain.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="36e9"&gt;&lt;a href="https://github.com/johnjago/awesome-ad-free#readme" title="https://github.com/johnjago/awesome-ad-free#readme" rel="noopener noreferrer"&gt;Ad-Free&lt;/a&gt; — Ad-free alternatives.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="04ec"&gt;&lt;a href="https://github.com/angrykoala/awesome-esolangs#readme" title="https://github.com/angrykoala/awesome-esolangs#readme" rel="noopener noreferrer"&gt;Esolangs&lt;/a&gt; — Programming languages designed for experimentation or as jokes rather than actual use.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="54e2"&gt;&lt;a href="https://github.com/roaldnefs/awesome-prometheus#readme" title="https://github.com/roaldnefs/awesome-prometheus#readme" rel="noopener noreferrer"&gt;Prometheus&lt;/a&gt; — Open-source monitoring system.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="fa3c"&gt;&lt;a href="https://github.com/homematic-community/awesome-homematic#readme" title="https://github.com/homematic-community/awesome-homematic#readme" rel="noopener noreferrer"&gt;Homematic&lt;/a&gt; — Smart home devices.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9db6"&gt;&lt;a href="https://github.com/sfischer13/awesome-ledger#readme" title="https://github.com/sfischer13/awesome-ledger#readme" rel="noopener noreferrer"&gt;Ledger&lt;/a&gt; — Double-entry accounting on the command-line.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0699"&gt;&lt;a href="https://github.com/thomasbnt/awesome-web-monetization#readme" title="https://github.com/thomasbnt/awesome-web-monetization#readme" rel="noopener noreferrer"&gt;Web Monetization&lt;/a&gt; — A free open web standard service that allows you to send money directly in your browser.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a0ed"&gt;&lt;a href="https://github.com/johnjago/awesome-uncopyright#readme" title="https://github.com/johnjago/awesome-uncopyright#readme" rel="noopener noreferrer"&gt;Uncopyright&lt;/a&gt; — Public domain works.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="25b4"&gt;&lt;a href="https://github.com/Zheaoli/awesome-coins#readme" title="https://github.com/Zheaoli/awesome-coins#readme" rel="noopener noreferrer"&gt;Crypto Currency Tools &amp;amp; Algorithms&lt;/a&gt; — Digital currency where encryption is used to regulate the generation of units and verify transfers.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c1c4"&gt;&lt;a href="https://github.com/folkswhocode/awesome-diversity#readme" title="https://github.com/folkswhocode/awesome-diversity#readme" rel="noopener noreferrer"&gt;Diversity&lt;/a&gt; — Creating a more inclusive and diverse tech community.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5801"&gt;&lt;a href="https://github.com/zachflower/awesome-open-source-supporters#readme" title="https://github.com/zachflower/awesome-open-source-supporters#readme" rel="noopener noreferrer"&gt;Open Source Supporters&lt;/a&gt; — Companies that offer their tools and services for free to open source projects.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="ddd6"&gt;&lt;a href="https://github.com/robinstickel/awesome-design-principles#readme" title="https://github.com/robinstickel/awesome-design-principles#readme" rel="noopener noreferrer"&gt;Design Principles&lt;/a&gt; — Create better and more consistent designs and experiences.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="91fc"&gt;&lt;a href="https://github.com/johnjago/awesome-theravada#readme" title="https://github.com/johnjago/awesome-theravada#readme" rel="noopener noreferrer"&gt;Theravada&lt;/a&gt; — Teachings from the Theravada Buddhist tradition.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5ba8"&gt;&lt;a href="https://github.com/inspectit-labs/awesome-inspectit#readme" title="https://github.com/inspectit-labs/awesome-inspectit#readme" rel="noopener noreferrer"&gt;inspectIT&lt;/a&gt; — Open source Java app performance management tool.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="ccc7"&gt;&lt;a href="https://github.com/nayafia/awesome-maintainers#readme" title="https://github.com/nayafia/awesome-maintainers#readme" rel="noopener noreferrer"&gt;Open Source Maintainers&lt;/a&gt; — The experience of being an open source maintainer.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d978"&gt;&lt;a href="https://github.com/xxczaki/awesome-calculators#readme" title="https://github.com/xxczaki/awesome-calculators#readme" rel="noopener noreferrer"&gt;Calculators&lt;/a&gt; — Calculators for every platform.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="3b1a"&gt;&lt;a href="https://github.com/ZYSzys/awesome-captcha#readme" title="https://github.com/ZYSzys/awesome-captcha#readme" rel="noopener noreferrer"&gt;Captcha&lt;/a&gt; — A type of challenge–response test used in computing to determine whether or not the user is human.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c558"&gt;&lt;a href="https://github.com/markusschanta/awesome-jupyter#readme" title="https://github.com/markusschanta/awesome-jupyter#readme" rel="noopener noreferrer"&gt;Jupyter&lt;/a&gt; — Create and share documents that contain code, equations, visualizations and narrative text.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6bd9"&gt;&lt;a href="https://github.com/andrewda/awesome-frc#readme" title="https://github.com/andrewda/awesome-frc#readme" rel="noopener noreferrer"&gt;FIRST Robotics Competition&lt;/a&gt; — International high school robotics championship.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1663"&gt;&lt;a href="https://github.com/humanetech-community/awesome-humane-tech#readme" title="https://github.com/humanetech-community/awesome-humane-tech#readme" rel="noopener noreferrer"&gt;Humane Technology&lt;/a&gt; — Open source projects that help improve society.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="dcd5"&gt;&lt;a href="https://github.com/karlhorky/awesome-speakers#readme" title="https://github.com/karlhorky/awesome-speakers#readme" rel="noopener noreferrer"&gt;Speakers&lt;/a&gt; — Conference and meetup speakers in the programming and design community.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="7f2e"&gt;&lt;a href="https://github.com/edm00se/awesome-board-games#readme" title="https://github.com/edm00se/awesome-board-games#readme" rel="noopener noreferrer"&gt;Board Games&lt;/a&gt; — Table-top gaming fun for all.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1414"&gt;&lt;a href="https://github.com/uraimo/awesome-software-patreons#readme" title="https://github.com/uraimo/awesome-software-patreons#readme" rel="noopener noreferrer"&gt;Software Patreons&lt;/a&gt; — Fund individual programmers or the development of open source projects.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2035"&gt;&lt;a href="https://github.com/ecohealthalliance/awesome-parasite#readme" title="https://github.com/ecohealthalliance/awesome-parasite#readme" rel="noopener noreferrer"&gt;Parasite&lt;/a&gt; — Parasites and host-pathogen interactions.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="f632"&gt;&lt;a href="https://github.com/jzarca01/awesome-food#readme" title="https://github.com/jzarca01/awesome-food#readme" rel="noopener noreferrer"&gt;Food&lt;/a&gt; — Food-related projects on GitHub.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="801c"&gt;&lt;a href="https://github.com/dreamingechoes/awesome-mental-health#readme" title="https://github.com/dreamingechoes/awesome-mental-health#readme" rel="noopener noreferrer"&gt;Mental Health&lt;/a&gt; — Mental health awareness and self-care in the software industry.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="2aac"&gt;&lt;a href="https://github.com/alexk111/awesome-bitcoin-payment-processors#readme" title="https://github.com/alexk111/awesome-bitcoin-payment-processors#readme" rel="noopener noreferrer"&gt;Bitcoin Payment Processors&lt;/a&gt; — Start accepting Bitcoin.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="995f"&gt;&lt;a href="https://github.com/nschloe/awesome-scientific-computing#readme" title="https://github.com/nschloe/awesome-scientific-computing#readme" rel="noopener noreferrer"&gt;Scientific Computing&lt;/a&gt; — Solving complex scientific problems using computers.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="73b4"&gt;&lt;a href="https://github.com/ScaleLeap/awesome-amazon-seller#readme" title="https://github.com/ScaleLeap/awesome-amazon-seller#readme" rel="noopener noreferrer"&gt;Amazon Sellers&lt;/a&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a3b0"&gt;&lt;a href="https://github.com/brycejohnston/awesome-agriculture#readme" title="https://github.com/brycejohnston/awesome-agriculture#readme" rel="noopener noreferrer"&gt;Agriculture&lt;/a&gt; — Open source technology for farming and gardening.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="c965"&gt;&lt;a href="https://github.com/matttga/awesome-product-design#readme" title="https://github.com/matttga/awesome-product-design#readme" rel="noopener noreferrer"&gt;Product Design&lt;/a&gt; — Design a product from the initial concept to production.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6cde"&gt;&lt;a href="https://github.com/catalinmiron/awesome-prisma#readme" title="https://github.com/catalinmiron/awesome-prisma#readme" rel="noopener noreferrer"&gt;Prisma&lt;/a&gt; — Turn your database into a GraphQL API.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0e12"&gt;&lt;a href="https://github.com/simskij/awesome-software-architecture#readme" title="https://github.com/simskij/awesome-software-architecture#readme" rel="noopener noreferrer"&gt;Software Architecture&lt;/a&gt; — The discipline of designing and building software.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="d0df"&gt;&lt;a href="https://github.com/stevesong/awesome-connectivity-info#readme" title="https://github.com/stevesong/awesome-connectivity-info#readme" rel="noopener noreferrer"&gt;Connectivity Data and Reports&lt;/a&gt; — Better understand who has access to telecommunication and internet infrastructure and on what terms.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="0f55"&gt;&lt;a href="https://github.com/stackshareio/awesome-stacks#readme" title="https://github.com/stackshareio/awesome-stacks#readme" rel="noopener noreferrer"&gt;Stacks&lt;/a&gt; — Tech stacks for building different apps and features.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5d1e"&gt;&lt;a href="https://github.com/cytodata/awesome-cytodata#readme" title="https://github.com/cytodata/awesome-cytodata#readme" rel="noopener noreferrer"&gt;Cytodata&lt;/a&gt; — Image-based profiling of biological phenotypes for computational biologists.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="aee6"&gt;&lt;a href="https://github.com/davisonio/awesome-irc#readme" title="https://github.com/davisonio/awesome-irc#readme" rel="noopener noreferrer"&gt;IRC&lt;/a&gt; — Open source messaging protocol.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e1cb"&gt;&lt;a href="https://github.com/cenoura/awesome-ads#readme" title="https://github.com/cenoura/awesome-ads#readme" rel="noopener noreferrer"&gt;Advertising&lt;/a&gt; — Advertising and programmatic media for websites.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="e594"&gt;&lt;a href="https://github.com/philsturgeon/awesome-earth#readme" title="https://github.com/philsturgeon/awesome-earth#readme" rel="noopener noreferrer"&gt;Earth&lt;/a&gt; — Find ways to resolve the climate crisis.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="4814"&gt;&lt;a href="https://github.com/gruhn/awesome-naming#readme" title="https://github.com/gruhn/awesome-naming#readme" rel="noopener noreferrer"&gt;Naming&lt;/a&gt; — Naming things in computer science done right.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="11f3"&gt;&lt;a href="https://github.com/caufieldjh/awesome-bioie#readme" title="https://github.com/caufieldjh/awesome-bioie#readme" rel="noopener noreferrer"&gt;Biomedical Information Extraction&lt;/a&gt; — How to extract information from unstructured biomedical data and text.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="fa7e"&gt;&lt;a href="https://github.com/iipc/awesome-web-archiving#readme" title="https://github.com/iipc/awesome-web-archiving#readme" rel="noopener noreferrer"&gt;Web Archiving&lt;/a&gt; — An effort to preserve the Web for future generations.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5350"&gt;&lt;a href="https://github.com/schlessera/awesome-wp-cli#readme" title="https://github.com/schlessera/awesome-wp-cli#readme" rel="noopener noreferrer"&gt;WP-CLI&lt;/a&gt; — Command-line interface for WordPress.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="12a0"&gt;&lt;a href="https://github.com/mourarthur/awesome-credit-modeling#readme" title="https://github.com/mourarthur/awesome-credit-modeling#readme" rel="noopener noreferrer"&gt;Credit Modeling&lt;/a&gt; — Methods for classifying credit applicants into risk classes.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="45c8"&gt;&lt;a href="https://github.com/KeyboardInterrupt/awesome-ansible#readme" title="https://github.com/KeyboardInterrupt/awesome-ansible#readme" rel="noopener noreferrer"&gt;Ansible&lt;/a&gt; — A Python-based, open source IT configuration management and automation platform.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="1af0"&gt;&lt;a href="https://github.com/keller-mark/awesome-biological-visualizations#readme" title="https://github.com/keller-mark/awesome-biological-visualizations#readme" rel="noopener noreferrer"&gt;Biological Visualizations&lt;/a&gt; — Interactive visualization of biological data on the web.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="ae54"&gt;&lt;a href="https://github.com/aureooms/awesome-qr-code#readme" title="https://github.com/aureooms/awesome-qr-code#readme" rel="noopener noreferrer"&gt;QR Code&lt;/a&gt; — A type of matrix barcode that can be used to store and share a small amount of information.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="dcba"&gt;&lt;a href="https://github.com/sdassow/awesome-veganism#readme" title="https://github.com/sdassow/awesome-veganism#readme" rel="noopener noreferrer"&gt;Veganism&lt;/a&gt; — Making the plant-based lifestyle easy and accessible.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="9563"&gt;&lt;a href="https://github.com/mbiesiad/awesome-translations#readme" title="https://github.com/mbiesiad/awesome-translations#readme" rel="noopener noreferrer"&gt;Translations&lt;/a&gt; — The transfer of the meaning of a text from one language to another.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="705e"&gt;&lt;a href="https://github.com/dersvenhesse/awesome-scriptable#readme" title="https://github.com/dersvenhesse/awesome-scriptable#readme" rel="noopener noreferrer"&gt;Scriptable&lt;/a&gt; — An iOS app for automations in JavaScript.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Related
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;span id="20ca"&gt;&lt;a href="https://github.com/topics/awesome" title="https://github.com/topics/awesome" rel="noopener noreferrer"&gt;All Awesome Lists&lt;/a&gt; — All the Awesome lists on GitHub.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5d40"&gt;&lt;a href="https://awesome-indexed.mathew-davies.co.uk" title="https://awesome-indexed.mathew-davies.co.uk" rel="noopener noreferrer"&gt;Awesome Indexed&lt;/a&gt; — Search the Awesome dataset.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="94ff"&gt;&lt;a href="https://awesomelists.top" title="https://awesomelists.top" rel="noopener noreferrer"&gt;Awesome Search&lt;/a&gt; — Quick search for Awesome lists.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="6d5b"&gt;&lt;a href="https://github.com/basharovV/StumbleUponAwesome" title="https://github.com/basharovV/StumbleUponAwesome" rel="noopener noreferrer"&gt;StumbleUponAwesome&lt;/a&gt; — Discover random pages from the Awesome dataset using a browser extension.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="07c1"&gt;&lt;a href="https://github.com/umutphp/awesome-cli" title="https://github.com/umutphp/awesome-cli" rel="noopener noreferrer"&gt;Awesome CLI&lt;/a&gt; — A simple command-line tool to dive into Awesome lists.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="5761"&gt;&lt;a href="http://awesome.digitalbunker.dev" title="http://awesome.digitalbunker.dev" rel="noopener noreferrer"&gt;Awesome Viewer&lt;/a&gt; — A visualizer for all of the above Awesome lists.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;span id="a14d"&gt;&lt;a href="https://www.trackawesomelist.com" title="https://www.trackawesomelist.com" rel="noopener noreferrer"&gt;Track Awesome List&lt;/a&gt; — View the latest updates of Awesome lists.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
