Junior Flashcards
Explique e dê um exemplo do que é O(1) - Constant Time Complexity
É um algoritmo que é executado em constant time/space independente do tamanho do input.
Exemplo: Acessar qualquer elemento de uma array pelo seu index.
Explique e dê exemplo do que é O(log n) - Logarithmic Time Complexity
Descreve um algoritmo que enquanto o input dobra de tamanho o tempo de execução aumenta pouco.
Exemplo: Binary search numa array em ordem. O input vai ser sempre dividido ao meio, não importando o tamanho da array, sendo mais eficiente que percorrer toda a array várias vezes.
Explique e dê exemplo do que é O(n) - Linear Time Complexity
A complexidade do algoritmo cresce linearmente com o tamanho do input dado.
Exemplo: Percorrer uma array item por item.
Explique e dê exemplo do que é O(n log n) - Linear algorithmic Time Complexity
É um algoritmo que mistura o crescimento linear com o crescimento logaritmico.
Exemplo: Merge Sort. Onde se é divido a array em metades O(n) e depois vão se juntando as metades recursivamente (n log n) colocando elas em ordem.
Explique e dê exemplo do que é O(n^2) - Quadratic Time Complexity
É um algoritmo que aumenta de complexidade ao quadrado do tamanho do input.
Exemplo: Nested loops.
Explique e dê exemplo do que é O(n!) - Factorial Time Complexity
A complexidade do algoritmo cresce fatorialmente com o tamanho do input.
Exemplo: Brute force para descobrir todas as possibilidades de permuta e combinações de uma array.
Por que linguagens interpretadas são “mais lentas” que as compiladas?
- Linguagens compiladas passam pelo compilador que fazem a leitura do código na íntegra onde o compilador pode fazer otimizações mais agressivas;
- Linguagens interpretadas passam pelo interpretador que lê o código linha por linha e não consegue fazer a melhor otimização porque ele não sabe o que vem a seguir;
- Resumindo: Linguagens compiladas sofrem uma otimização bytewise (eficiente) e as interpretadas não.
O que significa CRUD?
Create
Read
Update
Delete
O que é uma API? Dê um exemplo prático ou use um paralelo.
Application Program Interface
API é um mensageiro que pega uma requisição do usuário, diz ao sistema o que o usuário requisitou e leva a resposta.
Ex: Um garçom.
O que é o ambiente REST?
REpresentation State Transfer
- Mudanças no código do lado do Client não afetam o lado do Servidor e vice-versa;
- Usa o URL como ponto de acesso ao Servidor. E.g: http://www.example.com/users/1. O users é o resource acessado no id 1;
- URL mais legível visto que existe uma hierarquia a ser seguida.
Quais os métodos HTTP correspondem ao CRUD no ambiente REST?
Create = Post (Status code: 201 CREATED) Create a new Resource;
Read = Get (Status code: 200 OK) Gets the resource;
Update = Put (Status code: 200 OK) Update a resource;
Delete = Delete (Status code: 204 NO CONTENT) Delete a resource.
Quais são os pontos negativos e positivos de se adotar a implementação de uma API REST
API REST (Positivos):
- Padrão HTTP;
- Stateless = Cada request é isolado e independentes;
- Cache = Facilita a utilização;
- Dados transferidos via JSON ou XML;
- Maturidade = Quase todos os frameworks tem capacidade de criar uma API REST;
- Dev pool = Por ser de +- 2000, muitos devs sabem ou pelo menos tem conhecimento dela;
- Custo inicial baixo.
API REST (Negativos):
- Over fetching = Não se ter um retorno de uma request específica sem trazer todo o JSON de onde a informação está. Ex: request{nome, foto}, fetch JSON {nome, foto, email, telefone,…);
- Múltiplas chamadas, principalmente se estiverem usando serviços diferentes pra cada um.
O que é Cache?
Armazenamento de dados frequentes em memória local por um período determinado.
Por que usar Cache?
Porque o usuário não precisa fazer uma requisição pro Server side toda vez que precisar acessar determinado dado recorrente novamente. Mais rápido, diminuição de tráfego e uso de banda.
O que significa CDN?
Content Delivery Network
Por que a CDN existe?
- Melhor escalabilidade dos sites;
- Melhora significativamente a latência usando Cache;
- Resolve o problema de transferência de dados intercontinentais;
- Lida muito bem com grandes volumes de tráfego repentino;
- Melhora a segurança contra DDoS etc;
- Distribui tráfego através de múltiplos servers prevenindo sobrecarga;
- Data centers com recursos limitados.
O que é o Redis?
Plataforma de armazenamento de dados em memória (cache).
Quais os pontos positivos do Redis?
- Acesso rápido aos dados. Ex: Aplicações em tempo real ou cache;
- Versatilidade em armazenar dados como: strings, lists, sets, hashes;
- Open Source;
- Acesso a um volume muito grande de dados por ser NoSQL.
Quais são as 3 responsabilidades da autenticação?
1 - Gerenciar a comunicação entre humano - máquina ou user-computer;
2 - Verificar a identidade do usuário;
3 - Aprovar ou não a autenticação para que o sistema possa dar prosseguimento.
Cite 3 fatores de autenticação.
- Fator de conhecimento: username, senha, número pin;
- Fator posse: One-time password, Identidade ou tokens físicos;
- Fator herança: digital e reconhecimento facial.
O que é SSO e qual sua utilidade?
Single Sign On é vastamente utilizado para múltiplos logins de diferentes serviços de uma mesma empresa, por exemplo o Google, onde uma vez logado, o usuário tem acesso a todos os seus serviços.
O que é JWT?
Json Web Token
É um meio compacto e seguro se transmitir informações entre as parte via JSON Object.
Quando você deve usar JWT?
Autorizações - Cada subsequente requisição já irá conter o JWT. Ex: Google;
Troca de informações - Quando JWT é usado em chaves public/private onde quem fez a requisição já é conhecido.
Por que usar JWT?
- Compacto comparado a Simple Web Tokens (SWT) e Security Assertion Markup Language Tokens (SAML);
- Utiliza o próprio JWT desde o POST (user/password) para fazer a autenticação no server. Ex: POST > User JWT > Browser > Request with JWT > Verify JWT > Send Response;
- Sessão do JWT salva no server side, abrindo possibilidades de usar SSO.