Hora de un ⚡️#thread #Javascript

Una estructura de datos que enterramos saliendo de la escuela porque en lenguajes de alto nivel no es muy usada. Pero muchas de las estructuras que usamos la usan por dentro, y por ende es pilar de la programación.

Hablemos de Linked Lists!
Hace poco escuche una analogía que me gustó mucho para explicar linked lists.

Imaginemos que hiciste una mudanza. Clasificaste las cosas en cajas, y cada una de ellas tiene un post-it que indica donde está la siguiente caja.
De esta forma, para poder llegar a cualquier caja, tendremos que empezar desde la primera, e ir leyendo cada post-it hasta encontrar la que necesitemos.

Cada caja solo sabe su contenido y donde está la siguiente caja (y la anterior en el caso de una lista doblemente ligada)
Podemos acceder a una caja de forma directa? No! Solo desde la 1er caja podemos seguir el orden.

La ventaja? Podemos poner una caja en x lado, sin importar donde. Ya no estamos limitados por el espacio alrededor: si tenemos un rincón libre en la casa, ahí puede estar una caja.
Porque esto es ventaja? 📦

Pensemos en estructuras de datos.

Un array usa memoria contigua. Esto es que el sistema reserva memoria para guardar información. Aunque tengamos más memoria en el sistema, no podremos usarla porque no es vecina de la memoria que estamos usando
Una linked list usa memoria dinámica: esto es, que donde haya memoria libre, ahí se guardará información. Sin importar donde este. Para eso tenemos los post-its! Ellos nos dirán donde buscar.
Pues bien, en una linked list, la caja es lo que llamamos nodo.

Lo que contiene la caja son los datos. Y el post it es conocido como puntero, el cual es una referencia al nodo (caja) siguiente!
La estructura general de un linked list es:
- Cabeza: es el primer nodo, y es un auxiliar para ayudarnos a conocer como ir moviendonos en la estructura
- Nodo: contienen data y una referencia al siguiente nodo!

Y como sabemos que acabamos de recorrer la lista?
Sabemos que terminamos de recorrer la cuando encontramos un nodo que no tiene una referencia a otro nodo!
Hay varios métodos en un linked list!

- push
- pop
- get (recibe un index y regresa el contenido de ese nodo)
- delete (elimina un nodo de cierto index!)
Push

1) Recibimos como parámetro la nueva data
2) Creamos un nuevo nodo y asignamos la data que recibimos
3) Recorremos toda la lista hasta encontrar el último nodo
4) En lugar de que su referencia sea null, su nueva referencia va a ser... el nodo que creamos!
Pop
1) Recorremos la lista hasta llegar al último nodo
2) Conforme avanzamos, guardamos una referencia al nodo anterior
3) Cuando lleguemos al último nodo, sabemos que este es el vamos a eliminar. Usamos la referencia del anterior para reemplazar su puntero a null.
Cómo se ve un Linked List en código?

Tenemos dos clases: Nodo y LinkedList.

Linked List está a cargo de moverse a través de todos los nodos!

Empecemos con algo interesante: que tal si implementas tu la función get?

Recuerda: get recibe un index y regresa el dato de ese index!
Antes de concluir el thread: algo que siempre escucho es "para que aprendo linked lists si mi lenguaje hace todo por mi?"

Y es cierto! Lenguajes como Ruby y Javascript se hacen cargo de la memoria por ti.
Pero detrás de escenas, las estructuras que usamos como stack y queues usan Linked Lists para el manejo de memoria.

Conocer las bases de la programación nos ayuda a entender porque ocurren las cosas.
El próximo thread será de un ejercicio de leetcode que justamente gira en torno a resolver el problema con Linked List.

Pero no podemos trabajarlo sin explicar primero que herramienta tenemos a la mano!

Este es un accesorio más para nuestras batallas de código.
Y esto es todo! Nos vemos en otro ⚡️ #thread de: aprendiendo estructuras de datos y algoritmos para las entrevistas de trabajo en #FAANG.

🤓

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Charliezard ⚡️

Charliezard ⚡️ Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @charliesbot

6 Mar
Hora de un ⚡️ #thread! Hoy vamos a tocar un ejercicio de algoritmia bastante famoso en la entrevista de algoritmos y estructuras de datos!

Es un ejercicio para preparación en entrevistas #FAANG.

Este es nivel fácill, así que manos a la obra! #Javascript

leetcode.com/problems/valid…
Para este ejercicio, vamos a usar una estructura de datos que me gusta bastante, llamada Stack.

