Springer has released a bunch of books for free
Free Books of Springer PDFs (includes Skienna's The algorithm design manual)
Actualmente trabajo como Ingeniero de Software y Community Leader parte de la red de profesionales TOPTAL.
Springer has released a bunch of books for free
Free Books of Springer PDFs (includes Skienna's The algorithm design manual)
Contest window opens at: 13th September 2019, 19:00 hrs IST
Contest window closes at: 23rd September 2019, 19:00 hrs IST
Duration: 3 hours
Teoría recomendada para aprobar una entrevista de algoritmos (Coding Interview)
Toptal se conoce por su top 3% de ingenieros el cual es obtenido a través de severos filtros y rigurosas entrevistas. Para esta te sugerimos prepararte por lo menos con 1 o 2 meses de anticipación en áreas comunes de entrevistas, ya sea saber explicar tus proyectos pasados hasta poder codificar algoritmos en tiempo real.
Prepara los siguientes puntos antes de tu entrevista.
El consejo que les doy para aprender ingles de manera rapida y economica es seguir EngVid (https://www.engvid.com/) una pagina con varios canales en youtube donde explican muy bien gramática y pronunciación del inglés.
Una vez te sientas confiado no tengas miedo y contacta amigos que saben ingles para realizar charlas y entrevistas de simulacro, de esta forma ambos podran verse beneficiados frente a futuras entrevistas.
Para Algoritmos te recomendamos leas CrackingTheCodingInterview, con este libro fácilmente podrás prepararte para resolver problemas utilizando tu código.
Es muy importante que durante tu entrenamiento utilices el lenguaje con el cual quieres postular y posteriormente trabajar, aunque esto no es obligatorio (ej: puedes resolver problemas en C++ y hacer tu proyecto en JavaScript) puede darte puntos decisivos en tu postulación.
Antes de postular asegurate de resolver y practicar con los exámenes (similares a los que encontrarás en las entrevistas) que prepare anteriormente:
http://leagueofcoders.org/topic/12/practicas-para-coding-interviews
Algunos enlaces y videos recomendados
https://www.youtube.com/channel/UCxX9wt5FWQUAAz4UrysqK9A
https://www.youtube.com/channel/UC4xKdmAXFh4ACyhpiQ_3qBw
https://www.youtube.com/channel/UCOf7UPMHBjAavgD0Qw5q5ww
https://www.youtube.com/user/MIT/playlists
Es muy importante que tengas a la mano base para realizar un proyecto desde inicio a fin, en las entrevistas te dirán que programes un proyecto en la area que te estas postulando, donde se calificara tu código pero sobre todo la correcta implementación de todos los puntos/features deseados.
Para esto necesitas tener una base donde puedas avanzar rápido y que ya tenga un orden y estructura limpia y entendible para los entrevistadores.
Este proyecto necesita ser entregado funcionando por lo que también necesitas saber como ponerlo online, en otras palabras hacer un build completo y posterior deploy.
Si piensas entrar a trabajar como front-end puedes utilizar Firebase/Firestore para presentar tu proyecto final.
Una vez culmines tu entrenamiento y te sientas listo para postular utiliza el siguiente enlace de invitación/recomendación para crear tu cuenta.
Para cualquier consulta o duda contactame directamente:
whatsapp: +591 78917002
email: vudduu@gmail.com
facebook: https://www.facebook.com/vudduu
At Deutsche Bank, we’re designing and building the digital bank of the future and you could help shape that. We’re looking for innovative thinkers and curious minds to transform our business through advanced applications, challenging programming projects and cutting-edge tech like AI and blockchain.
Contest Link: https://app.codility.com/programmers/challenges/rubidium2018/
Una práctica que se vuelve común en nuestros días es que las aplicaciones puedan ser compatible con múltiples plataformas, es entonces donde teníamos dificultades para hacer funcionar nuestras aplicaciones diseñadas para la web (ReactDom) en dispositivos móviles por ejemplo (ReactNative).
Te presento un conjunto de pensamientos simples a la hora de desarrollar y de esta manera puedas reutilizar el código que tienes.
Una muy buena práctica que comparten los devs de AirBnb es de no utilizar el abanico de componentes en react-native, en otras palabras intenta hacer todo con los siguientes componentes.
Segun los desarrolladores que ya utilizan estas primitivas en sus proyectos, un 99% de los componentes necesarios para una aplicación funcional pueden ser totalmente completados con estos.
Siempre que hagas aplicaciones multiplataforma debes tener en cuenta no utilizar o manipular el DOM directamente, facil decir pero a veces complicado implementar.
En casos extremos donde estás obligado a utilizar el DOM puede que ayas considerado utilizar !!window
condición que dará true
en web y cuando utilices react-native dara false
. En muchos casos puede ser la solución pero si tienes acceso a la configuración de tu proyecto intenta configurar una variable de entorno !!process.env.REACT_DOM
de esta forma toma la responsabilidad de tu código y no de la ausencia de la variable window
.
Por último les dejo este video muy util y con buenos consejos y prácticas.
Video de Leland Richardson (AirBnb)
React as a Platform: A path towards a truly cross-platform UI - Leland Richardson
A la hora de estructurar folders y archivos en tu proyecto seguro te haz preguntado que tan amigable es el nombre que escogiste y algunas veces te preguntaras si alguien que está entrando a tu proyecto podrá entender la estructura y encontrar las diferentes secciones de la aplicación.
https://reactjs.org/docs/faq-structure.html nos algunas pautas de como debemos organizarnos y al mismo tiempo si utilizamos create-react-app nos dara una estructura inicial que es muy común en los proyectos en React dando a todos los desarrolladores una fácil detección de ciertas areas de codigo.
A la hora de nombrar nuestras carpetas debemos considerar esta regla o al menos intentar nombrar nuestros archivos con una clara idea de lo que contienen eslint-plugin-filenames.
Ahora hablemos de LIFT una serie de buenas practicas a la hora de elegir nombres de archivos, carpetas y la estructura general de la applicacion.
LIFT siempre debe estar en nuestro pensamiento a la hora de crear nuevos archivos y folders. Estas de acuerdo ?
Type: NP-hard problem
CONTEST PAGE: https://kiwi2018.sphere-contest.com/
Las listas son una de las estructuras básicas para resolver problemas implementando algoritmos.
A continuación un ejemplo del uso basico de una lista.
#include <iostream>
#include <list>
int main () {
int arrayInts[] = { 75, 23, 65, 42, 13 };
// crea una lista a partir del array
std::list<int> milista (arrayInts, arrayInts + 5);
milista.push_back(10); // aumenta el numero 10 a la milista.
std::cout << "milista contiene:";
// crea un iterador para recorrer milista.
std::list<int>::iterator it;
// milista.begin() retorna un iterador apuntando al inicio de milista.
// milista.end() retorna un iterador apuntando al final de milista.
for (it = milista.begin(); it != milista.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
}
El anterior código imprime como resultado en consola:
milista contiene: 75 23 65 42 13 10
Por el momento no vimos ninguna diferencia entre una lista y un vector o array, pero las listas tienen una gran ventaja a la hora de insertar nuevos números en medio de la lista y también a hora de eliminar números en la lista.
La complejidad para insertar un número es de $O(1)$ pero es necesario tener un iterador en el lugar donde necesitas insertar el número entonces si necesitas llegar desde el inicio de la lista buscando un numero en especial necesitarás $O(p)$ pasos utilizando un it++
para ir avanzando.
Al igual que insertar para eliminar un valor es necesario un iterador ya que una lista no tiene índices al igual que un array pero si ya estas apuntando al nodo que necesitas eliminar entonces la complejidad será $O(1)$
#include <iostream>
#include <list>
#include <vector>
int main () {
std::list<int> mylist;
std::list<int>::iterator it;
// aca añadimos los valores iniciales
for (int i=1; i<=5; ++i) mylist.push_back(i); // 1 2 3 4 5
// begin() retorna un puntero al primer valor ^
it = mylist.begin();
++it; // "it" apunta al numero 2 ^
mylist.insert (it, 10); // 1 10 2 3 4 5
// "it" aun apunta al numero 2 ^
mylist.insert (it, 2, 20); // 1 10 20 20 2 3 4 5
--it; // "it" ahora apunta al segundo 20 ^
std::vector<int> myvector (2, 30);
mylist.insert (it,myvector.begin(), myvector.end());
// 1 10 20 30 30 20 2 3 4 5
// ^
std::cout << "mylist contiene:";
for (it=mylist.begin(); it!=mylist.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
El anterior código imprime lo siguiente en la consola:
mylist contiene: 1 10 20 30 30 20 2 3 4 5
Cuando utilizo C++ y no recuerdo o necesito buscar algunas estructuras o funciones utilizó cplusplus.com y en este caso los ejemplos fueron una traducción de esta página.
referencias:
cplusplus list