Si necesitas refrescar tu memoria, este video de 6 segundos nos dice lo básico de stacks!

El problema nos dice esto
- Nos van a enviar un string que contiene los caracteres '(', ')', '{', '}', '[' y ']'
- Una cadena es válida si para un símbolo que abre, existe su contraparte en el orden correcto
- De otra forma, es inválida
Read 24 tweets
19 Feb
Listos para un #thread⚡️ para preparación de entrevistas?

Toca una herramienta que preguntan en entrevista de #algoritmos en #SiliconValley / #FAANG.

Hoy vamos a hablar de binary search (búsqueda binaria) con #Javascript!

[1/x]
Binary Search nos ayuda a encontrar elementos en una lista de una forma super optimizada.

Imaginemos que tenemos esta lista, y tenemos que encontrar el número "36"

Qué formas se te ocurren para encontrarlo?
Mmm, se me ocurre usar:
- indexOf
- filter
- includes
- incluso un for común y corriente.

El problema de todas estas soluciones, es que tienen un costo en Big O lineal. Big O(n), donde n es el tamaño de la lista.

Podemos hacerlo mucho mejor!
Read 16 tweets
17 Feb
Ya hablamos de Debounce y Throttle en otros threads. Ambos son funciones que son parte de #lodash.

Ocurre que curry también está en lodash. Es una función poderosa para frontend y de functional programming!

Este es un tema #Javascript avanzado! 🤓

Qué es curry? Un ⚡️#thread
Antes que nada, tenemos que saber que curry es un concepto de functional programming (uno de mis temas favoritos!)

Imagina que tienes una función suma.

Suma recibe 3 argumentos y regresa la suma de ellos.
Es un caso super común! Pero qué tal si queremos tener la opción de enviarle los argumentos 1 a 1, en diferentes tiempos, y que se ejecute "mágicamente" hasta que tenga todos?

Esto es el concepto de curry, y en este caso es una "curried function"
Read 15 tweets
16 Feb
Ayer estaba hablando con un amigo que esta haciendo entrevistas en Silicon Valley, y me comentó que le pidieron programar un #throttle.

Este concepto es común que salga en la entrevista especializada de #frontend / #javascript.

Qué es #throttle? Un ⚡️ #Thread

[1/x]
La semana pasada hablamos de #debounce. #throttle es una función hermana de esta.

Throttle es una función que recibe 2 args: la función a ejecutar y un tiempo de bloqueo.

Cuando la función se ejecuta, el tiempo comienza a correr y bloquea cualquier otra ejecución.
Veamos el problema!

Tenemos una función que imprime texto en la consola.

El entrevistador solamente dirá: "ok, programa un throttle"

Si no sabes que es un throttle, te lo explicará. Pero son puntos menos, cuidado! 🚨

Throttle y debounce son tools básicas para todo frontend.
Read 10 tweets
15 Feb
Un breve spoiler del capítulo de hoy. Es uno de mis favoritos!

- José y yo tuvimos un path muy parecido. Yo apliqué a cerca de 20 empresas, de las cuales hice 12 entrevistas, todo en 3 semanas.

[1/x]
En este episodio platicamos la realidad de nuestro camino. Recibimos muchos mensajes donde nos piden el método que nos hizo lograr nuestras ofertas.

La verdad es que no hay método infalible. Lo que hicimos fue aplicar a todas las empresas que nos gustaban.
Nos preparamos con los algoritmos y estructuras de datos bajo el brazo. Pero las entrevistas son 70% preparación, 30% suerte.

La única forma de lograr entrar a todas estas empresas grandes es aplicando. El miedo siempre está ahí y no se va a ir por más que nos preparemos.
Read 4 tweets
11 Feb
Un feature #Javascript en stage 2 (que llegará pronto a una futura versión de #ECMAScript!

Finalmente vamos a tener estructuras de datos inmutables!: tuples y records ❤️

Un record es un objeto inmutable, y empiezan con "#"

Al tener inmutabilidad, podemos comparar 2 records!
Y una tuple es un array inmutable. Se declaran igual que un array, empezando con un "#".

También podemos comparar dos tuples sin pasos extras.
En Javascript no podiamos comparar 2 listas o 2 objetos de forma sencilla, porque al hacerlo se comparaba la referencia, no los valores.

Algunas esct. de datos inmutables tienen algoritmos para generar un id dependiendo su valor. Al comparar 2 estructuras, se comparan los ids.
Read 4 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!